proxyman.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Package proxyman defines applications for manageing inbound and outbound proxies.
  2. package proxyman
  3. import (
  4. "context"
  5. "v2ray.com/core/app"
  6. "v2ray.com/core/common/net"
  7. "v2ray.com/core/proxy"
  8. "v2ray.com/core/transport/ray"
  9. )
  10. type InboundHandlerManager interface {
  11. GetHandler(ctx context.Context, tag string) (InboundHandler, error)
  12. AddHandler(ctx context.Context, config *InboundHandlerConfig) error
  13. }
  14. type InboundHandler interface {
  15. Start() error
  16. Close()
  17. // For migration
  18. GetRandomInboundProxy() (proxy.Inbound, net.Port, int)
  19. }
  20. type OutboundHandlerManager interface {
  21. GetHandler(tag string) OutboundHandler
  22. GetDefaultHandler() OutboundHandler
  23. AddHandler(ctx context.Context, config *OutboundHandlerConfig) error
  24. }
  25. type OutboundHandler interface {
  26. Dispatch(ctx context.Context, outboundRay ray.OutboundRay)
  27. }
  28. func InboundHandlerManagerFromSpace(space app.Space) InboundHandlerManager {
  29. app := space.GetApplication((*InboundHandlerManager)(nil))
  30. if app == nil {
  31. return nil
  32. }
  33. return app.(InboundHandlerManager)
  34. }
  35. func OutboundHandlerManagerFromSpace(space app.Space) OutboundHandlerManager {
  36. app := space.GetApplication((*OutboundHandlerManager)(nil))
  37. if app == nil {
  38. return nil
  39. }
  40. return app.(OutboundHandlerManager)
  41. }