@achingbrain/ssdp
Version:
Yet another SSDP implementation for node.js
46 lines • 1.74 kB
JavaScript
import http from 'http';
import { freeport } from 'freeport-promise';
import { detailsHandler } from './details-handler.js';
import { findAllInterfaces } from './find-all-interfaces.js';
export async function createLocation(ssdp, advert) {
if (advert.location != null) {
return async () => Promise.resolve();
}
const servers = [];
advert.location = {};
await Promise.all(ssdp.sockets.map(async (socket) => Promise.all(findAllInterfaces(socket.type === 'udp4' && advert.ipv4, socket.type === 'udp6' && advert.ipv6)
.map(async (iface) => {
await freeport()
.then(async (port) => {
await new Promise((resolve, reject) => {
let location = 'http://';
if (socket.type === 'udp6') {
location += `[${iface.address}]`;
}
else {
location += iface.address;
}
location += `:${port}`;
advert.location[socket.type] = location;
const server = http.createServer((req, res) => {
detailsHandler(advert.details, req, res);
});
const addr = socket.address();
server.listen(port, addr.address, () => {
resolve();
});
server.on('error', err => {
reject(err);
});
servers.push(server);
});
});
}))));
return async () => {
await Promise.all(servers.map(async (server) => new Promise((resolve, reject) => {
server.close();
resolve();
})));
};
}
//# sourceMappingURL=create-location.js.map