src/event/quic/ngx_event_quic.h - nginx source code

Data types defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Nginx, Inc.
  3. */


  4. #ifndef _NGX_EVENT_QUIC_H_INCLUDED_
  5. #define _NGX_EVENT_QUIC_H_INCLUDED_


  6. #include <ngx_config.h>
  7. #include <ngx_core.h>


  8. #define NGX_QUIC_MAX_UDP_PAYLOAD_SIZE        65527

  9. #define NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT  3
  10. #define NGX_QUIC_DEFAULT_MAX_ACK_DELAY       25
  11. #define NGX_QUIC_DEFAULT_HOST_KEY_LEN        32
  12. #define NGX_QUIC_SR_KEY_LEN                  32
  13. #define NGX_QUIC_AV_KEY_LEN                  32

  14. #define NGX_QUIC_SR_TOKEN_LEN                16

  15. #define NGX_QUIC_MIN_INITIAL_SIZE            1200

  16. #define NGX_QUIC_STREAM_SERVER_INITIATED     0x01
  17. #define NGX_QUIC_STREAM_UNIDIRECTIONAL       0x02


  18. typedef ngx_int_t (*ngx_quic_init_pt)(ngx_connection_t *c);
  19. typedef void (*ngx_quic_shutdown_pt)(ngx_connection_t *c);


  20. typedef enum {
  21.     NGX_QUIC_STREAM_SEND_READY = 0,
  22.     NGX_QUIC_STREAM_SEND_SEND,
  23.     NGX_QUIC_STREAM_SEND_DATA_SENT,
  24.     NGX_QUIC_STREAM_SEND_DATA_RECVD,
  25.     NGX_QUIC_STREAM_SEND_RESET_SENT,
  26.     NGX_QUIC_STREAM_SEND_RESET_RECVD
  27. } ngx_quic_stream_send_state_e;


  28. typedef enum {
  29.     NGX_QUIC_STREAM_RECV_RECV = 0,
  30.     NGX_QUIC_STREAM_RECV_SIZE_KNOWN,
  31.     NGX_QUIC_STREAM_RECV_DATA_RECVD,
  32.     NGX_QUIC_STREAM_RECV_DATA_READ,
  33.     NGX_QUIC_STREAM_RECV_RESET_RECVD,
  34.     NGX_QUIC_STREAM_RECV_RESET_READ
  35. } ngx_quic_stream_recv_state_e;


  36. typedef struct {
  37.     uint64_t                       size;
  38.     uint64_t                       offset;
  39.     uint64_t                       last_offset;
  40.     ngx_chain_t                   *chain;
  41.     ngx_chain_t                   *last_chain;
  42. } ngx_quic_buffer_t;


  43. typedef struct {
  44.     ngx_ssl_t                     *ssl;

  45.     ngx_flag_t                     retry;
  46.     ngx_flag_t                     gso_enabled;
  47.     ngx_flag_t                     disable_active_migration;
  48.     ngx_msec_t                     handshake_timeout;
  49.     ngx_msec_t                     idle_timeout;
  50.     ngx_str_t                      host_key;
  51.     size_t                         stream_buffer_size;
  52.     ngx_uint_t                     max_concurrent_streams_bidi;
  53.     ngx_uint_t                     max_concurrent_streams_uni;
  54.     ngx_uint_t                     active_connection_id_limit;
  55.     ngx_int_t                      stream_close_code;
  56.     ngx_int_t                      stream_reject_code_uni;
  57.     ngx_int_t                      stream_reject_code_bidi;

  58.     ngx_quic_init_pt               init;
  59.     ngx_quic_shutdown_pt           shutdown;

  60.     u_char                         av_token_key[NGX_QUIC_AV_KEY_LEN];
  61.     u_char                         sr_token_key[NGX_QUIC_SR_KEY_LEN];
  62. } ngx_quic_conf_t;


  63. struct ngx_quic_stream_s {
  64.     ngx_rbtree_node_t              node;
  65.     ngx_queue_t                    queue;
  66.     ngx_connection_t              *parent;
  67.     ngx_connection_t              *connection;
  68.     uint64_t                       id;
  69.     uint64_t                       sent;
  70.     uint64_t                       acked;
  71.     uint64_t                       send_max_data;
  72.     uint64_t                       send_offset;
  73.     uint64_t                       send_final_size;
  74.     uint64_t                       recv_max_data;
  75.     uint64_t                       recv_offset;
  76.     uint64_t                       recv_window;
  77.     uint64_t                       recv_last;
  78.     uint64_t                       recv_final_size;
  79.     ngx_quic_buffer_t              send;
  80.     ngx_quic_buffer_t              recv;
  81.     ngx_quic_stream_send_state_e   send_state;
  82.     ngx_quic_stream_recv_state_e   recv_state;
  83.     unsigned                       cancelable:1;
  84.     unsigned                       fin_acked:1;
  85. };


  86. void ngx_quic_recvmsg(ngx_event_t *ev);
  87. void ngx_quic_run(ngx_connection_t *c, ngx_quic_conf_t *conf);
  88. ngx_connection_t *ngx_quic_open_stream(ngx_connection_t *c, ngx_uint_t bidi);
  89. void ngx_quic_finalize_connection(ngx_connection_t *c, ngx_uint_t err,
  90.     const char *reason);
  91. void ngx_quic_shutdown_connection(ngx_connection_t *c, ngx_uint_t err,
  92.     const char *reason);
  93. ngx_int_t ngx_quic_reset_stream(ngx_connection_t *c, ngx_uint_t err);
  94. ngx_int_t ngx_quic_shutdown_stream(ngx_connection_t *c, int how);
  95. void ngx_quic_cancelable_stream(ngx_connection_t *c);
  96. ngx_int_t ngx_quic_get_packet_dcid(ngx_log_t *log, u_char *data, size_t len,
  97.     ngx_str_t *dcid);
  98. ngx_int_t ngx_quic_derive_key(ngx_log_t *log, const char *label,
  99.     ngx_str_t *secret, ngx_str_t *salt, u_char *out, size_t len);

  100. #endif /* _NGX_EVENT_QUIC_H_INCLUDED_ */