diff --git a/app/router/router.go b/app/router/router.go index af9c18e2..51bd007f 100644 --- a/app/router/router.go +++ b/app/router/router.go @@ -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 +}