From 062bf0f3518eec9122f6db693069a66ac4edd028 Mon Sep 17 00:00:00 2001 From: honusz Date: Thu, 20 Apr 2023 13:07:56 -0400 Subject: [PATCH 1/2] Poss ip subnet fix --- Discovery/index.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Discovery/index.ts b/Discovery/index.ts index 2da64b5..df713b9 100644 --- a/Discovery/index.ts +++ b/Discovery/index.ts @@ -4,7 +4,7 @@ import { strict as assert } from 'assert'; import { ConnectionInfo, DiscoveryMessage, DiscoveryMessageOptions, IpAddress, Units, DeviceId } from '../types'; import { sleep, WriteContext, ReadContext } from '../utils'; import { Socket, RemoteInfo, createSocket } from 'dgram'; -import { subnet, SubnetInfo } from 'ip'; +import { subnet } from 'ip'; import { networkInterfaces } from 'os'; const ANNOUNCEMENT_INTERVAL = 1000; @@ -73,12 +73,8 @@ export class Discovery extends EventEmitter { const discoveryMessage = this.createDiscoveryMessage(Action.Login, this.options, port); await sleep(500); const ips = this.findBroadcastIPs(); - const address = ips.filter((ip) => { - return ip.contains(this.address) === true; - }); - this.broadcastAddress = address.shift().broadcastAddress; const msg = this.writeDiscoveryMessage(discoveryMessage); - this.broadcastMessage(this.socket, msg, LISTEN_PORT, this.broadcastAddress); + ips.forEach(ip => this.broadcastMessage(this.socket, msg, LISTEN_PORT, ip)) this.emit('announcing', discoveryMessage); Logger.debug(`Broadcast Discovery Message ${this.deviceId.string} ${discoveryMessage.source}`); this.announceTimer = setInterval( @@ -220,7 +216,7 @@ export class Discovery extends EventEmitter { * Get list of Broadcast-enabled Network Interfaces * @returns {SubnetInfo[]} */ - private findBroadcastIPs(): SubnetInfo[] { + private findBroadcastIPs(): string[] { const interfaces = Object.values(networkInterfaces()); assert(interfaces.length); const ips = []; @@ -229,7 +225,7 @@ export class Discovery extends EventEmitter { for (const entry of i) { if (entry.family === 'IPv4' && entry.internal === false) { const info = subnet(entry.address, entry.netmask); - ips.push(info); + ips.push(info.broadcastAddress); } } } From 1bfe96432909cf25992bb4c7c941b6f774396979 Mon Sep 17 00:00:00 2001 From: honusz Date: Sat, 22 Apr 2023 00:00:58 -0400 Subject: [PATCH 2/2] broadcast to ALL ips --- Discovery/index.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Discovery/index.ts b/Discovery/index.ts index df713b9..767d89b 100644 --- a/Discovery/index.ts +++ b/Discovery/index.ts @@ -28,7 +28,7 @@ export declare interface Discovery { export class Discovery extends EventEmitter { private socket: Socket; private address: IpAddress; - private broadcastAddress: IpAddress; + private broadcastAddresses: IpAddress[]; private options: DiscoveryMessageOptions = null; private peers: Map = new Map(); private deviceId: DeviceId = null; @@ -72,9 +72,10 @@ export class Discovery extends EventEmitter { this.socket.setBroadcast(true); const discoveryMessage = this.createDiscoveryMessage(Action.Login, this.options, port); await sleep(500); - const ips = this.findBroadcastIPs(); + this.broadcastAddresses = this.findBroadcastIPs(); const msg = this.writeDiscoveryMessage(discoveryMessage); - ips.forEach(ip => this.broadcastMessage(this.socket, msg, LISTEN_PORT, ip)) + + this.broadcastMessage(this.socket, msg, LISTEN_PORT, this.broadcastAddresses) this.emit('announcing', discoveryMessage); Logger.debug(`Broadcast Discovery Message ${this.deviceId.string} ${discoveryMessage.source}`); this.announceTimer = setInterval( @@ -83,7 +84,7 @@ export class Discovery extends EventEmitter { this.socket, msg, LISTEN_PORT, - this.broadcastAddress + this.broadcastAddresses ); } @@ -97,7 +98,7 @@ export class Discovery extends EventEmitter { const discoveryMessage = this.createDiscoveryMessage(Action.Logout, this.options); const msg = this.writeDiscoveryMessage(discoveryMessage); - await this.broadcastMessage(this.socket, msg, LISTEN_PORT, this.broadcastAddress); + await this.broadcastMessage(this.socket, msg, LISTEN_PORT, this.broadcastAddresses); await this.socket.close(); Logger.debug('Broadcast Unannounce Message'); @@ -112,8 +113,10 @@ export class Discovery extends EventEmitter { * @param {number} port * @param {IpAddress} address */ - private async broadcastMessage(socket: Socket, msg: Buffer, port: number, address: IpAddress): Promise { - await socket.send(msg, port, address); + private async broadcastMessage(socket: Socket, msg: Buffer, port: number, address: IpAddress[]): Promise { + for (const ip of address) { + await socket.send(msg, port, ip); + } } /**