From 616f69c88bb44fac711c8c29f7bfbf0ec19e1ebd Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Wed, 2 Nov 2022 12:48:36 +0300 Subject: [PATCH] Cache public IP for 5 min --- pkg/webrtc/helper.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/pkg/webrtc/helper.go b/pkg/webrtc/helper.go index 284f01c1..55953744 100644 --- a/pkg/webrtc/helper.go +++ b/pkg/webrtc/helper.go @@ -9,6 +9,7 @@ import ( "net" "strconv" "strings" + "time" ) func NewCandidate(address string) (string, error) { @@ -38,7 +39,7 @@ func NewCandidate(address string) (string, error) { func LookupIP(address string) (string, error) { if strings.HasPrefix(address, "stun:") { - ip, err := GetPublicIP() + ip, err := GetCachedPublicIP() if err != nil { return "", err } @@ -99,6 +100,24 @@ func GetPublicIP() (net.IP, error) { return xorAddr.IP, nil } +var cachedIP net.IP +var cachedTS time.Time + +func GetCachedPublicIP() (net.IP, error) { + now := time.Now() + if now.After(cachedTS) { + newIP, err := GetPublicIP() + if err == nil { + cachedIP = newIP + cachedTS = now.Add(time.Minute * 5) + } else if cachedIP == nil { + return nil, err + } + } + + return cachedIP, nil +} + func IsIP(host string) bool { for _, i := range host { if i >= 'A' {