Skip to content

Commit

Permalink
Add SetSCTPRTOMax to SettingEngine
Browse files Browse the repository at this point in the history
Allows the user to cap the retranmission timeout, this change adds
RTOMax to SettingEngine and pass it on when creating the SCTP Assocation
  • Loading branch information
daonb authored and Sean-Der committed Mar 18, 2024
1 parent 1dbcf67 commit fb82fff
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
5 changes: 4 additions & 1 deletion sctptransport.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ type SCTPTransport struct {

api *API
log logging.LeveledLogger
// maximum retransmission timeout
rtoMax float64
}

// NewSCTPTransport creates a new SCTPTransport.
Expand Down Expand Up @@ -105,12 +107,13 @@ func (r *SCTPTransport) Start(SCTPCapabilities) error {
if dtlsTransport == nil || dtlsTransport.conn == nil {
return errSCTPTransportDTLS
}

rtoMax := float64(r.api.settingEngine.sctp.rtoMax) / float64(time.Millisecond)
sctpAssociation, err := sctp.Client(sctp.Config{
NetConn: dtlsTransport.conn,
MaxReceiveBufferSize: r.api.settingEngine.sctp.maxReceiveBufferSize,
EnableZeroChecksum: r.api.settingEngine.sctp.enableZeroChecksum,
LoggerFactory: r.api.settingEngine.LoggerFactory,
RTOMax: rtoMax,
})
if err != nil {
return err
Expand Down
7 changes: 7 additions & 0 deletions settingengine.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ type SettingEngine struct {
sctp struct {
maxReceiveBufferSize uint32
enableZeroChecksum bool
rtoMax time.Duration
}
sdpMediaLevelFingerprints bool
answeringDTLSRole DTLSRole
Expand Down Expand Up @@ -445,3 +446,9 @@ func (e *SettingEngine) EnableSCTPZeroChecksum(isEnabled bool) {
func (e *SettingEngine) SetDTLSCustomerCipherSuites(customCipherSuites func() []dtls.CipherSuite) {
e.dtls.customCipherSuites = customCipherSuites
}

// SetSCTPRTOMax sets the maximum retransmission timeout.
// Leave this 0 for the default timeout.
func (e *SettingEngine) SetSCTPRTOMax(rtoMax time.Duration) {
e.sctp.rtoMax = rtoMax
}
9 changes: 9 additions & 0 deletions settingengine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,3 +269,12 @@ func TestSetSCTPMaxReceiverBufferSize(t *testing.T) {
s.SetSCTPMaxReceiveBufferSize(expSize)
assert.Equal(t, expSize, s.sctp.maxReceiveBufferSize)
}

func TestSetSCTPRTOMax(t *testing.T) {
s := SettingEngine{}
assert.Equal(t, time.Duration(0), s.sctp.rtoMax)

expSize := time.Second
s.SetSCTPRTOMax(expSize)
assert.Equal(t, expSize, s.sctp.rtoMax)
}

0 comments on commit fb82fff

Please sign in to comment.