|
@@ -35,6 +35,7 @@ type Outbound struct {
|
|
serverAddr M.Socksaddr
|
|
serverAddr M.Socksaddr
|
|
multiplexDialer *mux.Client
|
|
multiplexDialer *mux.Client
|
|
tlsConfig tls.Config
|
|
tlsConfig tls.Config
|
|
|
|
+ tlsDialer tls.Dialer
|
|
transport adapter.V2RayClientTransport
|
|
transport adapter.V2RayClientTransport
|
|
packetAddr bool
|
|
packetAddr bool
|
|
xudp bool
|
|
xudp bool
|
|
@@ -56,6 +57,7 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
+ outbound.tlsDialer = tls.NewDialer(outboundDialer, outbound.tlsConfig)
|
|
}
|
|
}
|
|
if options.Transport != nil {
|
|
if options.Transport != nil {
|
|
outbound.transport, err = v2ray.NewClientTransport(ctx, outbound.dialer, outbound.serverAddr, common.PtrValueOrDefault(options.Transport), outbound.tlsConfig)
|
|
outbound.transport, err = v2ray.NewClientTransport(ctx, outbound.dialer, outbound.serverAddr, common.PtrValueOrDefault(options.Transport), outbound.tlsConfig)
|
|
@@ -140,11 +142,10 @@ func (h *vlessDialer) DialContext(ctx context.Context, network string, destinati
|
|
var err error
|
|
var err error
|
|
if h.transport != nil {
|
|
if h.transport != nil {
|
|
conn, err = h.transport.DialContext(ctx)
|
|
conn, err = h.transport.DialContext(ctx)
|
|
|
|
+ } else if h.tlsDialer != nil {
|
|
|
|
+ conn, err = h.tlsDialer.DialTLSContext(ctx, h.serverAddr)
|
|
} else {
|
|
} else {
|
|
conn, err = h.dialer.DialContext(ctx, N.NetworkTCP, h.serverAddr)
|
|
conn, err = h.dialer.DialContext(ctx, N.NetworkTCP, h.serverAddr)
|
|
- if err == nil && h.tlsConfig != nil {
|
|
|
|
- conn, err = tls.ClientHandshake(ctx, conn, h.tlsConfig)
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
@@ -183,11 +184,10 @@ func (h *vlessDialer) ListenPacket(ctx context.Context, destination M.Socksaddr)
|
|
var err error
|
|
var err error
|
|
if h.transport != nil {
|
|
if h.transport != nil {
|
|
conn, err = h.transport.DialContext(ctx)
|
|
conn, err = h.transport.DialContext(ctx)
|
|
|
|
+ } else if h.tlsDialer != nil {
|
|
|
|
+ conn, err = h.tlsDialer.DialTLSContext(ctx, h.serverAddr)
|
|
} else {
|
|
} else {
|
|
conn, err = h.dialer.DialContext(ctx, N.NetworkTCP, h.serverAddr)
|
|
conn, err = h.dialer.DialContext(ctx, N.NetworkTCP, h.serverAddr)
|
|
- if err == nil && h.tlsConfig != nil {
|
|
|
|
- conn, err = tls.ClientHandshake(ctx, conn, h.tlsConfig)
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
if err != nil {
|
|
if err != nil {
|
|
common.Close(conn)
|
|
common.Close(conn)
|