matterbridge
Version:
Matterbridge plugin manager for Matter
140 lines • 6.09 kB
TypeScript
/**
* @description This file contains the class Dgram.
* @file dgram.ts
* @author Luca Liguori
* @created 2025-03-22
* @version 1.0.0
* @license Apache-2.0
*
* Copyright 2025, 2026, 2027 Luca Liguori.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import dgram from 'node:dgram';
import EventEmitter from 'node:events';
import { AddressInfo } from 'node:net';
import { AnsiLogger } from 'node-ansi-logger';
/**
* Represents the Dgram events.
*/
interface DgramEvents {
error: [error: Error];
close: [];
connect: [];
message: [msg: Buffer, rinfo: dgram.RemoteInfo];
listening: [address: AddressInfo];
sent: [msg: Buffer, serverAddress: string, serverPort: number];
ready: [address: AddressInfo];
bound: [address: AddressInfo];
}
/**
* This class implements a dgram socket.
*/
export declare class Dgram extends EventEmitter<DgramEvents> {
log: AnsiLogger;
socket: dgram.Socket;
bound: boolean;
socketType: 'udp4' | 'udp6';
interfaceName?: string;
interfaceAddress?: string;
interfaceNetmask?: string;
/**
* Creates an instance of Dgram.
*
* @param {string} name - The name of the socket.
* @param {'udp4' | 'udp6'} socketType - The type of the socket (IPv4 or IPv6).
* @param {boolean | undefined} reuseAddr - Whether to allow address reuse.
* @param {string} [interfaceName] - The name of the network interface to bind to.
* @param {string} [interfaceAddress] - The address of the network interface to bind to.
*/
constructor(name: string, socketType: 'udp4' | 'udp6', reuseAddr?: boolean | undefined, interfaceName?: string, interfaceAddress?: string);
/**
* Sends a message to the specified server.
*
* @param {Buffer} msg - The message buffer to send.
* @param {string} serverAddress - The IPv4 address of the destination server.
* @param {number} serverPort - The port of the destination server.
*/
send(msg: Buffer, serverAddress: string, serverPort: number): void;
onError(error: Error): void;
onClose(): void;
onConnect(): void;
onSent(msg: Buffer, serverAddress: string, serverPort: number): void;
onMessage(msg: Buffer, rinfo: dgram.RemoteInfo): void;
onListening(address: AddressInfo): void;
onReady(address: AddressInfo): void;
/**
* Retrieves the IPv4 address of the specified network interface or the first external IPv4 interface if no interface is specified.
* Throws an error if no suitable interface or address is found.
*
* @param {string} networkInterface - The name of the network interface to retrieve the IPv4 address from. If not specified, the first external IPv4 interface will be used.
* @returns {string | undefined} The IPv4 address of the specified network interface or the first external IPv4 interface.
* @throws Error if no suitable interface or address is found.
*/
getIpv4InterfaceAddress(networkInterface?: string): string | undefined;
/**
* Retrieves the IPv6 address of the specified network interface or the first external IPv6 interface if no interface is specified.
* Throws an error if no suitable interface or address is found.
*
* @param {string} [networkInterface] - The name of the network interface to retrieve the IPv6 address from. If not specified, the first external IPv6 interface will be used.
* @returns {string | undefined} The IPv6 address of the specified network interface or the first external IPv6 interface.
* @throws {Error} If no suitable interface or address is found.
*/
getIpv6InterfaceAddress(networkInterface?: string): string | undefined;
/**
* Retrieves the names of all available network interfaces.
*
* @returns {string[]} An array of network interface names.
*/
getInterfacesNames(): string[];
/**
* Retrieves the scope ID for all interfaces address '::'.
*
* @returns {string} The scope ID of the first found IPv6 address or an empty string.
*/
getIpv6ScopeIdForAllInterfacesAddress(): string;
/**
* Retrieves the interface name from the scope id of an IPv6 address.
*
* @param {number} scopeId - The scope id of the IPv6 address.
* @returns {string | undefined} The interface name or undefined if not found.
*/
getInterfaceNameFromScopeId(scopeId: number): string | undefined;
/**
* Retrieves the netmask of the specified interface address.
*
* @param {string} interfaceAddress - The interface address for which to retrieve the netmask.
* @returns {string | undefined} The netmask of the specified interface address or undefined if not found.
*/
getNetmask(interfaceAddress: string): string | undefined;
/**
* Computes the broadcast address given an IPv4 address and netmask.
*
* @param {string | undefined} [ipAddress] - The IPv4 address e.g. "192.168.1.20"
* @param {string | undefined} [netmask] - The IPv4 netmask e.g. "255.255.255.0"
* @returns {string | undefined} The computed broadcast address, e.g. "192.168.1.255"
*/
getIpv4BroadcastAddress(ipAddress: string | undefined, netmask: string | undefined): string | undefined;
/**
* Returns the broadcast IPv6 address.
*
* @returns {string} The broadcast IPv6 address, e.g. "ff02::1"
*/
getIpv6BroadcastAddress(): string;
/**
* Logs all available network interfaces and their details.
*/
listNetworkInterfaces(): void;
}
export {};
//# sourceMappingURL=dgram.d.ts.map