mirror of
https://github.com/Ylianst/MeshAgent
synced 2026-02-12 06:23:17 +00:00
First commit of MeshAgent for MeshCentral
This commit is contained in:
5
Debug/ChildModuleTest.js
Normal file
5
Debug/ChildModuleTest.js
Normal file
@@ -0,0 +1,5 @@
|
||||
var parent = require('ScriptContainer');
|
||||
var Wireless = require('Wireless');
|
||||
|
||||
Wireless.on('Scan', function (ap) { parent.send(ap.toString()); });
|
||||
Wireless.Scan();
|
||||
134
Debug/ClientDigest.js
Normal file
134
Debug/ClientDigest.js
Normal file
@@ -0,0 +1,134 @@
|
||||
var http = require('http');
|
||||
var agent = require('MeshAgent');
|
||||
var server = "";
|
||||
var req = "";
|
||||
var gtunnel = "";
|
||||
var digest = require('http-digest').create("bryan", "roe");
|
||||
|
||||
agent.on('Connected', function (connectState)
|
||||
{
|
||||
console.log("Connection State = " + connectState.toString());
|
||||
console.log("Connected: " + this.ServerUrl);
|
||||
|
||||
//gtunnel = require('global-tunnel');
|
||||
//gtunnel.initialize({ host: "proxy.jf.intel.com", port: 911 });
|
||||
|
||||
//req = http.get({ uri: "http://www.google.com/", proxy: { host: "proxy.jf.intel.com", port: 911 } }, OnGoogle);
|
||||
//req = http.request({ protocol: "wss:", hostname: "alt.meshcentral.com", port: 443, method: "GET", path: "/agent.ashx", MeshAgent: agent /* proxy: { host: "proxy.jf.intel.com", port: 911 }*/}, OnResponse);
|
||||
//req.upgrade = OnWebSocket;
|
||||
//req.on('error', function (msg) { console.log(msg); });
|
||||
//req.end();
|
||||
|
||||
//digest.clientRequest = http.get("http://127.0.0.1:9093/");
|
||||
//digest.on('response', function (imsg) { console.log(imsg.statusCode == 200 ? "SUCCESS!" : "FAIL!");})
|
||||
|
||||
digest.http = require('http');
|
||||
//digest.get("http://127.0.0.1:9093/", function (imsg) { console.log(imsg.statusCode == 200 ? "SUCCESS!" : "FAIL!"); });
|
||||
//digest.request({ protocol: "http:", method: "GET", host: "127.0.0.1", path: "/", port: 9093 }, function (imsg) { console.log(imsg.statusCode == 200 ? "SUCCESS!" : "FAIL!"); }).end();
|
||||
var req = digest.request({ MeshAgent: agent, protocol: "wss:", method: "GET", host: "127.0.0.1", path: "/", port: 9093, checkServerIdentity:onVerifyServer }, function (imsg) { console.log(imsg.statusCode == 200 ? "SUCCESS!" : "FAIL!"); });
|
||||
|
||||
req.on('upgrade', function (res, sk, h) { console.log("Upgraded to WebSocket!"); });
|
||||
req.end();
|
||||
});
|
||||
|
||||
function OnAlt(imsg)
|
||||
{
|
||||
console.log("OnAlt, StatusCode = " + imsg.statusCode);
|
||||
}
|
||||
function OnGoogle(imsg)
|
||||
{
|
||||
console.log("Response Code = " + imsg.statusCode);
|
||||
}
|
||||
agent.Ready = function()
|
||||
{
|
||||
console.log("Starting Digest Test (Agent Connected)");
|
||||
//server = http.createServer({ "MeshAgent": agent, "requestCert": true, "checkClientIdentity": onVerifyClient }, OnRequest);
|
||||
server = http.createServer({ "MeshAgent": agent }, OnRequest);
|
||||
server.listen(9093);
|
||||
|
||||
//req = http.request({ "protocol":"ws:", "hostname": "127.0.0.1", "port": 9093, "method": "GET", "path": "/", "MeshAgent": agent }, OnResponse);
|
||||
//req.upgrade = OnWebSocket;
|
||||
//req.end();
|
||||
}
|
||||
|
||||
function OnWebSocket(msg, s, head)
|
||||
{
|
||||
console.log("WebSocket connected\n");
|
||||
console.log(JSON.stringify(msg) + "\n");
|
||||
console.log(JSON.stringify(s) + "\n");
|
||||
s.end();
|
||||
}
|
||||
function OnResponse(msg)
|
||||
{
|
||||
if (msg == null)
|
||||
{
|
||||
console.log("Receive Error\n");
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("Status Code = " + msg.statusCode.toString() + "\n");
|
||||
}
|
||||
function onVerifyServer(clientName, certs) {
|
||||
console.log("Server Name = " + clientName + "\n");
|
||||
|
||||
for (var i = 0; i < certs.length; ++i) {
|
||||
console.log(" Fingerprint = " + certs[i].fingerprint + "\n");
|
||||
}
|
||||
//throw ("Not Valid");
|
||||
}
|
||||
function onVerifyClient(clientName, certs)
|
||||
{
|
||||
console.log("Client Name = " + clientName + "\n");
|
||||
|
||||
for (var i = 0; i < certs.length; ++i) {
|
||||
console.log(" Fingerprint = " + certs[i].fingerprint + "\n");
|
||||
}
|
||||
//throw ("Not Valid");
|
||||
}
|
||||
function onVerify(serverName, certs)
|
||||
{
|
||||
console.log("ServerName = " + serverName + "\n");
|
||||
|
||||
for (var i = 0; i < certs.length;++i)
|
||||
{
|
||||
console.log(" Fingerprint = " + certs[i].fingerprint + "\n");
|
||||
}
|
||||
//throw ("Not Valid");
|
||||
}
|
||||
|
||||
function OnRequest(req, res)
|
||||
{
|
||||
console.log("Received Request for: " + req.url);
|
||||
if (req.NativeSession.Digest_IsAuthenticated("meshcentral.com") == 0)
|
||||
{
|
||||
req.NativeSession.Digest_SendUnauthorized("meshcentral.com", "<html>Oops</html>");
|
||||
}
|
||||
else
|
||||
{
|
||||
var username = req.NativeSession.Digest_GetUsername();
|
||||
console.log("Username = " + username + "\n");
|
||||
if(username == "bryan" && req.NativeSession.Digest_ValidatePassword("roe")==1)
|
||||
{
|
||||
console.log("Validated!\n");
|
||||
if (req.NativeSession.WebSocket_GetDataType() == 0xFF)
|
||||
{
|
||||
req.NativeSession.WebSocket_Upgrade();
|
||||
}
|
||||
else
|
||||
{
|
||||
res.statusCode = 200;
|
||||
res.statusMessage = "OK";
|
||||
res.write("<HTML>SUCCESS!</HTML>");
|
||||
res.end();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log("Nope!\n");
|
||||
res.end();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
115
Debug/DigestTest.js
Normal file
115
Debug/DigestTest.js
Normal file
@@ -0,0 +1,115 @@
|
||||
var http = require('http');
|
||||
var https = require('https');
|
||||
var agent = require('MeshAgent');
|
||||
var server = "";
|
||||
var req = "";
|
||||
var db = require('SimpleDataStore').Shared();
|
||||
var signer = require('SHA256Stream_Signer');
|
||||
|
||||
|
||||
var keys = db.Keys;
|
||||
|
||||
Microstack_print("Enumerating Keys...\n");
|
||||
for (var i = 0; i < keys.length; ++i)
|
||||
{
|
||||
Microstack_print("DB Key=> " + keys[i] + "\n");
|
||||
}
|
||||
Microstack_print("Done...\n");
|
||||
|
||||
Microstack_print("[TestKey] = " + db.Get("TestKey") + "\n");
|
||||
//db.Put("TestKey", "TestValue");
|
||||
|
||||
|
||||
agent.Ready = function()
|
||||
{
|
||||
signer.Create(agent);
|
||||
signer.OnSignature = OnSignature;
|
||||
|
||||
server = http.createServer({ "MeshAgent": agent, "requestCert": true, "checkClientIdentity": onVerifyClient }, OnRequest);
|
||||
server.listen(9093);
|
||||
|
||||
//req = https.get("https://127.0.0.1:443/", OnResponse);
|
||||
|
||||
//req = https.request({ "hostname": "127.0.0.1", "method": "GET", "path": "/", "checkServerIdentity": onVerify }, OnResponse)
|
||||
//req = https.request({ "hostname": "127.0.0.1", "port": 9093, "method": "GET", "path": "/", "MeshAgent": agent }, OnResponse);
|
||||
|
||||
req = https.request(https.addWebSocketHeadersToOptions({ "hostname": "127.0.0.1", "port": 443, "method": "GET", "path": "/", "MeshAgent": agent }, 4096, null), OnResponse);
|
||||
req.upgrade = OnWebSocket;
|
||||
//req.end();
|
||||
}
|
||||
|
||||
function OnSignature(sig)
|
||||
{
|
||||
//var test = Buffer.from(sig.toString('base64'), 'base64');
|
||||
var test = Buffer.from(sig.toString('hex'), 'hex');
|
||||
Microstack_print("sig Length: " + sig.length.toString() + " test.length = " + test.length.toString() + "\n");
|
||||
Microstack_print("Signature (base64) = " + sig.toString('base64') + "\n");
|
||||
Microstack_print("Signature (hex) = " + sig.toString('hex') + "\n");
|
||||
}
|
||||
|
||||
function OnWebSocket(msg, s, head)
|
||||
{
|
||||
//Microstack_print("WebSocket connected\n");
|
||||
//Microstack_print(JSON.stringify(msg) + "\n");
|
||||
//Microstack_print(JSON.stringify(s) + "\n");
|
||||
s.end();
|
||||
}
|
||||
function OnResponse(msg)
|
||||
{
|
||||
if (msg == null)
|
||||
{
|
||||
Microstack_print("Receive Error\n");
|
||||
return;
|
||||
}
|
||||
|
||||
Microstack_print("Status Code = " + msg.statusCode.toString() + "\n");
|
||||
msg.pipe(signer);
|
||||
}
|
||||
function onVerifyClient(clientName, certs)
|
||||
{
|
||||
Microstack_print("Client Name = " + clientName + "\n");
|
||||
|
||||
for (var i = 0; i < certs.length; ++i) {
|
||||
Microstack_print(" Fingerprint = " + certs[i].fingerprint + "\n");
|
||||
}
|
||||
//throw ("Not Valid");
|
||||
}
|
||||
function onVerify(serverName, certs)
|
||||
{
|
||||
Microstack_print("ServerName = " + serverName + "\n");
|
||||
|
||||
for (var i = 0; i < certs.length;++i)
|
||||
{
|
||||
Microstack_print(" Fingerprint = " + certs[i].fingerprint + "\n");
|
||||
}
|
||||
//throw ("Not Valid");
|
||||
}
|
||||
|
||||
function OnRequest(req, res)
|
||||
{
|
||||
if (req.NativeSession.Digest_IsAuthenticated("meshcentral.com") == 0)
|
||||
{
|
||||
req.NativeSession.Digest_SendUnauthorized("meshcentral.com", "<html>Oops</html>");
|
||||
}
|
||||
else
|
||||
{
|
||||
var username = req.NativeSession.Digest_GetUsername();
|
||||
Microstack_print("Username = " + username + "\n");
|
||||
if(username == "bryan" && req.NativeSession.Digest_ValidatePassword("roe")==1)
|
||||
{
|
||||
Microstack_print("Validated!\n");
|
||||
res.statusCode = 200;
|
||||
res.statusMessage = "OK";
|
||||
res.write("<HTML>SUCCESS!</HTML>");
|
||||
res.end();
|
||||
}
|
||||
else
|
||||
{
|
||||
Microstack_print("Nope!\n");
|
||||
res.end();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
84
Debug/JavaCore.js
Normal file
84
Debug/JavaCore.js
Normal file
@@ -0,0 +1,84 @@
|
||||
//var mesh = require('MeshAgent');
|
||||
//var tmpBuffer = new Buffer(26);
|
||||
|
||||
//mesh.AddCommandHandler_Binary(OnBinaryCommand);
|
||||
//htons(tmpBuffer, 0, 0x01);
|
||||
//WriteContextGuid(tmpBuffer, 2, "THISISTHECONTEXT");
|
||||
//htonl(tmpBuffer, 18, 0x40000000);
|
||||
//htonl(tmpBuffer, 22, 0x00);
|
||||
//mesh.InjectCommand(tmpBuffer);
|
||||
|
||||
//tmpBuffer = new Buffer(25);
|
||||
//htons(tmpBuffer, 0, 0x10);
|
||||
//WriteContextGuid(tmpBuffer, 2, "THISISTHECONTEXT");
|
||||
//WriteString(tmpBuffer, 18, "bar();")
|
||||
//mesh.InjectCommand(tmpBuffer);
|
||||
|
||||
//function WriteString(buffer, offset, val)
|
||||
//{
|
||||
// var i;
|
||||
// for (i = 0; i < val.length; ++i)
|
||||
// {
|
||||
// buffer[offset + i] = val.charCodeAt(i);
|
||||
// }
|
||||
// buffer[offset + i] = 0;
|
||||
//}
|
||||
//function WriteContextGuid(buffer, offset, contextguid)
|
||||
//{
|
||||
// var i;
|
||||
// for(i=0;i<16;++i)
|
||||
// {
|
||||
// if (i >= contextguid.length) {
|
||||
// buffer[offset + i] = 0;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// buffer[offset + i] = contextguid.charCodeAt(i);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
//function OnBinaryCommand(cmd)
|
||||
//{
|
||||
// var code = ntohs(cmd, 0);
|
||||
|
||||
// if (code == 0x01)
|
||||
// {
|
||||
// var context = cmd.slice(2, 16).toString('utf-8');
|
||||
// var flags = ntohl(cmd, 18);
|
||||
// var etime = ntohl(cmd, 22);
|
||||
|
||||
// if (code != 0xFF)
|
||||
// {
|
||||
// Microstack_print("Cmd: " + code.toString() + " Context: " + context + " Flags: " + flags.toString() + " ExecTimeout: " + etime.toString() + "\n");
|
||||
// }
|
||||
// }
|
||||
// return(0);
|
||||
//}
|
||||
|
||||
var mesh = require('MeshAgent');
|
||||
var container = mesh.CreateScriptContainer(0, ContainerPermissions.DEFAULT);
|
||||
|
||||
|
||||
function OnExit(statusCode)
|
||||
{
|
||||
Microstack_print("OnExit: " + statusCode.toString() + "\n");
|
||||
}
|
||||
function OnError(msg)
|
||||
{
|
||||
Microstack_print("OnError: " + msg + "\n");
|
||||
}
|
||||
|
||||
|
||||
container.Exit = OnExit;
|
||||
container.Error = OnError;
|
||||
//container.ExecuteString("foo();");
|
||||
container.ExecuteString("var agent = require('MeshAgent').db.Get(\"bryan\");", function (status, msg)
|
||||
{
|
||||
Microstack_print("Completed First Execution\n");
|
||||
container.ExecuteString("foo();");
|
||||
});
|
||||
|
||||
//container.ExecuteString("require('MeshAgent').db.Get(\"bryan\");");
|
||||
//container.ExecuteString("var x = 2+2;");
|
||||
|
||||
15
Debug/ModuleTest.js
Normal file
15
Debug/ModuleTest.js
Normal file
@@ -0,0 +1,15 @@
|
||||
|
||||
var WiFiScanner = require('WiFiScanner');
|
||||
var scanner = new WiFiScanner();
|
||||
|
||||
scanner.on('accessPoint', function (ap) { console.log("[" + ap.bssid + "] (" + ap.lq + ") " + ap.ssid); });
|
||||
if (scanner.hasWireless())
|
||||
{
|
||||
console.log("This Computer has wireless");
|
||||
scanner.Scan();
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log("This Computer DOES NOT have wireless");
|
||||
}
|
||||
|
||||
19
Debug/NetworkMonitorTest.js
Normal file
19
Debug/NetworkMonitorTest.js
Normal file
@@ -0,0 +1,19 @@
|
||||
var nm = require('NetworkMonitor');
|
||||
nm.on('change', function () { console.log("Change detected..."); });
|
||||
nm.on('add', function (addr) { console.log("Address (" + addr + ") added"); });
|
||||
nm.on('remove', function (addr) { console.log("Address (" + addr + ") removed"); });
|
||||
|
||||
console.log("Started Test");
|
||||
|
||||
function OnChange()
|
||||
{
|
||||
var interfaces = require('os').networkInterfaces();
|
||||
for(var key in interfaces)
|
||||
{
|
||||
for (var i in interfaces[key])
|
||||
{
|
||||
console.log("Address ==> " + interfaces[key][i].address);
|
||||
console.log(" status ==> " + interfaces[key][i].status);
|
||||
}
|
||||
}
|
||||
}
|
||||
111
Debug/WebRTC_Test.html
Normal file
111
Debug/WebRTC_Test.html
Normal file
@@ -0,0 +1,111 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>WebRTC Test Application</title>
|
||||
</head>
|
||||
<body onload="start()">
|
||||
<span id="statustext"></span>
|
||||
|
||||
<script type="text/javascript">
|
||||
var configuration = { "iceServers": [] };
|
||||
var connection = null;
|
||||
var datachannel = null;
|
||||
var currentanswer = null;
|
||||
var wsocket = null;
|
||||
var decoder = new TextDecoder('utf-8');
|
||||
var sdp = null;
|
||||
|
||||
function start()
|
||||
{
|
||||
debug("Connecting relay, for signaling channel...");
|
||||
wsocket = new WebSocket("wss://alt.meshcentral.com:443/meshrelay.ashx?id='test123'");
|
||||
wsocket.binaryType = "arraybuffer";
|
||||
wsocket.onopen = function (evt) { debug("Web Socket Connection established..."); }
|
||||
wsocket.onmessage = function (evt)
|
||||
{
|
||||
if (evt.data[0] == 'c')
|
||||
{
|
||||
debug("Tunnel Established...");
|
||||
}
|
||||
else
|
||||
{
|
||||
var cmd = JSON.parse(decoder.decode(new Uint8Array(evt.data)));
|
||||
if(cmd.cmd == 'offer')
|
||||
{
|
||||
debug("Received WebRTC Offer...");
|
||||
|
||||
startWebRTC();
|
||||
|
||||
var ax = null;
|
||||
if (typeof mozRTCSessionDescription !== 'undefined') { ax = new mozRTCSessionDescription({ type: "offer", sdp: cmd.data }) } else { ax = new RTCSessionDescription({ type: "offer", sdp: cmd.data }) }
|
||||
connection.setRemoteDescription(ax, onSetRemoteDescriptionDone, onError);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onSetRemoteDescriptionDone()
|
||||
{
|
||||
connection.createAnswer(onAnswerDone, onError);
|
||||
}
|
||||
function onAnswerDone(answer)
|
||||
{
|
||||
//wsocket.send(JSON.stringify({ cmd: 'offer', data: answer.sdp }));
|
||||
sdp = answer.sdp;
|
||||
connection.setLocalDescription(answer, onSetLocalDescriptionDone, onError);
|
||||
}
|
||||
|
||||
function startWebRTC()
|
||||
{
|
||||
if (connection != null) { debug("Error!"); return; }
|
||||
if (typeof mozRTCPeerConnection !== 'undefined') { connection = new mozRTCPeerConnection(configuration); }
|
||||
else if (typeof RTCPeerConnection !== 'undefined') { connection = new RTCPeerConnection(configuration); }
|
||||
else if (typeof webkitRTCPeerConnection !== 'undefined') { connection = new webkitRTCPeerConnection(configuration); }
|
||||
else return false;
|
||||
|
||||
connection.ondatachannel = onDataChannel
|
||||
connection.onicecandidate = onIceCandidate;
|
||||
}
|
||||
|
||||
function onDataChannel(event)
|
||||
{
|
||||
debug("Data Channel ("+ event.channel.label + ") connected");
|
||||
datachannel = event.channel;
|
||||
datachannel.binaryType = "arraybuffer";
|
||||
datachannel.onmessage = function (msg)
|
||||
{
|
||||
try
|
||||
{
|
||||
datachannel.send(msg.data.byteLength.toString());
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
debug(e.toString());
|
||||
debug(msg.data.toString());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function onIceCandidate(e)
|
||||
{
|
||||
if (e.candidate == null) {
|
||||
if (sdp == null) { debug('error'); return; }
|
||||
wsocket.send(JSON.stringify({ cmd: 'offer', data: sdp }));
|
||||
}
|
||||
else
|
||||
{
|
||||
sdp += ("a=" + e.candidate.candidate + "\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
function onSetLocalDescriptionDone() { }
|
||||
function onError(e) { if (e.message) debug(e.message); else debug(e); }
|
||||
function debug(msg) { document.getElementById("statustext").innerHTML += (msg + "\r\n"); }
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
|
||||
</html>
|
||||
183
Debug/WebRTC_Test.js
Normal file
183
Debug/WebRTC_Test.js
Normal file
@@ -0,0 +1,183 @@
|
||||
var mesh;
|
||||
var http = require('http');
|
||||
var relayId = null;
|
||||
var req;
|
||||
var proxy;
|
||||
var relayHost = null;
|
||||
var relayPort;
|
||||
var rtc = require('ILibWebRTC');
|
||||
var peerConnection;
|
||||
var signalingChannel;
|
||||
var dc;
|
||||
|
||||
var webServer = null;
|
||||
var processMgr;
|
||||
var p;
|
||||
|
||||
for (var i = 1; i < process.argv.length; ++i)
|
||||
{
|
||||
if(process.argv[i] == 'relayId')
|
||||
{
|
||||
relayId = process.argv[i + 1];
|
||||
++i;
|
||||
}
|
||||
else if (process.argv[i] == 'proxy')
|
||||
{
|
||||
console.log("Using Proxy: " + process.argv[i + 1] + ":" + parseInt(process.argv[i + 2]));
|
||||
proxy = require('global-tunnel');
|
||||
try
|
||||
{
|
||||
proxy.initialize({ host: process.argv[i + 1], port: parseInt(process.argv[i + 2]) });
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
console.log("Unable to bind proxy: " + e);
|
||||
}
|
||||
i += 2;
|
||||
}
|
||||
else if(process.argv[i] == 'relay')
|
||||
{
|
||||
relayHost = process.argv[i + 1];
|
||||
relayPort = parseInt(argv[i + 2]);
|
||||
i += 2;
|
||||
}
|
||||
else if(process.argv[i] == 'browser')
|
||||
{
|
||||
console.log("Local Web Server started on port 8585...");
|
||||
webServer = http.createServer(OnLocalWebRequest);
|
||||
webServer.listen(8585);
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
mesh = require('MeshAgent');
|
||||
mesh.AddConnectHandler(OnMeshConnected)
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
mesh = null;
|
||||
}
|
||||
|
||||
|
||||
if (mesh == null && webServer == null)
|
||||
{
|
||||
console.log("Running as Standalone Mode");
|
||||
var options = { host: relayHost, port: relayPort, path: "/meshrelay.ashx?id='" + relayId + "'", protocol: "wss:" };
|
||||
req = http.request(options);
|
||||
req.upgrade = OnTunnelWebSocket;
|
||||
}
|
||||
|
||||
if (mesh == null && webServer != null)
|
||||
{
|
||||
processMgr = require('ILibProcessPipe');
|
||||
p = processMgr.CreateProcess("c:\\windows\\system32\\cmd.exe", "/c", "start", "http://localhost:8585/start.html");
|
||||
}
|
||||
|
||||
function OnLocalWebRequest(request, response)
|
||||
{
|
||||
if(request.method == 'GET' && request.url == '/start.html')
|
||||
{
|
||||
var fs = require('fs');
|
||||
try
|
||||
{
|
||||
var stream = fs.createReadStream('WebRTC_Test.html');
|
||||
response.statusCode = 200;
|
||||
response.statusMessage = "OK";
|
||||
stream.pipe(response);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
response.statusCode = 404;
|
||||
response.statusMessage = "Not Found";
|
||||
response.end();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
response.statusCode = 404;
|
||||
response.statusMessage = "Not Found";
|
||||
response.end();
|
||||
}
|
||||
}
|
||||
function OnMeshConnected()
|
||||
{
|
||||
console.log("Mesh Agent Connected: " + mesh.ConnectedServer);
|
||||
console.log("Attempting to create WebRTC Control Channel using TunnelID: " + relayId);
|
||||
|
||||
var options = http.parseUri(mesh.ConnectedServer);
|
||||
options.path = "/meshrelay.ashx?id='" + relayId + "'";
|
||||
|
||||
req = http.request(options);
|
||||
req.upgrade = OnTunnelWebSocket;
|
||||
}
|
||||
|
||||
function OnTunnelWebSocket(response, sckt, head)
|
||||
{
|
||||
console.log("Websocket Connection to RelayServer established");
|
||||
signalingChannel = sckt;
|
||||
sckt.on('data', OnTunnelData);
|
||||
sckt.on('end', function () { console.log("Relay connection closed"); });
|
||||
}
|
||||
function OnWebRTC_Connected()
|
||||
{
|
||||
console.log("WebRTC Session Established");
|
||||
if(mesh != null)
|
||||
{
|
||||
// Let create a data channel
|
||||
this.dc = this.createDataChannel("remoteDesktop", OnKVMChannel)
|
||||
this.tempTimeout = setTimeout(function (dc) { console.log("sending: 'test'"); dc.write("test"); }, 10000, this.dc);
|
||||
}
|
||||
}
|
||||
function OnKVMChannel()
|
||||
{
|
||||
console.log("Successfully established Data Channel to test Data throughput");
|
||||
dc = this;
|
||||
dc.kvm = mesh.getRemoteDesktopStream();
|
||||
dc.on('data', function (buffer) { console.log("Peer Received: " + buffer.toString() + " bytes"); });
|
||||
dc.on('end', function () { this.kvm.end(); console.log("Closing KVM Session"); });
|
||||
dc.kvm.pipe(dc);
|
||||
}
|
||||
function OnWebRTC_DataChannel(dataChannel)
|
||||
{
|
||||
console.log("Data Channel (" + dataChannel.name + ") was created");
|
||||
dc = dataChannel;
|
||||
dc.on('data', function (buffer) { console.log("Received: " + buffer.length + " bytes"); dc.write(buffer.length.toString());});
|
||||
}
|
||||
function OnTunnelData(buffer)
|
||||
{
|
||||
if (buffer == 'c')
|
||||
{
|
||||
console.log("Tunnel Established");
|
||||
peerConnection = rtc.createConnection();
|
||||
peerConnection.on('connected', OnWebRTC_Connected);
|
||||
peerConnection.on('dataChannel', OnWebRTC_DataChannel);
|
||||
if(mesh!=null)
|
||||
{
|
||||
console.log("Generating WebRTC Offer...");
|
||||
this.write({ cmd: "offer", data: peerConnection.generateOffer() });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ProcessCommand(JSON.parse(buffer.toString()));
|
||||
}
|
||||
}
|
||||
function ProcessCommand(cmd)
|
||||
{
|
||||
console.log("Received Command: " + cmd.cmd);
|
||||
if(cmd.cmd == 'offer')
|
||||
{
|
||||
console.log("setting offer...");
|
||||
console.log(cmd.data);
|
||||
var counter = peerConnection.setOffer(cmd.data);
|
||||
if(mesh == null)
|
||||
{
|
||||
signalingChannel.write({ cmd: "offer", data: counter });
|
||||
}
|
||||
}
|
||||
if(cmd.cmd == 'candidate')
|
||||
{
|
||||
console.log("Received Candidate: " + cmd.data);
|
||||
}
|
||||
}
|
||||
|
||||
266
Debug/WiFiScanner.js
Normal file
266
Debug/WiFiScanner.js
Normal file
@@ -0,0 +1,266 @@
|
||||
var MemoryStream = require('MemoryStream');
|
||||
var WindowsWireless = new Buffer([
|
||||
0x0A, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x5F, 0x53, 0x63, 0x61, 0x6E, 0x28, 0x29, 0x0A, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x77, 0x6C, 0x61, 0x6E,
|
||||
0x49, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
|
||||
0x50, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x57, 0x6C, 0x61, 0x6E, 0x45,
|
||||
0x6E, 0x75, 0x6D, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x2C, 0x20, 0x30, 0x2C, 0x20, 0x77, 0x6C,
|
||||
0x61, 0x6E, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x29, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x3D, 0x20,
|
||||
0x77, 0x6C, 0x61, 0x6E, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x29, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x30, 0x2C, 0x20,
|
||||
0x34, 0x29, 0x2E, 0x56, 0x61, 0x6C, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x20, 0x3D, 0x20, 0x77, 0x6C, 0x61, 0x6E, 0x49, 0x6E, 0x74, 0x65,
|
||||
0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x29, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x38, 0x2C, 0x20, 0x35, 0x33, 0x32, 0x29, 0x3B, 0x0A, 0x20, 0x20,
|
||||
0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x6E, 0x61, 0x6D, 0x65, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x31, 0x36, 0x2C, 0x20, 0x35, 0x31, 0x32,
|
||||
0x29, 0x2E, 0x41, 0x6E, 0x73, 0x69, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3B, 0x0A, 0x20,
|
||||
0x20, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x69, 0x6E, 0x66, 0x6F, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x35, 0x32, 0x38, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x56, 0x61,
|
||||
0x6C, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x30, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, 0x20, 0x22, 0x4E, 0x4F, 0x54, 0x20, 0x52, 0x45, 0x41, 0x44, 0x59, 0x22, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6B, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, 0x3A, 0x0A, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, 0x20, 0x22, 0x43, 0x4F, 0x4E, 0x4E, 0x45, 0x43, 0x54, 0x45, 0x44, 0x22, 0x3B, 0x0A,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6B, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20,
|
||||
0x32, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, 0x20, 0x22, 0x41, 0x44, 0x2D, 0x48, 0x4F, 0x43, 0x22,
|
||||
0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6B, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73,
|
||||
0x65, 0x20, 0x33, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, 0x20, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4F,
|
||||
0x4E, 0x4E, 0x45, 0x43, 0x54, 0x49, 0x4E, 0x47, 0x22, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6B, 0x3B, 0x0A, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x34, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65,
|
||||
0x20, 0x3D, 0x20, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4F, 0x4E, 0x4E, 0x45, 0x43, 0x54, 0x45, 0x44, 0x22, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62,
|
||||
0x72, 0x65, 0x61, 0x6B, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x35, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, 0x20, 0x22, 0x41, 0x53, 0x53, 0x4F, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4E, 0x47, 0x22, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6B, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x36, 0x3A, 0x0A, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, 0x20, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4F, 0x56, 0x45, 0x52, 0x49, 0x4E, 0x47, 0x22, 0x3B,
|
||||
0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6B, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65,
|
||||
0x20, 0x37, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, 0x20, 0x22, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4E,
|
||||
0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4E, 0x47, 0x22, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6B, 0x3B, 0x0A, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6C, 0x74, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74,
|
||||
0x65, 0x20, 0x3D, 0x20, 0x22, 0x55, 0x4E, 0x4B, 0x4E, 0x4F, 0x57, 0x4E, 0x22, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6B,
|
||||
0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x67, 0x75, 0x69, 0x64, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x2E, 0x44, 0x65,
|
||||
0x72, 0x65, 0x66, 0x28, 0x30, 0x2C, 0x20, 0x31, 0x36, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E,
|
||||
0x57, 0x6C, 0x61, 0x6E, 0x53, 0x63, 0x61, 0x6E, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x2C, 0x20, 0x69, 0x67, 0x75, 0x69, 0x64, 0x2C, 0x20, 0x30, 0x2C, 0x20,
|
||||
0x30, 0x2C, 0x20, 0x30, 0x29, 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E,
|
||||
0x20, 0x28, 0x74, 0x72, 0x75, 0x65, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, 0x65, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x28, 0x66, 0x61, 0x6C, 0x73, 0x65, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x7D, 0x0A, 0x0A, 0x66,
|
||||
0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x28, 0x5F, 0x73, 0x73, 0x69, 0x64, 0x2C, 0x20, 0x5F, 0x62, 0x73, 0x73, 0x69,
|
||||
0x64, 0x2C, 0x20, 0x5F, 0x72, 0x73, 0x73, 0x69, 0x2C, 0x20, 0x5F, 0x6C, 0x71, 0x29, 0x0A, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x73, 0x69, 0x64, 0x20, 0x3D,
|
||||
0x20, 0x5F, 0x73, 0x73, 0x69, 0x64, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x62, 0x73, 0x73, 0x69, 0x64, 0x20, 0x3D, 0x20, 0x5F, 0x62, 0x73, 0x73, 0x69, 0x64, 0x3B,
|
||||
0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x72, 0x73, 0x73, 0x69, 0x20, 0x3D, 0x20, 0x5F, 0x72, 0x73, 0x73, 0x69, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73,
|
||||
0x2E, 0x6C, 0x71, 0x20, 0x3D, 0x20, 0x5F, 0x6C, 0x71, 0x3B, 0x0A, 0x7D, 0x0A, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x2E, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79,
|
||||
0x70, 0x65, 0x2E, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x3D, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x29, 0x0A, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72,
|
||||
0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x73, 0x73, 0x69, 0x64, 0x20, 0x2B, 0x20, 0x22, 0x20, 0x5B, 0x22, 0x20, 0x2B, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x62,
|
||||
0x73, 0x73, 0x69, 0x64, 0x20, 0x2B, 0x20, 0x22, 0x5D, 0x3A, 0x20, 0x22, 0x20, 0x2B, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x6C, 0x71, 0x29, 0x3B, 0x0A, 0x7D, 0x0A, 0x0A, 0x66, 0x75, 0x6E, 0x63,
|
||||
0x74, 0x69, 0x6F, 0x6E, 0x20, 0x4F, 0x6E, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x79, 0x28, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x44, 0x61, 0x74, 0x61, 0x29, 0x0A,
|
||||
0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3D, 0x20, 0x4E,
|
||||
0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x44, 0x61, 0x74, 0x61, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x30, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x56, 0x61, 0x6C, 0x3B,
|
||||
0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x43, 0x6F, 0x64, 0x65, 0x20, 0x3D, 0x20, 0x4E, 0x6F, 0x74, 0x69,
|
||||
0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x44, 0x61, 0x74, 0x61, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x34, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x56, 0x61, 0x6C, 0x3B, 0x0A, 0x20, 0x20,
|
||||
0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x47, 0x75, 0x69, 0x64, 0x20, 0x3D, 0x20, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x44, 0x61, 0x74,
|
||||
0x61, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x38, 0x2C, 0x20, 0x31, 0x36, 0x29, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69,
|
||||
0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x20, 0x26, 0x20, 0x30, 0x58, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x4E,
|
||||
0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x43, 0x6F, 0x64, 0x65, 0x20, 0x3D, 0x3D, 0x20, 0x37, 0x29, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x62, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x50, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68,
|
||||
0x61, 0x6C, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20,
|
||||
0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x50, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x47, 0x65, 0x74, 0x42,
|
||||
0x53, 0x53, 0x4C, 0x69, 0x73, 0x74, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x50, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x2E, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x2C, 0x20, 0x64, 0x61, 0x74, 0x61, 0x47,
|
||||
0x75, 0x69, 0x64, 0x2C, 0x20, 0x30, 0x2C, 0x20, 0x33, 0x2C, 0x20, 0x30, 0x2C, 0x20, 0x30, 0x2C, 0x20, 0x62, 0x73, 0x73, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
|
||||
0x66, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x74, 0x6F, 0x74, 0x61, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x3D, 0x20, 0x62, 0x73, 0x73, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28,
|
||||
0x29, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x30, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x56, 0x61, 0x6C, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76,
|
||||
0x61, 0x72, 0x20, 0x6E, 0x75, 0x6D, 0x49, 0x74, 0x65, 0x6D, 0x73, 0x20, 0x3D, 0x20, 0x62, 0x73, 0x73, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x29, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28,
|
||||
0x34, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x56, 0x61, 0x6C, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x28, 0x69, 0x20, 0x3D, 0x20,
|
||||
0x30, 0x3B, 0x20, 0x69, 0x20, 0x3C, 0x20, 0x6E, 0x75, 0x6D, 0x49, 0x74, 0x65, 0x6D, 0x73, 0x3B, 0x20, 0x2B, 0x2B, 0x69, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x74, 0x65, 0x6D, 0x20, 0x3D, 0x20, 0x62,
|
||||
0x73, 0x73, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x29, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x38, 0x20, 0x2B, 0x20, 0x28, 0x33, 0x36, 0x30, 0x20, 0x2A, 0x20, 0x69, 0x29, 0x2C, 0x20,
|
||||
0x33, 0x36, 0x30, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x73, 0x73, 0x69, 0x64, 0x20, 0x3D,
|
||||
0x20, 0x69, 0x74, 0x65, 0x6D, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x34, 0x2C, 0x20, 0x33, 0x32, 0x29, 0x2E, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x2E, 0x74, 0x72, 0x69, 0x6D, 0x28, 0x29,
|
||||
0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x62, 0x73, 0x73, 0x69, 0x64, 0x20, 0x3D, 0x20, 0x69, 0x74,
|
||||
0x65, 0x6D, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x34, 0x30, 0x2C, 0x20, 0x36, 0x29, 0x2E, 0x48, 0x65, 0x78, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x32, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x73, 0x73, 0x69, 0x20, 0x3D, 0x20, 0x69, 0x74, 0x65, 0x6D, 0x2E, 0x44, 0x65, 0x72, 0x65,
|
||||
0x66, 0x28, 0x35, 0x36, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x56, 0x61, 0x6C, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61,
|
||||
0x72, 0x20, 0x6C, 0x71, 0x20, 0x3D, 0x20, 0x69, 0x74, 0x65, 0x6D, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x36, 0x30, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x56, 0x61, 0x6C, 0x3B, 0x0A, 0x0A, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x50, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x2E, 0x65, 0x6D, 0x69, 0x74, 0x28,
|
||||
0x27, 0x53, 0x63, 0x61, 0x6E, 0x27, 0x2C, 0x20, 0x6E, 0x65, 0x77, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x28, 0x73, 0x73, 0x69, 0x64, 0x2C, 0x20, 0x62, 0x73,
|
||||
0x73, 0x69, 0x64, 0x2C, 0x20, 0x72, 0x73, 0x73, 0x69, 0x2C, 0x20, 0x6C, 0x71, 0x29, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x7D, 0x0A, 0x0A, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x57, 0x69, 0x72, 0x65,
|
||||
0x6C, 0x65, 0x73, 0x73, 0x28, 0x29, 0x0A, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x65, 0x6D, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x74, 0x69, 0x6C, 0x73, 0x20, 0x3D, 0x20,
|
||||
0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x65, 0x76, 0x65, 0x6E, 0x74, 0x73, 0x27, 0x29, 0x2E, 0x69, 0x6E, 0x68, 0x65, 0x72, 0x69, 0x74, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29,
|
||||
0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x20, 0x3D, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x5F,
|
||||
0x47, 0x65, 0x6E, 0x65, 0x72, 0x69, 0x63, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x27, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76,
|
||||
0x65, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6F,
|
||||
0x78, 0x79, 0x28, 0x22, 0x77, 0x6C, 0x61, 0x6E, 0x61, 0x70, 0x69, 0x2E, 0x64, 0x6C, 0x6C, 0x22, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69,
|
||||
0x76, 0x65, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x28, 0x22, 0x57, 0x6C, 0x61, 0x6E, 0x4F, 0x70, 0x65, 0x6E, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x22,
|
||||
0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x28,
|
||||
0x22, 0x57, 0x6C, 0x61, 0x6E, 0x47, 0x65, 0x74, 0x4E, 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x42, 0x73, 0x73, 0x4C, 0x69, 0x73, 0x74, 0x22, 0x2C, 0x20, 0x22, 0x47, 0x65, 0x74, 0x42, 0x53, 0x53,
|
||||
0x4C, 0x69, 0x73, 0x74, 0x22, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4D, 0x65,
|
||||
0x74, 0x68, 0x6F, 0x64, 0x28, 0x22, 0x57, 0x6C, 0x61, 0x6E, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x22, 0x29,
|
||||
0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x28, 0x22,
|
||||
0x57, 0x6C, 0x61, 0x6E, 0x45, 0x6E, 0x75, 0x6D, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x22, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E,
|
||||
0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x28, 0x22, 0x57, 0x6C, 0x61, 0x6E, 0x53, 0x63, 0x61, 0x6E, 0x22, 0x29, 0x3B, 0x0A,
|
||||
0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x28, 0x22, 0x57, 0x6C,
|
||||
0x61, 0x6E, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x22, 0x29, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x6E, 0x65, 0x67,
|
||||
0x6F, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6F, 0x69,
|
||||
0x6E, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x68, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C,
|
||||
0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69,
|
||||
0x76, 0x65, 0x2E, 0x57, 0x6C, 0x61, 0x6E, 0x4F, 0x70, 0x65, 0x6E, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x28, 0x32, 0x2C, 0x20, 0x30, 0x2C, 0x20, 0x6E, 0x65, 0x67, 0x6F, 0x74, 0x69, 0x61, 0x74,
|
||||
0x65, 0x64, 0x2C, 0x20, 0x68, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x20, 0x3D, 0x20, 0x68, 0x2E, 0x56, 0x61, 0x6C, 0x3B,
|
||||
0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x5F, 0x4E, 0x4F, 0x54, 0x49, 0x46, 0x59, 0x5F, 0x50, 0x52, 0x4F, 0x58, 0x59, 0x5F, 0x4F, 0x42, 0x4A, 0x45, 0x43, 0x54, 0x20,
|
||||
0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0x50, 0x72, 0x6F,
|
||||
0x78, 0x79, 0x28, 0x4F, 0x6E, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x79, 0x2C, 0x20, 0x32, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x5F, 0x4E, 0x4F, 0x54, 0x49, 0x46,
|
||||
0x59, 0x5F, 0x50, 0x52, 0x4F, 0x58, 0x59, 0x5F, 0x4F, 0x42, 0x4A, 0x45, 0x43, 0x54, 0x2E, 0x50, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x3B, 0x0A, 0x20, 0x20,
|
||||
0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x50, 0x72, 0x65, 0x76, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x2E,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6C, 0x74, 0x20,
|
||||
0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x57, 0x6C, 0x61, 0x6E, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4E, 0x6F, 0x74, 0x69, 0x66, 0x69,
|
||||
0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x2C, 0x20, 0x30, 0x58, 0x30, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46, 0x2C, 0x20,
|
||||
0x30, 0x2C, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x5F, 0x4E, 0x4F, 0x54, 0x49, 0x46, 0x59, 0x5F, 0x50, 0x52, 0x4F, 0x58, 0x59, 0x5F, 0x4F, 0x42, 0x4A, 0x45, 0x43, 0x54, 0x2E, 0x43, 0x61, 0x6C,
|
||||
0x6C, 0x62, 0x61, 0x63, 0x6B, 0x2C, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x5F, 0x4E, 0x4F, 0x54, 0x49, 0x46, 0x59, 0x5F, 0x50, 0x52, 0x4F, 0x58, 0x59, 0x5F, 0x4F, 0x42, 0x4A, 0x45, 0x43, 0x54,
|
||||
0x2E, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2C, 0x20, 0x30, 0x2C, 0x20, 0x50, 0x72, 0x65, 0x76, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x29, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6D, 0x69,
|
||||
0x74, 0x74, 0x65, 0x72, 0x55, 0x74, 0x69, 0x6C, 0x73, 0x2E, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6E, 0x74, 0x28, 0x27, 0x53, 0x63, 0x61, 0x6E, 0x27, 0x29, 0x3B, 0x0A, 0x20,
|
||||
0x20, 0x20, 0x20, 0x65, 0x6D, 0x69, 0x74, 0x74, 0x65, 0x72, 0x55, 0x74, 0x69, 0x6C, 0x73, 0x2E, 0x61, 0x64, 0x64, 0x4D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x28, 0x27, 0x53, 0x63, 0x61, 0x6E, 0x27,
|
||||
0x2C, 0x20, 0x5F, 0x53, 0x63, 0x61, 0x6E, 0x29, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x47, 0x65, 0x74, 0x43, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x65, 0x64,
|
||||
0x4E, 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x20, 0x3D, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x28, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61,
|
||||
0x6C, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x69, 0x73,
|
||||
0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x57, 0x6C, 0x61, 0x6E, 0x45, 0x6E, 0x75, 0x6D, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2E,
|
||||
0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x2C, 0x20, 0x30, 0x2C, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2E,
|
||||
0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x29, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x30, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x56, 0x61, 0x6C, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x29, 0x2E, 0x44,
|
||||
0x65, 0x72, 0x65, 0x66, 0x28, 0x38, 0x2C, 0x20, 0x35, 0x33, 0x32, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x6E, 0x61, 0x6D, 0x65, 0x20,
|
||||
0x3D, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x31, 0x36, 0x2C, 0x20, 0x35, 0x31, 0x32, 0x29, 0x2E, 0x41, 0x6E, 0x73, 0x69, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67,
|
||||
0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x2E, 0x44, 0x65, 0x72, 0x65,
|
||||
0x66, 0x28, 0x35, 0x32, 0x38, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x49, 0x6E, 0x74, 0x56, 0x61, 0x6C, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x69, 0x6E,
|
||||
0x66, 0x6F, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x35, 0x32, 0x38, 0x2C, 0x20, 0x34, 0x29, 0x2E, 0x49, 0x6E, 0x74, 0x56, 0x61, 0x6C, 0x20, 0x3D, 0x3D, 0x20, 0x31, 0x29, 0x20, 0x2F, 0x2F,
|
||||
0x20, 0x43, 0x4F, 0x4E, 0x4E, 0x45, 0x43, 0x54, 0x45, 0x44, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x76, 0x61, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x2E, 0x43, 0x72, 0x65,
|
||||
0x61, 0x74, 0x65, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x70, 0x44,
|
||||
0x61, 0x74, 0x61, 0x20, 0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72,
|
||||
0x28, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3D, 0x20,
|
||||
0x74, 0x68, 0x69, 0x73, 0x2E, 0x4D, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6C, 0x2E, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x65, 0x72, 0x28, 0x29, 0x3B, 0x0A, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x69, 0x67, 0x75, 0x69, 0x64, 0x20, 0x3D, 0x20, 0x69, 0x6E, 0x66, 0x6F, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66,
|
||||
0x28, 0x30, 0x2C, 0x20, 0x31, 0x36, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6C, 0x20,
|
||||
0x3D, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2E, 0x57, 0x6C, 0x61, 0x6E, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
|
||||
0x28, 0x74, 0x68, 0x69, 0x73, 0x2E, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x2C, 0x20, 0x69, 0x67, 0x75, 0x69, 0x64, 0x2C, 0x20, 0x37, 0x2C, 0x20, 0x30, 0x2C, 0x20, 0x64, 0x61, 0x74, 0x61, 0x53,
|
||||
0x69, 0x7A, 0x65, 0x2C, 0x20, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2C, 0x20, 0x76, 0x61, 0x6C, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6C, 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x29, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x7B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72, 0x20, 0x61, 0x73, 0x73, 0x6F, 0x63, 0x69, 0x61, 0x74, 0x65,
|
||||
0x64, 0x53, 0x53, 0x49, 0x44, 0x20, 0x3D, 0x20, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x29, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x35, 0x32, 0x34, 0x2C,
|
||||
0x20, 0x33, 0x32, 0x29, 0x2E, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x72,
|
||||
0x20, 0x62, 0x73, 0x73, 0x69, 0x64, 0x20, 0x3D, 0x20, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x29, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x35, 0x36, 0x30,
|
||||
0x2C, 0x20, 0x36, 0x29, 0x2E, 0x48, 0x65, 0x78, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x76, 0x61, 0x72, 0x20, 0x6C, 0x71, 0x20, 0x3D, 0x20, 0x70, 0x44, 0x61, 0x74, 0x61, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x29, 0x2E, 0x44, 0x65, 0x72, 0x65, 0x66, 0x28, 0x35, 0x37, 0x36,
|
||||
0x2C, 0x20, 0x34, 0x29, 0x2E, 0x49, 0x6E, 0x74, 0x56, 0x61, 0x6C, 0x3B, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
|
||||
0x74, 0x75, 0x72, 0x6E, 0x20, 0x28, 0x6E, 0x65, 0x77, 0x20, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x28, 0x61, 0x73, 0x73, 0x6F, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64,
|
||||
0x53, 0x53, 0x49, 0x44, 0x2C, 0x20, 0x62, 0x73, 0x73, 0x69, 0x64, 0x2C, 0x20, 0x30, 0x2C, 0x20, 0x6C, 0x71, 0x29, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x72, 0x6F, 0x77, 0x20, 0x28, 0x22, 0x47, 0x65,
|
||||
0x74, 0x43, 0x6F, 0x6E, 0x6E, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4E, 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x73, 0x3A, 0x20, 0x46, 0x41, 0x49, 0x4C, 0x45, 0x44, 0x20, 0x28, 0x6E, 0x6F, 0x74, 0x20,
|
||||
0x61, 0x73, 0x73, 0x6F, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6F, 0x20, 0x61, 0x20, 0x6E, 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x29, 0x22, 0x29, 0x3B, 0x0A, 0x20, 0x20, 0x20, 0x20,
|
||||
0x7D, 0x3B, 0x0A, 0x0A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x3B, 0x0A, 0x7D, 0x0A, 0x0A, 0x6D, 0x6F, 0x64, 0x75, 0x6C,
|
||||
0x65, 0x2E, 0x65, 0x78, 0x70, 0x6F, 0x72, 0x74, 0x73, 0x20, 0x3D, 0x20, 0x6E, 0x65, 0x77, 0x20, 0x57, 0x69, 0x72, 0x65, 0x6C, 0x65, 0x73, 0x73, 0x28, 0x29, 0x3B, 0x0A]);
|
||||
|
||||
|
||||
|
||||
var WindowsChildScript = new Buffer([
|
||||
0x76, 0x61, 0x72, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x20, 0x3D, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6F, 0x6E, 0x74,
|
||||
0x61, 0x69, 0x6E, 0x65, 0x72, 0x27, 0x29, 0x3B, 0x0D, 0x0A, 0x76, 0x61, 0x72, 0x20, 0x57, 0x69, 0x72, 0x65, 0x6C, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
|
||||
0x28, 0x27, 0x57, 0x69, 0x72, 0x65, 0x6C, 0x65, 0x73, 0x73, 0x27, 0x29, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x57, 0x69, 0x72, 0x65, 0x6C, 0x65, 0x73, 0x73, 0x2E, 0x6F, 0x6E, 0x28, 0x27, 0x53, 0x63,
|
||||
0x61, 0x6E, 0x27, 0x2C, 0x20, 0x66, 0x75, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x28, 0x61, 0x70, 0x29, 0x20, 0x7B, 0x20, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x2E, 0x73, 0x65, 0x6E, 0x64,
|
||||
0x28, 0x61, 0x70, 0x29, 0x3B, 0x20, 0x7D, 0x29, 0x3B, 0x0D, 0x0A, 0x57, 0x69, 0x72, 0x65, 0x6C, 0x65, 0x73, 0x73, 0x2E, 0x53, 0x63, 0x61, 0x6E, 0x28, 0x29, 0x3B, 0x0D, 0x0A]);
|
||||
|
||||
|
||||
function AccessPoint(_ssid, _bssid, _lq)
|
||||
{
|
||||
this.ssid = _ssid;
|
||||
this.bssid = _bssid;
|
||||
this.lq = _lq;
|
||||
}
|
||||
AccessPoint.prototype.toString = function ()
|
||||
{
|
||||
return (this.ssid + " [" + this.bssid + "]: " + this.lq);
|
||||
}
|
||||
|
||||
function WiFiScanner()
|
||||
{
|
||||
var emitterUtils = require('events').inherits(this);
|
||||
emitterUtils.createEvent('accessPoint');
|
||||
|
||||
this.hasWireless = function ()
|
||||
{
|
||||
var retVal = false;
|
||||
var interfaces = require('os').networkInterfaces();
|
||||
for (var name in interfaces)
|
||||
{
|
||||
if (interfaces[name][0].type == 'wireless') { retVal = true; break; }
|
||||
}
|
||||
return (retVal);
|
||||
};
|
||||
|
||||
this.Scan = function ()
|
||||
{
|
||||
if (process.platform == 'win32')
|
||||
{
|
||||
this.master = require('ScriptContainer').Create(15, ContainerPermissions.DEFAULT);
|
||||
this.master.parent = this;
|
||||
this.master.on('data', function (j) { this.parent.emit('accessPoint', new AccessPoint(j.ssid, j.bssid, j.lq)); });
|
||||
|
||||
this.master.addModule('Wireless', WindowsWireless.toString());
|
||||
this.master.ExecuteString(WindowsChildScript.toString());
|
||||
}
|
||||
else if (process.platform == 'linux')
|
||||
{
|
||||
// Need to get the wireless interface name
|
||||
var interfaces = require('os').networkInterfaces();
|
||||
var wlan = null;
|
||||
for (var i in interfaces)
|
||||
{
|
||||
if (interfaces[i][0].type == 'wireless')
|
||||
{
|
||||
wlan = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (wlan != null)
|
||||
{
|
||||
this.child = require('ILibProcessPipe').CreateProcess("/sbin/iwlist", "iwlist", wlan, "scan");
|
||||
this.child.parent = this;
|
||||
this.child.ms = new MemoryStream();
|
||||
this.child.ms.parent = this.child;
|
||||
this.child.on('data', function (buffer) { this.ms.write(buffer); });
|
||||
this.child.on('end', function () { this.ms.end(); });
|
||||
this.child.ms.on('end', function ()
|
||||
{
|
||||
var str = this.buffer.toString();
|
||||
tokens = str.split(' - Address: ');
|
||||
for (var block in tokens)
|
||||
{
|
||||
if (block == 0) continue;
|
||||
var ln = tokens[block].split('\n');
|
||||
var _bssid = ln[0];
|
||||
var _lq;
|
||||
var _ssid;
|
||||
|
||||
for (var lnblock in ln)
|
||||
{
|
||||
lnblock = ln[lnblock].trim();
|
||||
lnblock = lnblock.trim();
|
||||
if (lnblock.startsWith('ESSID:'))
|
||||
{
|
||||
_ssid = lnblock.slice(7, lnblock.length - 1);
|
||||
if (_ssid == '<hidden>') { _ssid = ''; }
|
||||
}
|
||||
if (lnblock.startsWith('Signal level='))
|
||||
{
|
||||
_lq = lnblock.slice(13,lnblock.length-4);
|
||||
}
|
||||
}
|
||||
this.parent.parent.emit('accessPoint', new AccessPoint(_ssid, _bssid, _lq));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = WiFiScanner;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
157
Debug/WirelessTest.js
Normal file
157
Debug/WirelessTest.js
Normal file
@@ -0,0 +1,157 @@
|
||||
|
||||
function _Scan()
|
||||
{
|
||||
var wlanInterfaces = this.Marshal.CreatePointer();
|
||||
this.Native.WlanEnumInterfaces(this.Handle, 0, wlanInterfaces);
|
||||
|
||||
var count = wlanInterfaces.Deref().Deref(0, 4).Val;
|
||||
|
||||
var info = wlanInterfaces.Deref().Deref(8, 532);
|
||||
var iname = info.Deref(16, 512).AnsiString;
|
||||
|
||||
var istate;
|
||||
switch (info.Deref(528, 4).Val)
|
||||
{
|
||||
case 0:
|
||||
istate = "NOT READY";
|
||||
break;
|
||||
case 1:
|
||||
istate = "CONNECTED";
|
||||
break;
|
||||
case 2:
|
||||
istate = "AD-HOC";
|
||||
break;
|
||||
case 3:
|
||||
istate = "DISCONNECTING";
|
||||
break;
|
||||
case 4:
|
||||
istate = "DISCONNECTED";
|
||||
break;
|
||||
case 5:
|
||||
istate = "ASSOCIATING";
|
||||
break;
|
||||
case 6:
|
||||
istate = "DISCOVERING";
|
||||
break;
|
||||
case 7:
|
||||
istate = "AUTHENTICATING";
|
||||
break;
|
||||
default:
|
||||
istate = "UNKNOWN";
|
||||
break;
|
||||
}
|
||||
|
||||
var iguid = info.Deref(0, 16);
|
||||
if (this.Native.WlanScan(this.Handle, iguid, 0, 0, 0) == 0)
|
||||
{
|
||||
return (true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return (false);
|
||||
}
|
||||
}
|
||||
|
||||
function AccessPoint(_ssid, _bssid, _rssi, _lq)
|
||||
{
|
||||
this.ssid = _ssid;
|
||||
this.bssid = _bssid;
|
||||
this.rssi = _rssi;
|
||||
this.lq = _lq;
|
||||
}
|
||||
AccessPoint.prototype.toString = function()
|
||||
{
|
||||
return (this.ssid + " [" + this.bssid + "]: " + this.lq);
|
||||
}
|
||||
|
||||
function OnNotify(NotificationData)
|
||||
{
|
||||
var NotificationSource = NotificationData.Deref(0, 4).Val;
|
||||
var NotificationCode = NotificationData.Deref(4, 4).Val;
|
||||
var dataGuid = NotificationData.Deref(8, 16);
|
||||
|
||||
if ((NotificationSource & 0X00000008) && (NotificationCode == 7))
|
||||
{
|
||||
var bss = this.Parent.Marshal.CreatePointer();
|
||||
var result = this.Parent.Native.GetBSSList(this.Parent.Handle, dataGuid, 0, 3, 0, 0, bss);
|
||||
if (result == 0)
|
||||
{
|
||||
var totalSize = bss.Deref().Deref(0, 4).Val;
|
||||
var numItems = bss.Deref().Deref(4, 4).Val;
|
||||
for (i = 0; i < numItems; ++i)
|
||||
{
|
||||
var item = bss.Deref().Deref(8 + (360 * i), 360);
|
||||
var ssid = item.Deref(4, 32).String.trim();
|
||||
var bssid = item.Deref(40, 6).HexString2;
|
||||
var rssi = item.Deref(56, 4).Val;
|
||||
var lq = item.Deref(60, 4).Val;
|
||||
|
||||
this.Parent.emit('Scan', new AccessPoint(ssid, bssid, rssi, lq));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function Wireless()
|
||||
{
|
||||
var emitterUtils = require('events').inherits(this);
|
||||
|
||||
this.Marshal = require('_GenericMarshal');
|
||||
this.Native = this.Marshal.CreateNativeProxy("wlanapi.dll");
|
||||
this.Native.CreateMethod("WlanOpenHandle");
|
||||
this.Native.CreateMethod("WlanGetNetworkBssList", "GetBSSList");
|
||||
this.Native.CreateMethod("WlanRegisterNotification");
|
||||
this.Native.CreateMethod("WlanEnumInterfaces");
|
||||
this.Native.CreateMethod("WlanScan");
|
||||
this.Native.CreateMethod("WlanQueryInterface");
|
||||
|
||||
var negotiated = this.Marshal.CreatePointer();
|
||||
var h = this.Marshal.CreatePointer();
|
||||
|
||||
this.Native.WlanOpenHandle(2, 0, negotiated, h);
|
||||
this.Handle = h.Val;
|
||||
|
||||
this._NOTIFY_PROXY_OBJECT = this.Marshal.CreateCallbackProxy(OnNotify, 2);
|
||||
this._NOTIFY_PROXY_OBJECT.Parent = this;
|
||||
var PrevSource = this.Marshal.CreatePointer();
|
||||
var result = this.Native.WlanRegisterNotification(this.Handle, 0X0000FFFF, 0, this._NOTIFY_PROXY_OBJECT.Callback, this._NOTIFY_PROXY_OBJECT.State, 0, PrevSource);
|
||||
|
||||
emitterUtils.createEvent('Scan');
|
||||
emitterUtils.addMethod('Scan', _Scan);
|
||||
|
||||
this.GetConnectedNetwork = function ()
|
||||
{
|
||||
var interfaces = this.Marshal.CreatePointer();
|
||||
|
||||
this.Native.WlanEnumInterfaces(this.Handle, 0, interfaces);
|
||||
|
||||
var count = interfaces.Deref().Deref(0, 4).Val;
|
||||
var info = interfaces.Deref().Deref(8, 532);
|
||||
var iname = info.Deref(16, 512).AnsiString;
|
||||
var istate = info.Deref(528, 4).IntVal;
|
||||
|
||||
if(info.Deref(528, 4).IntVal == 1) // CONNECTED
|
||||
{
|
||||
var dataSize = this.Marshal.CreatePointer();
|
||||
var pData = this.Marshal.CreatePointer();
|
||||
var valueType = this.Marshal.CreatePointer();
|
||||
var iguid = info.Deref(0, 16);
|
||||
var retVal = this.Native.WlanQueryInterface(this.Handle, iguid, 7, 0, dataSize, pData, valueType);
|
||||
if (retVal == 0)
|
||||
{
|
||||
var associatedSSID = pData.Deref().Deref(524, 32).String;
|
||||
var bssid = pData.Deref().Deref(560, 6).HexString;
|
||||
var lq = pData.Deref().Deref(576, 4).IntVal;
|
||||
|
||||
return (new AccessPoint(associatedSSID, bssid, 0, lq));
|
||||
}
|
||||
}
|
||||
throw ("GetConnectedNetworks: FAILED (not associated to a network)");
|
||||
};
|
||||
|
||||
|
||||
return (this);
|
||||
}
|
||||
|
||||
module.exports = new Wireless();
|
||||
88
Debug/dgramtest.js
Normal file
88
Debug/dgramtest.js
Normal file
@@ -0,0 +1,88 @@
|
||||
var dgram = require('dgram');
|
||||
var os = require('os');
|
||||
var interfaces = os.networkInterfaces();
|
||||
var broadcastSockets = {};
|
||||
var multicastSockets = {};
|
||||
var httpHeaders = require('http-headers');
|
||||
|
||||
for (var adapter in interfaces)
|
||||
{
|
||||
if (interfaces.hasOwnProperty(adapter))
|
||||
{
|
||||
for (var i = 0 ; i < interfaces[adapter].length; ++i)
|
||||
{
|
||||
var addr = interfaces[adapter][i];
|
||||
|
||||
multicastSockets[i] = dgram.createSocket({ type: (addr.family == "IPv4" ? "udp4" : "udp6") });
|
||||
//multicastSockets[i].bind({ address: addr.address, port:1900, exclusive:false});
|
||||
multicastSockets[i].bind({ address: addr.address, exclusive: false });
|
||||
|
||||
if(addr.family == "IPv4")
|
||||
{
|
||||
//multicastSockets[i].addMembership("239.255.255.250");
|
||||
//multicastSockets[i].setMulticastLoopback(true);
|
||||
multicastSockets[i].once('message', OnMulticastMessage);
|
||||
|
||||
multicastSockets[i].send("M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nST: upnp:rootdevice\r\nMAN: \"ssdp:discover\"\r\nMX: 4\r\nContent-Length: 0\r\n\r\n", 1900, "239.255.255.250");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function OnMulticastMessage(msg, rinfo)
|
||||
{
|
||||
console.log("Received " + rinfo.size + " bytes from " + rinfo.address + ":" + rinfo.port);
|
||||
var packet = httpHeaders(msg);
|
||||
|
||||
if (packet.hasOwnProperty('statusCode'))
|
||||
{
|
||||
console.log("Status (" + packet.statusCode + ") " + packet.statusMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log(packet.method + " " + packet.url);
|
||||
}
|
||||
for (var header in packet.headers) {
|
||||
console.log(" " + header + ":" + packet.headers[header]);
|
||||
}
|
||||
}
|
||||
|
||||
function SendWakeOnLan()
|
||||
{
|
||||
var magic = new Buffer(102);
|
||||
for (var x = 0; x < 6; ++x)
|
||||
{
|
||||
magic[x] = 0xFF;
|
||||
}
|
||||
for (var x = 1; x <= 16; ++x) {
|
||||
magic[(x * 6)] = 0xB8;
|
||||
magic[(x * 6) + 1] = 0xAE;
|
||||
magic[(x * 6) + 2] = 0xED;
|
||||
magic[(x * 6) + 3] = 0x74;
|
||||
magic[(x * 6) + 4] = 0xAB;
|
||||
magic[(x * 6) + 5] = 0xC3;
|
||||
}
|
||||
|
||||
for (var adapter in interfaces) {
|
||||
if (interfaces.hasOwnProperty(adapter)) {
|
||||
console.log(adapter + " => ");
|
||||
for (var i = 0 ; i < interfaces[adapter].length; ++i) {
|
||||
var addr = interfaces[adapter][i];
|
||||
|
||||
console.log(" " + addr.family + " => " + addr.address + " [" + addr.mac + "]");
|
||||
if (addr.hasOwnProperty('netmask')) { console.log(" Netmask = " + addr.netmask); }
|
||||
|
||||
broadcastSockets[i] = dgram.createSocket({ type: (addr.family == "IPv4" ? "udp4" : "udp6") });
|
||||
broadcastSockets[i].bind({ address: addr.address });
|
||||
broadcastSockets[i].setBroadcast(true);
|
||||
|
||||
if (addr.family == "IPv4") {
|
||||
broadcastSockets[i].send(magic, 7, "255.255.255.255");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
38
Debug/linuxwifi.js
Normal file
38
Debug/linuxwifi.js
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
var manager = require('ILibProcessPipe');
|
||||
var child = manager.CreateProcess("/sbin/iwlist", "iwlist", "wlan0", "scan");
|
||||
var MemoryStream = require('MemoryStream');
|
||||
|
||||
var ms = new MemoryStream();
|
||||
ms.on('end', function ()
|
||||
{
|
||||
var str = this.buffer.toString();
|
||||
tokens = str.split(' - Address: ');
|
||||
for (var block in tokens)
|
||||
{
|
||||
var ln = tokens[block].split('\n');
|
||||
|
||||
console.log("MAC Address = " + ln[0]);
|
||||
|
||||
for(var lnblock in ln)
|
||||
{
|
||||
lnblock = ln[lnblock].trim();
|
||||
lnblock = lnblock.trim();
|
||||
if(lnblock.startsWith('ESSID:'))
|
||||
{
|
||||
console.log("SSID = " + lnblock.slice(6));
|
||||
}
|
||||
if(lnblock.startsWith('Signal level='))
|
||||
{
|
||||
console.log("Signal Strength = " + lnblock.slice(13));
|
||||
}
|
||||
}
|
||||
console.log("");
|
||||
}
|
||||
});
|
||||
|
||||
console.log("starting...");
|
||||
child.on('data', function (buffer) { ms.write(buffer); });
|
||||
child.on('end', function () { ms.end(); });
|
||||
|
||||
//child.write("iwlist wlan0 scan\n");
|
||||
113
Debug/tunnel.js
Normal file
113
Debug/tunnel.js
Normal file
@@ -0,0 +1,113 @@
|
||||
var proxy;
|
||||
var i;
|
||||
|
||||
var http = require('http');
|
||||
var net = require('net');
|
||||
var host = null;
|
||||
var port = 443;
|
||||
var id = null;
|
||||
var req;
|
||||
var local = 0;
|
||||
|
||||
var remoteHost = "";
|
||||
var remotePort = 0;
|
||||
|
||||
process.on("uncaughtException", function (e) { console.log("UncaughtException: " + e); });
|
||||
process.on("exit", function (code) { console.log("Process Exiting with code: " + code); });
|
||||
|
||||
function onWebSocket(response, s, head)
|
||||
{
|
||||
console.log("WebSocket connected");
|
||||
s.data = onWebSocketData;
|
||||
}
|
||||
function OnNewConnection(connection)
|
||||
{
|
||||
console.log("New Local Connection");
|
||||
this.parent.pipe(connection);
|
||||
connection.pipe(this.parent);
|
||||
}
|
||||
|
||||
function OnClientConnection()
|
||||
{
|
||||
console.log("New Client Connection Established");
|
||||
this.parent.pipe(this);
|
||||
this.pipe(this.parent);
|
||||
}
|
||||
|
||||
function onWebSocketData(buffer)
|
||||
{
|
||||
if(buffer == 'c')
|
||||
{
|
||||
console.log("tunnel established");
|
||||
this.pause();
|
||||
|
||||
if (local != 0)
|
||||
{
|
||||
this.server = net.createServer();
|
||||
this.server.parent = this;
|
||||
this.server.on('connection', OnNewConnection);
|
||||
this.server.listen({ port: local });
|
||||
}
|
||||
if(remotePort != 0)
|
||||
{
|
||||
this.client = net.createConnection({ port: remotePort, host: remoteHost }, OnClientConnection);
|
||||
this.client.parent = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (i = 1; i < process.argv.length; ++i)
|
||||
{
|
||||
if(process.argv[i] == 'local')
|
||||
{
|
||||
console.log("binding local port " + (local = parseInt(process.argv[i + 1])));
|
||||
++i;
|
||||
}
|
||||
else if(process.argv[i] == 'remote')
|
||||
{
|
||||
remoteHost = process.argv[i + 1];
|
||||
remotePort = parseInt(process.argv[i + 2])
|
||||
console.log("binding remote " + remoteHost + ":" + remotePort);
|
||||
i += 2;
|
||||
}
|
||||
else if(process.argv[i] == 'proxy')
|
||||
{
|
||||
console.log("Using Proxy: " + process.argv[i + 1] + ":" + parseInt(process.argv[i + 2]));
|
||||
proxy = require('global-tunnel');
|
||||
try
|
||||
{
|
||||
proxy.initialize({ host: process.argv[i + 1], port: parseInt(process.argv[i + 2]) });
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
console.log("Unable to bind proxy: " + e);
|
||||
}
|
||||
i += 2;
|
||||
}
|
||||
else if(process.argv[i] == 'relayHost')
|
||||
{
|
||||
host = process.argv[i + 1];
|
||||
++i;
|
||||
}
|
||||
else if(process.argv[i] == 'relayId')
|
||||
{
|
||||
id = process.argv[i + 1];
|
||||
++i;
|
||||
}
|
||||
else if(process.argv[i] == 'relayPort')
|
||||
{
|
||||
port = parseInt(argv[i + 1]);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
if (host != null && id != null)
|
||||
{
|
||||
console.log("using relay: [" + host + ":" + port + "] using id: " + id);
|
||||
req = http.request({ protocol: "wss:", host: host, port: port, path: "/meshrelay.ashx?id='" + id + "'" });
|
||||
req.upgrade = onWebSocket;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user