@@ -67,6 +67,7 @@ struct ping_t
67
67
int start;
68
68
int time;
69
69
char challenge[ 9 ]; // 8-character challenge string
70
+ serverResponseProtocol_t responseProto;
70
71
char info[ MAX_INFO_STRING ];
71
72
};
72
73
@@ -92,7 +93,7 @@ static void CL_InitServerInfo( serverInfo_t *server, netadr_t *address )
92
93
server->pingAttempts = 0 ;
93
94
server->ping = -1 ;
94
95
server->game [ 0 ] = ' \0 ' ;
95
- server->netType = netadrtype_t ::NA_BOT ;
96
+ server->responseProto = serverResponseProtocol_t::UNKNOWN ;
96
97
}
97
98
98
99
/*
@@ -485,7 +486,9 @@ void CL_ServersResponsePacket( const netadr_t *from, msg_t *msg, bool extended )
485
486
parsed_count, numservers, duplicate_count, count );
486
487
}
487
488
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 )
489
492
{
490
493
if ( info )
491
494
{
@@ -496,34 +499,36 @@ static void CL_SetServerInfo( serverInfo_t *server, const char *info, pingStatus
496
499
Q_strncpyz ( server->mapName , Info_ValueForKey ( info, " mapname" ), MAX_NAME_LENGTH );
497
500
server->maxClients = atoi ( Info_ValueForKey ( info, " sv_maxclients" ) );
498
501
Q_strncpyz ( server->game , Info_ValueForKey ( info, " game" ), MAX_NAME_LENGTH );
499
- server->netType = Util::enum_cast<netadrtype_t >(atoi (Info_ValueForKey (info, " nettype" )));
500
502
server->minPing = atoi ( Info_ValueForKey ( info, " minping" ) );
501
503
server->maxPing = atoi ( Info_ValueForKey ( info, " maxping" ) );
502
504
server->needpass = atoi ( Info_ValueForKey ( info, " g_needpass" ) ); // NERVE - SMF
503
505
Q_strncpyz ( server->gameName , Info_ValueForKey ( info, " gamename" ), MAX_NAME_LENGTH ); // Arnout
504
506
}
505
507
508
+ server->responseProto = proto;
506
509
server->pingStatus = pingStatus;
507
510
server->ping = ping;
508
511
}
509
512
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 )
511
516
{
512
517
int i;
513
518
514
519
for ( i = 0 ; i < MAX_OTHER_SERVERS; i++ )
515
520
{
516
521
if ( NET_CompareAdr ( from, cls.localServers [ i ].adr ) )
517
522
{
518
- CL_SetServerInfo ( &cls.localServers [ i ], info, pingStatus, ping );
523
+ CL_SetServerInfo ( &cls.localServers [ i ], info, proto, pingStatus, ping );
519
524
}
520
525
}
521
526
522
527
for ( i = 0 ; i < MAX_GLOBAL_SERVERS; i++ )
523
528
{
524
529
if ( NET_CompareAdr ( from, cls.globalServers [ i ].adr ) )
525
530
{
526
- CL_SetServerInfo ( &cls.globalServers [ i ], info, pingStatus, ping );
531
+ CL_SetServerInfo ( &cls.globalServers [ i ], info, proto, pingStatus, ping );
527
532
}
528
533
}
529
534
}
@@ -535,7 +540,7 @@ CL_ServerInfoPacket
535
540
*/
536
541
void CL_ServerInfoPacket ( const netadr_t & from, msg_t *msg )
537
542
{
538
- int i, type ;
543
+ int i;
539
544
char info[ MAX_INFO_STRING ];
540
545
// char* str;
541
546
char *infoString;
@@ -582,27 +587,24 @@ void CL_ServerInfoPacket( const netadr_t& from, msg_t *msg )
582
587
Q_strncpyz ( cl_pinglist[ i ].info , infoString, sizeof ( cl_pinglist[ i ].info ) );
583
588
584
589
// tack on the net type
585
- // NOTE: make sure these types are in sync with the netnames strings in the UI
586
590
switch ( from.type )
587
591
{
588
592
case netadrtype_t ::NA_BROADCAST:
589
593
case netadrtype_t ::NA_IP:
590
- // str = "udp";
591
- type = 1 ;
594
+ cl_pinglist[ i ].responseProto = serverResponseProtocol_t::IP4;
592
595
break ;
593
596
594
597
case netadrtype_t ::NA_IP6:
595
- type = 2 ;
598
+ cl_pinglist[ i ]. responseProto = serverResponseProtocol_t::IP6 ;
596
599
break ;
597
600
598
601
default :
599
- // str = "???";
600
- type = 0 ;
602
+ cl_pinglist[ i ].responseProto = serverResponseProtocol_t::UNKNOWN;
601
603
break ;
602
604
}
603
605
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 );
606
608
607
609
return ;
608
610
}
@@ -649,7 +651,7 @@ void CL_ServerInfoPacket( const netadr_t& from, msg_t *msg )
649
651
cls.localServers [ i ].pingStatus = pingStatus_t::WAITING;
650
652
cls.localServers [ i ].pingAttempts = 0 ;
651
653
cls.localServers [ i ].game [ 0 ] = ' \0 ' ;
652
- cls.localServers [ i ].netType = from. type ;
654
+ cls.localServers [ i ].responseProto = serverResponseProtocol_t::UNKNOWN ;
653
655
cls.localServers [ i ].needpass = 0 ;
654
656
cls.localServers [ i ].gameName [ 0 ] = ' \0 ' ; // Arnout
655
657
@@ -851,7 +853,10 @@ static pingStatus_t CL_GetPing( int n )
851
853
}
852
854
}
853
855
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 );
855
860
856
861
return status;
857
862
}
@@ -1002,7 +1007,8 @@ void CL_Ping_f()
1002
1007
pingptr->time = -1 ;
1003
1008
GeneratePingChallenge ( *pingptr );
1004
1009
1005
- CL_SetServerInfoByAddress ( pingptr->adr , nullptr , pingStatus_t::WAITING, 0 );
1010
+ CL_SetServerInfoByAddress ( pingptr->adr , nullptr , serverResponseProtocol_t::UNKNOWN,
1011
+ pingStatus_t::WAITING, 0 );
1006
1012
1007
1013
Net::OutOfBandPrint ( netsrc_t ::NS_CLIENT, to, " getinfo %s" , pingptr->challenge );
1008
1014
}
0 commit comments