From bbcdf3af4599f533496a307c8be61887eca70650 Mon Sep 17 00:00:00 2001 From: timriker Date: Sun, 2 Oct 2005 07:18:59 +0000 Subject: [PATCH] handle 2.0.4 servers git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk@1239 c11ca15a-4712-0410-83d8-924469b57eb5 --- blootbot/src/Modules/BZFlag.pl | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/blootbot/src/Modules/BZFlag.pl b/blootbot/src/Modules/BZFlag.pl index 33538af..518efbe 100755 --- a/blootbot/src/Modules/BZFlag.pl +++ b/blootbot/src/Modules/BZFlag.pl @@ -62,7 +62,7 @@ sub list { my $playerSize = hex($rogueSize) + hex($redSize) + hex($greenSize) + hex($blueSize) + hex($purpleSize) + hex($observerSize); $servers{$serverport} = $playerSize; - $servers{$version} += $playerSize; + $servers{$version} += $playerSize; $servers{'PLAYERS'} += $playerSize; $totalServers += 1; } @@ -130,7 +130,7 @@ sub querytext { # port to port number my ($name,$aliases,$proto) = getprotobyname('tcp'); - ($name,$aliases,$port) = getservbyname($port,'tcp') unless $port =~ /^\d+$/; + ($name,$aliases,$port) = getservbyname($port,'tcp') unless $port =~ /^\d+$/; # get server address my ($type,$len,$serveraddr); @@ -151,7 +151,7 @@ sub querytext { # parse reply my ($magic,$major,$minor,$something,$revision) = unpack("a4 a1 a1 a1 a1", $buffer); - my ($version) = $magic . $major . $minor . $something . $revision; + my ($version) = $magic . $major . $minor . $something . $revision; # quit if version isn't valid return 'not a bzflag server' if ($magic ne "BZFS"); @@ -161,14 +161,26 @@ sub querytext { # 1.11.x handled here return 'read error' unless read(S1, $buffer, 1) == 1; my ($id) = unpack("C", $buffer); - return "rejected by server" if ($id == 255); + return "rejected by server" if ($id == 255); # send game request print S1 pack("n2", 0, 0x7167); # get reply - return 'server read error' unless read(S1, $buffer, 46) == 46; - my ($infolen,$infocode,$style,$maxPlayers,$maxShots, + my $nbytes = read(S1, $buffer, 4); + my ($infolen, $infocode) = unpack("n2", $buffer); + if ($infocode == 0x6774) { + # read and ignore MsgGameTime from new servers + $nbytes = read(S1, $buffer, 8); + $nbytes = read(S1, $buffer, 4); + ($infolen, $infocode) = unpack("n2", $buffer); + } + $nbytes = read(S1, $buffer, 42); + if ($nbytes != 42) { + return "Error: read $nbytes bytes, expecting 46: $^E\n"; + } + + my ($style,$maxPlayers,$maxShots, $rogueSize,$redSize,$greenSize,$blueSize,$purpleSize,$observerSize, $rogueMax,$redMax,$greenMax,$blueMax,$purpleMax,$observerMax, $shakeWins,$shakeTimeout, @@ -268,7 +280,7 @@ sub querytext { # close socket close(S1); } elsif ($major == 1 && $minor == 0 && $something == 7) { - # 1.7* versions handled here + # 1.7* versions handled here # old servers send a reconnect port number return 'read error' unless read(S1, $buffer, 2) == 2; my ($reconnect) = unpack("n", $buffer); -- 2.39.2