Skip to content

Commit cee882d

Browse files
committed
Clean up "nettype" from server info for cgame
This field is 1 if a server responded via IPv4 or 2 if via IPv6. Define an enum for this and don't use netadrtype_t (whose values don't match). In ping_t / serverInfo_t define a struct field instead of stuffing it in the info string.
1 parent 9f00285 commit cee882d

File tree

4 files changed

+33
-20
lines changed

4 files changed

+33
-20
lines changed

src/engine/client/cg_api.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ enum class MouseMode
8080
SystemCursor, // The input is sent as positions, the cursor should be rendered by the system
8181
};
8282

83+
enum class serverResponseProtocol_t : uint8_t
84+
{
85+
UNKNOWN,
86+
IP4,
87+
IP6,
88+
};
89+
8390
using markMsgInput_t = std::pair<
8491
std::vector<std::array<float, 3>>, // points
8592
std::array<float, 3> // projection

src/engine/client/cl_cgame.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ static void LAN_GetServerInfo( int source, int n, char *buf, int buflen )
435435
Info_SetValueForKey( info, "minping", va( "%i", server->minPing ), false );
436436
Info_SetValueForKey( info, "maxping", va( "%i", server->maxPing ), false );
437437
Info_SetValueForKey( info, "game", server->game, false );
438-
Info_SetValueForKey( info, "nettype", Util::enum_str(server->netType), false );
438+
Info_SetValueForKey( info, "nettype", Util::enum_str( server->responseProto ), false );
439439
Info_SetValueForKey( info, "addr", Net::AddressToString( server->adr, true ).c_str(), false );
440440
Info_SetValueForKey( info, "needpass", va( "%i", server->needpass ), false ); // NERVE - SMF
441441
Info_SetValueForKey( info, "gamename", server->gameName, false ); // Arnout

src/engine/client/cl_serverlist.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ struct ping_t
6767
int start;
6868
int time;
6969
char challenge[ 9 ]; // 8-character challenge string
70+
serverResponseProtocol_t responseProto;
7071
char info[ MAX_INFO_STRING ];
7172
};
7273

@@ -92,7 +93,7 @@ static void CL_InitServerInfo( serverInfo_t *server, netadr_t *address )
9293
server->pingAttempts = 0;
9394
server->ping = -1;
9495
server->game[ 0 ] = '\0';
95-
server->netType = netadrtype_t::NA_BOT;
96+
server->responseProto = serverResponseProtocol_t::UNKNOWN;
9697
}
9798

9899
/*
@@ -485,7 +486,9 @@ void CL_ServersResponsePacket( const netadr_t *from, msg_t *msg, bool extended )
485486
parsed_count, numservers, duplicate_count, count );
486487
}
487488

488-
static void CL_SetServerInfo( serverInfo_t *server, const char *info, pingStatus_t pingStatus, int ping )
489+
static void CL_SetServerInfo(
490+
serverInfo_t *server, const char *info,
491+
serverResponseProtocol_t proto, pingStatus_t pingStatus, int ping )
489492
{
490493
if ( info )
491494
{
@@ -496,34 +499,36 @@ static void CL_SetServerInfo( serverInfo_t *server, const char *info, pingStatus
496499
Q_strncpyz( server->mapName, Info_ValueForKey( info, "mapname" ), MAX_NAME_LENGTH );
497500
server->maxClients = atoi( Info_ValueForKey( info, "sv_maxclients" ) );
498501
Q_strncpyz( server->game, Info_ValueForKey( info, "game" ), MAX_NAME_LENGTH );
499-
server->netType = Util::enum_cast<netadrtype_t>(atoi(Info_ValueForKey(info, "nettype")));
500502
server->minPing = atoi( Info_ValueForKey( info, "minping" ) );
501503
server->maxPing = atoi( Info_ValueForKey( info, "maxping" ) );
502504
server->needpass = atoi( Info_ValueForKey( info, "g_needpass" ) ); // NERVE - SMF
503505
Q_strncpyz( server->gameName, Info_ValueForKey( info, "gamename" ), MAX_NAME_LENGTH ); // Arnout
504506
}
505507

508+
server->responseProto = proto;
506509
server->pingStatus = pingStatus;
507510
server->ping = ping;
508511
}
509512

510-
static void CL_SetServerInfoByAddress( const netadr_t& from, const char *info, pingStatus_t pingStatus, int ping )
513+
static void CL_SetServerInfoByAddress(
514+
const netadr_t& from, const char *info,
515+
serverResponseProtocol_t proto, pingStatus_t pingStatus, int ping )
511516
{
512517
int i;
513518

514519
for ( i = 0; i < MAX_OTHER_SERVERS; i++ )
515520
{
516521
if ( NET_CompareAdr( from, cls.localServers[ i ].adr ) )
517522
{
518-
CL_SetServerInfo( &cls.localServers[ i ], info, pingStatus, ping );
523+
CL_SetServerInfo( &cls.localServers[ i ], info, proto, pingStatus, ping );
519524
}
520525
}
521526

522527
for ( i = 0; i < MAX_GLOBAL_SERVERS; i++ )
523528
{
524529
if ( NET_CompareAdr( from, cls.globalServers[ i ].adr ) )
525530
{
526-
CL_SetServerInfo( &cls.globalServers[ i ], info, pingStatus, ping );
531+
CL_SetServerInfo( &cls.globalServers[ i ], info, proto, pingStatus, ping );
527532
}
528533
}
529534
}
@@ -535,7 +540,7 @@ CL_ServerInfoPacket
535540
*/
536541
void CL_ServerInfoPacket( const netadr_t& from, msg_t *msg )
537542
{
538-
int i, type;
543+
int i;
539544
char info[ MAX_INFO_STRING ];
540545
// char* str;
541546
char *infoString;
@@ -582,27 +587,24 @@ void CL_ServerInfoPacket( const netadr_t& from, msg_t *msg )
582587
Q_strncpyz( cl_pinglist[ i ].info, infoString, sizeof( cl_pinglist[ i ].info ) );
583588

584589
// tack on the net type
585-
// NOTE: make sure these types are in sync with the netnames strings in the UI
586590
switch ( from.type )
587591
{
588592
case netadrtype_t::NA_BROADCAST:
589593
case netadrtype_t::NA_IP:
590-
//str = "udp";
591-
type = 1;
594+
cl_pinglist[ i ].responseProto = serverResponseProtocol_t::IP4;
592595
break;
593596

594597
case netadrtype_t::NA_IP6:
595-
type = 2;
598+
cl_pinglist[ i ].responseProto = serverResponseProtocol_t::IP6;
596599
break;
597600

598601
default:
599-
//str = "???";
600-
type = 0;
602+
cl_pinglist[ i ].responseProto = serverResponseProtocol_t::UNKNOWN;
601603
break;
602604
}
603605

604-
Info_SetValueForKey( cl_pinglist[ i ].info, "nettype", va( "%d", type ), false );
605-
CL_SetServerInfoByAddress( from, infoString, pingStatus_t::COMPLETE, cl_pinglist[ i ].time );
606+
CL_SetServerInfoByAddress( from, infoString, cl_pinglist[ i ].responseProto,
607+
pingStatus_t::COMPLETE, cl_pinglist[ i ].time );
606608

607609
return;
608610
}
@@ -649,7 +651,7 @@ void CL_ServerInfoPacket( const netadr_t& from, msg_t *msg )
649651
cls.localServers[ i ].pingStatus = pingStatus_t::WAITING;
650652
cls.localServers[ i ].pingAttempts = 0;
651653
cls.localServers[ i ].game[ 0 ] = '\0';
652-
cls.localServers[ i ].netType = from.type;
654+
cls.localServers[ i ].responseProto = serverResponseProtocol_t::UNKNOWN;
653655
cls.localServers[ i ].needpass = 0;
654656
cls.localServers[ i ].gameName[ 0 ] = '\0'; // Arnout
655657

@@ -851,7 +853,10 @@ static pingStatus_t CL_GetPing( int n )
851853
}
852854
}
853855

854-
CL_SetServerInfoByAddress( cl_pinglist[ n ].adr, cl_pinglist[ n ].info, status, time );
856+
// FIXME: do we really need to call this again? CL_ServerInfoPacket already calls it
857+
// at the moment the ping response arrives
858+
CL_SetServerInfoByAddress( cl_pinglist[ n ].adr, cl_pinglist[ n ].info,
859+
cl_pinglist[ n ].responseProto, status, time );
855860

856861
return status;
857862
}
@@ -1002,7 +1007,8 @@ void CL_Ping_f()
10021007
pingptr->time = -1;
10031008
GeneratePingChallenge( *pingptr );
10041009

1005-
CL_SetServerInfoByAddress( pingptr->adr, nullptr, pingStatus_t::WAITING, 0 );
1010+
CL_SetServerInfoByAddress( pingptr->adr, nullptr, serverResponseProtocol_t::UNKNOWN,
1011+
pingStatus_t::WAITING, 0 );
10061012

10071013
Net::OutOfBandPrint( netsrc_t::NS_CLIENT, to, "getinfo %s", pingptr->challenge );
10081014
}

src/engine/client/client.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ struct serverInfo_t
259259
char mapName[ MAX_NAME_LENGTH ];
260260
char game[ MAX_NAME_LENGTH ];
261261
char label[ MAX_FEATLABEL_CHARS ]; // for featured servers, nullptr otherwise
262-
netadrtype_t netType;
262+
serverResponseProtocol_t responseProto;
263263
int clients;
264264
int bots;
265265
int maxClients;

0 commit comments

Comments
 (0)