]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - netconn.c
fixed r_showtris bug (individual state changes were not being ignored in showtris...
[xonotic/darkplaces.git] / netconn.c
index acbc3a819a8acb60fc39eb0995a4800ea1c0e7d2..767e9da9c5daacfc97196398785c1ab2c5664ff7 100755 (executable)
--- a/netconn.c
+++ b/netconn.c
@@ -35,15 +35,16 @@ static cvar_t sv_masters [] =
        {CVAR_SAVE, "sv_master2", ""},
        {CVAR_SAVE, "sv_master3", ""},
        {CVAR_SAVE, "sv_master4", ""},
-       {0, "sv_masterextra1", "69.59.212.88"}, // ghdigital.com
-       {0, "sv_masterextra2", "66.169.205.13"}, // dpmaster.deathmask.net
-       {0, "sv_masterextra3", "12.166.196.192"}, // blaze.mindphukd.org
+       {0, "sv_masterextra1", "ghdigital.com"}, //69.59.212.88
+       {0, "sv_masterextra2", "dpmaster.deathmask.net"}, //209.164.24.243
+       {0, "sv_masterextra3", "12.166.196.192"}, //blaze.mindphukd.org (doesn't resolve currently but works as an ip)
        {0, NULL, NULL}
 };
 
 static double nextheartbeattime = 0;
 
 sizebuf_t net_message;
+static qbyte net_message_buf[NET_MAXMESSAGE];
 
 cvar_t net_messagetimeout = {0, "net_messagetimeout","300"};
 cvar_t net_messagerejointimeout = {0, "net_messagerejointimeout","10"};
@@ -185,6 +186,8 @@ static qboolean _ServerList_CompareInt( int A, serverlist_maskop_t op, int B )
                case SLMO_NOTEQUAL:
                        return A != B;
                case SLMO_GREATEREQUAL:
+               case SLMO_CONTAINS:
+               case SLMO_NOTCONTAIN:
                        return A >= B;
                default:
                        Con_DPrint( "_ServerList_CompareInt: Bad op!\n" );
@@ -193,7 +196,7 @@ static qboolean _ServerList_CompareInt( int A, serverlist_maskop_t op, int B )
 }
 
 static qboolean _ServerList_CompareStr( const char *A, serverlist_maskop_t op, const char *B )
-{ 
+{
        // Same here, also using an intermediate & final return would be more appropriate
        // A info B mask
        switch( op ) {
@@ -331,7 +334,7 @@ static void _ServerList_Test(void)
 {
        int i;
        for( i = 0 ; i < 1024 ; i++ ) {
-               memset( &serverlist_cache[serverlist_cachecount], 0, sizeof( serverlist_t ) );
+               memset( &serverlist_cache[serverlist_cachecount], 0, sizeof( serverlist_entry_t ) );
                serverlist_cache[serverlist_cachecount].info.ping = rand() % 450 + 250;
                dpsnprintf( serverlist_cache[serverlist_cachecount].info.name, 128, "Black's ServerList Test %i", i );
                serverlist_cache[serverlist_cachecount].finished = true;
@@ -879,7 +882,6 @@ void NetConn_ConnectionEstablished(lhnetsocket_t *mysocket, lhnetaddress_t *peer
        cls.demonum = -1;                       // not in the demo loop now
        cls.state = ca_connected;
        cls.signon = 0;                         // need all the signon messages before playing
-       CL_ClearState();
 }
 
 int NetConn_IsLocalGame(void)
@@ -1023,7 +1025,7 @@ int NetConn_ClientParsePacket(lhnetsocket_t *mysocket, qbyte *data, int length,
                                if( serverlist_cachecount == SERVERLIST_TOTALSIZE )
                                        break;
                                // also ignore it if we have already queried it (other master server response)
-                               for( n = 0 ; n < serverlist_cachecount ; n++ ) 
+                               for( n = 0 ; n < serverlist_cachecount ; n++ )
                                        if( !strcmp( ipstring, serverlist_cache[ n ].info.cname ) )
                                                break;
                                if( n >= serverlist_cachecount )
@@ -1167,13 +1169,15 @@ void NetConn_ClientFrame(void)
        if (cls.connect_trying && cls.connect_nextsendtime < realtime)
        {
                if (cls.connect_remainingtries == 0)
+                       M_Update_Return_Reason("Connect: Waiting 10 seconds for reply");
+               cls.connect_nextsendtime = realtime + 1;
+               cls.connect_remainingtries--;
+               if (cls.connect_remainingtries <= -10)
                {
                        cls.connect_trying = false;
                        M_Update_Return_Reason("Connect: Failed");
                        return;
                }
-               cls.connect_nextsendtime = realtime + 1;
-               cls.connect_remainingtries--;
                // try challenge first (newer server)
                NetConn_WriteString(cls.connect_mysocket, "\377\377\377\377getchallenge", &cls.connect_address);
                // then try netquake as a fallback (old server, or netquake)
@@ -1224,6 +1228,7 @@ static void NetConn_BuildChallengeString(char *buffer, int bufferlength)
        buffer[i] = 0;
 }
 
+extern void SV_SendServerinfo (client_t *client);
 int NetConn_ServerParsePacket(lhnetsocket_t *mysocket, qbyte *data, int length, lhnetaddress_t *peeraddress)
 {
        int i, n, ret, clientnum, responselength, best;
@@ -1299,24 +1304,27 @@ int NetConn_ServerParsePacket(lhnetsocket_t *mysocket, qbyte *data, int length,
                                                        for (clientnum = 0, client = svs.clients;clientnum < svs.maxclients;clientnum++, client++)
                                                                if (client->netconnection && LHNETADDRESS_Compare(peeraddress, &client->netconnection->peeraddress) == 0)
                                                                        break;
-                                                       if (clientnum < svs.maxclients)
+                                                       if (clientnum < svs.maxclients && realtime - client->connecttime < net_messagerejointimeout.value)
+                                                       {
+                                                               // client is still trying to connect,
+                                                               // so we send a duplicate reply
+                                                               if (developer.integer)
+                                                                       Con_Printf("Datagram_ParseConnectionless: sending duplicate accept to %s.\n", addressstring2);
+                                                               NetConn_WriteString(mysocket, "\377\377\377\377accept", peeraddress);
+                                                       }
+#if 0
+                                                       else if (clientnum < svs.maxclients)
                                                        {
-                                                               // duplicate connection request
-                                                               if (realtime - client->connecttime < 2.0)
-                                                               {
-                                                                       // client is still trying to connect,
-                                                                       // so we send a duplicate reply
-                                                                       if (developer.integer)
-                                                                               Con_Printf("Datagram_ParseConnectionless: sending duplicate accept to %s.\n", addressstring2);
-                                                                       NetConn_WriteString(mysocket, "\377\377\377\377accept", peeraddress);
-                                                               }
-                                                               // only kick if old connection seems dead
                                                                if (realtime - client->netconnection->lastMessageTime >= net_messagerejointimeout.value)
                                                                {
-                                                                       // kick off connection and await retry
-                                                                       client->deadsocket = true;
+                                                                       // client crashed and is coming back, keep their stuff intact
+                                                                       SV_SendServerinfo(client);
+                                                                       //host_client = client;
+                                                                       //SV_DropClient (true);
                                                                }
+                                                               // else ignore them
                                                        }
+#endif
                                                        else
                                                        {
                                                                // this is a new client, find a slot
@@ -1444,13 +1452,17 @@ int NetConn_ServerParsePacket(lhnetsocket_t *mysocket, qbyte *data, int length,
                                                                        NetConn_Write(mysocket, net_message.data, net_message.cursize, peeraddress);
                                                                        SZ_Clear(&net_message);
                                                                }
+#if 0
                                                                else if (realtime - client->netconnection->lastMessageTime >= net_messagerejointimeout.value)
                                                                {
+                                                                       SV_SendServerinfo(client);
                                                                        // the old client hasn't sent us anything
                                                                        // in quite a while, so kick off and let
                                                                        // the retry take care of it...
-                                                                       client->deadsocket = true;
+                                                                       //host_client = client;
+                                                                       //SV_DropClient (true);
                                                                }
+#endif
                                                        }
                                                        else
                                                        {
@@ -1794,7 +1806,7 @@ void NetConn_Init(void)
 {
        int i;
        lhnetaddress_t tempaddress;
-       netconn_mempool = Mem_AllocPool("Networking", 0, NULL);
+       netconn_mempool = Mem_AllocPool("network connections", 0, NULL);
        Cmd_AddCommand("net_stats", Net_Stats_f);
        Cmd_AddCommand("net_slist", Net_Slist_f);
        Cmd_AddCommand("heartbeat", Net_Heartbeat_f);
@@ -1838,7 +1850,9 @@ void NetConn_Init(void)
        }
        cl_numsockets = 0;
        sv_numsockets = 0;
-       SZ_Alloc(&net_message, NET_MAXMESSAGE, "net_message");
+       net_message.data = net_message_buf;
+       net_message.maxsize = sizeof(net_message_buf);
+       net_message.cursize = 0;
        LHNET_Init();
 }