[tor-commits] [snowflake/master] Add a 5s delay between polls in proxy-go.

dcf at torproject.org dcf at torproject.org
Thu Mar 22 17:47:54 UTC 2018


commit 07291a0136b8a01bd8761a14a51876f08ca0d578
Author: David Fifield <david at bamsoftware.com>
Date:   Wed Mar 21 22:52:30 2018 -0700

    Add a 5s delay between polls in proxy-go.
    
    https://bugs.torproject.org/25344
    
    5s matches DEFAULT_BROKER_POLL_INTERVAL in the JavaScript proxy.
    
    This is set up so as long as the actual HTTPS requests take less time
    than pollInterval, there will a steady one poll per pollInterval. If the
    HTTPS requests take longer than that, there will be no delay between
    polls.
---
 proxy-go/snowflake.go | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/proxy-go/snowflake.go b/proxy-go/snowflake.go
index 5a5925e..7bb435c 100644
--- a/proxy-go/snowflake.go
+++ b/proxy-go/snowflake.go
@@ -25,6 +25,7 @@ import (
 const defaultBrokerURL = "https://snowflake-reg.appspot.com/"
 const defaultRelayURL = "wss://snowflake.bamsoftware.com/"
 const defaultSTUNURL = "stun:stun.l.google.com:19302"
+const pollInterval = 5 * time.Second
 
 var brokerURL *url.URL
 var relayURL string
@@ -133,7 +134,19 @@ func genSessionID() string {
 
 func pollOffer(sid string) *webrtc.SessionDescription {
 	broker := brokerURL.ResolveReference(&url.URL{Path: "proxy"})
+	timeOfNextPoll := time.Now()
 	for {
+		// Sleep until we're scheduled to poll again.
+		now := time.Now()
+		time.Sleep(timeOfNextPoll.Sub(now))
+		// Compute the next time to poll -- if it's in the past, that
+		// means that the POST took longer than pollInterval, so we're
+		// allowed to do another one immediately.
+		timeOfNextPoll = timeOfNextPoll.Add(pollInterval)
+		if timeOfNextPoll.Before(now) {
+			timeOfNextPoll = now
+		}
+
 		req, _ := http.NewRequest("POST", broker.String(), bytes.NewBuffer([]byte(sid)))
 		req.Header.Set("X-Session-ID", sid)
 		resp, err := client.Do(req)



More information about the tor-commits mailing list