about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/engine/client/client.cpp4
-rw-r--r--src/engine/config_variables.h1
-rw-r--r--src/engine/network.cpp8
-rw-r--r--src/engine/network.h8
-rw-r--r--src/engine/server/server.cpp16
-rw-r--r--src/mastersrv/mastersrv.cpp10
-rw-r--r--src/tools/crapnet.cpp4
7 files changed, 36 insertions, 15 deletions
diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp
index fa00dcc1..e864a24f 100644
--- a/src/engine/client/client.cpp
+++ b/src/engine/client/client.cpp
@@ -784,7 +784,9 @@ static void client_run(const char *direct_connect_server)
 	modmenu_init(); // TODO: remove
 	
 	// open socket
-	net.open(0, 0);
+	NETADDR4 bindaddr;
+	mem_zero(&bindaddr, sizeof(bindaddr));
+	net.open(bindaddr, 0);
 	
 	//
 	net_host_lookup(config.masterserver, MASTERSERVER_PORT, &master_server);
diff --git a/src/engine/config_variables.h b/src/engine/config_variables.h
index 4919af0b..b8f11c32 100644
--- a/src/engine/config_variables.h
+++ b/src/engine/config_variables.h
@@ -22,5 +22,6 @@ MACRO_CONFIG_INT(gfx_texture_quality, 1, 0, 1)
 MACRO_CONFIG_STR(masterserver, 128, "master.teewars.com")
 
 MACRO_CONFIG_STR(sv_name, 128, "unnamed server")
+MACRO_CONFIG_STR(sv_bindaddr, 128, "")
 MACRO_CONFIG_INT(sv_port, 8303, 0, 0)
 MACRO_CONFIG_INT(sv_sendheartbeats, 1, 0, 1)
diff --git a/src/engine/network.cpp b/src/engine/network.cpp
index 41d0367d..d38b825e 100644
--- a/src/engine/network.cpp
+++ b/src/engine/network.cpp
@@ -461,11 +461,11 @@ static int check_packet(unsigned char *buffer, int size, NETPACKETDATA *packet)
 	return 0;
 }
 
-NETSERVER *net_server_open(int port, int max_clients, int flags)
+NETSERVER *net_server_open(NETADDR4 bindaddr, int max_clients, int flags)
 {
 	NETSERVER *server = (NETSERVER *)mem_alloc(sizeof(NETSERVER), 1);
 	mem_zero(server, sizeof(NETSERVER));
-	server->socket = net_udp4_create(port);
+	server->socket = net_udp4_create(bindaddr);
 	
 	for(int i = 0; i < NETWORK_MAX_CLIENTS; i++)
 		conn_init(&server->slots[i].conn, server->socket);
@@ -673,11 +673,11 @@ void net_server_stats(NETSERVER *s, NETSTATS *stats)
 }
 
 //
-NETCLIENT *net_client_open(int port, int flags)
+NETCLIENT *net_client_open(NETADDR4 bindaddr, int flags)
 {
 	NETCLIENT *client = (NETCLIENT *)mem_alloc(sizeof(NETCLIENT), 1);
 	mem_zero(client, sizeof(NETCLIENT));
-	client->socket = net_udp4_create(port);
+	client->socket = net_udp4_create(bindaddr);
 	conn_init(&client->conn, client->socket);
 	return client;
 }
diff --git a/src/engine/network.h b/src/engine/network.h
index adcd6d38..1bb02c1a 100644
--- a/src/engine/network.h
+++ b/src/engine/network.h
@@ -36,7 +36,7 @@ enum
 };
 
 // server side
-NETSERVER *net_server_open(int port, int max_clients, int flags);
+NETSERVER *net_server_open(NETADDR4 bindaddr, int max_clients, int flags);
 int net_server_recv(NETSERVER *s, NETPACKET *packet);
 int net_server_send(NETSERVER *s, NETPACKET *packet);
 int net_server_close(NETSERVER *s);
@@ -47,7 +47,7 @@ int net_server_delclient(NETSERVER *s); // -1 when no more, else, client id
 void net_server_stats(NETSERVER *s, NETSTATS *stats);
 
 // client side
-NETCLIENT *net_client_open(int port, int flags);
+NETCLIENT *net_client_open(NETADDR4 bindaddr, int flags);
 int net_client_disconnect(NETCLIENT *c, const char *reason);
 int net_client_connect(NETCLIENT *c, NETADDR4 *addr);
 int net_client_recv(NETCLIENT *c, NETPACKET *packet);
@@ -68,7 +68,7 @@ public:
 	net_server() : ptr(0) {}
 	~net_server() { close(); }
 	
-	int open(int port, int max, int flags) { ptr = net_server_open(port, max, flags); return ptr != 0; }
+	int open(NETADDR4 bindaddr, int max, int flags) { ptr = net_server_open(bindaddr, max, flags); return ptr != 0; }
 	int close() { int r = net_server_close(ptr); ptr = 0; return r; }
 	
 	int recv(NETPACKET *packet) { return net_server_recv(ptr, packet); }
@@ -90,7 +90,7 @@ public:
 	net_client() : ptr(0) {}
 	~net_client() { close(); }
 	
-	int open(int port, int flags) { ptr = net_client_open(port, flags); return ptr != 0; }
+	int open(NETADDR4 bindaddr, int flags) { ptr = net_client_open(bindaddr, flags); return ptr != 0; }
 	int close() { int r = net_client_close(ptr); ptr = 0; return r; }
 	
 	int connect(NETADDR4 *addr) { return net_client_connect(ptr, addr); }
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index fa64c5dd..36dd6db3 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -158,9 +158,21 @@ public:
 			dbg_msg("server", "failed to load map. mapname='%s'", mapname);
 			return false;
 		}
-
+		
 		// start server
-		if(!net.open(8303, 0, 0))
+		NETADDR4 bindaddr;
+
+		if(strlen(config.sv_bindaddr) && net_host_lookup(config.sv_bindaddr, config.sv_port, &bindaddr) != 0)
+		{
+			// sweet!	
+		}
+		else
+		{
+			mem_zero(&bindaddr, sizeof(bindaddr));
+			bindaddr.port = config.sv_port;
+		}
+		
+		if(!net.open(bindaddr, 0, 0))
 		{
 			dbg_msg("network/server", "couldn't open socket");
 			return false;
diff --git a/src/mastersrv/mastersrv.cpp b/src/mastersrv/mastersrv.cpp
index 78f43a87..6c6f3ddf 100644
--- a/src/mastersrv/mastersrv.cpp
+++ b/src/mastersrv/mastersrv.cpp
@@ -160,8 +160,14 @@ void purge_servers()
 
 int main(int argc, char **argv)
 {
-	net_op.open(MASTERSERVER_PORT, 0);
-	net_checker.open(MASTERSERVER_PORT+1, 0);
+	NETADDR4 bindaddr;
+	mem_zero(&bindaddr, sizeof(bindaddr));
+	bindaddr.port = MASTERSERVER_PORT;
+	
+	net_op.open(bindaddr, 0);
+
+	bindaddr.port = MASTERSERVER_PORT+1;
+	net_checker.open(bindaddr, 0);
 	// TODO: check socket for errors
 	
 	mem_copy(data.header, SERVERBROWSE_LIST, sizeof(SERVERBROWSE_LIST));
diff --git a/src/tools/crapnet.cpp b/src/tools/crapnet.cpp
index cbea7d5e..b3d2764f 100644
--- a/src/tools/crapnet.cpp
+++ b/src/tools/crapnet.cpp
@@ -24,9 +24,9 @@ static int debug = 0;
 
 int run(int port, netaddr4 dest)
 {
-	netaddr4 src(0,0,0,0,0);
+	netaddr4 src(0,0,0,0,port);
 	socket_udp4 socket;
-	socket.open(port);
+	socket.open(src);
 	char buffer[1024*2];
 	int id = 0;