commit 3fe68658f433adb2b8bec215d4daf48e81003cf7 Author: David Fifield david@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() }