outbound.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package outbound
  2. import (
  3. "context"
  4. "sync"
  5. "v2ray.com/core/app/proxyman"
  6. "v2ray.com/core/common"
  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(ctx context.Context, config *proxyman.OutboundConfig) (*DefaultOutboundHandlerManager, error) {
  15. return &DefaultOutboundHandlerManager{
  16. taggedHandler: make(map[string]proxy.OutboundHandler),
  17. }, nil
  18. }
  19. func (DefaultOutboundHandlerManager) Interface() interface{} {
  20. return (*proxyman.OutboundHandlerManager)(nil)
  21. }
  22. func (v *DefaultOutboundHandlerManager) GetDefaultHandler() proxy.OutboundHandler {
  23. v.RLock()
  24. defer v.RUnlock()
  25. if v.defaultHandler == nil {
  26. return nil
  27. }
  28. return v.defaultHandler
  29. }
  30. func (v *DefaultOutboundHandlerManager) SetDefaultHandler(handler proxy.OutboundHandler) error {
  31. v.Lock()
  32. defer v.Unlock()
  33. v.defaultHandler = handler
  34. return nil
  35. }
  36. func (v *DefaultOutboundHandlerManager) GetHandler(tag string) proxy.OutboundHandler {
  37. v.RLock()
  38. defer v.RUnlock()
  39. if handler, found := v.taggedHandler[tag]; found {
  40. return handler
  41. }
  42. return nil
  43. }
  44. func (v *DefaultOutboundHandlerManager) SetHandler(tag string, handler proxy.OutboundHandler) error {
  45. v.Lock()
  46. defer v.Unlock()
  47. v.taggedHandler[tag] = handler
  48. return nil
  49. }
  50. func init() {
  51. common.Must(common.RegisterConfig((*proxyman.OutboundConfig)(nil), func(ctx context.Context, config interface{}) (interface{}, error) {
  52. return New(ctx, config.(*proxyman.OutboundConfig))
  53. }))
  54. }