diff --git a/dialer/ftcp/metadata.go b/dialer/ftcp/metadata.go index a8e51d2..ff9e65a 100644 --- a/dialer/ftcp/metadata.go +++ b/dialer/ftcp/metadata.go @@ -1,22 +1,10 @@ package ftcp import ( - "time" - md "github.com/go-gost/core/metadata" ) -const ( - dialTimeout = "dialTimeout" -) - -const ( - defaultDialTimeout = 5 * time.Second -) - -type metadata struct { - dialTimeout time.Duration -} +type metadata struct{} func (d *ftcpDialer) parseMetadata(md md.Metadata) (err error) { return diff --git a/dialer/http2/h2/dialer.go b/dialer/http2/h2/dialer.go index c9e2cfc..e257498 100644 --- a/dialer/http2/h2/dialer.go +++ b/dialer/http2/h2/dialer.go @@ -123,13 +123,16 @@ func (d *h2Dialer) Dial(ctx context.Context, address string, opts ...dialer.Dial req := &http.Request{ Method: http.MethodConnect, URL: &url.URL{Scheme: "https", Host: host}, - Header: make(http.Header), + Header: d.md.header, ProtoMajor: 2, ProtoMinor: 0, Body: pr, Host: host, // ContentLength: -1, } + if req.Header == nil { + req.Header = make(http.Header) + } if d.md.path != "" { req.Method = http.MethodGet req.URL.Path = d.md.path diff --git a/dialer/http2/h2/metadata.go b/dialer/http2/h2/metadata.go index 96617a3..7c1ceb2 100644 --- a/dialer/http2/h2/metadata.go +++ b/dialer/http2/h2/metadata.go @@ -1,23 +1,33 @@ package h2 import ( + "net/http" + mdata "github.com/go-gost/core/metadata" mdx "github.com/go-gost/x/metadata" ) type metadata struct { - host string - path string + host string + path string + header http.Header } func (d *h2Dialer) parseMetadata(md mdata.Metadata) (err error) { const ( - host = "host" - path = "path" + host = "host" + path = "path" + header = "header" ) d.md.host = mdx.GetString(md, host) d.md.path = mdx.GetString(md, path) - + if m := mdx.GetStringMapString(md, header); len(m) > 0 { + h := http.Header{} + for k, v := range m { + h.Add(k, v) + } + d.md.header = h + } return } diff --git a/dialer/http2/metadata.go b/dialer/http2/metadata.go index 413d8af..03b1a6b 100644 --- a/dialer/http2/metadata.go +++ b/dialer/http2/metadata.go @@ -4,8 +4,7 @@ import ( mdata "github.com/go-gost/core/metadata" ) -type metadata struct { -} +type metadata struct{} func (d *http2Dialer) parseMetadata(md mdata.Metadata) (err error) { return diff --git a/dialer/quic/metadata.go b/dialer/quic/metadata.go index c587f7c..bc8ba1a 100644 --- a/dialer/quic/metadata.go +++ b/dialer/quic/metadata.go @@ -13,7 +13,6 @@ type metadata struct { handshakeTimeout time.Duration cipherKey []byte - host string } func (d *quicDialer) parseMetadata(md mdata.Metadata) (err error) { @@ -23,7 +22,6 @@ func (d *quicDialer) parseMetadata(md mdata.Metadata) (err error) { maxIdleTimeout = "maxIdleTimeout" cipherKey = "cipherKey" - host = "host" ) d.md.handshakeTimeout = mdx.GetDuration(md, handshakeTimeout) @@ -36,6 +34,5 @@ func (d *quicDialer) parseMetadata(md mdata.Metadata) (err error) { d.md.handshakeTimeout = mdx.GetDuration(md, handshakeTimeout) d.md.maxIdleTimeout = mdx.GetDuration(md, maxIdleTimeout) - d.md.host = mdx.GetString(md, host) return } diff --git a/dialer/ssh/dialer.go b/dialer/ssh/dialer.go index 95a60d3..f91c788 100644 --- a/dialer/ssh/dialer.go +++ b/dialer/ssh/dialer.go @@ -24,17 +24,19 @@ type sshDialer struct { sessionMutex sync.Mutex logger logger.Logger md metadata + options dialer.Options } func NewDialer(opts ...dialer.Option) dialer.Dialer { - options := &dialer.Options{} + options := dialer.Options{} for _, opt := range opts { - opt(options) + opt(&options) } return &sshDialer{ sessions: make(map[string]*sshSession), logger: options.Logger, + options: options, } } @@ -139,9 +141,9 @@ func (d *sshDialer) initSession(ctx context.Context, addr string, conn net.Conn) Timeout: 30 * time.Second, HostKeyCallback: ssh.InsecureIgnoreHostKey(), } - if d.md.user != nil { - config.User = d.md.user.Username() - if password, _ := d.md.user.Password(); password != "" { + if d.options.Auth != nil { + config.User = d.options.Auth.Username() + if password, _ := d.options.Auth.Password(); password != "" { config.Auth = []ssh.AuthMethod{ ssh.Password(password), } diff --git a/dialer/ssh/metadata.go b/dialer/ssh/metadata.go index 5ce1018..d0b744b 100644 --- a/dialer/ssh/metadata.go +++ b/dialer/ssh/metadata.go @@ -2,8 +2,6 @@ package ssh import ( "io/ioutil" - "net/url" - "strings" "time" mdata "github.com/go-gost/core/metadata" @@ -13,27 +11,16 @@ import ( type metadata struct { handshakeTimeout time.Duration - user *url.Userinfo signer ssh.Signer } func (d *sshDialer) parseMetadata(md mdata.Metadata) (err error) { const ( handshakeTimeout = "handshakeTimeout" - user = "user" privateKeyFile = "privateKeyFile" passphrase = "passphrase" ) - if v := mdx.GetString(md, user); v != "" { - ss := strings.SplitN(v, ":", 2) - if len(ss) == 1 { - d.md.user = url.User(ss[0]) - } else { - d.md.user = url.UserPassword(ss[0], ss[1]) - } - } - if key := mdx.GetString(md, privateKeyFile); key != "" { data, err := ioutil.ReadFile(key) if err != nil { diff --git a/go.mod b/go.mod index 80c5512..39025a7 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/docker/libcontainer v2.2.1+incompatible github.com/gin-contrib/cors v1.3.1 github.com/gin-gonic/gin v1.7.7 - github.com/go-gost/core v0.0.0-20220405145417-b88025ea6d67 + github.com/go-gost/core v0.0.0-20220407150135-aeda8b11ca46 github.com/go-gost/gosocks4 v0.0.1 github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09 github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7 diff --git a/go.sum b/go.sum index 21f1add..eea1400 100644 --- a/go.sum +++ b/go.sum @@ -119,10 +119,8 @@ github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gost/core v0.0.0-20220405095520-c2f49e94443c h1:TzDyqefjnUVgdT6piHZgeXrVKXevawsMs0kmSZZhDR4= -github.com/go-gost/core v0.0.0-20220405095520-c2f49e94443c/go.mod h1:/LzdiQ+0+3FMhyqw0phjFjXFdOa1fcQR5/bL/7ripCs= -github.com/go-gost/core v0.0.0-20220405145417-b88025ea6d67 h1:qKtSDjOdQcNNLUTifLtI12fcZm6STp9Lsp5Bj962Gx0= -github.com/go-gost/core v0.0.0-20220405145417-b88025ea6d67/go.mod h1:/LzdiQ+0+3FMhyqw0phjFjXFdOa1fcQR5/bL/7ripCs= +github.com/go-gost/core v0.0.0-20220407150135-aeda8b11ca46 h1:5Bg5OiSt1thHi03n9oiKptsfYzvgpOHuoLi4eAQOSSs= +github.com/go-gost/core v0.0.0-20220407150135-aeda8b11ca46/go.mod h1:bHVbCS9da6XtKNYMkMUVcck5UqDDUkyC37erVfs4GXQ= github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s= github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc= github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09 h1:A95M6UWcfZgOuJkQ7QLfG0Hs5peWIUSysCDNz4pfe04= diff --git a/metrics/metrics.go b/metrics/metrics.go index c9f0ad7..1324ed9 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -62,7 +62,7 @@ func NewMetrics() metrics.Metrics { Name: string(metrics.MetricChainErrorsCounter), Help: "Total chain errors", }, - []string{"host", "chain"}), + []string{"host", "chain", "node"}), }, histograms: map[metrics.MetricName]*prometheus.HistogramVec{ metrics.MetricServiceRequestsDurationObserver: prometheus.NewHistogramVec(