From: Marco Vidonis <31407403+marcovidonis@users.noreply.github.com> Date: Sat, 27 May 2023 10:27:24 +0000 (+0100) Subject: Add WebRTC ICE servers config (#824) X-Git-Url: http://www.git.stargrave.org/?p=btrtrc.git;a=commitdiff_plain;h=e7087fde568c36b9e3951d0fd3c9114d8f40d437 Add WebRTC ICE servers config (#824) * add ICEServers config * remove unnecessary check --- diff --git a/client.go b/client.go index b0f4b2a3..a87e4439 100644 --- 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() diff --git a/config.go b/config.go index fca37e63..cfcfe392 100644 --- 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 } diff --git a/webtorrent/tracker-client.go b/webtorrent/tracker-client.go index 30a35be7..bc9dab31 100644 --- a/webtorrent/tracker-client.go +++ b/webtorrent/tracker-client.go @@ -43,6 +43,7 @@ type TrackerClient struct { pingTicker *time.Ticker WebsocketTrackerHttpHeader func() http.Header + ICEServers []string } func (me *TrackerClient) Stats() TrackerClientStats { diff --git a/webtorrent/transport.go b/webtorrent/transport.go index 610301db..85662587 100644 --- a/webtorrent/transport.go +++ b/webtorrent/transport.go @@ -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 diff --git a/wstracker.go b/wstracker.go index c379dc31..84af9cbf 100644 --- a/wstracker.go +++ b/wstracker.go @@ -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) {