@matter/general 0.16.5 → 0.16.6-alpha.0-20260118-ceec17415
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 +45 -3
- 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 +45 -3
- 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 +71 -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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"}
|
|
@@ -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;AAI5B,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;
|
|
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;AAI5B,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;IAgJxG,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"}
|
|
@@ -73,7 +73,22 @@ class MdnsSocket {
|
|
|
73
73
|
return this.#receipt;
|
|
74
74
|
}
|
|
75
75
|
async send(message, intf, unicastDest) {
|
|
76
|
-
const { messageType } = message;
|
|
76
|
+
const { messageType, queries = [] } = message;
|
|
77
|
+
const queryChunks = this.#splitQueries(queries);
|
|
78
|
+
if (queryChunks.length > 1) {
|
|
79
|
+
for (const queryChunk of queryChunks) {
|
|
80
|
+
const chunkMessage = {
|
|
81
|
+
transactionId: 0,
|
|
82
|
+
messageType,
|
|
83
|
+
queries: queryChunk,
|
|
84
|
+
answers: [],
|
|
85
|
+
authorities: message.authorities ?? [],
|
|
86
|
+
additionalRecords: []
|
|
87
|
+
};
|
|
88
|
+
await this.#send(chunkMessage, intf, unicastDest);
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
77
92
|
const truncatedMessageType = import_DnsCodec.DnsMessageType.isQuery(messageType) ? messageType | import_DnsCodec.DnsMessageTypeFlag.TC : messageType;
|
|
78
93
|
const chunk = {
|
|
79
94
|
transactionId: 0,
|
|
@@ -90,9 +105,9 @@ class MdnsSocket {
|
|
|
90
105
|
if (chunkSize + answerEncoded.byteLength > import_DnsCodec.MAX_MDNS_MESSAGE_SIZE) {
|
|
91
106
|
if (chunk.answers.length === 0) {
|
|
92
107
|
logger.warn(
|
|
93
|
-
`
|
|
108
|
+
`Sending oversized DNS answer record (${answerEncoded.byteLength} bytes) that exceeds max message size: ${import_Diagnostic.Diagnostic.json(
|
|
94
109
|
chunk.queries
|
|
95
|
-
)}
|
|
110
|
+
)}`
|
|
96
111
|
);
|
|
97
112
|
}
|
|
98
113
|
await this.#send(
|
|
@@ -125,6 +140,33 @@ class MdnsSocket {
|
|
|
125
140
|
}
|
|
126
141
|
await this.#send(chunk, intf, unicastDest);
|
|
127
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Split queries into chunks that fit within MAX_MDNS_MESSAGE_SIZE.
|
|
145
|
+
* Returns an array of query arrays - if all queries fit in one message, returns [[...queries]].
|
|
146
|
+
*/
|
|
147
|
+
#splitQueries(queries) {
|
|
148
|
+
if (queries.length === 0) {
|
|
149
|
+
return [[]];
|
|
150
|
+
}
|
|
151
|
+
const DNS_HEADER_SIZE = 12;
|
|
152
|
+
const chunks = [];
|
|
153
|
+
let currentChunk = [];
|
|
154
|
+
let currentChunkSize = DNS_HEADER_SIZE;
|
|
155
|
+
for (const query of queries) {
|
|
156
|
+
const querySize = import_DnsCodec.DnsCodec.encodeQuery(query).byteLength;
|
|
157
|
+
if (currentChunkSize + querySize > import_DnsCodec.MAX_MDNS_MESSAGE_SIZE && currentChunk.length > 0) {
|
|
158
|
+
chunks.push(currentChunk);
|
|
159
|
+
currentChunk = [];
|
|
160
|
+
currentChunkSize = DNS_HEADER_SIZE;
|
|
161
|
+
}
|
|
162
|
+
currentChunk.push(query);
|
|
163
|
+
currentChunkSize += querySize;
|
|
164
|
+
}
|
|
165
|
+
if (currentChunk.length > 0) {
|
|
166
|
+
chunks.push(currentChunk);
|
|
167
|
+
}
|
|
168
|
+
return chunks;
|
|
169
|
+
}
|
|
128
170
|
async #send(message, intf, unicastDest) {
|
|
129
171
|
await this.#socket.send(import_DnsCodec.DnsCodec.encode(message), intf, unicastDest);
|
|
130
172
|
}
|
|
@@ -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,wBAA2B;AAC3B,oBAAuB;AACvB,yBAAqC;AAErC,gCAAmC;AAGnC,wBAAiD;AACjD,sBAA6B;AAtB7B;AAAA;AAAA;AAAA;AAAA;AAwBA,MAAM,SAAS,qBAAO,IAAI,cAAc;AAKjC,MAAM,WAAW;AAAA,EACpB;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAA2D,IAAI;AAAA,IAC3D,WAAS,OAAO,MAAM,oCAAoC,KAAK;AAAA,IAC/D;AAAA,EACJ;AAAA,EAEA,aAAa,OACT,SACA,SACF;AACE,UAAM,EAAE,aAAa,MAAM,cAAc,SAAS,IAAI,WAAW,CAAC;AAClE,UAAM,SAAS,IAAI;AAAA,MACf,MAAM,6CAAmB,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,aAAa,WAAW,iBAAiB;AAAA,QAC/D,sBAAsB,WAAW;AAAA,QACjC,eAAe,WAAW;AAAA,MAC9B,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,QAA4B;AACpC,SAAK,UAAU;AACf,WAAO,UAAU,KAAK,eAAe,KAAK,IAAI,CAAC;AAAA,EACnD;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,KAAK,SAAgE,MAAe,aAAsB;AAC5G,UAAM,EAAE,
|
|
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;AAI5B,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;
|
|
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;AAI5B,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;IAgJxG,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"}
|
|
@@ -55,7 +55,22 @@ class MdnsSocket {
|
|
|
55
55
|
return this.#receipt;
|
|
56
56
|
}
|
|
57
57
|
async send(message, intf, unicastDest) {
|
|
58
|
-
const { messageType } = message;
|
|
58
|
+
const { messageType, queries = [] } = message;
|
|
59
|
+
const queryChunks = this.#splitQueries(queries);
|
|
60
|
+
if (queryChunks.length > 1) {
|
|
61
|
+
for (const queryChunk of queryChunks) {
|
|
62
|
+
const chunkMessage = {
|
|
63
|
+
transactionId: 0,
|
|
64
|
+
messageType,
|
|
65
|
+
queries: queryChunk,
|
|
66
|
+
answers: [],
|
|
67
|
+
authorities: message.authorities ?? [],
|
|
68
|
+
additionalRecords: []
|
|
69
|
+
};
|
|
70
|
+
await this.#send(chunkMessage, intf, unicastDest);
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
59
74
|
const truncatedMessageType = DnsMessageType.isQuery(messageType) ? messageType | DnsMessageTypeFlag.TC : messageType;
|
|
60
75
|
const chunk = {
|
|
61
76
|
transactionId: 0,
|
|
@@ -72,9 +87,9 @@ class MdnsSocket {
|
|
|
72
87
|
if (chunkSize + answerEncoded.byteLength > MAX_MDNS_MESSAGE_SIZE) {
|
|
73
88
|
if (chunk.answers.length === 0) {
|
|
74
89
|
logger.warn(
|
|
75
|
-
`
|
|
90
|
+
`Sending oversized DNS answer record (${answerEncoded.byteLength} bytes) that exceeds max message size: ${Diagnostic.json(
|
|
76
91
|
chunk.queries
|
|
77
|
-
)}
|
|
92
|
+
)}`
|
|
78
93
|
);
|
|
79
94
|
}
|
|
80
95
|
await this.#send(
|
|
@@ -107,6 +122,33 @@ class MdnsSocket {
|
|
|
107
122
|
}
|
|
108
123
|
await this.#send(chunk, intf, unicastDest);
|
|
109
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Split queries into chunks that fit within MAX_MDNS_MESSAGE_SIZE.
|
|
127
|
+
* Returns an array of query arrays - if all queries fit in one message, returns [[...queries]].
|
|
128
|
+
*/
|
|
129
|
+
#splitQueries(queries) {
|
|
130
|
+
if (queries.length === 0) {
|
|
131
|
+
return [[]];
|
|
132
|
+
}
|
|
133
|
+
const DNS_HEADER_SIZE = 12;
|
|
134
|
+
const chunks = [];
|
|
135
|
+
let currentChunk = [];
|
|
136
|
+
let currentChunkSize = DNS_HEADER_SIZE;
|
|
137
|
+
for (const query of queries) {
|
|
138
|
+
const querySize = DnsCodec.encodeQuery(query).byteLength;
|
|
139
|
+
if (currentChunkSize + querySize > MAX_MDNS_MESSAGE_SIZE && currentChunk.length > 0) {
|
|
140
|
+
chunks.push(currentChunk);
|
|
141
|
+
currentChunk = [];
|
|
142
|
+
currentChunkSize = DNS_HEADER_SIZE;
|
|
143
|
+
}
|
|
144
|
+
currentChunk.push(query);
|
|
145
|
+
currentChunkSize += querySize;
|
|
146
|
+
}
|
|
147
|
+
if (currentChunk.length > 0) {
|
|
148
|
+
chunks.push(currentChunk);
|
|
149
|
+
}
|
|
150
|
+
return chunks;
|
|
151
|
+
}
|
|
110
152
|
async #send(message, intf, unicastDest) {
|
|
111
153
|
await this.#socket.send(DnsCodec.encode(message), intf, unicastDest);
|
|
112
154
|
}
|
|
@@ -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,kBAAkB;AAC3B,SAAS,cAAc;AACvB,SAAS,4BAA4B;AAErC,SAAS,0BAA0B;AAGnC,SAA0B,uBAAuB;AACjD,SAAS,oBAAoB;AAE7B,MAAM,SAAS,OAAO,IAAI,cAAc;AAKjC,MAAM,WAAW;AAAA,EACpB;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAA2D,IAAI;AAAA,IAC3D,WAAS,OAAO,MAAM,oCAAoC,KAAK;AAAA,IAC/D;AAAA,EACJ;AAAA,EAEA,aAAa,OACT,SACA,SACF;AACE,UAAM,EAAE,aAAa,MAAM,cAAc,SAAS,IAAI,WAAW,CAAC;AAClE,UAAM,SAAS,IAAI;AAAA,MACf,MAAM,mBAAmB,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,aAAa,WAAW,iBAAiB;AAAA,QAC/D,sBAAsB,WAAW;AAAA,QACjC,eAAe,WAAW;AAAA,MAC9B,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,QAA4B;AACpC,SAAK,UAAU;AACf,WAAO,UAAU,KAAK,eAAe,KAAK,IAAI,CAAC;AAAA,EACnD;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,KAAK,SAAgE,MAAe,aAAsB;AAC5G,UAAM,EAAE,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EACI;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AACvB,SAAS,4BAA4B;AAErC,SAAS,0BAA0B;AAGnC,SAA0B,uBAAuB;AACjD,SAAS,oBAAoB;AAE7B,MAAM,SAAS,OAAO,IAAI,cAAc;AAKjC,MAAM,WAAW;AAAA,EACpB;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAA2D,IAAI;AAAA,IAC3D,WAAS,OAAO,MAAM,oCAAoC,KAAK;AAAA,IAC/D;AAAA,EACJ;AAAA,EAEA,aAAa,OACT,SACA,SACF;AACE,UAAM,EAAE,aAAa,MAAM,cAAc,SAAS,IAAI,WAAW,CAAC;AAClE,UAAM,SAAS,IAAI;AAAA,MACf,MAAM,mBAAmB,OAAO;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,aAAa,WAAW,iBAAiB;AAAA,QAC/D,sBAAsB,WAAW;AAAA,QACjC,eAAe,WAAW;AAAA,MAC9B,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,QAA4B;AACpC,SAAK,UAAU;AACf,WAAO,UAAU,KAAK,eAAe,KAAK,IAAI,CAAC;AAAA,EACnD;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,KAAK,SAAgE,MAAe,aAAsB;AAC5G,UAAM,EAAE,aAAa,UAAU,CAAC,EAAE,IAAI;AAGtC,UAAM,cAAc,KAAK,cAAc,OAAO;AAE9C,QAAI,YAAY,SAAS,GAAG;AASxB,iBAAW,cAAc,aAAa;AAClC,cAAM,eAA8C;AAAA,UAChD,eAAe;AAAA,UACf;AAAA,UACA,SAAS;AAAA,UACT,SAAS,CAAC;AAAA,UACV,aAAa,QAAQ,eAAe,CAAC;AAAA,UACrC,mBAAmB,CAAC;AAAA,QACxB;AACA,cAAM,KAAK,MAAM,cAAc,MAAM,WAAW;AAAA,MACpD;AACA;AAAA,IACJ;AAIA,UAAM,uBAAuB,eAAe,QAAQ,WAAW,IACzD,cAAc,mBAAmB,KACjC;AAEN,UAAM,QAAuC;AAAA,MACzC,eAAe;AAAA,MACf,SAAS,CAAC;AAAA,MACV,aAAa,CAAC;AAAA,MAEd,GAAG;AAAA,MAEH,SAAS,CAAC;AAAA,MACV,mBAAmB,CAAC;AAAA,IACxB;AAEA,QAAI,6BAA6B,SAAS,OAAO,KAAK;AACtD,QAAI,YAAY,2BAA2B;AAG3C,eAAW,UAAU,QAAQ,WAAW,CAAC,GAAG;AACxC,YAAM,gBAAgB,SAAS,aAAa,MAAM;AAElD,UAAI,YAAY,cAAc,aAAa,uBAAuB;AAC9D,YAAI,MAAM,QAAQ,WAAW,GAAG;AAE5B,iBAAO;AAAA,YACH,wCAAwC,cAAc,UAAU,0CAA0C,WAAW;AAAA,cACjH,MAAM;AAAA,YACV,CAAC;AAAA,UACL;AAAA,QACJ;AAIA,cAAM,KAAK;AAAA,UACP;AAAA,YACI,GAAG;AAAA,YACH,aAAa;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAGA,YAAI,MAAM,QAAQ,QAAQ;AACtB,gBAAM,QAAQ,SAAS;AACvB,uCAA6B,SAAS,OAAO,KAAK;AAAA,QACtD;AACA,cAAM,QAAQ,SAAS;AACvB,oBAAY,2BAA2B,aAAa,cAAc;AAAA,MACtE,OAAO;AACH,qBAAa,cAAc;AAAA,MAC/B;AAEA,YAAM,QAAQ,KAAK,aAAa;AAAA,IACpC;AAGA,UAAM,oBAAoB,QAAQ,qBAAqB,CAAC;AACxD,eAAW,oBAAoB,mBAAmB;AAC9C,YAAM,0BAA0B,SAAS,aAAa,gBAAgB;AACtE,mBAAa,wBAAwB;AACrC,UAAI,YAAY,uBAAuB;AACnC;AAAA,MACJ;AACA,YAAM,kBAAkB,KAAK,uBAAuB;AAAA,IACxD;AAEA,UAAM,KAAK,MAAM,OAAO,MAAM,WAAW;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,SAAyD;AACnE,QAAI,QAAQ,WAAW,GAAG;AACtB,aAAO,CAAC,CAAC,CAAC;AAAA,IACd;AAGA,UAAM,kBAAkB;AACxB,UAAM,SAAkC,CAAC;AACzC,QAAI,eAAsC,CAAC;AAC3C,QAAI,mBAAmB;AAEvB,eAAW,SAAS,SAAS;AACzB,YAAM,YAAY,SAAS,YAAY,KAAK,EAAE;AAI9C,UAAI,mBAAmB,YAAY,yBAAyB,aAAa,SAAS,GAAG;AACjF,eAAO,KAAK,YAAY;AACxB,uBAAe,CAAC;AAChB,2BAAmB;AAAA,MACvB;AAEA,mBAAa,KAAK,KAAK;AACvB,0BAAoB;AAAA,IACxB;AAGA,QAAI,aAAa,SAAS,GAAG;AACzB,aAAO,KAAK,YAAY;AAAA,IAC5B;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,MAAM,SAAwC,MAAe,aAAsB;AACrF,UAAM,KAAK,QAAQ,KAAK,SAAS,OAAO,OAAO,GAAG,MAAM,WAAW;AAAA,EACvE;AAAA,EAEA,MAAM,QAAQ;AACV,SAAK,YAAY;AACjB,UAAM,KAAK,QAAQ,MAAM;AACzB,QAAI,KAAK,WAAW;AAChB,YAAM,qBAAqB,WAAW,KAAK,SAAS;AAAA,IACxD;AAAA,EACJ;AAAA,EAEA,eAAe,OAAc,UAAkB,YAAoB;AAE/D,QAAI,KAAK,WAAW;AAChB;AAAA,IACJ;AAGA,UAAM,SAAS,SAAS,OAAO,KAAK;AAGpC,QAAI,WAAW,QAAW;AACtB;AAAA,IACJ;AAEA,QAAI,UAAU,KAAK,SAAS,KAAK;AAAA,MAC7B,GAAG;AAAA,MACH;AAAA,MACA;AAAA,IACJ,CAAC;AAED,QAAI,aAAa,GAAG,OAAO,GAAG;AAC1B,UAAI,KAAK,cAAc,QAAW;AAC9B,aAAK,YAAY,oBAAI,IAAI;AAAA,MAC7B;AACA,gBAAU,QAAQ,QAAQ,OAAO,EAAE,QAAQ,MAAM,KAAK,WAAW,OAAO,OAA4B,CAAC;AAAA,IACzG;AAAA,EACJ;AACJ;AAAA,CAEO,CAAUA,gBAAV;AAMI,EAAMA,YAAA,iBAAiB;AACvB,EAAMA,YAAA,iBAAiB;AACvB,EAAMA,YAAA,iBAAiB;AAAA,GARjB;",
|
|
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-20260118-ceec17415",
|
|
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-20260118-ceec17415"
|
|
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) {
|
|
@@ -76,7 +76,35 @@ export class MdnsSocket {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
async send(message: Partial<DnsMessage> & { messageType: DnsMessageType }, intf?: string, unicastDest?: string) {
|
|
79
|
-
const { messageType } = message;
|
|
79
|
+
const { messageType, queries = [] } = message;
|
|
80
|
+
|
|
81
|
+
// Check if queries need to be split across multiple messages
|
|
82
|
+
const queryChunks = this.#splitQueries(queries);
|
|
83
|
+
|
|
84
|
+
if (queryChunks.length > 1) {
|
|
85
|
+
// Query splitting required - send each chunk as an independent query message.
|
|
86
|
+
// RFC 6762 does not specify how to handle queries that exceed the message size limit.
|
|
87
|
+
//
|
|
88
|
+
// When we split queries across multiple messages, known answer suppression will not work anyway, and it is
|
|
89
|
+
// an edge case likely on start of the server when re-discovering many devices, so we likely have
|
|
90
|
+
// few known answers anyway.
|
|
91
|
+
//
|
|
92
|
+
// See: https://www.rfc-editor.org/rfc/rfc6762.html Section 7.2
|
|
93
|
+
for (const queryChunk of queryChunks) {
|
|
94
|
+
const chunkMessage: DnsMessagePartiallyPreEncoded = {
|
|
95
|
+
transactionId: 0,
|
|
96
|
+
messageType,
|
|
97
|
+
queries: queryChunk,
|
|
98
|
+
answers: [],
|
|
99
|
+
authorities: message.authorities ?? [],
|
|
100
|
+
additionalRecords: [],
|
|
101
|
+
};
|
|
102
|
+
await this.#send(chunkMessage, intf, unicastDest);
|
|
103
|
+
}
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Normal case: all queries fit in one message - proceed with answer splitting if needed
|
|
80
108
|
// When we send Queries that are too long they need to have the Truncated flag set
|
|
81
109
|
const truncatedMessageType = DnsMessageType.isQuery(messageType)
|
|
82
110
|
? messageType | DnsMessageTypeFlag.TC
|
|
@@ -93,21 +121,20 @@ export class MdnsSocket {
|
|
|
93
121
|
additionalRecords: [],
|
|
94
122
|
};
|
|
95
123
|
|
|
96
|
-
// Note - for size calculations we assume queries are relatively small. We only split answers across messages
|
|
97
124
|
let encodedChunkWithoutAnswers = DnsCodec.encode(chunk);
|
|
98
125
|
let chunkSize = encodedChunkWithoutAnswers.byteLength;
|
|
99
126
|
|
|
100
|
-
// Add answers, splitting message as necessary
|
|
127
|
+
// Add answers, splitting the message as necessary
|
|
101
128
|
for (const answer of message.answers ?? []) {
|
|
102
129
|
const answerEncoded = DnsCodec.encodeRecord(answer);
|
|
103
130
|
|
|
104
131
|
if (chunkSize + answerEncoded.byteLength > MAX_MDNS_MESSAGE_SIZE) {
|
|
105
132
|
if (chunk.answers.length === 0) {
|
|
106
|
-
//
|
|
133
|
+
// Single answer exceeds message size - log warning but send anyway
|
|
107
134
|
logger.warn(
|
|
108
|
-
`
|
|
135
|
+
`Sending oversized DNS answer record (${answerEncoded.byteLength} bytes) that exceeds max message size: ${Diagnostic.json(
|
|
109
136
|
chunk.queries,
|
|
110
|
-
)}
|
|
137
|
+
)}`,
|
|
111
138
|
);
|
|
112
139
|
}
|
|
113
140
|
|
|
@@ -150,6 +177,44 @@ export class MdnsSocket {
|
|
|
150
177
|
await this.#send(chunk, intf, unicastDest);
|
|
151
178
|
}
|
|
152
179
|
|
|
180
|
+
/**
|
|
181
|
+
* Split queries into chunks that fit within MAX_MDNS_MESSAGE_SIZE.
|
|
182
|
+
* Returns an array of query arrays - if all queries fit in one message, returns [[...queries]].
|
|
183
|
+
*/
|
|
184
|
+
#splitQueries(queries: DnsMessage["queries"]): DnsMessage["queries"][] {
|
|
185
|
+
if (queries.length === 0) {
|
|
186
|
+
return [[]];
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// DNS header is 12 bytes
|
|
190
|
+
const DNS_HEADER_SIZE = 12;
|
|
191
|
+
const chunks: DnsMessage["queries"][] = [];
|
|
192
|
+
let currentChunk: DnsMessage["queries"] = [];
|
|
193
|
+
let currentChunkSize = DNS_HEADER_SIZE;
|
|
194
|
+
|
|
195
|
+
for (const query of queries) {
|
|
196
|
+
const querySize = DnsCodec.encodeQuery(query).byteLength;
|
|
197
|
+
|
|
198
|
+
// If adding this query exceeds the limit, and we have queries in the current chunk,
|
|
199
|
+
// start a new chunk
|
|
200
|
+
if (currentChunkSize + querySize > MAX_MDNS_MESSAGE_SIZE && currentChunk.length > 0) {
|
|
201
|
+
chunks.push(currentChunk);
|
|
202
|
+
currentChunk = [];
|
|
203
|
+
currentChunkSize = DNS_HEADER_SIZE;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
currentChunk.push(query);
|
|
207
|
+
currentChunkSize += querySize;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Remember the last chunk
|
|
211
|
+
if (currentChunk.length > 0) {
|
|
212
|
+
chunks.push(currentChunk);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return chunks;
|
|
216
|
+
}
|
|
217
|
+
|
|
153
218
|
async #send(message: DnsMessagePartiallyPreEncoded, intf?: string, unicastDest?: string) {
|
|
154
219
|
await this.#socket.send(DnsCodec.encode(message), intf, unicastDest);
|
|
155
220
|
}
|