@torrent-tv/proxy 2.55.9 → 2.55.10
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/CHANGELOG.md +4 -0
- package/bin/cli.js +18 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
## 2.55.10
|
|
2
|
+
|
|
3
|
+
- **Change**: Add `--sctp-debug` (off by default). When enabled, the proxy calls `node-datachannel.initLogger('Verbose')` early so SCTP-level lines (`usrsctp: …`) become visible. Useful only with an image rebuilt with `SCTP_DEBUG=ON` (addon 0.48.0) — there they carry the SACK `a_rwnd` and gap information that separates the two remaining hypotheses for the delivery-side freeze of 2026-08-24/25.
|
|
4
|
+
|
|
1
5
|
## 2.55.9
|
|
2
6
|
|
|
3
7
|
- **New**: A send queue that stays wedged for over 30 s now records the wire itself. Field session 2026-08-24 (`research/dead-channel-2026-08-24.md`): the proxy counted bytes as sent that never reached the viewer's SCTP stack, and every counter above the wire reported success for 88 minutes — the two candidate causes inside SCTP separate by one look at the packets (duplicate SACKs naming a missing TSN with no retransmission vs SACKs advertising `a_rwnd=0`), but occurrences are rare, so waiting to be asked meant waiting forever. When the stuck warning crosses 30 s, the proxy spawns a bounded tcpdump on the WebRTC UDP port filtered to that session's remote address: snaplen 128 B, ring of 4 × 30 s files beside the core dumps (`--state-dir`), killed after 120 s + grace, one capture at a time with a 10-minute cooldown, old captures pruned at startup the way core dumps are. Where no tcpdump exists it degrades to a single log line; the address travels into the filter only as a validated IPv4/IPv6 literal (zone suffixes stripped), spawned as an argv array without a shell.
|
package/bin/cli.js
CHANGED
|
@@ -97,6 +97,7 @@ program
|
|
|
97
97
|
DEFAULT_SEGMENT_FORMAT_ID
|
|
98
98
|
)
|
|
99
99
|
.option("--token <token>", "Registration token", "")
|
|
100
|
+
.option("--sctp-debug", "Enable verbose SCTP debug logging (SCTP_DEBUG build only)")
|
|
100
101
|
.addHelpText("after", HELP_EXAMPLES);
|
|
101
102
|
|
|
102
103
|
program.parse(process.argv);
|
|
@@ -282,6 +283,23 @@ async function shutdown(signal) {
|
|
|
282
283
|
|
|
283
284
|
try {
|
|
284
285
|
logToFile(options.logFile);
|
|
286
|
+
// Diagnostic: verbose SCTP logging. The binary must have been built with
|
|
287
|
+
// SCTP_DEBUG=ON (addon 0.48.0); this flag merely sets the log level.
|
|
288
|
+
if (options.sctpDebug) {
|
|
289
|
+
try {
|
|
290
|
+
const dc = await import("node-datachannel");
|
|
291
|
+
const initLogger =
|
|
292
|
+
// node-datachannel exports initLogger at the top level; be defensive
|
|
293
|
+
// about CJS-default interop.
|
|
294
|
+
dc.initLogger ?? dc.default?.initLogger ?? null;
|
|
295
|
+
if (typeof initLogger === "function") {
|
|
296
|
+
initLogger("Verbose");
|
|
297
|
+
logger.info("SCTP debug verbose logging enabled");
|
|
298
|
+
}
|
|
299
|
+
} catch (error) {
|
|
300
|
+
logger.warn(`Failed to enable SCTP debug: ${error?.message ?? error}`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
285
303
|
if (transcodeAudio) {
|
|
286
304
|
assertFfmpegAvailability();
|
|
287
305
|
}
|