diff --git a/.gitmodules b/.gitmodules index 79ed2e4..1d6dfe0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,7 @@ [submodule "crypto"] path = vendor/golang.org/x/crypto url = https://go.googlesource.com/crypto +[submodule "go-http-dialer"] + path = vendor/github.com/mwitkow/go-http-dialer + url = https://github.com/mwitkow/go-http-dialer + diff --git a/qpm/core/context.go b/qpm/core/context.go index 4a3f7be..4401187 100644 --- a/qpm/core/context.go +++ b/qpm/core/context.go @@ -2,12 +2,17 @@ package core import ( "fmt" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" "log" + "net" + "net/url" "os" - msg "qpm.io/common/messages" "runtime" + "time" + + "github.com/mwitkow/go-http-dialer" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + msg "qpm.io/common/messages" ) var ( @@ -38,17 +43,43 @@ func NewContext() *Context { address = Address } - noTls := os.Getenv("NO_TLS") == "1" + // noTls := os.Getenv("NO_TLS") == "1" - var tlsOption grpc.DialOption - if noTls { - tlsOption = grpc.WithInsecure() + // var tlsOption grpc.DialOption + // if noTls { + // tlsOption = grpc.WithInsecure() + // } else { + // tlsOption = grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")) + // } + + // conn, err := grpc.Dial(address, tlsOption, grpc.WithUserAgent(UA)) + + opts := make([]grpc.DialOption, 0) + opts = append(opts, grpc.WithUserAgent(UA)) + + noTLS := os.Getenv("NO_TLS") == "1" + if noTLS { + opts = append(opts, grpc.WithInsecure()) } else { - tlsOption = grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")) + opts = append(opts, grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, ""))) } - conn, err := grpc.Dial(address, tlsOption, grpc.WithUserAgent(UA)) + httpProxy := os.Getenv("HTTP_PROXY") + if httpProxy != "" { + log.Println("env: ", httpProxy) + httpProxyURL, err := url.Parse(httpProxy) + if err != nil { + log.Fatalf("did not get http proxy: %v", err) + } else { + proxyDialer := http_dialer.New(httpProxyURL) + opts = append(opts, grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) { return proxyDialer.Dial("tcp", addr) })) + } + } + conn, err := grpc.Dial(address, opts...) + if err != nil { + log.Fatalf("did not connect: %v", err) + } if err != nil { log.Fatalf("did not connect: %v", err) } diff --git a/vendor/github.com/mwitkow/go-http-dialer b/vendor/github.com/mwitkow/go-http-dialer new file mode 160000 index 0000000..378f744 --- /dev/null +++ b/vendor/github.com/mwitkow/go-http-dialer @@ -0,0 +1 @@ +Subproject commit 378f744fb2b81a6b96e3f40cde4f3bcab5a9cff0