From 4501ee1b0df4aef0c7e8ff432c2f8134dd917cf9 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 24 Dec 2023 21:58:11 +0200 Subject: [PATCH 1/4] add key request to protocol support --- pymaster.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pymaster.py b/pymaster.py index 949823c..c07b4a2 100755 --- a/pymaster.py +++ b/pymaster.py @@ -108,6 +108,7 @@ def clientQuery(self, data, addr): info = data.split('\0')[1].strip('\\') split = info.split('\\') + key = None protocol = None gamedir = 'valve' clver = None @@ -125,6 +126,8 @@ def clientQuery(self, data, addr): clver = v elif k == 'protocol': protocol = int(v) + elif k == 'key': # defined but not implemented yet + key = v # somebody is playing :) elif k == 'thisismypcid' or k == 'heydevelopersifyoureadthis': self.fakeInfoForOldVersions(gamedir, addr) From db5738dbe4007fdcc97836b8d3695f34c7ec6eee Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 26 Dec 2023 09:39:00 +0200 Subject: [PATCH 2/4] pass key to packet --- pymaster.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pymaster.py b/pymaster.py index c07b4a2..52ac6c1 100755 --- a/pymaster.py +++ b/pymaster.py @@ -161,6 +161,9 @@ def clientQuery(self, data, addr): data = ('\xff\xff\xff\xffc %s:%d' % (addr[0], addr[1])).encode('latin_1') self.sock.sendto(data, i.addr) + if key: + packet = b"\x7f" + key.encode('latin_1') + # Use pregenerated address string packet += i.queryAddr packet += b'\0\0\0\0\0\0' # Fill last IP:Port with \0 From e5c6627586baf7cf1f6fadbdc485cf0413491dfe Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 26 Dec 2023 09:57:45 +0200 Subject: [PATCH 3/4] fix missed append operator --- pymaster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymaster.py b/pymaster.py index 52ac6c1..e97c154 100755 --- a/pymaster.py +++ b/pymaster.py @@ -162,7 +162,7 @@ def clientQuery(self, data, addr): self.sock.sendto(data, i.addr) if key: - packet = b"\x7f" + key.encode('latin_1') + packet += b"\x7f" + key.encode('latin_1') # Use pregenerated address string packet += i.queryAddr From 0af57a1e863c3bcf68f56b4831f5b92673db289a Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 26 Dec 2023 17:05:35 +0200 Subject: [PATCH 4/4] add key encoding fix by @a1batross #1542 --- pymaster.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pymaster.py b/pymaster.py index e97c154..7e2bde3 100755 --- a/pymaster.py +++ b/pymaster.py @@ -126,8 +126,8 @@ def clientQuery(self, data, addr): clver = v elif k == 'protocol': protocol = int(v) - elif k == 'key': # defined but not implemented yet - key = v + elif k == 'key': + key = int(v, 16) # somebody is playing :) elif k == 'thisismypcid' or k == 'heydevelopersifyoureadthis': self.fakeInfoForOldVersions(gamedir, addr) @@ -142,6 +142,10 @@ def clientQuery(self, data, addr): return packet = MasterProtocol.queryPacketHeader + + if key != None: + packet += b'\x7F' + pack(' i.die: self.serverList.remove(i) @@ -161,9 +165,6 @@ def clientQuery(self, data, addr): data = ('\xff\xff\xff\xffc %s:%d' % (addr[0], addr[1])).encode('latin_1') self.sock.sendto(data, i.addr) - if key: - packet += b"\x7f" + key.encode('latin_1') - # Use pregenerated address string packet += i.queryAddr packet += b'\0\0\0\0\0\0' # Fill last IP:Port with \0