router.go 609 B

123456789101112131415161718192021222324252627282930
  1. package router
  2. import (
  3. v2net "github.com/v2ray/v2ray-core/common/net"
  4. )
  5. type Router interface {
  6. TakeDetour(v2net.Destination) (string, error)
  7. }
  8. type RouterFactory interface {
  9. Create(rawConfig interface{}) (Router, error)
  10. }
  11. var (
  12. routerCache = make(map[string]RouterFactory)
  13. )
  14. func RegisterRouter(name string, factory RouterFactory) error {
  15. // TODO: check name
  16. routerCache[name] = factory
  17. return nil
  18. }
  19. func CreateRouter(name string, rawConfig interface{}) (Router, error) {
  20. if factory, found := routerCache[name]; found {
  21. return factory.Create(rawConfig)
  22. }
  23. return nil, ErrorRouterNotFound
  24. }