diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-08-05 14:19:13 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-08-05 14:19:13 +0000 |
| commit | 640b2bd953326adbf98ba04dd2ad7e59fb6c8193 (patch) | |
| tree | 7e3b954333071f364df74a6c468050487246d725 /src/engine | |
| parent | fc4d7eef92679652278a562da07cef0fa316d358 (diff) | |
| download | zcatch-640b2bd953326adbf98ba04dd2ad7e59fb6c8193.tar.gz zcatch-640b2bd953326adbf98ba04dd2ad7e59fb6c8193.zip | |
made so that you can bind the server to a specific address
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/client/client.cpp | 4 | ||||
| -rw-r--r-- | src/engine/config_variables.h | 1 | ||||
| -rw-r--r-- | src/engine/network.cpp | 8 | ||||
| -rw-r--r-- | src/engine/network.h | 8 | ||||
| -rw-r--r-- | src/engine/server/server.cpp | 16 |
5 files changed, 26 insertions, 11 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; |