Merge branch 'refs/heads/master' into dev

This commit is contained in:
wenyifan
2024-07-17 15:17:00 +08:00
90 changed files with 2370 additions and 514 deletions

View File

@ -45,7 +45,7 @@ func (d *dtlsDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialO
opt(&options)
}
conn, err := options.NetDialer.Dial(ctx, "udp", addr)
conn, err := options.Dialer.Dial(ctx, "udp", addr)
if err != nil {
return nil, err
}

View File

@ -71,14 +71,13 @@ func (d *grpcDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialO
grpcOpts := []grpc.DialOption{
// grpc.WithBlock(),
grpc.WithContextDialer(func(c context.Context, s string) (net.Conn, error) {
return options.NetDialer.Dial(c, "tcp", s)
return options.Dialer.Dial(c, "tcp", s)
}),
grpc.WithAuthority(host),
grpc.WithConnectParams(grpc.ConnectParams{
Backoff: backoff.DefaultConfig,
MinConnectTimeout: d.md.minConnectTimeout,
}),
grpc.FailOnNonTempDialError(true),
}
if !d.md.insecure {
grpcOpts = append(grpcOpts, grpc.WithTransportCredentials(credentials.NewTLS(d.options.TLSConfig)))
@ -94,7 +93,7 @@ func (d *grpcDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialO
}))
}
cc, err := grpc.DialContext(ctx, addr, grpcOpts...)
cc, err := grpc.NewClient(addr, grpcOpts...)
if err != nil {
d.options.Logger.Error(err)
return nil, err

View File

@ -7,10 +7,10 @@ import (
"sync"
"time"
net_dialer "github.com/go-gost/core/common/net/dialer"
"github.com/go-gost/core/dialer"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
net_dialer "github.com/go-gost/x/internal/net/dialer"
mdx "github.com/go-gost/x/metadata"
"github.com/go-gost/x/registry"
)
@ -72,7 +72,7 @@ func (d *http2Dialer) Dial(ctx context.Context, address string, opts ...dialer.D
{
// Check whether the connection is established properly
netd := options.NetDialer
netd := options.Dialer
if netd == nil {
netd = net_dialer.DefaultNetDialer
}
@ -87,7 +87,7 @@ func (d *http2Dialer) Dial(ctx context.Context, address string, opts ...dialer.D
Transport: &http.Transport{
TLSClientConfig: d.options.TLSConfig,
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
netd := options.NetDialer
netd := options.Dialer
if netd == nil {
netd = net_dialer.DefaultNetDialer
}

View File

@ -94,14 +94,14 @@ func (d *h2Dialer) Dial(ctx context.Context, address string, opts ...dialer.Dial
client.Transport = &http2.Transport{
AllowHTTP: true,
DialTLS: func(network, addr string, cfg *tls.Config) (net.Conn, error) {
return options.NetDialer.Dial(ctx, network, addr)
return options.Dialer.Dial(ctx, network, addr)
},
}
} else {
client.Transport = &http.Transport{
TLSClientConfig: d.options.TLSConfig,
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
return options.NetDialer.Dial(ctx, network, addr)
return options.Dialer.Dial(ctx, network, addr)
},
ForceAttemptHTTP2: true,
MaxIdleConns: 100,

View File

@ -79,7 +79,7 @@ func (d *http3Dialer) Dial(ctx context.Context, addr string, opts ...dialer.Dial
return nil, err
}
udpConn, err := options.NetDialer.Dial(ctx, "udp", "")
udpConn, err := options.Dialer.Dial(ctx, "udp", "")
if err != nil {
return nil, err
}

View File

@ -81,7 +81,7 @@ func (d *wtDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOpt
return nil, err
}
udpConn, err := options.NetDialer.Dial(ctx, "udp", "")
udpConn, err := options.Dialer.Dial(ctx, "udp", "")
if err != nil {
return nil, err
}

View File

@ -19,9 +19,11 @@ import (
func init() {
registry.DialerRegistry().Register("icmp", NewDialer)
registry.DialerRegistry().Register("icmp6", NewDialer6)
}
type icmpDialer struct {
ip6 bool
sessions map[string]*quicSession
sessionMutex sync.Mutex
logger logger.Logger
@ -42,6 +44,19 @@ func NewDialer(opts ...dialer.Option) dialer.Dialer {
}
}
func NewDialer6(opts ...dialer.Option) dialer.Dialer {
options := dialer.Options{}
for _, opt := range opts {
opt(&options)
}
return &icmpDialer{
ip6: true,
sessions: make(map[string]*quicSession),
logger: options.Logger,
options: options,
}
}
func (d *icmpDialer) Init(md md.Metadata) (err error) {
if err = d.parseMetadata(md); err != nil {
return
@ -71,7 +86,11 @@ func (d *icmpDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialO
}
var pc net.PacketConn
pc, err = icmp.ListenPacket("ip4:icmp", "")
if d.ip6 {
pc, err = icmp.ListenPacket("ip6:ipv6-icmp", "")
} else {
pc, err = icmp.ListenPacket("ip4:icmp", "")
}
if err != nil {
return
}
@ -81,7 +100,7 @@ func (d *icmpDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialO
id = rand.New(rand.NewSource(time.Now().UnixNano())).Intn(math.MaxUint16) + 1
raddr.Port = id
}
pc = icmp_pkg.ClientConn(pc, id)
pc = icmp_pkg.ClientConn(d.ip6, pc, id)
session, err = d.initSession(ctx, raddr, pc)
if err != nil {

View File

@ -14,21 +14,14 @@ type metadata struct {
}
func (d *icmpDialer) parseMetadata(md mdata.Metadata) (err error) {
const (
keepAlive = "keepAlive"
keepAlivePeriod = "ttl"
handshakeTimeout = "handshakeTimeout"
maxIdleTimeout = "maxIdleTimeout"
)
if mdutil.GetBool(md, keepAlive) {
d.md.keepAlivePeriod = mdutil.GetDuration(md, keepAlivePeriod)
if mdutil.GetBool(md, "keepalive") {
d.md.keepAlivePeriod = mdutil.GetDuration(md, "ttl")
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.handshakeTimeout = mdutil.GetDuration(md, "handshakeTimeout")
d.md.maxIdleTimeout = mdutil.GetDuration(md, "maxIdleTimeout")
return
}

View File

@ -83,7 +83,7 @@ func (d *kcpDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOp
PacketConn: pc,
}
} else {
c, err := options.NetDialer.Dial(ctx, "udp", "")
c, err := options.Dialer.Dial(ctx, "udp", "")
if err != nil {
return nil, err
}

View File

@ -67,7 +67,7 @@ func (d *mtcpDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialO
opt(&options)
}
conn, err = options.NetDialer.Dial(ctx, "tcp", addr)
conn, err = options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
return
}

View File

@ -68,7 +68,7 @@ func (d *mtlsDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialO
opt(&options)
}
conn, err = options.NetDialer.Dial(ctx, "tcp", addr)
conn, err = options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
return
}

View File

@ -84,7 +84,7 @@ func (d *mwsDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOp
opt(&options)
}
conn, err = options.NetDialer.Dial(ctx, "tcp", addr)
conn, err = options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
return
}

View File

@ -55,7 +55,7 @@ func (d *obfsHTTPDialer) Dial(ctx context.Context, addr string, opts ...dialer.D
opt(options)
}
conn, err := options.NetDialer.Dial(ctx, "tcp", addr)
conn, err := options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
d.logger.Error(err)
}

View File

@ -40,7 +40,7 @@ func (d *obfsTLSDialer) Dial(ctx context.Context, addr string, opts ...dialer.Di
opt(options)
}
conn, err := options.NetDialer.Dial(ctx, "tcp", addr)
conn, err := options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
d.logger.Error(err)
}

View File

@ -87,7 +87,7 @@ func (d *phtDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOp
tr := &http.Transport{
// Proxy: http.ProxyFromEnvironment,
DialContext: func(ctx context.Context, network, adr string) (net.Conn, error) {
return options.NetDialer.Dial(ctx, network, addr)
return options.Dialer.Dial(ctx, network, addr)
},
ForceAttemptHTTP2: true,
MaxIdleConns: 100,

View File

@ -67,7 +67,7 @@ func (d *quicDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialO
opt(options)
}
c, err := options.NetDialer.Dial(ctx, "udp", "")
c, err := options.Dialer.Dial(ctx, "udp", "")
if err != nil {
return nil, err
}

View File

@ -64,7 +64,7 @@ func (d *sshDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOp
opt(&options)
}
conn, err = options.NetDialer.Dial(ctx, "tcp", addr)
conn, err = options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
return
}

View File

@ -64,7 +64,7 @@ func (d *sshdDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialO
opt(&options)
}
conn, err = options.NetDialer.Dial(ctx, "tcp", addr)
conn, err = options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
return
}

View File

@ -40,7 +40,7 @@ func (d *tcpDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOp
opt(&options)
}
conn, err := options.NetDialer.Dial(ctx, "tcp", addr)
conn, err := options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
d.logger.Error(err)
}

View File

@ -44,7 +44,7 @@ func (d *tlsDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOp
opt(&options)
}
conn, err := options.NetDialer.Dial(ctx, "tcp", addr)
conn, err := options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
d.logger.Error(err)
}

View File

@ -40,7 +40,7 @@ func (d *udpDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOp
opt(&options)
}
c, err := options.NetDialer.Dial(ctx, "udp", addr)
c, err := options.Dialer.Dial(ctx, "udp", addr)
if err != nil {
return nil, err
}

View File

@ -40,7 +40,7 @@ func (d *wgDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOpt
opt(&options)
}
conn, err := options.NetDialer.Dial(ctx, "tcp", addr)
conn, err := options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
d.logger.Error(err)
}

View File

@ -59,7 +59,7 @@ func (d *wsDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOpt
opt(&options)
}
conn, err := options.NetDialer.Dial(ctx, "tcp", addr)
conn, err := options.Dialer.Dial(ctx, "tcp", addr)
if err != nil {
d.options.Logger.Error(err)
}