|
1 const CC = Components.Constructor; |
|
2 const Cc = Components.classes; |
|
3 const Ci = Components.interfaces; |
|
4 |
|
5 const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1", |
|
6 "nsIBinaryInputStream", |
|
7 "setInputStream"); |
|
8 const ProtocolProxyService = CC("@mozilla.org/network/protocol-proxy-service;1", |
|
9 "nsIProtocolProxyService"); |
|
10 var sts = Cc["@mozilla.org/network/socket-transport-service;1"] |
|
11 .getService(Ci.nsISocketTransportService); |
|
12 |
|
13 function launchConnection(socks_vers, socks_port, dest_host, dest_port, dns) |
|
14 { |
|
15 var pi_flags = 0; |
|
16 if (dns == 'remote') |
|
17 pi_flags = Ci.nsIProxyInfo.TRANSPARENT_PROXY_RESOLVES_HOST; |
|
18 |
|
19 var pps = new ProtocolProxyService(); |
|
20 var pi = pps.newProxyInfo(socks_vers, 'localhost', socks_port, |
|
21 pi_flags, -1, null); |
|
22 var trans = sts.createTransport(null, 0, dest_host, dest_port, pi); |
|
23 var input = trans.openInputStream(Ci.nsITransport.OPEN_BLOCKING,0,0); |
|
24 var output = trans.openOutputStream(Ci.nsITransport.OPEN_BLOCKING,0,0); |
|
25 var bin = new BinaryInputStream(input); |
|
26 var data = bin.readBytes(5); |
|
27 if (data == 'PING!') { |
|
28 print('client: got ping, sending pong.'); |
|
29 output.write('PONG!', 5); |
|
30 } else { |
|
31 print('client: wrong data from server:', data); |
|
32 output.write('Error: wrong data received.', 27); |
|
33 } |
|
34 output.close(); |
|
35 } |
|
36 |
|
37 for each (var arg in arguments) { |
|
38 print('client: running test', arg); |
|
39 test = arg.split('|'); |
|
40 launchConnection(test[0], parseInt(test[1]), test[2], |
|
41 parseInt(test[3]), test[4]); |
|
42 } |