'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();