Skip to content

Commit c93d710

Browse files
Use TURN to establish external IP (#340)
This makes the code consistent with other services.
1 parent 43afb28 commit c93d710

File tree

1 file changed

+16
-25
lines changed

1 file changed

+16
-25
lines changed

pkg/sip/config.go

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@
1515
package sip
1616

1717
import (
18-
"encoding/json"
18+
"context"
1919
"fmt"
20-
"io"
2120
"net"
22-
"net/http"
2321
"net/netip"
22+
"time"
2423

24+
"github.com/livekit/mediatransportutil/pkg/rtcconfig"
25+
"github.com/livekit/protocol/logger"
2526
"github.com/livekit/sip/pkg/config"
27+
"github.com/pkg/errors"
2628
)
2729

2830
func GetServiceConfig(conf *config.Config) (*ServiceConfig, error) {
@@ -65,29 +67,18 @@ func GetServiceConfig(conf *config.Config) (*ServiceConfig, error) {
6567
}
6668

6769
func getPublicIP() (netip.Addr, error) {
68-
req, err := http.Get("http://ip-api.com/json/")
69-
if err != nil {
70-
return netip.Addr{}, err
71-
}
72-
defer req.Body.Close()
73-
74-
body, err := io.ReadAll(req.Body)
75-
if err != nil {
76-
return netip.Addr{}, err
77-
}
78-
79-
ip := struct {
80-
Query string
81-
}{}
82-
if err = json.Unmarshal(body, &ip); err != nil {
83-
return netip.Addr{}, err
84-
}
85-
86-
if ip.Query == "" {
87-
return netip.Addr{}, fmt.Errorf("Query entry was not populated")
70+
var err error
71+
for i := 0; i < 3; i++ {
72+
var ip string
73+
ip, err = rtcconfig.GetExternalIP(context.Background(), rtcconfig.DefaultStunServers, nil)
74+
if err == nil {
75+
return netip.ParseAddr(ip)
76+
} else {
77+
time.Sleep(500 * time.Millisecond)
78+
}
8879
}
89-
90-
return netip.ParseAddr(ip.Query)
80+
logger.Warnw("could not resolve external IP", err)
81+
return netip.Addr{}, errors.Errorf("could not resolve external IP: %v", err)
9182
}
9283

9384
func getLocalIP(localNet string) (netip.Addr, error) {

0 commit comments

Comments
 (0)