@matter/protocol 0.16.1 → 0.16.2-alpha.0-20260114-b38c6b796

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/cjs/common/Scanner.d.ts +2 -2
  2. package/dist/cjs/common/Scanner.d.ts.map +1 -1
  3. package/dist/cjs/mdns/MdnsClient.d.ts +2 -3
  4. package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -1
  5. package/dist/cjs/mdns/MdnsClient.js.map +1 -1
  6. package/dist/cjs/mdns/MdnsConsts.d.ts +0 -3
  7. package/dist/cjs/mdns/MdnsConsts.d.ts.map +1 -1
  8. package/dist/cjs/mdns/MdnsConsts.js +0 -6
  9. package/dist/cjs/mdns/MdnsConsts.js.map +1 -1
  10. package/dist/cjs/mdns/MdnsServer.d.ts +1 -2
  11. package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
  12. package/dist/cjs/mdns/MdnsServer.js.map +1 -1
  13. package/dist/cjs/mdns/MdnsService.d.ts.map +1 -1
  14. package/dist/cjs/mdns/MdnsService.js +1 -2
  15. package/dist/cjs/mdns/MdnsService.js.map +1 -1
  16. package/dist/cjs/mdns/index.d.ts +0 -1
  17. package/dist/cjs/mdns/index.d.ts.map +1 -1
  18. package/dist/cjs/mdns/index.js +0 -1
  19. package/dist/cjs/mdns/index.js.map +1 -1
  20. package/dist/cjs/peer/Peer.d.ts +1 -1
  21. package/dist/cjs/peer/Peer.d.ts.map +1 -1
  22. package/dist/cjs/peer/Peer.js +6 -2
  23. package/dist/cjs/peer/Peer.js.map +1 -1
  24. package/dist/cjs/session/case/CaseMessenger.d.ts +2 -1
  25. package/dist/cjs/session/case/CaseMessenger.d.ts.map +1 -1
  26. package/dist/cjs/session/case/CaseMessenger.js +2 -2
  27. package/dist/cjs/session/case/CaseMessenger.js.map +1 -1
  28. package/dist/esm/common/Scanner.d.ts +2 -2
  29. package/dist/esm/common/Scanner.d.ts.map +1 -1
  30. package/dist/esm/common/Scanner.js.map +1 -1
  31. package/dist/esm/mdns/MdnsClient.d.ts +2 -3
  32. package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
  33. package/dist/esm/mdns/MdnsClient.js.map +1 -1
  34. package/dist/esm/mdns/MdnsConsts.d.ts +0 -3
  35. package/dist/esm/mdns/MdnsConsts.d.ts.map +1 -1
  36. package/dist/esm/mdns/MdnsConsts.js +0 -6
  37. package/dist/esm/mdns/MdnsConsts.js.map +1 -1
  38. package/dist/esm/mdns/MdnsServer.d.ts +1 -2
  39. package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
  40. package/dist/esm/mdns/MdnsServer.js.map +1 -1
  41. package/dist/esm/mdns/MdnsService.d.ts.map +1 -1
  42. package/dist/esm/mdns/MdnsService.js +1 -1
  43. package/dist/esm/mdns/MdnsService.js.map +1 -1
  44. package/dist/esm/mdns/index.d.ts +0 -1
  45. package/dist/esm/mdns/index.d.ts.map +1 -1
  46. package/dist/esm/mdns/index.js +0 -1
  47. package/dist/esm/mdns/index.js.map +1 -1
  48. package/dist/esm/peer/Peer.d.ts +1 -1
  49. package/dist/esm/peer/Peer.d.ts.map +1 -1
  50. package/dist/esm/peer/Peer.js +6 -2
  51. package/dist/esm/peer/Peer.js.map +1 -1
  52. package/dist/esm/session/case/CaseMessenger.d.ts +2 -1
  53. package/dist/esm/session/case/CaseMessenger.d.ts.map +1 -1
  54. package/dist/esm/session/case/CaseMessenger.js +2 -2
  55. package/dist/esm/session/case/CaseMessenger.js.map +1 -1
  56. package/package.json +6 -6
  57. package/src/common/Scanner.ts +2 -2
  58. package/src/mdns/MdnsClient.ts +6 -6
  59. package/src/mdns/MdnsConsts.ts +0 -4
  60. package/src/mdns/MdnsServer.ts +1 -1
  61. package/src/mdns/MdnsService.ts +1 -1
  62. package/src/mdns/index.ts +0 -1
  63. package/src/peer/Peer.ts +7 -2
  64. package/src/session/case/CaseMessenger.ts +3 -2
  65. package/dist/cjs/mdns/MdnsSocket.d.ts +0 -33
  66. package/dist/cjs/mdns/MdnsSocket.d.ts.map +0 -1
  67. package/dist/cjs/mdns/MdnsSocket.js +0 -154
  68. package/dist/cjs/mdns/MdnsSocket.js.map +0 -6
  69. package/dist/esm/mdns/MdnsSocket.d.ts +0 -33
  70. package/dist/esm/mdns/MdnsSocket.d.ts.map +0 -1
  71. package/dist/esm/mdns/MdnsSocket.js +0 -145
  72. package/dist/esm/mdns/MdnsSocket.js.map +0 -6
  73. package/src/mdns/MdnsSocket.ts +0 -201
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import { MatterFlowError } from "#general";
8
+ import { ExchangeSendOptions } from "#protocol/MessageExchange.js";
8
9
  import { SecureMessageType, TypeFromSchema } from "#types";
9
10
  import { SecureChannelMessenger } from "../../securechannel/SecureChannelMessenger.js";
10
11
  import {
@@ -38,8 +39,8 @@ export class CaseServerMessenger extends SecureChannelMessenger {
38
39
  }
39
40
 
40
41
  export class CaseClientMessenger extends SecureChannelMessenger {
41
- sendSigma1(sigma1: TypeFromSchema<typeof TlvCaseSigma1>) {
42
- return this.send(sigma1, SecureMessageType.Sigma1, TlvCaseSigma1);
42
+ sendSigma1(sigma1: TypeFromSchema<typeof TlvCaseSigma1>, options?: ExchangeSendOptions) {
43
+ return this.send(sigma1, SecureMessageType.Sigma1, TlvCaseSigma1, options);
43
44
  }
44
45
 
45
46
  async readSigma2() {
@@ -1,33 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { AsyncObservable, DnsMessage, DnsMessageType, Lifetime, Network, UdpMulticastServer } from "#general";
7
- /**
8
- * Manages the UDP socket for {@link MdnsServer} and {@link MdnsClient}.
9
- */
10
- export declare class MdnsSocket {
11
- #private;
12
- static create(network: Network, options?: {
13
- enableIpv4?: boolean;
14
- netInterface?: string;
15
- lifetime?: Lifetime.Owner;
16
- }): Promise<MdnsSocket>;
17
- constructor(socket: UdpMulticastServer);
18
- get network(): Network;
19
- get supportsIpv4(): boolean;
20
- get netInterface(): string | undefined;
21
- get receipt(): AsyncObservable<[message: MdnsSocket.Message], void>;
22
- send(message: Partial<DnsMessage> & {
23
- messageType: DnsMessageType;
24
- }, intf?: string, unicastDest?: string): Promise<void>;
25
- close(): Promise<void>;
26
- }
27
- export declare namespace MdnsSocket {
28
- interface Message extends DnsMessage {
29
- sourceIp: string;
30
- sourceIntf: string;
31
- }
32
- }
33
- //# sourceMappingURL=MdnsSocket.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MdnsSocket.d.ts","sourceRoot":"","sources":["../../../src/mdns/MdnsSocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,eAAe,EAKf,UAAU,EAEV,cAAc,EAEd,QAAQ,EAKR,OAAO,EACP,kBAAkB,EACrB,MAAM,UAAU,CAAC;AAKlB;;GAEG;AACH,qBAAa,UAAU;;WASN,MAAM,CACf,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;KAAE;gBAgB5E,MAAM,EAAE,kBAAkB;IAKtC,IAAI,OAAO,YAEV;IAED,IAAI,YAAY,YAEf;IAED,IAAI,YAAY,uBAEf;IAED,IAAI,OAAO,yDAEV;IAEK,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;QAAE,WAAW,EAAE,cAAc,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IA+ExG,KAAK;CAmCd;AAED,yBAAiB,UAAU,CAAC;IACxB,UAAiB,OAAQ,SAAQ,UAAU;QACvC,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACtB;CACJ"}
@@ -1,154 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var MdnsSocket_exports = {};
20
- __export(MdnsSocket_exports, {
21
- MdnsSocket: () => MdnsSocket
22
- });
23
- module.exports = __toCommonJS(MdnsSocket_exports);
24
- var import_general = require("#general");
25
- var import_MdnsConsts = require("./MdnsConsts.js");
26
- /**
27
- * @license
28
- * Copyright 2022-2026 Matter.js Authors
29
- * SPDX-License-Identifier: Apache-2.0
30
- */
31
- const logger = import_general.Logger.get("MdnsListener");
32
- class MdnsSocket {
33
- #socket;
34
- #handlers;
35
- #isClosed = false;
36
- #receipt = new import_general.BasicObservable(
37
- (error) => logger.error("Unhandled error in MDNS listener", error),
38
- true
39
- );
40
- static async create(network, options) {
41
- const { enableIpv4 = true, netInterface, lifetime } = options ?? {};
42
- const socket = new MdnsSocket(
43
- await import_general.UdpMulticastServer.create({
44
- lifetime,
45
- network,
46
- netInterface,
47
- broadcastAddressIpv4: enableIpv4 ? import_MdnsConsts.MDNS_BROADCAST_IPV4 : void 0,
48
- broadcastAddressIpv6: import_MdnsConsts.MDNS_BROADCAST_IPV6,
49
- listeningPort: import_MdnsConsts.MDNS_BROADCAST_PORT
50
- })
51
- );
52
- return socket;
53
- }
54
- constructor(socket) {
55
- this.#socket = socket;
56
- socket.onMessage(this.#handleMessage.bind(this));
57
- }
58
- get network() {
59
- return this.#socket.network;
60
- }
61
- get supportsIpv4() {
62
- return this.#socket.supportsIpv4;
63
- }
64
- get netInterface() {
65
- return this.#socket.netInterface;
66
- }
67
- get receipt() {
68
- return this.#receipt;
69
- }
70
- async send(message, intf, unicastDest) {
71
- const { messageType } = message;
72
- const truncatedMessageType = import_general.DnsMessageType.isQuery(messageType) ? messageType | import_general.DnsMessageTypeFlag.TC : messageType;
73
- const chunk = {
74
- transactionId: 0,
75
- queries: [],
76
- authorities: [],
77
- ...message,
78
- answers: [],
79
- additionalRecords: []
80
- };
81
- let encodedChunkWithoutAnswers = import_general.DnsCodec.encode(chunk);
82
- let chunkSize = encodedChunkWithoutAnswers.byteLength;
83
- for (const answer of message.answers ?? []) {
84
- const answerEncoded = import_general.DnsCodec.encodeRecord(answer);
85
- if (chunkSize + answerEncoded.byteLength > import_general.MAX_MDNS_MESSAGE_SIZE) {
86
- if (chunk.answers.length === 0) {
87
- logger.warn(
88
- `MDNS message with ${import_general.Diagnostic.json(
89
- chunk.queries
90
- )} is too big to fit into a single MDNS message. Send anyway, but please report!`
91
- );
92
- }
93
- await this.#send(
94
- {
95
- ...chunk,
96
- messageType: truncatedMessageType
97
- },
98
- intf,
99
- unicastDest
100
- );
101
- if (chunk.queries.length) {
102
- chunk.queries.length = 0;
103
- encodedChunkWithoutAnswers = import_general.DnsCodec.encode(chunk);
104
- }
105
- chunk.answers.length = 0;
106
- chunkSize = encodedChunkWithoutAnswers.byteLength + answerEncoded.byteLength;
107
- } else {
108
- chunkSize += answerEncoded.byteLength;
109
- }
110
- chunk.answers.push(answerEncoded);
111
- }
112
- const additionalRecords = message.additionalRecords ?? [];
113
- for (const additionalRecord of additionalRecords) {
114
- const additionalRecordEncoded = import_general.DnsCodec.encodeRecord(additionalRecord);
115
- chunkSize += additionalRecordEncoded.byteLength;
116
- if (chunkSize > import_general.MAX_MDNS_MESSAGE_SIZE) {
117
- break;
118
- }
119
- chunk.additionalRecords.push(additionalRecordEncoded);
120
- }
121
- await this.#send(chunk, intf, unicastDest);
122
- }
123
- async #send(message, intf, unicastDest) {
124
- await this.#socket.send(import_general.DnsCodec.encode(message), intf, unicastDest);
125
- }
126
- async close() {
127
- this.#isClosed = true;
128
- await this.#socket.close();
129
- if (this.#handlers) {
130
- await import_general.MatterAggregateError.allSettled(this.#handlers);
131
- }
132
- }
133
- #handleMessage(bytes, sourceIp, sourceIntf) {
134
- if (this.#isClosed) {
135
- return;
136
- }
137
- const parsed = import_general.DnsCodec.decode(bytes);
138
- if (parsed === void 0) {
139
- return;
140
- }
141
- let promise = this.#receipt.emit({
142
- ...parsed,
143
- sourceIp,
144
- sourceIntf
145
- });
146
- if (import_general.MaybePromise.is(promise)) {
147
- if (this.#handlers === void 0) {
148
- this.#handlers = /* @__PURE__ */ new Set();
149
- }
150
- promise = Promise.resolve(promise).finally(() => this.#handlers?.delete(promise));
151
- }
152
- }
153
- }
154
- //# sourceMappingURL=MdnsSocket.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/mdns/MdnsSocket.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,33 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { AsyncObservable, DnsMessage, DnsMessageType, Lifetime, Network, UdpMulticastServer } from "#general";
7
- /**
8
- * Manages the UDP socket for {@link MdnsServer} and {@link MdnsClient}.
9
- */
10
- export declare class MdnsSocket {
11
- #private;
12
- static create(network: Network, options?: {
13
- enableIpv4?: boolean;
14
- netInterface?: string;
15
- lifetime?: Lifetime.Owner;
16
- }): Promise<MdnsSocket>;
17
- constructor(socket: UdpMulticastServer);
18
- get network(): Network;
19
- get supportsIpv4(): boolean;
20
- get netInterface(): string | undefined;
21
- get receipt(): AsyncObservable<[message: MdnsSocket.Message], void>;
22
- send(message: Partial<DnsMessage> & {
23
- messageType: DnsMessageType;
24
- }, intf?: string, unicastDest?: string): Promise<void>;
25
- close(): Promise<void>;
26
- }
27
- export declare namespace MdnsSocket {
28
- interface Message extends DnsMessage {
29
- sourceIp: string;
30
- sourceIntf: string;
31
- }
32
- }
33
- //# sourceMappingURL=MdnsSocket.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MdnsSocket.d.ts","sourceRoot":"","sources":["../../../src/mdns/MdnsSocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,eAAe,EAKf,UAAU,EAEV,cAAc,EAEd,QAAQ,EAKR,OAAO,EACP,kBAAkB,EACrB,MAAM,UAAU,CAAC;AAKlB;;GAEG;AACH,qBAAa,UAAU;;WASN,MAAM,CACf,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;KAAE;gBAgB5E,MAAM,EAAE,kBAAkB;IAKtC,IAAI,OAAO,YAEV;IAED,IAAI,YAAY,YAEf;IAED,IAAI,YAAY,uBAEf;IAED,IAAI,OAAO,yDAEV;IAEK,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;QAAE,WAAW,EAAE,cAAc,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IA+ExG,KAAK;CAmCd;AAED,yBAAiB,UAAU,CAAC;IACxB,UAAiB,OAAQ,SAAQ,UAAU;QACvC,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACtB;CACJ"}
@@ -1,145 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import {
7
- BasicObservable,
8
- Diagnostic,
9
- DnsCodec,
10
- DnsMessageType,
11
- DnsMessageTypeFlag,
12
- Logger,
13
- MatterAggregateError,
14
- MAX_MDNS_MESSAGE_SIZE,
15
- MaybePromise,
16
- UdpMulticastServer
17
- } from "#general";
18
- import { MDNS_BROADCAST_IPV4, MDNS_BROADCAST_IPV6, MDNS_BROADCAST_PORT } from "./MdnsConsts.js";
19
- const logger = Logger.get("MdnsListener");
20
- class MdnsSocket {
21
- #socket;
22
- #handlers;
23
- #isClosed = false;
24
- #receipt = new BasicObservable(
25
- (error) => logger.error("Unhandled error in MDNS listener", error),
26
- true
27
- );
28
- static async create(network, options) {
29
- const { enableIpv4 = true, netInterface, lifetime } = options ?? {};
30
- const socket = new MdnsSocket(
31
- await UdpMulticastServer.create({
32
- lifetime,
33
- network,
34
- netInterface,
35
- broadcastAddressIpv4: enableIpv4 ? MDNS_BROADCAST_IPV4 : void 0,
36
- broadcastAddressIpv6: MDNS_BROADCAST_IPV6,
37
- listeningPort: MDNS_BROADCAST_PORT
38
- })
39
- );
40
- return socket;
41
- }
42
- constructor(socket) {
43
- this.#socket = socket;
44
- socket.onMessage(this.#handleMessage.bind(this));
45
- }
46
- get network() {
47
- return this.#socket.network;
48
- }
49
- get supportsIpv4() {
50
- return this.#socket.supportsIpv4;
51
- }
52
- get netInterface() {
53
- return this.#socket.netInterface;
54
- }
55
- get receipt() {
56
- return this.#receipt;
57
- }
58
- async send(message, intf, unicastDest) {
59
- const { messageType } = message;
60
- const truncatedMessageType = DnsMessageType.isQuery(messageType) ? messageType | DnsMessageTypeFlag.TC : messageType;
61
- const chunk = {
62
- transactionId: 0,
63
- queries: [],
64
- authorities: [],
65
- ...message,
66
- answers: [],
67
- additionalRecords: []
68
- };
69
- let encodedChunkWithoutAnswers = DnsCodec.encode(chunk);
70
- let chunkSize = encodedChunkWithoutAnswers.byteLength;
71
- for (const answer of message.answers ?? []) {
72
- const answerEncoded = DnsCodec.encodeRecord(answer);
73
- if (chunkSize + answerEncoded.byteLength > MAX_MDNS_MESSAGE_SIZE) {
74
- if (chunk.answers.length === 0) {
75
- logger.warn(
76
- `MDNS message with ${Diagnostic.json(
77
- chunk.queries
78
- )} is too big to fit into a single MDNS message. Send anyway, but please report!`
79
- );
80
- }
81
- await this.#send(
82
- {
83
- ...chunk,
84
- messageType: truncatedMessageType
85
- },
86
- intf,
87
- unicastDest
88
- );
89
- if (chunk.queries.length) {
90
- chunk.queries.length = 0;
91
- encodedChunkWithoutAnswers = DnsCodec.encode(chunk);
92
- }
93
- chunk.answers.length = 0;
94
- chunkSize = encodedChunkWithoutAnswers.byteLength + answerEncoded.byteLength;
95
- } else {
96
- chunkSize += answerEncoded.byteLength;
97
- }
98
- chunk.answers.push(answerEncoded);
99
- }
100
- const additionalRecords = message.additionalRecords ?? [];
101
- for (const additionalRecord of additionalRecords) {
102
- const additionalRecordEncoded = DnsCodec.encodeRecord(additionalRecord);
103
- chunkSize += additionalRecordEncoded.byteLength;
104
- if (chunkSize > MAX_MDNS_MESSAGE_SIZE) {
105
- break;
106
- }
107
- chunk.additionalRecords.push(additionalRecordEncoded);
108
- }
109
- await this.#send(chunk, intf, unicastDest);
110
- }
111
- async #send(message, intf, unicastDest) {
112
- await this.#socket.send(DnsCodec.encode(message), intf, unicastDest);
113
- }
114
- async close() {
115
- this.#isClosed = true;
116
- await this.#socket.close();
117
- if (this.#handlers) {
118
- await MatterAggregateError.allSettled(this.#handlers);
119
- }
120
- }
121
- #handleMessage(bytes, sourceIp, sourceIntf) {
122
- if (this.#isClosed) {
123
- return;
124
- }
125
- const parsed = DnsCodec.decode(bytes);
126
- if (parsed === void 0) {
127
- return;
128
- }
129
- let promise = this.#receipt.emit({
130
- ...parsed,
131
- sourceIp,
132
- sourceIntf
133
- });
134
- if (MaybePromise.is(promise)) {
135
- if (this.#handlers === void 0) {
136
- this.#handlers = /* @__PURE__ */ new Set();
137
- }
138
- promise = Promise.resolve(promise).finally(() => this.#handlers?.delete(promise));
139
- }
140
- }
141
- }
142
- export {
143
- MdnsSocket
144
- };
145
- //# sourceMappingURL=MdnsSocket.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/mdns/MdnsSocket.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,201 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2022-2026 Matter.js Authors
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- import {
8
- AsyncObservable,
9
- BasicObservable,
10
- Bytes,
11
- Diagnostic,
12
- DnsCodec,
13
- DnsMessage,
14
- DnsMessagePartiallyPreEncoded,
15
- DnsMessageType,
16
- DnsMessageTypeFlag,
17
- Lifetime,
18
- Logger,
19
- MatterAggregateError,
20
- MAX_MDNS_MESSAGE_SIZE,
21
- MaybePromise,
22
- Network,
23
- UdpMulticastServer,
24
- } from "#general";
25
- import { MDNS_BROADCAST_IPV4, MDNS_BROADCAST_IPV6, MDNS_BROADCAST_PORT } from "./MdnsConsts.js";
26
-
27
- const logger = Logger.get("MdnsListener");
28
-
29
- /**
30
- * Manages the UDP socket for {@link MdnsServer} and {@link MdnsClient}.
31
- */
32
- export class MdnsSocket {
33
- #socket: UdpMulticastServer;
34
- #handlers?: Set<PromiseLike<void>>;
35
- #isClosed = false;
36
- #receipt: AsyncObservable<[message: MdnsSocket.Message]> = new BasicObservable(
37
- error => logger.error("Unhandled error in MDNS listener", error),
38
- true,
39
- );
40
-
41
- static async create(
42
- network: Network,
43
- options?: { enableIpv4?: boolean; netInterface?: string; lifetime?: Lifetime.Owner },
44
- ) {
45
- const { enableIpv4 = true, netInterface, lifetime } = options ?? {};
46
- const socket = new MdnsSocket(
47
- await UdpMulticastServer.create({
48
- lifetime,
49
- network,
50
- netInterface,
51
- broadcastAddressIpv4: enableIpv4 ? MDNS_BROADCAST_IPV4 : undefined,
52
- broadcastAddressIpv6: MDNS_BROADCAST_IPV6,
53
- listeningPort: MDNS_BROADCAST_PORT,
54
- }),
55
- );
56
- return socket;
57
- }
58
-
59
- constructor(socket: UdpMulticastServer) {
60
- this.#socket = socket;
61
- socket.onMessage(this.#handleMessage.bind(this));
62
- }
63
-
64
- get network() {
65
- return this.#socket.network;
66
- }
67
-
68
- get supportsIpv4() {
69
- return this.#socket.supportsIpv4;
70
- }
71
-
72
- get netInterface() {
73
- return this.#socket.netInterface;
74
- }
75
-
76
- get receipt() {
77
- return this.#receipt;
78
- }
79
-
80
- async send(message: Partial<DnsMessage> & { messageType: DnsMessageType }, intf?: string, unicastDest?: string) {
81
- const { messageType } = message;
82
- // When we send Queries that are too long they need to have the Truncated flag set
83
- const truncatedMessageType = DnsMessageType.isQuery(messageType)
84
- ? messageType | DnsMessageTypeFlag.TC
85
- : messageType;
86
-
87
- const chunk: DnsMessagePartiallyPreEncoded = {
88
- transactionId: 0,
89
- queries: [],
90
- authorities: [],
91
-
92
- ...message,
93
-
94
- answers: [],
95
- additionalRecords: [],
96
- };
97
-
98
- // Note - for size calculations we assume queries are relatively small. We only split answers across messages
99
- let encodedChunkWithoutAnswers = DnsCodec.encode(chunk);
100
- let chunkSize = encodedChunkWithoutAnswers.byteLength;
101
-
102
- // Add answers, splitting message as necessary
103
- for (const answer of message.answers ?? []) {
104
- const answerEncoded = DnsCodec.encodeRecord(answer);
105
-
106
- if (chunkSize + answerEncoded.byteLength > MAX_MDNS_MESSAGE_SIZE) {
107
- if (chunk.answers.length === 0) {
108
- // The first answer is already too big, log at least a warning
109
- logger.warn(
110
- `MDNS message with ${Diagnostic.json(
111
- chunk.queries,
112
- )} is too big to fit into a single MDNS message. Send anyway, but please report!`,
113
- );
114
- }
115
-
116
- // New answer does not fit anymore, send out the message
117
- // When sending a query, we set the Truncated flag to indicate more answers are available
118
- await this.#send(
119
- {
120
- ...chunk,
121
- messageType: truncatedMessageType,
122
- },
123
- intf,
124
- unicastDest,
125
- );
126
-
127
- // Reset the message, length counter and included answers to count for next message
128
- if (chunk.queries.length) {
129
- chunk.queries.length = 0;
130
- encodedChunkWithoutAnswers = DnsCodec.encode(chunk);
131
- }
132
- chunk.answers.length = 0;
133
- chunkSize = encodedChunkWithoutAnswers.byteLength + answerEncoded.byteLength;
134
- } else {
135
- chunkSize += answerEncoded.byteLength;
136
- }
137
-
138
- chunk.answers.push(answerEncoded);
139
- }
140
-
141
- // Add "additional records"... We include these but only if they fit
142
- const additionalRecords = message.additionalRecords ?? [];
143
- for (const additionalRecord of additionalRecords) {
144
- const additionalRecordEncoded = DnsCodec.encodeRecord(additionalRecord);
145
- chunkSize += additionalRecordEncoded.byteLength;
146
- if (chunkSize > MAX_MDNS_MESSAGE_SIZE) {
147
- break;
148
- }
149
- chunk.additionalRecords.push(additionalRecordEncoded);
150
- }
151
-
152
- await this.#send(chunk, intf, unicastDest);
153
- }
154
-
155
- async #send(message: DnsMessagePartiallyPreEncoded, intf?: string, unicastDest?: string) {
156
- await this.#socket.send(DnsCodec.encode(message), intf, unicastDest);
157
- }
158
-
159
- async close() {
160
- this.#isClosed = true;
161
- await this.#socket.close();
162
- if (this.#handlers) {
163
- await MatterAggregateError.allSettled(this.#handlers);
164
- }
165
- }
166
-
167
- #handleMessage(bytes: Bytes, sourceIp: string, sourceIntf: string) {
168
- // Ignore if closed
169
- if (this.#isClosed) {
170
- return;
171
- }
172
-
173
- // Parse
174
- const parsed = DnsCodec.decode(bytes);
175
-
176
- // Skip unparseable
177
- if (parsed === undefined) {
178
- return;
179
- }
180
-
181
- let promise = this.#receipt.emit({
182
- ...parsed,
183
- sourceIp,
184
- sourceIntf,
185
- }) as MaybePromise;
186
-
187
- if (MaybePromise.is(promise)) {
188
- if (this.#handlers === undefined) {
189
- this.#handlers = new Set();
190
- }
191
- promise = Promise.resolve(promise).finally(() => this.#handlers?.delete(promise as PromiseLike<void>));
192
- }
193
- }
194
- }
195
-
196
- export namespace MdnsSocket {
197
- export interface Message extends DnsMessage {
198
- sourceIp: string;
199
- sourceIntf: string;
200
- }
201
- }