|  | @@ -1,10 +1,16 @@
 | 
	
		
			
				|  |  |  package router
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import (
 | 
	
		
			
				|  |  | +	"errors"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	"github.com/v2ray/v2ray-core/app/point/config"
 | 
	
		
			
				|  |  |  	v2net "github.com/v2ray/v2ray-core/common/net"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +var (
 | 
	
		
			
				|  |  | +	RouterNotFound = errors.New("Router not found.")
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  type Router interface {
 | 
	
		
			
				|  |  |  	TakeDetour(v2net.Packet) (config.ConnectionTag, error)
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -22,3 +28,10 @@ func RegisterRouter(name string, factory RouterFactory) error {
 | 
	
		
			
				|  |  |  	routerCache[name] = factory
 | 
	
		
			
				|  |  |  	return nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func CreateRouter(name string, rawConfig interface{}) (Router, error) {
 | 
	
		
			
				|  |  | +	if factory, found := routerCache[name]; found {
 | 
	
		
			
				|  |  | +		return factory.Create(rawConfig)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return nil, RouterNotFound
 | 
	
		
			
				|  |  | +}
 |