From 11e2f648867c6fbc61a768815c1c6281f5ab7f2e Mon Sep 17 00:00:00 2001 From: Larivact Date: Fri, 16 Dec 2016 19:13:13 +0100 Subject: [PATCH] fix unicode handling, drop Python2 support --- README.md | 2 +- ...websocket_server.py => websocket_server.py | 31 +++---------------- websocket_server/__init__.py | 1 - 3 files changed, 5 insertions(+), 29 deletions(-) rename websocket_server/websocket_server.py => websocket_server.py (94%) delete mode 100644 websocket_server/__init__.py diff --git a/README.md b/README.md index 9bedcae..aca3d26 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Websocket Server A minimal Websockets Server in Python with no external dependencies. - * Works with Python2 and Python3 + * Requires Python3 * Clean simple API * Multiple clients * No dependencies diff --git a/websocket_server/websocket_server.py b/websocket_server.py similarity index 94% rename from websocket_server/websocket_server.py rename to websocket_server.py index e48fd33..9a3d5b6 100644 --- a/websocket_server/websocket_server.py +++ b/websocket_server.py @@ -1,4 +1,4 @@ -# Author: Johan Hanssen Seferidis +# Original author: Johan Hanssen Seferidis # License: MIT import re, sys @@ -7,13 +7,7 @@ from hashlib import sha1 import logging -if sys.version_info[0] < 3 : - from SocketServer import ThreadingMixIn, TCPServer, StreamRequestHandler -else: - from socketserver import ThreadingMixIn, TCPServer, StreamRequestHandler - - - +from socketserver import ThreadingMixIn, TCPServer, StreamRequestHandler ''' +-+-+-+-+-------+-+-------------+-------------------------------+ @@ -75,8 +69,6 @@ def send_message(self, client, msg): def send_message_to_all(self, msg): self._multicast_(msg) - - # ------------------------- Implementation ----------------------------- class WebsocketServer(ThreadingMixIn, TCPServer, API): @@ -130,8 +122,6 @@ def handler_to_client(self, handler): if client['handler'] == handler: return client - - class WebSocketHandler(StreamRequestHandler): def __init__(self, socket, addr, server): @@ -189,10 +179,8 @@ def read_next_message(self): payload_length = struct.unpack(">Q", self.rfile.read(8))[0] masks = self.read_bytes(4) - decoded = "" - for char in self.read_bytes(payload_length): - char ^= masks[len(decoded) % 4] - decoded += chr(char) + + decoded = bytes([i^masks[idx % 4] for idx, i in enumerate(self.read_bytes(payload_length))]).decode() self.server._message_received_(self, decoded) def send_message(self, message): @@ -279,8 +267,6 @@ def calculate_response_key(self, key): def finish(self): self.server._client_left_(self) - - def encode_to_UTF8(data): try: return data.encode('UTF-8') @@ -291,8 +277,6 @@ def encode_to_UTF8(data): raise(e) return False - - def try_decode_UTF8(data): try: return data.decode('utf-8') @@ -300,10 +284,3 @@ def try_decode_UTF8(data): return False except Exception as e: raise(e) - - - -# This is only for testing purposes -class DummyWebsocketHandler(WebSocketHandler): - def __init__(self, *_): - pass diff --git a/websocket_server/__init__.py b/websocket_server/__init__.py deleted file mode 100644 index 2a6bf45..0000000 --- a/websocket_server/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .websocket_server import *