michael@0: const CC = Components.Constructor; michael@0: const Cc = Components.classes; michael@0: const Ci = Components.interfaces; michael@0: michael@0: const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1", michael@0: "nsIBinaryInputStream", michael@0: "setInputStream"); michael@0: const ProtocolProxyService = CC("@mozilla.org/network/protocol-proxy-service;1", michael@0: "nsIProtocolProxyService"); michael@0: var sts = Cc["@mozilla.org/network/socket-transport-service;1"] michael@0: .getService(Ci.nsISocketTransportService); michael@0: michael@0: function launchConnection(socks_vers, socks_port, dest_host, dest_port, dns) michael@0: { michael@0: var pi_flags = 0; michael@0: if (dns == 'remote') michael@0: pi_flags = Ci.nsIProxyInfo.TRANSPARENT_PROXY_RESOLVES_HOST; michael@0: michael@0: var pps = new ProtocolProxyService(); michael@0: var pi = pps.newProxyInfo(socks_vers, 'localhost', socks_port, michael@0: pi_flags, -1, null); michael@0: var trans = sts.createTransport(null, 0, dest_host, dest_port, pi); michael@0: var input = trans.openInputStream(Ci.nsITransport.OPEN_BLOCKING,0,0); michael@0: var output = trans.openOutputStream(Ci.nsITransport.OPEN_BLOCKING,0,0); michael@0: var bin = new BinaryInputStream(input); michael@0: var data = bin.readBytes(5); michael@0: if (data == 'PING!') { michael@0: print('client: got ping, sending pong.'); michael@0: output.write('PONG!', 5); michael@0: } else { michael@0: print('client: wrong data from server:', data); michael@0: output.write('Error: wrong data received.', 27); michael@0: } michael@0: output.close(); michael@0: } michael@0: michael@0: for each (var arg in arguments) { michael@0: print('client: running test', arg); michael@0: test = arg.split('|'); michael@0: launchConnection(test[0], parseInt(test[1]), test[2], michael@0: parseInt(test[3]), test[4]); michael@0: }