"context"
"expvar"
"fmt"
+ "io"
+ "sync"
+ "time"
+
"github.com/anacrolix/log"
"github.com/anacrolix/missinggo/v2/pproffd"
"github.com/pion/datachannel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/trace"
- "io"
- "sync"
- "time"
)
const (
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
}
offer, err = peerConnection.CreateOffer(nil)
if err != nil {
+ dataChannel.Close()
peerConnection.Close()
return
}
offer, err = setAndGatherLocalDescription(peerConnection, offer)
if err != nil {
+ dataChannel.Close()
peerConnection.Close()
}
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