From 3d7ed0c367cf521b61ec1f78784dec73a3b7c32a Mon Sep 17 00:00:00 2001
From: RaNaN <Mast3rRaNaN@hotmail.de>
Date: Sun, 6 May 2012 20:40:39 +0200
Subject: some classes for multi user mode

---
 module/lib/forwarder.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)
 create mode 100644 module/lib/forwarder.py

(limited to 'module/lib')

diff --git a/module/lib/forwarder.py b/module/lib/forwarder.py
new file mode 100644
index 000000000..eacb33c2b
--- /dev/null
+++ b/module/lib/forwarder.py
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+
+"""
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License,
+    or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    See the GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+    @author: RaNaN
+"""
+
+from sys import argv
+from sys import exit
+
+import socket
+import thread
+
+from traceback import print_exc
+
+class Forwarder():
+
+    def __init__(self, extip,extport=9666):
+        print "Start portforwarding to %s:%s" % (extip, extport)
+        proxy(extip, extport, 9666)
+
+
+def proxy(*settings):
+    while True:
+        server(*settings)
+
+def server(*settings):
+    try:
+        dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        dock_socket.bind(("127.0.0.1", 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((settings[0], settings[1]))
+            thread.start_new_thread(forward, (client_socket, server_socket))
+            thread.start_new_thread(forward, (server_socket, client_socket))
+    except Exception:
+        print_exc()
+        
+        
+def forward(source, destination):
+    string = ' '
+    while string:
+        string = source.recv(1024)
+        if string:
+            destination.sendall(string)
+        else:
+            #source.shutdown(socket.SHUT_RD)
+            destination.shutdown(socket.SHUT_WR)
+
+if __name__ == "__main__":
+    args = argv[1:]
+    if not args:
+        print "Usage: forwarder.py <remote ip> <remote port>"
+        exit()
+    if len(args) == 1:
+        args.append(9666)
+        
+    f = Forwarder(args[0], int(args[1]))
+            
\ No newline at end of file
-- 
cgit v1.2.3