diff options
Diffstat (limited to 'code/client')
-rw-r--r-- | code/client/cl_main.c | 196 | ||||
-rw-r--r-- | code/client/cl_ui.c | 72 | ||||
-rw-r--r-- | code/client/client.h | 12 |
3 files changed, 106 insertions, 174 deletions
diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 589907d..c2edd02 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -36,7 +36,6 @@ cvar_t *rconAddress; cvar_t *cl_timeout; cvar_t *cl_maxpackets; cvar_t *cl_packetdup; -cvar_t *cl_master; cvar_t *cl_timeNudge; cvar_t *cl_showTimeDelta; cvar_t *cl_freezeDemo; @@ -1817,13 +1816,8 @@ void CL_MotdPacket( netadr_t from ) { CL_InitServerInfo =================== */ -void CL_InitServerInfo( serverInfo_t *server, serverAddress_t *address ) { - server->adr.type = NA_IP; - server->adr.ip[0] = address->ip[0]; - server->adr.ip[1] = address->ip[1]; - server->adr.ip[2] = address->ip[2]; - server->adr.ip[3] = address->ip[3]; - server->adr.port = address->port; +void CL_InitServerInfo( serverInfo_t *server, netadr_t *address ) { + server->adr = *address; server->clients = 0; server->hostName[0] = '\0'; server->mapName[0] = '\0'; @@ -1844,11 +1838,12 @@ CL_ServersResponsePacket =================== */ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) { - int i, count, max, total; - serverAddress_t addresses[MAX_SERVERSPERPACKET]; + int i, count, total; + netadr_t addresses[MAX_SERVERSPERPACKET]; int numservers; byte* buffptr; byte* buffend; + netadrtype_t family; Com_Printf("CL_ServersResponsePacket\n"); @@ -1858,71 +1853,74 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) { cls.numGlobalServerAddresses = 0; } - if (cls.nummplayerservers == -1) { - cls.nummplayerservers = 0; - } - // parse through server response string numservers = 0; buffptr = msg->data; buffend = buffptr + msg->cursize; - while (buffptr+1 < buffend) { + while (buffptr+1 < buffend) + { // advance to initial token - do { - if (*buffptr++ == '\\') - break; + do + { + if (*buffptr == '\\') + { + family = NA_IP; + break; + } + else if(*buffptr == '/') + { + family = NA_IP6; + break; + } + + buffptr++; } while (buffptr < buffend); - if ( buffptr >= buffend - 6 ) { - break; + buffptr++; + + if(family == NA_IP) + { + if (buffend - buffptr < sizeof(addresses[numservers].ip) + sizeof(addresses[numservers].port) + sizeof("\\EOT") - 1) + break; + + for(i = 0; i < sizeof(addresses[numservers].ip); i++) + addresses[numservers].ip[i] = *buffptr++; + } + else + { + if (buffend - buffptr < sizeof(addresses[numservers].ip6) + sizeof(addresses[numservers].port) + sizeof("\\EOT") - 1) + break; + + for(i = 0; i < sizeof(addresses[numservers].ip6); i++) + addresses[numservers].ip6[i] = *buffptr++; } - // parse out ip - addresses[numservers].ip[0] = *buffptr++; - addresses[numservers].ip[1] = *buffptr++; - addresses[numservers].ip[2] = *buffptr++; - addresses[numservers].ip[3] = *buffptr++; + addresses[numservers].type = family; // parse out port - addresses[numservers].port = (*buffptr++)<<8; + addresses[numservers].port = (*buffptr++) << 8; addresses[numservers].port += *buffptr++; addresses[numservers].port = BigShort( addresses[numservers].port ); // syntax check - if (*buffptr != '\\') { + if (*buffptr != '\\' && *buffptr != '/') break; - } - - Com_DPrintf( "server: %d ip: %d.%d.%d.%d:%d\n",numservers, - addresses[numservers].ip[0], - addresses[numservers].ip[1], - addresses[numservers].ip[2], - addresses[numservers].ip[3], - addresses[numservers].port ); - + numservers++; - if (numservers >= MAX_SERVERSPERPACKET) { + if (numservers >= MAX_SERVERSPERPACKET) break; - } // parse out EOT - if (buffptr[1] == 'E' && buffptr[2] == 'O' && buffptr[3] == 'T') { + if (buffptr[1] == 'E' && buffptr[2] == 'O' && buffptr[3] == 'T') break; - } } - if (cls.masterNum == 0) { - count = cls.numglobalservers; - max = MAX_GLOBAL_SERVERS; - } else { - count = cls.nummplayerservers; - max = MAX_OTHER_SERVERS; - } + count = cls.numglobalservers; - for (i = 0; i < numservers && count < max; i++) { + for (i = 0; i < numservers && count < MAX_GLOBAL_SERVERS; i++) { // build net address - serverInfo_t *server = (cls.masterNum == 0) ? &cls.globalServers[count] : &cls.mplayerServers[count]; + serverInfo_t *server = &cls.globalServers[count]; CL_InitServerInfo( server, &addresses[i] ); // advance to next slot @@ -1930,29 +1928,18 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) { } // if getting the global list - if (cls.masterNum == 0) { - if ( cls.numGlobalServerAddresses < MAX_GLOBAL_SERVERS ) { - // if we couldn't store the servers in the main list anymore - for (; i < numservers && count >= max; i++) { - serverAddress_t *addr; - // just store the addresses in an additional list - addr = &cls.globalServerAddresses[cls.numGlobalServerAddresses++]; - addr->ip[0] = addresses[i].ip[0]; - addr->ip[1] = addresses[i].ip[1]; - addr->ip[2] = addresses[i].ip[2]; - addr->ip[3] = addresses[i].ip[3]; - addr->port = addresses[i].port; - } + if ( count >= MAX_GLOBAL_SERVERS && cls.numGlobalServerAddresses < MAX_GLOBAL_SERVERS ) + { + // if we couldn't store the servers in the main list anymore + for (; i < numservers && cls.numGlobalServerAddresses < MAX_GLOBAL_SERVERS; i++) + { + // just store the addresses in an additional list + cls.globalServerAddresses[cls.numGlobalServerAddresses++] = addresses[i]; } } - if (cls.masterNum == 0) { - cls.numglobalservers = count; - total = count + cls.numGlobalServerAddresses; - } else { - cls.nummplayerservers = count; - total = count; - } + cls.numglobalservers = count; + total = count + cls.numGlobalServerAddresses; Com_Printf("%d servers parsed (total %d)\n", numservers, total); } @@ -2672,7 +2659,6 @@ void CL_Init( void ) { cl_timeout = Cvar_Get ("cl_timeout", "200", 0); - cl_master = Cvar_Get ("cl_master", MASTER_SERVER_NAME, CVAR_ARCHIVE); cl_timeNudge = Cvar_Get ("cl_timeNudge", "0", CVAR_TEMP ); cl_shownet = Cvar_Get ("cl_shownet", "0", CVAR_TEMP ); cl_showSend = Cvar_Get ("cl_showSend", "0", CVAR_TEMP ); @@ -2898,12 +2884,6 @@ static void CL_SetServerInfoByAddress(netadr_t from, const char *info, int ping) } } - for (i = 0; i < MAX_OTHER_SERVERS; i++) { - if (NET_CompareAdr(from, cls.mplayerServers[i].adr)) { - CL_SetServerInfo(&cls.mplayerServers[i], info, ping); - } - } - for (i = 0; i < MAX_GLOBAL_SERVERS; i++) { if (NET_CompareAdr(from, cls.globalServers[i].adr)) { CL_SetServerInfo(&cls.globalServers[i], info, ping); @@ -3260,43 +3240,49 @@ CL_GlobalServers_f */ void CL_GlobalServers_f( void ) { netadr_t to; - int i; - int count; - char *buffptr; - char command[1024]; + int count, i, masterNum; + char command[1024], *masteraddress; - if ( Cmd_Argc() < 3) { - Com_Printf( "usage: globalservers <master# 0-1> <protocol> [keywords]\n"); + if ((count = Cmd_Argc()) < 3 || (masterNum = atoi(Cmd_Argv(1))) < 0 || masterNum > 4) + { + Com_Printf( "usage: globalservers <master# 0-4> <protocol> [keywords]\n"); return; } - cls.masterNum = atoi( Cmd_Argv(1) ); - - Com_Printf( "Requesting servers from the master...\n"); + sprintf(command, "sv_master%d", masterNum + 1); + masteraddress = Cvar_VariableString(command); + + if(!*masteraddress) + { + Com_Printf( "CL_GlobalServers_f: Error: No master server address given.\n"); + return; + } // reset the list, waiting for response // -1 is used to distinguish a "no response" - NET_StringToAdr( cl_master->string, &to, NA_IP ); - - if( cls.masterNum == 1 ) { - cls.nummplayerservers = -1; - cls.pingUpdateSource = AS_MPLAYER; - } - else { - cls.numglobalservers = -1; - cls.pingUpdateSource = AS_GLOBAL; + i = NET_StringToAdr(masteraddress, &to, NA_UNSPEC); + + if(!i) + { + Com_Printf( "CL_GlobalServers_f: Error: could not resolve address of master %s\n", masteraddress); + return; } - to.type = NA_IP; - to.port = BigShort(PORT_MASTER); + else if(i == 2) + to.port = BigShort(PORT_MASTER); + + Com_Printf("Requesting servers from master %s...\n", masteraddress); + + cls.numglobalservers = -1; + cls.pingUpdateSource = AS_GLOBAL; - sprintf( command, "getservers %s", Cmd_Argv(2) ); + Com_sprintf( command, sizeof(command), "getservers %s", Cmd_Argv(2) ); - // tack on keywords - buffptr = command + strlen( command ); - count = Cmd_Argc(); - for (i=3; i<count; i++) - buffptr += sprintf( buffptr, " %s", Cmd_Argv(i) ); + for (i=3; i < count; i++) + { + Q_strcat(command, sizeof(command), " "); + Q_strcat(command, sizeof(command), Cmd_Argv(i)); + } NET_OutOfBandPrint( NS_SERVER, to, "%s", command ); } @@ -3549,10 +3535,6 @@ qboolean CL_UpdateVisiblePings_f(int source) { server = &cls.localServers[0]; max = cls.numlocalservers; break; - case AS_MPLAYER : - server = &cls.mplayerServers[0]; - max = cls.nummplayerservers; - break; case AS_GLOBAL : server = &cls.globalServers[0]; max = cls.numglobalservers; @@ -3561,6 +3543,8 @@ qboolean CL_UpdateVisiblePings_f(int source) { server = &cls.favoriteServers[0]; max = cls.numfavoriteservers; break; + default: + return qfalse; } for (i = 0; i < max; i++) { if (server[i].visible) { diff --git a/code/client/cl_ui.c b/code/client/cl_ui.c index a4d813a..3cabd04 100644 --- a/code/client/cl_ui.c +++ b/code/client/cl_ui.c @@ -50,19 +50,17 @@ LAN_LoadCachedServers void LAN_LoadCachedServers( void ) { int size; fileHandle_t fileIn; - cls.numglobalservers = cls.nummplayerservers = cls.numfavoriteservers = 0; + cls.numglobalservers = cls.numfavoriteservers = 0; cls.numGlobalServerAddresses = 0; if (FS_SV_FOpenFileRead("servercache.dat", &fileIn)) { FS_Read(&cls.numglobalservers, sizeof(int), fileIn); - FS_Read(&cls.nummplayerservers, sizeof(int), fileIn); FS_Read(&cls.numfavoriteservers, sizeof(int), fileIn); FS_Read(&size, sizeof(int), fileIn); - if (size == sizeof(cls.globalServers) + sizeof(cls.favoriteServers) + sizeof(cls.mplayerServers)) { + if (size == sizeof(cls.globalServers) + sizeof(cls.favoriteServers)) { FS_Read(&cls.globalServers, sizeof(cls.globalServers), fileIn); - FS_Read(&cls.mplayerServers, sizeof(cls.mplayerServers), fileIn); FS_Read(&cls.favoriteServers, sizeof(cls.favoriteServers), fileIn); } else { - cls.numglobalservers = cls.nummplayerservers = cls.numfavoriteservers = 0; + cls.numglobalservers = cls.numfavoriteservers = 0; cls.numGlobalServerAddresses = 0; } FS_FCloseFile(fileIn); @@ -78,12 +76,10 @@ void LAN_SaveServersToCache( void ) { int size; fileHandle_t fileOut = FS_SV_FOpenFileWrite("servercache.dat"); FS_Write(&cls.numglobalservers, sizeof(int), fileOut); - FS_Write(&cls.nummplayerservers, sizeof(int), fileOut); FS_Write(&cls.numfavoriteservers, sizeof(int), fileOut); - size = sizeof(cls.globalServers) + sizeof(cls.favoriteServers) + sizeof(cls.mplayerServers); + size = sizeof(cls.globalServers) + sizeof(cls.favoriteServers); FS_Write(&size, sizeof(int), fileOut); FS_Write(&cls.globalServers, sizeof(cls.globalServers), fileOut); - FS_Write(&cls.mplayerServers, sizeof(cls.mplayerServers), fileOut); FS_Write(&cls.favoriteServers, sizeof(cls.favoriteServers), fileOut); FS_FCloseFile(fileOut); } @@ -104,10 +100,7 @@ static void LAN_ResetPings(int source) { servers = &cls.localServers[0]; count = MAX_OTHER_SERVERS; break; - case AS_MPLAYER : - servers = &cls.mplayerServers[0]; - count = MAX_OTHER_SERVERS; - break; + case AS_MPLAYER: case AS_GLOBAL : servers = &cls.globalServers[0]; count = MAX_GLOBAL_SERVERS; @@ -141,10 +134,7 @@ static int LAN_AddServer(int source, const char *name, const char *address) { count = &cls.numlocalservers; servers = &cls.localServers[0]; break; - case AS_MPLAYER : - count = &cls.nummplayerservers; - servers = &cls.mplayerServers[0]; - break; + case AS_MPLAYER: case AS_GLOBAL : max = MAX_GLOBAL_SERVERS; count = &cls.numglobalservers; @@ -188,10 +178,7 @@ static void LAN_RemoveServer(int source, const char *addr) { count = &cls.numlocalservers; servers = &cls.localServers[0]; break; - case AS_MPLAYER : - count = &cls.nummplayerservers; - servers = &cls.mplayerServers[0]; - break; + case AS_MPLAYER: case AS_GLOBAL : count = &cls.numglobalservers; servers = &cls.globalServers[0]; @@ -229,9 +216,7 @@ static int LAN_GetServerCount( int source ) { case AS_LOCAL : return cls.numlocalservers; break; - case AS_MPLAYER : - return cls.nummplayerservers; - break; + case AS_MPLAYER: case AS_GLOBAL : return cls.numglobalservers; break; @@ -255,12 +240,7 @@ static void LAN_GetServerAddressString( int source, int n, char *buf, int buflen return; } break; - case AS_MPLAYER : - if (n >= 0 && n < MAX_OTHER_SERVERS) { - Q_strncpyz(buf, NET_AdrToStringwPort( cls.mplayerServers[n].adr) , buflen ); - return; - } - break; + case AS_MPLAYER: case AS_GLOBAL : if (n >= 0 && n < MAX_GLOBAL_SERVERS) { Q_strncpyz(buf, NET_AdrToStringwPort( cls.globalServers[n].adr) , buflen ); @@ -292,11 +272,7 @@ static void LAN_GetServerInfo( int source, int n, char *buf, int buflen ) { server = &cls.localServers[n]; } break; - case AS_MPLAYER : - if (n >= 0 && n < MAX_OTHER_SERVERS) { - server = &cls.mplayerServers[n]; - } - break; + case AS_MPLAYER: case AS_GLOBAL : if (n >= 0 && n < MAX_GLOBAL_SERVERS) { server = &cls.globalServers[n]; @@ -343,11 +319,7 @@ static int LAN_GetServerPing( int source, int n ) { server = &cls.localServers[n]; } break; - case AS_MPLAYER : - if (n >= 0 && n < MAX_OTHER_SERVERS) { - server = &cls.mplayerServers[n]; - } - break; + case AS_MPLAYER: case AS_GLOBAL : if (n >= 0 && n < MAX_GLOBAL_SERVERS) { server = &cls.globalServers[n]; @@ -377,11 +349,7 @@ static serverInfo_t *LAN_GetServerPtr( int source, int n ) { return &cls.localServers[n]; } break; - case AS_MPLAYER : - if (n >= 0 && n < MAX_OTHER_SERVERS) { - return &cls.mplayerServers[n]; - } - break; + case AS_MPLAYER: case AS_GLOBAL : if (n >= 0 && n < MAX_GLOBAL_SERVERS) { return &cls.globalServers[n]; @@ -514,9 +482,7 @@ static void LAN_MarkServerVisible(int source, int n, qboolean visible ) { case AS_LOCAL : server = &cls.localServers[0]; break; - case AS_MPLAYER : - server = &cls.mplayerServers[0]; - break; + case AS_MPLAYER: case AS_GLOBAL : server = &cls.globalServers[0]; count = MAX_GLOBAL_SERVERS; @@ -538,11 +504,7 @@ static void LAN_MarkServerVisible(int source, int n, qboolean visible ) { cls.localServers[n].visible = visible; } break; - case AS_MPLAYER : - if (n >= 0 && n < MAX_OTHER_SERVERS) { - cls.mplayerServers[n].visible = visible; - } - break; + case AS_MPLAYER: case AS_GLOBAL : if (n >= 0 && n < MAX_GLOBAL_SERVERS) { cls.globalServers[n].visible = visible; @@ -570,11 +532,7 @@ static int LAN_ServerIsVisible(int source, int n ) { return cls.localServers[n].visible; } break; - case AS_MPLAYER : - if (n >= 0 && n < MAX_OTHER_SERVERS) { - return cls.mplayerServers[n].visible; - } - break; + case AS_MPLAYER: case AS_GLOBAL : if (n >= 0 && n < MAX_GLOBAL_SERVERS) { return cls.globalServers[n].visible; diff --git a/code/client/client.h b/code/client/client.h index 7a0bd53..34aacc5 100644 --- a/code/client/client.h +++ b/code/client/client.h @@ -264,11 +264,6 @@ typedef struct { } serverInfo_t; typedef struct { - byte ip[4]; - unsigned short port; -} serverAddress_t; - -typedef struct { connstate_t state; // connection status qboolean cddialog; // bring up the cd needed dialog next frame @@ -295,18 +290,13 @@ typedef struct { serverInfo_t globalServers[MAX_GLOBAL_SERVERS]; // additional global servers int numGlobalServerAddresses; - serverAddress_t globalServerAddresses[MAX_GLOBAL_SERVERS]; + netadr_t globalServerAddresses[MAX_GLOBAL_SERVERS]; int numfavoriteservers; serverInfo_t favoriteServers[MAX_OTHER_SERVERS]; - int nummplayerservers; - serverInfo_t mplayerServers[MAX_OTHER_SERVERS]; - int pingUpdateSource; // source currently pinging or updating - int masterNum; - // update server info netadr_t updateServer; char updateChallenge[MAX_TOKEN_CHARS]; |