add reload and plugin support for hop

This commit is contained in:
ginuerzh
2023-09-28 21:04:15 +08:00
parent ddc3c9392e
commit ea585fc25d
88 changed files with 2208 additions and 1538 deletions

View File

@ -1,6 +1,7 @@
package grpc
import (
"context"
"net"
"time"
@ -54,7 +55,12 @@ func (l *grpcListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return
}

View File

@ -21,6 +21,7 @@ type metadata struct {
keepaliveTimeout time.Duration
keepalivePermitWithoutStream bool
keepaliveMaxConnectionIdle time.Duration
mptcp bool
}
func (l *grpcListener) parseMetadata(md mdata.Metadata) (err error) {
@ -49,6 +50,7 @@ func (l *grpcListener) parseMetadata(md mdata.Metadata) (err error) {
l.md.keepalivePermitWithoutStream = mdutil.GetBool(md, "grpc.keepalive.permitWithoutStream", "keepalive.permitWithoutStream")
l.md.keepaliveMaxConnectionIdle = mdutil.GetDuration(md, "grpc.keepalive.maxConnectionIdle", "keepalive.maxConnectionIdle")
l.md.mptcp = mdutil.GetBool(md, "mptcp")
}
return

View File

@ -1,6 +1,7 @@
package h2
import (
"context"
"crypto/tls"
"errors"
"net"
@ -74,7 +75,12 @@ func (l *h2Listener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return err
}

View File

@ -12,6 +12,7 @@ const (
type metadata struct {
path string
backlog int
mptcp bool
}
func (l *h2Listener) parseMetadata(md mdata.Metadata) (err error) {
@ -26,5 +27,7 @@ func (l *h2Listener) parseMetadata(md mdata.Metadata) (err error) {
}
l.md.path = mdutil.GetString(md, path)
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -1,6 +1,7 @@
package http2
import (
"context"
"crypto/tls"
"net"
"net/http"
@ -63,7 +64,12 @@ func (l *http2Listener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return err
}

View File

@ -11,6 +11,7 @@ const (
type metadata struct {
backlog int
mptcp bool
}
func (l *http2Listener) parseMetadata(md mdata.Metadata) (err error) {
@ -22,5 +23,7 @@ func (l *http2Listener) parseMetadata(md mdata.Metadata) (err error) {
if l.md.backlog <= 0 {
l.md.backlog = defaultBacklog
}
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -1,6 +1,7 @@
package mtls
import (
"context"
"crypto/tls"
"net"
"time"
@ -51,7 +52,13 @@ func (l *mtlsListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return
}

View File

@ -20,6 +20,7 @@ type metadata struct {
muxMaxStreamBuffer int
backlog int
mptcp bool
}
func (l *mtlsListener) parseMetadata(md mdata.Metadata) (err error) {
@ -46,5 +47,7 @@ func (l *mtlsListener) parseMetadata(md mdata.Metadata) (err error) {
l.md.muxMaxReceiveBuffer = mdutil.GetInt(md, muxMaxReceiveBuffer)
l.md.muxMaxStreamBuffer = mdutil.GetInt(md, muxMaxStreamBuffer)
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -1,6 +1,7 @@
package mws
import (
"context"
"crypto/tls"
"net"
"net/http"
@ -94,7 +95,13 @@ func (l *mwsListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return
}

View File

@ -30,6 +30,8 @@ type metadata struct {
muxMaxFrameSize int
muxMaxReceiveBuffer int
muxMaxStreamBuffer int
mptcp bool
}
func (l *mwsListener) parseMetadata(md mdata.Metadata) (err error) {
@ -82,5 +84,8 @@ func (l *mwsListener) parseMetadata(md mdata.Metadata) (err error) {
}
l.md.header = hd
}
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -1,6 +1,7 @@
package http
import (
"context"
"net"
"time"
@ -48,7 +49,13 @@ func (l *obfsListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return
}

View File

@ -9,6 +9,7 @@ import (
type metadata struct {
header http.Header
mptcp bool
}
func (l *obfsListener) parseMetadata(md mdata.Metadata) (err error) {
@ -23,5 +24,7 @@ func (l *obfsListener) parseMetadata(md mdata.Metadata) (err error) {
}
l.md.header = hd
}
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -1,6 +1,7 @@
package tls
import (
"context"
"net"
"time"
@ -47,7 +48,13 @@ func (l *obfsListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return
}

View File

@ -2,11 +2,14 @@ package tls
import (
md "github.com/go-gost/core/metadata"
mdutil "github.com/go-gost/core/metadata/util"
)
type metadata struct {
mptcp bool
}
func (l *obfsListener) parseMetadata(md md.Metadata) (err error) {
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -74,6 +74,7 @@ func (l *phtListener) Init(md md.Metadata) (err error) {
pht_util.BacklogServerOption(l.md.backlog),
pht_util.PathServerOption(l.md.authorizePath, l.md.pushPath, l.md.pullPath),
pht_util.LoggerServerOption(l.options.Logger),
pht_util.MPTCPServerOption(l.md.mptcp),
)
go func() {

View File

@ -19,6 +19,7 @@ type metadata struct {
pushPath string
pullPath string
backlog int
mptcp bool
}
func (l *phtListener) parseMetadata(md mdata.Metadata) (err error) {
@ -48,5 +49,6 @@ func (l *phtListener) parseMetadata(md mdata.Metadata) (err error) {
l.md.backlog = defaultBacklog
}
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -46,13 +46,17 @@ func (l *redirectListener) Init(md md.Metadata) (err error) {
return
}
network := "tcp"
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
lc := net.ListenConfig{}
if l.md.tproxy {
lc.Control = l.control
}
network := "tcp"
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {

View File

@ -7,6 +7,7 @@ import (
type metadata struct {
tproxy bool
mptcp bool
}
func (l *redirectListener) parseMetadata(md mdata.Metadata) (err error) {
@ -14,5 +15,6 @@ func (l *redirectListener) parseMetadata(md mdata.Metadata) (err error) {
tproxy = "tproxy"
)
l.md.tproxy = mdutil.GetBool(md, tproxy)
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -1,6 +1,7 @@
package ssh
import (
"context"
"fmt"
"net"
"time"
@ -53,7 +54,13 @@ func (l *sshListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return err
}

View File

@ -17,6 +17,7 @@ type metadata struct {
signer ssh.Signer
authorizedKeys map[string]bool
backlog int
mptcp bool
}
func (l *sshListener) parseMetadata(md mdata.Metadata) (err error) {
@ -64,5 +65,6 @@ func (l *sshListener) parseMetadata(md mdata.Metadata) (err error) {
l.md.backlog = defaultBacklog
}
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -62,7 +62,13 @@ func (l *sshdListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return err
}

View File

@ -17,6 +17,7 @@ type metadata struct {
signer ssh.Signer
authorizedKeys map[string]bool
backlog int
mptcp bool
}
func (l *sshdListener) parseMetadata(md mdata.Metadata) (err error) {
@ -64,5 +65,6 @@ func (l *sshdListener) parseMetadata(md mdata.Metadata) (err error) {
l.md.backlog = defaultBacklog
}
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -1,6 +1,7 @@
package tcp
import (
"context"
"net"
"time"
@ -47,7 +48,13 @@ func (l *tcpListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return
}

View File

@ -2,11 +2,14 @@ package tcp
import (
md "github.com/go-gost/core/metadata"
mdutil "github.com/go-gost/core/metadata/util"
)
type metadata struct {
mptcp bool
}
func (l *tcpListener) parseMetadata(md md.Metadata) (err error) {
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -1,6 +1,7 @@
package tls
import (
"context"
"crypto/tls"
"net"
"time"
@ -48,7 +49,13 @@ func (l *tlsListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return
}

View File

@ -2,11 +2,14 @@ package tls
import (
mdata "github.com/go-gost/core/metadata"
mdutil "github.com/go-gost/core/metadata/util"
)
type metadata struct {
mptcp bool
}
func (l *tlsListener) parseMetadata(md mdata.Metadata) (err error) {
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}

View File

@ -1,6 +1,7 @@
package ws
import (
"context"
"crypto/tls"
"net"
"net/http"
@ -89,7 +90,13 @@ func (l *wsListener) Init(md md.Metadata) (err error) {
if xnet.IsIPv4(l.options.Addr) {
network = "tcp4"
}
ln, err := net.Listen(network, l.options.Addr)
lc := net.ListenConfig{}
if l.md.mptcp {
lc.SetMultipathTCP(true)
l.logger.Debugf("mptcp enabled: %v", lc.MultipathTCP())
}
ln, err := lc.Listen(context.Background(), network, l.options.Addr)
if err != nil {
return
}

View File

@ -22,8 +22,9 @@ type metadata struct {
readBufferSize int
writeBufferSize int
enableCompression bool
header http.Header
header http.Header
mptcp bool
}
func (l *wsListener) parseMetadata(md mdata.Metadata) (err error) {
@ -63,5 +64,7 @@ func (l *wsListener) parseMetadata(md mdata.Metadata) (err error) {
}
l.md.header = hd
}
l.md.mptcp = mdutil.GetBool(md, "mptcp")
return
}