From d0ae47e2cef4ca8592f5e20c6585a6940a180cae Mon Sep 17 00:00:00 2001 From: V2Ray Date: Wed, 28 Oct 2015 23:18:07 +0100 Subject: [PATCH] Router interface --- app/router/router.go | 24 ++++++++++++++++++++++++ app/router/wildcard_router/router.go | 25 +++++++++++++++++++++++++ config/config.go | 7 +++++++ 3 files changed, 56 insertions(+) create mode 100644 app/router/router.go create mode 100644 app/router/wildcard_router/router.go diff --git a/app/router/router.go b/app/router/router.go new file mode 100644 index 00000000..55668141 --- /dev/null +++ b/app/router/router.go @@ -0,0 +1,24 @@ +package router + +import ( + v2net "github.com/v2ray/v2ray-core/common/net" + "github.com/v2ray/v2ray-core/config" +) + +type Router interface { + TakeDetour(v2net.Packet) (config.ConnectionTag, error) +} + +type RouterFactory interface { + Create(rawConfig interface{}) (Router, error) +} + +var ( + routerCache = make(map[string]RouterFactory) +) + +func RegisterRouter(name string, factory RouterFactory) error { + // TODO: check name + routerCache[name] = factory + return nil +} diff --git a/app/router/wildcard_router/router.go b/app/router/wildcard_router/router.go new file mode 100644 index 00000000..72c05447 --- /dev/null +++ b/app/router/wildcard_router/router.go @@ -0,0 +1,25 @@ +package wildcard_router + +import ( + "github.com/v2ray/v2ray-core/app/router" + v2net "github.com/v2ray/v2ray-core/common/net" + "github.com/v2ray/v2ray-core/config" +) + +type WildcardRouter struct { +} + +func (router *WildcardRouter) TakeDetour(packet v2net.Packet) (config.ConnectionTag, error) { + return "", nil +} + +type WildcardRouterFactory struct { +} + +func (factory *WildcardRouterFactory) Create(rawConfig interface{}) (router.Router, error) { + return &WildcardRouter{}, nil +} + +func init() { + router.RegisterRouter("wildcard", &WildcardRouterFactory{}) +} diff --git a/config/config.go b/config/config.go index 37a8eb37..51ca75dd 100644 --- a/config/config.go +++ b/config/config.go @@ -7,6 +7,13 @@ const ( TypeOutbound = Type("outbound") ) +type RouterConfig interface { + Strategy() string + Settings() interface{} +} + +type ConnectionTag string + type ConnectionConfig interface { Protocol() string Settings(configType Type) interface{}