@blockcast/mmt-base 1.0.1 → 2.0.0
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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ip-address.d.ts +24 -0
- package/dist/ip-address.d.ts.map +1 -0
- package/dist/ip-address.js +113 -0
- package/dist/ip-address.js.map +1 -0
- package/dist/mmtp.d.ts +25 -0
- package/dist/mmtp.d.ts.map +1 -1
- package/dist/mmtp.js +28 -4
- package/dist/mmtp.js.map +1 -1
- package/dist/multicast-catalog.d.ts +28 -9
- package/dist/multicast-catalog.d.ts.map +1 -1
- package/dist/multicast-catalog.js +90 -62
- package/dist/multicast-catalog.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/ip-address.ts +104 -0
- package/src/mmtp.ts +42 -2
- package/src/multicast-catalog.ts +101 -62
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from './ntp-short.js';
|
|
|
4
4
|
export * from './signalling.js';
|
|
5
5
|
export * from './serial-number.js';
|
|
6
6
|
export * from './fec-block-profile.js';
|
|
7
|
+
export * from './ip-address.js';
|
|
7
8
|
export * from './multicast-catalog.js';
|
|
8
9
|
export * from './fec-catalog.js';
|
|
9
10
|
export * from './fec-bindings.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export * from './ntp-short.js';
|
|
|
4
4
|
export * from './signalling.js';
|
|
5
5
|
export * from './serial-number.js';
|
|
6
6
|
export * from './fec-block-profile.js';
|
|
7
|
+
export * from './ip-address.js';
|
|
7
8
|
export * from './multicast-catalog.js';
|
|
8
9
|
export * from './fec-catalog.js';
|
|
9
10
|
export * from './fec-bindings.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IP address literals as draft-ramadan-moq-multicast-02 7.2.6 requires them of
|
|
3
|
+
* `sourceAddress`, `groupAddress` and `senderAddress`: the IPv4address or
|
|
4
|
+
* IPv6address form of RFC 3986 3.2.2. Dotted decimal with no leading zero in
|
|
5
|
+
* any dec-octet (the ls32 tail of an IPv6 literal included); IPv6 h16 groups
|
|
6
|
+
* may carry leading zeros in either hex case; no brackets, no zone identifier,
|
|
7
|
+
* never a name. Draft: Blockcast/moqcast-draft@5f49172.
|
|
8
|
+
*
|
|
9
|
+
* Addresses compare as IP addresses, never as strings, and an address of one
|
|
10
|
+
* family never matches one of the other: an IPv4-mapped IPv6 address is of the
|
|
11
|
+
* IPv6 family, so it parses to 16 octets and never equals its IPv4 address.
|
|
12
|
+
*/
|
|
13
|
+
/** The octets of an RFC 3986 IPv4address (4) or IPv6address (16), or `undefined`. */
|
|
14
|
+
export declare function parseIpAddressLiteral(text: unknown): Uint8Array | undefined;
|
|
15
|
+
/** Whether two address literals name one address of one family. Unparseable never matches. */
|
|
16
|
+
export declare function sameIpAddress(a: unknown, b: unknown): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* One spelling per address: dotted decimal for IPv4, RFC 5952 for IPv6
|
|
19
|
+
* (lowercase, no leading zeros, the longest run of two or more zero groups,
|
|
20
|
+
* leftmost on a tie, as "::"; an IPv4-mapped address in hex like any other).
|
|
21
|
+
* `undefined` for text that is not an address literal.
|
|
22
|
+
*/
|
|
23
|
+
export declare function canonicalIpAddress(text: unknown): string | undefined;
|
|
24
|
+
//# sourceMappingURL=ip-address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip-address.d.ts","sourceRoot":"","sources":["../src/ip-address.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoDH,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAK3E;AAED,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAI7D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAmBpE"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IP address literals as draft-ramadan-moq-multicast-02 7.2.6 requires them of
|
|
3
|
+
* `sourceAddress`, `groupAddress` and `senderAddress`: the IPv4address or
|
|
4
|
+
* IPv6address form of RFC 3986 3.2.2. Dotted decimal with no leading zero in
|
|
5
|
+
* any dec-octet (the ls32 tail of an IPv6 literal included); IPv6 h16 groups
|
|
6
|
+
* may carry leading zeros in either hex case; no brackets, no zone identifier,
|
|
7
|
+
* never a name. Draft: Blockcast/moqcast-draft@5f49172.
|
|
8
|
+
*
|
|
9
|
+
* Addresses compare as IP addresses, never as strings, and an address of one
|
|
10
|
+
* family never matches one of the other: an IPv4-mapped IPv6 address is of the
|
|
11
|
+
* IPv6 family, so it parses to 16 octets and never equals its IPv4 address.
|
|
12
|
+
*/
|
|
13
|
+
const DEC_OCTET = /^(?:0|[1-9]\d{0,2})$/;
|
|
14
|
+
const H16 = /^[0-9A-Fa-f]{1,4}$/;
|
|
15
|
+
function parseIpv4(text) {
|
|
16
|
+
const fields = text.split(".");
|
|
17
|
+
if (fields.length !== 4)
|
|
18
|
+
return undefined;
|
|
19
|
+
const octets = [];
|
|
20
|
+
for (const field of fields) {
|
|
21
|
+
if (!DEC_OCTET.test(field))
|
|
22
|
+
return undefined;
|
|
23
|
+
const value = Number(field);
|
|
24
|
+
if (value > 255)
|
|
25
|
+
return undefined;
|
|
26
|
+
octets.push(value);
|
|
27
|
+
}
|
|
28
|
+
return octets;
|
|
29
|
+
}
|
|
30
|
+
function parseIpv6(text) {
|
|
31
|
+
const halves = text.split("::");
|
|
32
|
+
if (halves.length > 2)
|
|
33
|
+
return undefined;
|
|
34
|
+
const groupsOf = (part) => (part === "" ? [] : part.split(":"));
|
|
35
|
+
const left = groupsOf(halves[0]);
|
|
36
|
+
const right = halves.length === 2 ? groupsOf(halves[1]) : [];
|
|
37
|
+
const words = [];
|
|
38
|
+
const all = [...left, ...right];
|
|
39
|
+
// The ls32 dotted tail ends the literal: the last group, never before "::".
|
|
40
|
+
const last = halves.length === 2 && right.length === 0 ? -1 : all.length - 1;
|
|
41
|
+
for (let index = 0; index < all.length; index++) {
|
|
42
|
+
const group = all[index];
|
|
43
|
+
if (index === last && group.includes(".")) {
|
|
44
|
+
const v4 = parseIpv4(group);
|
|
45
|
+
if (!v4)
|
|
46
|
+
return undefined;
|
|
47
|
+
words.push([(v4[0] << 8) | v4[1], (v4[2] << 8) | v4[3]]);
|
|
48
|
+
}
|
|
49
|
+
else if (H16.test(group)) {
|
|
50
|
+
words.push([Number.parseInt(group, 16)]);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const leftWords = words.slice(0, left.length).flat();
|
|
57
|
+
const rightWords = words.slice(left.length).flat();
|
|
58
|
+
const missing = 8 - leftWords.length - rightWords.length;
|
|
59
|
+
if (halves.length === 2 ? missing < 1 : missing !== 0)
|
|
60
|
+
return undefined;
|
|
61
|
+
const out = new Uint8Array(16);
|
|
62
|
+
[...leftWords, ...new Array(missing).fill(0), ...rightWords].forEach((word, index) => {
|
|
63
|
+
out[index * 2] = word >> 8;
|
|
64
|
+
out[index * 2 + 1] = word & 0xff;
|
|
65
|
+
});
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
/** The octets of an RFC 3986 IPv4address (4) or IPv6address (16), or `undefined`. */
|
|
69
|
+
export function parseIpAddressLiteral(text) {
|
|
70
|
+
if (typeof text !== "string")
|
|
71
|
+
return undefined;
|
|
72
|
+
if (text.includes(":"))
|
|
73
|
+
return parseIpv6(text);
|
|
74
|
+
const v4 = parseIpv4(text);
|
|
75
|
+
return v4 ? Uint8Array.from(v4) : undefined;
|
|
76
|
+
}
|
|
77
|
+
/** Whether two address literals name one address of one family. Unparseable never matches. */
|
|
78
|
+
export function sameIpAddress(a, b) {
|
|
79
|
+
const x = parseIpAddressLiteral(a);
|
|
80
|
+
const y = parseIpAddressLiteral(b);
|
|
81
|
+
return x !== undefined && y !== undefined && x.length === y.length && x.every((octet, index) => octet === y[index]);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* One spelling per address: dotted decimal for IPv4, RFC 5952 for IPv6
|
|
85
|
+
* (lowercase, no leading zeros, the longest run of two or more zero groups,
|
|
86
|
+
* leftmost on a tie, as "::"; an IPv4-mapped address in hex like any other).
|
|
87
|
+
* `undefined` for text that is not an address literal.
|
|
88
|
+
*/
|
|
89
|
+
export function canonicalIpAddress(text) {
|
|
90
|
+
const bytes = parseIpAddressLiteral(text);
|
|
91
|
+
if (!bytes)
|
|
92
|
+
return undefined;
|
|
93
|
+
if (bytes.length === 4)
|
|
94
|
+
return bytes.join(".");
|
|
95
|
+
const words = Array.from({ length: 8 }, (_, index) => (bytes[index * 2] << 8) | bytes[index * 2 + 1]);
|
|
96
|
+
let bestStart = -1;
|
|
97
|
+
let bestLength = 1;
|
|
98
|
+
for (let start = 0; start < 8;) {
|
|
99
|
+
let end = start;
|
|
100
|
+
while (end < 8 && words[end] === 0)
|
|
101
|
+
end++;
|
|
102
|
+
if (end - start > bestLength) {
|
|
103
|
+
bestStart = start;
|
|
104
|
+
bestLength = end - start;
|
|
105
|
+
}
|
|
106
|
+
start = end === start ? start + 1 : end;
|
|
107
|
+
}
|
|
108
|
+
const hex = words.map(word => word.toString(16));
|
|
109
|
+
if (bestStart < 0)
|
|
110
|
+
return hex.join(":");
|
|
111
|
+
return `${hex.slice(0, bestStart).join(":")}::${hex.slice(bestStart + bestLength).join(":")}`;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=ip-address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip-address.js","sourceRoot":"","sources":["../src/ip-address.ts"],"names":[],"mappings":"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"}
|
package/dist/mmtp.d.ts
CHANGED
|
@@ -293,4 +293,29 @@ export declare function parseMoqRepairFrame(frame: Uint8Array): MoqRepairFrame |
|
|
|
293
293
|
* then identical to `parseMoqRepairFrame(frame)`.
|
|
294
294
|
*/
|
|
295
295
|
export declare function parseMoqRepairFrameWithHeader(frame: Uint8Array, header: MMTPHeader): MoqRepairFrame | null;
|
|
296
|
+
/**
|
|
297
|
+
* Why a repair object of an mmtp track is discarded on admission:
|
|
298
|
+
* `repairLength` -- the object is not exactly 12 + 13 + T bytes with a
|
|
299
|
+
* 12-byte MMTP header (C = 0, X = 0; draft-ramadan-moq-mmt-02 7.3, judged
|
|
300
|
+
* before any Repair FEC Payload ID field is read); `repairRsId` -- RS_ID is not
|
|
301
|
+
* below RSB_length, under every scheme; `repairSchemeBound` -- the object
|
|
302
|
+
* breaks its scheme's bound: reed-solomon SSB_length + RSB_length > 255, which
|
|
303
|
+
* also caps RS_ID at 253, or raptorq SSB_length + RSB_length - 1 > 2^24 - 1
|
|
304
|
+
* (draft-ramadan-moq-fec-core-00 7.5 and 10.3, -block-codes-00 7).
|
|
305
|
+
*/
|
|
306
|
+
export type RepairObjectReject = 'repairLength' | 'repairRsId' | 'repairSchemeBound';
|
|
307
|
+
/**
|
|
308
|
+
* Admission of one mmtp repair object under its instance's T and scheme. The
|
|
309
|
+
* caller names the instance (by the repair track it subscribed); nothing here
|
|
310
|
+
* infers it from the fields. `repairRsId` and `repairSchemeBound` carry the
|
|
311
|
+
* frame so the caller can first route an RSB_length below a held layer's
|
|
312
|
+
* O_i + P_i to the 7.3.2 stop, which takes precedence over the discard.
|
|
313
|
+
* `null`: not an iso repair packet, or SSB_length 0.
|
|
314
|
+
*/
|
|
315
|
+
export declare function admitMmtpRepairObject(packet: Uint8Array, header: MMTPHeader, symbolSize: number, algorithm: string | undefined): {
|
|
316
|
+
frame: MoqRepairFrame;
|
|
317
|
+
reject?: Exclude<RepairObjectReject, 'repairLength'>;
|
|
318
|
+
} | {
|
|
319
|
+
reject: 'repairLength';
|
|
320
|
+
} | null;
|
|
296
321
|
//# sourceMappingURL=mmtp.d.ts.map
|
package/dist/mmtp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmtp.d.ts","sourceRoot":"","sources":["../src/mmtp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mmtp.d.ts","sourceRoot":"","sources":["../src/mmtp.ts"],"names":[],"mappings":"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"}
|
package/dist/mmtp.js
CHANGED
|
@@ -611,13 +611,12 @@ export function parseMoqRepairFrame(frame) {
|
|
|
611
611
|
export function parseMoqRepairFrameWithHeader(frame, header) {
|
|
612
612
|
return moqRepairFrameFrom(frame, readRepairFecPayloadIdFields(frame, header));
|
|
613
613
|
}
|
|
614
|
-
function moqRepairFrameFrom(frame, repairId) {
|
|
614
|
+
function moqRepairFrameFrom(frame, repairId, checkRsId = true) {
|
|
615
615
|
if (!repairId)
|
|
616
616
|
return null;
|
|
617
617
|
const symbolData = frame.subarray(repairId.dataOffset);
|
|
618
|
-
if (repairId.
|
|
619
|
-
repairId.
|
|
620
|
-
repairId.rsId >= repairId.rsbLength ||
|
|
618
|
+
if (repairId.ssbLength === 0 ||
|
|
619
|
+
(checkRsId && repairId.rsId >= repairId.rsbLength) ||
|
|
621
620
|
symbolData.length === 0)
|
|
622
621
|
return null;
|
|
623
622
|
return {
|
|
@@ -629,6 +628,31 @@ function moqRepairFrameFrom(frame, repairId) {
|
|
|
629
628
|
symbolData,
|
|
630
629
|
};
|
|
631
630
|
}
|
|
631
|
+
/**
|
|
632
|
+
* Admission of one mmtp repair object under its instance's T and scheme. The
|
|
633
|
+
* caller names the instance (by the repair track it subscribed); nothing here
|
|
634
|
+
* infers it from the fields. `repairRsId` and `repairSchemeBound` carry the
|
|
635
|
+
* frame so the caller can first route an RSB_length below a held layer's
|
|
636
|
+
* O_i + P_i to the 7.3.2 stop, which takes precedence over the discard.
|
|
637
|
+
* `null`: not an iso repair packet, or SSB_length 0.
|
|
638
|
+
*/
|
|
639
|
+
export function admitMmtpRepairObject(packet, header, symbolSize, algorithm) {
|
|
640
|
+
if (header.packetType !== PACKET_TYPE_REPAIR || header.fecType !== 2)
|
|
641
|
+
return null;
|
|
642
|
+
if (header.headerLength !== MMTP_HEADER_SIZE || packet.length !== MMTP_HEADER_SIZE + REPAIR_FEC_PID_SIZE + symbolSize) {
|
|
643
|
+
return { reject: 'repairLength' };
|
|
644
|
+
}
|
|
645
|
+
const frame = moqRepairFrameFrom(packet, readRepairFecPayloadIdFields(packet, header), false);
|
|
646
|
+
if (!frame)
|
|
647
|
+
return null;
|
|
648
|
+
if (frame.rsId >= frame.rsbLength)
|
|
649
|
+
return { frame, reject: 'repairRsId' };
|
|
650
|
+
const blockSymbols = frame.ssbLength + frame.rsbLength;
|
|
651
|
+
if (algorithm === 'reed-solomon' ? blockSymbols > 255 : algorithm === 'raptorq' && blockSymbols - 1 > 0xffffff) {
|
|
652
|
+
return { frame, reject: 'repairSchemeBound' };
|
|
653
|
+
}
|
|
654
|
+
return { frame };
|
|
655
|
+
}
|
|
632
656
|
// The signalling-message parsers (9.3.4.2 payload header, AL-FEC message,
|
|
633
657
|
// PA/MPT) live in ./signalling.ts.
|
|
634
658
|
//# sourceMappingURL=mmtp.js.map
|
package/dist/mmtp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmtp.js","sourceRoot":"","sources":["../src/mmtp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mmtp.js","sourceRoot":"","sources":["../src/mmtp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The draft-ramadan-moq-multicast-
|
|
3
|
-
* for
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the only package
|
|
2
|
+
* The draft-ramadan-moq-multicast-02 endpoint and `auth` rules, written once
|
|
3
|
+
* for every receiver of the catalog: the receivers in `@blockcast/mmt-transport`
|
|
4
|
+
* and the container resolver ignore every endpoint an issue names (all of
|
|
5
|
+
* them when the issue is catalog-level, which leaves the broadcast no data).
|
|
6
|
+
* `validateCmsfMmtpCatalog` reports none of them as a catalog fault, so MoQ
|
|
7
|
+
* unicast stays usable. It lives here because mmt-base is the only package
|
|
8
|
+
* every receiver depends on.
|
|
8
9
|
*
|
|
9
|
-
* Draft: Blockcast/moqcast-draft@
|
|
10
|
-
*
|
|
10
|
+
* Draft: Blockcast/moqcast-draft@5f49172 (draft-ramadan-moq-multicast-02 as
|
|
11
|
+
* posted 2026-11-02), sections 4.1 and 7.2.6.
|
|
11
12
|
*/
|
|
12
13
|
export type MulticastJoinMode = "ssm" | "asm";
|
|
13
14
|
/** An endpoint's join mode and `S` (4.1): `sourceAddress` on SSM,
|
|
@@ -28,6 +29,24 @@ export interface MulticastCatalogIssue {
|
|
|
28
29
|
}
|
|
29
30
|
/** Canonical unpadded base64url of exactly 32 octets. */
|
|
30
31
|
export declare const ED25519_PUBLIC_KEY_BASE64URL: RegExp;
|
|
32
|
+
/** Defaults of an endpoint's `auth.maxAuthDelayMs` and `auth.manifestTimerMs` (7.2.6). */
|
|
33
|
+
export declare const BCP_DEFAULT_MAX_AUTH_DELAY_MS = 200;
|
|
34
|
+
export declare const BCP_DEFAULT_MANIFEST_TIMER_MS = 20;
|
|
35
|
+
/** The timing and mirror members of an endpoint's `auth` as a receiver uses them. */
|
|
36
|
+
export interface EndpointAuthTiming {
|
|
37
|
+
maxAuthDelayMs: number;
|
|
38
|
+
manifestTimerMs: number;
|
|
39
|
+
manifestTrack?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 7.2.6: a `maxAuthDelayMs` outside 50..1000 is clamped to the nearer bound;
|
|
43
|
+
* one that is not a JSON number, or an in-range one that is not an integer,
|
|
44
|
+
* is absent (200). A `manifestTimerMs` that is not a JSON number, or an
|
|
45
|
+
* integer-free value of at least 1, is absent (20); one below 1 makes the
|
|
46
|
+
* endpoint ignored, so it is returned here as is for the caller to refuse. A
|
|
47
|
+
* `manifestTrack` that is not a string is absent.
|
|
48
|
+
*/
|
|
49
|
+
export declare function endpointAuthTiming(auth: unknown): EndpointAuthTiming;
|
|
31
50
|
/**
|
|
32
51
|
* Join mode and `S` of one endpoint, or `undefined` when its fields disagree
|
|
33
52
|
* and a receiver must ignore it (4.1). `sourceAddress` alone selects the mode;
|
|
@@ -50,7 +69,7 @@ export declare const CATALOG_NAMESPACE: unique symbol;
|
|
|
50
69
|
*/
|
|
51
70
|
export declare function withCatalogNamespace<T extends object>(catalog: T, namespace: string): T;
|
|
52
71
|
/**
|
|
53
|
-
* Every draft -
|
|
72
|
+
* Every draft -02 4.1 / 7.2.6 violation in `catalog.multicast`, in document
|
|
54
73
|
* order. Packet-id, group-address and track-existence rules are not here; the
|
|
55
74
|
* container validator and the receivers already check those.
|
|
56
75
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multicast-catalog.d.ts","sourceRoot":"","sources":["../src/multicast-catalog.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"multicast-catalog.d.ts","sourceRoot":"","sources":["../src/multicast-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAC;AAE9C;uEACuE;AACvE,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,yBAAyB,GAClC,gBAAgB,GAChB,oBAAoB,GACpB,yBAAyB,GACzB,iBAAiB,CAAC;AAErB,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,yBAAyB,CAAC;IAChC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB;sEACkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,yDAAyD;AACzD,eAAO,MAAM,4BAA4B,QAA0C,CAAC;AAyBpF,0FAA0F;AAC1F,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAgBpE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,uBAAuB,GAAG,SAAS,CAY9F;AA8ED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,MAA2D,CAAC;AAEnG;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,CAEvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GACzC,qBAAqB,EAAE,CAuIzB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GACzC,WAAW,CAAC,MAAM,CAAC,CAOrB"}
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The draft-ramadan-moq-multicast-
|
|
3
|
-
* for
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the only package
|
|
2
|
+
* The draft-ramadan-moq-multicast-02 endpoint and `auth` rules, written once
|
|
3
|
+
* for every receiver of the catalog: the receivers in `@blockcast/mmt-transport`
|
|
4
|
+
* and the container resolver ignore every endpoint an issue names (all of
|
|
5
|
+
* them when the issue is catalog-level, which leaves the broadcast no data).
|
|
6
|
+
* `validateCmsfMmtpCatalog` reports none of them as a catalog fault, so MoQ
|
|
7
|
+
* unicast stays usable. It lives here because mmt-base is the only package
|
|
8
|
+
* every receiver depends on.
|
|
8
9
|
*
|
|
9
|
-
* Draft: Blockcast/moqcast-draft@
|
|
10
|
-
*
|
|
10
|
+
* Draft: Blockcast/moqcast-draft@5f49172 (draft-ramadan-moq-multicast-02 as
|
|
11
|
+
* posted 2026-11-02), sections 4.1 and 7.2.6.
|
|
11
12
|
*/
|
|
13
|
+
import { parseIpAddressLiteral } from "./ip-address.js";
|
|
12
14
|
/** Canonical unpadded base64url of exactly 32 octets. */
|
|
13
15
|
export const ED25519_PUBLIC_KEY_BASE64URL = /^[A-Za-z0-9_-]{42}[AEIMQUYcgkosw048]$/;
|
|
14
16
|
const UINT32_MAX = 0xffff_ffff;
|
|
15
17
|
const AUTH_MEMBERS = new Set(["scheme", "version", "sig", "keys", "minEpoch"]);
|
|
16
18
|
const KEY_MEMBERS = new Set(["kid", "publicKey", "firstEpoch"]);
|
|
19
|
+
// Draft -01's separate record port is no member here: a leftover one is an
|
|
20
|
+
// unknown member, so the endpoint is ignored (libmmt policy, fails closed).
|
|
17
21
|
const ENDPOINT_AUTH_MEMBERS = new Set([
|
|
18
|
-
"manifestPort",
|
|
19
22
|
"streamId",
|
|
20
23
|
"senderAddress",
|
|
21
24
|
"maxAuthDelayMs",
|
|
@@ -25,12 +28,40 @@ const ENDPOINT_AUTH_MEMBERS = new Set([
|
|
|
25
28
|
function isObject(value) {
|
|
26
29
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
27
30
|
}
|
|
28
|
-
function isNonEmptyString(value) {
|
|
29
|
-
return typeof value === "string" && value.trim().length > 0;
|
|
30
|
-
}
|
|
31
31
|
function isIntegerIn(value, min, max) {
|
|
32
32
|
return Number.isSafeInteger(value) && value >= min && value <= max;
|
|
33
33
|
}
|
|
34
|
+
/** Defaults of an endpoint's `auth.maxAuthDelayMs` and `auth.manifestTimerMs` (7.2.6). */
|
|
35
|
+
export const BCP_DEFAULT_MAX_AUTH_DELAY_MS = 200;
|
|
36
|
+
export const BCP_DEFAULT_MANIFEST_TIMER_MS = 20;
|
|
37
|
+
function isFiniteNumber(value) {
|
|
38
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 7.2.6: a `maxAuthDelayMs` outside 50..1000 is clamped to the nearer bound;
|
|
42
|
+
* one that is not a JSON number, or an in-range one that is not an integer,
|
|
43
|
+
* is absent (200). A `manifestTimerMs` that is not a JSON number, or an
|
|
44
|
+
* integer-free value of at least 1, is absent (20); one below 1 makes the
|
|
45
|
+
* endpoint ignored, so it is returned here as is for the caller to refuse. A
|
|
46
|
+
* `manifestTrack` that is not a string is absent.
|
|
47
|
+
*/
|
|
48
|
+
export function endpointAuthTiming(auth) {
|
|
49
|
+
const record = isObject(auth) ? auth : {};
|
|
50
|
+
const delay = record["maxAuthDelayMs"];
|
|
51
|
+
const timer = record["manifestTimerMs"];
|
|
52
|
+
const track = record["manifestTrack"];
|
|
53
|
+
const maxAuthDelayMs = !isFiniteNumber(delay)
|
|
54
|
+
? BCP_DEFAULT_MAX_AUTH_DELAY_MS
|
|
55
|
+
: delay < 50 ? 50 : delay > 1000 ? 1000 : Number.isInteger(delay) ? delay : BCP_DEFAULT_MAX_AUTH_DELAY_MS;
|
|
56
|
+
const manifestTimerMs = !isFiniteNumber(timer)
|
|
57
|
+
? BCP_DEFAULT_MANIFEST_TIMER_MS
|
|
58
|
+
: timer < 1 || Number.isSafeInteger(timer) ? timer : BCP_DEFAULT_MANIFEST_TIMER_MS;
|
|
59
|
+
return {
|
|
60
|
+
maxAuthDelayMs,
|
|
61
|
+
manifestTimerMs,
|
|
62
|
+
...(typeof track === "string" && track.length > 0 ? { manifestTrack: track } : {}),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
34
65
|
/**
|
|
35
66
|
* Join mode and `S` of one endpoint, or `undefined` when its fields disagree
|
|
36
67
|
* and a receiver must ignore it (4.1). `sourceAddress` alone selects the mode;
|
|
@@ -41,7 +72,7 @@ export function multicastEndpointSource(endpoint) {
|
|
|
41
72
|
if (!isObject(endpoint))
|
|
42
73
|
return undefined;
|
|
43
74
|
const sourceAddress = endpoint["sourceAddress"];
|
|
44
|
-
if (sourceAddress !== undefined && !
|
|
75
|
+
if (sourceAddress !== undefined && !parseIpAddressLiteral(sourceAddress))
|
|
45
76
|
return undefined;
|
|
46
77
|
const mode = sourceAddress === undefined ? "asm" : "ssm";
|
|
47
78
|
const protocol = endpoint["protocol"];
|
|
@@ -53,7 +84,7 @@ export function multicastEndpointSource(endpoint) {
|
|
|
53
84
|
return senderAddress === undefined ? { mode, source: sourceAddress } : undefined;
|
|
54
85
|
if (auth === undefined)
|
|
55
86
|
return { mode };
|
|
56
|
-
return
|
|
87
|
+
return parseIpAddressLiteral(senderAddress) ? { mode, source: senderAddress } : undefined;
|
|
57
88
|
}
|
|
58
89
|
function authIssues(auth) {
|
|
59
90
|
const base = "$.multicast.auth";
|
|
@@ -64,12 +95,12 @@ function authIssues(auth) {
|
|
|
64
95
|
return issue("", "auth must be an object");
|
|
65
96
|
const unknown = Object.keys(auth).filter(key => !AUTH_MEMBERS.has(key));
|
|
66
97
|
if (unknown.length > 0) {
|
|
67
|
-
return issue("", `auth has unknown member(s) ${unknown.join(", ")}; draft -
|
|
98
|
+
return issue("", `auth has unknown member(s) ${unknown.join(", ")}; draft -02 7.2.6 defines scheme, version, sig, keys and minEpoch`);
|
|
68
99
|
}
|
|
69
100
|
if (auth["scheme"] !== "bc-provenance")
|
|
70
101
|
return issue(".scheme", 'scheme must be "bc-provenance"');
|
|
71
102
|
if (auth["version"] !== 2)
|
|
72
|
-
return issue(".version", "version must be 2 (bc-provenance version 2, draft -
|
|
103
|
+
return issue(".version", "version must be 2 (bc-provenance version 2, draft -02 7.2)");
|
|
73
104
|
if (auth["sig"] !== "ed25519")
|
|
74
105
|
return issue(".sig", 'sig must be "ed25519"');
|
|
75
106
|
const keys = auth["keys"];
|
|
@@ -114,26 +145,19 @@ function endpointAuthIssue(endpoint, mode, at) {
|
|
|
114
145
|
const unknown = Object.keys(auth).filter(key => !ENDPOINT_AUTH_MEMBERS.has(key));
|
|
115
146
|
if (unknown.length > 0)
|
|
116
147
|
return { path: `${at}.auth`, message: `auth has unknown member(s) ${unknown.join(", ")}` };
|
|
117
|
-
if (!isIntegerIn(auth["manifestPort"], 1, 65535)) {
|
|
118
|
-
return { path: `${at}.auth.manifestPort`, message: "manifestPort must be an integer from 1 to 65535" };
|
|
119
|
-
}
|
|
120
148
|
if (!isIntegerIn(auth["streamId"], 0, UINT32_MAX)) {
|
|
121
149
|
return { path: `${at}.auth.streamId`, message: "streamId must be an unsigned 32-bit integer" };
|
|
122
150
|
}
|
|
123
151
|
if (mode === "ssm" && auth["senderAddress"] !== undefined) {
|
|
124
152
|
return { path: `${at}.auth.senderAddress`, message: "senderAddress must not appear on an SSM endpoint; S is sourceAddress" };
|
|
125
153
|
}
|
|
126
|
-
if (mode === "asm" && !
|
|
127
|
-
return { path: `${at}.auth.senderAddress`, message: "a protected ASM endpoint requires senderAddress" };
|
|
128
|
-
}
|
|
129
|
-
if (auth["maxAuthDelayMs"] !== undefined && !isIntegerIn(auth["maxAuthDelayMs"], 50, 1000)) {
|
|
130
|
-
return { path: `${at}.auth.maxAuthDelayMs`, message: "maxAuthDelayMs must be an integer from 50 to 1000" };
|
|
131
|
-
}
|
|
132
|
-
if (auth["manifestTimerMs"] !== undefined && !isIntegerIn(auth["manifestTimerMs"], 1, Number.MAX_SAFE_INTEGER)) {
|
|
133
|
-
return { path: `${at}.auth.manifestTimerMs`, message: "manifestTimerMs must be an integer of at least 1" };
|
|
154
|
+
if (mode === "asm" && !parseIpAddressLiteral(auth["senderAddress"])) {
|
|
155
|
+
return { path: `${at}.auth.senderAddress`, message: "a protected ASM endpoint requires senderAddress, an RFC 3986 IP address literal" };
|
|
134
156
|
}
|
|
135
|
-
|
|
136
|
-
|
|
157
|
+
// maxAuthDelayMs never ignores the endpoint (clamped or absent) and
|
|
158
|
+
// manifestTrack is absent when it is not a string: endpointAuthTiming.
|
|
159
|
+
if (endpointAuthTiming(auth).manifestTimerMs < 1) {
|
|
160
|
+
return { path: `${at}.auth.manifestTimerMs`, message: "manifestTimerMs must be at least 1" };
|
|
137
161
|
}
|
|
138
162
|
if (!isIntegerIn(endpoint["bandwidth"], 1, Number.MAX_SAFE_INTEGER)) {
|
|
139
163
|
return { path: `${at}.bandwidth`, message: "a protected endpoint requires bandwidth, which bounds the receiver's hold queues" };
|
|
@@ -157,7 +181,7 @@ export function withCatalogNamespace(catalog, namespace) {
|
|
|
157
181
|
return { ...catalog, [CATALOG_NAMESPACE]: namespace };
|
|
158
182
|
}
|
|
159
183
|
/**
|
|
160
|
-
* Every draft -
|
|
184
|
+
* Every draft -02 4.1 / 7.2.6 violation in `catalog.multicast`, in document
|
|
161
185
|
* order. Packet-id, group-address and track-existence rules are not here; the
|
|
162
186
|
* container validator and the receivers already check those.
|
|
163
187
|
*
|
|
@@ -178,7 +202,7 @@ export function multicastCatalogIssues(catalog, options = {}) {
|
|
|
178
202
|
issues.push({
|
|
179
203
|
code: "multicast_auth",
|
|
180
204
|
path: '$["multicast.auth"]',
|
|
181
|
-
message: 'the root "multicast.auth" key is retired; declare auth as multicast.auth (draft -
|
|
205
|
+
message: 'the root "multicast.auth" key is retired; declare auth as multicast.auth (draft -02 7.2.6)',
|
|
182
206
|
});
|
|
183
207
|
}
|
|
184
208
|
const multicast = catalog["multicast"];
|
|
@@ -212,7 +236,7 @@ export function multicastCatalogIssues(catalog, options = {}) {
|
|
|
212
236
|
}
|
|
213
237
|
const protocol = endpoint["protocol"];
|
|
214
238
|
if (protocol !== undefined && protocol !== "ssm" && protocol !== "asm") {
|
|
215
|
-
fail("multicast_endpoint", `${at}.protocol`, `protocol must be "ssm" or "asm"; a bearer such as ${JSON.stringify(protocol)} is a networkSource entry (draft -
|
|
239
|
+
fail("multicast_endpoint", `${at}.protocol`, `protocol must be "ssm" or "asm"; a bearer such as ${JSON.stringify(protocol)} is a networkSource entry (draft -02 4.2)`);
|
|
216
240
|
continue;
|
|
217
241
|
}
|
|
218
242
|
const hasAuth = endpoint["auth"] !== undefined;
|
|
@@ -222,9 +246,21 @@ export function multicastCatalogIssues(catalog, options = {}) {
|
|
|
222
246
|
: "auth names no key without multicast.auth; a receiver ignores this endpoint");
|
|
223
247
|
continue;
|
|
224
248
|
}
|
|
249
|
+
// 7.2.6: addresses are RFC 3986 IP literals, never names; 4.1: S and G
|
|
250
|
+
// of one family, or the endpoint's fields are mutually inconsistent.
|
|
225
251
|
const sourceAddress = endpoint["sourceAddress"];
|
|
226
|
-
|
|
227
|
-
|
|
252
|
+
const sourceBytes = sourceAddress === undefined ? undefined : parseIpAddressLiteral(sourceAddress);
|
|
253
|
+
if (sourceAddress !== undefined && !sourceBytes) {
|
|
254
|
+
fail("multicast_endpoint", `${at}.sourceAddress`, "sourceAddress must be an RFC 3986 IPv4address or IPv6address literal");
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const groupBytes = parseIpAddressLiteral(endpoint["groupAddress"]);
|
|
258
|
+
if (!groupBytes) {
|
|
259
|
+
fail("multicast_endpoint", `${at}.groupAddress`, "groupAddress must be an RFC 3986 IPv4address or IPv6address literal");
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
if (sourceBytes && sourceBytes.length !== groupBytes.length) {
|
|
263
|
+
fail("multicast_endpoint", `${at}.sourceAddress`, "sourceAddress and groupAddress are of different address families");
|
|
228
264
|
continue;
|
|
229
265
|
}
|
|
230
266
|
const mode = sourceAddress === undefined ? "asm" : "ssm";
|
|
@@ -245,7 +281,13 @@ export function multicastCatalogIssues(catalog, options = {}) {
|
|
|
245
281
|
continue;
|
|
246
282
|
}
|
|
247
283
|
}
|
|
248
|
-
|
|
284
|
+
const source = multicastEndpointSource(endpoint);
|
|
285
|
+
const senderBytes = source?.mode === "asm" && source.source !== undefined ? parseIpAddressLiteral(source.source) : undefined;
|
|
286
|
+
if (senderBytes && senderBytes.length !== groupBytes.length) {
|
|
287
|
+
fail("multicast_endpoint_auth", `${at}.auth.senderAddress`, "senderAddress and groupAddress are of different address families");
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
sources[index] = source;
|
|
249
291
|
const refs = Array.isArray(endpoint["tracks"]) ? endpoint["tracks"] : [];
|
|
250
292
|
for (let refIndex = 0; refIndex < refs.length; refIndex++) {
|
|
251
293
|
const ref = refs[refIndex];
|
|
@@ -261,42 +303,28 @@ export function multicastCatalogIssues(catalog, options = {}) {
|
|
|
261
303
|
}
|
|
262
304
|
}
|
|
263
305
|
}
|
|
264
|
-
// One endpoint object per (S, G, port), and
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
//
|
|
306
|
+
// One endpoint object per (S, G, port) (4.1), and every protected endpoint
|
|
307
|
+
// sharing its (S, G, port) with another is ignored (7.2.6), so both sides
|
|
308
|
+
// are named. The key is the parsed addresses, never their spelling: an
|
|
309
|
+
// address of one family never matches the other (an IPv4-mapped address
|
|
310
|
+
// is IPv6), and "232.0.0.1" and "ff3e::1" never collide with each other.
|
|
311
|
+
const addressKey = (text) => {
|
|
312
|
+
const bytes = text === undefined ? undefined : parseIpAddressLiteral(text);
|
|
313
|
+
return bytes ? `${bytes.length}:${bytes.join(".")}` : "-";
|
|
314
|
+
};
|
|
268
315
|
const tupleOf = (index) => {
|
|
269
316
|
const endpoint = endpoints[index];
|
|
270
|
-
|
|
271
|
-
return {
|
|
272
|
-
sg: JSON.stringify([sources[index].source ?? null, endpoint["groupAddress"]]),
|
|
273
|
-
port: endpoint["port"],
|
|
274
|
-
manifestPort: isObject(auth) ? auth["manifestPort"] : undefined,
|
|
275
|
-
};
|
|
317
|
+
return `${addressKey(sources[index].source)}|${addressKey(endpoint["groupAddress"])}|${endpoint["port"]}`;
|
|
276
318
|
};
|
|
277
319
|
for (let index = 0; index < endpoints.length; index++) {
|
|
278
320
|
if (!sources[index])
|
|
279
321
|
continue;
|
|
280
322
|
const own = tupleOf(index);
|
|
281
|
-
const at = `$.multicast.endpoints[${index}]`;
|
|
282
|
-
if (own.manifestPort !== undefined && own.manifestPort === own.port) {
|
|
283
|
-
issues.push({ code: "multicast_endpoint_auth", path: `${at}.auth.manifestPort`, message: "manifestPort must differ from the endpoint's own port", endpointIndex: index });
|
|
284
|
-
continue;
|
|
285
|
-
}
|
|
286
323
|
for (let other = 0; other < endpoints.length; other++) {
|
|
287
|
-
if (other === index || !sources[other])
|
|
288
|
-
continue;
|
|
289
|
-
const peer = tupleOf(other);
|
|
290
|
-
if (peer.sg !== own.sg)
|
|
324
|
+
if (other === index || !sources[other] || tupleOf(other) !== own)
|
|
291
325
|
continue;
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
break;
|
|
295
|
-
}
|
|
296
|
-
if (own.manifestPort !== undefined && (own.manifestPort === peer.port || own.manifestPort === peer.manifestPort)) {
|
|
297
|
-
issues.push({ code: "multicast_endpoint_auth", path: `${at}.auth.manifestPort`, message: `manifestPort is a port or manifestPort of endpoint ${other} on the same (S, G)`, endpointIndex: index });
|
|
298
|
-
break;
|
|
299
|
-
}
|
|
326
|
+
issues.push({ code: "multicast_endpoint", path: `$.multicast.endpoints[${index}].port`, message: `(S, G, port) is shared with endpoint ${other}; one endpoint object per multicast tuple`, endpointIndex: index });
|
|
327
|
+
break;
|
|
300
328
|
}
|
|
301
329
|
}
|
|
302
330
|
return issues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multicast-catalog.js","sourceRoot":"","sources":["../src/multicast-catalog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multicast-catalog.js","sourceRoot":"","sources":["../src/multicast-catalog.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blockcast/mmt-base",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Shared MMTP parsing primitives and protocol constants (zero FEC dependency). Hosts MMTP_HEADER_SIZE, parseMMTPHeader, extractMFUPayload and friends, plus wire constants such as DEFAULT_AMT_RELAY_PORT, so @blockcast/mmt-fec, @blockcast/mmt-container and @blockcast/mmt-transport can share one definition without a circular dep.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from './ntp-short.js'
|
|
|
4
4
|
export * from './signalling.js'
|
|
5
5
|
export * from './serial-number.js'
|
|
6
6
|
export * from './fec-block-profile.js'
|
|
7
|
+
export * from './ip-address.js'
|
|
7
8
|
export * from './multicast-catalog.js'
|
|
8
9
|
export * from './fec-catalog.js'
|
|
9
10
|
export * from './fec-bindings.js'
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IP address literals as draft-ramadan-moq-multicast-02 7.2.6 requires them of
|
|
3
|
+
* `sourceAddress`, `groupAddress` and `senderAddress`: the IPv4address or
|
|
4
|
+
* IPv6address form of RFC 3986 3.2.2. Dotted decimal with no leading zero in
|
|
5
|
+
* any dec-octet (the ls32 tail of an IPv6 literal included); IPv6 h16 groups
|
|
6
|
+
* may carry leading zeros in either hex case; no brackets, no zone identifier,
|
|
7
|
+
* never a name. Draft: Blockcast/moqcast-draft@5f49172.
|
|
8
|
+
*
|
|
9
|
+
* Addresses compare as IP addresses, never as strings, and an address of one
|
|
10
|
+
* family never matches one of the other: an IPv4-mapped IPv6 address is of the
|
|
11
|
+
* IPv6 family, so it parses to 16 octets and never equals its IPv4 address.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const DEC_OCTET = /^(?:0|[1-9]\d{0,2})$/;
|
|
15
|
+
const H16 = /^[0-9A-Fa-f]{1,4}$/;
|
|
16
|
+
|
|
17
|
+
function parseIpv4(text: string): number[] | undefined {
|
|
18
|
+
const fields = text.split(".");
|
|
19
|
+
if (fields.length !== 4) return undefined;
|
|
20
|
+
const octets: number[] = [];
|
|
21
|
+
for (const field of fields) {
|
|
22
|
+
if (!DEC_OCTET.test(field)) return undefined;
|
|
23
|
+
const value = Number(field);
|
|
24
|
+
if (value > 255) return undefined;
|
|
25
|
+
octets.push(value);
|
|
26
|
+
}
|
|
27
|
+
return octets;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function parseIpv6(text: string): Uint8Array | undefined {
|
|
31
|
+
const halves = text.split("::");
|
|
32
|
+
if (halves.length > 2) return undefined;
|
|
33
|
+
const groupsOf = (part: string) => (part === "" ? [] : part.split(":"));
|
|
34
|
+
const left = groupsOf(halves[0]!);
|
|
35
|
+
const right = halves.length === 2 ? groupsOf(halves[1]!) : [];
|
|
36
|
+
const words: number[][] = [];
|
|
37
|
+
const all = [...left, ...right];
|
|
38
|
+
// The ls32 dotted tail ends the literal: the last group, never before "::".
|
|
39
|
+
const last = halves.length === 2 && right.length === 0 ? -1 : all.length - 1;
|
|
40
|
+
for (let index = 0; index < all.length; index++) {
|
|
41
|
+
const group = all[index]!;
|
|
42
|
+
if (index === last && group.includes(".")) {
|
|
43
|
+
const v4 = parseIpv4(group);
|
|
44
|
+
if (!v4) return undefined;
|
|
45
|
+
words.push([(v4[0]! << 8) | v4[1]!, (v4[2]! << 8) | v4[3]!]);
|
|
46
|
+
} else if (H16.test(group)) {
|
|
47
|
+
words.push([Number.parseInt(group, 16)]);
|
|
48
|
+
} else {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const leftWords = words.slice(0, left.length).flat();
|
|
53
|
+
const rightWords = words.slice(left.length).flat();
|
|
54
|
+
const missing = 8 - leftWords.length - rightWords.length;
|
|
55
|
+
if (halves.length === 2 ? missing < 1 : missing !== 0) return undefined;
|
|
56
|
+
const out = new Uint8Array(16);
|
|
57
|
+
[...leftWords, ...new Array<number>(missing).fill(0), ...rightWords].forEach((word, index) => {
|
|
58
|
+
out[index * 2] = word >> 8;
|
|
59
|
+
out[index * 2 + 1] = word & 0xff;
|
|
60
|
+
});
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** The octets of an RFC 3986 IPv4address (4) or IPv6address (16), or `undefined`. */
|
|
65
|
+
export function parseIpAddressLiteral(text: unknown): Uint8Array | undefined {
|
|
66
|
+
if (typeof text !== "string") return undefined;
|
|
67
|
+
if (text.includes(":")) return parseIpv6(text);
|
|
68
|
+
const v4 = parseIpv4(text);
|
|
69
|
+
return v4 ? Uint8Array.from(v4) : undefined;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Whether two address literals name one address of one family. Unparseable never matches. */
|
|
73
|
+
export function sameIpAddress(a: unknown, b: unknown): boolean {
|
|
74
|
+
const x = parseIpAddressLiteral(a);
|
|
75
|
+
const y = parseIpAddressLiteral(b);
|
|
76
|
+
return x !== undefined && y !== undefined && x.length === y.length && x.every((octet, index) => octet === y[index]);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* One spelling per address: dotted decimal for IPv4, RFC 5952 for IPv6
|
|
81
|
+
* (lowercase, no leading zeros, the longest run of two or more zero groups,
|
|
82
|
+
* leftmost on a tie, as "::"; an IPv4-mapped address in hex like any other).
|
|
83
|
+
* `undefined` for text that is not an address literal.
|
|
84
|
+
*/
|
|
85
|
+
export function canonicalIpAddress(text: unknown): string | undefined {
|
|
86
|
+
const bytes = parseIpAddressLiteral(text);
|
|
87
|
+
if (!bytes) return undefined;
|
|
88
|
+
if (bytes.length === 4) return bytes.join(".");
|
|
89
|
+
const words = Array.from({ length: 8 }, (_, index) => (bytes[index * 2]! << 8) | bytes[index * 2 + 1]!);
|
|
90
|
+
let bestStart = -1;
|
|
91
|
+
let bestLength = 1;
|
|
92
|
+
for (let start = 0; start < 8; ) {
|
|
93
|
+
let end = start;
|
|
94
|
+
while (end < 8 && words[end] === 0) end++;
|
|
95
|
+
if (end - start > bestLength) {
|
|
96
|
+
bestStart = start;
|
|
97
|
+
bestLength = end - start;
|
|
98
|
+
}
|
|
99
|
+
start = end === start ? start + 1 : end;
|
|
100
|
+
}
|
|
101
|
+
const hex = words.map(word => word.toString(16));
|
|
102
|
+
if (bestStart < 0) return hex.join(":");
|
|
103
|
+
return `${hex.slice(0, bestStart).join(":")}::${hex.slice(bestStart + bestLength).join(":")}`;
|
|
104
|
+
}
|
package/src/mmtp.ts
CHANGED
|
@@ -886,14 +886,14 @@ export function parseMoqRepairFrameWithHeader(
|
|
|
886
886
|
function moqRepairFrameFrom(
|
|
887
887
|
frame: Uint8Array,
|
|
888
888
|
repairId: ReturnType<typeof readRepairFecPayloadIdFields>,
|
|
889
|
+
checkRsId = true,
|
|
889
890
|
): MoqRepairFrame | null {
|
|
890
891
|
if (!repairId) return null
|
|
891
892
|
|
|
892
893
|
const symbolData = frame.subarray(repairId.dataOffset)
|
|
893
894
|
if (
|
|
894
|
-
repairId.rsbLength === 0 ||
|
|
895
895
|
repairId.ssbLength === 0 ||
|
|
896
|
-
repairId.rsId >= repairId.rsbLength ||
|
|
896
|
+
(checkRsId && repairId.rsId >= repairId.rsbLength) ||
|
|
897
897
|
symbolData.length === 0
|
|
898
898
|
) return null
|
|
899
899
|
|
|
@@ -907,5 +907,45 @@ function moqRepairFrameFrom(
|
|
|
907
907
|
}
|
|
908
908
|
}
|
|
909
909
|
|
|
910
|
+
/**
|
|
911
|
+
* Why a repair object of an mmtp track is discarded on admission:
|
|
912
|
+
* `repairLength` -- the object is not exactly 12 + 13 + T bytes with a
|
|
913
|
+
* 12-byte MMTP header (C = 0, X = 0; draft-ramadan-moq-mmt-02 7.3, judged
|
|
914
|
+
* before any Repair FEC Payload ID field is read); `repairRsId` -- RS_ID is not
|
|
915
|
+
* below RSB_length, under every scheme; `repairSchemeBound` -- the object
|
|
916
|
+
* breaks its scheme's bound: reed-solomon SSB_length + RSB_length > 255, which
|
|
917
|
+
* also caps RS_ID at 253, or raptorq SSB_length + RSB_length - 1 > 2^24 - 1
|
|
918
|
+
* (draft-ramadan-moq-fec-core-00 7.5 and 10.3, -block-codes-00 7).
|
|
919
|
+
*/
|
|
920
|
+
export type RepairObjectReject = 'repairLength' | 'repairRsId' | 'repairSchemeBound'
|
|
921
|
+
|
|
922
|
+
/**
|
|
923
|
+
* Admission of one mmtp repair object under its instance's T and scheme. The
|
|
924
|
+
* caller names the instance (by the repair track it subscribed); nothing here
|
|
925
|
+
* infers it from the fields. `repairRsId` and `repairSchemeBound` carry the
|
|
926
|
+
* frame so the caller can first route an RSB_length below a held layer's
|
|
927
|
+
* O_i + P_i to the 7.3.2 stop, which takes precedence over the discard.
|
|
928
|
+
* `null`: not an iso repair packet, or SSB_length 0.
|
|
929
|
+
*/
|
|
930
|
+
export function admitMmtpRepairObject(
|
|
931
|
+
packet: Uint8Array,
|
|
932
|
+
header: MMTPHeader,
|
|
933
|
+
symbolSize: number,
|
|
934
|
+
algorithm: string | undefined,
|
|
935
|
+
): { frame: MoqRepairFrame; reject?: Exclude<RepairObjectReject, 'repairLength'> } | { reject: 'repairLength' } | null {
|
|
936
|
+
if (header.packetType !== PACKET_TYPE_REPAIR || header.fecType !== 2) return null
|
|
937
|
+
if (header.headerLength !== MMTP_HEADER_SIZE || packet.length !== MMTP_HEADER_SIZE + REPAIR_FEC_PID_SIZE + symbolSize) {
|
|
938
|
+
return { reject: 'repairLength' }
|
|
939
|
+
}
|
|
940
|
+
const frame = moqRepairFrameFrom(packet, readRepairFecPayloadIdFields(packet, header), false)
|
|
941
|
+
if (!frame) return null
|
|
942
|
+
if (frame.rsId >= frame.rsbLength) return { frame, reject: 'repairRsId' }
|
|
943
|
+
const blockSymbols = frame.ssbLength + frame.rsbLength
|
|
944
|
+
if (algorithm === 'reed-solomon' ? blockSymbols > 255 : algorithm === 'raptorq' && blockSymbols - 1 > 0xffffff) {
|
|
945
|
+
return { frame, reject: 'repairSchemeBound' }
|
|
946
|
+
}
|
|
947
|
+
return { frame }
|
|
948
|
+
}
|
|
949
|
+
|
|
910
950
|
// The signalling-message parsers (9.3.4.2 payload header, AL-FEC message,
|
|
911
951
|
// PA/MPT) live in ./signalling.ts.
|
package/src/multicast-catalog.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The draft-ramadan-moq-multicast-
|
|
3
|
-
* for
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the only package
|
|
2
|
+
* The draft-ramadan-moq-multicast-02 endpoint and `auth` rules, written once
|
|
3
|
+
* for every receiver of the catalog: the receivers in `@blockcast/mmt-transport`
|
|
4
|
+
* and the container resolver ignore every endpoint an issue names (all of
|
|
5
|
+
* them when the issue is catalog-level, which leaves the broadcast no data).
|
|
6
|
+
* `validateCmsfMmtpCatalog` reports none of them as a catalog fault, so MoQ
|
|
7
|
+
* unicast stays usable. It lives here because mmt-base is the only package
|
|
8
|
+
* every receiver depends on.
|
|
8
9
|
*
|
|
9
|
-
* Draft: Blockcast/moqcast-draft@
|
|
10
|
-
*
|
|
10
|
+
* Draft: Blockcast/moqcast-draft@5f49172 (draft-ramadan-moq-multicast-02 as
|
|
11
|
+
* posted 2026-11-02), sections 4.1 and 7.2.6.
|
|
11
12
|
*/
|
|
12
13
|
|
|
14
|
+
import { parseIpAddressLiteral } from "./ip-address.js";
|
|
15
|
+
|
|
13
16
|
export type MulticastJoinMode = "ssm" | "asm";
|
|
14
17
|
|
|
15
18
|
/** An endpoint's join mode and `S` (4.1): `sourceAddress` on SSM,
|
|
@@ -41,8 +44,9 @@ export const ED25519_PUBLIC_KEY_BASE64URL = /^[A-Za-z0-9_-]{42}[AEIMQUYcgkosw048
|
|
|
41
44
|
const UINT32_MAX = 0xffff_ffff;
|
|
42
45
|
const AUTH_MEMBERS = new Set(["scheme", "version", "sig", "keys", "minEpoch"]);
|
|
43
46
|
const KEY_MEMBERS = new Set(["kid", "publicKey", "firstEpoch"]);
|
|
47
|
+
// Draft -01's separate record port is no member here: a leftover one is an
|
|
48
|
+
// unknown member, so the endpoint is ignored (libmmt policy, fails closed).
|
|
44
49
|
const ENDPOINT_AUTH_MEMBERS = new Set([
|
|
45
|
-
"manifestPort",
|
|
46
50
|
"streamId",
|
|
47
51
|
"senderAddress",
|
|
48
52
|
"maxAuthDelayMs",
|
|
@@ -56,14 +60,51 @@ function isObject(value: unknown): value is JsonObject {
|
|
|
56
60
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
57
61
|
}
|
|
58
62
|
|
|
59
|
-
function isNonEmptyString(value: unknown): value is string {
|
|
60
|
-
return typeof value === "string" && value.trim().length > 0;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
63
|
function isIntegerIn(value: unknown, min: number, max: number): value is number {
|
|
64
64
|
return Number.isSafeInteger(value) && (value as number) >= min && (value as number) <= max;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
/** Defaults of an endpoint's `auth.maxAuthDelayMs` and `auth.manifestTimerMs` (7.2.6). */
|
|
68
|
+
export const BCP_DEFAULT_MAX_AUTH_DELAY_MS = 200;
|
|
69
|
+
export const BCP_DEFAULT_MANIFEST_TIMER_MS = 20;
|
|
70
|
+
|
|
71
|
+
/** The timing and mirror members of an endpoint's `auth` as a receiver uses them. */
|
|
72
|
+
export interface EndpointAuthTiming {
|
|
73
|
+
maxAuthDelayMs: number;
|
|
74
|
+
manifestTimerMs: number;
|
|
75
|
+
manifestTrack?: string;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function isFiniteNumber(value: unknown): value is number {
|
|
79
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* 7.2.6: a `maxAuthDelayMs` outside 50..1000 is clamped to the nearer bound;
|
|
84
|
+
* one that is not a JSON number, or an in-range one that is not an integer,
|
|
85
|
+
* is absent (200). A `manifestTimerMs` that is not a JSON number, or an
|
|
86
|
+
* integer-free value of at least 1, is absent (20); one below 1 makes the
|
|
87
|
+
* endpoint ignored, so it is returned here as is for the caller to refuse. A
|
|
88
|
+
* `manifestTrack` that is not a string is absent.
|
|
89
|
+
*/
|
|
90
|
+
export function endpointAuthTiming(auth: unknown): EndpointAuthTiming {
|
|
91
|
+
const record = isObject(auth) ? auth : {};
|
|
92
|
+
const delay = record["maxAuthDelayMs"];
|
|
93
|
+
const timer = record["manifestTimerMs"];
|
|
94
|
+
const track = record["manifestTrack"];
|
|
95
|
+
const maxAuthDelayMs = !isFiniteNumber(delay)
|
|
96
|
+
? BCP_DEFAULT_MAX_AUTH_DELAY_MS
|
|
97
|
+
: delay < 50 ? 50 : delay > 1000 ? 1000 : Number.isInteger(delay) ? delay : BCP_DEFAULT_MAX_AUTH_DELAY_MS;
|
|
98
|
+
const manifestTimerMs = !isFiniteNumber(timer)
|
|
99
|
+
? BCP_DEFAULT_MANIFEST_TIMER_MS
|
|
100
|
+
: timer < 1 || Number.isSafeInteger(timer) ? timer : BCP_DEFAULT_MANIFEST_TIMER_MS;
|
|
101
|
+
return {
|
|
102
|
+
maxAuthDelayMs,
|
|
103
|
+
manifestTimerMs,
|
|
104
|
+
...(typeof track === "string" && track.length > 0 ? { manifestTrack: track } : {}),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
67
108
|
/**
|
|
68
109
|
* Join mode and `S` of one endpoint, or `undefined` when its fields disagree
|
|
69
110
|
* and a receiver must ignore it (4.1). `sourceAddress` alone selects the mode;
|
|
@@ -73,7 +114,7 @@ function isIntegerIn(value: unknown, min: number, max: number): value is number
|
|
|
73
114
|
export function multicastEndpointSource(endpoint: unknown): MulticastEndpointSource | undefined {
|
|
74
115
|
if (!isObject(endpoint)) return undefined;
|
|
75
116
|
const sourceAddress = endpoint["sourceAddress"];
|
|
76
|
-
if (sourceAddress !== undefined && !
|
|
117
|
+
if (sourceAddress !== undefined && !parseIpAddressLiteral(sourceAddress)) return undefined;
|
|
77
118
|
const mode: MulticastJoinMode = sourceAddress === undefined ? "asm" : "ssm";
|
|
78
119
|
const protocol = endpoint["protocol"];
|
|
79
120
|
if (protocol !== undefined && protocol !== mode) return undefined;
|
|
@@ -81,7 +122,7 @@ export function multicastEndpointSource(endpoint: unknown): MulticastEndpointSou
|
|
|
81
122
|
const senderAddress = isObject(auth) ? auth["senderAddress"] : undefined;
|
|
82
123
|
if (mode === "ssm") return senderAddress === undefined ? { mode, source: sourceAddress as string } : undefined;
|
|
83
124
|
if (auth === undefined) return { mode };
|
|
84
|
-
return
|
|
125
|
+
return parseIpAddressLiteral(senderAddress) ? { mode, source: senderAddress as string } : undefined;
|
|
85
126
|
}
|
|
86
127
|
|
|
87
128
|
function authIssues(auth: unknown): MulticastCatalogIssue[] {
|
|
@@ -92,10 +133,10 @@ function authIssues(auth: unknown): MulticastCatalogIssue[] {
|
|
|
92
133
|
if (!isObject(auth)) return issue("", "auth must be an object");
|
|
93
134
|
const unknown = Object.keys(auth).filter(key => !AUTH_MEMBERS.has(key));
|
|
94
135
|
if (unknown.length > 0) {
|
|
95
|
-
return issue("", `auth has unknown member(s) ${unknown.join(", ")}; draft -
|
|
136
|
+
return issue("", `auth has unknown member(s) ${unknown.join(", ")}; draft -02 7.2.6 defines scheme, version, sig, keys and minEpoch`);
|
|
96
137
|
}
|
|
97
138
|
if (auth["scheme"] !== "bc-provenance") return issue(".scheme", 'scheme must be "bc-provenance"');
|
|
98
|
-
if (auth["version"] !== 2) return issue(".version", "version must be 2 (bc-provenance version 2, draft -
|
|
139
|
+
if (auth["version"] !== 2) return issue(".version", "version must be 2 (bc-provenance version 2, draft -02 7.2)");
|
|
99
140
|
if (auth["sig"] !== "ed25519") return issue(".sig", 'sig must be "ed25519"');
|
|
100
141
|
const keys = auth["keys"];
|
|
101
142
|
if (!Array.isArray(keys) || keys.length < 1 || keys.length > 4) {
|
|
@@ -140,26 +181,19 @@ function endpointAuthIssue(
|
|
|
140
181
|
if (!isObject(auth)) return { path: `${at}.auth`, message: "auth must be an object" };
|
|
141
182
|
const unknown = Object.keys(auth).filter(key => !ENDPOINT_AUTH_MEMBERS.has(key));
|
|
142
183
|
if (unknown.length > 0) return { path: `${at}.auth`, message: `auth has unknown member(s) ${unknown.join(", ")}` };
|
|
143
|
-
if (!isIntegerIn(auth["manifestPort"], 1, 65535)) {
|
|
144
|
-
return { path: `${at}.auth.manifestPort`, message: "manifestPort must be an integer from 1 to 65535" };
|
|
145
|
-
}
|
|
146
184
|
if (!isIntegerIn(auth["streamId"], 0, UINT32_MAX)) {
|
|
147
185
|
return { path: `${at}.auth.streamId`, message: "streamId must be an unsigned 32-bit integer" };
|
|
148
186
|
}
|
|
149
187
|
if (mode === "ssm" && auth["senderAddress"] !== undefined) {
|
|
150
188
|
return { path: `${at}.auth.senderAddress`, message: "senderAddress must not appear on an SSM endpoint; S is sourceAddress" };
|
|
151
189
|
}
|
|
152
|
-
if (mode === "asm" && !
|
|
153
|
-
return { path: `${at}.auth.senderAddress`, message: "a protected ASM endpoint requires senderAddress" };
|
|
154
|
-
}
|
|
155
|
-
if (auth["maxAuthDelayMs"] !== undefined && !isIntegerIn(auth["maxAuthDelayMs"], 50, 1000)) {
|
|
156
|
-
return { path: `${at}.auth.maxAuthDelayMs`, message: "maxAuthDelayMs must be an integer from 50 to 1000" };
|
|
190
|
+
if (mode === "asm" && !parseIpAddressLiteral(auth["senderAddress"])) {
|
|
191
|
+
return { path: `${at}.auth.senderAddress`, message: "a protected ASM endpoint requires senderAddress, an RFC 3986 IP address literal" };
|
|
157
192
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
return { path: `${at}.auth.manifestTrack`, message: "manifestTrack must be a non-empty string" };
|
|
193
|
+
// maxAuthDelayMs never ignores the endpoint (clamped or absent) and
|
|
194
|
+
// manifestTrack is absent when it is not a string: endpointAuthTiming.
|
|
195
|
+
if (endpointAuthTiming(auth).manifestTimerMs < 1) {
|
|
196
|
+
return { path: `${at}.auth.manifestTimerMs`, message: "manifestTimerMs must be at least 1" };
|
|
163
197
|
}
|
|
164
198
|
if (!isIntegerIn(endpoint["bandwidth"], 1, Number.MAX_SAFE_INTEGER)) {
|
|
165
199
|
return { path: `${at}.bandwidth`, message: "a protected endpoint requires bandwidth, which bounds the receiver's hold queues" };
|
|
@@ -186,7 +220,7 @@ export function withCatalogNamespace<T extends object>(catalog: T, namespace: st
|
|
|
186
220
|
}
|
|
187
221
|
|
|
188
222
|
/**
|
|
189
|
-
* Every draft -
|
|
223
|
+
* Every draft -02 4.1 / 7.2.6 violation in `catalog.multicast`, in document
|
|
190
224
|
* order. Packet-id, group-address and track-existence rules are not here; the
|
|
191
225
|
* container validator and the receivers already check those.
|
|
192
226
|
*
|
|
@@ -209,7 +243,7 @@ export function multicastCatalogIssues(
|
|
|
209
243
|
issues.push({
|
|
210
244
|
code: "multicast_auth",
|
|
211
245
|
path: '$["multicast.auth"]',
|
|
212
|
-
message: 'the root "multicast.auth" key is retired; declare auth as multicast.auth (draft -
|
|
246
|
+
message: 'the root "multicast.auth" key is retired; declare auth as multicast.auth (draft -02 7.2.6)',
|
|
213
247
|
});
|
|
214
248
|
}
|
|
215
249
|
const multicast = catalog["multicast"];
|
|
@@ -241,7 +275,7 @@ export function multicastCatalogIssues(
|
|
|
241
275
|
}
|
|
242
276
|
const protocol = endpoint["protocol"];
|
|
243
277
|
if (protocol !== undefined && protocol !== "ssm" && protocol !== "asm") {
|
|
244
|
-
fail("multicast_endpoint", `${at}.protocol`, `protocol must be "ssm" or "asm"; a bearer such as ${JSON.stringify(protocol)} is a networkSource entry (draft -
|
|
278
|
+
fail("multicast_endpoint", `${at}.protocol`, `protocol must be "ssm" or "asm"; a bearer such as ${JSON.stringify(protocol)} is a networkSource entry (draft -02 4.2)`);
|
|
245
279
|
continue;
|
|
246
280
|
}
|
|
247
281
|
const hasAuth = endpoint["auth"] !== undefined;
|
|
@@ -255,9 +289,21 @@ export function multicastCatalogIssues(
|
|
|
255
289
|
);
|
|
256
290
|
continue;
|
|
257
291
|
}
|
|
292
|
+
// 7.2.6: addresses are RFC 3986 IP literals, never names; 4.1: S and G
|
|
293
|
+
// of one family, or the endpoint's fields are mutually inconsistent.
|
|
258
294
|
const sourceAddress = endpoint["sourceAddress"];
|
|
259
|
-
|
|
260
|
-
|
|
295
|
+
const sourceBytes = sourceAddress === undefined ? undefined : parseIpAddressLiteral(sourceAddress);
|
|
296
|
+
if (sourceAddress !== undefined && !sourceBytes) {
|
|
297
|
+
fail("multicast_endpoint", `${at}.sourceAddress`, "sourceAddress must be an RFC 3986 IPv4address or IPv6address literal");
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
const groupBytes = parseIpAddressLiteral(endpoint["groupAddress"]);
|
|
301
|
+
if (!groupBytes) {
|
|
302
|
+
fail("multicast_endpoint", `${at}.groupAddress`, "groupAddress must be an RFC 3986 IPv4address or IPv6address literal");
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (sourceBytes && sourceBytes.length !== groupBytes.length) {
|
|
306
|
+
fail("multicast_endpoint", `${at}.sourceAddress`, "sourceAddress and groupAddress are of different address families");
|
|
261
307
|
continue;
|
|
262
308
|
}
|
|
263
309
|
const mode: MulticastJoinMode = sourceAddress === undefined ? "asm" : "ssm";
|
|
@@ -278,7 +324,13 @@ export function multicastCatalogIssues(
|
|
|
278
324
|
continue;
|
|
279
325
|
}
|
|
280
326
|
}
|
|
281
|
-
|
|
327
|
+
const source = multicastEndpointSource(endpoint);
|
|
328
|
+
const senderBytes = source?.mode === "asm" && source.source !== undefined ? parseIpAddressLiteral(source.source) : undefined;
|
|
329
|
+
if (senderBytes && senderBytes.length !== groupBytes.length) {
|
|
330
|
+
fail("multicast_endpoint_auth", `${at}.auth.senderAddress`, "senderAddress and groupAddress are of different address families");
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
sources[index] = source;
|
|
282
334
|
|
|
283
335
|
const refs = Array.isArray(endpoint["tracks"]) ? endpoint["tracks"] : [];
|
|
284
336
|
for (let refIndex = 0; refIndex < refs.length; refIndex++) {
|
|
@@ -294,39 +346,26 @@ export function multicastCatalogIssues(
|
|
|
294
346
|
}
|
|
295
347
|
}
|
|
296
348
|
|
|
297
|
-
// One endpoint object per (S, G, port), and
|
|
298
|
-
//
|
|
299
|
-
//
|
|
300
|
-
//
|
|
349
|
+
// One endpoint object per (S, G, port) (4.1), and every protected endpoint
|
|
350
|
+
// sharing its (S, G, port) with another is ignored (7.2.6), so both sides
|
|
351
|
+
// are named. The key is the parsed addresses, never their spelling: an
|
|
352
|
+
// address of one family never matches the other (an IPv4-mapped address
|
|
353
|
+
// is IPv6), and "232.0.0.1" and "ff3e::1" never collide with each other.
|
|
354
|
+
const addressKey = (text: unknown) => {
|
|
355
|
+
const bytes = text === undefined ? undefined : parseIpAddressLiteral(text);
|
|
356
|
+
return bytes ? `${bytes.length}:${bytes.join(".")}` : "-";
|
|
357
|
+
};
|
|
301
358
|
const tupleOf = (index: number) => {
|
|
302
359
|
const endpoint = endpoints[index] as JsonObject;
|
|
303
|
-
|
|
304
|
-
return {
|
|
305
|
-
sg: JSON.stringify([sources[index]!.source ?? null, endpoint["groupAddress"]]),
|
|
306
|
-
port: endpoint["port"],
|
|
307
|
-
manifestPort: isObject(auth) ? auth["manifestPort"] : undefined,
|
|
308
|
-
};
|
|
360
|
+
return `${addressKey(sources[index]!.source)}|${addressKey(endpoint["groupAddress"])}|${endpoint["port"]}`;
|
|
309
361
|
};
|
|
310
362
|
for (let index = 0; index < endpoints.length; index++) {
|
|
311
363
|
if (!sources[index]) continue;
|
|
312
364
|
const own = tupleOf(index);
|
|
313
|
-
const at = `$.multicast.endpoints[${index}]`;
|
|
314
|
-
if (own.manifestPort !== undefined && own.manifestPort === own.port) {
|
|
315
|
-
issues.push({ code: "multicast_endpoint_auth", path: `${at}.auth.manifestPort`, message: "manifestPort must differ from the endpoint's own port", endpointIndex: index });
|
|
316
|
-
continue;
|
|
317
|
-
}
|
|
318
365
|
for (let other = 0; other < endpoints.length; other++) {
|
|
319
|
-
if (other === index || !sources[other]) continue;
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
if (peer.port === own.port) {
|
|
323
|
-
issues.push({ code: "multicast_endpoint", path: `${at}.port`, message: `(S, G, port) is shared with endpoint ${other}; one endpoint object per multicast tuple`, endpointIndex: index });
|
|
324
|
-
break;
|
|
325
|
-
}
|
|
326
|
-
if (own.manifestPort !== undefined && (own.manifestPort === peer.port || own.manifestPort === peer.manifestPort)) {
|
|
327
|
-
issues.push({ code: "multicast_endpoint_auth", path: `${at}.auth.manifestPort`, message: `manifestPort is a port or manifestPort of endpoint ${other} on the same (S, G)`, endpointIndex: index });
|
|
328
|
-
break;
|
|
329
|
-
}
|
|
366
|
+
if (other === index || !sources[other] || tupleOf(other) !== own) continue;
|
|
367
|
+
issues.push({ code: "multicast_endpoint", path: `$.multicast.endpoints[${index}].port`, message: `(S, G, port) is shared with endpoint ${other}; one endpoint object per multicast tuple`, endpointIndex: index });
|
|
368
|
+
break;
|
|
330
369
|
}
|
|
331
370
|
}
|
|
332
371
|
return issues;
|