[tor-commits] [snowflake/master] Remove "active" property of proxyPairs

cohosh at torproject.org cohosh at torproject.org
Thu Oct 31 16:00:23 UTC 2019


commit 789285e0dfe69474b2876a79f82784ad2892d8c4
Author: Cecylia Bocovich <cohosh at torproject.org>
Date:   Fri Oct 18 17:28:53 2019 -0400

    Remove "active" property of proxyPairs
    
    Use their existence in the proxy pair list to indicate they are active.
---
 proxy/proxypair.js |  9 ---------
 proxy/snowflake.js | 58 +++++++++++++++++++++++-------------------------------
 2 files changed, 25 insertions(+), 42 deletions(-)

diff --git a/proxy/proxypair.js b/proxy/proxypair.js
index 64eafdc..52594e9 100644
--- a/proxy/proxypair.js
+++ b/proxy/proxypair.js
@@ -85,9 +85,6 @@ class ProxyPair {
   prepareDataChannel(channel) {
     channel.onopen = () => {
       log('WebRTC DataChannel opened!');
-      if (!this.active) {
-        return;
-      }
       snowflake.ui.setActive(true);
       // This is the point when the WebRTC datachannel is done, so the next step
       // is to establish websocket to the server.
@@ -179,17 +176,13 @@ class ProxyPair {
     if (this.webrtcIsReady()) {
       this.client.close();
     }
-    this.client = null;
     if (this.peerConnOpen()) {
       this.pc.close();
     }
-    this.pc = null;
     if (this.relayIsReady()) {
       this.relay.close();
     }
-    this.relay = null;
     this.onCleanup();
-    this.active = false;
   }
 
   flush() {
@@ -253,8 +246,6 @@ ProxyPair.prototype.relay = null; // websocket
 
 ProxyPair.prototype.timer = 0;
 
-ProxyPair.prototype.active = false; // Whether serving a client.
-
 ProxyPair.prototype.flush_timeout_id = null;
 
 ProxyPair.prototype.onCleanup = null;
diff --git a/proxy/snowflake.js b/proxy/snowflake.js
index c647b4e..c914520 100644
--- a/proxy/snowflake.js
+++ b/proxy/snowflake.js
@@ -43,10 +43,6 @@ class Snowflake {
   // Initialize WebRTC PeerConnection, which requires beginning the signalling
   // process. |pollBroker| automatically arranges signalling.
   beginWebRTC() {
-    log('ProxyPair Slots: ' + this.proxyPairs.length);
-    log('Snowflake IDs: ' + (this.proxyPairs.map(function(p) {
-      return p.id;
-    })).join(' | '));
     this.pollBroker();
     return this.pollInterval = setInterval((() => {
       return this.pollBroker();
@@ -58,13 +54,13 @@ class Snowflake {
   pollBroker() {
     var msg, pair, recv;
     // Poll broker for clients.
-    pair = this.nextAvailableProxyPair();
+    pair = this.makeProxyPair();
     if (!pair) {
       log('At client capacity.');
       return;
     }
+    log('Polling broker..');
     // Do nothing until a new proxyPair is available.
-    pair.active = true;
     msg = 'Polling for client ... ';
     if (this.retries > 0) {
       msg += '[retries: ' + this.retries + ']';
@@ -72,35 +68,23 @@ class Snowflake {
     this.ui.setStatus(msg);
     recv = this.broker.getClientOffer(pair.id);
     recv.then((desc) => {
-      if (pair.active) {
-        if (!this.receiveOffer(pair, desc)) {
-          return pair.active = false;
-        }
-        //set a timeout for channel creation
-        return setTimeout((() => {
-          if (!pair.webrtcIsReady()) {
-            log('proxypair datachannel timed out waiting for open');
-            pair.close();
-            return pair.active = false;
-          }
-        }), 20000); // 20 second timeout
+      if (!this.receiveOffer(pair, desc)) {
+        return pair.close();
       }
+      //set a timeout for channel creation
+      return setTimeout((() => {
+        if (!pair.webrtcIsReady()) {
+          log('proxypair datachannel timed out waiting for open');
+          return pair.close();
+        }
+      }), 20000); // 20 second timeout
     }, function() {
-      return pair.active = false;
+      //on error, close proxy pair
+      return pair.close();
     });
     return this.retries++;
   }
 
-  // Returns the first ProxyPair that's available to connect.
-  nextAvailableProxyPair() {
-    if (this.proxyPairs.length < this.config.connectionsPerClient) {
-      return this.makeProxyPair(this.relayAddr);
-    }
-    return this.proxyPairs.find(function(pp) {
-      return !pp.active;
-    });
-  }
-
   receiveOffer(pair, desc) {
     var e, offer, sdp;
     try {
@@ -127,19 +111,27 @@ class Snowflake {
       return pair.pc.setLocalDescription(sdp).catch(fail);
     };
     fail = function() {
-      pair.active = false
+      pair.close();
       return dbg('webrtc: Failed to create or set Answer');
     };
     return pair.pc.createAnswer().then(next).catch(fail);
   }
 
-  makeProxyPair(relay) {
+  makeProxyPair() {
+    if (this.proxyPairs.length >= this.config.connectionsPerClient) {
+      return null;
+    }
     var pair;
-    pair = new ProxyPair(relay, this.rateLimit, this.config.pcConfig);
+    pair = new ProxyPair(this.relayAddr, this.rateLimit, this.config.pcConfig);
     this.proxyPairs.push(pair);
+
+    log('Snowflake IDs: ' + (this.proxyPairs.map(function(p) {
+      return p.id;
+    })).join(' | '));
+
     pair.onCleanup = () => {
       var ind;
-      // Delete from the list of active proxy pairs.
+      // Delete from the list of proxy pairs.
       ind = this.proxyPairs.indexOf(pair);
       if (ind > -1) {
         return this.proxyPairs.splice(ind, 1);





More information about the tor-commits mailing list