aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCerapter <cerap@protonmail.com>2018-09-16 20:50:22 +0200
committerCerapter <cerap@protonmail.com>2018-09-16 20:50:22 +0200
commit851d1de1be6db6bcddfcc6a501e9eadc49b4f548 (patch)
treeb8b8a16917a17b7ca204a1a11d6bb6163c8149ed
parent41e12d304e7c4dd294c147eebd87f2a478ea84b7 (diff)
Websocket update.
-rw-r--r--server/aoprotocol.py5
-rw-r--r--server/websocket.py9
2 files changed, 8 insertions, 6 deletions
diff --git a/server/aoprotocol.py b/server/aoprotocol.py
index f07571dd..2adfc916 100644
--- a/server/aoprotocol.py
+++ b/server/aoprotocol.py
@@ -87,8 +87,7 @@ class AOProtocol(asyncio.Protocol):
self.client.disconnect()
for msg in self.get_messages():
if len(msg) < 2:
- self.client.disconnect()
- return
+ continue
# general netcode structure is not great
if msg[0] in ('#', '3', '4'):
if msg[0] == '#':
@@ -100,7 +99,7 @@ class AOProtocol(asyncio.Protocol):
cmd, *args = msg.split('#')
self.net_cmd_dispatcher[cmd](self, args)
except KeyError:
- return
+ logger.log_debug('[INC][UNK]{}'.format(msg), self.client)
def connection_made(self, transport):
""" Called upon a new client connecting
diff --git a/server/websocket.py b/server/websocket.py
index d77f678d..ba4258f3 100644
--- a/server/websocket.py
+++ b/server/websocket.py
@@ -109,14 +109,17 @@ class WebSocket:
self.keep_alive = 0
return
+ mask_offset = 2
if payload_length == 126:
payload_length = struct.unpack(">H", data[2:4])[0]
+ mask_offset = 4
elif payload_length == 127:
payload_length = struct.unpack(">Q", data[2:10])[0]
+ mask_offset = 10
- masks = data[2:6]
+ masks = data[mask_offset:mask_offset + 4]
decoded = ""
- for char in data[6:payload_length + 6]:
+ for char in data[mask_offset + 4:payload_length + mask_offset + 4]:
char ^= masks[len(decoded) % 4]
decoded += chr(char)
@@ -209,4 +212,4 @@ class WebSocket:
return response_key.decode('ASCII')
def finish(self):
- self.protocol.connection_lost(self) \ No newline at end of file
+ self.protocol.connection_lost(self)