[tor-commits] [snowflake/master] clarify webRTCConn errorChannel and error handling

arlo at torproject.org arlo at torproject.org
Tue Mar 15 03:42:07 UTC 2016


commit ba7b59f80e544bc8518366495c94040c3425c04c
Author: Serene Han <keroserene+git at gmail.com>
Date:   Thu Mar 10 17:14:36 2016 -0800

    clarify webRTCConn errorChannel and error handling
---
 client/webrtc.go | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/client/webrtc.go b/client/webrtc.go
index d4c0272..af32ddd 100644
--- a/client/webrtc.go
+++ b/client/webrtc.go
@@ -81,6 +81,8 @@ func NewWebRTCConnection(config *webrtc.Configuration,
 	connection.broker = broker
 	connection.offerChannel = make(chan *webrtc.SessionDescription, 1)
 	connection.answerChannel = make(chan *webrtc.SessionDescription, 1)
+	// Error channel is mostly for reporting during the initial SDP offer
+	// creation & local description setting, which happens asynchronously.
 	connection.errorChannel = make(chan error, 1)
 	connection.reset = make(chan struct{}, 1)
 
@@ -103,8 +105,12 @@ func (c *webRTCConn) ConnectLoop() {
 		log.Println("Establishing WebRTC connection...")
 		// TODO: When go-webrtc is more stable, it's possible that a new
 		// PeerConnection won't need to be re-prepared each time.
-		c.preparePeerConnection()
-		err := c.establishDataChannel()
+		err := c.preparePeerConnection()
+		if err != nil {
+			log.Println("WebRTC: Could not create PeerConnection.")
+			break
+		}
+		err = c.establishDataChannel()
 		if err != nil {
 			log.Println("WebRTC: Could not establish DataChannel.")
 		} else {
@@ -115,18 +121,19 @@ func (c *webRTCConn) ConnectLoop() {
 		<-time.After(time.Second * 1)
 		c.cleanup()
 	}
+	log.Println("WebRTC cannot connect.")
 }
 
 // Create and prepare callbacks on a new WebRTC PeerConnection.
-func (c *webRTCConn) preparePeerConnection() {
+func (c *webRTCConn) preparePeerConnection() error {
 	if nil != c.pc {
 		c.pc.Close()
 		c.pc = nil
 	}
 	pc, err := webrtc.NewPeerConnection(c.config)
 	if err != nil {
-		log.Printf("NewPeerConnection: %s", err)
-		c.errorChannel <- err
+		log.Printf("NewPeerConnection ERROR: %s", err)
+		return err
 	}
 	// Prepare PeerConnection callbacks.
 	pc.OnNegotiationNeeded = func() {
@@ -162,6 +169,7 @@ func (c *webRTCConn) preparePeerConnection() {
 	}
 	c.pc = pc
 	log.Println("WebRTC: PeerConnection created.")
+	return nil
 }
 
 // Create a WebRTC DataChannel locally.
@@ -174,7 +182,7 @@ func (c *webRTCConn) establishDataChannel() error {
 	// an SDP offer while other goroutines operating on this struct handle the
 	// signaling. Eventually fires "OnOpen".
 	if err != nil {
-		log.Printf("CreateDataChannel: %s", err)
+		log.Printf("CreateDataChannel ERROR: %s", err)
 		return err
 	}
 	dc.OnOpen = func() {
@@ -276,8 +284,8 @@ func (c *webRTCConn) exchangeSDP() error {
 	log.Printf("Received Answer:\n\n%s\n", answer.Sdp)
 	err := c.pc.SetRemoteDescription(answer)
 	if nil != err {
-		log.Println("webrtc: Unable to SetRemoteDescription:", err)
-		// c.errorChannel <- err
+		log.Println("WebRTC: Unable to SetRemoteDescription:", err)
+		return err
 	}
 	return nil
 }





More information about the tor-commits mailing list