src/http/v3/ngx_http_v3_parse.h - nginx source code

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_http_v3_parse_literal_t;


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

  45.     ngx_str_t                       name;
  46.     ngx_str_t                       value;

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


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


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


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


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


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


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


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


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

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


  108. #endif /* _NGX_HTTP_V3_PARSE_H_INCLUDED_ */