commit 3fe68658f433adb2b8bec215d4daf48e81003cf7
Author: David Fifield <[email protected]>
Date:   Tue Jan 15 00:37:31 2019 -0700

    Move address and proxy settings into HelperRoundTripper.
    
    Copy them into an instance from the global settings, don't read the
    global settings directly.
---
 meek-client/helper.go      | 15 ++++++++++-----
 meek-client/meek-client.go | 22 ++++++++++++++--------
 2 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/meek-client/helper.go b/meek-client/helper.go
index eaaf302..a003bf7 100644
--- a/meek-client/helper.go
+++ b/meek-client/helper.go
@@ -42,8 +42,16 @@ type ProxySpec struct {
 }
 
 type HelperRoundTripper struct {
+       HelperAddr   *net.TCPAddr
        ReadTimeout  time.Duration
        WriteTimeout time.Duration
+       proxySpec    *ProxySpec
+}
+
+func (rt *HelperRoundTripper) SetProxy(u *url.URL) error {
+       var err error
+       rt.proxySpec, err = makeProxySpec(u)
+       return err
 }
 
 // Return a ProxySpec suitable for the proxy URL in u.
@@ -87,7 +95,7 @@ func makeProxySpec(u *url.URL) (*ProxySpec, error) {
 }
 
 func (rt *HelperRoundTripper) RoundTrip(req *http.Request) (*http.Response, 
error) {
-       s, err := net.DialTCP("tcp", nil, options.HelperAddr)
+       s, err := net.DialTCP("tcp", nil, rt.HelperAddr)
        if err != nil {
                return nil, err
        }
@@ -127,10 +135,7 @@ func (rt *HelperRoundTripper) RoundTrip(req *http.Request) 
(*http.Response, erro
                }
        }
 
-       jsonReq.Proxy, err = makeProxySpec(options.ProxyURL)
-       if err != nil {
-               return nil, err
-       }
+       jsonReq.Proxy = rt.proxySpec
        encReq, err := json.Marshal(&jsonReq)
        if err != nil {
                return nil, err
diff --git a/meek-client/meek-client.go b/meek-client/meek-client.go
index fd16099..9c715a3 100644
--- a/meek-client/meek-client.go
+++ b/meek-client/meek-client.go
@@ -96,10 +96,10 @@ var helperRoundTripper = &HelperRoundTripper{
 
 // Store for command line options.
 var options struct {
-       URL        string
-       Front      string
-       ProxyURL   *url.URL
-       HelperAddr *net.TCPAddr
+       URL       string
+       Front     string
+       ProxyURL  *url.URL
+       UseHelper bool
 }
 
 // When a connection handler starts, +1 is written to this channel; when it
@@ -178,7 +178,7 @@ again:
 // body back into conn.
 func sendRecv(buf []byte, conn net.Conn, info *RequestInfo) (int64, error) {
        var rt http.RoundTripper = httpRoundTripper
-       if options.HelperAddr != nil {
+       if options.UseHelper {
                rt = helperRoundTripper
        }
        req, err := makeRequest(buf, info)
@@ -346,7 +346,7 @@ func acceptLoop(ln *pt.SocksListener) error {
 // Return an error if this proxy URL doesn't work with the rest of the
 // configuration.
 func checkProxyURL(u *url.URL) error {
-       if options.HelperAddr == nil {
+       if !options.UseHelper {
                // Without the helper we only support HTTP proxies.
                if u.Scheme != "http" {
                        return fmt.Errorf("don't understand proxy URL scheme 
%q", u.Scheme)
@@ -407,11 +407,12 @@ func main() {
        }
 
        if helperAddr != "" {
-               options.HelperAddr, err = net.ResolveTCPAddr("tcp", helperAddr)
+               options.UseHelper = true
+               helperRoundTripper.HelperAddr, err = net.ResolveTCPAddr("tcp", 
helperAddr)
                if err != nil {
                        log.Fatalf("can't resolve helper address: %s", err)
                }
-               log.Printf("using helper on %s", options.HelperAddr)
+               log.Printf("using helper on %s", helperRoundTripper.HelperAddr)
        }
 
        if proxy != "" {
@@ -439,6 +440,11 @@ func main() {
                }
                log.Printf("using proxy %s", options.ProxyURL.String())
                httpRoundTripper.Proxy = http.ProxyURL(options.ProxyURL)
+               err = helperRoundTripper.SetProxy(options.ProxyURL)
+               if err != nil {
+                       pt.ProxyError(err.Error())
+                       log.Fatal(fmt.Sprintf("proxy error: %s", err))
+               }
                if ptInfo.ProxyURL != nil {
                        pt.ProxyDone()
                }

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

Reply via email to