From ac89424b925dfaf3e0eece064311ba5316013208 Mon Sep 17 00:00:00 2001 From: Melle Sieswerda Date: Sun, 4 Nov 2018 21:58:06 +0100 Subject: [PATCH 1/2] Receiving messages (i.e. events with name 'message') now works properly. `EngineIO._on_message()` seems consider _any_ incoming data (message or event) to be a "message". Before this change handlers specified for 'message' would therefore also receive the raw SocketIO packet. --- socketIO_client/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index 4bfb464..decdefb 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -298,9 +298,12 @@ def _process_packet(self, packet): except KeyError: raise PacketError( 'unexpected engine.io packet type (%s)' % engineIO_packet_type) - delegate(engineIO_packet_data, namespace) + if engineIO_packet_type == 4: return engineIO_packet_data + + delegate(engineIO_packet_data, namespace) + def _on_open(self, data, namespace): namespace._find_packet_callback('open')() From 55e8fd72c8edcde8e0e2305ed65738716f739b32 Mon Sep 17 00:00:00 2001 From: Melle Sieswerda Date: Sun, 4 Nov 2018 23:09:28 +0100 Subject: [PATCH 2/2] Stop trying to connect when receiving an http 401 (unauthorized). --- socketIO_client/exceptions.py | 4 ++++ socketIO_client/transports.py | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/socketIO_client/exceptions.py b/socketIO_client/exceptions.py index a16697c..8ce5e3b 100644 --- a/socketIO_client/exceptions.py +++ b/socketIO_client/exceptions.py @@ -12,3 +12,7 @@ class PacketError(SocketIOError): class TimeoutError(SocketIOError): pass + + +class AuthorizationError(SocketIOError): + pass \ No newline at end of file diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index c43ed0c..c867f5b 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -21,7 +21,7 @@ else: from websocket._ssl_compat import SSLError -from .exceptions import ConnectionError, TimeoutError +from .exceptions import ConnectionError, TimeoutError, AuthorizationError from .parsers import ( encode_engineIO_content, decode_engineIO_content, format_packet_text, parse_packet_text) @@ -183,7 +183,10 @@ def get_response(request, *args, **kw): except requests.exceptions.SSLError as e: raise ConnectionError('could not negotiate SSL (%s)' % e) status_code = response.status_code + if 200 != status_code: + if status_code == 401: + raise AuthorizationError('unauthorized') raise ConnectionError('unexpected status code (%s %s)' % ( status_code, response.text)) return response