@matter/general 0.16.1-alpha.0-20260113-4616af40a → 0.16.2-alpha.0-20260114-d3127faee
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/net/ServerAddress.d.ts +52 -14
- package/dist/cjs/net/ServerAddress.d.ts.map +1 -1
- package/dist/cjs/net/ServerAddress.js +41 -6
- package/dist/cjs/net/ServerAddress.js.map +2 -2
- package/dist/cjs/net/ServerAddressSet.d.ts +65 -0
- package/dist/cjs/net/ServerAddressSet.d.ts.map +1 -0
- package/dist/cjs/net/ServerAddressSet.js +144 -0
- package/dist/cjs/net/ServerAddressSet.js.map +6 -0
- package/dist/cjs/net/dns-sd/MdnsSocket.d.ts +40 -0
- package/dist/cjs/net/dns-sd/MdnsSocket.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/MdnsSocket.js +164 -0
- package/dist/cjs/net/dns-sd/MdnsSocket.js.map +6 -0
- package/dist/cjs/net/dns-sd/index.d.ts +7 -0
- package/dist/cjs/net/dns-sd/index.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/index.js +24 -0
- package/dist/cjs/net/dns-sd/index.js.map +6 -0
- package/dist/cjs/net/index.d.ts +2 -0
- package/dist/cjs/net/index.d.ts.map +1 -1
- package/dist/cjs/net/index.js +2 -0
- package/dist/cjs/net/index.js.map +1 -1
- package/dist/cjs/util/Abort.d.ts +9 -0
- package/dist/cjs/util/Abort.d.ts.map +1 -1
- package/dist/cjs/util/Abort.js +20 -0
- package/dist/cjs/util/Abort.js.map +1 -1
- package/dist/cjs/util/Heap.d.ts +84 -0
- package/dist/cjs/util/Heap.d.ts.map +1 -0
- package/dist/cjs/util/Heap.js +286 -0
- package/dist/cjs/util/Heap.js.map +6 -0
- package/dist/cjs/util/Observable.d.ts +29 -6
- package/dist/cjs/util/Observable.d.ts.map +1 -1
- package/dist/cjs/util/Observable.js +40 -6
- package/dist/cjs/util/Observable.js.map +1 -1
- package/dist/cjs/util/Promises.d.ts +3 -0
- package/dist/cjs/util/Promises.d.ts.map +1 -1
- package/dist/cjs/util/Promises.js +33 -3
- package/dist/cjs/util/Promises.js.map +2 -2
- package/dist/cjs/util/Set.d.ts.map +1 -1
- package/dist/cjs/util/Set.js +14 -8
- package/dist/cjs/util/Set.js.map +1 -1
- package/dist/cjs/util/index.d.ts +1 -0
- package/dist/cjs/util/index.d.ts.map +1 -1
- package/dist/cjs/util/index.js +1 -0
- package/dist/cjs/util/index.js.map +1 -1
- package/dist/esm/net/ServerAddress.d.ts +52 -14
- package/dist/esm/net/ServerAddress.d.ts.map +1 -1
- package/dist/esm/net/ServerAddress.js +41 -6
- package/dist/esm/net/ServerAddress.js.map +2 -2
- package/dist/esm/net/ServerAddressSet.d.ts +65 -0
- package/dist/esm/net/ServerAddressSet.d.ts.map +1 -0
- package/dist/esm/net/ServerAddressSet.js +124 -0
- package/dist/esm/net/ServerAddressSet.js.map +6 -0
- package/dist/esm/net/dns-sd/MdnsSocket.d.ts +40 -0
- package/dist/esm/net/dns-sd/MdnsSocket.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/MdnsSocket.js +149 -0
- package/dist/esm/net/dns-sd/MdnsSocket.js.map +6 -0
- package/dist/esm/net/dns-sd/index.d.ts +7 -0
- package/dist/esm/net/dns-sd/index.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/index.js +7 -0
- package/dist/esm/net/dns-sd/index.js.map +6 -0
- package/dist/esm/net/index.d.ts +2 -0
- package/dist/esm/net/index.d.ts.map +1 -1
- package/dist/esm/net/index.js +2 -0
- package/dist/esm/net/index.js.map +1 -1
- package/dist/esm/util/Abort.d.ts +9 -0
- package/dist/esm/util/Abort.d.ts.map +1 -1
- package/dist/esm/util/Abort.js +20 -0
- package/dist/esm/util/Abort.js.map +1 -1
- package/dist/esm/util/Heap.d.ts +84 -0
- package/dist/esm/util/Heap.d.ts.map +1 -0
- package/dist/esm/util/Heap.js +266 -0
- package/dist/esm/util/Heap.js.map +6 -0
- package/dist/esm/util/Observable.d.ts +29 -6
- package/dist/esm/util/Observable.d.ts.map +1 -1
- package/dist/esm/util/Observable.js +40 -6
- package/dist/esm/util/Observable.js.map +1 -1
- package/dist/esm/util/Promises.d.ts +3 -0
- package/dist/esm/util/Promises.d.ts.map +1 -1
- package/dist/esm/util/Promises.js +33 -3
- package/dist/esm/util/Promises.js.map +2 -2
- package/dist/esm/util/Set.d.ts.map +1 -1
- package/dist/esm/util/Set.js +14 -8
- package/dist/esm/util/Set.js.map +1 -1
- package/dist/esm/util/index.d.ts +1 -0
- package/dist/esm/util/index.d.ts.map +1 -1
- package/dist/esm/util/index.js +1 -0
- package/dist/esm/util/index.js.map +1 -1
- package/package.json +2 -2
- package/src/net/ServerAddress.ts +93 -19
- package/src/net/ServerAddressSet.ts +225 -0
- package/src/net/dns-sd/MdnsSocket.ts +203 -0
- package/src/net/dns-sd/index.ts +7 -0
- package/src/net/index.ts +2 -0
- package/src/util/Abort.ts +25 -0
- package/src/util/Heap.ts +332 -0
- package/src/util/Observable.ts +74 -10
- package/src/util/Promises.ts +61 -4
- package/src/util/Set.ts +15 -8
- package/src/util/index.ts +1 -0
|
@@ -6,35 +6,73 @@
|
|
|
6
6
|
import { Diagnostic } from "#log/Diagnostic.js";
|
|
7
7
|
import { Duration } from "#time/Duration.js";
|
|
8
8
|
import { Timestamp } from "#time/Timestamp.js";
|
|
9
|
+
export interface AddressLifespan {
|
|
10
|
+
/**
|
|
11
|
+
* Beginning of lifespan
|
|
12
|
+
*/
|
|
13
|
+
discoveredAt: Timestamp;
|
|
14
|
+
/**
|
|
15
|
+
* Length of lifespan, if known
|
|
16
|
+
*/
|
|
17
|
+
ttl: Duration;
|
|
18
|
+
}
|
|
19
|
+
export interface AddressStatus extends Partial<AddressLifespan> {
|
|
20
|
+
/**
|
|
21
|
+
* Time of last successful access.
|
|
22
|
+
*/
|
|
23
|
+
healthyAt?: Timestamp;
|
|
24
|
+
/**
|
|
25
|
+
* Time of last unsuccessful access.
|
|
26
|
+
*/
|
|
27
|
+
unhealthyAt?: Timestamp;
|
|
28
|
+
/**
|
|
29
|
+
* DNS priority.
|
|
30
|
+
*/
|
|
31
|
+
priority?: number;
|
|
32
|
+
/**
|
|
33
|
+
* DNS weight.
|
|
34
|
+
*/
|
|
35
|
+
weight?: number;
|
|
36
|
+
}
|
|
9
37
|
export type ServerAddressUdp = {
|
|
10
38
|
type: "udp";
|
|
11
39
|
ip: string;
|
|
12
40
|
port: number;
|
|
13
|
-
};
|
|
41
|
+
} & AddressStatus;
|
|
14
42
|
export type ServerAddressTcp = {
|
|
15
43
|
type: "tcp";
|
|
16
44
|
ip: string;
|
|
17
45
|
port: number;
|
|
18
|
-
};
|
|
46
|
+
} & AddressStatus;
|
|
19
47
|
export type ServerAddressBle = {
|
|
20
48
|
type: "ble";
|
|
21
49
|
peripheralAddress: string;
|
|
22
|
-
};
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
discoveredAt: Timestamp;
|
|
26
|
-
/** Length of lifespan, if known (seconds) */
|
|
27
|
-
ttl: Duration;
|
|
28
|
-
}
|
|
29
|
-
export type ServerAddress = (ServerAddressUdp | ServerAddressTcp | ServerAddressBle) & Partial<Lifespan>;
|
|
30
|
-
export declare function ServerAddress(definition: ServerAddress.Definition): ServerAddress;
|
|
50
|
+
} & AddressStatus;
|
|
51
|
+
export type ServerAddress = ServerAddressUdp | ServerAddressTcp | ServerAddressBle;
|
|
52
|
+
export declare function ServerAddress(definition: ServerAddress): ServerAddress;
|
|
31
53
|
export declare namespace ServerAddress {
|
|
32
54
|
function urlFor(address: ServerAddress): string;
|
|
33
55
|
function diagnosticFor(address: ServerAddress): Diagnostic;
|
|
34
56
|
function isEqual(a: ServerAddress, b: ServerAddress): boolean;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Compute logical health of an address.
|
|
59
|
+
*
|
|
60
|
+
* This returns heathyAt/unhealthyAt values with unhealthyAt set to undefined if the address was more recently
|
|
61
|
+
* healthy.
|
|
62
|
+
*/
|
|
63
|
+
function healthOf(health: AddressStatus): AddressStatus;
|
|
64
|
+
/**
|
|
65
|
+
* Network address desirability from a Matter communication perspective.
|
|
66
|
+
*
|
|
67
|
+
* Lower values indicate higher preference. This is not a standard "happy eyeballs" ranking but works similarly.
|
|
68
|
+
*/
|
|
69
|
+
enum SelectionPreference {
|
|
70
|
+
IPV6_ULA = 0,
|
|
71
|
+
IPV6_LINK_LOCAL = 1,
|
|
72
|
+
IPV6 = 2,
|
|
73
|
+
IPV4 = 3,
|
|
74
|
+
NOT_IP = 3
|
|
38
75
|
}
|
|
76
|
+
function selectionPreferenceOf(address: ServerAddress): SelectionPreference;
|
|
39
77
|
}
|
|
40
78
|
//# sourceMappingURL=ServerAddress.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerAddress.d.ts","sourceRoot":"","sources":["../../../src/net/ServerAddress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ServerAddress.d.ts","sourceRoot":"","sources":["../../../src/net/ServerAddress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,GAAG,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC3D;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;CAC7B,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnF,wBAAgB,aAAa,CAAC,UAAU,EAAE,aAAa,GAS9C,aAAa,CACrB;AAED,yBAAiB,aAAa,CAAC;IAC3B,SAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAYrD;IAED,SAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,cAuBnD;IAED,SAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAcnE;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAY7D;IAED;;;;OAIG;IACH,KAAY,mBAAmB;QAC3B,QAAQ,IAAA;QACR,eAAe,IAAA;QACf,IAAI,IAAA;QACJ,IAAI,IAAA;QACJ,MAAM,IAAI;KACb;IAED,SAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,uBAkB3D;CACJ"}
|
|
@@ -23,7 +23,6 @@ __export(ServerAddress_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(ServerAddress_exports);
|
|
24
24
|
var import_Diagnostic = require("#log/Diagnostic.js");
|
|
25
25
|
var import_Duration = require("#time/Duration.js");
|
|
26
|
-
var import_TimeUnit = require("#time/TimeUnit.js");
|
|
27
26
|
/**
|
|
28
27
|
* @license
|
|
29
28
|
* Copyright 2022-2026 Matter.js Authors
|
|
@@ -31,9 +30,13 @@ var import_TimeUnit = require("#time/TimeUnit.js");
|
|
|
31
30
|
*/
|
|
32
31
|
function ServerAddress(definition) {
|
|
33
32
|
return {
|
|
33
|
+
ttl: void 0,
|
|
34
34
|
discoveredAt: void 0,
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
healthyAt: void 0,
|
|
36
|
+
unhealthyAt: void 0,
|
|
37
|
+
priority: void 0,
|
|
38
|
+
weight: void 0,
|
|
39
|
+
...definition
|
|
37
40
|
};
|
|
38
41
|
}
|
|
39
42
|
((ServerAddress2) => {
|
|
@@ -82,9 +85,41 @@ function ServerAddress(definition) {
|
|
|
82
85
|
return false;
|
|
83
86
|
}
|
|
84
87
|
ServerAddress2.isEqual = isEqual;
|
|
85
|
-
function
|
|
86
|
-
|
|
88
|
+
function healthOf(health) {
|
|
89
|
+
if (health.unhealthyAt === void 0) {
|
|
90
|
+
return health;
|
|
91
|
+
}
|
|
92
|
+
if (health.healthyAt !== void 0 && health.healthyAt > health.unhealthyAt) {
|
|
93
|
+
return {
|
|
94
|
+
healthyAt: health.healthyAt
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return health;
|
|
98
|
+
}
|
|
99
|
+
ServerAddress2.healthOf = healthOf;
|
|
100
|
+
let SelectionPreference;
|
|
101
|
+
((SelectionPreference2) => {
|
|
102
|
+
SelectionPreference2[SelectionPreference2["IPV6_ULA"] = 0] = "IPV6_ULA";
|
|
103
|
+
SelectionPreference2[SelectionPreference2["IPV6_LINK_LOCAL"] = 1] = "IPV6_LINK_LOCAL";
|
|
104
|
+
SelectionPreference2[SelectionPreference2["IPV6"] = 2] = "IPV6";
|
|
105
|
+
SelectionPreference2[SelectionPreference2["IPV4"] = 3] = "IPV4";
|
|
106
|
+
SelectionPreference2[SelectionPreference2["NOT_IP"] = 3] = "NOT_IP";
|
|
107
|
+
})(SelectionPreference = ServerAddress2.SelectionPreference || (ServerAddress2.SelectionPreference = {}));
|
|
108
|
+
function selectionPreferenceOf(address) {
|
|
109
|
+
if (!("ip" in address)) {
|
|
110
|
+
return 3 /* NOT_IP */;
|
|
111
|
+
}
|
|
112
|
+
if (address.ip.startsWith("fd")) {
|
|
113
|
+
return 0 /* IPV6_ULA */;
|
|
114
|
+
}
|
|
115
|
+
if (address.ip.startsWith("fe00")) {
|
|
116
|
+
return 1 /* IPV6_LINK_LOCAL */;
|
|
117
|
+
}
|
|
118
|
+
if (address.ip.includes(":")) {
|
|
119
|
+
return 2 /* IPV6 */;
|
|
120
|
+
}
|
|
121
|
+
return 3 /* IPV4 */;
|
|
87
122
|
}
|
|
88
|
-
ServerAddress2.
|
|
123
|
+
ServerAddress2.selectionPreferenceOf = selectionPreferenceOf;
|
|
89
124
|
})(ServerAddress || (ServerAddress = {}));
|
|
90
125
|
//# sourceMappingURL=ServerAddress.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/net/ServerAddress.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,wBAA2B;AAC3B,sBAAyB;
|
|
5
|
-
"names": ["ServerAddress"]
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,wBAA2B;AAC3B,sBAAyB;AAPzB;AAAA;AAAA;AAAA;AAAA;AA+DO,SAAS,cAAc,YAA2B;AACrD,SAAO;AAAA,IACH,KAAK;AAAA,IACL,cAAc;AAAA,IACd,WAAW;AAAA,IACX,aAAa;AAAA,IACb,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,GAAG;AAAA,EACP;AACJ;AAAA,CAEO,CAAUA,mBAAV;AACI,WAAS,OAAO,SAAgC;AACnD,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,eAAO,GAAG,QAAQ,IAAI,MAAM,QAAQ,EAAE,IAAI,QAAQ,IAAI;AAAA,MAE1D,KAAK;AACD,eAAO,SAAS,QAAQ,iBAAiB;AAAA,MAE7C;AACI,eAAO,GAAI,QAAgB,IAAI;AAAA,IACvC;AAAA,EACJ;AAZO,EAAAA,eAAS;AAcT,WAAS,cAAc,SAAwB;AAClD,UAAM,aAAa,MAAe;AAElC,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,mBAAW,KAAK,GAAG,QAAQ,IAAI,OAAO,6BAAW,OAAO,QAAQ,EAAE,GAAG,KAAK,QAAQ,IAAI;AACtF;AAAA,MAEJ,KAAK;AACD,mBAAW,KAAK,UAAU,6BAAW,OAAO,QAAQ,iBAAiB,CAAC;AACtE;AAAA,MAEJ;AACI,mBAAW,KAAK,GAAI,QAAgB,IAAI,KAAK;AAC7C;AAAA,IACR;AAEA,QAAI,SAAS,WAAW,OAAO,QAAQ,QAAQ,UAAU;AACrD,iBAAW,KAAK,SAAS,yBAAS,OAAO,QAAQ,GAAG,CAAC;AAAA,IACzD;AAEA,WAAO,6BAAW,OAAO,GAAG,UAAU;AAAA,EAC1C;AAvBO,EAAAA,eAAS;AAyBT,WAAS,QAAQ,GAAkB,GAA2B;AACjE,QAAI,EAAE,SAAS,EAAE,MAAM;AACnB,aAAO;AAAA,IACX;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;AAAA,IACzC;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,sBAAsB,EAAE;AAAA,IACrC;AAEA,WAAO;AAAA,EACX;AAdO,EAAAA,eAAS;AAsBT,WAAS,SAAS,QAAsC;AAC3D,QAAI,OAAO,gBAAgB,QAAW;AAClC,aAAO;AAAA,IACX;AAEA,QAAI,OAAO,cAAc,UAAa,OAAO,YAAY,OAAO,aAAa;AACzE,aAAO;AAAA,QACH,WAAW,OAAO;AAAA,MACtB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAZO,EAAAA,eAAS;AAmBT,MAAK;AAAL,IAAKC,yBAAL;AACH,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA,YAAS,KAAT;AAAA,KALQ,sBAAAD,eAAA,wBAAAA,eAAA;AAQL,WAAS,sBAAsB,SAAwB;AAC1D,QAAI,EAAE,QAAQ,UAAU;AACpB,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,IAAI,GAAG;AAC7B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,MAAM,GAAG;AAC/B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,SAAS,GAAG,GAAG;AAC1B,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAlBO,EAAAA,eAAS;AAAA,GAzFH;",
|
|
5
|
+
"names": ["ServerAddress", "SelectionPreference"]
|
|
6
6
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { AddressStatus, ServerAddress } from "./ServerAddress.js";
|
|
7
|
+
/**
|
|
8
|
+
* A set of server addresses ordered by a comparator.
|
|
9
|
+
*/
|
|
10
|
+
export interface ServerAddressSet<T extends ServerAddress> {
|
|
11
|
+
/**
|
|
12
|
+
* Add an address.
|
|
13
|
+
*
|
|
14
|
+
* If the address alreay exists, returns the existing address to facilitate comparison by value. If not, returns
|
|
15
|
+
* the input address.
|
|
16
|
+
*/
|
|
17
|
+
add(address: T): T;
|
|
18
|
+
/**
|
|
19
|
+
* Delete an address.
|
|
20
|
+
*/
|
|
21
|
+
delete(address: T): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Replace the stored addresses.
|
|
24
|
+
*/
|
|
25
|
+
replace(newAddresses: Iterable<T>): void;
|
|
26
|
+
/**
|
|
27
|
+
* Test for existence of address.
|
|
28
|
+
*/
|
|
29
|
+
has(address: T): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The number of addresses.
|
|
32
|
+
*/
|
|
33
|
+
size: number;
|
|
34
|
+
/**
|
|
35
|
+
* Iterate.
|
|
36
|
+
*
|
|
37
|
+
* If you replace addresses during iteration only addresses not already produced will be covered by remaining
|
|
38
|
+
* iterations.
|
|
39
|
+
*/
|
|
40
|
+
[Symbol.iterator](): Iterator<T>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create a new {@link ServerAddressSet}.
|
|
44
|
+
*/
|
|
45
|
+
export declare function ServerAddressSet<T extends ServerAddress>(initial?: Iterable<T>, comparator?: typeof ServerAddressSet.compareDesirability): ServerAddressSet<T>;
|
|
46
|
+
export declare namespace ServerAddressSet {
|
|
47
|
+
interface Comparator<T extends ServerAddress = ServerAddress> {
|
|
48
|
+
(addr1: T, addr2: T): number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Update a list of addresses with health information from another list.
|
|
52
|
+
*/
|
|
53
|
+
function copyHealth<T extends ServerAddress>(targetAddresses: Iterable<T>, sourceAddresses: Iterable<T>): T[];
|
|
54
|
+
/**
|
|
55
|
+
* Compare the "desirability" of two addresses for communication.
|
|
56
|
+
*/
|
|
57
|
+
function compareDesirability(a: ServerAddress, b: ServerAddress): number;
|
|
58
|
+
/**
|
|
59
|
+
* Compare the health of two addresses.
|
|
60
|
+
*
|
|
61
|
+
* Returns a negative number if a is healthier, positive if b is healthier and 0 if assessment is neutral.
|
|
62
|
+
*/
|
|
63
|
+
function compareHealth(a: AddressStatus, b: AddressStatus): number;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=ServerAddressSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerAddressSet.d.ts","sourceRoot":"","sources":["../../../src/net/ServerAddressSet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,aAAa;IACrD;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAEzC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAEzB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,aAAa,EACpD,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,UAAU,8CAAuC,uBA+EpD;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,UAAiB,UAAU,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa;QAC/D,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;KAChC;IAED;;OAEG;IACH,SAAgB,UAAU,CAAC,CAAC,SAAS,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,OAgB7G;IAED;;OAEG;IACH,SAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,UAmBrE;IAED;;;;OAIG;IACH,SAAgB,aAAa,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,UAiC/D;CACJ"}
|
|
@@ -0,0 +1,144 @@
|
|
|
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 ServerAddressSet_exports = {};
|
|
20
|
+
__export(ServerAddressSet_exports, {
|
|
21
|
+
ServerAddressSet: () => ServerAddressSet
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(ServerAddressSet_exports);
|
|
24
|
+
var import_ServerAddress = require("./ServerAddress.js");
|
|
25
|
+
/**
|
|
26
|
+
* @license
|
|
27
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
28
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
29
|
+
*/
|
|
30
|
+
function ServerAddressSet(initial, comparator = ServerAddressSet.compareDesirability) {
|
|
31
|
+
let version = 0;
|
|
32
|
+
let addresses;
|
|
33
|
+
const set = {
|
|
34
|
+
add(address) {
|
|
35
|
+
version++;
|
|
36
|
+
const key = import_ServerAddress.ServerAddress.urlFor(address);
|
|
37
|
+
const existing = addresses?.get(key);
|
|
38
|
+
if (existing) {
|
|
39
|
+
return existing;
|
|
40
|
+
}
|
|
41
|
+
if (!addresses) {
|
|
42
|
+
addresses = /* @__PURE__ */ new Map();
|
|
43
|
+
}
|
|
44
|
+
addresses.set(key, address);
|
|
45
|
+
return address;
|
|
46
|
+
},
|
|
47
|
+
delete(address) {
|
|
48
|
+
version++;
|
|
49
|
+
return addresses?.delete(import_ServerAddress.ServerAddress.urlFor(address)) ?? false;
|
|
50
|
+
},
|
|
51
|
+
has(address) {
|
|
52
|
+
return addresses?.has(import_ServerAddress.ServerAddress.urlFor(address)) ?? false;
|
|
53
|
+
},
|
|
54
|
+
replace(newAddresses) {
|
|
55
|
+
version++;
|
|
56
|
+
const oldAddresses = addresses;
|
|
57
|
+
addresses = /* @__PURE__ */ new Map();
|
|
58
|
+
for (const address of newAddresses) {
|
|
59
|
+
const key = import_ServerAddress.ServerAddress.urlFor(address);
|
|
60
|
+
addresses.set(key, oldAddresses?.get(key) ?? address);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
get size() {
|
|
64
|
+
return addresses?.size ?? 0;
|
|
65
|
+
},
|
|
66
|
+
*[Symbol.iterator]() {
|
|
67
|
+
const tried = /* @__PURE__ */ new Set();
|
|
68
|
+
all: while (true) {
|
|
69
|
+
const currentVersion = version;
|
|
70
|
+
const ordered = addresses ? [...addresses.entries()].map(([, address]) => address).sort(comparator) : [];
|
|
71
|
+
for (const address of ordered) {
|
|
72
|
+
const key = import_ServerAddress.ServerAddress.urlFor(address);
|
|
73
|
+
if (tried.has(key)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
yield address;
|
|
77
|
+
if (currentVersion !== version) {
|
|
78
|
+
continue all;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
if (initial) {
|
|
86
|
+
set.replace(initial);
|
|
87
|
+
}
|
|
88
|
+
return set;
|
|
89
|
+
}
|
|
90
|
+
((ServerAddressSet2) => {
|
|
91
|
+
function copyHealth(targetAddresses, sourceAddresses) {
|
|
92
|
+
const output = [...targetAddresses];
|
|
93
|
+
nextTarget: for (let i = 0; i < output.length; i++) {
|
|
94
|
+
const target = output[i];
|
|
95
|
+
for (const source of sourceAddresses) {
|
|
96
|
+
if (import_ServerAddress.ServerAddress.isEqual(target, source)) {
|
|
97
|
+
if (source.healthyAt !== void 0 || source.unhealthyAt !== void 0) {
|
|
98
|
+
output[i] = { ...target, healthyAt: source.healthyAt, unhealthyAt: source.unhealthyAt };
|
|
99
|
+
}
|
|
100
|
+
continue nextTarget;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return output;
|
|
105
|
+
}
|
|
106
|
+
ServerAddressSet2.copyHealth = copyHealth;
|
|
107
|
+
function compareDesirability(a, b) {
|
|
108
|
+
const value = import_ServerAddress.ServerAddress.selectionPreferenceOf(a) - import_ServerAddress.ServerAddress.selectionPreferenceOf(b);
|
|
109
|
+
if (value) {
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
const relativeHealth = compareHealth(a, b);
|
|
113
|
+
if (relativeHealth) {
|
|
114
|
+
return relativeHealth;
|
|
115
|
+
}
|
|
116
|
+
if (a.priority !== void 0 && b.priority !== void 0) {
|
|
117
|
+
return b.priority - a.priority;
|
|
118
|
+
}
|
|
119
|
+
return 0;
|
|
120
|
+
}
|
|
121
|
+
ServerAddressSet2.compareDesirability = compareDesirability;
|
|
122
|
+
function compareHealth(a, b) {
|
|
123
|
+
const ha = import_ServerAddress.ServerAddress.healthOf(a);
|
|
124
|
+
const hb = import_ServerAddress.ServerAddress.healthOf(b);
|
|
125
|
+
if (ha.unhealthyAt) {
|
|
126
|
+
if (hb.unhealthyAt) {
|
|
127
|
+
return ha.unhealthyAt - hb.unhealthyAt;
|
|
128
|
+
}
|
|
129
|
+
return 1;
|
|
130
|
+
}
|
|
131
|
+
if (hb.unhealthyAt) {
|
|
132
|
+
return -1;
|
|
133
|
+
}
|
|
134
|
+
if (ha.healthyAt) {
|
|
135
|
+
if (hb.healthyAt) {
|
|
136
|
+
return hb.healthyAt - ha.healthyAt;
|
|
137
|
+
}
|
|
138
|
+
return -1;
|
|
139
|
+
}
|
|
140
|
+
return 0;
|
|
141
|
+
}
|
|
142
|
+
ServerAddressSet2.compareHealth = compareHealth;
|
|
143
|
+
})(ServerAddressSet || (ServerAddressSet = {}));
|
|
144
|
+
//# sourceMappingURL=ServerAddressSet.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/net/ServerAddressSet.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["ServerAddressSet"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { DnsMessage, DnsMessageType } from "#codec/DnsCodec.js";
|
|
7
|
+
import { Network } from "#net/Network.js";
|
|
8
|
+
import { UdpMulticastServer } from "#net/udp/UdpMulticastServer.js";
|
|
9
|
+
import { Lifetime } from "#util/Lifetime.js";
|
|
10
|
+
import { AsyncObservable } from "#util/Observable.js";
|
|
11
|
+
/**
|
|
12
|
+
* Manages the UDP socket for other components that implement MDNS logic.
|
|
13
|
+
*/
|
|
14
|
+
export declare class MdnsSocket {
|
|
15
|
+
#private;
|
|
16
|
+
static create(network: Network, options?: {
|
|
17
|
+
enableIpv4?: boolean;
|
|
18
|
+
netInterface?: string;
|
|
19
|
+
lifetime?: Lifetime.Owner;
|
|
20
|
+
}): Promise<MdnsSocket>;
|
|
21
|
+
constructor(socket: UdpMulticastServer);
|
|
22
|
+
get network(): Network;
|
|
23
|
+
get supportsIpv4(): boolean;
|
|
24
|
+
get netInterface(): string | undefined;
|
|
25
|
+
get receipt(): AsyncObservable<[message: MdnsSocket.Message], void>;
|
|
26
|
+
send(message: Partial<DnsMessage> & {
|
|
27
|
+
messageType: DnsMessageType;
|
|
28
|
+
}, intf?: string, unicastDest?: string): Promise<void>;
|
|
29
|
+
close(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export declare namespace MdnsSocket {
|
|
32
|
+
interface Message extends DnsMessage {
|
|
33
|
+
sourceIp: string;
|
|
34
|
+
sourceIntf: string;
|
|
35
|
+
}
|
|
36
|
+
const BROADCAST_IPV4 = "224.0.0.251";
|
|
37
|
+
const BROADCAST_IPV6 = "ff02::fb";
|
|
38
|
+
const BROADCAST_PORT = 5353;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=MdnsSocket.d.ts.map
|
|
@@ -0,0 +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;IA+ExG,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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
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_DnsCodec = require("#codec/DnsCodec.js");
|
|
25
|
+
var import_Diagnostic = require("#log/Diagnostic.js");
|
|
26
|
+
var import_Logger = require("#log/Logger.js");
|
|
27
|
+
var import_MatterError = require("#MatterError.js");
|
|
28
|
+
var import_UdpMulticastServer = require("#net/udp/UdpMulticastServer.js");
|
|
29
|
+
var import_Observable = require("#util/Observable.js");
|
|
30
|
+
var import_Promises = require("#util/Promises.js");
|
|
31
|
+
/**
|
|
32
|
+
* @license
|
|
33
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
34
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
35
|
+
*/
|
|
36
|
+
const logger = import_Logger.Logger.get("MdnsListener");
|
|
37
|
+
class MdnsSocket {
|
|
38
|
+
#socket;
|
|
39
|
+
#handlers;
|
|
40
|
+
#isClosed = false;
|
|
41
|
+
#receipt = new import_Observable.BasicObservable(
|
|
42
|
+
(error) => logger.error("Unhandled error in MDNS listener", error),
|
|
43
|
+
true
|
|
44
|
+
);
|
|
45
|
+
static async create(network, options) {
|
|
46
|
+
const { enableIpv4 = true, netInterface, lifetime } = options ?? {};
|
|
47
|
+
const socket = new MdnsSocket(
|
|
48
|
+
await import_UdpMulticastServer.UdpMulticastServer.create({
|
|
49
|
+
lifetime,
|
|
50
|
+
network,
|
|
51
|
+
netInterface,
|
|
52
|
+
broadcastAddressIpv4: enableIpv4 ? MdnsSocket.BROADCAST_IPV4 : void 0,
|
|
53
|
+
broadcastAddressIpv6: MdnsSocket.BROADCAST_IPV6,
|
|
54
|
+
listeningPort: MdnsSocket.BROADCAST_PORT
|
|
55
|
+
})
|
|
56
|
+
);
|
|
57
|
+
return socket;
|
|
58
|
+
}
|
|
59
|
+
constructor(socket) {
|
|
60
|
+
this.#socket = socket;
|
|
61
|
+
socket.onMessage(this.#handleMessage.bind(this));
|
|
62
|
+
}
|
|
63
|
+
get network() {
|
|
64
|
+
return this.#socket.network;
|
|
65
|
+
}
|
|
66
|
+
get supportsIpv4() {
|
|
67
|
+
return this.#socket.supportsIpv4;
|
|
68
|
+
}
|
|
69
|
+
get netInterface() {
|
|
70
|
+
return this.#socket.netInterface;
|
|
71
|
+
}
|
|
72
|
+
get receipt() {
|
|
73
|
+
return this.#receipt;
|
|
74
|
+
}
|
|
75
|
+
async send(message, intf, unicastDest) {
|
|
76
|
+
const { messageType } = message;
|
|
77
|
+
const truncatedMessageType = import_DnsCodec.DnsMessageType.isQuery(messageType) ? messageType | import_DnsCodec.DnsMessageTypeFlag.TC : messageType;
|
|
78
|
+
const chunk = {
|
|
79
|
+
transactionId: 0,
|
|
80
|
+
queries: [],
|
|
81
|
+
authorities: [],
|
|
82
|
+
...message,
|
|
83
|
+
answers: [],
|
|
84
|
+
additionalRecords: []
|
|
85
|
+
};
|
|
86
|
+
let encodedChunkWithoutAnswers = import_DnsCodec.DnsCodec.encode(chunk);
|
|
87
|
+
let chunkSize = encodedChunkWithoutAnswers.byteLength;
|
|
88
|
+
for (const answer of message.answers ?? []) {
|
|
89
|
+
const answerEncoded = import_DnsCodec.DnsCodec.encodeRecord(answer);
|
|
90
|
+
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
|
+
await this.#send(
|
|
99
|
+
{
|
|
100
|
+
...chunk,
|
|
101
|
+
messageType: truncatedMessageType
|
|
102
|
+
},
|
|
103
|
+
intf,
|
|
104
|
+
unicastDest
|
|
105
|
+
);
|
|
106
|
+
if (chunk.queries.length) {
|
|
107
|
+
chunk.queries.length = 0;
|
|
108
|
+
encodedChunkWithoutAnswers = import_DnsCodec.DnsCodec.encode(chunk);
|
|
109
|
+
}
|
|
110
|
+
chunk.answers.length = 0;
|
|
111
|
+
chunkSize = encodedChunkWithoutAnswers.byteLength + answerEncoded.byteLength;
|
|
112
|
+
} else {
|
|
113
|
+
chunkSize += answerEncoded.byteLength;
|
|
114
|
+
}
|
|
115
|
+
chunk.answers.push(answerEncoded);
|
|
116
|
+
}
|
|
117
|
+
const additionalRecords = message.additionalRecords ?? [];
|
|
118
|
+
for (const additionalRecord of additionalRecords) {
|
|
119
|
+
const additionalRecordEncoded = import_DnsCodec.DnsCodec.encodeRecord(additionalRecord);
|
|
120
|
+
chunkSize += additionalRecordEncoded.byteLength;
|
|
121
|
+
if (chunkSize > import_DnsCodec.MAX_MDNS_MESSAGE_SIZE) {
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
chunk.additionalRecords.push(additionalRecordEncoded);
|
|
125
|
+
}
|
|
126
|
+
await this.#send(chunk, intf, unicastDest);
|
|
127
|
+
}
|
|
128
|
+
async #send(message, intf, unicastDest) {
|
|
129
|
+
await this.#socket.send(import_DnsCodec.DnsCodec.encode(message), intf, unicastDest);
|
|
130
|
+
}
|
|
131
|
+
async close() {
|
|
132
|
+
this.#isClosed = true;
|
|
133
|
+
await this.#socket.close();
|
|
134
|
+
if (this.#handlers) {
|
|
135
|
+
await import_MatterError.MatterAggregateError.allSettled(this.#handlers);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
#handleMessage(bytes, sourceIp, sourceIntf) {
|
|
139
|
+
if (this.#isClosed) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const parsed = import_DnsCodec.DnsCodec.decode(bytes);
|
|
143
|
+
if (parsed === void 0) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
let promise = this.#receipt.emit({
|
|
147
|
+
...parsed,
|
|
148
|
+
sourceIp,
|
|
149
|
+
sourceIntf
|
|
150
|
+
});
|
|
151
|
+
if (import_Promises.MaybePromise.is(promise)) {
|
|
152
|
+
if (this.#handlers === void 0) {
|
|
153
|
+
this.#handlers = /* @__PURE__ */ new Set();
|
|
154
|
+
}
|
|
155
|
+
promise = Promise.resolve(promise).finally(() => this.#handlers?.delete(promise));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
((MdnsSocket2) => {
|
|
160
|
+
MdnsSocket2.BROADCAST_IPV4 = "224.0.0.251";
|
|
161
|
+
MdnsSocket2.BROADCAST_IPV6 = "ff02::fb";
|
|
162
|
+
MdnsSocket2.BROADCAST_PORT = 5353;
|
|
163
|
+
})(MdnsSocket || (MdnsSocket = {}));
|
|
164
|
+
//# sourceMappingURL=MdnsSocket.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/net/dns-sd/MdnsSocket.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["MdnsSocket"]
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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 __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
+
var dns_sd_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(dns_sd_exports);
|
|
18
|
+
__reExport(dns_sd_exports, require("./MdnsSocket.js"), module.exports);
|
|
19
|
+
/**
|
|
20
|
+
* @license
|
|
21
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
22
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
23
|
+
*/
|
|
24
|
+
//# sourceMappingURL=index.js.map
|