[tor-commits] [flashproxy/js] Add max_client and facilitator_poll_interval query parameters.

dcf at torproject.org dcf at torproject.org
Mon Apr 2 16:40:50 UTC 2012


commit a69d9149f458aec16ad9a8e180b1832898aa4667
Author: David Fifield <david at bamsoftware.com>
Date:   Sat Mar 31 15:38:39 2012 -0700

    Add max_client and facilitator_poll_interval query parameters.
---
 flashproxy.js |   74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 74 insertions(+), 0 deletions(-)

diff --git a/flashproxy.js b/flashproxy.js
index 7b8b0bc..4a758f9 100644
--- a/flashproxy.js
+++ b/flashproxy.js
@@ -15,6 +15,14 @@
  * The address of the facilitator to use. By default it is
  * DEFAULT_FACILITATOR_ADDR. Both <HOST> and <PORT> must be present.
  *
+ * facilitator_poll_interval=<FLOAT>
+ * How often to poll the facilitator, in seconds. The default is
+ * DEFAULT_FACILITATOR_POLL_INTERVAL. There is a sanity-check minimum of 1.0 s.
+ *
+ * max_clients=<NUM>
+ * How many clients to serve concurrently. The default is
+ * DEFAULT_MAX_NUM_PROXY_PAIRS.
+ *
  * relay=<HOST>:<PORT>
  * The address of the relay to connect to. The proxy normally receives this
  * information from the facilitator. When this option is used, the facilitator
@@ -26,6 +34,11 @@ var DEFAULT_FACILITATOR_ADDR = {
     port: 9002
 };
 
+var DEFAULT_MAX_NUM_PROXY_PAIRS = 10;
+
+var DEFAULT_FACILITATOR_POLL_INTERVAL = 10.0;
+var MIN_FACILITATOR_POLL_INTERVAL = 1.0;
+
 /* Parse a URL query string or application/x-www-form-urlencoded body. The
    return type is an object mapping string keys to string values. By design,
    this function doesn't support multiple values for the same named parameter,
@@ -80,6 +93,54 @@ function get_query_param_addr(query, param, default_val)
         return parse_addr_spec(val);
 }
 
+/* Get an integer from the given movie parameter, or the given default. Returns
+   null on error. */
+function get_query_param_integer(query, param, default_val)
+{
+    var spec;
+    var val;
+
+    spec = query[param];
+    if (spec === undefined) {
+        return default_val;
+    } else if (!spec.match(/^-?[0-9]+/)) {
+        return null;
+    } else {
+        val = parseInt(spec, 10);
+        if (isNaN(val))
+            return null;
+        else
+            return val;
+    }
+}
+
+/* Get a number from the given movie parameter, or the given default. Returns
+   null on error. */
+function get_query_param_number(query, param, default_val)
+{
+    var spec;
+    var val;
+
+    spec = query[param];
+    if (spec === undefined) {
+        return default_val;
+    } else {
+        val = Number(spec);
+        if (isNaN(val))
+            return null;
+        else
+            return val;
+    }
+}
+
+/* Get a floating-point number of seconds from a time specification. The only
+   time specification format is a decimal number of seconds. Returns null on
+   error. */
+function get_query_param_timespec(query, param, default_val)
+{
+    return get_query_param_number(query, param, default_val);
+}
+
 /* Parse an address in the form "host:port". Returns an Object with
    keys "host" (String) and "port" (int). Returns null on error. */
 function parse_addr_spec(spec)
@@ -165,6 +226,19 @@ function FlashProxy()
             puts("Error: Facilitator spec must be in the form \"host:port\".");
             return;
         }
+
+        this.max_num_proxy_pairs = get_query_param_integer(this.query, "max_clients", DEFAULT_MAX_NUM_PROXY_PAIRS);
+        if (this.max_num_proxy_pairs == null || this.max_num_proxy_pairs < 0) {
+            puts("Error: max_clients must be a nonnegative integer.");
+            return;
+        }
+
+        this.facilitator_poll_interval = get_query_param_timespec(this.query, "facilitator_poll_interval", DEFAULT_FACILITATOR_POLL_INTERVAL);
+        if (this.facilitator_poll_interval == null || this.facilitator_poll_interval < MIN_FACILITATOR_POLL_INTERVAL) {
+            puts("Error: facilitator_poll_interval must be a nonnegative number at least " + MIN_FACILITATOR_POLL_INTERVAL + ".");
+            return;
+        }
+
         client_addr = get_query_param_addr(this.query, "client");
         relay_addr = get_query_param_addr(this.query, "relay");
         if (client_addr !== undefined && relay_addr !== undefined) {





More information about the tor-commits mailing list