commit 85277274fd3020819fe5c556b8164e7671bb799b Author: David Fifield david@bamsoftware.com Date: Thu Apr 23 22:33:38 2020 -0600
Make exchangeSDP into a standalone function. --- client/lib/webrtc.go | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-)
diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go index f47bb2e..7ceeaff 100644 --- a/client/lib/webrtc.go +++ b/client/lib/webrtc.go @@ -21,7 +21,6 @@ type WebRTCPeer struct { id string pc *webrtc.PeerConnection transport *webrtc.DataChannel - broker *BrokerChannel
recvPipe *io.PipeReader writePipe *io.PipeWriter @@ -47,7 +46,6 @@ func NewWebRTCPeer(config *webrtc.Configuration, } connection.id = "snowflake-" + hex.EncodeToString(buf[:]) } - connection.broker = broker
// Override with something that's not NullLogger to have real logging. connection.BytesLogger = &BytesNullLogger{} @@ -55,7 +53,7 @@ func NewWebRTCPeer(config *webrtc.Configuration, // Pipes remain the same even when DataChannel gets switched. connection.recvPipe, connection.writePipe = io.Pipe()
- err := connection.connect(config) + err := connection.connect(config, broker) if err != nil { connection.Close() return nil, err @@ -113,7 +111,7 @@ func (c *WebRTCPeer) checkForStaleness() { } }
-func (c *WebRTCPeer) connect(config *webrtc.Configuration) error { +func (c *WebRTCPeer) connect(config *webrtc.Configuration, broker *BrokerChannel) error { log.Println(c.id, " connecting...") // TODO: When go-webrtc is more stable, it's possible that a new // PeerConnection won't need to be re-prepared each time. @@ -127,8 +125,11 @@ func (c *WebRTCPeer) connect(config *webrtc.Configuration) error { // nolint: golint return errors.New("WebRTC: Could not establish DataChannel") } - err = c.exchangeSDP() - if err != nil { + answer := exchangeSDP(broker, c.pc.LocalDescription()) + log.Printf("Received Answer.\n") + err = c.pc.SetRemoteDescription(*answer) + if nil != err { + log.Println("WebRTC: Unable to SetRemoteDescription:", err) return err } go c.checkForStaleness() @@ -246,29 +247,20 @@ func (c *WebRTCPeer) establishDataChannel() error { return nil }
-// exchangeSDP sends the local SDP offer to the Broker and awaits the SDP -// answer. -func (c *WebRTCPeer) exchangeSDP() error { +// exchangeSDP sends the local SDP offer to the Broker, awaits the SDP answer, +// and returns the answer. +func exchangeSDP(broker *BrokerChannel, offer *webrtc.SessionDescription) *webrtc.SessionDescription { // Keep trying the same offer until a valid answer arrives. - var answer *webrtc.SessionDescription for { - var err error // Send offer to broker (blocks). - answer, err = c.broker.Negotiate(c.pc.LocalDescription()) + answer, err := broker.Negotiate(offer) if err == nil { - break + return answer } log.Printf("BrokerChannel Error: %s", err) log.Printf("Failed to retrieve answer. Retrying in %v", ReconnectTimeout) <-time.After(ReconnectTimeout) } - log.Printf("Received Answer.\n") - err := c.pc.SetRemoteDescription(*answer) - if nil != err { - log.Println("WebRTC: Unable to SetRemoteDescription:", err) - return err - } - return nil }
// Close all channels and transports
tor-commits@lists.torproject.org