From 460cb34d80716af9cc1090c15db39e745a686c78 Mon Sep 17 00:00:00 2001 From: Zoltan Papp Date: Mon, 29 May 2023 13:50:40 +0200 Subject: [PATCH] Add force relay conn env var for debug purpose (#904) Add force relay conn env var for debug purpose. Move another conn related env settings into a common go file. --- client/internal/peer/conn.go | 39 ++++------------------ client/internal/peer/env_config.go | 53 ++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 32 deletions(-) create mode 100644 client/internal/peer/env_config.go diff --git a/client/internal/peer/conn.go b/client/internal/peer/conn.go index 088010ef332..9a3ef106bae 100644 --- a/client/internal/peer/conn.go +++ b/client/internal/peer/conn.go @@ -4,8 +4,6 @@ import ( "context" "fmt" "net" - "os" - "strconv" "strings" "sync" "time" @@ -23,9 +21,6 @@ import ( ) const ( - envICEKeepAliveIntervalSec = "NB_ICE_KEEP_ALIVE_INTERVAL_SEC" - envICEDisconnectedTimeoutSec = "NB_ICE_DISCONNECTED_TIMEOUT_SEC" - iceKeepAliveDefault = 4 * time.Second iceDisconnectedTimeoutDefault = 6 * time.Second ) @@ -161,13 +156,14 @@ func (conn *Conn) reCreateAgent() error { log.Errorf("failed to create pion's stdnet: %s", err) } - iceKeepAlive, iceDisconnectedTimeout := readICEAgentConfigProperties() + iceKeepAlive := iceKeepAlive() + iceDisconnectedTimeout := iceDisconnectedTimeout() agentConfig := &ice.AgentConfig{ MulticastDNSMode: ice.MulticastDNSModeDisabled, NetworkTypes: []ice.NetworkType{ice.NetworkTypeUDP4, ice.NetworkTypeUDP6}, Urls: conn.config.StunTurn, - CandidateTypes: []ice.CandidateType{ice.CandidateTypeHost, ice.CandidateTypeServerReflexive, ice.CandidateTypeRelay}, + CandidateTypes: conn.candidateTypes(), FailedTimeout: &failedTimeout, InterfaceFilter: stdnet.InterfaceFilter(conn.config.InterfaceBlackList), UDPMux: conn.config.UDPMux, @@ -206,32 +202,11 @@ func (conn *Conn) reCreateAgent() error { return nil } -func readICEAgentConfigProperties() (time.Duration, time.Duration) { - iceKeepAlive := iceKeepAliveDefault - iceDisconnectedTimeout := iceDisconnectedTimeoutDefault - - keepAliveEnv := os.Getenv(envICEKeepAliveIntervalSec) - if keepAliveEnv != "" { - log.Debugf("setting ICE keep alive interval to %s seconds", keepAliveEnv) - keepAliveEnvSec, err := strconv.Atoi(keepAliveEnv) - if err == nil { - iceKeepAlive = time.Duration(keepAliveEnvSec) * time.Second - } else { - log.Warnf("invalid value %s set for %s, using default %v", keepAliveEnv, envICEKeepAliveIntervalSec, iceKeepAlive) - } - } - - disconnectedTimeoutEnv := os.Getenv(envICEDisconnectedTimeoutSec) - if disconnectedTimeoutEnv != "" { - log.Debugf("setting ICE disconnected timeout to %s seconds", disconnectedTimeoutEnv) - disconnectedTimeoutSec, err := strconv.Atoi(disconnectedTimeoutEnv) - if err == nil { - iceDisconnectedTimeout = time.Duration(disconnectedTimeoutSec) * time.Second - } else { - log.Warnf("invalid value %s set for %s, using default %v", disconnectedTimeoutEnv, envICEDisconnectedTimeoutSec, iceDisconnectedTimeout) - } +func (conn *Conn) candidateTypes() []ice.CandidateType { + if hasICEForceRelayConn() { + return []ice.CandidateType{ice.CandidateTypeRelay} } - return iceKeepAlive, iceDisconnectedTimeout + return []ice.CandidateType{ice.CandidateTypeHost, ice.CandidateTypeServerReflexive, ice.CandidateTypeRelay} } // Open opens connection to the remote peer starting ICE candidate gathering process. diff --git a/client/internal/peer/env_config.go b/client/internal/peer/env_config.go new file mode 100644 index 00000000000..540bc413ea7 --- /dev/null +++ b/client/internal/peer/env_config.go @@ -0,0 +1,53 @@ +package peer + +import ( + "os" + "strconv" + "strings" + "time" + + log "github.com/sirupsen/logrus" +) + +const ( + envICEKeepAliveIntervalSec = "NB_ICE_KEEP_ALIVE_INTERVAL_SEC" + envICEDisconnectedTimeoutSec = "NB_ICE_DISCONNECTED_TIMEOUT_SEC" + envICEForceRelayConn = "NB_ICE_FORCE_RELAY_CONN" +) + +func iceKeepAlive() time.Duration { + keepAliveEnv := os.Getenv(envICEKeepAliveIntervalSec) + if keepAliveEnv == "" { + return iceKeepAliveDefault + } + + log.Debugf("setting ICE keep alive interval to %s seconds", keepAliveEnv) + keepAliveEnvSec, err := strconv.Atoi(keepAliveEnv) + if err != nil { + log.Warnf("invalid value %s set for %s, using default %v", keepAliveEnv, envICEKeepAliveIntervalSec, iceKeepAliveDefault) + return iceKeepAliveDefault + } + + return time.Duration(keepAliveEnvSec) * time.Second +} + +func iceDisconnectedTimeout() time.Duration { + disconnectedTimeoutEnv := os.Getenv(envICEDisconnectedTimeoutSec) + if disconnectedTimeoutEnv == "" { + return iceDisconnectedTimeoutDefault + } + + log.Debugf("setting ICE disconnected timeout to %s seconds", disconnectedTimeoutEnv) + disconnectedTimeoutSec, err := strconv.Atoi(disconnectedTimeoutEnv) + if err != nil { + log.Warnf("invalid value %s set for %s, using default %v", disconnectedTimeoutEnv, envICEDisconnectedTimeoutSec, iceDisconnectedTimeoutDefault) + return iceDisconnectedTimeoutDefault + } + + return time.Duration(disconnectedTimeoutSec) * time.Second +} + +func hasICEForceRelayConn() bool { + disconnectedTimeoutEnv := os.Getenv(envICEForceRelayConn) + return strings.ToLower(disconnectedTimeoutEnv) == "true" +}