aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorthilo <thilo@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-04-12 19:53:16 +0000
committerthilo <thilo@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-04-12 19:53:16 +0000
commit22962a8f9bc4fe8073d85c9911ffb79c870e6271 (patch)
tree515c7895a7c6ee6d478b7097a63943567b58985b
parent14d055dbf81a59857883a6cac578847e44557870 (diff)
downloadioquake3-aero-22962a8f9bc4fe8073d85c9911ffb79c870e6271.tar.gz
ioquake3-aero-22962a8f9bc4fe8073d85c9911ffb79c870e6271.zip
Another change to server parsing as a server reporting in from 69.79.84.0/24 with the master server could screw up the server list in ioquake3 clients.
git-svn-id: svn://svn.icculus.org/quake3/trunk@1316 edf5b092-35ff-0310-97b2-ce42778d08ea
-rw-r--r--code/client/cl_main.c54
1 files changed, 25 insertions, 29 deletions
diff --git a/code/client/cl_main.c b/code/client/cl_main.c
index 582fd19..e8c4f4b 100644
--- a/code/client/cl_main.c
+++ b/code/client/cl_main.c
@@ -1843,7 +1843,6 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
int numservers;
byte* buffptr;
byte* buffend;
- netadrtype_t family = NA_IP;
Com_Printf("CL_ServersResponsePacket\n");
@@ -1857,47 +1856,43 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
numservers = 0;
buffptr = msg->data;
buffend = buffptr + msg->cursize;
- while (buffptr+1 < buffend)
+
+ // advance to initial token
+ do
+ {
+ if(*buffptr == '\\' || *buffptr == '/')
+ break;
+
+ buffptr++;
+ } while (buffptr < buffend);
+
+ while (buffptr + 1 < buffend)
{
- // advance to initial token
- do
+ if (*buffptr == '\\')
{
- if (*buffptr == '\\')
- {
- family = NA_IP;
- break;
- }
- else if(*buffptr == '/')
- {
- family = NA_IP6;
- break;
- }
-
buffptr++;
- }
- while (buffptr < buffend);
- buffptr++;
-
- if(family == NA_IP)
- {
- if (buffend - buffptr < sizeof(addresses[numservers].ip) + sizeof(addresses[numservers].port) + sizeof("\\EOT") - 1)
+ if (buffend - buffptr < sizeof(addresses[numservers].ip) + sizeof(addresses[numservers].port) + 1)
break;
-
+
for(i = 0; i < sizeof(addresses[numservers].ip); i++)
addresses[numservers].ip[i] = *buffptr++;
+
+ addresses[numservers].type = NA_IP;
}
else
{
- if (buffend - buffptr < sizeof(addresses[numservers].ip6) + sizeof(addresses[numservers].port) + sizeof("\\EOT") - 1)
+ buffptr++;
+
+ if (buffend - buffptr < sizeof(addresses[numservers].ip6) + sizeof(addresses[numservers].port) + 1)
break;
for(i = 0; i < sizeof(addresses[numservers].ip6); i++)
addresses[numservers].ip6[i] = *buffptr++;
+
+ addresses[numservers].type = NA_IP6;
}
-
- addresses[numservers].type = family;
-
+
// parse out port
addresses[numservers].port = (*buffptr++) << 8;
addresses[numservers].port += *buffptr++;
@@ -1912,8 +1907,9 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
break;
// parse out EOT
- if (buffptr[1] == 'E' && buffptr[2] == 'O' && buffptr[3] == 'T')
- break;
+ // not anymore.. as servers from 69.79.84.0/24 can screw up the server list with this.
+// if (buffptr[1] == 'E' && buffptr[2] == 'O' && buffptr[3] == 'T')
+// break;
}
count = cls.numglobalservers;