]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - netconn.c
Add an entity parameter for CSQC_InputEvent
[xonotic/darkplaces.git] / netconn.c
index 95b6a8a3a342f98e06d7ce3acfd353bab9facd92..5874e7f9c2ecc7974245b5b68b1a5e38841a379a 100755 (executable)
--- a/netconn.c
+++ b/netconn.c
@@ -970,11 +970,11 @@ static void NetConn_OpenClientPort(const char *addressstring, lhnetaddresstype_t
                else
                {
                        LHNETADDRESS_ToString(&address, addressstring2, sizeof(addressstring2), true);
-                       Con_Printf("Client failed to open a socket on address %s\n", addressstring2);
+                       Con_Errorf("Client failed to open a socket on address %s\n", addressstring2);
                }
        }
        else
-               Con_Printf("Client unable to parse address %s\n", addressstring);
+               Con_Errorf("Client unable to parse address %s\n", addressstring);
 }
 
 void NetConn_OpenClientPorts(void)
@@ -1034,12 +1034,12 @@ static qboolean NetConn_OpenServerPort(const char *addressstring, lhnetaddressty
                        else
                        {
                                LHNETADDRESS_ToString(&address, addressstring2, sizeof(addressstring2), true);
-                               Con_Printf("Server failed to open socket on address %s\n", addressstring2);
+                               Con_Errorf("Server failed to open socket on address %s\n", addressstring2);
                        }
                }
                else
                {
-                       Con_Printf("Server unable to parse address %s\n", addressstring);
+                       Con_Errorf("Server unable to parse address %s\n", addressstring);
                        // if it cant parse one address, it wont be able to parse another for sure
                        return false;
                }
@@ -1949,141 +1949,144 @@ static int NetConn_ClientParsePacket(lhnetsocket_t *mysocket, unsigned char *dat
                        return true;
                }
 #ifdef CONFIG_MENU
-               if (length >= 15 && !memcmp(string, "statusResponse\x0A", 15))
+               if(key_dest != key_game)
                {
-                       serverlist_info_t *info;
-                       char *p;
-                       int n;
-
-                       string += 15;
-                       // search the cache for this server and update it
-                       n = NetConn_ClientParsePacket_ServerList_ProcessReply(addressstring2);
-                       if (n < 0)
-                               return true;
-
-                       info = &serverlist_cache[n].info;
-                       info->game[0] = 0;
-                       info->mod[0]  = 0;
-                       info->map[0]  = 0;
-                       info->name[0] = 0;
-                       info->qcstatus[0] = 0;
-                       info->players[0] = 0;
-                       info->protocol = -1;
-                       info->numplayers = 0;
-                       info->numbots = -1;
-                       info->maxplayers  = 0;
-                       info->gameversion = 0;
-
-                       p = strchr(string, '\n');
-                       if(p)
+                       if (length >= 15 && !memcmp(string, "statusResponse\x0A", 15))
                        {
-                               *p = 0; // cut off the string there
-                               ++p;
-                       }
-                       else
-                               Con_Printf("statusResponse without players block?\n");
-
-                       if ((s = InfoString_GetValue(string, "gamename"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->game, s, sizeof (info->game));
-                       if ((s = InfoString_GetValue(string, "modname"      , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->mod , s, sizeof (info->mod ));
-                       if ((s = InfoString_GetValue(string, "mapname"      , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->map , s, sizeof (info->map ));
-                       if ((s = InfoString_GetValue(string, "hostname"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->name, s, sizeof (info->name));
-                       if ((s = InfoString_GetValue(string, "protocol"     , infostringvalue, sizeof(infostringvalue))) != NULL) info->protocol = atoi(s);
-                       if ((s = InfoString_GetValue(string, "clients"      , infostringvalue, sizeof(infostringvalue))) != NULL) info->numplayers = atoi(s);
-                       if ((s = InfoString_GetValue(string, "bots"         , infostringvalue, sizeof(infostringvalue))) != NULL) info->numbots = atoi(s);
-                       if ((s = InfoString_GetValue(string, "sv_maxclients", infostringvalue, sizeof(infostringvalue))) != NULL) info->maxplayers = atoi(s);
-                       if ((s = InfoString_GetValue(string, "gameversion"  , infostringvalue, sizeof(infostringvalue))) != NULL) info->gameversion = atoi(s);
-                       if ((s = InfoString_GetValue(string, "qcstatus"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->qcstatus, s, sizeof(info->qcstatus));
-                       if (p                                                                                         != NULL) strlcpy(info->players, p, sizeof(info->players));
-                       info->numhumans = info->numplayers - max(0, info->numbots);
-                       info->freeslots = info->maxplayers - info->numplayers;
+                               serverlist_info_t *info;
+                               char *p;
+                               int n;
 
-                       NetConn_ClientParsePacket_ServerList_UpdateCache(n);
+                               string += 15;
+                               // search the cache for this server and update it
+                               n = NetConn_ClientParsePacket_ServerList_ProcessReply(addressstring2);
+                               if (n < 0)
+                                       return true;
 
-                       return true;
-               }
-               if (length >= 13 && !memcmp(string, "infoResponse\x0A", 13))
-               {
-                       serverlist_info_t *info;
-                       int n;
+                               info = &serverlist_cache[n].info;
+                               info->game[0] = 0;
+                               info->mod[0]  = 0;
+                               info->map[0]  = 0;
+                               info->name[0] = 0;
+                               info->qcstatus[0] = 0;
+                               info->players[0] = 0;
+                               info->protocol = -1;
+                               info->numplayers = 0;
+                               info->numbots = -1;
+                               info->maxplayers  = 0;
+                               info->gameversion = 0;
+
+                               p = strchr(string, '\n');
+                               if(p)
+                               {
+                                       *p = 0; // cut off the string there
+                                       ++p;
+                               }
+                               else
+                                       Con_Printf("statusResponse without players block?\n");
+
+                               if ((s = InfoString_GetValue(string, "gamename"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->game, s, sizeof (info->game));
+                               if ((s = InfoString_GetValue(string, "modname"      , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->mod , s, sizeof (info->mod ));
+                               if ((s = InfoString_GetValue(string, "mapname"      , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->map , s, sizeof (info->map ));
+                               if ((s = InfoString_GetValue(string, "hostname"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->name, s, sizeof (info->name));
+                               if ((s = InfoString_GetValue(string, "protocol"     , infostringvalue, sizeof(infostringvalue))) != NULL) info->protocol = atoi(s);
+                               if ((s = InfoString_GetValue(string, "clients"      , infostringvalue, sizeof(infostringvalue))) != NULL) info->numplayers = atoi(s);
+                               if ((s = InfoString_GetValue(string, "bots"         , infostringvalue, sizeof(infostringvalue))) != NULL) info->numbots = atoi(s);
+                               if ((s = InfoString_GetValue(string, "sv_maxclients", infostringvalue, sizeof(infostringvalue))) != NULL) info->maxplayers = atoi(s);
+                               if ((s = InfoString_GetValue(string, "gameversion"  , infostringvalue, sizeof(infostringvalue))) != NULL) info->gameversion = atoi(s);
+                               if ((s = InfoString_GetValue(string, "qcstatus"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->qcstatus, s, sizeof(info->qcstatus));
+                               if (p                                                                                         != NULL) strlcpy(info->players, p, sizeof(info->players));
+                               info->numhumans = info->numplayers - max(0, info->numbots);
+                               info->freeslots = info->maxplayers - info->numplayers;
+
+                               NetConn_ClientParsePacket_ServerList_UpdateCache(n);
 
-                       string += 13;
-                       // search the cache for this server and update it
-                       n = NetConn_ClientParsePacket_ServerList_ProcessReply(addressstring2);
-                       if (n < 0)
                                return true;
+                       }
+                       if (length >= 13 && !memcmp(string, "infoResponse\x0A", 13))
+                       {
+                               serverlist_info_t *info;
+                               int n;
 
-                       info = &serverlist_cache[n].info;
-                       info->game[0] = 0;
-                       info->mod[0]  = 0;
-                       info->map[0]  = 0;
-                       info->name[0] = 0;
-                       info->qcstatus[0] = 0;
-                       info->players[0] = 0;
-                       info->protocol = -1;
-                       info->numplayers = 0;
-                       info->numbots = -1;
-                       info->maxplayers  = 0;
-                       info->gameversion = 0;
-
-                       if ((s = InfoString_GetValue(string, "gamename"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->game, s, sizeof (info->game));
-                       if ((s = InfoString_GetValue(string, "modname"      , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->mod , s, sizeof (info->mod ));
-                       if ((s = InfoString_GetValue(string, "mapname"      , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->map , s, sizeof (info->map ));
-                       if ((s = InfoString_GetValue(string, "hostname"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->name, s, sizeof (info->name));
-                       if ((s = InfoString_GetValue(string, "protocol"     , infostringvalue, sizeof(infostringvalue))) != NULL) info->protocol = atoi(s);
-                       if ((s = InfoString_GetValue(string, "clients"      , infostringvalue, sizeof(infostringvalue))) != NULL) info->numplayers = atoi(s);
-                       if ((s = InfoString_GetValue(string, "bots"         , infostringvalue, sizeof(infostringvalue))) != NULL) info->numbots = atoi(s);
-                       if ((s = InfoString_GetValue(string, "sv_maxclients", infostringvalue, sizeof(infostringvalue))) != NULL) info->maxplayers = atoi(s);
-                       if ((s = InfoString_GetValue(string, "gameversion"  , infostringvalue, sizeof(infostringvalue))) != NULL) info->gameversion = atoi(s);
-                       if ((s = InfoString_GetValue(string, "qcstatus"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->qcstatus, s, sizeof(info->qcstatus));
-                       info->numhumans = info->numplayers - max(0, info->numbots);
-                       info->freeslots = info->maxplayers - info->numplayers;
+                               string += 13;
+                               // search the cache for this server and update it
+                               n = NetConn_ClientParsePacket_ServerList_ProcessReply(addressstring2);
+                               if (n < 0)
+                                       return true;
 
-                       NetConn_ClientParsePacket_ServerList_UpdateCache(n);
+                               info = &serverlist_cache[n].info;
+                               info->game[0] = 0;
+                               info->mod[0]  = 0;
+                               info->map[0]  = 0;
+                               info->name[0] = 0;
+                               info->qcstatus[0] = 0;
+                               info->players[0] = 0;
+                               info->protocol = -1;
+                               info->numplayers = 0;
+                               info->numbots = -1;
+                               info->maxplayers  = 0;
+                               info->gameversion = 0;
+
+                               if ((s = InfoString_GetValue(string, "gamename"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->game, s, sizeof (info->game));
+                               if ((s = InfoString_GetValue(string, "modname"      , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->mod , s, sizeof (info->mod ));
+                               if ((s = InfoString_GetValue(string, "mapname"      , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->map , s, sizeof (info->map ));
+                               if ((s = InfoString_GetValue(string, "hostname"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->name, s, sizeof (info->name));
+                               if ((s = InfoString_GetValue(string, "protocol"     , infostringvalue, sizeof(infostringvalue))) != NULL) info->protocol = atoi(s);
+                               if ((s = InfoString_GetValue(string, "clients"      , infostringvalue, sizeof(infostringvalue))) != NULL) info->numplayers = atoi(s);
+                               if ((s = InfoString_GetValue(string, "bots"         , infostringvalue, sizeof(infostringvalue))) != NULL) info->numbots = atoi(s);
+                               if ((s = InfoString_GetValue(string, "sv_maxclients", infostringvalue, sizeof(infostringvalue))) != NULL) info->maxplayers = atoi(s);
+                               if ((s = InfoString_GetValue(string, "gameversion"  , infostringvalue, sizeof(infostringvalue))) != NULL) info->gameversion = atoi(s);
+                               if ((s = InfoString_GetValue(string, "qcstatus"     , infostringvalue, sizeof(infostringvalue))) != NULL) strlcpy(info->qcstatus, s, sizeof(info->qcstatus));
+                               info->numhumans = info->numplayers - max(0, info->numbots);
+                               info->freeslots = info->maxplayers - info->numplayers;
+
+                               NetConn_ClientParsePacket_ServerList_UpdateCache(n);
 
-                       return true;
-               }
-               if (!strncmp(string, "getserversResponse\\", 19) && serverlist_cachecount < SERVERLIST_TOTALSIZE)
-               {
-                       // Extract the IP addresses
-                       data += 18;
-                       length -= 18;
-                       NetConn_ClientParsePacket_ServerList_ParseDPList(peeraddress, data, length, false);
-                       return true;
-               }
-               if (!strncmp(string, "getserversExtResponse", 21) && serverlist_cachecount < SERVERLIST_TOTALSIZE)
-               {
-                       // Extract the IP addresses
-                       data += 21;
-                       length -= 21;
-                       NetConn_ClientParsePacket_ServerList_ParseDPList(peeraddress, data, length, true);
-                       return true;
-               }
-               if (!memcmp(string, "d\n", 2) && serverlist_cachecount < SERVERLIST_TOTALSIZE)
-               {
-                       // Extract the IP addresses
-                       data += 2;
-                       length -= 2;
-                       masterreplycount++;
-                       if (serverlist_consoleoutput)
-                               Con_Printf("received QuakeWorld server list from %s...\n", addressstring2);
-                       while (length >= 6 && (data[0] != 0xFF || data[1] != 0xFF || data[2] != 0xFF || data[3] != 0xFF) && data[4] * 256 + data[5] != 0)
+                               return true;
+                       }
+                       if (!strncmp(string, "getserversResponse\\", 19) && serverlist_cachecount < SERVERLIST_TOTALSIZE)
                        {
-                               dpsnprintf (ipstring, sizeof (ipstring), "%u.%u.%u.%u:%u", data[0], data[1], data[2], data[3], data[4] * 256 + data[5]);
-                               if (serverlist_consoleoutput && developer_networking.integer)
-                                       Con_Printf("Requesting info from QuakeWorld server %s\n", ipstring);
-                               
-                               if( !NetConn_ClientParsePacket_ServerList_PrepareQuery( PROTOCOL_QUAKEWORLD, ipstring, false ) ) {
-                                       break;
-                               }
+                               // Extract the IP addresses
+                               data += 18;
+                               length -= 18;
+                               NetConn_ClientParsePacket_ServerList_ParseDPList(peeraddress, data, length, false);
+                               return true;
+                       }
+                       if (!strncmp(string, "getserversExtResponse", 21) && serverlist_cachecount < SERVERLIST_TOTALSIZE)
+                       {
+                               // Extract the IP addresses
+                               data += 21;
+                               length -= 21;
+                               NetConn_ClientParsePacket_ServerList_ParseDPList(peeraddress, data, length, true);
+                               return true;
+                       }
+                       if (!memcmp(string, "d\n", 2) && serverlist_cachecount < SERVERLIST_TOTALSIZE)
+                       {
+                               // Extract the IP addresses
+                               data += 2;
+                               length -= 2;
+                               masterreplycount++;
+                               if (serverlist_consoleoutput)
+                                       Con_Printf("received QuakeWorld server list from %s...\n", addressstring2);
+                               while (length >= 6 && (data[0] != 0xFF || data[1] != 0xFF || data[2] != 0xFF || data[3] != 0xFF) && data[4] * 256 + data[5] != 0)
+                               {
+                                       dpsnprintf (ipstring, sizeof (ipstring), "%u.%u.%u.%u:%u", data[0], data[1], data[2], data[3], data[4] * 256 + data[5]);
+                                       if (serverlist_consoleoutput && developer_networking.integer)
+                                               Con_Printf("Requesting info from QuakeWorld server %s\n", ipstring);
+                                       
+                                       if( !NetConn_ClientParsePacket_ServerList_PrepareQuery( PROTOCOL_QUAKEWORLD, ipstring, false ) ) {
+                                               break;
+                                       }
 
-                               // move on to next address in packet
-                               data += 6;
-                               length -= 6;
+                                       // move on to next address in packet
+                                       data += 6;
+                                       length -= 6;
+                               }
+                               // begin or resume serverlist queries
+                               serverlist_querysleep = false;
+                               serverlist_querywaittime = realtime + 3;
+                               return true;
                        }
-                       // begin or resume serverlist queries
-                       serverlist_querysleep = false;
-                       serverlist_querywaittime = realtime + 3;
-                       return true;
                }
 #endif
                if (!strncmp(string, "extResponse ", 12))
@@ -2737,7 +2740,7 @@ static qboolean hmac_mdfour_time_matching(lhnetaddress_t *peeraddress, const cha
        long t1, t2;
 
        if (!password[0]) {
-               Con_Print("^4LOGIC ERROR: RCon_Authenticate should never call the comparator with an empty password. Please report.\n");
+               Con_Error("LOGIC ERROR: RCon_Authenticate should never call the comparator with an empty password. Please report.\n");
                return false;
        }
 
@@ -2758,7 +2761,7 @@ static qboolean hmac_mdfour_challenge_matching(lhnetaddress_t *peeraddress, cons
        int i;
 
        if (!password[0]) {
-               Con_Print("^4LOGIC ERROR: RCon_Authenticate should never call the comparator with an empty password. Please report.\n");
+               Con_Error("LOGIC ERROR: RCon_Authenticate should never call the comparator with an empty password. Please report.\n");
                return false;
        }
 
@@ -2789,7 +2792,7 @@ static qboolean hmac_mdfour_challenge_matching(lhnetaddress_t *peeraddress, cons
 static qboolean plaintext_matching(lhnetaddress_t *peeraddress, const char *password, const char *hash, const char *s, int slen)
 {
        if (!password[0]) {
-               Con_Print("^4LOGIC ERROR: RCon_Authenticate should never call the comparator with an empty password. Please report.\n");
+               Con_Error("LOGIC ERROR: RCon_Authenticate should never call the comparator with an empty password. Please report.\n");
                return false;
        }
 
@@ -2937,7 +2940,7 @@ static int NetConn_ServerParsePacket(lhnetsocket_t *mysocket, unsigned char *dat
 {
        int i, ret, clientnum, best;
        double besttime;
-       char *string, response[1400], addressstring2[128];
+       char *string, response[2800], addressstring2[128];
        static char stringbuf[16384]; // server only
        qboolean islocal = (LHNETADDRESS_GetAddressType(peeraddress) == LHNETADDRESSTYPE_LOOP);
        char senddata[NET_HEADERSIZE+NET_MAXMESSAGE+CRYPTO_HEADERSIZE];
@@ -3754,7 +3757,7 @@ void NetConn_QueryMasters(qboolean querydp, qboolean queryqw)
        }
        if (!masterquerycount)
        {
-               Con_Print("Unable to query master servers, no suitable network sockets active.\n");
+               Con_Error("Unable to query master servers, no suitable network sockets active.\n");
                M_Update_Return_Reason("No network");
        }
 }
@@ -3922,7 +3925,7 @@ void NetConn_Init(void)
                        Cvar_SetQuick(&net_address, com_argv[i + 1]);
                }
                else
-                       Con_Printf("-ip option used, but unable to parse the address \"%s\"\n", com_argv[i + 1]);
+                       Con_Errorf("-ip option used, but unable to parse the address \"%s\"\n", com_argv[i + 1]);
        }
 // COMMANDLINEOPTION: Server: -port <portnumber> sets the port to use for a server (default 26000, the same port as QUAKE itself), useful if you host multiple servers on your machine
        if (((i = COM_CheckParm("-port")) || (i = COM_CheckParm("-ipport")) || (i = COM_CheckParm("-udpport"))) && i + 1 < com_argc)
@@ -3934,7 +3937,7 @@ void NetConn_Init(void)
                        Cvar_SetValueQuick(&sv_netport, i);
                }
                else
-                       Con_Printf("-port option used, but %i is not a valid port number\n", i);
+                       Con_Errorf("-port option used, but %i is not a valid port number\n", i);
        }
        cl_numsockets = 0;
        sv_numsockets = 0;