From 6bf6435922761dcdc821170177ea33525066fe98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20Baz=20Castillo?= Date: Thu, 30 Apr 2026 13:08:20 +0200 Subject: [PATCH] Add `transport.getDataChannelMaxMessageSize()` # Details - In a send `Transport` it returns the maximum DataChannel message size that it can send. - In a receive `Transport` it returns the maximum DataChannel message size that it can receive. - Note that it can return `undefined` (if DataChannels is not enabled). --- src/Transport.ts | 4 ++++ src/handlers/Chrome111.ts | 4 ++++ src/handlers/Chrome74.ts | 4 ++++ src/handlers/FakeHandler.ts | 4 ++++ src/handlers/Firefox120.ts | 4 ++++ src/handlers/HandlerInterface.ts | 2 ++ src/handlers/ReactNative106.ts | 4 ++++ src/handlers/Safari12.ts | 4 ++++ 8 files changed, 30 insertions(+) diff --git a/src/Transport.ts b/src/Transport.ts index 02dba8b4..612d68fc 100644 --- a/src/Transport.ts +++ b/src/Transport.ts @@ -875,6 +875,10 @@ export class Transport< }, 'transport.consumeData()'); } + getDataChannelMaxMessageSize(): number | undefined { + return this._handler.getDataChannelMaxMessageSize(); + } + // This method is guaranteed to never throw. private createPendingConsumers(): void { this._consumerCreationInProgress = true; diff --git a/src/handlers/Chrome111.ts b/src/handlers/Chrome111.ts index 221e701e..8e3e23b9 100644 --- a/src/handlers/Chrome111.ts +++ b/src/handlers/Chrome111.ts @@ -1240,6 +1240,10 @@ export class Chrome111 return { dataChannel }; } + getDataChannelMaxMessageSize(): number | undefined { + return this._pc.sctp?.maxMessageSize; + } + private async setupTransport({ localDtlsRole, localSdpObject, diff --git a/src/handlers/Chrome74.ts b/src/handlers/Chrome74.ts index e02815a8..271f57b8 100644 --- a/src/handlers/Chrome74.ts +++ b/src/handlers/Chrome74.ts @@ -1246,6 +1246,10 @@ export class Chrome74 return { dataChannel }; } + getDataChannelMaxMessageSize(): number | undefined { + return this._pc.sctp?.maxMessageSize; + } + private async setupTransport({ localDtlsRole, localSdpObject, diff --git a/src/handlers/FakeHandler.ts b/src/handlers/FakeHandler.ts index 72a2cc84..5f08072b 100644 --- a/src/handlers/FakeHandler.ts +++ b/src/handlers/FakeHandler.ts @@ -453,6 +453,10 @@ export class FakeHandler return { dataChannel }; } + getDataChannelMaxMessageSize(): number | undefined { + return 500000; + } + private async setupTransport({ localDtlsRole, // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/src/handlers/Firefox120.ts b/src/handlers/Firefox120.ts index 4cc8f3f3..bcf3ae4c 100644 --- a/src/handlers/Firefox120.ts +++ b/src/handlers/Firefox120.ts @@ -1201,6 +1201,10 @@ export class Firefox120 return { dataChannel }; } + getDataChannelMaxMessageSize(): number | undefined { + return this._pc.sctp?.maxMessageSize; + } + private async setupTransport({ localDtlsRole, localSdpObject, diff --git a/src/handlers/HandlerInterface.ts b/src/handlers/HandlerInterface.ts index e0e9db2d..94dc09d4 100644 --- a/src/handlers/HandlerInterface.ts +++ b/src/handlers/HandlerInterface.ts @@ -186,4 +186,6 @@ export abstract class HandlerInterface extends EnhancedEventEmitter; + + abstract getDataChannelMaxMessageSize(): number | undefined; } diff --git a/src/handlers/ReactNative106.ts b/src/handlers/ReactNative106.ts index 32b30d25..b6fa7972 100644 --- a/src/handlers/ReactNative106.ts +++ b/src/handlers/ReactNative106.ts @@ -1297,6 +1297,10 @@ export class ReactNative106 return { dataChannel }; } + getDataChannelMaxMessageSize(): number | undefined { + return this._pc.sctp?.maxMessageSize; + } + private async setupTransport({ localDtlsRole, localSdpObject, diff --git a/src/handlers/Safari12.ts b/src/handlers/Safari12.ts index 5beb6f1f..470c8868 100644 --- a/src/handlers/Safari12.ts +++ b/src/handlers/Safari12.ts @@ -1249,6 +1249,10 @@ export class Safari12 return { dataChannel }; } + getDataChannelMaxMessageSize(): number | undefined { + return this._pc.sctp?.maxMessageSize; + } + private async setupTransport({ localDtlsRole, localSdpObject,