]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add WebRTC ICE servers config (#824)
authorMarco Vidonis <31407403+marcovidonis@users.noreply.github.com>
Sat, 27 May 2023 10:27:24 +0000 (11:27 +0100)
committerGitHub <noreply@github.com>
Sat, 27 May 2023 10:27:24 +0000 (20:27 +1000)
* add ICEServers config

* remove unnecessary check

client.go
config.go
webtorrent/tracker-client.go
webtorrent/transport.go
wstracker.go

index b0f4b2a3728a497a5e0061379f6def8f136fce33..a87e44391f657508406c243b74df06602c81b030 100644 (file)
--- a/client.go
+++ b/client.go
@@ -301,6 +301,7 @@ func NewClient(cfg *ClientConfig) (cl *Client, err error) {
                },
                Proxy:                      cl.config.HTTPProxy,
                WebsocketTrackerHttpHeader: cl.config.WebsocketTrackerHttpHeader,
+               ICEServers:                 cl.config.ICEServers,
                DialContext:                cl.config.TrackerDialContext,
                OnConn: func(dc datachannel.ReadWriteCloser, dcc webtorrent.DataChannelContext) {
                        cl.lock()
index fca37e637a5d5c8a148d96fe2a1895a88133a345..cfcfe392c3beb0d550c9ff6b6b451cb2f4eb2019 100644 (file)
--- a/config.go
+++ b/config.go
@@ -181,6 +181,10 @@ type ClientConfig struct {
 
        Callbacks Callbacks
 
+       // ICEServers defines a slice describing servers available to be used by
+       // ICE, such as STUN and TURN servers.
+       ICEServers []string
+
        DialRateLimiter *rate.Limiter
 }
 
index 30a35be7712d0fe5848f34ab76bf602ed990d138..bc9dab312e2d64acf843f46d423b424e1514ebad 100644 (file)
@@ -43,6 +43,7 @@ type TrackerClient struct {
        pingTicker     *time.Ticker
 
        WebsocketTrackerHttpHeader func() http.Header
+       ICEServers                 []string
 }
 
 func (me *TrackerClient) Stats() TrackerClientStats {
index 610301db2c8a71cef7007d69d7287715c5174f67..856625874c8becc00be22a6ee600d401c260b13a 100644 (file)
@@ -29,7 +29,6 @@ var (
                s.DetachDataChannels()
                return webrtc.NewAPI(webrtc.WithSettingEngine(s))
        }()
-       config              = webrtc.Configuration{ICEServers: []webrtc.ICEServer{{URLs: []string{"stun:stun.l.google.com:19302"}}}}
        newPeerConnectionMu sync.Mutex
 )
 
@@ -49,11 +48,14 @@ func (me *wrappedPeerConnection) Close() error {
        return err
 }
 
-func newPeerConnection(logger log.Logger) (*wrappedPeerConnection, error) {
+func newPeerConnection(logger log.Logger, iceServers []string) (*wrappedPeerConnection, error) {
        newPeerConnectionMu.Lock()
        defer newPeerConnectionMu.Unlock()
        ctx, span := otel.Tracer(tracerName).Start(context.Background(), "PeerConnection")
-       pc, err := api.NewPeerConnection(config)
+
+       pcConfig := webrtc.Configuration{ICEServers: []webrtc.ICEServer{{URLs: iceServers}}}
+
+       pc, err := api.NewPeerConnection(pcConfig)
        if err != nil {
                span.SetStatus(codes.Error, err.Error())
                span.RecordError(err)
@@ -99,7 +101,7 @@ func (tc *TrackerClient) newOffer(
        offer webrtc.SessionDescription,
        err error,
 ) {
-       peerConnection, err = newPeerConnection(logger)
+       peerConnection, err = newPeerConnection(logger, tc.ICEServers)
        if err != nil {
                return
        }
@@ -191,7 +193,7 @@ func (tc *TrackerClient) newAnsweringPeerConnection(
 ) (
        peerConn *wrappedPeerConnection, answer webrtc.SessionDescription, err error,
 ) {
-       peerConn, err = newPeerConnection(tc.Logger)
+       peerConn, err = newPeerConnection(tc.Logger, tc.ICEServers)
        if err != nil {
                err = fmt.Errorf("failed to create new connection: %w", err)
                return
index c379dc312030dbfac9483509e81e3bbbb6505b4f..84af9cbfc18fc0de09a2fafd7199d7dec97f04ca 100644 (file)
@@ -45,6 +45,7 @@ type websocketTrackers struct {
        Proxy                      httpTracker.ProxyFunc
        DialContext                func(ctx context.Context, network, addr string) (net.Conn, error)
        WebsocketTrackerHttpHeader func() netHttp.Header
+       ICEServers                 []string
 }
 
 func (me *websocketTrackers) Get(url string, infoHash [20]byte) (*webtorrent.TrackerClient, func()) {
@@ -64,6 +65,7 @@ func (me *websocketTrackers) Get(url string, infoHash [20]byte) (*webtorrent.Tra
                                        return fmt.Sprintf("tracker client for %q: %v", url, m)
                                }),
                                WebsocketTrackerHttpHeader: me.WebsocketTrackerHttpHeader,
+                               ICEServers:                 me.ICEServers,
                        },
                }
                value.TrackerClient.Start(func(err error) {