@@ -830,37 +830,8 @@ export abstract class TransportImpl<
830830 let sctpStreamParameters : SctpStreamParameters | undefined ;
831831 let sctpStreamId : number ;
832832
833- // If this is not a DirectTransport, use sctpStreamParameters from the
834- // DataProducer (if type 'sctp') unless they are given in method parameters.
835- if ( this . type !== 'direct' ) {
836- type = 'sctp' ;
837-
838- sctpStreamParameters =
839- utils . clone < SctpStreamParameters | undefined > (
840- dataProducer . sctpStreamParameters
841- ) ?? ( { } as SctpStreamParameters ) ;
842-
843- // Override if given.
844- if ( ordered !== undefined ) {
845- sctpStreamParameters . ordered = ordered ;
846- }
847-
848- if ( maxPacketLifeTime !== undefined ) {
849- sctpStreamParameters . maxPacketLifeTime = maxPacketLifeTime ;
850- }
851-
852- if ( maxRetransmits !== undefined ) {
853- sctpStreamParameters . maxRetransmits = maxRetransmits ;
854- }
855-
856- // This may throw.
857- sctpStreamId = this . getNextSctpStreamId ( ) ;
858-
859- this . #sctpStreamIds! [ sctpStreamId ] = 1 ;
860- sctpStreamParameters . streamId = sctpStreamId ;
861- }
862833 // If this is a DirectTransport, sctpStreamParameters must not be used.
863- else {
834+ if ( this . type === 'direct' ) {
864835 type = 'direct' ;
865836
866837 if (
@@ -873,6 +844,47 @@ export abstract class TransportImpl<
873844 ) ;
874845 }
875846 }
847+ // If this is not a DirectTransport, use sctpStreamParameters from the
848+ // DataProducer (if type 'sctp') unless they are given in method parameters.
849+ // If the DataProducer is type 'sctp' and no sctpStreamParameters are given,
850+ // generate proper ones.
851+ else {
852+ type = 'sctp' ;
853+
854+ // This may throw.
855+ sctpStreamId = this . getNextSctpStreamId ( ) ;
856+
857+ sctpStreamParameters = dataProducer . sctpStreamParameters
858+ ? utils . clone < SctpStreamParameters > ( dataProducer . sctpStreamParameters )
859+ : {
860+ streamId : sctpStreamId ,
861+ ordered : true ,
862+ } ;
863+
864+ this . #sctpStreamIds! [ sctpStreamId ] = 1 ;
865+ sctpStreamParameters . streamId = sctpStreamId ;
866+
867+ if ( ordered !== undefined ) {
868+ sctpStreamParameters . ordered = ordered ;
869+
870+ if ( ordered ) {
871+ sctpStreamParameters . maxPacketLifeTime = undefined ;
872+ sctpStreamParameters . maxRetransmits = undefined ;
873+ }
874+ }
875+
876+ if ( ! ordered ) {
877+ if ( maxPacketLifeTime !== undefined ) {
878+ sctpStreamParameters . ordered = false ;
879+ sctpStreamParameters . maxPacketLifeTime = maxPacketLifeTime ;
880+ }
881+
882+ if ( maxRetransmits !== undefined ) {
883+ sctpStreamParameters . ordered = false ;
884+ sctpStreamParameters . maxRetransmits = maxRetransmits ;
885+ }
886+ }
887+ }
876888
877889 const { label, protocol } = dataProducer ;
878890 const dataConsumerId = utils . generateUUIDv4 ( ) ;
0 commit comments