@matter/general 0.16.5 → 0.16.6-alpha.0-20260120-1040b4c1e
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.
- package/dist/cjs/codec/DnsCodec.d.ts +2 -1
- package/dist/cjs/codec/DnsCodec.d.ts.map +1 -1
- package/dist/cjs/codec/DnsCodec.js +28 -3
- package/dist/cjs/codec/DnsCodec.js.map +1 -1
- package/dist/cjs/net/dns-sd/MdnsSocket.d.ts.map +1 -1
- package/dist/cjs/net/dns-sd/MdnsSocket.js +43 -9
- package/dist/cjs/net/dns-sd/MdnsSocket.js.map +1 -1
- package/dist/esm/codec/DnsCodec.d.ts +2 -1
- package/dist/esm/codec/DnsCodec.d.ts.map +1 -1
- package/dist/esm/codec/DnsCodec.js +28 -3
- package/dist/esm/codec/DnsCodec.js.map +1 -1
- package/dist/esm/net/dns-sd/MdnsSocket.d.ts.map +1 -1
- package/dist/esm/net/dns-sd/MdnsSocket.js +43 -9
- package/dist/esm/net/dns-sd/MdnsSocket.js.map +1 -1
- package/package.json +2 -2
- package/src/codec/DnsCodec.ts +35 -4
- package/src/net/dns-sd/MdnsSocket.ts +68 -13
|
@@ -95,7 +95,7 @@ export declare enum DnsRecordClass {
|
|
|
95
95
|
export declare class DnsCodec {
|
|
96
96
|
static decode(message: Bytes): DnsMessage | undefined;
|
|
97
97
|
static decodeQuery(reader: DataReader<Endian.Big>, message: Bytes): DnsQuery;
|
|
98
|
-
static decodeRecord(reader: DataReader<Endian.Big>, message: Bytes): DnsRecord<any
|
|
98
|
+
static decodeRecord(reader: DataReader<Endian.Big>, message: Bytes): DnsRecord<any> | undefined;
|
|
99
99
|
static decodeQName(reader: DataReader<Endian.Big>, message: Bytes, visited?: Set<number>): string;
|
|
100
100
|
private static decodeRecordValue;
|
|
101
101
|
static decodeSrvRecord(valueBytes: Bytes, message: Bytes): SrvRecordValue;
|
|
@@ -103,6 +103,7 @@ export declare class DnsCodec {
|
|
|
103
103
|
static decodeAaaaRecord(valueBytes: Bytes): string;
|
|
104
104
|
static decodeARecord(valueBytes: Bytes): string;
|
|
105
105
|
static encode({ messageType, transactionId, queries, answers, authorities, additionalRecords, }: Partial<DnsMessagePartiallyPreEncoded>): Bytes;
|
|
106
|
+
static encodeQuery(query: DnsQuery): Bytes;
|
|
106
107
|
static encodeRecord(record: DnsRecord<any>): Bytes;
|
|
107
108
|
private static encodeRecordValue;
|
|
108
109
|
static encodeARecord(ip: string): Uint8Array<ArrayBuffer>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DnsCodec.d.ts","sourceRoot":"","sources":["../../../src/codec/DnsCodec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"DnsCodec.d.ts","sourceRoot":"","sources":["../../../src/codec/DnsCodec.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,7 @@ module.exports = __toCommonJS(DnsCodec_exports);
|
|
|
35
35
|
var import_Diagnostic = require("#log/Diagnostic.js");
|
|
36
36
|
var import_Logger = require("#log/Logger.js");
|
|
37
37
|
var import_TimeUnit = require("#time/TimeUnit.js");
|
|
38
|
+
var import_util = require("#util/index.js");
|
|
38
39
|
var import_MatterError = require("../MatterError.js");
|
|
39
40
|
var import_Bytes = require("../util/Bytes.js");
|
|
40
41
|
var import_DataReader = require("../util/DataReader.js");
|
|
@@ -146,15 +147,24 @@ class DnsCodec {
|
|
|
146
147
|
}
|
|
147
148
|
const answers = new Array();
|
|
148
149
|
for (let i = 0; i < answersCount; i++) {
|
|
149
|
-
|
|
150
|
+
const record = this.decodeRecord(reader, message);
|
|
151
|
+
if (record !== void 0) {
|
|
152
|
+
answers.push(record);
|
|
153
|
+
}
|
|
150
154
|
}
|
|
151
155
|
const authorities = new Array();
|
|
152
156
|
for (let i = 0; i < authoritiesCount; i++) {
|
|
153
|
-
|
|
157
|
+
const record = this.decodeRecord(reader, message);
|
|
158
|
+
if (record !== void 0) {
|
|
159
|
+
authorities.push(record);
|
|
160
|
+
}
|
|
154
161
|
}
|
|
155
162
|
const additionalRecords = new Array();
|
|
156
163
|
for (let i = 0; i < additionalRecordsCount; i++) {
|
|
157
|
-
|
|
164
|
+
const record = this.decodeRecord(reader, message);
|
|
165
|
+
if (record !== void 0) {
|
|
166
|
+
additionalRecords.push(record);
|
|
167
|
+
}
|
|
158
168
|
}
|
|
159
169
|
return { transactionId, messageType, queries, answers, authorities, additionalRecords };
|
|
160
170
|
} catch (error) {
|
|
@@ -179,6 +189,9 @@ class DnsCodec {
|
|
|
179
189
|
const valueLength = reader.readUInt16();
|
|
180
190
|
const valueBytes = reader.readByteArray(valueLength);
|
|
181
191
|
const value = this.decodeRecordValue(valueBytes, recordType, message);
|
|
192
|
+
if (recordType === void 0 || value === void 0) {
|
|
193
|
+
return void 0;
|
|
194
|
+
}
|
|
182
195
|
return { name, recordType, recordClass, ttl, value, flushCache };
|
|
183
196
|
}
|
|
184
197
|
static decodeQName(reader, message, visited = /* @__PURE__ */ new Set()) {
|
|
@@ -285,7 +298,19 @@ class DnsCodec {
|
|
|
285
298
|
});
|
|
286
299
|
return writer.toByteArray();
|
|
287
300
|
}
|
|
301
|
+
static encodeQuery(query) {
|
|
302
|
+
const { name, recordType, recordClass, uniCastResponse = false } = query;
|
|
303
|
+
const writer = new import_DataWriter.DataWriter();
|
|
304
|
+
writer.writeByteArray(this.encodeQName(name));
|
|
305
|
+
writer.writeUInt16(recordType);
|
|
306
|
+
writer.writeUInt16(recordClass | (uniCastResponse ? 32768 : 0));
|
|
307
|
+
return writer.toByteArray();
|
|
308
|
+
}
|
|
288
309
|
static encodeRecord(record) {
|
|
310
|
+
if (!(0, import_util.isObject)(record) || Object.keys(record).length === 0) {
|
|
311
|
+
logger.debug("Skipping record encoding: record is empty or not an object");
|
|
312
|
+
return new Uint8Array(0);
|
|
313
|
+
}
|
|
289
314
|
const { name, recordType, recordClass, ttl, value, flushCache = false } = record;
|
|
290
315
|
if (recordType === void 0 || value === void 0) {
|
|
291
316
|
logger.warn("Skipping record encoding due to missing type or value.", import_Diagnostic.Diagnostic.dict(record));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/codec/DnsCodec.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,wBAA2B;AAC3B,oBAAuB;AAEvB,sBAAwB;AACxB,yBAAwE;AACxE,mBAA8B;AAC9B,wBAA2B;AAC3B,wBAA2B;AAC3B,gBAA+F;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["DnsMessageTypeFlag", "DnsMessageType", "DnsRecordType", "DnsRecordClass"]
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MdnsSocket.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/MdnsSocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEH,UAAU,EAEV,cAAc,EAGjB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MdnsSocket.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/MdnsSocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEH,UAAU,EAEV,cAAc,EAGjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAKvE;;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;IAuIxG,KAAK;CAmCd;AAED,yBAAiB,UAAU,CAAC;IACxB,UAAiB,OAAQ,SAAQ,UAAU;QACvC,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACtB;IAEM,MAAM,cAAc,gBAAgB,CAAC;IACrC,MAAM,cAAc,aAAa,CAAC;IAClC,MAAM,cAAc,OAAO,CAAC;CACtC"}
|
|
@@ -22,7 +22,6 @@ __export(MdnsSocket_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(MdnsSocket_exports);
|
|
24
24
|
var import_DnsCodec = require("#codec/DnsCodec.js");
|
|
25
|
-
var import_Diagnostic = require("#log/Diagnostic.js");
|
|
26
25
|
var import_Logger = require("#log/Logger.js");
|
|
27
26
|
var import_MatterError = require("#MatterError.js");
|
|
28
27
|
var import_UdpMulticastServer = require("#net/udp/UdpMulticastServer.js");
|
|
@@ -73,7 +72,22 @@ class MdnsSocket {
|
|
|
73
72
|
return this.#receipt;
|
|
74
73
|
}
|
|
75
74
|
async send(message, intf, unicastDest) {
|
|
76
|
-
const { messageType } = message;
|
|
75
|
+
const { messageType, queries = [] } = message;
|
|
76
|
+
const queryChunks = this.#splitQueries(queries);
|
|
77
|
+
if (queryChunks.length > 1) {
|
|
78
|
+
for (const queryChunk of queryChunks) {
|
|
79
|
+
const chunkMessage = {
|
|
80
|
+
transactionId: 0,
|
|
81
|
+
messageType,
|
|
82
|
+
queries: queryChunk,
|
|
83
|
+
answers: [],
|
|
84
|
+
authorities: message.authorities ?? [],
|
|
85
|
+
additionalRecords: []
|
|
86
|
+
};
|
|
87
|
+
await this.#send(chunkMessage, intf, unicastDest);
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
77
91
|
const truncatedMessageType = import_DnsCodec.DnsMessageType.isQuery(messageType) ? messageType | import_DnsCodec.DnsMessageTypeFlag.TC : messageType;
|
|
78
92
|
const chunk = {
|
|
79
93
|
transactionId: 0,
|
|
@@ -88,13 +102,6 @@ class MdnsSocket {
|
|
|
88
102
|
for (const answer of message.answers ?? []) {
|
|
89
103
|
const answerEncoded = import_DnsCodec.DnsCodec.encodeRecord(answer);
|
|
90
104
|
if (chunkSize + answerEncoded.byteLength > import_DnsCodec.MAX_MDNS_MESSAGE_SIZE) {
|
|
91
|
-
if (chunk.answers.length === 0) {
|
|
92
|
-
logger.warn(
|
|
93
|
-
`MDNS message with ${import_Diagnostic.Diagnostic.json(
|
|
94
|
-
chunk.queries
|
|
95
|
-
)} is too big to fit into a single MDNS message. Send anyway, but please report!`
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
105
|
await this.#send(
|
|
99
106
|
{
|
|
100
107
|
...chunk,
|
|
@@ -125,6 +132,33 @@ class MdnsSocket {
|
|
|
125
132
|
}
|
|
126
133
|
await this.#send(chunk, intf, unicastDest);
|
|
127
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Split queries into chunks that fit within MAX_MDNS_MESSAGE_SIZE.
|
|
137
|
+
* Returns an array of query arrays - if all queries fit in one message, returns [[...queries]].
|
|
138
|
+
*/
|
|
139
|
+
#splitQueries(queries) {
|
|
140
|
+
if (queries.length === 0) {
|
|
141
|
+
return [[]];
|
|
142
|
+
}
|
|
143
|
+
const DNS_HEADER_SIZE = 12;
|
|
144
|
+
const chunks = [];
|
|
145
|
+
let currentChunk = [];
|
|
146
|
+
let currentChunkSize = DNS_HEADER_SIZE;
|
|
147
|
+
for (const query of queries) {
|
|
148
|
+
const querySize = import_DnsCodec.DnsCodec.encodeQuery(query).byteLength;
|
|
149
|
+
if (currentChunkSize + querySize > import_DnsCodec.MAX_MDNS_MESSAGE_SIZE && currentChunk.length > 0) {
|
|
150
|
+
chunks.push(currentChunk);
|
|
151
|
+
currentChunk = [];
|
|
152
|
+
currentChunkSize = DNS_HEADER_SIZE;
|
|
153
|
+
}
|
|
154
|
+
currentChunk.push(query);
|
|
155
|
+
currentChunkSize += querySize;
|
|
156
|
+
}
|
|
157
|
+
if (currentChunk.length > 0) {
|
|
158
|
+
chunks.push(currentChunk);
|
|
159
|
+
}
|
|
160
|
+
return chunks;
|
|
161
|
+
}
|
|
128
162
|
async #send(message, intf, unicastDest) {
|
|
129
163
|
await this.#socket.send(import_DnsCodec.DnsCodec.encode(message), intf, unicastDest);
|
|
130
164
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/net/dns-sd/MdnsSocket.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,sBAOO;AACP,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["MdnsSocket"]
|
|
6
6
|
}
|
|
@@ -95,7 +95,7 @@ export declare enum DnsRecordClass {
|
|
|
95
95
|
export declare class DnsCodec {
|
|
96
96
|
static decode(message: Bytes): DnsMessage | undefined;
|
|
97
97
|
static decodeQuery(reader: DataReader<Endian.Big>, message: Bytes): DnsQuery;
|
|
98
|
-
static decodeRecord(reader: DataReader<Endian.Big>, message: Bytes): DnsRecord<any
|
|
98
|
+
static decodeRecord(reader: DataReader<Endian.Big>, message: Bytes): DnsRecord<any> | undefined;
|
|
99
99
|
static decodeQName(reader: DataReader<Endian.Big>, message: Bytes, visited?: Set<number>): string;
|
|
100
100
|
private static decodeRecordValue;
|
|
101
101
|
static decodeSrvRecord(valueBytes: Bytes, message: Bytes): SrvRecordValue;
|
|
@@ -103,6 +103,7 @@ export declare class DnsCodec {
|
|
|
103
103
|
static decodeAaaaRecord(valueBytes: Bytes): string;
|
|
104
104
|
static decodeARecord(valueBytes: Bytes): string;
|
|
105
105
|
static encode({ messageType, transactionId, queries, answers, authorities, additionalRecords, }: Partial<DnsMessagePartiallyPreEncoded>): Bytes;
|
|
106
|
+
static encodeQuery(query: DnsQuery): Bytes;
|
|
106
107
|
static encodeRecord(record: DnsRecord<any>): Bytes;
|
|
107
108
|
private static encodeRecordValue;
|
|
108
109
|
static encodeARecord(ip: string): Uint8Array<ArrayBuffer>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DnsCodec.d.ts","sourceRoot":"","sources":["../../../src/codec/DnsCodec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"DnsCodec.d.ts","sourceRoot":"","sources":["../../../src/codec/DnsCodec.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { Diagnostic } from "#log/Diagnostic.js";
|
|
7
7
|
import { Logger } from "#log/Logger.js";
|
|
8
8
|
import { Seconds } from "#time/TimeUnit.js";
|
|
9
|
+
import { isObject } from "#util/index.js";
|
|
9
10
|
import { InternalError, NotImplementedError, UnexpectedDataError } from "../MatterError.js";
|
|
10
11
|
import { Bytes } from "../util/Bytes.js";
|
|
11
12
|
import { DataReader } from "../util/DataReader.js";
|
|
@@ -112,15 +113,24 @@ class DnsCodec {
|
|
|
112
113
|
}
|
|
113
114
|
const answers = new Array();
|
|
114
115
|
for (let i = 0; i < answersCount; i++) {
|
|
115
|
-
|
|
116
|
+
const record = this.decodeRecord(reader, message);
|
|
117
|
+
if (record !== void 0) {
|
|
118
|
+
answers.push(record);
|
|
119
|
+
}
|
|
116
120
|
}
|
|
117
121
|
const authorities = new Array();
|
|
118
122
|
for (let i = 0; i < authoritiesCount; i++) {
|
|
119
|
-
|
|
123
|
+
const record = this.decodeRecord(reader, message);
|
|
124
|
+
if (record !== void 0) {
|
|
125
|
+
authorities.push(record);
|
|
126
|
+
}
|
|
120
127
|
}
|
|
121
128
|
const additionalRecords = new Array();
|
|
122
129
|
for (let i = 0; i < additionalRecordsCount; i++) {
|
|
123
|
-
|
|
130
|
+
const record = this.decodeRecord(reader, message);
|
|
131
|
+
if (record !== void 0) {
|
|
132
|
+
additionalRecords.push(record);
|
|
133
|
+
}
|
|
124
134
|
}
|
|
125
135
|
return { transactionId, messageType, queries, answers, authorities, additionalRecords };
|
|
126
136
|
} catch (error) {
|
|
@@ -145,6 +155,9 @@ class DnsCodec {
|
|
|
145
155
|
const valueLength = reader.readUInt16();
|
|
146
156
|
const valueBytes = reader.readByteArray(valueLength);
|
|
147
157
|
const value = this.decodeRecordValue(valueBytes, recordType, message);
|
|
158
|
+
if (recordType === void 0 || value === void 0) {
|
|
159
|
+
return void 0;
|
|
160
|
+
}
|
|
148
161
|
return { name, recordType, recordClass, ttl, value, flushCache };
|
|
149
162
|
}
|
|
150
163
|
static decodeQName(reader, message, visited = /* @__PURE__ */ new Set()) {
|
|
@@ -251,7 +264,19 @@ class DnsCodec {
|
|
|
251
264
|
});
|
|
252
265
|
return writer.toByteArray();
|
|
253
266
|
}
|
|
267
|
+
static encodeQuery(query) {
|
|
268
|
+
const { name, recordType, recordClass, uniCastResponse = false } = query;
|
|
269
|
+
const writer = new DataWriter();
|
|
270
|
+
writer.writeByteArray(this.encodeQName(name));
|
|
271
|
+
writer.writeUInt16(recordType);
|
|
272
|
+
writer.writeUInt16(recordClass | (uniCastResponse ? 32768 : 0));
|
|
273
|
+
return writer.toByteArray();
|
|
274
|
+
}
|
|
254
275
|
static encodeRecord(record) {
|
|
276
|
+
if (!isObject(record) || Object.keys(record).length === 0) {
|
|
277
|
+
logger.debug("Skipping record encoding: record is empty or not an object");
|
|
278
|
+
return new Uint8Array(0);
|
|
279
|
+
}
|
|
255
280
|
const { name, recordType, recordClass, ttl, value, flushCache = false } = record;
|
|
256
281
|
if (recordType === void 0 || value === void 0) {
|
|
257
282
|
logger.warn("Skipping record encoding due to missing type or value.", Diagnostic.dict(record));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/codec/DnsCodec.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["DnsMessageTypeFlag", "DnsMessageType", "DnsRecordType", "DnsRecordClass"]
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MdnsSocket.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/MdnsSocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEH,UAAU,EAEV,cAAc,EAGjB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MdnsSocket.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/MdnsSocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEH,UAAU,EAEV,cAAc,EAGjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAKvE;;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;IAuIxG,KAAK;CAmCd;AAED,yBAAiB,UAAU,CAAC;IACxB,UAAiB,OAAQ,SAAQ,UAAU;QACvC,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACtB;IAEM,MAAM,cAAc,gBAAgB,CAAC;IACrC,MAAM,cAAc,aAAa,CAAC;IAClC,MAAM,cAAc,OAAO,CAAC;CACtC"}
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
DnsMessageTypeFlag,
|
|
10
10
|
MAX_MDNS_MESSAGE_SIZE
|
|
11
11
|
} from "#codec/DnsCodec.js";
|
|
12
|
-
import { Diagnostic } from "#log/Diagnostic.js";
|
|
13
12
|
import { Logger } from "#log/Logger.js";
|
|
14
13
|
import { MatterAggregateError } from "#MatterError.js";
|
|
15
14
|
import { UdpMulticastServer } from "#net/udp/UdpMulticastServer.js";
|
|
@@ -55,7 +54,22 @@ class MdnsSocket {
|
|
|
55
54
|
return this.#receipt;
|
|
56
55
|
}
|
|
57
56
|
async send(message, intf, unicastDest) {
|
|
58
|
-
const { messageType } = message;
|
|
57
|
+
const { messageType, queries = [] } = message;
|
|
58
|
+
const queryChunks = this.#splitQueries(queries);
|
|
59
|
+
if (queryChunks.length > 1) {
|
|
60
|
+
for (const queryChunk of queryChunks) {
|
|
61
|
+
const chunkMessage = {
|
|
62
|
+
transactionId: 0,
|
|
63
|
+
messageType,
|
|
64
|
+
queries: queryChunk,
|
|
65
|
+
answers: [],
|
|
66
|
+
authorities: message.authorities ?? [],
|
|
67
|
+
additionalRecords: []
|
|
68
|
+
};
|
|
69
|
+
await this.#send(chunkMessage, intf, unicastDest);
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
59
73
|
const truncatedMessageType = DnsMessageType.isQuery(messageType) ? messageType | DnsMessageTypeFlag.TC : messageType;
|
|
60
74
|
const chunk = {
|
|
61
75
|
transactionId: 0,
|
|
@@ -70,13 +84,6 @@ class MdnsSocket {
|
|
|
70
84
|
for (const answer of message.answers ?? []) {
|
|
71
85
|
const answerEncoded = DnsCodec.encodeRecord(answer);
|
|
72
86
|
if (chunkSize + answerEncoded.byteLength > MAX_MDNS_MESSAGE_SIZE) {
|
|
73
|
-
if (chunk.answers.length === 0) {
|
|
74
|
-
logger.warn(
|
|
75
|
-
`MDNS message with ${Diagnostic.json(
|
|
76
|
-
chunk.queries
|
|
77
|
-
)} is too big to fit into a single MDNS message. Send anyway, but please report!`
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
87
|
await this.#send(
|
|
81
88
|
{
|
|
82
89
|
...chunk,
|
|
@@ -107,6 +114,33 @@ class MdnsSocket {
|
|
|
107
114
|
}
|
|
108
115
|
await this.#send(chunk, intf, unicastDest);
|
|
109
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Split queries into chunks that fit within MAX_MDNS_MESSAGE_SIZE.
|
|
119
|
+
* Returns an array of query arrays - if all queries fit in one message, returns [[...queries]].
|
|
120
|
+
*/
|
|
121
|
+
#splitQueries(queries) {
|
|
122
|
+
if (queries.length === 0) {
|
|
123
|
+
return [[]];
|
|
124
|
+
}
|
|
125
|
+
const DNS_HEADER_SIZE = 12;
|
|
126
|
+
const chunks = [];
|
|
127
|
+
let currentChunk = [];
|
|
128
|
+
let currentChunkSize = DNS_HEADER_SIZE;
|
|
129
|
+
for (const query of queries) {
|
|
130
|
+
const querySize = DnsCodec.encodeQuery(query).byteLength;
|
|
131
|
+
if (currentChunkSize + querySize > MAX_MDNS_MESSAGE_SIZE && currentChunk.length > 0) {
|
|
132
|
+
chunks.push(currentChunk);
|
|
133
|
+
currentChunk = [];
|
|
134
|
+
currentChunkSize = DNS_HEADER_SIZE;
|
|
135
|
+
}
|
|
136
|
+
currentChunk.push(query);
|
|
137
|
+
currentChunkSize += querySize;
|
|
138
|
+
}
|
|
139
|
+
if (currentChunk.length > 0) {
|
|
140
|
+
chunks.push(currentChunk);
|
|
141
|
+
}
|
|
142
|
+
return chunks;
|
|
143
|
+
}
|
|
110
144
|
async #send(message, intf, unicastDest) {
|
|
111
145
|
await this.#socket.send(DnsCodec.encode(message), intf, unicastDest);
|
|
112
146
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/net/dns-sd/MdnsSocket.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EACI;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["MdnsSocket"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/general",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.6-alpha.0-20260120-1040b4c1e",
|
|
4
4
|
"description": "Non-Matter support for Matter.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@noble/curves": "^2.0.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@matter/testing": "0.16.
|
|
39
|
+
"@matter/testing": "0.16.6-alpha.0-20260120-1040b4c1e"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"dist/**/*",
|
package/src/codec/DnsCodec.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { Diagnostic } from "#log/Diagnostic.js";
|
|
|
8
8
|
import { Logger } from "#log/Logger.js";
|
|
9
9
|
import { Duration } from "#time/Duration.js";
|
|
10
10
|
import { Seconds } from "#time/TimeUnit.js";
|
|
11
|
+
import { isObject } from "#util/index.js";
|
|
11
12
|
import { InternalError, NotImplementedError, UnexpectedDataError } from "../MatterError.js";
|
|
12
13
|
import { Bytes, Endian } from "../util/Bytes.js";
|
|
13
14
|
import { DataReader } from "../util/DataReader.js";
|
|
@@ -199,15 +200,24 @@ export class DnsCodec {
|
|
|
199
200
|
}
|
|
200
201
|
const answers = new Array<DnsRecord<any>>();
|
|
201
202
|
for (let i = 0; i < answersCount; i++) {
|
|
202
|
-
|
|
203
|
+
const record = this.decodeRecord(reader, message);
|
|
204
|
+
if (record !== undefined) {
|
|
205
|
+
answers.push(record);
|
|
206
|
+
}
|
|
203
207
|
}
|
|
204
208
|
const authorities = new Array<DnsRecord<any>>();
|
|
205
209
|
for (let i = 0; i < authoritiesCount; i++) {
|
|
206
|
-
|
|
210
|
+
const record = this.decodeRecord(reader, message);
|
|
211
|
+
if (record !== undefined) {
|
|
212
|
+
authorities.push(record);
|
|
213
|
+
}
|
|
207
214
|
}
|
|
208
215
|
const additionalRecords = new Array<DnsRecord<any>>();
|
|
209
216
|
for (let i = 0; i < additionalRecordsCount; i++) {
|
|
210
|
-
|
|
217
|
+
const record = this.decodeRecord(reader, message);
|
|
218
|
+
if (record !== undefined) {
|
|
219
|
+
additionalRecords.push(record);
|
|
220
|
+
}
|
|
211
221
|
}
|
|
212
222
|
return { transactionId, messageType, queries, answers, authorities, additionalRecords };
|
|
213
223
|
} catch (error) {
|
|
@@ -224,7 +234,7 @@ export class DnsCodec {
|
|
|
224
234
|
return { name, recordType, recordClass, uniCastResponse };
|
|
225
235
|
}
|
|
226
236
|
|
|
227
|
-
static decodeRecord(reader: DataReader<Endian.Big>, message: Bytes): DnsRecord<any> {
|
|
237
|
+
static decodeRecord(reader: DataReader<Endian.Big>, message: Bytes): DnsRecord<any> | undefined {
|
|
228
238
|
const name = this.decodeQName(reader, message);
|
|
229
239
|
const recordType = reader.readUInt16();
|
|
230
240
|
const classInt = reader.readUInt16();
|
|
@@ -234,6 +244,12 @@ export class DnsCodec {
|
|
|
234
244
|
const valueLength = reader.readUInt16();
|
|
235
245
|
const valueBytes = reader.readByteArray(valueLength);
|
|
236
246
|
const value = this.decodeRecordValue(valueBytes, recordType, message);
|
|
247
|
+
|
|
248
|
+
// Validate that the record has required fields
|
|
249
|
+
if (recordType === undefined || value === undefined) {
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
|
|
237
253
|
return { name, recordType, recordClass, ttl, value, flushCache };
|
|
238
254
|
}
|
|
239
255
|
|
|
@@ -353,7 +369,22 @@ export class DnsCodec {
|
|
|
353
369
|
return writer.toByteArray();
|
|
354
370
|
}
|
|
355
371
|
|
|
372
|
+
static encodeQuery(query: DnsQuery): Bytes {
|
|
373
|
+
const { name, recordType, recordClass, uniCastResponse = false } = query;
|
|
374
|
+
const writer = new DataWriter();
|
|
375
|
+
writer.writeByteArray(this.encodeQName(name));
|
|
376
|
+
writer.writeUInt16(recordType);
|
|
377
|
+
writer.writeUInt16(recordClass | (uniCastResponse ? 0x8000 : 0));
|
|
378
|
+
return writer.toByteArray();
|
|
379
|
+
}
|
|
380
|
+
|
|
356
381
|
static encodeRecord(record: DnsRecord<any>): Bytes {
|
|
382
|
+
// Validate record is a proper object with required fields
|
|
383
|
+
if (!isObject(record) || Object.keys(record).length === 0) {
|
|
384
|
+
logger.debug("Skipping record encoding: record is empty or not an object");
|
|
385
|
+
return new Uint8Array(0);
|
|
386
|
+
}
|
|
387
|
+
|
|
357
388
|
const { name, recordType, recordClass, ttl, value, flushCache = false } = record;
|
|
358
389
|
|
|
359
390
|
if (recordType === undefined || value === undefined) {
|
|
@@ -12,7 +12,6 @@ import {
|
|
|
12
12
|
DnsMessageTypeFlag,
|
|
13
13
|
MAX_MDNS_MESSAGE_SIZE,
|
|
14
14
|
} from "#codec/DnsCodec.js";
|
|
15
|
-
import { Diagnostic } from "#log/Diagnostic.js";
|
|
16
15
|
import { Logger } from "#log/Logger.js";
|
|
17
16
|
import { MatterAggregateError } from "#MatterError.js";
|
|
18
17
|
import { Network } from "#net/Network.js";
|
|
@@ -76,7 +75,35 @@ export class MdnsSocket {
|
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
async send(message: Partial<DnsMessage> & { messageType: DnsMessageType }, intf?: string, unicastDest?: string) {
|
|
79
|
-
const { messageType } = message;
|
|
78
|
+
const { messageType, queries = [] } = message;
|
|
79
|
+
|
|
80
|
+
// Check if queries need to be split across multiple messages
|
|
81
|
+
const queryChunks = this.#splitQueries(queries);
|
|
82
|
+
|
|
83
|
+
if (queryChunks.length > 1) {
|
|
84
|
+
// Query splitting required - send each chunk as an independent query message.
|
|
85
|
+
// RFC 6762 does not specify how to handle queries that exceed the message size limit.
|
|
86
|
+
//
|
|
87
|
+
// When we split queries across multiple messages, known answer suppression will not work anyway, and it is
|
|
88
|
+
// an edge case likely on start of the server when re-discovering many devices, so we likely have
|
|
89
|
+
// few known answers anyway.
|
|
90
|
+
//
|
|
91
|
+
// See: https://www.rfc-editor.org/rfc/rfc6762.html Section 7.2
|
|
92
|
+
for (const queryChunk of queryChunks) {
|
|
93
|
+
const chunkMessage: DnsMessagePartiallyPreEncoded = {
|
|
94
|
+
transactionId: 0,
|
|
95
|
+
messageType,
|
|
96
|
+
queries: queryChunk,
|
|
97
|
+
answers: [],
|
|
98
|
+
authorities: message.authorities ?? [],
|
|
99
|
+
additionalRecords: [],
|
|
100
|
+
};
|
|
101
|
+
await this.#send(chunkMessage, intf, unicastDest);
|
|
102
|
+
}
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Normal case: all queries fit in one message - proceed with answer splitting if needed
|
|
80
107
|
// When we send Queries that are too long they need to have the Truncated flag set
|
|
81
108
|
const truncatedMessageType = DnsMessageType.isQuery(messageType)
|
|
82
109
|
? messageType | DnsMessageTypeFlag.TC
|
|
@@ -93,24 +120,14 @@ export class MdnsSocket {
|
|
|
93
120
|
additionalRecords: [],
|
|
94
121
|
};
|
|
95
122
|
|
|
96
|
-
// Note - for size calculations we assume queries are relatively small. We only split answers across messages
|
|
97
123
|
let encodedChunkWithoutAnswers = DnsCodec.encode(chunk);
|
|
98
124
|
let chunkSize = encodedChunkWithoutAnswers.byteLength;
|
|
99
125
|
|
|
100
|
-
// Add answers, splitting message as necessary
|
|
126
|
+
// Add answers, splitting the message as necessary
|
|
101
127
|
for (const answer of message.answers ?? []) {
|
|
102
128
|
const answerEncoded = DnsCodec.encodeRecord(answer);
|
|
103
129
|
|
|
104
130
|
if (chunkSize + answerEncoded.byteLength > MAX_MDNS_MESSAGE_SIZE) {
|
|
105
|
-
if (chunk.answers.length === 0) {
|
|
106
|
-
// The first answer is already too big, log at least a warning
|
|
107
|
-
logger.warn(
|
|
108
|
-
`MDNS message with ${Diagnostic.json(
|
|
109
|
-
chunk.queries,
|
|
110
|
-
)} is too big to fit into a single MDNS message. Send anyway, but please report!`,
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
131
|
// New answer does not fit anymore, send out the message
|
|
115
132
|
// When sending a query, we set the Truncated flag to indicate more answers are available
|
|
116
133
|
await this.#send(
|
|
@@ -150,6 +167,44 @@ export class MdnsSocket {
|
|
|
150
167
|
await this.#send(chunk, intf, unicastDest);
|
|
151
168
|
}
|
|
152
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Split queries into chunks that fit within MAX_MDNS_MESSAGE_SIZE.
|
|
172
|
+
* Returns an array of query arrays - if all queries fit in one message, returns [[...queries]].
|
|
173
|
+
*/
|
|
174
|
+
#splitQueries(queries: DnsMessage["queries"]): DnsMessage["queries"][] {
|
|
175
|
+
if (queries.length === 0) {
|
|
176
|
+
return [[]];
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// DNS header is 12 bytes
|
|
180
|
+
const DNS_HEADER_SIZE = 12;
|
|
181
|
+
const chunks: DnsMessage["queries"][] = [];
|
|
182
|
+
let currentChunk: DnsMessage["queries"] = [];
|
|
183
|
+
let currentChunkSize = DNS_HEADER_SIZE;
|
|
184
|
+
|
|
185
|
+
for (const query of queries) {
|
|
186
|
+
const querySize = DnsCodec.encodeQuery(query).byteLength;
|
|
187
|
+
|
|
188
|
+
// If adding this query exceeds the limit, and we have queries in the current chunk,
|
|
189
|
+
// start a new chunk
|
|
190
|
+
if (currentChunkSize + querySize > MAX_MDNS_MESSAGE_SIZE && currentChunk.length > 0) {
|
|
191
|
+
chunks.push(currentChunk);
|
|
192
|
+
currentChunk = [];
|
|
193
|
+
currentChunkSize = DNS_HEADER_SIZE;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
currentChunk.push(query);
|
|
197
|
+
currentChunkSize += querySize;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Remember the last chunk
|
|
201
|
+
if (currentChunk.length > 0) {
|
|
202
|
+
chunks.push(currentChunk);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return chunks;
|
|
206
|
+
}
|
|
207
|
+
|
|
153
208
|
async #send(message: DnsMessagePartiallyPreEncoded, intf?: string, unicastDest?: string) {
|
|
154
209
|
await this.#socket.send(DnsCodec.encode(message), intf, unicastDest);
|
|
155
210
|
}
|