commit e64ac21625492499a30805c8332626776485c188
Author: David Fifield <[email protected]>
Date:   Tue Dec 3 19:53:01 2013 -0800

    Implement startProcesses as a loop.
    
    It's reading from a static list of method names and commands.
---
 obfs-flash-server.go |  104 +++++++++++++++++++++-----------------------------
 1 file changed, 44 insertions(+), 60 deletions(-)

diff --git a/obfs-flash-server.go b/obfs-flash-server.go
index 6678e13..e70b842 100644
--- a/obfs-flash-server.go
+++ b/obfs-flash-server.go
@@ -148,8 +148,14 @@ func findBindAddr(r io.Reader, methodName string) 
(*net.TCPAddr, error) {
        return nil, errors.New(fmt.Sprintf("no SMETHOD %s found before SMETHODS 
DONE", methodName))
 }
 
-func startProcesses(connectBackAddr net.Addr) (extBindAddr *net.TCPAddr, procs 
ProcList, err error) {
-       var midBindAddr *net.TCPAddr
+// Represents a server transport plugin configuration like:
+//     ServerTransportPlugin MethodName exec Command
+type ServerTransportPlugin struct {
+       MethodName string
+       Command    []string
+}
+
+func startProcesses(connectBackAddr net.Addr) (bindAddr *net.TCPAddr, procs 
ProcList, err error) {
        var stdout io.ReadCloser
 
        defer func() {
@@ -160,69 +166,47 @@ func startProcesses(connectBackAddr net.Addr) 
(extBindAddr *net.TCPAddr, procs P
                }
        }()
 
-       // obfsproxy talks to connectBackAddr and listens on midBindAddr.
-       cmd := exec.Command("obfsproxy", "managed")
-       cmd.Env = []string{
-               "TOR_PT_MANAGED_TRANSPORT_VER=1",
-               "TOR_PT_STATE_LOCATION=" + os.Getenv("TOR_PT_STATE_LOCATION"),
-               "TOR_PT_EXTENDED_SERVER_PORT=",
-               "TOR_PT_ORPORT=" + connectBackAddr.String(),
-               "TOR_PT_SERVER_TRANSPORTS=obfs3",
-               "TOR_PT_SERVER_BINDADDR=obfs3-127.0.0.1:0",
-       }
-       log("obfsproxy environment %q", cmd.Env)
-       stdout, err = cmd.StdoutPipe()
-       if err != nil {
-               log("Failed to open obfsproxy stdout pipe: %s.", err)
-               return
-       }
-       err = cmd.Start()
-       if err != nil {
-               log("Failed to start obfsproxy: %s.", err)
-               return
+       plugins := []ServerTransportPlugin{
+               {"obfs3", []string{"obfsproxy", "managed"}},
+               {"websocket", []string{"websocket-server"}},
        }
-       log("Exec %s with args %q pid %d.", cmd.Path, cmd.Args, cmd.Process.Pid)
-       procs = append(procs, cmd.Process)
 
-       midBindAddr, err = findBindAddr(stdout, "obfs3")
-       if err != nil {
-               log("Failed to find obfsproxy bindaddr: %s.", err)
-               return
-       }
-       log("obfsproxy bindaddr is %s.", midBindAddr)
-
-       // websocket-server talks to midBindAddr and listens on extBindAddr.
-       cmd = exec.Command("websocket-server")
-       cmd.Env = []string{
-               "TOR_PT_MANAGED_TRANSPORT_VER=1",
-               "TOR_PT_STATE_LOCATION=" + os.Getenv("TOR_PT_STATE_LOCATION"),
-               "TOR_PT_EXTENDED_SERVER_PORT=",
-               "TOR_PT_ORPORT=" + midBindAddr.String(),
-               "TOR_PT_SERVER_TRANSPORTS=websocket",
-               "TOR_PT_SERVER_BINDADDR=websocket-127.0.0.1:0",
-       }
-       log("websocket-server environment %q", cmd.Env)
-       stdout, err = cmd.StdoutPipe()
-       if err != nil {
-               log("Failed to open websocket-server stdout pipe: %s.", err)
-               return
-       }
-       err = cmd.Start()
-       if err != nil {
-               log("Failed to start websocket-server: %s.", err)
-               return
-       }
-       log("Exec %s with args %q pid %d.", cmd.Path, cmd.Args, cmd.Process.Pid)
-       procs = append(procs, cmd.Process)
+       bindAddr = connectBackAddr.(*net.TCPAddr)
+       for _, plugin := range plugins {
+               // This plugin has its TOR_PT_ORPORT set to the previous
+               // bindAddr.
+               cmd := exec.Command(plugin.Command[0], plugin.Command[1:]...)
+               cmd.Env = []string{
+                       "TOR_PT_MANAGED_TRANSPORT_VER=1",
+                       "TOR_PT_STATE_LOCATION=" + 
os.Getenv("TOR_PT_STATE_LOCATION"),
+                       "TOR_PT_EXTENDED_SERVER_PORT=",
+                       "TOR_PT_ORPORT=" + bindAddr.String(),
+                       "TOR_PT_SERVER_TRANSPORTS=" + plugin.MethodName,
+                       "TOR_PT_SERVER_BINDADDR=" + plugin.MethodName + 
"-127.0.0.1:0",
+               }
+               log("%s environment %q", cmd.Args[0], cmd.Env)
+               stdout, err = cmd.StdoutPipe()
+               if err != nil {
+                       log("Failed to open %s stdout pipe: %s.", cmd.Args[0], 
err)
+                       return
+               }
+               err = cmd.Start()
+               if err != nil {
+                       log("Failed to start %s: %s.", cmd.Args[0], err)
+                       return
+               }
+               log("Exec %s with args %q pid %d.", cmd.Path, cmd.Args, 
cmd.Process.Pid)
+               procs = append(procs, cmd.Process)
 
-       extBindAddr, err = findBindAddr(stdout, "websocket")
-       if err != nil {
-               log("Failed to find websocket-server bindaddr: %s.", err)
-               return
+               bindAddr, err = findBindAddr(stdout, plugin.MethodName)
+               if err != nil {
+                       log("Failed to find %s bindaddr: %s.", cmd.Args[0], err)
+                       return
+               }
+               log("%s bindaddr is %s.", cmd.Args[0], bindAddr)
        }
-       log("websocket-server bindaddr is %s.", extBindAddr)
 
-       return extBindAddr, procs, err
+       return bindAddr, procs, err
 }
 
 func acceptLoop(name string, ln *net.TCPListener, ch chan *net.TCPConn) {



_______________________________________________
tor-commits mailing list
[email protected]
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to