about summary refs log tree commit diff
path: root/src/engine/server
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2007-07-21 21:28:56 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2007-07-21 21:28:56 +0000
commit9ef96af0545ed33e326bb863fb740705dd0b17c5 (patch)
tree7d98f1f67d1d7ed4514dfa73de016339dd42c028 /src/engine/server
parent4229cee5040516a5968a22549a40050c4739e1ba (diff)
downloadzcatch-9ef96af0545ed33e326bb863fb740705dd0b17c5.tar.gz
zcatch-9ef96af0545ed33e326bb863fb740705dd0b17c5.zip
fixed alot of masterserver fixes
Diffstat (limited to 'src/engine/server')
-rw-r--r--src/engine/server/server.cpp35
1 files changed, 30 insertions, 5 deletions
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