From b99292bed85490d6301ec069656912fa7b0aad29 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Tue, 25 Jun 2024 20:40:38 +0800 Subject: [PATCH] add dialTimeout option for service --- config/parsing/node/parse.go | 2 -- config/parsing/service/parse.go | 42 +++++++++++++++++++++------------ go.mod | 2 +- go.sum | 4 ++-- listener/rtcp/listener.go | 8 +++---- listener/rudp/listener.go | 8 +++---- 6 files changed, 38 insertions(+), 28 deletions(-) diff --git a/config/parsing/node/parse.go b/config/parsing/node/parse.go index 52cb382..af99d07 100644 --- a/config/parsing/node/parse.go +++ b/config/parsing/node/parse.go @@ -5,7 +5,6 @@ import ( "net" "regexp" "strings" - "time" "github.com/go-gost/core/bypass" "github.com/go-gost/core/chain" @@ -145,7 +144,6 @@ func ParseNode(hop string, cfg *config.NodeConfig, log logger.Logger) (*chain.No chain.InterfaceTransportOption(cfg.Interface), chain.NetnsTransportOption(cfg.Netns), chain.SockOptsTransportOption(sockOpts), - chain.TimeoutTransportOption(10*time.Second), ) opts := []chain.NodeOption{ diff --git a/config/parsing/service/parse.go b/config/parsing/service/parse.go index 79a5c43..3dfa74f 100644 --- a/config/parsing/service/parse.go +++ b/config/parsing/service/parse.go @@ -63,17 +63,13 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) { "handler": cfg.Handler.Type, }) - listenerLogger := serviceLogger.WithFields(map[string]any{ - "kind": "listener", - }) - tlsCfg := cfg.Listener.TLS if tlsCfg == nil { tlsCfg = &config.TLSConfig{} } tlsConfig, err := tls_util.LoadServerConfig(tlsCfg) if err != nil { - listenerLogger.Error(err) + serviceLogger.Error(err) return nil, err } if tlsConfig == nil { @@ -107,6 +103,7 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) { var pStats *stats.Stats var observePeriod time.Duration var netnsIn, netnsOut string + var dialTimeout time.Duration if cfg.Metadata != nil { md := metadata.NewMetadata(cfg.Metadata) ppv = mdutil.GetInt(md, parsing.MDKeyProxyProtocol) @@ -130,26 +127,42 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) { observePeriod = mdutil.GetDuration(md, "observePeriod") netnsIn = mdutil.GetString(md, "netns") netnsOut = mdutil.GetString(md, "netns.out") + dialTimeout = mdutil.GetDuration(md, "dialTimeout") + } + + listenerLogger := serviceLogger.WithFields(map[string]any{ + "kind": "listener", + }) + + routerOpts := []chain.RouterOption{ + chain.TimeoutRouterOption(dialTimeout), + chain.InterfaceRouterOption(ifce), + chain.NetnsRouterOption(netnsOut), + chain.SockOptsRouterOption(sockOpts), + chain.ResolverRouterOption(registry.ResolverRegistry().Get(cfg.Resolver)), + chain.HostMapperRouterOption(registry.HostsRegistry().Get(cfg.Hosts)), + chain.LoggerRouterOption(listenerLogger), + } + if !ignoreChain { + routerOpts = append(routerOpts, + chain.ChainRouterOption(chainGroup(cfg.Listener.Chain, cfg.Listener.ChainGroup)), + ) } listenOpts := []listener.Option{ listener.AddrOption(cfg.Addr), + listener.RouterOption(chain.NewRouter(routerOpts...)), listener.AutherOption(auther), listener.AuthOption(auth_parser.Info(cfg.Listener.Auth)), listener.TLSConfigOption(tlsConfig), listener.AdmissionOption(admission.AdmissionGroup(admissions...)), listener.TrafficLimiterOption(registry.TrafficLimiterRegistry().Get(cfg.Limiter)), listener.ConnLimiterOption(registry.ConnLimiterRegistry().Get(cfg.CLimiter)), - listener.LoggerOption(listenerLogger), listener.ServiceOption(cfg.Name), listener.ProxyProtocolOption(ppv), listener.StatsOption(pStats), listener.NetnsOption(netnsIn), - } - if !ignoreChain { - listenOpts = append(listenOpts, - listener.ChainOption(chainGroup(cfg.Listener.Chain, cfg.Listener.ChainGroup)), - ) + listener.LoggerOption(listenerLogger), } if netnsIn != "" { @@ -232,9 +245,9 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) { }) } - routerOpts := []chain.RouterOption{ + routerOpts = []chain.RouterOption{ chain.RetriesRouterOption(cfg.Handler.Retries), - // chain.TimeoutRouterOption(10*time.Second), + chain.TimeoutRouterOption(dialTimeout), chain.InterfaceRouterOption(ifce), chain.NetnsRouterOption(netnsOut), chain.SockOptsRouterOption(sockOpts), @@ -248,12 +261,11 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) { chain.ChainRouterOption(chainGroup(cfg.Handler.Chain, cfg.Handler.ChainGroup)), ) } - router := chain.NewRouter(routerOpts...) var h handler.Handler if rf := registry.HandlerRegistry().Get(cfg.Handler.Type); rf != nil { h = rf( - handler.RouterOption(router), + handler.RouterOption(chain.NewRouter(routerOpts...)), handler.AutherOption(auther), handler.AuthOption(auth_parser.Info(cfg.Handler.Auth)), handler.BypassOption(bypass.BypassGroup(bypass_parser.List(cfg.Bypass, cfg.Bypasses...)...)), diff --git a/go.mod b/go.mod index feb4498..e516bf7 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d github.com/gin-contrib/cors v1.5.0 github.com/gin-gonic/gin v1.9.1 - github.com/go-gost/core v0.0.0-20240624131323-ca340b1bf1a2 + github.com/go-gost/core v0.0.0-20240625123708-4e831b95e8cc github.com/go-gost/gosocks4 v0.0.1 github.com/go-gost/gosocks5 v0.3.1 github.com/go-gost/plugin v0.0.0-20240103125338-9c84e29cb81a diff --git a/go.sum b/go.sum index af59158..27501f8 100644 --- a/go.sum +++ b/go.sum @@ -53,8 +53,8 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/go-gost/core v0.0.0-20240624131323-ca340b1bf1a2 h1:+VxqwMcnO/Jqpa88n9D2YoApTFrSRbjlFd9Oy/xvE0s= -github.com/go-gost/core v0.0.0-20240624131323-ca340b1bf1a2/go.mod h1:aTPFucvJyqc/o5h5/ZtyHJ0xgFIq5Ip+cMlhazm+TaI= +github.com/go-gost/core v0.0.0-20240625123708-4e831b95e8cc h1:aj0FZ3RYZPqlDko/pKPPAAve1/73g+uIq/sVEGtarss= +github.com/go-gost/core v0.0.0-20240625123708-4e831b95e8cc/go.mod h1:aTPFucvJyqc/o5h5/ZtyHJ0xgFIq5Ip+cMlhazm+TaI= 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 h1:N6K/gE8oNLJX2nVX/O50FERHjgW4gGksZ7QbOvPF3n8= diff --git a/listener/rtcp/listener.go b/listener/rtcp/listener.go index 263ae15..0ca8538 100644 --- a/listener/rtcp/listener.go +++ b/listener/rtcp/listener.go @@ -60,10 +60,10 @@ func (l *rtcpListener) Init(md md.Metadata) (err error) { l.laddr = &bindAddr{addr: l.options.Addr} } - l.router = chain.NewRouter( - chain.ChainRouterOption(l.options.Chain), - chain.LoggerRouterOption(l.logger), - ) + l.router = l.options.Router + if l.router == nil { + l.router = chain.NewRouter(chain.LoggerRouterOption(l.logger)) + } return } diff --git a/listener/rudp/listener.go b/listener/rudp/listener.go index 5b3ca23..c65dc42 100644 --- a/listener/rudp/listener.go +++ b/listener/rudp/listener.go @@ -60,10 +60,10 @@ func (l *rudpListener) Init(md md.Metadata) (err error) { l.laddr = &bindAddr{addr: l.options.Addr} } - l.router = chain.NewRouter( - chain.ChainRouterOption(l.options.Chain), - chain.LoggerRouterOption(l.logger), - ) + l.router = l.options.Router + if l.router == nil { + l.router = chain.NewRouter(chain.LoggerRouterOption(l.logger)) + } return }