From 3ef0d2e1446f6eca0a9a95ec0231dcfd8f75b2fa Mon Sep 17 00:00:00 2001 From: polaris Date: Fri, 18 Apr 2014 14:40:50 -0400 Subject: [PATCH] Wait for challenge response before sending again --- gamespy_qr_server.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gamespy_qr_server.py b/gamespy_qr_server.py index 9ed3707..934a584 100644 --- a/gamespy_qr_server.py +++ b/gamespy_qr_server.py @@ -177,13 +177,15 @@ class GameSpyQRServer(object): client_challenge = recv_data[5:-1] if client_challenge == challenge: # Challenge succeeded - self.sessions[session_id].sent_challenge = True - # Handle successful challenge stuff here + # Send message back to client saying it was accepted packet = bytearray([0xfe, 0xfd, 0x0a]) # Send client registered command packet.extend(session_id_raw) # Get the session ID self.socket.sendto(packet, address) self.log(logging.DEBUG, address, "Sent client registered to %s:%s..." % (address[0], address[1])) + else: + # Failed the challenge, request another during the next heartbeat + self.sessions[session_id].sent_challenge = False elif recv_data[0] == '\x02': # Echo self.log(logging.DEBUG, address, "NOT IMPLEMENTED! Received echo from %s:%s... %s" % (address[0], address[1], recv_data[5:])) @@ -231,6 +233,8 @@ class GameSpyQRServer(object): self.socket.sendto(packet, address) self.log(logging.DEBUG, address, "Sent challenge to %s:%s..." % (address[0], address[1])) + self.sessions[session_id].sent_challenge = True + if "statechanged" in k: if k['statechanged'] == "1": # Create server if k['publicport'] != "0" and k['publicip'] != "0":