source: frontend/node_modules/bonjour-service/dist/lib/mdns-server.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 2 weeks ago

Fix frontend appearance

  • Property mode set to 100644
File size: 4.1 KB
Line 
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6exports.Server = void 0;
7const multicast_dns_1 = __importDefault(require("multicast-dns"));
8const es6_1 = __importDefault(require("fast-deep-equal/es6"));
9const dns_equal_1 = __importDefault(require("./utils/dns-equal"));
10class Server {
11 constructor(opts, errorCallback) {
12 this.registry = {};
13 this.mdns = (0, multicast_dns_1.default)(opts);
14 this.mdns.setMaxListeners(0);
15 this.mdns.on('query', this.respondToQuery.bind(this));
16 this.errorCallback = errorCallback !== null && errorCallback !== void 0 ? errorCallback : function (err) { throw err; };
17 }
18 register(records) {
19 const shouldRegister = (record) => {
20 var subRegistry = this.registry[record.type];
21 if (!subRegistry) {
22 subRegistry = this.registry[record.type] = [];
23 }
24 else if (subRegistry.some(this.isDuplicateRecord(record))) {
25 return;
26 }
27 subRegistry.push(record);
28 };
29 if (Array.isArray(records)) {
30 records.forEach(shouldRegister);
31 }
32 else {
33 shouldRegister(records);
34 }
35 }
36 unregister(records) {
37 const shouldUnregister = (record) => {
38 let type = record.type;
39 if (!(type in this.registry)) {
40 return;
41 }
42 this.registry[type] = this.registry[type].filter((i) => i.name !== record.name);
43 };
44 if (Array.isArray(records)) {
45 records.forEach(shouldUnregister);
46 }
47 else {
48 shouldUnregister(records);
49 }
50 }
51 respondToQuery(query) {
52 let self = this;
53 query.questions.forEach((question) => {
54 var type = question.type;
55 var name = question.name;
56 var answers = type === 'ANY'
57 ? Object.keys(self.registry).map(self.recordsFor.bind(self, name)).flat(1)
58 : self.recordsFor(name, type);
59 if (answers.length === 0)
60 return;
61 var additionals = [];
62 if (type !== 'ANY') {
63 answers.forEach((answer) => {
64 if (answer.type !== 'PTR')
65 return;
66 additionals = additionals
67 .concat(self.recordsFor(answer.data, 'SRV'))
68 .concat(self.recordsFor(answer.data, 'TXT'));
69 });
70 additionals
71 .filter(function (record) {
72 return record.type === 'SRV';
73 })
74 .map(function (record) {
75 return record.data.target;
76 })
77 .filter(this.unique())
78 .forEach(function (target) {
79 additionals = additionals
80 .concat(self.recordsFor(target, 'A'))
81 .concat(self.recordsFor(target, 'AAAA'));
82 });
83 }
84 self.mdns.respond({ answers: answers, additionals: additionals }, (err) => {
85 if (err) {
86 this.errorCallback(err);
87 }
88 });
89 });
90 }
91 recordsFor(name, type) {
92 if (!(type in this.registry)) {
93 return [];
94 }
95 return this.registry[type].filter((record) => {
96 var _name = ~name.indexOf('.') ? record.name : record.name.split('.')[0];
97 return (0, dns_equal_1.default)(_name, name);
98 });
99 }
100 isDuplicateRecord(a) {
101 return (b) => {
102 return a.type === b.type &&
103 a.name === b.name &&
104 (0, es6_1.default)(a.data, b.data);
105 };
106 }
107 unique() {
108 var set = [];
109 return (obj) => {
110 if (~set.indexOf(obj))
111 return false;
112 set.push(obj);
113 return true;
114 };
115 }
116}
117exports.Server = Server;
118exports.default = Server;
119//# sourceMappingURL=mdns-server.js.map
Note: See TracBrowser for help on using the repository browser.