node-fauxmo
Advanced tools
Comparing version 0.0.4 to 0.0.5
{ | ||
"name": "node-fauxmo", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"description": "Make fake WeMo devices. Another Node.JS port of fauxmo, borrowing heavily from fauxmojs", | ||
@@ -5,0 +5,0 @@ "main": "src/index.js", |
@@ -6,3 +6,3 @@ 'use strict'; | ||
const util = require('util'); | ||
var ip = require('ip'); | ||
const ip = require('ip'); | ||
const os = require('os'); | ||
@@ -14,3 +14,3 @@ | ||
let response = function(ip) { | ||
let response = function(ipaddr) { | ||
let deviceresp = []; | ||
@@ -24,3 +24,3 @@ let responses = []; | ||
'EXT:', | ||
'LOCATION: http://' + ip + ':' + devices[i].port + '/setup.xml', | ||
'LOCATION: http://' + ipaddr + ':' + devices[i].port + '/setup.xml', | ||
'OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01', | ||
@@ -58,6 +58,12 @@ '01-NLS: ' + serial(devices[i]) + '', | ||
let findAddress = function(network) { | ||
let interfaces = os.networkInterfaces().Ethernet; | ||
for(let i = 0; i <= interfaces.length - 1; i++) { | ||
if(ip.cidr(interfaces[i].cidr)==network) { | ||
return interfaces[i].address; | ||
let interfaces = os.networkInterfaces(); | ||
let keys = Object.keys(interfaces); | ||
//console.log(util.inspect(keys)); | ||
for(let i = 0; i <= keys.length - 1; i++) { | ||
//console.log(interfaces[keys[i]]); | ||
for(let j = 0; j <= interfaces[keys[i]].length - 1; j++) { | ||
//console.log(interfaces[keys[i]][j].address); | ||
if(getMask(interfaces[keys[i]][j].address, interfaces[keys[i]][j].netmask) == network) { | ||
return interfaces[keys[i]][j].address; | ||
} | ||
} | ||
@@ -67,2 +73,7 @@ } | ||
var getMask = function(ipaddr, subnet) { | ||
let mask = ip.mask(ipaddr, subnet); | ||
return mask; | ||
} | ||
module.exports.startSSDPServer = function(fauxMo) { | ||
@@ -86,3 +97,3 @@ devices = fauxMo.devices; | ||
//console.log('Search request from ' + util.inspect(rinfo)); | ||
//console.log(ip.cidr(rinfo.address + '/24')); | ||
//console.log(getMask(rinfo.address, '255.255.255.0')); | ||
let search = parseHeaders(msg); | ||
@@ -92,3 +103,4 @@ if(search) { | ||
if(ipaddress == '0.0.0.0') { | ||
srcip = findAddress(ip.cidr(rinfo.address + '/24')); | ||
srcip = findAddress(getMask(rinfo.address, '255.255.255.0')); | ||
//console.log('Search request from ' + util.inspect(rinfo)); | ||
} else { | ||
@@ -113,3 +125,16 @@ srcip = ipaddress; | ||
udpServer.setMulticastTTL(128); | ||
udpServer.addMembership('239.255.255.250', ipaddress); | ||
//console.log(ipaddress); | ||
if(ipaddress=='0.0.0.0') { | ||
let interfaces = os.networkInterfaces(); | ||
let keys = Object.keys(interfaces); | ||
for(let i = 0; i <= keys.length - 1; i++) { | ||
for(let j = 0; j <= interfaces[keys[i]].length - 1; j++) { | ||
if(interfaces[keys[i]][j].family=='IPv4'){ | ||
udpServer.addMembership('239.255.255.250', interfaces[keys[i]][j].address); | ||
} | ||
} | ||
} | ||
} else { | ||
udpServer.addMembership('239.255.255.250', ipaddress); | ||
} | ||
} catch (err) { | ||
@@ -122,4 +147,19 @@ //debug('udp server error: %s', err.message); | ||
try { | ||
udpServer.bind(1900, function() { | ||
udpServer.setMulticastInterface(ipaddress); | ||
udpServer.bind(1900, ipaddress, function() { | ||
if(ipaddress=='0.0.0.0') { | ||
let interfaces = os.networkInterfaces(); | ||
let keys = Object.keys(interfaces); | ||
for(let i = 0; i <= keys.length - 1; i++) { | ||
for(let j = 0; j <= interfaces[keys[i]].length - 1; j++) { | ||
if(interfaces[keys[i]][j].family=='IPv4'){ | ||
console.log('Adding multicast membership for ' + interfaces[keys[i]][j].address); | ||
udpServer.setMulticastInterface(interfaces[keys[i]][j].address); | ||
} | ||
//udpServer.setMulticastInterface(keys[i]); | ||
} | ||
} | ||
//udpServer.setMulticastInterface(ipaddress); | ||
} else { | ||
udpServer.setMulticastInterface(ipaddress); | ||
} | ||
}); | ||
@@ -129,2 +169,2 @@ } catch (err) { | ||
} | ||
} | ||
} |
14723
9
352