quic_datagram_v3.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package connection
  2. import (
  3. "context"
  4. "fmt"
  5. "net"
  6. "time"
  7. "github.com/google/uuid"
  8. "github.com/quic-go/quic-go"
  9. "github.com/rs/zerolog"
  10. "github.com/cloudflare/cloudflared/ingress"
  11. "github.com/cloudflare/cloudflared/management"
  12. cfdquic "github.com/cloudflare/cloudflared/quic/v3"
  13. "github.com/cloudflare/cloudflared/tunnelrpc/pogs"
  14. )
  15. type datagramV3Connection struct {
  16. conn quic.Connection
  17. // datagramMuxer mux/demux datagrams from quic connection
  18. datagramMuxer cfdquic.DatagramConn
  19. logger *zerolog.Logger
  20. }
  21. func NewDatagramV3Connection(ctx context.Context,
  22. conn quic.Connection,
  23. sessionManager cfdquic.SessionManager,
  24. icmpRouter ingress.ICMPRouter,
  25. index uint8,
  26. metrics cfdquic.Metrics,
  27. logger *zerolog.Logger,
  28. ) DatagramSessionHandler {
  29. log := logger.
  30. With().
  31. Int(management.EventTypeKey, int(management.UDP)).
  32. Uint8(LogFieldConnIndex, index).
  33. Logger()
  34. datagramMuxer := cfdquic.NewDatagramConn(conn, sessionManager, icmpRouter, index, metrics, &log)
  35. return &datagramV3Connection{
  36. conn,
  37. datagramMuxer,
  38. logger,
  39. }
  40. }
  41. func (d *datagramV3Connection) Serve(ctx context.Context) error {
  42. return d.datagramMuxer.Serve(ctx)
  43. }
  44. func (d *datagramV3Connection) RegisterUdpSession(ctx context.Context, sessionID uuid.UUID, dstIP net.IP, dstPort uint16, closeAfterIdleHint time.Duration, traceContext string) (*pogs.RegisterUdpSessionResponse, error) {
  45. return nil, fmt.Errorf("datagram v3 does not support RegisterUdpSession RPC")
  46. }
  47. func (d *datagramV3Connection) UnregisterUdpSession(ctx context.Context, sessionID uuid.UUID, message string) error {
  48. return fmt.Errorf("datagram v3 does not support UnregisterUdpSession RPC")
  49. }