Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dialer/dialer.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ type ExtraOption struct {
UtlsImitate string
BandwidthMaxTx string
BandwidthMaxRx string
UDPHopInterval time.Duration
UDPHopInterval time.Duration
}

type Property struct {
Expand Down
1 change: 1 addition & 0 deletions pkg/cert/cert_pool_windows.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//go:build windows
// +build windows

package cert
Expand Down
4 changes: 2 additions & 2 deletions protocol/hysteria2/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ type clientImpl struct {
}

func (c *clientImpl) connect(ctx context.Context) (*HandshakeInfo, error) {
pktConn, err := c.config.ConnFactory.New(ctx)
pktConn, serverAddr, err := c.config.ConnFactory.New(ctx)
if err != nil {
return nil, err
}
Expand All @@ -86,7 +86,7 @@ func (c *clientImpl) connect(ctx context.Context) (*HandshakeInfo, error) {
TLSClientConfig: tlsConfig,
QUICConfig: quicConfig,
Dial: func(ctx context.Context, _ string, tlsCfg *tls.Config, cfg *quic.Config) (quic.EarlyConnection, error) {
qc, err := quic.DialEarly(ctx, pktConn, c.config.ServerAddr, tlsCfg, cfg)
qc, err := quic.DialEarly(ctx, pktConn, serverAddr, tlsCfg, cfg)
if err != nil {
return nil, err
}
Expand Down
10 changes: 3 additions & 7 deletions protocol/hysteria2/client/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ const (

type Config struct {
ConnFactory ConnFactory
ServerAddr net.Addr
Auth string
TLSConfig TLSConfig
QUICConfig QUICConfig
Expand All @@ -39,9 +38,6 @@ func (c *Config) verifyAndFill() error {
if c.ConnFactory == nil {
return errors.ConfigError{Field: "ConnFactory", Reason: "must be set"}
}
if c.ServerAddr == nil {
return errors.ConfigError{Field: "ServerAddr", Reason: "must be set"}
}
if c.QUICConfig.InitialStreamReceiveWindow == 0 {
c.QUICConfig.InitialStreamReceiveWindow = defaultStreamReceiveWindow
} else if c.QUICConfig.InitialStreamReceiveWindow < 16384 {
Expand Down Expand Up @@ -79,14 +75,14 @@ func (c *Config) verifyAndFill() error {
}

type ConnFactory interface {
New(context.Context) (net.PacketConn, error)
New(context.Context) (net.PacketConn, net.Addr, error)
}

type UdpConnFactory struct {
NewFunc func(ctx context.Context) (net.PacketConn, error)
NewFunc func(ctx context.Context) (net.PacketConn, net.Addr, error)
}

func (f *UdpConnFactory) New(ctx context.Context) (net.PacketConn, error) {
func (f *UdpConnFactory) New(ctx context.Context) (net.PacketConn, net.Addr, error) {
return f.NewFunc(ctx)
}

Expand Down
38 changes: 20 additions & 18 deletions protocol/hysteria2/dialer.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,19 +56,13 @@ func NewDialer(nextDialer netproxy.Dialer, header protocol.Header) (netproxy.Dia
config.UDPHopInterval = feature.(*Feature1).UDPHopInterval
}

var err error
if !isPortHoppingPort(port) {
config.ServerAddr, err = net.ResolveUDPAddr("udp", hostPort)
} else {
config.ServerAddr, err = udphop.ResolveUDPHopAddr(hostPort)
}
if err != nil {
return nil, err
}

if config.ServerAddr.Network() == "udphop" {
if isPortHoppingPort(port) {
config.ConnFactory = &client.UdpConnFactory{
NewFunc: func(ctx context.Context) (net.PacketConn, error) {
NewFunc: func(ctx context.Context) (net.PacketConn, net.Addr, error) {
serverAddr, err := udphop.ResolveUDPHopAddr(hostPort)
if err != nil {
return nil, nil, err
}
dialFunc := func(addr net.Addr) (net.PacketConn, error) {
conn, err := nextDialer.DialContext(ctx, "udp", addr.String())
if err != nil {
Expand All @@ -80,21 +74,29 @@ func NewDialer(nextDialer netproxy.Dialer, header protocol.Header) (netproxy.Dia
addr,
), nil
}
return udphop.NewUDPHopPacketConn(config.ServerAddr.(*udphop.UDPHopAddr), config.UDPHopInterval, dialFunc)
conn, err := udphop.NewUDPHopPacketConn(serverAddr, config.UDPHopInterval, dialFunc)
if err != nil {
return nil, nil, err
}
return conn, serverAddr, nil
},
}
} else {
config.ConnFactory = &client.UdpConnFactory{
NewFunc: func(ctx context.Context) (net.PacketConn, error) {
conn, err := nextDialer.DialContext(ctx, "udp", config.ServerAddr.String())
NewFunc: func(ctx context.Context) (net.PacketConn, net.Addr, error) {
serverAddr, err := net.ResolveUDPAddr("udp", hostPort)
if err != nil {
return nil, nil, err
}
conn, err := nextDialer.DialContext(ctx, "udp", serverAddr.String())
if err != nil {
return nil, err
return nil, nil, err
}
return netproxy.NewFakeNetPacketConn(
conn.(netproxy.PacketConn),
net.UDPAddrFromAddrPort(common.GetUniqueFakeAddrPort()),
config.ServerAddr,
), nil
serverAddr,
), serverAddr, nil
},
}
}
Expand Down
2 changes: 1 addition & 1 deletion transport/shadowsocksr/obfs/obfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
type Creator func() IObfs

type constructor struct {
New Creator
New Creator
Overhead int
}

Expand Down