@@ -12,7 +12,6 @@ import (
1212 "time"
1313 "unsafe"
1414
15- "github.com/xtls/xray-core/app/dispatcher"
1615 "github.com/xtls/xray-core/app/reverse"
1716 "github.com/xtls/xray-core/common"
1817 "github.com/xtls/xray-core/common/buf"
@@ -76,7 +75,7 @@ type Handler struct {
7675 validator vless.Validator
7776 decryption * encryption.ServerInstance
7877 outboundHandlerManager outbound.Manager
79- defaultDispatcher * dispatcher. DefaultDispatcher
78+ wrapLink func ( ctx context. Context , link * transport. Link ) * transport. Link
8079 ctx context.Context
8180 fallbacks map [string ]map [string ]map [string ]* Fallback // or nil
8281 // regexps map[string]*regexp.Regexp // or nil
@@ -85,12 +84,16 @@ type Handler struct {
8584// New creates a new VLess inbound handler.
8685func New (ctx context.Context , config * Config , dc dns.Client , validator vless.Validator ) (* Handler , error ) {
8786 v := core .MustFromContext (ctx )
87+ var wrapLinkFunc func (ctx context.Context , link * transport.Link ) * transport.Link
88+ if dispatcher , ok := v .GetFeature (routing .DispatcherType ()).(routing.WrapLinkDispatcher ); ok {
89+ wrapLinkFunc = dispatcher .WrapLink
90+ }
8891 handler := & Handler {
8992 inboundHandlerManager : v .GetFeature (feature_inbound .ManagerType ()).(feature_inbound.Manager ),
9093 policyManager : v .GetFeature (policy .ManagerType ()).(policy.Manager ),
9194 validator : validator ,
9295 outboundHandlerManager : v .GetFeature (outbound .ManagerType ()).(outbound.Manager ),
93- defaultDispatcher : v . GetFeature ( routing . DispatcherType ()).( * dispatcher. DefaultDispatcher ) ,
96+ wrapLink : wrapLinkFunc ,
9497 ctx : ctx ,
9598 }
9699
@@ -619,7 +622,10 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s
619622 if err != nil {
620623 return err
621624 }
622- return r .NewMux (ctx , h .defaultDispatcher .WrapLink (ctx , & transport.Link {Reader : clientReader , Writer : clientWriter }))
625+ if h .wrapLink == nil {
626+ return errors .New ("VLESS reverse must have a dispatcher that implemented routing.WrapLinkDispatcher" )
627+ }
628+ return r .NewMux (ctx , h .wrapLink (ctx , & transport.Link {Reader : clientReader , Writer : clientWriter }))
623629 }
624630
625631 if err := dispatcher .DispatchLink (ctx , request .Destination (), & transport.Link {
0 commit comments