From fcf523dd62216cba6233ff4662631851e8c3999e Mon Sep 17 00:00:00 2001 From: Josiah Baldwin Date: Mon, 17 Feb 2025 12:54:50 -0800 Subject: [PATCH] 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