add dialTimeout option for service
This commit is contained in:
parent
f9bfca76ed
commit
b99292bed8
@ -5,7 +5,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/go-gost/core/bypass"
|
"github.com/go-gost/core/bypass"
|
||||||
"github.com/go-gost/core/chain"
|
"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.InterfaceTransportOption(cfg.Interface),
|
||||||
chain.NetnsTransportOption(cfg.Netns),
|
chain.NetnsTransportOption(cfg.Netns),
|
||||||
chain.SockOptsTransportOption(sockOpts),
|
chain.SockOptsTransportOption(sockOpts),
|
||||||
chain.TimeoutTransportOption(10*time.Second),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
opts := []chain.NodeOption{
|
opts := []chain.NodeOption{
|
||||||
|
@ -63,17 +63,13 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
"handler": cfg.Handler.Type,
|
"handler": cfg.Handler.Type,
|
||||||
})
|
})
|
||||||
|
|
||||||
listenerLogger := serviceLogger.WithFields(map[string]any{
|
|
||||||
"kind": "listener",
|
|
||||||
})
|
|
||||||
|
|
||||||
tlsCfg := cfg.Listener.TLS
|
tlsCfg := cfg.Listener.TLS
|
||||||
if tlsCfg == nil {
|
if tlsCfg == nil {
|
||||||
tlsCfg = &config.TLSConfig{}
|
tlsCfg = &config.TLSConfig{}
|
||||||
}
|
}
|
||||||
tlsConfig, err := tls_util.LoadServerConfig(tlsCfg)
|
tlsConfig, err := tls_util.LoadServerConfig(tlsCfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
listenerLogger.Error(err)
|
serviceLogger.Error(err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if tlsConfig == nil {
|
if tlsConfig == nil {
|
||||||
@ -107,6 +103,7 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
var pStats *stats.Stats
|
var pStats *stats.Stats
|
||||||
var observePeriod time.Duration
|
var observePeriod time.Duration
|
||||||
var netnsIn, netnsOut string
|
var netnsIn, netnsOut string
|
||||||
|
var dialTimeout time.Duration
|
||||||
if cfg.Metadata != nil {
|
if cfg.Metadata != nil {
|
||||||
md := metadata.NewMetadata(cfg.Metadata)
|
md := metadata.NewMetadata(cfg.Metadata)
|
||||||
ppv = mdutil.GetInt(md, parsing.MDKeyProxyProtocol)
|
ppv = mdutil.GetInt(md, parsing.MDKeyProxyProtocol)
|
||||||
@ -130,26 +127,42 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
observePeriod = mdutil.GetDuration(md, "observePeriod")
|
observePeriod = mdutil.GetDuration(md, "observePeriod")
|
||||||
netnsIn = mdutil.GetString(md, "netns")
|
netnsIn = mdutil.GetString(md, "netns")
|
||||||
netnsOut = mdutil.GetString(md, "netns.out")
|
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{
|
listenOpts := []listener.Option{
|
||||||
listener.AddrOption(cfg.Addr),
|
listener.AddrOption(cfg.Addr),
|
||||||
|
listener.RouterOption(chain.NewRouter(routerOpts...)),
|
||||||
listener.AutherOption(auther),
|
listener.AutherOption(auther),
|
||||||
listener.AuthOption(auth_parser.Info(cfg.Listener.Auth)),
|
listener.AuthOption(auth_parser.Info(cfg.Listener.Auth)),
|
||||||
listener.TLSConfigOption(tlsConfig),
|
listener.TLSConfigOption(tlsConfig),
|
||||||
listener.AdmissionOption(admission.AdmissionGroup(admissions...)),
|
listener.AdmissionOption(admission.AdmissionGroup(admissions...)),
|
||||||
listener.TrafficLimiterOption(registry.TrafficLimiterRegistry().Get(cfg.Limiter)),
|
listener.TrafficLimiterOption(registry.TrafficLimiterRegistry().Get(cfg.Limiter)),
|
||||||
listener.ConnLimiterOption(registry.ConnLimiterRegistry().Get(cfg.CLimiter)),
|
listener.ConnLimiterOption(registry.ConnLimiterRegistry().Get(cfg.CLimiter)),
|
||||||
listener.LoggerOption(listenerLogger),
|
|
||||||
listener.ServiceOption(cfg.Name),
|
listener.ServiceOption(cfg.Name),
|
||||||
listener.ProxyProtocolOption(ppv),
|
listener.ProxyProtocolOption(ppv),
|
||||||
listener.StatsOption(pStats),
|
listener.StatsOption(pStats),
|
||||||
listener.NetnsOption(netnsIn),
|
listener.NetnsOption(netnsIn),
|
||||||
}
|
listener.LoggerOption(listenerLogger),
|
||||||
if !ignoreChain {
|
|
||||||
listenOpts = append(listenOpts,
|
|
||||||
listener.ChainOption(chainGroup(cfg.Listener.Chain, cfg.Listener.ChainGroup)),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if netnsIn != "" {
|
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.RetriesRouterOption(cfg.Handler.Retries),
|
||||||
// chain.TimeoutRouterOption(10*time.Second),
|
chain.TimeoutRouterOption(dialTimeout),
|
||||||
chain.InterfaceRouterOption(ifce),
|
chain.InterfaceRouterOption(ifce),
|
||||||
chain.NetnsRouterOption(netnsOut),
|
chain.NetnsRouterOption(netnsOut),
|
||||||
chain.SockOptsRouterOption(sockOpts),
|
chain.SockOptsRouterOption(sockOpts),
|
||||||
@ -248,12 +261,11 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
chain.ChainRouterOption(chainGroup(cfg.Handler.Chain, cfg.Handler.ChainGroup)),
|
chain.ChainRouterOption(chainGroup(cfg.Handler.Chain, cfg.Handler.ChainGroup)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
router := chain.NewRouter(routerOpts...)
|
|
||||||
|
|
||||||
var h handler.Handler
|
var h handler.Handler
|
||||||
if rf := registry.HandlerRegistry().Get(cfg.Handler.Type); rf != nil {
|
if rf := registry.HandlerRegistry().Get(cfg.Handler.Type); rf != nil {
|
||||||
h = rf(
|
h = rf(
|
||||||
handler.RouterOption(router),
|
handler.RouterOption(chain.NewRouter(routerOpts...)),
|
||||||
handler.AutherOption(auther),
|
handler.AutherOption(auther),
|
||||||
handler.AuthOption(auth_parser.Info(cfg.Handler.Auth)),
|
handler.AuthOption(auth_parser.Info(cfg.Handler.Auth)),
|
||||||
handler.BypassOption(bypass.BypassGroup(bypass_parser.List(cfg.Bypass, cfg.Bypasses...)...)),
|
handler.BypassOption(bypass.BypassGroup(bypass_parser.List(cfg.Bypass, cfg.Bypasses...)...)),
|
||||||
|
2
go.mod
2
go.mod
@ -9,7 +9,7 @@ require (
|
|||||||
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d
|
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d
|
||||||
github.com/gin-contrib/cors v1.5.0
|
github.com/gin-contrib/cors v1.5.0
|
||||||
github.com/gin-gonic/gin v1.9.1
|
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/gosocks4 v0.0.1
|
||||||
github.com/go-gost/gosocks5 v0.3.1
|
github.com/go-gost/gosocks5 v0.3.1
|
||||||
github.com/go-gost/plugin v0.0.0-20240103125338-9c84e29cb81a
|
github.com/go-gost/plugin v0.0.0-20240103125338-9c84e29cb81a
|
||||||
|
4
go.sum
4
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-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 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
|
||||||
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
|
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-20240625123708-4e831b95e8cc h1:aj0FZ3RYZPqlDko/pKPPAAve1/73g+uIq/sVEGtarss=
|
||||||
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/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 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s=
|
||||||
github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc=
|
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=
|
github.com/go-gost/gosocks5 v0.3.1 h1:N6K/gE8oNLJX2nVX/O50FERHjgW4gGksZ7QbOvPF3n8=
|
||||||
|
@ -60,10 +60,10 @@ func (l *rtcpListener) Init(md md.Metadata) (err error) {
|
|||||||
l.laddr = &bindAddr{addr: l.options.Addr}
|
l.laddr = &bindAddr{addr: l.options.Addr}
|
||||||
}
|
}
|
||||||
|
|
||||||
l.router = chain.NewRouter(
|
l.router = l.options.Router
|
||||||
chain.ChainRouterOption(l.options.Chain),
|
if l.router == nil {
|
||||||
chain.LoggerRouterOption(l.logger),
|
l.router = chain.NewRouter(chain.LoggerRouterOption(l.logger))
|
||||||
)
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -60,10 +60,10 @@ func (l *rudpListener) Init(md md.Metadata) (err error) {
|
|||||||
l.laddr = &bindAddr{addr: l.options.Addr}
|
l.laddr = &bindAddr{addr: l.options.Addr}
|
||||||
}
|
}
|
||||||
|
|
||||||
l.router = chain.NewRouter(
|
l.router = l.options.Router
|
||||||
chain.ChainRouterOption(l.options.Chain),
|
if l.router == nil {
|
||||||
chain.LoggerRouterOption(l.logger),
|
l.router = chain.NewRouter(chain.LoggerRouterOption(l.logger))
|
||||||
)
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user