UNPKG

udp-hub

Version:

An abstraction of the dgram module that is IPv4/v6 agnostic.

77 lines (76 loc) 2.26 kB
var output = {}; var addressLogic = require("./addressLogic.js"); var ipFormat = addressLogic.ipFormat; var dgram = require("dgram"); var createBroadcaster = function(callback){ this.server6 = dgram.createSocket("udp6"); this.server4 = dgram.createSocket("udp4"); var self = this; this.server6.bind(function(){ self.server4.bind(function(){ self.server6.setBroadcast(true); self.server6.setMulticastTTL(64); self.server4.setBroadcast(true); self.server4.setMulticastTTL(64); callback(); }); }); }; createBroadcaster.prototype.close = function(callback) { this.server6.close(); this.server4.close(); if (callback) { callback(); } }; createBroadcaster.prototype.setMulticastTTL = function(value) { this.server6.setMulticastTTL(value); this.server4.setMulticastTTL(value); }; createBroadcaster.prototype.broadcast = function(buffer, start, end, port, address, callback){ var addressType = addressLogic.addressType(address); switch (addressType) { case "IPv4": this.server4.send(buffer, start, end, port, address, callback); break; case "IPv6": this.server6.send(buffer, start, end, port, address, callback); break; case "DNS": var addressCode = addressLogic.getAddresses(addresses, function(){ if (addresses.length==0) { callback(new Error("DNSerror")); } var format = addressLogic.ipFormat(addresses[0]); if (format=="IPv6") { this.server6.send(buffer, start, end, port, address, callback); } else { this.server4.send(buffer, start, end, port, address, callback); } }); break; case "EUI-48": case "EUI-64": default: callback(new Error("unusableAddressType")); break; } return; }; createBroadcaster.prototype.setMulticastLoopback = function(value) { this.server6.setMulticastLoopback(value); this.server4.setMulticastLoopback(value); return; }; createBroadcaster.prototype.ref = function(){ this.server6.ref(); this.server4.ref(); }; createBroadcaster.prototype.unref = function(){ this.server6.unref(); this.server4.unref(); }; output.createBroadcaster = function(callback){ return new createBroadcaster(callback); }; module.exports = exports = output;