|
|
@@ -2,8 +2,7 @@ package internet
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
- core "github.com/v2fly/v2ray-core/v4"
|
|
|
- "github.com/v2fly/v2ray-core/v4/features/routing"
|
|
|
+ "github.com/v2fly/v2ray-core/v4/transport/internet/tagged"
|
|
|
|
|
|
"github.com/v2fly/v2ray-core/v4/common/net"
|
|
|
"github.com/v2fly/v2ray-core/v4/common/session"
|
|
|
@@ -79,28 +78,8 @@ func DialSystem(ctx context.Context, dest net.Destination, sockopt *SocketConfig
|
|
|
}
|
|
|
|
|
|
func DialTaggedOutbound(ctx context.Context, dest net.Destination, tag string) (net.Conn, error) {
|
|
|
- var dispatcher routing.Dispatcher
|
|
|
- if err := core.RequireFeatures(ctx, func(dispatcherInstance routing.Dispatcher) {
|
|
|
- dispatcher = dispatcherInstance
|
|
|
- }); err != nil {
|
|
|
- return nil, newError("Required Feature dispatcher not resolved").Base(err)
|
|
|
+ if tagged.Dialer == nil {
|
|
|
+ return nil, newError("tagged dial not enabled")
|
|
|
}
|
|
|
-
|
|
|
- content := new(session.Content)
|
|
|
- content.SkipDNSResolve = true
|
|
|
- session.SetForcedOutboundTagToContext(ctx, tag)
|
|
|
-
|
|
|
- ctx = session.ContextWithContent(ctx, content)
|
|
|
-
|
|
|
- r, err := dispatcher.Dispatch(ctx, dest)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- var readerOpt net.ConnectionOption
|
|
|
- if dest.Network == net.Network_TCP {
|
|
|
- readerOpt = net.ConnectionOutputMulti(r.Reader)
|
|
|
- } else {
|
|
|
- readerOpt = net.ConnectionOutputMultiUDP(r.Reader)
|
|
|
- }
|
|
|
- return net.NewConnection(net.ConnectionInputMulti(r.Writer), readerOpt), nil
|
|
|
+ return tagged.Dialer(ctx, dest, tag)
|
|
|
}
|