|
From: Ludwig N. <l-...@us...> - 2005-04-24 10:29:00
|
Hi,
To not introduce yet another variable that just makes the mess even
more messy I'd suggest the following patch.
Index: qserver.h
===================================================================
RCS file: /cvsroot/qstat/qstat2/qserver.h,v
retrieving revision 1.3
diff -u -p -r1.3 qserver.h
--- qserver.h 16 Apr 2005 01:19:44 -0000 1.3
+++ qserver.h 24 Apr 2005 10:25:04 -0000
@@ -101,7 +101,6 @@ struct qserver {
int max_players;
int num_players;
int protocol_version;
- int state;
SavedData saved_data;
Index: qstat.c
===================================================================
RCS file: /cvsroot/qstat/qstat2/qstat.c,v
retrieving revision 1.76
diff -u -p -r1.76 qstat.c
--- qstat.c 16 Apr 2005 01:19:44 -0000 1.76
+++ qstat.c 24 Apr 2005 10:25:09 -0000
@@ -7560,6 +7560,7 @@ pariah_rule_packet( struct qserver *serv
if ( no_rules == seen )
{
// all done
+ server->next_rule = NULL;
return 1;
}
@@ -7572,6 +7573,9 @@ ut2003_rule_packet( struct qserver *serv
char *key, *value;
int result= 0;
+ // Packet Type
+ rawpkt++;
+
// we get size encoded key = value pairs
while ( rawpkt < end )
{
@@ -7678,7 +7682,10 @@ STATIC int
pariah_player_packet( struct qserver *server, char *rawpkt, char *end)
{
unsigned char no_players = rawpkt[1];
- unsigned char seen = 0;
+ unsigned char seen = 0; /* XXX: cannot work this way, it takes only
+ this packet into consideration. What if
+ player info is spread across multiple
+ packets? */
// type + no_players + some unknown preamble
rawpkt += 3;
@@ -7715,6 +7722,7 @@ pariah_player_packet( struct qserver *se
if ( no_players == seen )
{
// all done
+ server->num_players = server->n_player_info;
return 1;
}
@@ -7946,15 +7954,14 @@ deal_with_ut2003_packet( struct qserver
int requests = server->n_requests;
server->next_rule = "";
server->retry1 = n_retries;
- server->retry2 = n_retries;
+ server->retry2 = 0;
server->n_requests = requests; // would produce wrong ping
}
break;
case 0x11:
// Game info
- server->state += pariah_rule_packet( server, rawpkt, end );
- server->next_rule = "";
+ pariah_rule_packet( server, rawpkt, end );
server->retry1 = 0; /* we received at least one rule packet so
no need to retry. We'd get double
entries otherwise. */
@@ -7963,8 +7970,7 @@ deal_with_ut2003_packet( struct qserver
case 0x12:
// Player info
before = server->n_player_info;
- server->state += pariah_player_packet( server, rawpkt, end );
- server->retry2 = 0;
+ pariah_player_packet( server, rawpkt, end );
if ( before == server->n_player_info )
{
error = 1;
@@ -7981,15 +7987,11 @@ deal_with_ut2003_packet( struct qserver
* rule packets as we don't know how many we get
* We do clean up if we don't fetch server rules so we don't
* need to wait for timeout.
- * 2 == server->state indicates finished for pariah as both
- * rule and player packets state how many to expect
*/
- if (
- error ||
- (!get_server_rules && !get_player_info) ||
- (!get_server_rules && server->num_players == server->n_player_info) ||
- 2 == server->state
- )
+ if (error
+ || (!get_server_rules && !get_player_info)
+ || (!get_server_rules && server->num_players == server->n_player_info)
+ || (server->next_rule == NULL && server->num_players == server->n_player_info))
{
cleanup_qserver( server, 1 );
}
cu
Ludwig
--
(o_ Ludwig Nussel
//\
V_/_ PGP Key: FF8135CE
|