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)
case "mwss":
tr = gost.MWSSTransporter(wsOpts)
case "mtws":
tr = gost.MTWSTransporter(wsOpts)
case "kcp":
config, err := parseKCPConfig(node.Get("c"))
if err != nil {
@ -231,8 +233,10 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) {
tr = gost.FakeTCPTransporter()
case "udp":
tr = gost.UDPTransporter()
default:
case "tcp":
tr = gost.TCPTransporter()
default:
return nil, fmt.Errorf("unknown transport: %s", node.Transport)
}
var connector gost.Connector
@ -261,8 +265,10 @@ func parseChainNode(ns string) (nodes []gost.Node, err error) {
connector = gost.HTTPConnector(node.User)
case "relay":
connector = gost.RelayConnector(node.User)
default:
case "auto":
connector = gost.AutoConnector(node.User)
default:
return nil, fmt.Errorf("unknown connector: %s", node.Protocol)
}
host := node.Get("host")
@ -546,7 +552,7 @@ func (r *route) GenRouters() ([]router, error) {
QueueSize: node.GetInt("queue"),
})
default:
ln, err = gost.TCPListener(node.Addr)
return nil, fmt.Errorf("unknown transport:%s", node.Transport)
}
if err != nil {
return nil, err
@ -590,13 +596,10 @@ func (r *route) GenRouters() ([]router, error) {
handler = gost.DNSHandler(node.Remote)
case "relay":
handler = gost.RelayHandler(node.Remote)
case "auto":
handler = gost.AutoHandler()
default:
// 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()
}
return nil, fmt.Errorf("unknown protocol:%s", node.Protocol)
}
var whitelist, blacklist *gost.Permissions

22
node.go
View File

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