forked from coolaj86/digd.js
		
	
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| module.exports.create = function (cli, dnsd) {
 | |
|   var server = require('dgram').createSocket({
 | |
|     type: cli.udp6 ? 'udp6' : 'udp4'
 | |
|   , reuseAddr: true
 | |
|   });
 | |
|   server.bind({
 | |
|     port: cli.port
 | |
|   , address: cli.address
 | |
|   });
 | |
| 
 | |
|   var handlers = {};
 | |
|   handlers.onError = function (err) {
 | |
|     if ('EACCES' === err.code) {
 | |
|       console.error("");
 | |
|       console.error("EACCES: Couldn't bind to port. You probably need to use sudo, authbind, or setcap.");
 | |
|       console.error("");
 | |
|       process.exit(123);
 | |
|       return;
 | |
|     }
 | |
|     console.error("error:", err.stack);
 | |
|     server.close();
 | |
|   };
 | |
| 
 | |
|   handlers.onMessage = function (nb, rinfo) {
 | |
|     //console.log('[DEBUG] got a UDP message', nb.length);
 | |
|     //console.log(nb.toString('hex'));
 | |
| 
 | |
|     dnsd.onMessage(nb, function (err, newAb, dbgmsg) {
 | |
|       // TODO send legit error message
 | |
|       if (err) { server.send(Buffer.from([0x00])); return; }
 | |
|       server.send(newAb, rinfo.port, rinfo.address, function () {
 | |
|         console.log(dbgmsg, rinfo.port, rinfo.address);
 | |
|       });
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   handlers.onListening = function () {
 | |
|     /*jshint validthis:true*/
 | |
|     var server = this;
 | |
| 
 | |
|     if (cli.mdns || '224.0.0.251' === cli.nameserver) {
 | |
|       server.setBroadcast(true);
 | |
|       server.addMembership(cli.nameserver);
 | |
|     }
 | |
| 
 | |
|     console.log('');
 | |
|     console.log('Bound and Listening:');
 | |
|     console.log(server.address().address + '#' + server.address().port + ' (' + server.type + ')');
 | |
|   };
 | |
| 
 | |
|   server.on('error', handlers.onError);
 | |
|   server.on('message', handlers.onMessage);
 | |
|   server.on('listening', handlers.onListening);
 | |
| 
 | |
|   return server;
 | |
| };
 |