proxyman.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 NewDefaultOutboundHandlerManager() *DefaultOutboundHandlerManager {
  24. return &DefaultOutboundHandlerManager{
  25. taggedHandler: make(map[string]proxy.OutboundHandler),
  26. }
  27. }
  28. func (this *DefaultOutboundHandlerManager) Release() {
  29. }
  30. func (this *DefaultOutboundHandlerManager) GetDefaultHandler() proxy.OutboundHandler {
  31. this.RLock()
  32. defer this.RUnlock()
  33. if this.defaultHandler == nil {
  34. return nil
  35. }
  36. return this.defaultHandler
  37. }
  38. func (this *DefaultOutboundHandlerManager) SetDefaultHandler(handler proxy.OutboundHandler) {
  39. this.Lock()
  40. defer this.Unlock()
  41. this.defaultHandler = handler
  42. }
  43. func (this *DefaultOutboundHandlerManager) GetHandler(tag string) proxy.OutboundHandler {
  44. this.RLock()
  45. defer this.RUnlock()
  46. if handler, found := this.taggedHandler[tag]; found {
  47. return handler
  48. }
  49. return nil
  50. }
  51. func (this *DefaultOutboundHandlerManager) SetHandler(tag string, handler proxy.OutboundHandler) {
  52. this.Lock()
  53. defer this.Unlock()
  54. this.taggedHandler[tag] = handler
  55. }