diable prflx over relay for firefox (#1226)

* Disable prflx over relay for firefox

* remove ice lite change

* solve comment

* disable prflx for publisher too
This commit is contained in:
cnderrauber
2022-12-13 14:32:05 +08:00
committed by GitHub
parent 80a4dc574a
commit da829fcf8e
3 changed files with 23 additions and 1 deletions

View File

@@ -11,8 +11,20 @@ type ClientInfo struct {
*livekit.ClientInfo
}
func (c ClientInfo) isFirefox() bool {
return c.ClientInfo != nil && strings.EqualFold(c.ClientInfo.Browser, "firefox")
}
func (c ClientInfo) isSafari() bool {
return c.ClientInfo != nil && strings.EqualFold(c.ClientInfo.Browser, "safari")
}
func (c ClientInfo) SupportsAudioRED() bool {
return c.ClientInfo != nil && c.ClientInfo.Browser != "firefox" && c.ClientInfo.Browser != "safari"
return !c.isFirefox() && !c.isSafari()
}
func (c ClientInfo) SupportPrflxOverRelay() bool {
return !c.isFirefox()
}
// CompareVersion compares two semver versions

View File

@@ -32,6 +32,7 @@ type WebRTCConfig struct {
TCPMuxListener *net.TCPListener
Publisher DirectionConfig
Subscriber DirectionConfig
ExternalIP string
}
type ReceiverConfig struct {
@@ -83,6 +84,7 @@ func NewWebRTCConfig(conf *config.Config, externalIP string) (*WebRTCConfig, err
s.SetIPFilter(filter)
}
var confExternalIP string
// force it to the node IPs that the user has set
if externalIP != "" && (conf.RTC.UseExternalIP || (conf.RTC.NodeIP != "" && !conf.RTC.NodeIPAutoGenerated)) {
if conf.RTC.UseExternalIP {
@@ -92,6 +94,7 @@ func NewWebRTCConfig(conf *config.Config, externalIP string) (*WebRTCConfig, err
}
logger.Debugw("using external IPs", "ips", ips)
s.SetNAT1To1IPs(ips, webrtc.ICECandidateTypeHost)
confExternalIP = externalIP
} else {
s.SetNAT1To1IPs([]string{externalIP}, webrtc.ICECandidateTypeHost)
}
@@ -237,6 +240,7 @@ func NewWebRTCConfig(conf *config.Config, externalIP string) (*WebRTCConfig, err
TCPMuxListener: tcpListener,
Publisher: publisherConfig,
Subscriber: subscriberConfig,
ExternalIP: confExternalIP,
}, nil
}

View File

@@ -231,6 +231,7 @@ func newPeerConnection(params TransportParams, onBandwidthEstimator func(estimat
se := params.Config.SettingEngine
se.DisableMediaEngineCopy(true)
//
// Disable SRTP replay protection (https://datatracker.ietf.org/doc/html/rfc3711#page-15).
// Needed due to lack of RTX stream support in Pion.
@@ -256,6 +257,11 @@ func newPeerConnection(params TransportParams, onBandwidthEstimator func(estimat
se.SetDTLSRetransmissionInterval(dtlsRetransmissionInterval)
se.SetICETimeouts(iceDisconnectedTimeout, iceFailedTimeout, iceKeepaliveInterval)
// if client don't support prflx over relay, we should not expose private address to it, use single external ip as host candidate
if !params.ClientInfo.SupportPrflxOverRelay() && params.Config.ExternalIP != "" {
se.SetNAT1To1IPs([]string{params.Config.ExternalIP}, webrtc.ICECandidateTypeHost)
}
lf := serverlogger.NewLoggerFactory(params.Logger)
if lf != nil {
se.LoggerFactory = lf