walnut.js/snippets/test-upnp-igd-search.js

53 lines
1.2 KiB
JavaScript

'use strict';
var dgram = require('dgram')
, fs = require('fs')
, ssdpAddress = '239.255.255.250'
, ssdpPort = 1900
, sourceIface = '0.0.0.0' // or ip (i.e. '192.168.1.101', '10.0.1.2')
, sourcePort = 0 // chosen at random
, searchTarget = 'urn:schemas-upnp-org:device:InternetGatewayDevice:1'
, socket
;
function broadcastSsdp() {
var query
;
// described at bit.ly/1zjVJVW
query = new Buffer(
'M-SEARCH * HTTP/1.1\r\n'
+ 'HOST: ' + ssdpAddress + ':' + ssdpPort + '\r\n'
+ 'MAN: "ssdp:discover"\r\n'
+ 'MX: 1\r\n'
+ 'ST: ' + searchTarget + '\r\n'
+ '\r\n'
);
// Send query on each socket
socket.send(query, 0, query.length, ssdpPort, ssdpAddress);
}
function createSocket() {
socket = dgram.createSocket('udp4');
socket.on('listening', function () {
console.log('socket ready...');
broadcastSsdp();
});
socket.on('message', function (chunk, info) {
var message = chunk.toString();
console.log('[incoming] UDP message');
console.log(info);
console.log(message);
});
console.log('binding to', sourceIface + ':' + sourcePort);
socket.bind(sourcePort, sourceIface);
}
createSocket();