fix quic config
This commit is contained in:
parent
76fbcb2046
commit
30d44c7376
@ -36,6 +36,10 @@ const (
|
|||||||
mdKeyInterface = "interface"
|
mdKeyInterface = "interface"
|
||||||
mdKeySoMark = "so_mark"
|
mdKeySoMark = "so_mark"
|
||||||
mdKeyHash = "hash"
|
mdKeyHash = "hash"
|
||||||
|
mdKeyPreUp = "preUp"
|
||||||
|
mdKeyPreDown = "preDown"
|
||||||
|
mdKeyPostUp = "postUp"
|
||||||
|
mdKeyPostDown = "postDown"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ParseAuther(cfg *config.AutherConfig) auth.Authenticator {
|
func ParseAuther(cfg *config.AutherConfig) auth.Authenticator {
|
||||||
|
@ -81,6 +81,7 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
|
|
||||||
var ppv int
|
var ppv int
|
||||||
ifce := cfg.Interface
|
ifce := cfg.Interface
|
||||||
|
var preUp, preDown, postUp, postDown []string
|
||||||
if cfg.Metadata != nil {
|
if cfg.Metadata != nil {
|
||||||
md := metadata.NewMetadata(cfg.Metadata)
|
md := metadata.NewMetadata(cfg.Metadata)
|
||||||
ppv = mdutil.GetInt(md, mdKeyProxyProtocol)
|
ppv = mdutil.GetInt(md, mdKeyProxyProtocol)
|
||||||
@ -92,6 +93,10 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
Mark: v,
|
Mark: v,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
preUp = mdutil.GetStrings(md, mdKeyPreUp)
|
||||||
|
preDown = mdutil.GetStrings(md, mdKeyPreDown)
|
||||||
|
postUp = mdutil.GetStrings(md, mdKeyPostUp)
|
||||||
|
postDown = mdutil.GetStrings(md, mdKeyPostDown)
|
||||||
}
|
}
|
||||||
|
|
||||||
var ln listener.Listener
|
var ln listener.Listener
|
||||||
@ -204,6 +209,10 @@ func ParseService(cfg *config.ServiceConfig) (service.Service, error) {
|
|||||||
s := xservice.NewService(cfg.Name, ln, h,
|
s := xservice.NewService(cfg.Name, ln, h,
|
||||||
xservice.AdmissionOption(admission.AdmissionGroup(admissions...)),
|
xservice.AdmissionOption(admission.AdmissionGroup(admissions...)),
|
||||||
xservice.LoggerOption(serviceLogger),
|
xservice.LoggerOption(serviceLogger),
|
||||||
|
xservice.PreUpOption(preUp),
|
||||||
|
xservice.PreDownOption(preDown),
|
||||||
|
xservice.PostUpOption(postUp),
|
||||||
|
xservice.PostDownOption(postDown),
|
||||||
)
|
)
|
||||||
|
|
||||||
serviceLogger.Infof("listening on %s/%s", s.Addr().String(), s.Addr().Network())
|
serviceLogger.Infof("listening on %s/%s", s.Addr().String(), s.Addr().Network())
|
||||||
|
@ -86,6 +86,15 @@ func (d *http3Dialer) Dial(ctx context.Context, addr string, opts ...dialer.Dial
|
|||||||
|
|
||||||
return quic.DialEarly(udpConn.(net.PacketConn), udpAddr, host, tlsCfg, cfg)
|
return quic.DialEarly(udpConn.(net.PacketConn), udpAddr, host, tlsCfg, cfg)
|
||||||
},
|
},
|
||||||
|
QuicConfig: &quic.Config{
|
||||||
|
KeepAlivePeriod: d.md.keepAlivePeriod,
|
||||||
|
HandshakeIdleTimeout: d.md.handshakeTimeout,
|
||||||
|
MaxIdleTimeout: d.md.maxIdleTimeout,
|
||||||
|
Versions: []quic.VersionNumber{
|
||||||
|
quic.Version1,
|
||||||
|
},
|
||||||
|
MaxIncomingStreams: int64(d.md.maxStreams),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
AuthorizePath: d.md.authorizePath,
|
AuthorizePath: d.md.authorizePath,
|
||||||
|
@ -9,22 +9,22 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
dialTimeout = "dialTimeout"
|
|
||||||
defaultAuthorizePath = "/authorize"
|
defaultAuthorizePath = "/authorize"
|
||||||
defaultPushPath = "/push"
|
defaultPushPath = "/push"
|
||||||
defaultPullPath = "/pull"
|
defaultPullPath = "/pull"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
defaultDialTimeout = 5 * time.Second
|
|
||||||
)
|
|
||||||
|
|
||||||
type metadata struct {
|
type metadata struct {
|
||||||
dialTimeout time.Duration
|
|
||||||
authorizePath string
|
authorizePath string
|
||||||
pushPath string
|
pushPath string
|
||||||
pullPath string
|
pullPath string
|
||||||
host string
|
host string
|
||||||
|
|
||||||
|
// QUIC config options
|
||||||
|
keepAlivePeriod time.Duration
|
||||||
|
maxIdleTimeout time.Duration
|
||||||
|
handshakeTimeout time.Duration
|
||||||
|
maxStreams int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *http3Dialer) parseMetadata(md mdata.Metadata) (err error) {
|
func (d *http3Dialer) parseMetadata(md mdata.Metadata) (err error) {
|
||||||
@ -33,6 +33,12 @@ func (d *http3Dialer) parseMetadata(md mdata.Metadata) (err error) {
|
|||||||
pushPath = "pushPath"
|
pushPath = "pushPath"
|
||||||
pullPath = "pullPath"
|
pullPath = "pullPath"
|
||||||
host = "host"
|
host = "host"
|
||||||
|
|
||||||
|
keepAlive = "keepAlive"
|
||||||
|
keepAlivePeriod = "ttl"
|
||||||
|
handshakeTimeout = "handshakeTimeout"
|
||||||
|
maxIdleTimeout = "maxIdleTimeout"
|
||||||
|
maxStreams = "maxStreams"
|
||||||
)
|
)
|
||||||
|
|
||||||
d.md.authorizePath = mdutil.GetString(md, authorizePath)
|
d.md.authorizePath = mdutil.GetString(md, authorizePath)
|
||||||
@ -49,5 +55,15 @@ func (d *http3Dialer) parseMetadata(md mdata.Metadata) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
d.md.host = mdutil.GetString(md, host)
|
d.md.host = mdutil.GetString(md, host)
|
||||||
|
if !md.IsExists(keepAlive) || mdutil.GetBool(md, keepAlive) {
|
||||||
|
d.md.keepAlivePeriod = mdutil.GetDuration(md, keepAlivePeriod)
|
||||||
|
if d.md.keepAlivePeriod <= 0 {
|
||||||
|
d.md.keepAlivePeriod = 10 * time.Second
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d.md.handshakeTimeout = mdutil.GetDuration(md, handshakeTimeout)
|
||||||
|
d.md.maxIdleTimeout = mdutil.GetDuration(md, maxIdleTimeout)
|
||||||
|
d.md.maxStreams = mdutil.GetInt(md, maxStreams)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/dialer"
|
"github.com/go-gost/core/dialer"
|
||||||
"github.com/go-gost/core/logger"
|
|
||||||
md "github.com/go-gost/core/metadata"
|
md "github.com/go-gost/core/metadata"
|
||||||
pht_util "github.com/go-gost/x/internal/util/pht"
|
pht_util "github.com/go-gost/x/internal/util/pht"
|
||||||
"github.com/go-gost/x/registry"
|
"github.com/go-gost/x/registry"
|
||||||
@ -24,7 +23,6 @@ type phtDialer struct {
|
|||||||
clientMutex sync.Mutex
|
clientMutex sync.Mutex
|
||||||
tlsEnabled bool
|
tlsEnabled bool
|
||||||
md metadata
|
md metadata
|
||||||
logger logger.Logger
|
|
||||||
options dialer.Options
|
options dialer.Options
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ package pht
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
mdata "github.com/go-gost/core/metadata"
|
mdata "github.com/go-gost/core/metadata"
|
||||||
mdutil "github.com/go-gost/core/metadata/util"
|
mdutil "github.com/go-gost/core/metadata/util"
|
||||||
@ -15,12 +14,7 @@ const (
|
|||||||
defaultPullPath = "/pull"
|
defaultPullPath = "/pull"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
defaultDialTimeout = 5 * time.Second
|
|
||||||
)
|
|
||||||
|
|
||||||
type metadata struct {
|
type metadata struct {
|
||||||
dialTimeout time.Duration
|
|
||||||
authorizePath string
|
authorizePath string
|
||||||
pushPath string
|
pushPath string
|
||||||
pullPath string
|
pullPath string
|
||||||
|
@ -110,6 +110,7 @@ func (d *quicDialer) initSession(ctx context.Context, addr net.Addr, conn net.Pa
|
|||||||
quic.Version1,
|
quic.Version1,
|
||||||
quic.VersionDraft29,
|
quic.VersionDraft29,
|
||||||
},
|
},
|
||||||
|
MaxIncomingStreams: int64(d.md.maxStreams),
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsCfg := d.options.TLSConfig
|
tlsCfg := d.options.TLSConfig
|
||||||
|
@ -11,6 +11,7 @@ type metadata struct {
|
|||||||
keepAlivePeriod time.Duration
|
keepAlivePeriod time.Duration
|
||||||
maxIdleTimeout time.Duration
|
maxIdleTimeout time.Duration
|
||||||
handshakeTimeout time.Duration
|
handshakeTimeout time.Duration
|
||||||
|
maxStreams int
|
||||||
|
|
||||||
cipherKey []byte
|
cipherKey []byte
|
||||||
}
|
}
|
||||||
@ -21,6 +22,7 @@ func (d *quicDialer) parseMetadata(md mdata.Metadata) (err error) {
|
|||||||
keepAlivePeriod = "ttl"
|
keepAlivePeriod = "ttl"
|
||||||
handshakeTimeout = "handshakeTimeout"
|
handshakeTimeout = "handshakeTimeout"
|
||||||
maxIdleTimeout = "maxIdleTimeout"
|
maxIdleTimeout = "maxIdleTimeout"
|
||||||
|
maxStreams = "maxStreams"
|
||||||
|
|
||||||
cipherKey = "cipherKey"
|
cipherKey = "cipherKey"
|
||||||
)
|
)
|
||||||
@ -29,7 +31,7 @@ func (d *quicDialer) parseMetadata(md mdata.Metadata) (err error) {
|
|||||||
d.md.cipherKey = []byte(key)
|
d.md.cipherKey = []byte(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
if mdutil.GetBool(md, keepAlive) {
|
if !md.IsExists(keepAlive) || mdutil.GetBool(md, keepAlive) {
|
||||||
d.md.keepAlivePeriod = mdutil.GetDuration(md, keepAlivePeriod)
|
d.md.keepAlivePeriod = mdutil.GetDuration(md, keepAlivePeriod)
|
||||||
if d.md.keepAlivePeriod <= 0 {
|
if d.md.keepAlivePeriod <= 0 {
|
||||||
d.md.keepAlivePeriod = 10 * time.Second
|
d.md.keepAlivePeriod = 10 * time.Second
|
||||||
@ -37,6 +39,7 @@ func (d *quicDialer) parseMetadata(md mdata.Metadata) (err error) {
|
|||||||
}
|
}
|
||||||
d.md.handshakeTimeout = mdutil.GetDuration(md, handshakeTimeout)
|
d.md.handshakeTimeout = mdutil.GetDuration(md, handshakeTimeout)
|
||||||
d.md.maxIdleTimeout = mdutil.GetDuration(md, maxIdleTimeout)
|
d.md.maxIdleTimeout = mdutil.GetDuration(md, maxIdleTimeout)
|
||||||
|
d.md.maxStreams = mdutil.GetInt(md, maxStreams)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
15
go.mod
15
go.mod
@ -16,7 +16,7 @@ require (
|
|||||||
github.com/gobwas/glob v0.2.3
|
github.com/gobwas/glob v0.2.3
|
||||||
github.com/golang/snappy v0.0.4
|
github.com/golang/snappy v0.0.4
|
||||||
github.com/gorilla/websocket v1.5.0
|
github.com/gorilla/websocket v1.5.0
|
||||||
github.com/lucas-clemente/quic-go v0.29.0
|
github.com/lucas-clemente/quic-go v0.30.0
|
||||||
github.com/miekg/dns v1.1.50
|
github.com/miekg/dns v1.1.50
|
||||||
github.com/pires/go-proxyproto v0.6.2
|
github.com/pires/go-proxyproto v0.6.2
|
||||||
github.com/prometheus/client_golang v1.12.1
|
github.com/prometheus/client_golang v1.12.1
|
||||||
@ -37,7 +37,7 @@ require (
|
|||||||
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9
|
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9
|
||||||
golang.zx2c4.com/wireguard v0.0.0-20220703234212-c31a7b1ab478
|
golang.zx2c4.com/wireguard v0.0.0-20220703234212-c31a7b1ab478
|
||||||
google.golang.org/grpc v1.49.0
|
google.golang.org/grpc v1.49.0
|
||||||
google.golang.org/protobuf v1.27.1
|
google.golang.org/protobuf v1.28.0
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -56,23 +56,23 @@ require (
|
|||||||
github.com/golang/mock v1.6.0 // indirect
|
github.com/golang/mock v1.6.0 // indirect
|
||||||
github.com/golang/protobuf v1.5.2 // indirect
|
github.com/golang/protobuf v1.5.2 // indirect
|
||||||
github.com/google/gopacket v1.1.19 // indirect
|
github.com/google/gopacket v1.1.19 // indirect
|
||||||
|
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/klauspost/cpuid v1.3.1 // indirect
|
github.com/klauspost/cpuid v1.3.1 // indirect
|
||||||
github.com/klauspost/reedsolomon v1.9.9 // indirect
|
github.com/klauspost/reedsolomon v1.9.9 // indirect
|
||||||
github.com/leodido/go-urn v1.2.1 // indirect
|
github.com/leodido/go-urn v1.2.1 // indirect
|
||||||
github.com/magiconair/properties v1.8.6 // indirect
|
github.com/magiconair/properties v1.8.6 // indirect
|
||||||
github.com/marten-seemann/qpack v0.2.1 // indirect
|
github.com/marten-seemann/qpack v0.3.0 // indirect
|
||||||
github.com/marten-seemann/qtls-go1-18 v0.1.2 // indirect
|
github.com/marten-seemann/qtls-go1-18 v0.1.3 // indirect
|
||||||
github.com/marten-seemann/qtls-go1-19 v0.1.0 // indirect
|
github.com/marten-seemann/qtls-go1-19 v0.1.1 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
|
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.4.3 // indirect
|
github.com/mitchellh/mapstructure v1.4.3 // indirect
|
||||||
github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104 // indirect
|
github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/nxadm/tail v1.4.8 // indirect
|
github.com/onsi/ginkgo/v2 v2.2.0 // indirect
|
||||||
github.com/onsi/ginkgo v1.16.5 // indirect
|
|
||||||
github.com/pelletier/go-toml v1.9.4 // indirect
|
github.com/pelletier/go-toml v1.9.4 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/prometheus/client_model v0.2.0 // indirect
|
github.com/prometheus/client_model v0.2.0 // indirect
|
||||||
@ -96,5 +96,4 @@ require (
|
|||||||
golang.zx2c4.com/wintun v0.0.0-20211104114900-415007cec224 // indirect
|
golang.zx2c4.com/wintun v0.0.0-20211104114900-415007cec224 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350 // indirect
|
google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350 // indirect
|
||||||
gopkg.in/ini.v1 v1.66.4 // indirect
|
gopkg.in/ini.v1 v1.66.4 // indirect
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
|
|
||||||
)
|
)
|
||||||
|
49
go.sum
49
go.sum
@ -83,8 +83,6 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y
|
|||||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
|
||||||
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
|
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
|
||||||
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
|
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
@ -196,6 +194,8 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf
|
|||||||
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
|
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
|
||||||
|
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
@ -208,7 +208,6 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
|
|||||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
|
||||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||||
@ -245,16 +244,16 @@ github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdA
|
|||||||
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||||
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
||||||
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
||||||
github.com/lucas-clemente/quic-go v0.29.0 h1:Vw0mGTfmWqGzh4jx/kMymsIkFK6rErFVmg+t9RLrnZE=
|
github.com/lucas-clemente/quic-go v0.30.0 h1:nwLW0h8ahVQ5EPTIM7uhl/stHqQDea15oRlYKZmw2O0=
|
||||||
github.com/lucas-clemente/quic-go v0.29.0/go.mod h1:CTcNfLYJS2UuRNB+zcNlgvkjBhxX6Hm3WUxxAQx2mgE=
|
github.com/lucas-clemente/quic-go v0.30.0/go.mod h1:ssOrRsOmdxa768Wr78vnh2B8JozgLsMzG/g+0qEC7uk=
|
||||||
github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
|
github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
|
||||||
github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
|
github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
|
||||||
github.com/marten-seemann/qpack v0.2.1 h1:jvTsT/HpCn2UZJdP+UUB53FfUUgeOyG5K1ns0OJOGVs=
|
github.com/marten-seemann/qpack v0.3.0 h1:UiWstOgT8+znlkDPOg2+3rIuYXJ2CnGDkGUXN6ki6hE=
|
||||||
github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc=
|
github.com/marten-seemann/qpack v0.3.0/go.mod h1:cGfKPBiP4a9EQdxCwEwI/GEeWAsjSekBvx/X8mh58+g=
|
||||||
github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM=
|
github.com/marten-seemann/qtls-go1-18 v0.1.3 h1:R4H2Ks8P6pAtUagjFty2p7BVHn3XiwDAl7TTQf5h7TI=
|
||||||
github.com/marten-seemann/qtls-go1-18 v0.1.2/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
|
github.com/marten-seemann/qtls-go1-18 v0.1.3/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
|
||||||
github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU=
|
github.com/marten-seemann/qtls-go1-19 v0.1.1 h1:mnbxeq3oEyQxQXwI4ReCgW9DPoPR94sNlqWoDZnjRIE=
|
||||||
github.com/marten-seemann/qtls-go1-19 v0.1.0/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI=
|
github.com/marten-seemann/qtls-go1-19 v0.1.1/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI=
|
||||||
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
|
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
|
||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
|
||||||
@ -276,17 +275,11 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
|
|||||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
|
||||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
|
||||||
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
|
||||||
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
|
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
|
||||||
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
|
github.com/onsi/ginkgo/v2 v2.2.0 h1:3ZNA3L1c5FYDFTTxbFeVGGD8jYvjYauHD30YgLxVsNI=
|
||||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
github.com/onsi/ginkgo/v2 v2.2.0/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk=
|
||||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q=
|
||||||
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
|
||||||
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
|
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
|
||||||
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
||||||
github.com/pires/go-proxyproto v0.6.2 h1:KAZ7UteSOt6urjme6ZldyFm4wDe/z0ZUP0Yv0Dos0d8=
|
github.com/pires/go-proxyproto v0.6.2 h1:KAZ7UteSOt6urjme6ZldyFm4wDe/z0ZUP0Yv0Dos0d8=
|
||||||
@ -456,7 +449,6 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVD
|
|||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -479,7 +471,6 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/
|
|||||||
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
|
||||||
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
@ -519,7 +510,6 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -532,11 +522,8 @@ golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -552,7 +539,6 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -563,7 +549,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -643,7 +628,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u
|
|||||||
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
|
||||||
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||||
@ -757,8 +741,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
|
|||||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
|
|
||||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
|
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
||||||
|
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
@ -766,13 +751,11 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
|
|||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
|
||||||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
||||||
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
|
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
|
||||||
gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
|
gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
|
||||||
gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
@ -783,8 +766,8 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
@ -55,7 +55,15 @@ func (l *http3Listener) Init(md md.Metadata) (err error) {
|
|||||||
|
|
||||||
l.server = pht_util.NewHTTP3Server(
|
l.server = pht_util.NewHTTP3Server(
|
||||||
l.options.Addr,
|
l.options.Addr,
|
||||||
&quic.Config{},
|
&quic.Config{
|
||||||
|
KeepAlivePeriod: l.md.keepAlivePeriod,
|
||||||
|
HandshakeIdleTimeout: l.md.handshakeTimeout,
|
||||||
|
MaxIdleTimeout: l.md.maxIdleTimeout,
|
||||||
|
Versions: []quic.VersionNumber{
|
||||||
|
quic.Version1,
|
||||||
|
},
|
||||||
|
MaxIncomingStreams: int64(l.md.maxStreams),
|
||||||
|
},
|
||||||
pht_util.TLSConfigServerOption(l.options.TLSConfig),
|
pht_util.TLSConfigServerOption(l.options.TLSConfig),
|
||||||
pht_util.BacklogServerOption(l.md.backlog),
|
pht_util.BacklogServerOption(l.md.backlog),
|
||||||
pht_util.PathServerOption(l.md.authorizePath, l.md.pushPath, l.md.pullPath),
|
pht_util.PathServerOption(l.md.authorizePath, l.md.pushPath, l.md.pullPath),
|
||||||
|
@ -2,6 +2,7 @@ package http3
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
mdata "github.com/go-gost/core/metadata"
|
mdata "github.com/go-gost/core/metadata"
|
||||||
mdutil "github.com/go-gost/core/metadata/util"
|
mdutil "github.com/go-gost/core/metadata/util"
|
||||||
@ -19,6 +20,12 @@ type metadata struct {
|
|||||||
pushPath string
|
pushPath string
|
||||||
pullPath string
|
pullPath string
|
||||||
backlog int
|
backlog int
|
||||||
|
|
||||||
|
// QUIC config options
|
||||||
|
keepAlivePeriod time.Duration
|
||||||
|
maxIdleTimeout time.Duration
|
||||||
|
handshakeTimeout time.Duration
|
||||||
|
maxStreams int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *http3Listener) parseMetadata(md mdata.Metadata) (err error) {
|
func (l *http3Listener) parseMetadata(md mdata.Metadata) (err error) {
|
||||||
@ -27,6 +34,12 @@ func (l *http3Listener) parseMetadata(md mdata.Metadata) (err error) {
|
|||||||
pushPath = "pushPath"
|
pushPath = "pushPath"
|
||||||
pullPath = "pullPath"
|
pullPath = "pullPath"
|
||||||
|
|
||||||
|
keepAlive = "keepAlive"
|
||||||
|
keepAlivePeriod = "ttl"
|
||||||
|
handshakeTimeout = "handshakeTimeout"
|
||||||
|
maxIdleTimeout = "maxIdleTimeout"
|
||||||
|
maxStreams = "maxStreams"
|
||||||
|
|
||||||
backlog = "backlog"
|
backlog = "backlog"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -48,5 +61,15 @@ func (l *http3Listener) parseMetadata(md mdata.Metadata) (err error) {
|
|||||||
l.md.backlog = defaultBacklog
|
l.md.backlog = defaultBacklog
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if mdutil.GetBool(md, keepAlive) {
|
||||||
|
l.md.keepAlivePeriod = mdutil.GetDuration(md, keepAlivePeriod)
|
||||||
|
if l.md.keepAlivePeriod <= 0 {
|
||||||
|
l.md.keepAlivePeriod = 10 * time.Second
|
||||||
|
}
|
||||||
|
}
|
||||||
|
l.md.handshakeTimeout = mdutil.GetDuration(md, handshakeTimeout)
|
||||||
|
l.md.maxIdleTimeout = mdutil.GetDuration(md, maxIdleTimeout)
|
||||||
|
l.md.maxStreams = mdutil.GetInt(md, maxStreams)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -77,6 +77,7 @@ func (l *quicListener) Init(md md.Metadata) (err error) {
|
|||||||
quic.Version1,
|
quic.Version1,
|
||||||
quic.VersionDraft29,
|
quic.VersionDraft29,
|
||||||
},
|
},
|
||||||
|
MaxIncomingStreams: int64(l.md.maxStreams),
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsCfg := l.options.TLSConfig
|
tlsCfg := l.options.TLSConfig
|
||||||
|
@ -16,6 +16,7 @@ type metadata struct {
|
|||||||
keepAlivePeriod time.Duration
|
keepAlivePeriod time.Duration
|
||||||
handshakeTimeout time.Duration
|
handshakeTimeout time.Duration
|
||||||
maxIdleTimeout time.Duration
|
maxIdleTimeout time.Duration
|
||||||
|
maxStreams int
|
||||||
|
|
||||||
cipherKey []byte
|
cipherKey []byte
|
||||||
backlog int
|
backlog int
|
||||||
@ -27,6 +28,7 @@ func (l *quicListener) parseMetadata(md mdata.Metadata) (err error) {
|
|||||||
keepAlivePeriod = "ttl"
|
keepAlivePeriod = "ttl"
|
||||||
handshakeTimeout = "handshakeTimeout"
|
handshakeTimeout = "handshakeTimeout"
|
||||||
maxIdleTimeout = "maxIdleTimeout"
|
maxIdleTimeout = "maxIdleTimeout"
|
||||||
|
maxStreams = "maxStreams"
|
||||||
|
|
||||||
backlog = "backlog"
|
backlog = "backlog"
|
||||||
cipherKey = "cipherKey"
|
cipherKey = "cipherKey"
|
||||||
@ -49,6 +51,7 @@ func (l *quicListener) parseMetadata(md mdata.Metadata) (err error) {
|
|||||||
}
|
}
|
||||||
l.md.handshakeTimeout = mdutil.GetDuration(md, handshakeTimeout)
|
l.md.handshakeTimeout = mdutil.GetDuration(md, handshakeTimeout)
|
||||||
l.md.maxIdleTimeout = mdutil.GetDuration(md, maxIdleTimeout)
|
l.md.maxIdleTimeout = mdutil.GetDuration(md, maxIdleTimeout)
|
||||||
|
l.md.maxStreams = mdutil.GetInt(md, maxStreams)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,9 @@ func (l *tunListener) createTunDevice() (dev io.ReadWriteCloser, name string, er
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = &tunDevice{dev: ifce}
|
dev = &tunDevice{
|
||||||
|
dev: ifce,
|
||||||
|
}
|
||||||
name, err = ifce.Name()
|
name, err = ifce.Name()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -5,7 +5,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type admissionRegistry struct {
|
type admissionRegistry struct {
|
||||||
registry
|
registry[admission.Admission]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *admissionRegistry) Register(name string, v admission.Admission) error {
|
func (r *admissionRegistry) Register(name string, v admission.Admission) error {
|
||||||
|
@ -5,7 +5,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type autherRegistry struct {
|
type autherRegistry struct {
|
||||||
registry
|
registry[auth.Authenticator]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *autherRegistry) Register(name string, v auth.Authenticator) error {
|
func (r *autherRegistry) Register(name string, v auth.Authenticator) error {
|
||||||
|
@ -5,7 +5,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type bypassRegistry struct {
|
type bypassRegistry struct {
|
||||||
registry
|
registry[bypass.Bypass]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *bypassRegistry) Register(name string, v bypass.Bypass) error {
|
func (r *bypassRegistry) Register(name string, v bypass.Bypass) error {
|
||||||
|
@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type chainRegistry struct {
|
type chainRegistry struct {
|
||||||
registry
|
registry[chain.Chainer]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *chainRegistry) Register(name string, v chain.Chainer) error {
|
func (r *chainRegistry) Register(name string, v chain.Chainer) error {
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
type NewConnector func(opts ...connector.Option) connector.Connector
|
type NewConnector func(opts ...connector.Option) connector.Connector
|
||||||
|
|
||||||
type connectorRegistry struct {
|
type connectorRegistry struct {
|
||||||
registry
|
registry[NewConnector]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *connectorRegistry) Register(name string, v NewConnector) error {
|
func (r *connectorRegistry) Register(name string, v NewConnector) error {
|
||||||
@ -17,10 +17,3 @@ func (r *connectorRegistry) Register(name string, v NewConnector) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *connectorRegistry) Get(name string) NewConnector {
|
|
||||||
if v := r.registry.Get(name); v != nil {
|
|
||||||
return v.(NewConnector)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
type NewDialer func(opts ...dialer.Option) dialer.Dialer
|
type NewDialer func(opts ...dialer.Option) dialer.Dialer
|
||||||
|
|
||||||
type dialerRegistry struct {
|
type dialerRegistry struct {
|
||||||
registry
|
registry[NewDialer]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *dialerRegistry) Register(name string, v NewDialer) error {
|
func (r *dialerRegistry) Register(name string, v NewDialer) error {
|
||||||
@ -17,10 +17,3 @@ func (r *dialerRegistry) Register(name string, v NewDialer) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *dialerRegistry) Get(name string) NewDialer {
|
|
||||||
if v := r.registry.Get(name); v != nil {
|
|
||||||
return v.(NewDialer)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
type NewHandler func(opts ...handler.Option) handler.Handler
|
type NewHandler func(opts ...handler.Option) handler.Handler
|
||||||
|
|
||||||
type handlerRegistry struct {
|
type handlerRegistry struct {
|
||||||
registry
|
registry[NewHandler]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *handlerRegistry) Register(name string, v NewHandler) error {
|
func (r *handlerRegistry) Register(name string, v NewHandler) error {
|
||||||
@ -17,10 +17,3 @@ func (r *handlerRegistry) Register(name string, v NewHandler) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *handlerRegistry) Get(name string) NewHandler {
|
|
||||||
if v := r.registry.Get(name); v != nil {
|
|
||||||
return v.(NewHandler)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type hopRegistry struct {
|
type hopRegistry struct {
|
||||||
registry
|
registry[chain.Hop]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *hopRegistry) Register(name string, v chain.Hop) error {
|
func (r *hopRegistry) Register(name string, v chain.Hop) error {
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type hostsRegistry struct {
|
type hostsRegistry struct {
|
||||||
registry
|
registry[hosts.HostMapper]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *hostsRegistry) Register(name string, v hosts.HostMapper) error {
|
func (r *hostsRegistry) Register(name string, v hosts.HostMapper) error {
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type trafficLimiterRegistry struct {
|
type trafficLimiterRegistry struct {
|
||||||
registry
|
registry[traffic.TrafficLimiter]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *trafficLimiterRegistry) Register(name string, v traffic.TrafficLimiter) error {
|
func (r *trafficLimiterRegistry) Register(name string, v traffic.TrafficLimiter) error {
|
||||||
@ -50,7 +50,7 @@ func (w *trafficLimiterWrapper) Out(key string) traffic.Limiter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type connLimiterRegistry struct {
|
type connLimiterRegistry struct {
|
||||||
registry
|
registry[conn.ConnLimiter]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *connLimiterRegistry) Register(name string, v conn.ConnLimiter) error {
|
func (r *connLimiterRegistry) Register(name string, v conn.ConnLimiter) error {
|
||||||
@ -85,7 +85,7 @@ func (w *connLimiterWrapper) Limiter(key string) conn.Limiter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type rateLimiterRegistry struct {
|
type rateLimiterRegistry struct {
|
||||||
registry
|
registry[rate.RateLimiter]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *rateLimiterRegistry) Register(name string, v rate.RateLimiter) error {
|
func (r *rateLimiterRegistry) Register(name string, v rate.RateLimiter) error {
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
type NewListener func(opts ...listener.Option) listener.Listener
|
type NewListener func(opts ...listener.Option) listener.Listener
|
||||||
|
|
||||||
type listenerRegistry struct {
|
type listenerRegistry struct {
|
||||||
registry
|
registry[NewListener]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *listenerRegistry) Register(name string, v NewListener) error {
|
func (r *listenerRegistry) Register(name string, v NewListener) error {
|
||||||
@ -17,10 +17,3 @@ func (r *listenerRegistry) Register(name string, v NewListener) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *listenerRegistry) Get(name string) NewListener {
|
|
||||||
if v := r.registry.Get(name); v != nil {
|
|
||||||
return v.(NewListener)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type recorderRegistry struct {
|
type recorderRegistry struct {
|
||||||
registry
|
registry[recorder.Recorder]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *recorderRegistry) Register(name string, v recorder.Recorder) error {
|
func (r *recorderRegistry) Register(name string, v recorder.Recorder) error {
|
||||||
|
@ -23,24 +23,24 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
listenerReg Registry[NewListener] = &listenerRegistry{}
|
listenerReg Registry[NewListener] = new(listenerRegistry)
|
||||||
handlerReg Registry[NewHandler] = &handlerRegistry{}
|
handlerReg Registry[NewHandler] = new(handlerRegistry)
|
||||||
dialerReg Registry[NewDialer] = &dialerRegistry{}
|
dialerReg Registry[NewDialer] = new(dialerRegistry)
|
||||||
connectorReg Registry[NewConnector] = &connectorRegistry{}
|
connectorReg Registry[NewConnector] = new(connectorRegistry)
|
||||||
|
|
||||||
serviceReg Registry[service.Service] = &serviceRegistry{}
|
serviceReg Registry[service.Service] = new(serviceRegistry)
|
||||||
chainReg Registry[chain.Chainer] = &chainRegistry{}
|
chainReg Registry[chain.Chainer] = new(chainRegistry)
|
||||||
hopReg Registry[chain.Hop] = &hopRegistry{}
|
hopReg Registry[chain.Hop] = new(hopRegistry)
|
||||||
autherReg Registry[auth.Authenticator] = &autherRegistry{}
|
autherReg Registry[auth.Authenticator] = new(autherRegistry)
|
||||||
admissionReg Registry[admission.Admission] = &admissionRegistry{}
|
admissionReg Registry[admission.Admission] = new(admissionRegistry)
|
||||||
bypassReg Registry[bypass.Bypass] = &bypassRegistry{}
|
bypassReg Registry[bypass.Bypass] = new(bypassRegistry)
|
||||||
resolverReg Registry[resolver.Resolver] = &resolverRegistry{}
|
resolverReg Registry[resolver.Resolver] = new(resolverRegistry)
|
||||||
hostsReg Registry[hosts.HostMapper] = &hostsRegistry{}
|
hostsReg Registry[hosts.HostMapper] = new(hostsRegistry)
|
||||||
recorderReg Registry[recorder.Recorder] = &recorderRegistry{}
|
recorderReg Registry[recorder.Recorder] = new(recorderRegistry)
|
||||||
|
|
||||||
trafficLimiterReg Registry[traffic.TrafficLimiter] = &trafficLimiterRegistry{}
|
trafficLimiterReg Registry[traffic.TrafficLimiter] = new(trafficLimiterRegistry)
|
||||||
connLimiterReg Registry[conn.ConnLimiter] = &connLimiterRegistry{}
|
connLimiterReg Registry[conn.ConnLimiter] = new(connLimiterRegistry)
|
||||||
rateLimiterReg Registry[rate.RateLimiter] = &rateLimiterRegistry{}
|
rateLimiterReg Registry[rate.RateLimiter] = new(rateLimiterRegistry)
|
||||||
)
|
)
|
||||||
|
|
||||||
type Registry[T any] interface {
|
type Registry[T any] interface {
|
||||||
@ -48,14 +48,15 @@ type Registry[T any] interface {
|
|||||||
Unregister(name string)
|
Unregister(name string)
|
||||||
IsRegistered(name string) bool
|
IsRegistered(name string) bool
|
||||||
Get(name string) T
|
Get(name string) T
|
||||||
|
GetAll() map[string]T
|
||||||
}
|
}
|
||||||
|
|
||||||
type registry struct {
|
type registry[T any] struct {
|
||||||
m sync.Map
|
m sync.Map
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *registry) Register(name string, v any) error {
|
func (r *registry[T]) Register(name string, v T) error {
|
||||||
if name == "" || v == nil {
|
if name == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if _, loaded := r.m.LoadOrStore(name, v); loaded {
|
if _, loaded := r.m.LoadOrStore(name, v); loaded {
|
||||||
@ -65,7 +66,7 @@ func (r *registry) Register(name string, v any) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *registry) Unregister(name string) {
|
func (r *registry[T]) Unregister(name string) {
|
||||||
if v, ok := r.m.Load(name); ok {
|
if v, ok := r.m.Load(name); ok {
|
||||||
if closer, ok := v.(io.Closer); ok {
|
if closer, ok := v.(io.Closer); ok {
|
||||||
closer.Close()
|
closer.Close()
|
||||||
@ -74,17 +75,29 @@ func (r *registry) Unregister(name string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *registry) IsRegistered(name string) bool {
|
func (r *registry[T]) IsRegistered(name string) bool {
|
||||||
_, ok := r.m.Load(name)
|
_, ok := r.m.Load(name)
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *registry) Get(name string) any {
|
func (r *registry[T]) Get(name string) (t T) {
|
||||||
if name == "" {
|
if name == "" {
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
v, _ := r.m.Load(name)
|
v, _ := r.m.Load(name)
|
||||||
return v
|
t, _ = v.(T)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *registry[T]) GetAll() (m map[string]T) {
|
||||||
|
m = make(map[string]T)
|
||||||
|
r.m.Range(func(key, value any) bool {
|
||||||
|
k, _ := key.(string)
|
||||||
|
v, _ := value.(T)
|
||||||
|
m[k] = v
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListenerRegistry() Registry[NewListener] {
|
func ListenerRegistry() Registry[NewListener] {
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type resolverRegistry struct {
|
type resolverRegistry struct {
|
||||||
registry
|
registry[resolver.Resolver]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *resolverRegistry) Register(name string, v resolver.Resolver) error {
|
func (r *resolverRegistry) Register(name string, v resolver.Resolver) error {
|
||||||
|
@ -5,16 +5,5 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type serviceRegistry struct {
|
type serviceRegistry struct {
|
||||||
registry
|
registry[service.Service]
|
||||||
}
|
|
||||||
|
|
||||||
func (r *serviceRegistry) Register(name string, v service.Service) error {
|
|
||||||
return r.registry.Register(name, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *serviceRegistry) Get(name string) service.Service {
|
|
||||||
if v := r.registry.Get(name); v != nil {
|
|
||||||
return v.(service.Service)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@ package service
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net"
|
"net"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/core/admission"
|
"github.com/go-gost/core/admission"
|
||||||
@ -20,6 +22,10 @@ import (
|
|||||||
type options struct {
|
type options struct {
|
||||||
admission admission.Admission
|
admission admission.Admission
|
||||||
recorders []recorder.RecorderObject
|
recorders []recorder.RecorderObject
|
||||||
|
preUp []string
|
||||||
|
postUp []string
|
||||||
|
preDown []string
|
||||||
|
postDown []string
|
||||||
logger logger.Logger
|
logger logger.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,6 +43,30 @@ func RecordersOption(recorders ...recorder.RecorderObject) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PreUpOption(cmds []string) Option {
|
||||||
|
return func(opts *options) {
|
||||||
|
opts.preUp = cmds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func PreDownOption(cmds []string) Option {
|
||||||
|
return func(opts *options) {
|
||||||
|
opts.preDown = cmds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func PostUpOption(cmds []string) Option {
|
||||||
|
return func(opts *options) {
|
||||||
|
opts.postUp = cmds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func PostDownOption(cmds []string) Option {
|
||||||
|
return func(opts *options) {
|
||||||
|
opts.postDown = cmds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func LoggerOption(logger logger.Logger) Option {
|
func LoggerOption(logger logger.Logger) Option {
|
||||||
return func(opts *options) {
|
return func(opts *options) {
|
||||||
opts.logger = logger
|
opts.logger = logger
|
||||||
@ -55,12 +85,16 @@ func NewService(name string, ln listener.Listener, h handler.Handler, opts ...Op
|
|||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
opt(&options)
|
opt(&options)
|
||||||
}
|
}
|
||||||
return &defaultService{
|
s := &defaultService{
|
||||||
name: name,
|
name: name,
|
||||||
listener: ln,
|
listener: ln,
|
||||||
handler: h,
|
handler: h,
|
||||||
options: options,
|
options: options,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s.execCmds("pre-up", s.options.preUp)
|
||||||
|
|
||||||
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *defaultService) Addr() net.Addr {
|
func (s *defaultService) Addr() net.Addr {
|
||||||
@ -68,10 +102,15 @@ func (s *defaultService) Addr() net.Addr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *defaultService) Close() error {
|
func (s *defaultService) Close() error {
|
||||||
|
s.execCmds("pre-down", s.options.preDown)
|
||||||
|
defer s.execCmds("post-down", s.options.postDown)
|
||||||
|
|
||||||
return s.listener.Close()
|
return s.listener.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *defaultService) Serve() error {
|
func (s *defaultService) Serve() error {
|
||||||
|
s.execCmds("post-up", s.options.postUp)
|
||||||
|
|
||||||
if v := xmetrics.GetGauge(
|
if v := xmetrics.GetGauge(
|
||||||
xmetrics.MetricServicesGauge,
|
xmetrics.MetricServicesGauge,
|
||||||
metrics.Labels{}); v != nil {
|
metrics.Labels{}); v != nil {
|
||||||
@ -155,6 +194,20 @@ func (s *defaultService) Serve() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *defaultService) execCmds(phase string, cmds []string) {
|
||||||
|
for _, cmd := range cmds {
|
||||||
|
cmd := strings.TrimSpace(cmd)
|
||||||
|
if cmd == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
s.options.logger.Info(cmd)
|
||||||
|
|
||||||
|
if err := exec.Command("/bin/sh", "-c", cmd).Run(); err != nil {
|
||||||
|
s.options.logger.Warnf("[%s] %s: %v", phase, cmd, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type sidKey struct{}
|
type sidKey struct{}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
Loading…
Reference in New Issue
Block a user