- Add scope id to ipv6 addresses.
- Clean up a few other ipv6 issues like removing the seemingly unnecessary MacOSX workaround. - Bring ipv6 master server up to speed for dpmaster Thanks go out to Mathieu Olivier for this work.
This commit is contained in:
parent
b7799e644a
commit
9dd887b2ea
5 changed files with 48 additions and 17 deletions
|
@ -2172,7 +2172,7 @@ void CL_InitServerInfo( serverInfo_t *server, netadr_t *address ) {
|
|||
CL_ServersResponsePacket
|
||||
===================
|
||||
*/
|
||||
void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
|
||||
void CL_ServersResponsePacket( const netadr_t* from, msg_t *msg, qboolean extended ) {
|
||||
int i, count, total;
|
||||
netadr_t addresses[MAX_SERVERSPERPACKET];
|
||||
int numservers;
|
||||
|
@ -2195,7 +2195,7 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
|
|||
// advance to initial token
|
||||
do
|
||||
{
|
||||
if(*buffptr == '\\' || *buffptr == '/')
|
||||
if(*buffptr == '\\' || (extended && *buffptr == '/'))
|
||||
break;
|
||||
|
||||
buffptr++;
|
||||
|
@ -2203,6 +2203,7 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
|
|||
|
||||
while (buffptr + 1 < buffend)
|
||||
{
|
||||
// IPv4 address
|
||||
if (*buffptr == '\\')
|
||||
{
|
||||
buffptr++;
|
||||
|
@ -2215,7 +2216,8 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
|
|||
|
||||
addresses[numservers].type = NA_IP;
|
||||
}
|
||||
else
|
||||
// IPv6 address, if it's an extended response
|
||||
else if (extended && *buffptr == '/')
|
||||
{
|
||||
buffptr++;
|
||||
|
||||
|
@ -2226,7 +2228,11 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
|
|||
addresses[numservers].ip6[i] = *buffptr++;
|
||||
|
||||
addresses[numservers].type = NA_IP6;
|
||||
addresses[numservers].scope_id = from->scope_id;
|
||||
}
|
||||
else
|
||||
// syntax error!
|
||||
break;
|
||||
|
||||
// parse out port
|
||||
addresses[numservers].port = (*buffptr++) << 8;
|
||||
|
@ -2378,9 +2384,15 @@ void CL_ConnectionlessPacket( netadr_t from, msg_t *msg ) {
|
|||
return;
|
||||
}
|
||||
|
||||
// echo request from server
|
||||
// list of servers sent back by a master server (classic)
|
||||
if ( !Q_strncmp(c, "getserversResponse", 18) ) {
|
||||
CL_ServersResponsePacket( from, msg );
|
||||
CL_ServersResponsePacket( &from, msg, qfalse );
|
||||
return;
|
||||
}
|
||||
|
||||
// list of servers sent back by a master server (extended)
|
||||
if ( !Q_strncmp(c, "getserversExtResponse", 21) ) {
|
||||
CL_ServersResponsePacket( &from, msg, qtrue );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3616,6 +3628,7 @@ void CL_GlobalServers_f( void ) {
|
|||
netadr_t to;
|
||||
int count, i, masterNum;
|
||||
char command[1024], *masteraddress;
|
||||
char *cmdname;
|
||||
|
||||
if ((count = Cmd_Argc()) < 3 || (masterNum = atoi(Cmd_Argv(1))) < 0 || masterNum > 4)
|
||||
{
|
||||
|
@ -3650,7 +3663,17 @@ void CL_GlobalServers_f( void ) {
|
|||
cls.numglobalservers = -1;
|
||||
cls.pingUpdateSource = AS_GLOBAL;
|
||||
|
||||
Com_sprintf( command, sizeof(command), "getservers %s", Cmd_Argv(2) );
|
||||
// Use the extended query for IPv6 masters
|
||||
if (to.type == NA_IP6 || to.type == NA_MULTICAST6)
|
||||
{
|
||||
cmdname = "getserversExt " GAMENAME;
|
||||
|
||||
// TODO: test if we only have an IPv6 connection. If it's the case,
|
||||
// request IPv6 servers only by appending " ipv6" to the command
|
||||
}
|
||||
else
|
||||
cmdname = "getservers";
|
||||
Com_sprintf( command, sizeof(command), "%s %s", cmdname, Cmd_Argv(2) );
|
||||
|
||||
for (i=3; i < count; i++)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue