mirror of https://github.com/XTLS/Xray-core
				
				
				
			
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
| package routing
 | |
| 
 | |
| import (
 | |
| 	"github.com/xtls/xray-core/common"
 | |
| 	"github.com/xtls/xray-core/common/serial"
 | |
| 	"github.com/xtls/xray-core/features"
 | |
| )
 | |
| 
 | |
| // Router is a feature to choose an outbound tag for the given request.
 | |
| //
 | |
| // xray:api:stable
 | |
| type Router interface {
 | |
| 	features.Feature
 | |
| 
 | |
| 	// PickRoute returns a route decision based on the given routing context.
 | |
| 	PickRoute(ctx Context) (Route, error)
 | |
| 	AddRule(config *serial.TypedMessage, shouldAppend bool) error
 | |
| 	RemoveRule(tag string) error
 | |
| }
 | |
| 
 | |
| // Route is the routing result of Router feature.
 | |
| //
 | |
| // xray:api:stable
 | |
| type Route interface {
 | |
| 	// A Route is also a routing context.
 | |
| 	Context
 | |
| 
 | |
| 	// GetOutboundGroupTags returns the detoured outbound group tags in sequence before a final outbound is chosen.
 | |
| 	GetOutboundGroupTags() []string
 | |
| 
 | |
| 	// GetOutboundTag returns the tag of the outbound the connection was dispatched to.
 | |
| 	GetOutboundTag() string
 | |
| 
 | |
| 	// GetRuleTag returns the matching rule tag for debugging if exists
 | |
| 	GetRuleTag() string
 | |
| }
 | |
| 
 | |
| // RouterType return the type of Router interface. Can be used to implement common.HasType.
 | |
| //
 | |
| // xray:api:stable
 | |
| func RouterType() interface{} {
 | |
| 	return (*Router)(nil)
 | |
| }
 | |
| 
 | |
| // DefaultRouter is an implementation of Router, which always returns ErrNoClue for routing decisions.
 | |
| type DefaultRouter struct{}
 | |
| 
 | |
| // Type implements common.HasType.
 | |
| func (DefaultRouter) Type() interface{} {
 | |
| 	return RouterType()
 | |
| }
 | |
| 
 | |
| // PickRoute implements Router.
 | |
| func (DefaultRouter) PickRoute(ctx Context) (Route, error) {
 | |
| 	return nil, common.ErrNoClue
 | |
| }
 | |
| 
 | |
| // AddRule implements Router.
 | |
| func (DefaultRouter) AddRule(config *serial.TypedMessage, shouldAppend bool) error {
 | |
| 	return common.ErrNoClue
 | |
| }
 | |
| 
 | |
| // RemoveRule implements Router.
 | |
| func (DefaultRouter) RemoveRule(tag string) error {
 | |
| 	return common.ErrNoClue
 | |
| }
 | |
| 
 | |
| // Start implements common.Runnable.
 | |
| func (DefaultRouter) Start() error {
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // Close implements common.Closable.
 | |
| func (DefaultRouter) Close() error {
 | |
| 	return nil
 | |
| }
 |