[tor-commits] [flashproxy/master] Add parse_addr_spec and tests.

dcf at torproject.org dcf at torproject.org
Mon Apr 9 04:08:42 UTC 2012


commit 627cd6044c22a3e27c709f55b137caacaf47736f
Author: David Fifield <david at bamsoftware.com>
Date:   Tue Mar 13 10:22:39 2012 -0700

    Add parse_addr_spec and tests.
---
 flashproxy-test.js |   57 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 flashproxy.js      |   32 +++++++++++++++++++++++++++++
 2 files changed, 89 insertions(+), 0 deletions(-)

diff --git a/flashproxy-test.js b/flashproxy-test.js
index ca68f85..2c786ee 100755
--- a/flashproxy-test.js
+++ b/flashproxy-test.js
@@ -123,7 +123,64 @@ function test_parse_query_string()
     }
 }
 
+function test_parse_addr_spec()
+{
+    var TESTS = [
+        { spec: "",
+          expected: null },
+        { spec: "3.3.3.3:4444",
+          expected: { host: "3.3.3.3", port: 4444 } },
+        { spec: "3.3.3.3",
+          expected: null },
+        { spec: "3.3.3.3:0x1111",
+          expected: null },
+        { spec: "3.3.3.3:-4444",
+          expected: null },
+        { spec: "3.3.3.3:65536",
+          expected: null },
+    ];
+
+    for (var i = 0; i < TESTS.length; i++) {
+        var test = TESTS[i];
+        var actual;
+
+        actual = parse_addr_spec(test.spec);
+        if (objects_equal(actual, test.expected))
+            pass(test.spec);
+        else
+            fail(test.spec, test.expected, actual);
+    }
+}
+
+function test_get_query_param_addr()
+{
+    var DEFAULT = { host: "1.1.1.1", port: 2222 };
+    var TESTS = [
+        { query: { },
+          expected: DEFAULT },
+        { query: { addr: "3.3.3.3:4444" },
+          expected: { host: "3.3.3.3", port: 4444 } },
+        { query: { x: "3.3.3.3:4444" },
+          expected: DEFAULT },
+        { query: { addr: "---" },
+          expected: null },
+    ];
+
+    for (var i = 0; i < TESTS.length; i++) {
+        var test = TESTS[i];
+        var actual;
+
+        actual = get_query_param_addr(test.query, "addr", DEFAULT);
+        if (objects_equal(actual, test.expected))
+            pass(test.query);
+        else
+            fail(test.query, test.expected, actual);
+    }
+}
+
 test_parse_query_string();
+test_parse_addr_spec();
+test_get_query_param_addr();
 
 if (num_failed == 0)
     quit(0);
diff --git a/flashproxy.js b/flashproxy.js
index b68da1f..f45fd1d 100644
--- a/flashproxy.js
+++ b/flashproxy.js
@@ -43,6 +43,38 @@ function parse_query_string(qs)
     return result;
 }
 
+/* Get a query string parameter and parse it as an address spec. Returns
+   default_val if param is not defined in the query string. Returns null on a
+   parsing error. */
+function get_query_param_addr(query, param, default_val)
+{
+    var val;
+
+    val = query[param];
+    if (val === undefined)
+        return default_val;
+    else
+        return parse_addr_spec(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)
+{
+    var groups;
+    var host, port;
+
+    groups = spec.match(/^([^:]+):(\d+)$/);
+    if (!groups)
+        return null;
+    host = groups[1];
+    port = parseInt(groups[2], 10);
+    if (isNaN(port) || port < 0 || port > 65535)
+        return null;
+
+    return { host: host, port: port }
+}
+
 function format_addr(addr)
 {
     return addr.host + ":" + addr.port;





More information about the tor-commits mailing list