]> Cypherpunks.ru repositories - govpn.git/blobdiff - src/cypherpunks.ru/govpn/client/proxy.go
Upgrade Client
[govpn.git] / src / cypherpunks.ru / govpn / client / proxy.go
index be7d1149fa3e4d44e257a195fe92151c11e8ec8d..9ee1208d9bac3fee97af5cb7b283d9059362f1a3 100644 (file)
@@ -21,22 +21,23 @@ package client
 import (
        "bufio"
        "encoding/base64"
-       "fmt"
        "net"
        "net/http"
 
+       "github.com/pkg/errors"
+
        "cypherpunks.ru/govpn"
 )
 
 func (c *Client) proxyTCP() {
        proxyAddr, err := net.ResolveTCPAddr("tcp", c.config.ProxyAddress)
        if err != nil {
-               c.Error <- err
+               c.Error <- errors.Wrapf(err, "net.ResolveTCPAddr %s", c.config.ProxyAddress)
                return
        }
        conn, err := net.DialTCP("tcp", nil, proxyAddr)
        if err != nil {
-               c.Error <- err
+               c.Error <- errors.Wrapf(err, "net.DialTCP %s", proxyAddr.String())
                return
        }
        req := "CONNECT " + c.config.ProxyAddress + " HTTP/1.1\n"
@@ -46,15 +47,25 @@ func (c *Client) proxyTCP() {
                req += base64.StdEncoding.EncodeToString([]byte(c.config.ProxyAuthentication)) + "\n"
        }
        req += "\n"
-       conn.Write([]byte(req))
+       if _, err = conn.Write([]byte(req)); err != nil {
+               govpn.CloseLog(conn, c.logger, c.LogFields())
+               c.Error <- errors.Wrap(err, "conn.Write")
+               return
+       }
        resp, err := http.ReadResponse(
                bufio.NewReader(conn),
                &http.Request{Method: "CONNECT"},
        )
-       if err != nil || resp.StatusCode != http.StatusOK {
-               c.Error <- fmt.Errorf("Unexpected response from proxy: %s", err.Error())
+       if err != nil {
+               govpn.CloseLog(conn, c.logger, c.LogFields())
+               c.Error <- errors.Wrap(err, "http.ReadResponse CONNECT")
+               return
+       }
+       if resp.StatusCode != http.StatusOK {
+               govpn.CloseLog(conn, c.logger, c.LogFields())
+               c.Error <- errors.Errorf("Unexpected response from proxy: %s", http.StatusText(resp.StatusCode))
                return
        }
-       govpn.Printf(`[proxy-connected remote="%s" addr="%s"]`, c.config.RemoteAddress, *proxyAddr)
+       c.logger.WithField("func", logFuncPrefix+"Client.proxyTCP").WithFields(c.config.LogFields()).Debug("Proxy connected")
        go c.handleTCP(conn)
 }