[tor-commits] [meek/master] Move address and proxy settings into HelperRoundTripper.

dcf at torproject.org dcf at torproject.org
Tue Jan 15 07:42:07 UTC 2019


commit 3fe68658f433adb2b8bec215d4daf48e81003cf7
Author: David Fifield <david at bamsoftware.com>
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()
 		}



More information about the tor-commits mailing list