diff --git a/clientcore/consumer.go b/clientcore/consumer.go index 614728d..bbab621 100644 --- a/clientcore/consumer.go +++ b/clientcore/consumer.go @@ -18,7 +18,6 @@ import ( "sync" "time" - "github.com/pion/transport/v3/stdnet" "github.com/pion/webrtc/v4" "github.com/getlantern/broflake/common" @@ -61,28 +60,12 @@ func NewConsumerWebRTC(options *WebRTCOptions, wg *sync.WaitGroup) *WorkerFSM { }, } - // // Example custom DTLS settings - // settingEngine := &webrtc.SettingEngine{} - // settingEngine.SetDTLSEllipticCurves(elliptic.P256, elliptic.P384, elliptic.X25519) - // webrtcAPI := webrtc.NewAPI(webrtc.WithSettingEngine(*settingEngine)) - // peerConnection, err := webrtcAPI.NewPeerConnection(config) - - // Set the network interface for WebRTC. If none is provided, use the default stdnet.Net - // that webrtc would use anyway. - rtcNet := options.Net - if rtcNet == nil { - var err error - rtcNet, err = stdnet.NewNet() - if err != nil { - common.Debugf("Error initializing stdnet.Net: %v", err) - return 0, []any{} - } + api, err := newWebRTCAPI(options.Net) + if err != nil { + common.Debugf("Error creating WebRTC API: %v", err) + return 0, []any{} } - settingEngine := &webrtc.SettingEngine{} - settingEngine.SetNet(rtcNet) - api := webrtc.NewAPI(webrtc.WithSettingEngine(*settingEngine)) - // Construct the RTCPeerConnection peerConnection, err := api.NewPeerConnection(config) if err != nil { diff --git a/clientcore/settings.go b/clientcore/settings.go index 005d47d..ceddec8 100644 --- a/clientcore/settings.go +++ b/clientcore/settings.go @@ -24,7 +24,8 @@ type WebRTCOptions struct { Patience time.Duration ErrorBackoff time.Duration ConsumerSessionID string - Net transport.Net + // 'Net' is currently only respected by the WebRTC *consumer*, and it won't work for Wasm builds! + Net transport.Net } func NewDefaultWebRTCOptions() *WebRTCOptions { diff --git a/clientcore/ui_default_impl.go b/clientcore/ui_default_impl.go index 669d032..298dbf8 100644 --- a/clientcore/ui_default_impl.go +++ b/clientcore/ui_default_impl.go @@ -9,7 +9,7 @@ import ( type UIImpl struct { UI - BroflakeEngine *BroflakeEngine + BroflakeEngine *BroflakeEngine OnConnectionChangeFunc ConnectionChangeFunc } diff --git a/clientcore/webrtc_api.go b/clientcore/webrtc_api.go new file mode 100644 index 0000000..22a7c74 --- /dev/null +++ b/clientcore/webrtc_api.go @@ -0,0 +1,22 @@ +//go:build !wasm + +package clientcore + +import ( + "github.com/pion/transport/v3" + "github.com/pion/transport/v3/stdnet" + "github.com/pion/webrtc/v4" +) + +func newWebRTCAPI(net transport.Net) (*webrtc.API, error) { + if net == nil { + var err error + net, err = stdnet.NewNet() + if err != nil { + return nil, err + } + } + se := &webrtc.SettingEngine{} + se.SetNet(net) + return webrtc.NewAPI(webrtc.WithSettingEngine(*se)), nil +} diff --git a/clientcore/webrtc_api_js.go b/clientcore/webrtc_api_js.go new file mode 100644 index 0000000..006b5e1 --- /dev/null +++ b/clientcore/webrtc_api_js.go @@ -0,0 +1,13 @@ +//go:build wasm + +package clientcore + +import ( + "github.com/pion/transport/v3" + "github.com/pion/webrtc/v4" +) + +func newWebRTCAPI(_ transport.Net) (*webrtc.API, error) { + panic("Congratulations, you found the unimplemented WebRTC consumer transport injector for Wasm builds!") + return webrtc.NewAPI(), nil +} diff --git a/common/version.go b/common/version.go index 71cd2a4..8b4d8fd 100644 --- a/common/version.go +++ b/common/version.go @@ -1,4 +1,4 @@ package common // Must be a valid semver -const Version = "v2.1.6" +const Version = "v2.1.7" diff --git a/ui/public/widget.wasm b/ui/public/widget.wasm index d9c20e3..7b13d39 100755 Binary files a/ui/public/widget.wasm and b/ui/public/widget.wasm differ