summaryrefslogtreecommitdiff
path: root/scripts/NetworkProxy.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/NetworkProxy.py')
-rw-r--r--scripts/NetworkProxy.py50
1 files changed, 33 insertions, 17 deletions
diff --git a/scripts/NetworkProxy.py b/scripts/NetworkProxy.py
index 5633049a493..e14ea7f54fb 100644
--- a/scripts/NetworkProxy.py
+++ b/scripts/NetworkProxy.py
@@ -2,9 +2,15 @@
# Copyright (c) ZeroC, Inc. All rights reserved.
#
-import sys, os, threading, socket, select
+import sys
+import threading
+import socket
+import select
+
+
+class InvalidRequest(Exception):
+ pass
-class InvalidRequest(Exception): pass
class BaseConnection(threading.Thread):
def __init__(self, socket, remote):
@@ -28,6 +34,7 @@ class BaseConnection(threading.Thread):
if self.socket:
self.socket.close()
self.socket = None
+
if self.remoteSocket:
self.remoteSocket.close()
self.remoteSocket = None
@@ -43,30 +50,32 @@ class BaseConnection(threading.Thread):
self.socket.send(self.response(True))
except:
self.socket.send(self.response(False))
+ self.remoteSocket.close()
return
try:
while(not self.closed):
readables, writeables, exceptions = select.select([self.socket, self.remoteSocket], [], [])
for r in readables:
- w = self.remoteSocket if r == self.socket else self.socket
+ w = self.remoteSocket if r == self.socket else self.socket
data = r.recv(4096)
if(len(data) == 0):
self.closed = True
break
w.send(data)
- except InvalidRequest as ex:
+ except InvalidRequest:
print("invalid request")
- except Exception as ex:
- #print(ex)
+ except Exception:
pass
+ finally:
+ if self.socket:
+ self.socket.close()
+ if self.remoteSocket:
+ self.remoteSocket.close()
- except Exception as ex:
- #print(ex)
+ except Exception:
pass
- finally:
- self.close()
class BaseProxy(threading.Thread):
def __init__(self, port):
@@ -103,6 +112,8 @@ class BaseProxy(threading.Thread):
self.cond.notify()
except Exception as ex:
self.failed = ex
+ self.socket.close()
+ self.socket = None
self.cond.notify()
return
@@ -117,6 +128,7 @@ class BaseProxy(threading.Thread):
pass
finally:
self.socket.close()
+ self.socket = None
def terminate(self):
with self.cond:
@@ -130,23 +142,24 @@ class BaseProxy(threading.Thread):
except Exception as ex:
print(ex)
- connectToSelf = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
+ connectToSelf = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connectToSelf.connect(("127.0.0.1", self.port))
except Exception as ex:
print(ex)
finally:
connectToSelf.close()
-
+ connectToSelf = None
self.join()
+
class SocksConnection(BaseConnection):
def request(self, s):
def decode(c):
return ord(c) if sys.version_info[0] == 2 else c
- data = s.recv(9) # Read the 9 bytes request
+ data = s.recv(9) # Read the 9 bytes request
if not data or len(data) == 0:
raise InvalidRequest
@@ -171,13 +184,15 @@ class SocksConnection(BaseConnection):
packet += encode(0)
packet += encode(0)
packet += encode(0)
- return packet if sys.version_info[0] == 2 else bytes(packet,"ascii")
+ return packet if sys.version_info[0] == 2 else bytes(packet, "ascii")
+
class SocksProxy(BaseProxy):
def createConnection(self, socket, peer):
return SocksConnection(socket, peer)
+
class HttpConnection(BaseConnection):
def request(self, s):
@@ -205,10 +220,11 @@ class HttpConnection(BaseConnection):
def response(self, success):
if(success):
- s = "HTTP/1.1 200 OK\r\nServer: CERN/3.0 libwww/2.17\r\n\r\n";
+ s = "HTTP/1.1 200 OK\r\nServer: CERN/3.0 libwww/2.17\r\n\r\n"
else:
- s = "HTTP/1.1 404\r\n\r\n";
- return s if sys.version_info[0] == 2 else bytes(s,"ascii")
+ s = "HTTP/1.1 404\r\n\r\n"
+ return s if sys.version_info[0] == 2 else bytes(s, "ascii")
+
class HttpProxy(BaseProxy):