commit 5787d5b8b0a78a27a12385fbeea7bb12f5b11fb1 Author: David Fifield david@bamsoftware.com Date: Thu Apr 23 19:05:29 2020 -0600
Simplify WebRTCPeer.exchangeSDP.
No need to run sendOfferToBroker in a goroutine. --- client/lib/webrtc.go | 45 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 31 deletions(-)
diff --git a/client/lib/webrtc.go b/client/lib/webrtc.go index cba2574..e4ac8e0 100644 --- a/client/lib/webrtc.go +++ b/client/lib/webrtc.go @@ -24,12 +24,11 @@ type WebRTCPeer struct { transport *webrtc.DataChannel broker *BrokerChannel
- offerChannel chan *webrtc.SessionDescription - answerChannel chan *webrtc.SessionDescription - recvPipe *io.PipeReader - writePipe *io.PipeWriter - lastReceive time.Time - buffer bytes.Buffer + offerChannel chan *webrtc.SessionDescription + recvPipe *io.PipeReader + writePipe *io.PipeWriter + lastReceive time.Time + buffer bytes.Buffer
closed bool
@@ -53,7 +52,6 @@ func NewWebRTCPeer(config *webrtc.Configuration, connection.config = config connection.broker = broker connection.offerChannel = make(chan *webrtc.SessionDescription, 1) - connection.answerChannel = make(chan *webrtc.SessionDescription, 1)
// Override with something that's not NullLogger to have real logging. connection.BytesLogger = &BytesNullLogger{} @@ -256,34 +254,22 @@ func (c *WebRTCPeer) establishDataChannel() error { return nil }
-func (c *WebRTCPeer) sendOfferToBroker() { - if nil == c.broker { - return - } - offer := c.pc.LocalDescription() - answer, err := c.broker.Negotiate(offer) - if nil != err || nil == answer { - log.Printf("BrokerChannel Error: %s", err) - answer = nil - } - c.answerChannel <- answer -} - // exchangeSDP blocks until an SDP offer is available, sends it to the Broker, // then awaits the SDP answer. func (c *WebRTCPeer) exchangeSDP() error { <-c.offerChannel // Keep trying the same offer until a valid answer arrives. - var ok bool var answer *webrtc.SessionDescription - for nil == answer { - go c.sendOfferToBroker() - answer, ok = <-c.answerChannel // Blocks... - if !ok || nil == answer { - log.Printf("Failed to retrieve answer. Retrying in %v", ReconnectTimeout) - <-time.After(ReconnectTimeout) - answer = nil + for { + var err error + // Send offer to broker (blocks). + answer, err = c.broker.Negotiate(c.pc.LocalDescription()) + if err == nil { + break } + 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) @@ -299,9 +285,6 @@ func (c *WebRTCPeer) cleanup() { if nil != c.offerChannel { close(c.offerChannel) } - if nil != c.answerChannel { - close(c.answerChannel) - } // Close this side of the SOCKS pipe. if nil != c.writePipe { c.writePipe.Close()
tor-commits@lists.torproject.org