about summary refs log tree commit diff
path: root/src/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/client/client.cpp5
-rw-r--r--src/engine/config_variables.h2
-rw-r--r--src/engine/server/server.cpp35
3 files changed, 36 insertions, 6 deletions
diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp
index 56a7f5d9..8d7fb1e2 100644
--- a/src/engine/client/client.cpp
+++ b/src/engine/client/client.cpp
@@ -417,7 +417,7 @@ public:
 		net.open(0, 0);
 		
 		//
-		net_host_lookup(MASTERSERVER_ADDRESS, MASTERSERVER_PORT, &master_server);
+		net_host_lookup(config.masterserver, MASTERSERVER_PORT, &master_server);
 
 		// connect to the server if wanted
 		if(direct_connect_server)
@@ -576,6 +576,9 @@ public:
 					sprintf(servers.infos[i].address, "%d.%d.%d.%d:%d",
 						servers.addresses[i].ip[0], servers.addresses[i].ip[1], servers.addresses[i].ip[2],
 						servers.addresses[i].ip[3], servers.addresses[i].port);
+					sprintf(servers.infos[i].name, "%d.%d.%d.%d:%d",
+						servers.addresses[i].ip[0], servers.addresses[i].ip[1], servers.addresses[i].ip[2],
+						servers.addresses[i].ip[3], servers.addresses[i].port);
 				}
 			}
 
diff --git a/src/engine/config_variables.h b/src/engine/config_variables.h
index 788c0e7d..a5c4ef5d 100644
--- a/src/engine/config_variables.h
+++ b/src/engine/config_variables.h
@@ -9,4 +9,6 @@ MACRO_CONFIG_STR(player_name, 32, "nameless tee")
 MACRO_CONFIG_STR(clan_name, 32, "")
 MACRO_CONFIG_STR(password, 32, "")
 
+MACRO_CONFIG_STR(masterserver, 128, "master.teewars.com")
+
 MACRO_CONFIG_INT(sv_port, 8303, 0, 0)
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index fd4f16fa..32be58ac 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -165,14 +165,12 @@ public:
 		//for(int i = 0; i < MAX_CLIENTS; i++)
 			//dbg_msg("network/server", "\t%d: %d", i, clients[i].state);
 
-		if (net_host_lookup(MASTERSERVER_ADDRESS, MASTERSERVER_PORT, &master_server) != 0)
+		dbg_msg("server", "masterserver is %s", config.masterserver);
+		if (net_host_lookup(config.masterserver, MASTERSERVER_PORT, &master_server) != 0)
 		{
 			// TODO: fix me
 			//master_server = netaddr4(0, 0, 0, 0, 0);
 		}
-		
-		dbg_msg("server", "masterserver = %d.%d.%d.%d:%d",
-			master_server.ip[0], master_server.ip[1], master_server.ip[2], master_server.ip[3], master_server.port);
 
 		mods_init();
 
@@ -463,6 +461,19 @@ public:
 		net.send(&packet);
 	}
 
+
+	void send_fwcheckresponse(NETADDR4 *addr)
+	{
+		dbg_msg("server", "sending heartbeat");
+		NETPACKET packet;
+		packet.client_id = -1;
+		packet.address = *addr;
+		packet.flags = PACKETFLAG_CONNLESS;
+		packet.data_size = sizeof(SERVERBROWSE_FWRESPONSE);
+		packet.data = SERVERBROWSE_FWRESPONSE;
+		net.send(&packet);
+	}
+
 	void pump_network()
 	{
 		net.update();
@@ -479,7 +490,21 @@ public:
 				{
 					dbg_msg("server", "info requested");
 					send_serverinfo(&packet.address);
-					
+				}
+				else if(packet.data_size == sizeof(SERVERBROWSE_FWCHECK) &&
+					memcmp(packet.data, SERVERBROWSE_FWCHECK, sizeof(SERVERBROWSE_FWCHECK)) == 0)
+				{
+					send_fwcheckresponse(&packet.address);
+				}
+				else if(packet.data_size == sizeof(SERVERBROWSE_FWOK) &&
+					memcmp(packet.data, SERVERBROWSE_FWOK, sizeof(SERVERBROWSE_FWOK)) == 0)
+				{
+					dbg_msg("server", "no firewall/nat problems detected");
+				}
+				else if(packet.data_size == sizeof(SERVERBROWSE_FWERROR) &&
+					memcmp(packet.data, SERVERBROWSE_FWERROR, sizeof(SERVERBROWSE_FWERROR)) == 0)
+				{
+					dbg_msg("server", "ERROR: clients can not connect due to FIREWALL/NAT");
 				}
 			}
 			else