Socks error handling

- Socks errors are now handled in a smoother manner
This commit is contained in:
Peter Šurda 2016-06-10 12:43:37 +02:00
parent f242d409fd
commit fbed1eff31
Signed by: PeterSurda
GPG Key ID: 0C5F50C0B5F37D87
2 changed files with 19 additions and 5 deletions

View File

@ -222,8 +222,11 @@ class outgoingSynSender(threading.Thread, StoppableThread):
'updateStatusBar', tr._translate( 'updateStatusBar', tr._translate(
"MainWindow", "SOCKS5 Authentication problem: %1").arg(str(err)))) "MainWindow", "SOCKS5 Authentication problem: %1").arg(str(err))))
except socks.Socks5Error as err: except socks.Socks5Error as err:
pass if err[0] in [3, 4, 5, 6]:
logger.error('SOCKS5 error. (It is possible that the server wants authentication).) ' + str(err)) # this is a more bening "error": host unreachable, network unreachable, connection refused, TTL expired
logger.debug('SOCKS5 error. ' + str(err))
else:
logger.error('SOCKS5 error. ' + str(err))
except socks.Socks4Error as err: except socks.Socks4Error as err:
logger.error('Socks4Error: ' + str(err)) logger.error('Socks4Error: ' + str(err))
except socket.error as err: except socket.error as err:

View File

@ -63,7 +63,8 @@ _generalerrors = ("success",
"not connected", "not connected",
"not available", "not available",
"bad proxy type", "bad proxy type",
"bad input") "bad input",
"timed out")
_socks5errors = ("succeeded", _socks5errors = ("succeeded",
"general SOCKS server failure", "general SOCKS server failure",
@ -129,7 +130,10 @@ class socksocket(socket.socket):
Receive EXACTLY the number of bytes requested from the socket. Receive EXACTLY the number of bytes requested from the socket.
Blocks until the required number of bytes have been received. Blocks until the required number of bytes have been received.
""" """
try:
data = self.recv(count) data = self.recv(count)
except socket.timeout:
raise GeneralProxyError((6, "timed out"))
while len(data) < count: while len(data) < count:
d = self.recv(count-len(data)) d = self.recv(count-len(data))
if not d: raise GeneralProxyError((0, "connection closed unexpectedly")) if not d: raise GeneralProxyError((0, "connection closed unexpectedly"))
@ -396,7 +400,14 @@ class socksocket(socket.socket):
portnum = self.__proxy[2] portnum = self.__proxy[2]
else: else:
portnum = 1080 portnum = 1080
try:
_orgsocket.connect(self, (self.__proxy[1], portnum)) _orgsocket.connect(self, (self.__proxy[1], portnum))
except socket.error as e:
if e[0] == 101:
raise Socks5Error((3, _socks5errors[3]))
if e[0] == 111:
raise Socks5Error((5, _socks5errors[5]))
raise
self.__negotiatesocks5() self.__negotiatesocks5()
self.__connectsocks5(destpair[0], destpair[1]) self.__connectsocks5(destpair[0], destpair[1])
elif self.__proxy[0] == PROXY_TYPE_SOCKS4: elif self.__proxy[0] == PROXY_TYPE_SOCKS4: