summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Walter Purcaro <vuolter@gmail.com> 2015-01-04 19:52:02 +0100
committerGravatar Walter Purcaro <vuolter@gmail.com> 2015-01-04 19:52:02 +0100
commit354ecbc78898efb4a31a7272e5ea1f5e00a53327 (patch)
treeecbc9a81d12d014eb22272b4690bab346804aaa4
parent[DlProtectCom] Update (diff)
downloadpyload-354ecbc78898efb4a31a7272e5ea1f5e00a53327.tar.xz
[ClickAndLoad] Updated
-rw-r--r--module/plugins/hooks/ClickAndLoad.py104
1 files changed, 54 insertions, 50 deletions
diff --git a/module/plugins/hooks/ClickAndLoad.py b/module/plugins/hooks/ClickAndLoad.py
index 04aac2f10..8ef31ec1e 100644
--- a/module/plugins/hooks/ClickAndLoad.py
+++ b/module/plugins/hooks/ClickAndLoad.py
@@ -1,41 +1,10 @@
# -*- coding: utf-8 -*-
import socket
-import thread
-
-from module.plugins.Hook import Hook
-
-
-def proxy(self, *settings):
- thread.start_new_thread(server, (self,) + settings)
- lock = thread.allocate_lock()
- lock.acquire()
- lock.acquire()
-
-
-def server(self, *settings):
- try:
- dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- dock_socket.bind((settings[0], settings[2]))
- dock_socket.listen(5)
- while True:
- client_socket = dock_socket.accept()[0]
- server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- server_socket.connect(("127.0.0.1", settings[1]))
- thread.start_new_thread(forward, (client_socket, server_socket))
- thread.start_new_thread(forward, (server_socket, client_socket))
- except socket.error, e:
- if hasattr(e, "errno"):
- errno = e.errno
- else:
- errno = e.args[0]
- if errno == 98:
- self.logWarning(_("Click'N'Load: Port 9666 already in use"))
- return
- thread.start_new_thread(server, (self,) + settings)
- except:
- thread.start_new_thread(server, (self,) + settings)
+from threading import Thread, Lock
+
+from module.plugins.Hook import Hook, threaded
def forward(source, destination):
@@ -45,33 +14,68 @@ def forward(source, destination):
if string:
destination.sendall(string)
else:
- #source.shutdown(socket.SHUT_RD)
destination.shutdown(socket.SHUT_WR)
class ClickAndLoad(Hook):
__name__ = "ClickAndLoad"
__type__ = "hook"
- __version__ = "0.24"
+ __version__ = "0.25"
- __config__ = [("activated", "bool", "Activated", True),
- ("extern", "bool", "Allow external link adding", False)]
+ __config__ = [("activated", "bool", "Activated" , True ),
+ ("port" , "int" , "Port" , 9666 ),
+ ("extern" , "bool", "Listen for requests coming from WAN (internet)", False)]
__description__ = """Click'N'Load hook plugin"""
__license__ = "GPLv3"
__authors__ = [("RaNaN", "RaNaN@pyload.de"),
- ("mkaay", "mkaay@mkaay.de")]
+ ("Walter Purcaro", "vuolter@gmail.com")]
def coreReady(self):
- self.port = int(self.config['webinterface']['port'])
- if self.config['webinterface']['activated']:
- try:
- if self.getConfig("extern"):
- ip = "0.0.0.0"
- else:
- ip = "127.0.0.1"
-
- thread.start_new_thread(proxy, (self, ip, self.port, 9666))
- except:
- self.logError(_("ClickAndLoad port already in use"))
+ if not self.config['webinterface']['activated']:
+ return
+
+ ip = "0.0.0.0" if self.getConfig("extern") else "127.0.0.1"
+ webport = int(self.config['webinterface']['port'])
+ cnlport = self.getConfig('port')
+
+ self.proxy(ip, webport, cnlport)
+
+
+ @threaded
+ def proxy(self, ip, webport, cnlport):
+ hookManager.startThread(self.server, ip, webport, cnlport)
+ lock = Lock()
+ lock.acquire()
+ lock.acquire()
+
+
+ def server(self, ip, webport, cnlport):
+ try:
+ dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ dock_socket.bind((ip, cnlport))
+ dock_socket.listen(5)
+
+ while True:
+ server_socket = dock_socket.accept()[0]
+ client_socket = socket.create_connection(("127.0.0.1", webport))
+
+ hookManager.startThread(forward, server_socket, client_socket)
+ hookManager.startThread(forward, client_socket, server_socket)
+
+ except socket.error, e:
+ if hasattr(e, "errno"):
+ errno = e.errno
+ else:
+ errno = e.args[0]
+
+ if errno == 98:
+ self.logWarning(_("Port %s already in use") % cnlport)
+ else:
+ self.logError(e)
+ self.server(ip, webport, cnlport)
+
+ except Exception, e:
+ self.logError(e)
+ self.server(ip, webport, cnlport)