router.go 732 B

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