diff options
Diffstat (limited to 'netwerk/test/unit/socks_client_subprocess.js')
-rw-r--r-- | netwerk/test/unit/socks_client_subprocess.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/netwerk/test/unit/socks_client_subprocess.js b/netwerk/test/unit/socks_client_subprocess.js new file mode 100644 index 000000000..144bc8757 --- /dev/null +++ b/netwerk/test/unit/socks_client_subprocess.js @@ -0,0 +1,42 @@ +var CC = Components.Constructor; +var Cc = Components.classes; +var Ci = Components.interfaces; + +const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1", + "nsIBinaryInputStream", + "setInputStream"); +const ProtocolProxyService = CC("@mozilla.org/network/protocol-proxy-service;1", + "nsIProtocolProxyService"); +var sts = Cc["@mozilla.org/network/socket-transport-service;1"] + .getService(Ci.nsISocketTransportService); + +function launchConnection(socks_vers, socks_port, dest_host, dest_port, dns) +{ + var pi_flags = 0; + if (dns == 'remote') + pi_flags = Ci.nsIProxyInfo.TRANSPARENT_PROXY_RESOLVES_HOST; + + var pps = new ProtocolProxyService(); + var pi = pps.newProxyInfo(socks_vers, 'localhost', socks_port, + pi_flags, -1, null); + var trans = sts.createTransport(null, 0, dest_host, dest_port, pi); + var input = trans.openInputStream(Ci.nsITransport.OPEN_BLOCKING,0,0); + var output = trans.openOutputStream(Ci.nsITransport.OPEN_BLOCKING,0,0); + var bin = new BinaryInputStream(input); + var data = bin.readBytes(5); + if (data == 'PING!') { + print('client: got ping, sending pong.'); + output.write('PONG!', 5); + } else { + print('client: wrong data from server:', data); + output.write('Error: wrong data received.', 27); + } + output.close(); +} + +for (var arg of arguments) { + print('client: running test', arg); + test = arg.split('|'); + launchConnection(test[0], parseInt(test[1]), test[2], + parseInt(test[3]), test[4]); +} |