outbound.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package outbound
  2. import (
  3. "sync"
  4. "v2ray.com/core/app"
  5. "v2ray.com/core/app/proxyman"
  6. "v2ray.com/core/common/serial"
  7. "v2ray.com/core/proxy"
  8. )
  9. type DefaultOutboundHandlerManager struct {
  10. sync.RWMutex
  11. defaultHandler proxy.OutboundHandler
  12. taggedHandler map[string]proxy.OutboundHandler
  13. }
  14. func New() *DefaultOutboundHandlerManager {
  15. return &DefaultOutboundHandlerManager{
  16. taggedHandler: make(map[string]proxy.OutboundHandler),
  17. }
  18. }
  19. func (v *DefaultOutboundHandlerManager) GetDefaultHandler() proxy.OutboundHandler {
  20. v.RLock()
  21. defer v.RUnlock()
  22. if v.defaultHandler == nil {
  23. return nil
  24. }
  25. return v.defaultHandler
  26. }
  27. func (v *DefaultOutboundHandlerManager) SetDefaultHandler(handler proxy.OutboundHandler) error {
  28. v.Lock()
  29. defer v.Unlock()
  30. v.defaultHandler = handler
  31. return nil
  32. }
  33. func (v *DefaultOutboundHandlerManager) GetHandler(tag string) proxy.OutboundHandler {
  34. v.RLock()
  35. defer v.RUnlock()
  36. if handler, found := v.taggedHandler[tag]; found {
  37. return handler
  38. }
  39. return nil
  40. }
  41. func (v *DefaultOutboundHandlerManager) SetHandler(tag string, handler proxy.OutboundHandler) error {
  42. v.Lock()
  43. defer v.Unlock()
  44. v.taggedHandler[tag] = handler
  45. return nil
  46. }
  47. type OutboundHandlerManagerFactory struct{}
  48. func (v OutboundHandlerManagerFactory) Create(space app.Space, config interface{}) (app.Application, error) {
  49. return New(), nil
  50. }
  51. func (v OutboundHandlerManagerFactory) AppId() app.ID {
  52. return proxyman.APP_ID_OUTBOUND_MANAGER
  53. }
  54. func init() {
  55. app.RegisterApplicationFactory(serial.GetMessageType(new(proxyman.OutboundConfig)), OutboundHandlerManagerFactory{})
  56. }