[tor-commits] [flashproxy/master] Let swfcat get the relay from the facilitator.

dcf at torproject.org dcf at torproject.org
Fri Jun 10 13:59:53 UTC 2011


commit c48df422a4eb497d5cc65a77f4d987f3d4999cbf
Author: David Fifield <david at bamsoftware.com>
Date:   Fri Jun 10 03:15:59 2011 -0700

    Let swfcat get the relay from the facilitator.
---
 README     |    9 +++++----
 design.txt |    6 +++---
 swfcat.as  |   27 ++++++++++++++-------------
 3 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/README b/README
index 4e58907..b4b1d0e 100644
--- a/README
+++ b/README
@@ -81,8 +81,8 @@ changing pool of addresses.
 
 == Design notes
 
-The Tor relay address is hardcoded in swfcat.as. It could be any relay,
-with the caveat that the server also has to serve a crossdomain policy.
+Any Tor relay can be used, as long as it also serves a crossdomain
+policy.
 
 The Tor client needs to be able to listen for an incoming connection,
 which generally means not being behind NAT.
@@ -94,11 +94,12 @@ Clients register with the facilitator by sending an HTTP message:
 The Flash proxy also gets a client address over HTTP:
 	GET / HTTP/1.0\r\n
 	\r\n
-The server sends back an address specification in an HTTP respose.
+The server sends back address specifications of a client and a relay in
+an HTTP respose.
 	HTTP/1.0 200 OK\r\n
 	Server: BaseHTTP/0.3 Python/2.5.2\r\n
 	\r\n
-	client=1.2.3.4%3A9000
+	client=1.2.3.4%3A9000&relay=9.9.9.9:9001
 
 == ActionScript programming
 
diff --git a/design.txt b/design.txt
index abc53a4..27be8ab 100644
--- a/design.txt
+++ b/design.txt
@@ -128,8 +128,8 @@ Design of Flash proxies
 7. Behavior of the Flash proxy
 
   The Flash proxy polls the facilitator for client registrations. When
-  it receives a registration, it opens one connection to a Tor relay,
-  one to the given client, and begin proxying data between them.
+  it receives a registration, it opens one connection to the given Tor
+  relay, one to the given client, and begin proxying data between them.
 
   The proxy asks the facilitator for a registration with an HTTP GET
   request:
@@ -139,7 +139,7 @@ Design of Flash proxies
 
   The response code is 200 and the body looks like this:
 
-    client=[<address>:<port>]
+    client=[<address>:<port>]&relay=<address>:<port>
 
   If <address>:<port> is missing, it means that there are no client
   registrations for this proxy.
diff --git a/swfcat.as b/swfcat.as
index 34983ce..8c91ae8 100644
--- a/swfcat.as
+++ b/swfcat.as
@@ -18,12 +18,6 @@ package
 
     public class swfcat extends Sprite
     {
-        /* David's relay (nickname 3VXRyxz67OeRoqHn) that also serves a
-           crossdomain policy. */
-        private const DEFAULT_RELAY_ADDR:Object = {
-            host: "173.255.221.44",
-            port: 9001
-        };
         private const DEFAULT_FACILITATOR_ADDR:Object = {
             host: "tor-facilitator.bamsoftware.com",
             port: 9002
@@ -43,7 +37,6 @@ package
         private var output_text:TextField;
 
         private var fac_addr:Object;
-        private var relay_addr:Object;
 
         /* Number of proxy pairs currently connected (up to
            MAX_NUM_PROXY_PAIRS). */
@@ -158,11 +151,6 @@ package
                 puts("Error: Facilitator spec must be in the form \"host:port\".");
                 return;
             }
-            relay_addr = get_param_addr("relay", DEFAULT_RELAY_ADDR);
-            if (!relay_addr) {
-                puts("Error: Relay spec must be in the form \"host:port\".");
-                return;
-            }
 
             main();
         }
@@ -213,6 +201,8 @@ package
             var loader:URLLoader;
             var client_spec:String;
             var client_addr:Object;
+            var relay_spec:String;
+            var relay_addr:Object;
             var proxy_pair:Object;
 
             setTimeout(main, FACILITATOR_POLL_INTERVAL);
@@ -226,13 +216,24 @@ package
                 puts("Error: missing \"client\" in response.");
                 return;
             }
-            puts("Facilitator: got \"" + client_spec + "\".");
+            relay_spec = loader.data.relay;
+            if (!relay_spec) {
+                puts("Error: missing \"relay\" in response.");
+                return;
+            }
+            puts("Facilitator: got client:\"" + client_spec + "\" "
+                + "relay:\"" + relay_spec + "\".");
 
             client_addr = parse_addr_spec(client_spec);
             if (!client_addr) {
                 puts("Error: Client spec must be in the form \"host:port\".");
                 return;
             }
+            relay_addr = parse_addr_spec(relay_spec);
+            if (!client_addr) {
+                puts("Error: Relay spec must be in the form \"host:port\".");
+                return;
+            }
 
             num_proxy_pairs++;
             total_proxy_pairs++;





More information about the tor-commits mailing list