summaryrefslogtreecommitdiff
path: root/scripts/NetworkProxy.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/NetworkProxy.py')
-rw-r--r--scripts/NetworkProxy.py27
1 files changed, 19 insertions, 8 deletions
diff --git a/scripts/NetworkProxy.py b/scripts/NetworkProxy.py
index 93cc0a7328a..d161f775f9e 100644
--- a/scripts/NetworkProxy.py
+++ b/scripts/NetworkProxy.py
@@ -77,19 +77,29 @@ class BaseProxy(threading.Thread):
threading.Thread.__init__(self)
self.port = port
self.closed = False
- self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ self.cond = threading.Condition()
+ self.socket = None
self.connections = []
atexit.register(self.terminate)
self.setDaemon(True)
self.start()
+ with self.cond:
+ while not self.socket:
+ self.cond.wait()
def createConnection(self):
return None
def run(self):
- self.socket.bind(("127.0.0.1", self.port))
- self.socket.listen(1)
+ with self.cond:
+ self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ if hasattr(socket, "SO_REUSEPORT"):
+ self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
+ self.socket.bind(("127.0.0.1", self.port))
+ self.socket.listen(1)
+ self.cond.notify()
+
try:
while not self.closed:
incoming, peer = self.socket.accept()
@@ -110,6 +120,7 @@ class BaseProxy(threading.Thread):
c.close()
except Exception as ex:
print(ex)
+
connectToSelf = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
connectToSelf.connect(("127.0.0.1", self.port))
@@ -152,7 +163,7 @@ class SocksConnection(BaseConnection):
return packet if sys.version_info[0] == 2 else bytes(packet,"ascii")
class SocksProxy(BaseProxy):
-
+
def createConnection(self, socket, peer):
return SocksConnection(socket, peer)
@@ -172,12 +183,12 @@ class HttpConnection(BaseConnection):
sep = data.find(":")
if sep < len("CONNECT ") + 1:
raise InvalidRequest
-
+
host = data[len("CONNECT "):sep]
space = data.find(" ", sep)
if space < sep + 1:
raise InvalidRequest
-
+
port = int(data[sep + 1:space])
return (host, port)
@@ -189,6 +200,6 @@ class HttpConnection(BaseConnection):
return s if sys.version_info[0] == 2 else bytes(s,"ascii")
class HttpProxy(BaseProxy):
-
+
def createConnection(self, socket, peer):
return HttpConnection(socket, peer)