@@ -76,7 +76,7 @@ type Handler struct {
7676 validator vless.Validator
7777 decryption * encryption.ServerInstance
7878 outboundHandlerManager outbound.Manager
79- defaultDispatcher * dispatcher. DefaultDispatcher
79+ defaultDispatcher routing. Dispatcher
8080 ctx context.Context
8181 fallbacks map [string ]map [string ]map [string ]* Fallback // or nil
8282 // regexps map[string]*regexp.Regexp // or nil
@@ -90,7 +90,7 @@ func New(ctx context.Context, config *Config, dc dns.Client, validator vless.Val
9090 policyManager : v .GetFeature (policy .ManagerType ()).(policy.Manager ),
9191 validator : validator ,
9292 outboundHandlerManager : v .GetFeature (outbound .ManagerType ()).(outbound.Manager ),
93- defaultDispatcher : v .GetFeature (routing .DispatcherType ()).(* dispatcher. DefaultDispatcher ),
93+ defaultDispatcher : v .GetFeature (routing .DispatcherType ()).(routing. Dispatcher ),
9494 ctx : ctx ,
9595 }
9696
@@ -261,7 +261,7 @@ func (*Handler) Network() []net.Network {
261261}
262262
263263// Process implements proxy.Inbound.Process().
264- func (h * Handler ) Process (ctx context.Context , network net.Network , connection stat.Connection , dispatcher routing.Dispatcher ) error {
264+ func (h * Handler ) Process (ctx context.Context , network net.Network , connection stat.Connection , dispatch routing.Dispatcher ) error {
265265 iConn := connection
266266 if statConn , ok := iConn .(* stat.CounterConnection ); ok {
267267 iConn = statConn .Connection
@@ -623,10 +623,14 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s
623623 if err != nil {
624624 return err
625625 }
626- return r .NewMux (ctx , h .defaultDispatcher .WrapLink (ctx , & transport.Link {Reader : clientReader , Writer : clientWriter }))
626+ defaultDispatcher , ok := h .defaultDispatcher .(* dispatcher.DefaultDispatcher )
627+ if ! ok {
628+ return errors .New ("VLESS reverse must have a dispatcher that implemented routing.WrapLinkDispatcher" )
629+ }
630+ return r .NewMux (ctx , defaultDispatcher .WrapLink (ctx , & transport.Link {Reader : clientReader , Writer : clientWriter }))
627631 }
628632
629- if err := dispatcher .DispatchLink (ctx , request .Destination (), & transport.Link {
633+ if err := dispatch .DispatchLink (ctx , request .Destination (), & transport.Link {
630634 Reader : clientReader ,
631635 Writer : clientWriter },
632636 ); err != nil {
0 commit comments