Ejemplo n.º 1
0
let request = { path: "user/login", name: "Sushruth", pass: "******" };
let mp = require('msgpack-lite');

var WebSocket = require('streamws');
var ws = new WebSocket('ws://localhost:8642');

ws.on('open', () => {
    ws.send(mp.encode(request), { binary: true, mask: true });
});
Ejemplo n.º 2
0
		localConnection.on("data", function(data) {
			if(state == 0) {
				var buffer = new Buffer(2);
				buffer.write("\u0005", 0, 1, "binary");
				buffer.write("\u0000", 1, 1, "binary");
				
				localConnection.write(buffer);
				
				state = 1;
				
				return;
			}
			
			if(state == 1) {
				if(data[1] == 2) {
					console.log("error: unsupported command code: 0x02 (establish a TCP/IP port binding)");
					
					var buffer = new Buffer(10);
					buffer.write("\u0005", 0, 1, "binary");
					buffer.write("\u0007", 1, 1, "binary");
					buffer.write("\u0000", 2, 1, "binary");
					buffer.write("\u0001", 3, 1, "binary");
					buffer.write("\u0000", 4, 1, "binary");
					buffer.write("\u0000", 5, 1, "binary");
					buffer.write("\u0000", 6, 1, "binary");
					buffer.write("\u0000", 7, 1, "binary");
					buffer.write("\u0000", 8, 1, "binary");
					buffer.write("\u0000", 9, 1, "binary");
					
					localConnection.end(buffer);
					
					return;
				}
				
				if(data[1] == 3) {
					console.log("error: unsupported command code: 0x03 (associate a UDP port)");
					
					var buffer = new Buffer(10);
					buffer.write("\u0005", 0, 1, "binary");
					buffer.write("\u0007", 1, 1, "binary");
					buffer.write("\u0000", 2, 1, "binary");
					buffer.write("\u0001", 3, 1, "binary");
					buffer.write("\u0000", 4, 1, "binary");
					buffer.write("\u0000", 5, 1, "binary");
					buffer.write("\u0000", 6, 1, "binary");
					buffer.write("\u0000", 7, 1, "binary");
					buffer.write("\u0000", 8, 1, "binary");
					buffer.write("\u0000", 9, 1, "binary");
					
					localConnection.end(buffer);
					
					return;
				}
				
				if(data[3] == 4) {
					console.log("error: unsupported address type: 0x04 (IPv6 address)");
					
					var buffer = new Buffer(10);
					buffer.write("\u0005", 0, 1, "binary");
					buffer.write("\u0008", 1, 1, "binary");
					buffer.write("\u0000", 2, 1, "binary");
					buffer.write("\u0001", 3, 1, "binary");
					buffer.write("\u0000", 4, 1, "binary");
					buffer.write("\u0000", 5, 1, "binary");
					buffer.write("\u0000", 6, 1, "binary");
					buffer.write("\u0000", 7, 1, "binary");
					buffer.write("\u0000", 8, 1, "binary");
					buffer.write("\u0000", 9, 1, "binary");
					
					localConnection.end(buffer);
					
					return;
				}
				
				if(data[3] == 1) {
					remoteAddress = data[4] + "." + data[5] + "." + data[6] + "." + data[7];
					remotePort = data.readUInt16BE(8);
				}
				
				if(data[3] == 3) {
					var remoteAddressLength = data[4];
					remoteAddress = data.slice(5, 5 + remoteAddressLength).toString("binary");
					remotePort = data.readUInt16BE(5 + remoteAddressLength);
				}
				
				console.log("localConnection.remoteAddress: " + remoteAddress);
				console.log("localConnection.remotePort: " + remotePort);
				
				var i = Math.floor(Math.random() * configuration.REMOTE_PROXY_SERVERS.length);
				
				var requestUrl = configuration.REMOTE_PROXY_SERVERS[i].ADDRESS + ":" + configuration.REMOTE_PROXY_SERVERS[i].PORT + "/";
				var requestOptions = {};
				
				if(configuration.REMOTE_PROXY_SERVERS[i].TYPE == "HTTP") {
					if(configuration.PROXY_SERVER.ADDRESS == "") {
						requestOptions.agent = false;
					} else {
						requestOptions.agent = new HTTPAgent(configuration);
					}
					
					requestUrl = "ws://" + requestUrl;
				} else {
					if(configuration.REMOTE_PROXY_SERVERS[i].CERTIFICATE.AUTHENTICATION.FILE !== "") {
						certificates = [];
						
						certificatesData = fs.readFileSync(configuration.REMOTE_PROXY_SERVERS[i].CERTIFICATE.AUTHENTICATION.FILE, "utf8");
						certificatesData = certificatesData.split("\n");
						
						certificateData = [];
						
						for(j = 0; j < certificatesData.length; j = j + 1) {
							data = certificatesData[j];
							
							if(data.length !== 0) {
								certificateData.push(data);
								
								if(data.match(/-END CERTIFICATE-/)) {
									certificates.push(certificateData.join("\n"));
									
									certificateData = [];
								}
							}
						}
						
						requestOptions.ca = certificates;
						requestOptions.rejectUnauthorized = true;
					} else {
						requestOptions.ca = [];
						requestOptions.rejectUnauthorized = false;
					}
					
					if(configuration.PROXY_SERVER.ADDRESS == "") {
						requestOptions.agent = false;
					} else {
						requestOptions.agent = new HTTPSAgent(configuration);
					}
					
					requestUrl = "wss://" + requestUrl;
				}
				
				remoteConnection = new websocket(requestUrl, requestOptions);
				
				remoteConnection.on("open", function() {
					console.log("remoteConnection.open");
					
					var request = {};
					request["REMOTE_PROXY_SERVER"] = {};
					request["REMOTE_PROXY_SERVER"]["AUTHENTICATION"] = {};
					request["REMOTE_PROXY_SERVER"]["AUTHENTICATION"]["USERNAME"] = configuration.REMOTE_PROXY_SERVERS[i].AUTHENTICATION.USERNAME;
					request["REMOTE_PROXY_SERVER"]["AUTHENTICATION"]["PASSWORD"] = configuration.REMOTE_PROXY_SERVERS[i].AUTHENTICATION.PASSWORD;
					request["REMOTE_ADDRESS"] = remoteAddress
					request["REMOTE_PORT"] = remotePort
					
					var message = JSON.stringify(request);
					
					remoteConnection.send(message, {binary: false});
				});
				
				remoteConnection.on("message", function(message) {
					console.log("remoteConnection.message");
					
					if(state == 1) {
						var response = JSON.parse(message);
						
						var buffer = new Buffer(10);
						buffer.write("\u0005", 0, 1, "binary");
						buffer.write("\u0000", 1, 1, "binary");
						buffer.write("\u0000", 2, 1, "binary");
						buffer.write("\u0001", 3, 1, "binary");
						buffer.write("\u0000", 4, 1, "binary");
						buffer.write("\u0000", 5, 1, "binary");
						buffer.write("\u0000", 6, 1, "binary");
						buffer.write("\u0000", 7, 1, "binary");
						buffer.write("\u0000", 8, 1, "binary");
						buffer.write("\u0000", 9, 1, "binary");
						
						if(localConnectionState == 1) {
							localConnection.write(buffer);
						}
						
						state = 2;
						
						return;
					}
					
					if(state == 2) {
						console.log("remoteConnection.message: messageLength=" + message.length);
						
						if(message.length == 0) {
							if(localConnectionState == 1) {
								localConnection.resume();
							}
							
							return;
						}
						
						remoteConnection.send("", {binary: true});
						
						if(localConnectionState == 1) {
							if(!localConnection.write(message)) {
								remoteConnection.pause();
							}
						}
						
						return;
					}
				});
				
				remoteConnection.on("close", function() {
					console.log("remoteConnection.close");
					
					if(localConnectionState == 1) {
						localConnection.end();
					}
				});
				
				remoteConnection.on("error", function(error) {
					console.log("remoteConnection.error");
					console.log("error: " + error.toString());
				});
			}
			
			if(state == 2) {
				localConnection.pause();
				
				if(remoteConnection.readyState == websocket.OPEN) {
					remoteConnection.send(data, {binary: true});
				}
			}
		});