Package: qstat
Version: 2.15-1
Severity: normal
Tags: patch
Hello,
querying Teeworlds servers does not work with 2.15.
Please find attached a patch that fixes the issue for the 0.6.x
protocol versions.
Regards,
Markus
-- System Information:
Debian Release: 8.0
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.16.0-4-amd64 (SMP w/2 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages qstat depends on:
ii libc6 2.19-13
qstat recommends no packages.
qstat suggests no packages.
-- no debconf information
diff --git a/qstat.h b/qstat.h
index 1976923..d562214 100644
--- a/qstat.h
+++ b/qstat.h
@@ -872,7 +872,7 @@ char ottd_serverdetails[] = {
/* Teeworlds */
-char tee_serverstatus[14] = { '\x20', '\0', '\0', '\0', '\0', '\0', '\xFF', '\xFF', '\xFF', '\xFF', 'g', 'i', 'e', 'f' };
+char tee_serverstatus[15] = { '\x20', '\0', '\0', '\0', '\0', '\0', '\xFF', '\xFF', '\xFF', '\xFF', 'g', 'i', 'e', '3', '\x02' };
/* Cube2 */
diff --git a/tee.c b/tee.c
index bc9b400..2097bf9 100644
--- a/tee.c
+++ b/tee.c
@@ -17,7 +17,7 @@
#include "qstat.h"
#include "packet_manip.h"
-char tee_serverinfo[8] = { '\xFF', '\xFF', '\xFF', '\xFF', 'i', 'n', 'f', 'o' };
+char tee_serverinfo[9] = { '\xFF', '\xFF', '\xFF', '\xFF', 'i', 'n', 'f', '3' };
query_status_t send_tee_request_packet( struct qserver *server )
{
@@ -37,6 +37,8 @@ query_status_t deal_with_tee_packet( struct qserver *server, char *rawpkt, int p
if (0 == memcmp( pkt, tee_serverinfo, 8))
{
pkt += 8;
+ // unknown
+ pkt += strlen(pkt) + 1;
// version
version = strdup(pkt); pkt += strlen(pkt) + 1;
// server name
@@ -60,17 +62,27 @@ query_status_t deal_with_tee_packet( struct qserver *server, char *rawpkt, int p
}
pkt += strlen(pkt) + 1;
pkt += strlen(pkt) + 1;
- pkt += strlen(pkt) + 1;
+// pkt += strlen(pkt) + 1;
// num players
server->num_players = atoi(pkt); pkt += strlen(pkt) + 1;
// max players
server->max_players = atoi(pkt); pkt += strlen(pkt) + 1;
+ // num clients
+ pkt += strlen(pkt) + 1;
+ // max clients
+ pkt += strlen(pkt) + 1;
// players
for(i = 0; i < server->num_players; i++)
{
player = add_player( server, i );
player->name = strdup(pkt); pkt += strlen(pkt) + 1;
+ // clan
+ pkt += strlen(pkt) + 1;
+ // country
+ pkt += strlen(pkt) + 1;
player->score = atoi(pkt); pkt += strlen(pkt) + 1;
+ // is player
+ pkt += strlen(pkt) + 1;
}
// version reprise
server->protocol_version = 0;