router.go 771 B

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