summaryrefslogtreecommitdiffstats
path: root/module/plugins/hooks/ClickAndLoad.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/hooks/ClickAndLoad.py')
-rw-r--r--module/plugins/hooks/ClickAndLoad.py56
1 files changed, 50 insertions, 6 deletions
diff --git a/module/plugins/hooks/ClickAndLoad.py b/module/plugins/hooks/ClickAndLoad.py
index 222310c25..94a240d4c 100644
--- a/module/plugins/hooks/ClickAndLoad.py
+++ b/module/plugins/hooks/ClickAndLoad.py
@@ -18,10 +18,55 @@ def forward(source, destination):
destination.shutdown(socket.SHUT_WR)
+#: socket.create_connection wrapper for python 2.5
+def create_connection(address, timeout=object(), source_address=None):
+ try:
+ return socket.create_connection(address,
+ socket._GLOBAL_DEFAULT_TIMEOUT if type(timeout) == object else timeout,
+ source_address)
+
+ except SyntaxError:
+ """Connect to *address* and return the socket object.
+
+ Convenience function. Connect to *address* (a 2-tuple ``(host,
+ port)``) and return the socket object. Passing the optional
+ *timeout* parameter will set the timeout on the socket instance
+ before attempting to connect. If no *timeout* is supplied, the
+ global default timeout setting returned by :func:`getdefaulttimeout`
+ is used. If *source_address* is set it must be a tuple of (host, port)
+ for the socket to bind as a source address before making the connection.
+ An host of \'\' or port 0 tells the OS to use the default.
+ """
+
+ host, port = address
+ err = None
+ for res in getaddrinfo(host, port, 0, SOCK_STREAM):
+ af, socktype, proto, canonname, sa = res
+ sock = None
+ try:
+ sock = socket(af, socktype, proto)
+ if type(timeout) != object:
+ sock.settimeout(timeout)
+ if source_address:
+ sock.bind(source_address)
+ sock.connect(sa)
+ return sock
+
+ except socket.error, _:
+ err = _
+ if sock is not None:
+ sock.close()
+
+ if err is not None:
+ raise err
+ else:
+ raise socket.error("getaddrinfo returns an empty list")
+
+
class ClickAndLoad(Hook):
__name__ = "ClickAndLoad"
__type__ = "hook"
- __version__ = "0.26"
+ __version__ = "0.31"
__config__ = [("activated", "bool", "Activated" , True ),
("port" , "int" , "Port" , 9666 ),
@@ -46,7 +91,7 @@ class ClickAndLoad(Hook):
@threaded
def proxy(self, ip, webport, cnlport):
- hookManager.startThread(self.server, ip, webport, cnlport)
+ self.manager.startThread(self.server, ip, webport, cnlport)
lock = Lock()
lock.acquire()
lock.acquire()
@@ -62,14 +107,13 @@ class ClickAndLoad(Hook):
while True:
server_socket = dock_socket.accept()[0]
- client_socket = socket.create_connection(("127.0.0.1", webport))
+ client_socket = create_connection(("127.0.0.1", webport))
- hookManager.startThread(forward, server_socket, client_socket)
- hookManager.startThread(forward, client_socket, server_socket)
+ self.manager.startThread(forward, server_socket, client_socket)
+ self.manager.startThread(forward, client_socket, server_socket)
except socket.error, e:
self.logError(e)
- self.server(ip, webport, cnlport)
finally:
dock_socket.close()