From 01435671c1d261c33f60923c24465a14e50ef93f Mon Sep 17 00:00:00 2001 From: rofl0r Date: Wed, 1 May 2019 20:04:30 +0100 Subject: [PATCH] add latest rocksock --- rocksock.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/rocksock.py b/rocksock.py index 9c36eac..cd5ab38 100644 --- a/rocksock.py +++ b/rocksock.py @@ -179,7 +179,7 @@ def RocksockProxyFromURL(url): if x == -1: return None # port is obligatory port = int(url[x+len(':'):]) #TODO: catch exception when port is non-numeric url = url[:x] - x = url.find('@') + x = url.rfind('@') if x != -1: u, p = url[:x].split(':') url = url[x+len('@'):] @@ -196,7 +196,13 @@ class Rocksock(): if not verifycert: self.sslcontext.verify_mode = ssl.CERT_NONE else: self.sslcontext = None - self.proxychain = copy.copy(proxies) if proxies else [] + self.proxychain = [] + if proxies is not None: + for p in proxies: + if isinstance(p, basestring): + self.proxychain.append(RocksockProxyFromURL(p)) + else: + self.proxychain.append(p) target = RocksockProxy(host, port, RS_PT_NONE) self.proxychain.append(target) self.sock = None @@ -276,7 +282,10 @@ class Rocksock(): def send(self, buf, pnum=-1): if self.sock is None: raise RocksockException(RS_E_NO_SOCKET, failedproxy=self._failed_proxy(pnum)) - return self.sock.sendall(buf) + try: + return self.sock.sendall(buf) + except socket.error as e: + raise self._translate_socket_error(e, pnum) def _get_ssl_exception_reason(self, e): s = ''