| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | 
							- 'use strict'
 
- var os = require('os')
 
- var util = require('util')
 
- var EventEmitter = require('events').EventEmitter
 
- var serviceName = require('multicast-dns-service-types')
 
- var txt = require('dns-txt')()
 
- var TLD = '.local'
 
- module.exports = Service
 
- util.inherits(Service, EventEmitter)
 
- function Service (opts) {
 
-   if (!opts.name) throw new Error('Required name not given')
 
-   if (!opts.type) throw new Error('Required type not given')
 
-   if (!opts.port) throw new Error('Required port not given')
 
-   this.name = opts.name
 
-   this.protocol = opts.protocol || 'tcp'
 
-   this.type = serviceName.stringify(opts.type, this.protocol)
 
-   this.host = opts.host || os.hostname()
 
-   this.port = opts.port
 
-   this.fqdn = this.name + '.' + this.type + TLD
 
-   this.subtypes = opts.subtypes || null
 
-   this.txt = opts.txt || null
 
-   this.published = false
 
-   this._activated = false // indicates intent - true: starting/started, false: stopping/stopped
 
- }
 
- Service.prototype._records = function () {
 
-   var records = [rr_ptr(this), rr_srv(this), rr_txt(this)]
 
-   var self = this
 
-   var interfaces = os.networkInterfaces()
 
-   Object.keys(interfaces).forEach(function (name) {
 
-     interfaces[name].forEach(function (addr) {
 
-       if (addr.internal) return
 
-       if (addr.family === 'IPv4') {
 
-         records.push(rr_a(self, addr.address))
 
-       } else {
 
-         records.push(rr_aaaa(self, addr.address))
 
-       }
 
-     })
 
-   })
 
-   return records
 
- }
 
- function rr_ptr (service) {
 
-   return {
 
-     name: service.type + TLD,
 
-     type: 'PTR',
 
-     ttl: 28800,
 
-     data: service.fqdn
 
-   }
 
- }
 
- function rr_srv (service) {
 
-   return {
 
-     name: service.fqdn,
 
-     type: 'SRV',
 
-     ttl: 120,
 
-     data: {
 
-       port: service.port,
 
-       target: service.host
 
-     }
 
-   }
 
- }
 
- function rr_txt (service) {
 
-   return {
 
-     name: service.fqdn,
 
-     type: 'TXT',
 
-     ttl: 4500,
 
-     data: txt.encode(service.txt)
 
-   }
 
- }
 
- function rr_a (service, ip) {
 
-   return {
 
-     name: service.host,
 
-     type: 'A',
 
-     ttl: 120,
 
-     data: ip
 
-   }
 
- }
 
- function rr_aaaa (service, ip) {
 
-   return {
 
-     name: service.host,
 
-     type: 'AAAA',
 
-     ttl: 120,
 
-     data: ip
 
-   }
 
- }
 
 
  |