-
Notifications
You must be signed in to change notification settings - Fork 2
/
mdns.js
58 lines (42 loc) · 1.33 KB
/
mdns.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
const dgram = require("dgram");
const url = require("url");
const WebSocket = require("ws");
process.env = Object.assign({
BACKEND_URL: "http://localhost:8080",
BACKEND_PROTOCOL: "http"
}, process.env);
const logger = require("./system/logger.js");
const log = logger.create("forwarder/mdns");
let uri = new url.URL(process.env.BACKEND_URL);
uri.protocol = (process.env.BACKEND_PROTOCOL === "https" ? "wss" : "ws");
uri.pathname = "/api/mdns";
uri.search = `x-auth-token=${process.env.AUTH_TOKEN}`;
const ws = new WebSocket(uri);
const socket = dgram.createSocket({
type: "udp4",
reuseAddr: true
});
ws.on("close", (code) => {
log.debug(`Disconnected from ${ws.url}`);
socket.close(() => {
process.exit(code);
});
});
socket.on("listening", () => {
const address = socket.address();
log.info(`Server listening udp://${address.address}:${address.port}`);
socket.on("message", (msg, rinfo) => {
log.trace("Message on udp socket received", msg, rinfo);
ws.send(msg);
});
socket.addMembership("224.0.0.251");
});
ws.on("message", (msg) => {
log.trace("Send message to multicast addr", msg);
socket.send(msg, 0, msg.length, 5353, "224.0.0.251");
});
ws.on("open", () => {
log.info(`Connected to ${ws.url}`);
// bind socket
socket.bind(5353, "0.0.0.0");
});