dispatcher.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. package dispatcher
  2. import (
  3. "github.com/v2ray/v2ray-core/app"
  4. v2net "github.com/v2ray/v2ray-core/common/net"
  5. "github.com/v2ray/v2ray-core/transport/ray"
  6. )
  7. const (
  8. APP_ID = app.ID(1)
  9. )
  10. // PacketDispatcher dispatch a packet and possibly further network payload to its destination.
  11. type PacketDispatcher interface {
  12. DispatchToOutbound(packet v2net.Packet) ray.InboundRay
  13. }
  14. type packetDispatcherWithContext interface {
  15. DispatchToOutbound(context app.Context, packet v2net.Packet) ray.InboundRay
  16. }
  17. type contextedPacketDispatcher struct {
  18. context app.Context
  19. packetDispatcher packetDispatcherWithContext
  20. }
  21. func (this *contextedPacketDispatcher) DispatchToOutbound(packet v2net.Packet) ray.InboundRay {
  22. return this.packetDispatcher.DispatchToOutbound(this.context, packet)
  23. }
  24. func init() {
  25. app.RegisterApp(APP_ID, func(context app.Context, obj interface{}) interface{} {
  26. packetDispatcher := obj.(packetDispatcherWithContext)
  27. return &contextedPacketDispatcher{
  28. context: context,
  29. packetDispatcher: packetDispatcher,
  30. }
  31. })
  32. }