Remove for loop around broker.Negotiate

Instead of continuously polling the broker until the client receives a
snowflake, fail back to the Connect() loop and try again to collect more
peers after ReconnectTimeout.
This commit is contained in:
Cecylia Bocovich 2020-11-13 15:08:00 -05:00
parent ece43cbfcf
commit 665d76c5b0

View file

@ -112,7 +112,10 @@ func (c *WebRTCPeer) connect(config *webrtc.Configuration, broker *BrokerChannel
if err != nil { if err != nil {
return err return err
} }
answer := exchangeSDP(broker, c.pc.LocalDescription()) answer, err := broker.Negotiate(c.pc.LocalDescription())
if err != nil {
return err
}
log.Printf("Received Answer.\n") log.Printf("Received Answer.\n")
err = c.pc.SetRemoteDescription(*answer) err = c.pc.SetRemoteDescription(*answer)
if nil != err { if nil != err {
@ -217,22 +220,6 @@ func (c *WebRTCPeer) establishDataChannel() (*webrtc.DataChannel, 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.
for {
// Send offer to broker (blocks).
answer, err := broker.Negotiate(offer)
if err == nil {
return answer
}
log.Printf("BrokerChannel Error: %s", err)
log.Printf("Failed to retrieve answer. Retrying in %v", ReconnectTimeout)
<-time.After(ReconnectTimeout)
}
}
// Close all channels and transports // Close all channels and transports
func (c *WebRTCPeer) cleanup() { func (c *WebRTCPeer) cleanup() {
// Close this side of the SOCKS pipe. // Close this side of the SOCKS pipe.