outbound.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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) Release() {
  20. }
  21. func (v *DefaultOutboundHandlerManager) GetDefaultHandler() proxy.OutboundHandler {
  22. v.RLock()
  23. defer v.RUnlock()
  24. if v.defaultHandler == nil {
  25. return nil
  26. }
  27. return v.defaultHandler
  28. }
  29. func (v *DefaultOutboundHandlerManager) SetDefaultHandler(handler proxy.OutboundHandler) error {
  30. v.Lock()
  31. defer v.Unlock()
  32. v.defaultHandler = handler
  33. return nil
  34. }
  35. func (v *DefaultOutboundHandlerManager) GetHandler(tag string) proxy.OutboundHandler {
  36. v.RLock()
  37. defer v.RUnlock()
  38. if handler, found := v.taggedHandler[tag]; found {
  39. return handler
  40. }
  41. return nil
  42. }
  43. func (v *DefaultOutboundHandlerManager) SetHandler(tag string, handler proxy.OutboundHandler) error {
  44. v.Lock()
  45. defer v.Unlock()
  46. v.taggedHandler[tag] = handler
  47. return nil
  48. }
  49. type OutboundHandlerManagerFactory struct{}
  50. func (v OutboundHandlerManagerFactory) Create(space app.Space, config interface{}) (app.Application, error) {
  51. return New(), nil
  52. }
  53. func (v OutboundHandlerManagerFactory) AppId() app.ID {
  54. return proxyman.APP_ID_OUTBOUND_MANAGER
  55. }
  56. func init() {
  57. app.RegisterApplicationFactory(serial.GetMessageType(new(proxyman.OutboundConfig)), OutboundHandlerManagerFactory{})
  58. }