Update: avoid implicit params

This commit is contained in:
Young 2020-12-10 12:27:35 +08:00
parent 1a56a878ac
commit 017136707a
2 changed files with 24 additions and 19 deletions

View File

@ -182,6 +182,8 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) {
tr = gost.WSSTransporter(wsOpts) tr = gost.WSSTransporter(wsOpts)
case "mwss": case "mwss":
tr = gost.MWSSTransporter(wsOpts) tr = gost.MWSSTransporter(wsOpts)
case "mtws":
tr = gost.MTWSTransporter(wsOpts)
case "kcp": case "kcp":
config, err := parseKCPConfig(node.Get("c")) config, err := parseKCPConfig(node.Get("c"))
if err != nil { if err != nil {
@ -231,8 +233,10 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) {
tr = gost.FakeTCPTransporter() tr = gost.FakeTCPTransporter()
case "udp": case "udp":
tr = gost.UDPTransporter() tr = gost.UDPTransporter()
default: case "tcp":
tr = gost.TCPTransporter() tr = gost.TCPTransporter()
default:
return nil, fmt.Errorf("unknown transport: %s", node.Transport)
} }
var connector gost.Connector var connector gost.Connector
@ -261,8 +265,10 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) {
connector = gost.HTTPConnector(node.User) connector = gost.HTTPConnector(node.User)
case "relay": case "relay":
connector = gost.RelayConnector(node.User) connector = gost.RelayConnector(node.User)
default: case "auto":
connector = gost.AutoConnector(node.User) connector = gost.AutoConnector(node.User)
default:
return nil, fmt.Errorf("unknown connector: %s", node.Protocol)
} }
host := node.Get("host") host := node.Get("host")
@ -546,7 +552,7 @@ func (r *route) GenRouters() ([]router, error) {
QueueSize: node.GetInt("queue"), QueueSize: node.GetInt("queue"),
}) })
default: default:
ln, err = gost.TCPListener(node.Addr) return nil, fmt.Errorf("unknown transport:%s", node.Transport)
} }
if err != nil { if err != nil {
return nil, err return nil, err
@ -590,13 +596,10 @@ func (r *route) GenRouters() ([]router, error) {
handler = gost.DNSHandler(node.Remote) handler = gost.DNSHandler(node.Remote)
case "relay": case "relay":
handler = gost.RelayHandler(node.Remote) handler = gost.RelayHandler(node.Remote)
default: case "auto":
// start from 2.5, if remote is not empty, then we assume that it is a forward tunnel.
if node.Remote != "" {
handler = gost.TCPDirectForwardHandler(node.Remote)
} else {
handler = gost.AutoHandler() handler = gost.AutoHandler()
} default:
return nil, fmt.Errorf("unknown protocol:%s", node.Protocol)
} }
var whitelist, blacklist *gost.Permissions var whitelist, blacklist *gost.Permissions

20
node.go
View File

@ -67,19 +67,21 @@ func ParseNode(s string) (node Node, err error) {
schemes := strings.Split(u.Scheme, "+") schemes := strings.Split(u.Scheme, "+")
if len(schemes) == 1 { if len(schemes) == 1 {
node.Protocol = schemes[0] node.Protocol = schemes[0]
node.Transport = schemes[0]
} }
if len(schemes) == 2 { if len(schemes) == 2 {
node.Protocol = schemes[0] node.Protocol = schemes[0]
node.Transport = schemes[1] node.Transport = schemes[1]
} }
if len(schemes) > 2 {
return node, fmt.Errorf("unknown scheme:%s", u.Scheme)
}
switch node.Transport { switch node.Transport {
case "https": case "https":
node.Transport = "tls" node.Transport = "tls"
case "tls", "mtls": case "tls", "mtls":
case "http2", "h2", "h2c": case "http2", "h2", "h2c":
case "ws", "mws", "wss", "mwss": case "ws", "mws", "wss", "mwss", "mtws":
case "kcp", "ssh", "quic": case "kcp", "ssh", "quic":
case "ssu": case "ssu":
node.Transport = "udp" node.Transport = "udp"
@ -90,8 +92,10 @@ func ParseNode(s string) (node Node, err error) {
case "ftcp": // fake TCP case "ftcp": // fake TCP
case "dns": case "dns":
case "redu", "redirectu": // UDP tproxy case "redu", "redirectu": // UDP tproxy
default: case "":
node.Transport = "tcp" node.Transport = "tcp"
default:
return Node{}, fmt.Errorf("unknown transport:%s", node.Transport)
} }
switch node.Protocol { switch node.Protocol {
@ -112,8 +116,11 @@ func ParseNode(s string) (node Node, err error) {
case "ftcp": // fake TCP case "ftcp": // fake TCP
case "dns", "dot", "doh": case "dns", "dot", "doh":
case "relay": case "relay":
case "":
case "auto":
node.Protocol = "auto"
default: default:
node.Protocol = "" return Node{}, fmt.Errorf("unknown protocol:%s", node.Protocol)
} }
return return
@ -172,12 +179,7 @@ func (node *Node) GetDuration(key string) time.Duration {
func (node Node) String() string { func (node Node) String() string {
var scheme string var scheme string
if node.url != nil {
scheme = node.url.Scheme
}
if scheme == "" {
scheme = fmt.Sprintf("%s+%s", node.Protocol, node.Transport) scheme = fmt.Sprintf("%s+%s", node.Protocol, node.Transport)
}
return fmt.Sprintf("%s://%s", return fmt.Sprintf("%s://%s",
scheme, node.Addr) scheme, node.Addr)
} }