From c2319fcf29b9cbdc88acd269c97400609fdc6ed4 Mon Sep 17 00:00:00 2001 From: Josiah Baldwin Date: Mon, 17 Feb 2025 12:22:31 -0800 Subject: [PATCH 1/3] Updated requirements to websockets 15. This breaks things. --- docs/requirements.txt | 2 +- requirements.txt | Bin 138 -> 142 bytes setup.cfg | 2 +- tests/requirements.txt | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index ecf7317..96865ff 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -8,5 +8,5 @@ sphinx-toolbox>=2.16.0 cffi~=1.17.1 cryptography~=44.0.1 pycparser~=2.22 -websockets~=14.2 +websockets~=15.0.0 enum_tools \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 0449e97c8dbe4ed604f13976c4549ad5b4de8cd4..cabe955a5ca2237afd87ccd603c18dd33879708b 100644 GIT binary patch delta 19 XcmeBT>|>nZ!D-5%$6x@$6Mby~D%=DJ delta 15 WcmeBU>|&hY!D_;w$6z!u&=vq5xC5&I diff --git a/setup.cfg b/setup.cfg index 7117231..ce7c3f8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -45,7 +45,7 @@ python_requires = >=3.8 install_requires = importlib-metadata cryptography~=44.0.1 - websockets~=14.2 + websockets~=15.0.0 python-socks[asyncio]~=2.5.3 diff --git a/tests/requirements.txt b/tests/requirements.txt index c6afd10..539d7da 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -3,4 +3,4 @@ pytest-asyncio cffi==1.17.1 cryptography~=44.0.1 pycparser==2.22 -websockets~=14.2 \ No newline at end of file +websockets~=15.0.0 \ No newline at end of file From 9a1311167d7dd79ae64685e2242e2063418357be Mon Sep 17 00:00:00 2001 From: Josiah Baldwin Date: Mon, 17 Feb 2025 12:54:01 -0800 Subject: [PATCH 2/3] Added traceback printing for autoreconnect test in case the error type changes --- tests/test_session.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/test_session.py b/tests/test_session.py index 197220a..ca2d163 100644 --- a/tests/test_session.py +++ b/tests/test_session.py @@ -46,9 +46,11 @@ async def test_auto_reconnect(env): for i in range(3): try: await admin_session.ping(timeout=10) - except: - continue - break + except* Exception as e: + print("".join(traceback.format_exception(e))) + pass + else: + break else: raise Exception("Failed to reconnect") @@ -57,6 +59,7 @@ async def test_auto_reconnect(env): try: await admin_session.ping(timeout=10) except* Exception as e: + print("".join(traceback.format_exception(e))) pass else: break From fcf523dd62216cba6233ff4662631851e8c3999e Mon Sep 17 00:00:00 2001 From: Josiah Baldwin Date: Mon, 17 Feb 2025 12:54:50 -0800 Subject: [PATCH 3/3] Updated to work with websockets 15 proxy handling --- src/meshctrl/session.py | 2 +- src/meshctrl/tunnel.py | 2 +- src/meshctrl/util.py | 19 ++++--------------- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/meshctrl/session.py b/src/meshctrl/session.py index 119b05f..1eb6b6c 100644 --- a/src/meshctrl/session.py +++ b/src/meshctrl/session.py @@ -144,7 +144,7 @@ class Session(object): options["additional_headers"] = headers - async for websocket in util.proxy_connect(self.url, proxy_url=self._proxy, process_exception=util._process_websocket_exception, **options): + async for websocket in websockets.asyncio.client.connect(self.url, proxy=self._proxy, process_exception=util._process_websocket_exception, **options): self.alive = True self._socket_open.set() try: diff --git a/src/meshctrl/tunnel.py b/src/meshctrl/tunnel.py index 25b9abe..28e7ee5 100644 --- a/src/meshctrl/tunnel.py +++ b/src/meshctrl/tunnel.py @@ -67,7 +67,7 @@ class Tunnel(object): self.url = self._session.url.replace('/control.ashx', '/meshrelay.ashx?browser=1&p=' + str(self._protocol) + '&nodeid=' + self.node_id + '&id=' + self._tunnel_id + '&auth=' + self._authcookie["cookie"]) - async for websocket in util.proxy_connect(self.url, proxy_url=self._session._proxy, process_exception=util._process_websocket_exception, **options): + async for websocket in websockets.asyncio.client.connect(self.url, proxy=self._session._proxy, process_exception=util._process_websocket_exception, **options): self.alive = True self._socket_open.set() try: diff --git a/src/meshctrl/util.py b/src/meshctrl/util.py index b245d59..76f4ca9 100644 --- a/src/meshctrl/util.py +++ b/src/meshctrl/util.py @@ -11,7 +11,6 @@ import ssl import functools import urllib import python_socks -from python_socks.async_.asyncio import Proxy from . import exceptions def _encode_cookie(o, key): @@ -164,17 +163,7 @@ def _process_websocket_exception(exc): return exc if isinstance(exc, python_socks._errors.ProxyError): return None - return tmp - -class proxy_connect(websockets.asyncio.client.connect): - def __init__(self,*args, proxy_url=None, **kwargs): - self.proxy = None - if proxy_url is not None: - self.proxy = Proxy.from_url(proxy_url) - super().__init__(*args, **kwargs) - - async def create_connection(self, *args, **kwargs): - if self.proxy is not None: - parsed = urllib.parse.urlparse(self.uri) - self.connection_kwargs["sock"] = await self.proxy.connect(dest_host=parsed.hostname, dest_port=parsed.port) - return await super().create_connection(*args, **kwargs) \ No newline at end of file + # Proxy errors show up like this now, and it's default to error out. Handle explicitly. + if isinstance(exc, websockets.exceptions.InvalidProxyMessage): + return None + return tmp \ No newline at end of file