From 017136707a05f052b868b99cf95d01e3b97807d8 Mon Sep 17 00:00:00 2001 From: Young Date: Thu, 10 Dec 2020 12:27:35 +0800 Subject: [PATCH] Update: avoid implicit params --- cmd/gost/route.go | 21 ++++++++++++--------- node.go | 22 ++++++++++++---------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/cmd/gost/route.go b/cmd/gost/route.go index 0db5b2e..0725ecc 100644 --- a/cmd/gost/route.go +++ b/cmd/gost/route.go @@ -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 diff --git a/node.go b/node.go index f64afc4..06e5c15 100644 --- a/node.go +++ b/node.go @@ -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) }