add metadata

This commit is contained in:
ginuerzh
2021-10-29 23:49:57 +08:00
parent 4969bc1067
commit 57a4d116d4
46 changed files with 466 additions and 381 deletions

View File

@ -3,10 +3,12 @@ package connector
import (
"context"
"net"
"github.com/go-gost/gost/pkg/components/metadata"
)
// Connector is responsible for connecting to the destination address.
type Connector interface {
Init(Metadata) error
Init(metadata.Metadata) error
Connect(ctx context.Context, conn net.Conn, network, address string, opts ...ConnectOption) (net.Conn, error)
}

View File

@ -9,8 +9,10 @@ import (
"net"
"net/http"
"net/url"
"strings"
"github.com/go-gost/gost/pkg/components/connector"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
)
@ -35,12 +37,8 @@ func NewConnector(opts ...connector.Option) connector.Connector {
}
}
func (c *Connector) Init(md connector.Metadata) (err error) {
c.md, err = c.parseMetadata(md)
if err != nil {
return
}
return nil
func (c *Connector) Init(md md.Metadata) (err error) {
return c.parseMetadata(md)
}
func (c *Connector) Connect(ctx context.Context, conn net.Conn, network, address string, opts ...connector.ConnectOption) (net.Conn, error) {
@ -83,17 +81,19 @@ func (c *Connector) Connect(ctx context.Context, conn net.Conn, network, address
return conn, nil
}
func (c *Connector) parseMetadata(md connector.Metadata) (m metadata, err error) {
if md == nil {
md = connector.Metadata{}
}
m.UserAgent = md[userAgent]
if m.UserAgent == "" {
m.UserAgent = defaultUserAgent
func (c *Connector) parseMetadata(md md.Metadata) (err error) {
c.md.UserAgent, _ = md.Get(userAgent).(string)
if c.md.UserAgent == "" {
c.md.UserAgent = defaultUserAgent
}
if v, ok := md[username]; ok {
m.User = url.UserPassword(v, md[password])
if v := md.GetString(auth); v != "" {
ss := strings.SplitN(v, ":", 2)
if len(ss) == 1 {
c.md.User = url.User(ss[0])
} else {
c.md.User = url.UserPassword(ss[0], ss[1])
}
}
return

View File

@ -4,8 +4,7 @@ import "net/url"
const (
userAgent = "userAgent"
username = "username"
password = "password"
auth = "auth"
)
const (

View File

@ -1,3 +0,0 @@
package connector
type Metadata map[string]string

View File

@ -5,6 +5,7 @@ import (
"net"
"github.com/go-gost/gost/pkg/components/connector"
md "github.com/go-gost/gost/pkg/components/metadata"
"github.com/go-gost/gost/pkg/logger"
"github.com/go-gost/gost/pkg/registry"
)
@ -29,13 +30,8 @@ func NewConnector(opts ...connector.Option) connector.Connector {
}
}
func (c *Connector) Init(md connector.Metadata) (err error) {
c.md, err = c.parseMetadata(md)
if err != nil {
return
}
return nil
func (c *Connector) Init(md md.Metadata) (err error) {
return c.parseMetadata(md)
}
func (c *Connector) Connect(ctx context.Context, conn net.Conn, network, address string, opts ...connector.ConnectOption) (net.Conn, error) {
@ -43,13 +39,9 @@ func (c *Connector) Connect(ctx context.Context, conn net.Conn, network, address
return conn, nil
}
func (c *Connector) parseMetadata(md connector.Metadata) (m metadata, err error) {
if md == nil {
md = connector.Metadata{}
}
m.method = md[method]
m.password = md[password]
func (c *Connector) parseMetadata(md md.Metadata) (err error) {
c.md.method = md.GetString(method)
c.md.password = md.GetString(password)
return
}