proxyman.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package proxyman
  2. import (
  3. "sync"
  4. "github.com/v2ray/v2ray-core/app"
  5. "github.com/v2ray/v2ray-core/proxy"
  6. )
  7. const (
  8. APP_ID_INBOUND_MANAGER = app.ID(4)
  9. APP_ID_OUTBOUND_MANAGER = app.ID(6)
  10. )
  11. type InboundHandlerManager interface {
  12. GetHandler(tag string) (proxy.InboundHandler, int)
  13. }
  14. type OutboundHandlerManager interface {
  15. GetHandler(tag string) proxy.OutboundHandler
  16. GetDefaultHandler() proxy.OutboundHandler
  17. }
  18. type DefaultOutboundHandlerManager struct {
  19. sync.RWMutex
  20. defaultHandler proxy.OutboundHandler
  21. taggedHandler map[string]proxy.OutboundHandler
  22. }
  23. func (this *DefaultOutboundHandlerManager) GetDefaultHandler() proxy.OutboundHandler {
  24. this.RLock()
  25. defer this.RUnlock()
  26. if this.defaultHandler == nil {
  27. return nil
  28. }
  29. return this.defaultHandler
  30. }
  31. func (this *DefaultOutboundHandlerManager) SetDefaultHandler(handler proxy.OutboundHandler) {
  32. this.Lock()
  33. defer this.Unlock()
  34. this.defaultHandler = handler
  35. }
  36. func (this *DefaultOutboundHandlerManager) GetHandler(tag string) proxy.OutboundHandler {
  37. this.RLock()
  38. defer this.RUnlock()
  39. if handler, found := this.taggedHandler[tag]; found {
  40. return handler
  41. }
  42. return nil
  43. }
  44. func (this *DefaultOutboundHandlerManager) SetHandler(tag string, handler proxy.OutboundHandler) {
  45. this.Lock()
  46. defer this.Unlock()
  47. this.taggedHandler[tag] = handler
  48. }