},
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()
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
)
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)
offer webrtc.SessionDescription,
err error,
) {
- peerConnection, err = newPeerConnection(logger)
+ peerConnection, err = newPeerConnection(logger, tc.ICEServers)
if err != nil {
return
}
) (
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
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()) {
return fmt.Sprintf("tracker client for %q: %v", url, m)
}),
WebsocketTrackerHttpHeader: me.WebsocketTrackerHttpHeader,
+ ICEServers: me.ICEServers,
},
}
value.TrackerClient.Start(func(err error) {