From 3a707f506dce28a6f91f9126163f1d03448b94e0 Mon Sep 17 00:00:00 2001 From: kevin_fourie Date: Wed, 24 Oct 2007 03:57:32 +0000 Subject: [PATCH] Merged in from DEV trunk... --- ktwebservice/proxy/proxy.php | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+), 0 deletions(-) create mode 100644 ktwebservice/proxy/proxy.php diff --git a/ktwebservice/proxy/proxy.php b/ktwebservice/proxy/proxy.php new file mode 100644 index 0000000..fc6e4f8 --- /dev/null +++ b/ktwebservice/proxy/proxy.php @@ -0,0 +1,165 @@ +. + * + * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, + * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU General Public License version 3. + * + * In accordance with Section 7(b) of the GNU General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "Powered by + * KnowledgeTree" logo and retain the original copyright notice. If the display of the + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices + * must display the words "Powered by KnowledgeTree" and retain the original + * copyright notice. + * Contributor( s): ______________________________________ + * + */ + +set_time_limit(0); + +if ($argc < 3) +{ + die('Usage: proxy.php listenport connectaddr connectport'); +} + +$cport = $argv[1]; +$saddress = $argv[2]; +$sport = $argv[2]; + + +print "Listening on port: $cport\n"; +print "Connecting to: $saddress:$sport\n"; + +if (($lsock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) +{ + die('Cannot create socket: '. socket_strerror($res)); +} + +if (($res = @socket_bind($lsock, '127.0.0.2', $cport)) === false) +{ + die('Cannot bind socket: ' . socket_strerror($res)); +} + +if (($res = socket_listen($lsock, 5)) === false) +{ + die('Cannot listen on socket: ' . socket_strerror($res)); +} + +while(true) +{ + if (($csock = socket_accept($lsock)) < 0) + { + print 'Cannot accept socket: ' . socket_strerror($csock) . "\n"; + continue; + } + print "accepting client\n"; + + if (($ssock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) + { + print('Cannot create socket: '. socket_strerror($res)); + continue; + } + + print "connecting\n"; + if (($res = socket_connect($ssock, $saddress, $sport)) < 0) + { + print('Cannot bind socket: ' . socket_strerror($res)); + continue; + } + + + ob_implicit_flush(); + + $clientClose = false; + $serverClose = false; + while(!$clientClose && !$serverClose) + { + $arr = array(); + $carr = array(); + $sarr = array(); + + if (!$clientClose) + { + $arr[]= $csock; + $carr[]= $csock; + } + if (!$serverClose) + { + $arr[]= $ssock; + $sarr[]= $ssock; + } +ob_implicit_flush(); $res = socket_select($arr, $e2=null, $e = null, 5); + if ($res === false) + { + print "problem\n"; + break; + } + else + { + $res = @socket_select($carr, $w = NULL, $e = NULL, 0); + if (!$clientClose && ($res === 1)) + { + $buf = @socket_read($csock, 2048, PHP_NORMAL_READ); + if (strlen($buf) != 0) + { + socket_write($ssock, $buf, strlen($buf)); + print "C>>S: $buf\n"; + } + if ($buf === false) + { + $clientClose = true; + socket_write($ssock, "\n", 1); + print "close connection to client\n"; + } + + } + $res = @socket_select($sarr, $w = NULL, $e = NULL, 0); + if (!$serverClose && ($res === 1)) + { + $buf = @socket_read($ssock, 2048, PHP_NORMAL_READ); + if (strlen($buf) != 0) + { + socket_write($csock, $buf, strlen($buf)); + print "C< \ No newline at end of file -- libgit2 0.21.4