src/http/v3/ngx_http_v3_parse.h - nginx

Data types defined

Macros defined

Source code


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


  5. #ifndef _NGX_HTTP_V3_PARSE_H_INCLUDED_
  6. #define _NGX_HTTP_V3_PARSE_H_INCLUDED_


  7. #include <ngx_config.h>
  8. #include <ngx_core.h>
  9. #include <ngx_http.h>


  10. typedef struct {
  11.     ngx_uint_t                      state;
  12.     uint64_t                        value;
  13. } ngx_http_v3_parse_varlen_int_t;


  14. typedef struct {
  15.     ngx_uint_t                      state;
  16.     ngx_uint_t                      shift;
  17.     uint64_t                        value;
  18. } ngx_http_v3_parse_prefix_int_t;


  19. typedef struct {
  20.     ngx_uint_t                      state;
  21.     uint64_t                        id;
  22.     ngx_http_v3_parse_varlen_int_t  vlint;
  23. } ngx_http_v3_parse_settings_t;


  24. typedef struct {
  25.     ngx_uint_t                      state;
  26.     ngx_uint_t                      insert_count;
  27.     ngx_uint_t                      delta_base;
  28.     ngx_uint_t                      sign;
  29.     ngx_uint_t                      base;
  30.     ngx_http_v3_parse_prefix_int_t  pint;
  31. } ngx_http_v3_parse_field_section_prefix_t;


  32. typedef struct {
  33.     ngx_uint_t                      state;
  34.     ngx_uint_t                      length;
  35.     ngx_uint_t                      huffman;
  36.     ngx_str_t                       value;
  37.     u_char                         *last;
  38.     u_char                          huffstate;
  39.     ngx_buf_t                      *buf;
  40. } ngx_http_v3_parse_literal_t;


  41. typedef struct {
  42.     ngx_uint_t                      state;
  43.     ngx_uint_t                      index;
  44.     ngx_uint_t                      base;
  45.     ngx_uint_t                      dynamic;

  46.     ngx_str_t                       name;
  47.     ngx_str_t                       value;

  48.     ngx_http_v3_parse_prefix_int_t  pint;
  49.     ngx_http_v3_parse_literal_t     literal;
  50. } ngx_http_v3_parse_field_t;


  51. typedef struct {
  52.     ngx_uint_t                      state;
  53.     ngx_http_v3_parse_field_t       field;
  54. } ngx_http_v3_parse_field_rep_t;


  55. typedef struct {
  56.     ngx_uint_t                      state;
  57.     ngx_uint_t                      type;
  58.     ngx_uint_t                      length;
  59.     ngx_http_v3_parse_varlen_int_t  vlint;
  60.     ngx_http_v3_parse_field_section_prefix_t  prefix;
  61.     ngx_http_v3_parse_field_rep_t   field_rep;
  62. } ngx_http_v3_parse_headers_t;


  63. typedef struct {
  64.     ngx_uint_t                      state;
  65.     ngx_http_v3_parse_field_t       field;
  66.     ngx_http_v3_parse_prefix_int_t  pint;
  67. } ngx_http_v3_parse_encoder_t;


  68. typedef struct {
  69.     ngx_uint_t                      state;
  70.     ngx_http_v3_parse_prefix_int_t  pint;
  71. } ngx_http_v3_parse_decoder_t;


  72. typedef struct {
  73.     ngx_uint_t                      state;
  74.     ngx_uint_t                      type;
  75.     ngx_uint_t                      length;
  76.     ngx_http_v3_parse_varlen_int_t  vlint;
  77.     ngx_http_v3_parse_settings_t    settings;
  78. } ngx_http_v3_parse_control_t;


  79. typedef struct {
  80.     ngx_uint_t                      state;
  81.     ngx_http_v3_parse_varlen_int_t  vlint;
  82.     union {
  83.         ngx_http_v3_parse_encoder_t  encoder;
  84.         ngx_http_v3_parse_decoder_t  decoder;
  85.         ngx_http_v3_parse_control_t  control;
  86.     } u;
  87. } ngx_http_v3_parse_uni_t;


  88. typedef struct {
  89.     ngx_uint_t                      state;
  90.     ngx_uint_t                      type;
  91.     ngx_uint_t                      length;
  92.     ngx_http_v3_parse_varlen_int_t  vlint;
  93. } ngx_http_v3_parse_data_t;


  94. /*
  95. * Parse functions return codes:
  96. *   NGX_DONE - parsing done
  97. *   NGX_OK - sub-element done
  98. *   NGX_AGAIN - more data expected
  99. *   NGX_BUSY - waiting for external event
  100. *   NGX_ERROR - internal error
  101. *   NGX_HTTP_V3_ERROR_XXX - HTTP/3 or QPACK error
  102. */

  103. ngx_int_t ngx_http_v3_parse_headers(ngx_connection_t *c,
  104.     ngx_http_v3_parse_headers_t *st, ngx_buf_t *b);
  105. ngx_int_t ngx_http_v3_parse_data(ngx_connection_t *c,
  106.     ngx_http_v3_parse_data_t *st, ngx_buf_t *b);
  107. ngx_int_t ngx_http_v3_parse_uni(ngx_connection_t *c,
  108.     ngx_http_v3_parse_uni_t *st, ngx_buf_t *b);


  109. #endif /* _NGX_HTTP_V3_PARSE_H_INCLUDED_ */