[tor-commits] [snowflake/master] Added check to see if peer connection succeeded
cohosh at torproject.org
cohosh at torproject.org
Thu Apr 11 13:58:59 UTC 2019
commit 08f5205461573bf8a6e8961540ac620865a3b45c
Author: Cecylia Bocovich <cohosh at torproject.org>
Date: Wed Apr 3 15:59:47 2019 -0400
Added check to see if peer connection succeeded
This is related to the proxy-go deadlock bug #25688. If a client doesn't
do anything with the SDP answer, a token will get lost. Added a timeout
after a minute that checks the PeerConnection state and destroys the
peer connection and returns a token if did not yet succeed
---
proxy-go/snowflake.go | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/proxy-go/snowflake.go b/proxy-go/snowflake.go
index aeb9f51..1c24e47 100644
--- a/proxy-go/snowflake.go
+++ b/proxy-go/snowflake.go
@@ -307,9 +307,9 @@ func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config *webrtc.
log.Println("Generating answer...")
answer, err := pc.CreateAnswer()
- // blocks on ICE gathering. we need to add a timeout if needed
- // not putting this in a separate go routine, because we need
- // SetLocalDescription(answer) to be called before sendAnswer
+ // blocks on ICE gathering. we need to add a timeout if needed
+ // not putting this in a separate go routine, because we need
+ // SetLocalDescription(answer) to be called before sendAnswer
if err != nil {
pc.Destroy()
return nil, err
@@ -325,6 +325,20 @@ func makePeerConnectionFromOffer(sdp *webrtc.SessionDescription, config *webrtc.
pc.Destroy()
return nil, err
}
+
+ // Set a timeout on peerconnection. If the connection state has not
+ // advanced to PeerConnectionStateConnected in this time,
+ // destroy the peer connection and return the token.
+ go func() {
+ <-time.After(time.Minute)
+ if pc.ConnectionState() != webrtc.PeerConnectionStateConnected {
+ log.Println("Timed out waiting for client to open data cannel.")
+ pc.Destroy()
+ retToken()
+ }
+
+ }()
+
return pc, nil
}
More information about the tor-commits
mailing list