package webrtc import ( "time" "github.com/pions/webrtc/pkg/ice" ) var defaultSettingEngine = newSettingEngine() // SetEphemeralUDPPortRange limits the pool of ephemeral ports that // ICE UDP connections can allocate from. This setting currently only // affects host candidates, not server reflexive candidates. func SetEphemeralUDPPortRange(portMin, portMax uint16) error { return defaultSettingEngine.SetEphemeralUDPPortRange(portMin, portMax) } // DetachDataChannels enables detaching data channels. When enabled // data channels have to be detached in the OnOpen callback using the // RTCDataChannel.Detach method. func DetachDataChannels() { defaultSettingEngine.DetachDataChannels() } // SetConnectionTimeout sets the amount of silence needed on a given candidate pair // before the ICE agent considers the pair timed out. func SetConnectionTimeout(connectionTimeout, keepAlive time.Duration) { defaultSettingEngine.SetConnectionTimeout(connectionTimeout, keepAlive) } // settingEngine allows influencing behavior in ways that are not // supported by the WebRTC API. This allows us to support additional // use-cases without deviating from the WebRTC API elsewhere. type settingEngine struct { EphemeralUDP struct { PortMin uint16 PortMax uint16 } Detach struct { DataChannels bool } Timeout struct { ICEConnection time.Duration ICEKeepalive time.Duration } } // DetachDataChannels enables detaching data channels. When enabled // data channels have to be detached in the OnOpen callback using the // RTCDataChannel.Detach method. func (e *settingEngine) DetachDataChannels() { e.Detach.DataChannels = true } // SetConnectionTimeout sets the amount of silence needed on a given candidate pair // before the ICE agent considers the pair timed out. func (e *settingEngine) SetConnectionTimeout(connectionTimeout, keepAlive time.Duration) { e.Timeout.ICEConnection = connectionTimeout e.Timeout.ICEKeepalive = keepAlive } // SetEphemeralUDPPortRange limits the pool of ephemeral ports that // ICE UDP connections can allocate from. This setting currently only // affects host candidates, not server reflexive candidates. func (e *settingEngine) SetEphemeralUDPPortRange(portMin, portMax uint16) error { if portMax < portMin { return ice.ErrPort } e.EphemeralUDP.PortMin = portMin e.EphemeralUDP.PortMax = portMax return nil } func newSettingEngine() *settingEngine { return new(settingEngine) }