@fails-components/webtransport 0.0.1-rc.0 → 0.0.1-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/.github/workflows/npm-publish-packages.yml +0 -0
  2. package/CMakeLists.txt +2 -0
  3. package/package.json +1 -1
  4. package/readme.md +0 -0
  5. package/src/http3serversession.h +1 -1
  6. package/src/webtransport.js +4 -2
  7. package/third_party/boringssl/src/CMakeLists.txt +9 -12
  8. package/third_party/boringssl/src/crypto/CMakeLists.txt +2 -3
  9. package/third_party/boringssl/src/crypto/asn1/time_support.c +206 -206
  10. package/third_party/boringssl/src/crypto/bio/socket_helper.c +124 -122
  11. package/third_party/boringssl/src/crypto/evp/digestsign.c +268 -231
  12. package/third_party/boringssl/src/crypto/evp/p_ec.c +286 -286
  13. package/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.c +246 -236
  14. package/third_party/boringssl/src/crypto/fipsmodule/aes/mode_wrappers.c +124 -122
  15. package/third_party/boringssl/src/crypto/fipsmodule/bcm.c +3 -0
  16. package/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.c +246 -230
  17. package/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h +734 -715
  18. package/third_party/boringssl/src/crypto/fipsmodule/bn/random.c +349 -341
  19. package/third_party/boringssl/src/crypto/fipsmodule/cipher/cipher.c +670 -648
  20. package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.c +1504 -1472
  21. package/third_party/boringssl/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +435 -446
  22. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_3des_cmac_tests.txt +0 -0
  23. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_aes128_cmac_tests.txt +0 -0
  24. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_aes192_cmac_tests.txt +0 -0
  25. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_aes256_cmac_tests.txt +0 -0
  26. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +318 -278
  27. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cmac_test.cc +268 -267
  28. package/third_party/boringssl/src/crypto/fipsmodule/dh/dh.c +5 -1
  29. package/third_party/boringssl/src/crypto/fipsmodule/ec/ec.c +11 -17
  30. package/third_party/boringssl/src/crypto/fipsmodule/ec/ec_key.c +15 -4
  31. package/third_party/boringssl/src/crypto/fipsmodule/ec/internal.h +2 -6
  32. package/third_party/boringssl/src/crypto/fipsmodule/ec/p224-64.c +1164 -1180
  33. package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.c +3 -3
  34. package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz_test.cc +2 -2
  35. package/third_party/boringssl/src/crypto/fipsmodule/ec/p256.c +44 -33
  36. package/third_party/boringssl/src/crypto/fipsmodule/ec/scalar.c +169 -175
  37. package/third_party/boringssl/src/crypto/fipsmodule/ec/simple.c +352 -357
  38. package/third_party/boringssl/src/crypto/fipsmodule/ecdh/ecdh.c +4 -0
  39. package/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.c +14 -9
  40. package/third_party/boringssl/src/crypto/fipsmodule/hmac/hmac.c +256 -235
  41. package/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c +204 -202
  42. package/third_party/boringssl/src/crypto/fipsmodule/rsa/padding.c +702 -695
  43. package/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa_impl.c +7 -2
  44. package/third_party/boringssl/src/crypto/fipsmodule/self_check/self_check.c +7 -0
  45. package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  46. package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator.c +333 -0
  47. package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator_test.cc +2410 -0
  48. package/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.c +359 -357
  49. package/third_party/boringssl/src/crypto/fipsmodule/sha/sha256.c +325 -321
  50. package/third_party/boringssl/src/crypto/fipsmodule/sha/sha512.c +510 -508
  51. package/third_party/boringssl/src/crypto/fipsmodule/tls/kdf.c +177 -165
  52. package/third_party/boringssl/src/crypto/internal.h +13 -0
  53. package/third_party/boringssl/src/crypto/trust_token/trust_token_test.cc +884 -884
  54. package/third_party/boringssl/src/crypto/x509/internal.h +0 -2
  55. package/third_party/boringssl/src/crypto/x509/t_crl.c +148 -148
  56. package/third_party/boringssl/src/crypto/x509/t_req.c +249 -250
  57. package/third_party/boringssl/src/crypto/x509/t_x509.c +2 -3
  58. package/third_party/boringssl/src/crypto/x509/x509_req.c +262 -304
  59. package/third_party/boringssl/src/crypto/x509/x509_set.c +250 -240
  60. package/third_party/boringssl/src/crypto/x509/x509_test.cc +466 -4
  61. package/third_party/boringssl/src/crypto/x509/x509cset.c +292 -279
  62. package/third_party/boringssl/src/crypto/x509/x509rset.c +89 -86
  63. package/third_party/boringssl/src/crypto/x509/x_crl.c +37 -125
  64. package/third_party/boringssl/src/crypto/x509/x_req.c +114 -109
  65. package/third_party/boringssl/src/crypto/x509/x_x509.c +394 -394
  66. package/third_party/boringssl/src/crypto/x509v3/v3_akey.c +11 -16
  67. package/third_party/boringssl/src/crypto/x509v3/v3_alt.c +644 -642
  68. package/third_party/boringssl/src/crypto/x509v3/v3_bcons.c +130 -133
  69. package/third_party/boringssl/src/crypto/x509v3/v3_bitst.c +149 -144
  70. package/third_party/boringssl/src/crypto/x509v3/v3_cpols.c +496 -500
  71. package/third_party/boringssl/src/crypto/x509v3/v3_enum.c +105 -106
  72. package/third_party/boringssl/src/crypto/x509v3/v3_ia5.c +126 -121
  73. package/third_party/boringssl/src/crypto/x509v3/v3_info.c +206 -218
  74. package/third_party/boringssl/src/crypto/x509v3/v3_int.c +97 -91
  75. package/third_party/boringssl/src/crypto/x509v3/v3_pci.c +290 -289
  76. package/third_party/boringssl/src/crypto/x509v3/v3_skey.c +161 -156
  77. package/third_party/boringssl/src/crypto/x509v3/v3_utl.c +5 -3
  78. package/third_party/boringssl/src/include/openssl/aead.h +480 -480
  79. package/third_party/boringssl/src/include/openssl/asn1.h +2 -0
  80. package/third_party/boringssl/src/include/openssl/base.h +1 -1
  81. package/third_party/boringssl/src/include/openssl/service_indicator.h +96 -0
  82. package/third_party/boringssl/src/include/openssl/ssl.h +7 -0
  83. package/third_party/boringssl/src/include/openssl/x509.h +11 -33
  84. package/third_party/boringssl/src/include/openssl/x509v3.h +990 -1018
  85. package/third_party/boringssl/src/sources.cmake +4 -4
  86. package/third_party/boringssl/src/ssl/internal.h +10 -0
  87. package/third_party/boringssl/src/ssl/ssl_lib.cc +3081 -3072
  88. package/third_party/boringssl/src/ssl/ssl_test.cc +46 -0
  89. package/third_party/boringssl/src/ssl/tls13_server.cc +4 -6
  90. package/third_party/boringssl/src/util/bot/DEPS +14 -27
  91. package/third_party/boringssl/src/util/bot/UPDATING +3 -9
  92. package/third_party/boringssl/src/util/bot/update_clang.py +172 -172
  93. package/third_party/boringssl/src/util/bot/vs_toolchain.py +3 -3
  94. package/third_party/quiche/.bazelrc +8 -0
  95. package/third_party/quiche/BUILD.bazel +7 -0
  96. package/third_party/quiche/WHITESPACE +3 -1
  97. package/third_party/quiche/WORKSPACE.bazel +87 -0
  98. package/third_party/quiche/build/BUILD.bazel +7 -0
  99. package/third_party/quiche/build/source_list.bzl +1511 -0
  100. package/third_party/quiche/build/source_list.gni +1511 -0
  101. package/third_party/quiche/build/source_list.json +1511 -0
  102. package/third_party/quiche/build/test.bzl +26 -0
  103. package/third_party/quiche/build/zlib.BUILD +25 -0
  104. package/third_party/quiche/quiche/BUILD.bazel +270 -0
  105. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_enums.cc +3 -3
  106. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_enums.h +7 -7
  107. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_frame.cc +39 -18
  108. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_frame.h +11 -10
  109. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_frame_test.cc +67 -63
  110. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_headers.cc +13 -12
  111. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_headers.h +16 -8
  112. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_headers_test.cc +9 -9
  113. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_visitor_interface.h +4 -4
  114. package/third_party/quiche/quiche/{common/balsa → balsa}/framer_interface.h +3 -3
  115. package/third_party/quiche/quiche/{common/balsa → balsa}/header_api.h +3 -3
  116. package/third_party/quiche/quiche/{common/balsa → balsa}/header_properties.cc +1 -1
  117. package/third_party/quiche/quiche/{common/balsa → balsa}/header_properties.h +3 -3
  118. package/third_party/quiche/quiche/{common/balsa → balsa}/header_properties_test.cc +1 -1
  119. package/third_party/quiche/quiche/{common/balsa → balsa}/http_validation_policy.cc +1 -1
  120. package/third_party/quiche/quiche/{common/balsa → balsa}/http_validation_policy.h +3 -3
  121. package/third_party/quiche/quiche/{common/balsa → balsa}/noop_balsa_visitor.h +4 -4
  122. package/third_party/quiche/quiche/{common/balsa → balsa}/simple_buffer.cc +22 -29
  123. package/third_party/quiche/quiche/{common/balsa → balsa}/simple_buffer.h +18 -16
  124. package/third_party/quiche/quiche/{common/balsa → balsa}/simple_buffer_test.cc +79 -32
  125. package/third_party/quiche/quiche/{common/balsa → balsa}/standard_header_map.cc +1 -1
  126. package/third_party/quiche/quiche/{common/balsa → balsa}/standard_header_map.h +3 -3
  127. package/third_party/quiche/quiche/common/platform/api/quiche_command_line_flags.h +6 -1
  128. package/third_party/quiche/quiche/common/platform/api/quiche_flags.h +8 -0
  129. package/third_party/quiche/quiche/common/platform/api/quiche_logging.h +0 -3
  130. package/third_party/quiche/quiche/common/platform/api/quiche_lower_case_string_test.cc +29 -0
  131. package/third_party/quiche/quiche/common/platform/api/quiche_test.h +5 -7
  132. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quic_flags_impl.h +1 -1
  133. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_bug_tracker_impl.h +3 -2
  134. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.cc +41 -0
  135. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h +33 -0
  136. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_expect_bug_impl.h +15 -0
  137. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h +84 -50
  138. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h +25 -0
  139. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_stack_trace_impl.cc +1 -1
  140. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.cc +25 -0
  141. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h +56 -0
  142. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_output_impl.h +27 -0
  143. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h +26 -0
  144. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc +1 -0
  145. package/third_party/quiche/quiche/common/quiche_buffer_allocator_test.cc +1 -1
  146. package/third_party/quiche/quiche/common/quiche_mem_slice_storage.h +2 -3
  147. package/third_party/quiche/quiche/common/structured_headers.cc +14 -12
  148. package/third_party/quiche/quiche/http2/adapter/event_forwarder.cc +7 -5
  149. package/third_party/quiche/quiche/http2/adapter/event_forwarder.h +4 -2
  150. package/third_party/quiche/quiche/http2/adapter/event_forwarder_test.cc +14 -9
  151. package/third_party/quiche/quiche/http2/adapter/header_validator.cc +43 -19
  152. package/third_party/quiche/quiche/http2/adapter/header_validator.h +11 -40
  153. package/third_party/quiche/quiche/http2/adapter/header_validator_base.h +69 -0
  154. package/third_party/quiche/quiche/http2/adapter/header_validator_test.cc +73 -1
  155. package/third_party/quiche/quiche/http2/adapter/nghttp2_adapter_test.cc +66 -0
  156. package/third_party/quiche/quiche/http2/adapter/nghttp2_session_test.cc +8 -5
  157. package/third_party/quiche/quiche/http2/adapter/nghttp2_test.cc +1 -1
  158. package/third_party/quiche/quiche/http2/adapter/noop_header_validator.cc +22 -0
  159. package/third_party/quiche/quiche/http2/adapter/noop_header_validator.h +25 -0
  160. package/third_party/quiche/quiche/http2/adapter/noop_header_validator_test.cc +523 -0
  161. package/third_party/quiche/quiche/http2/adapter/oghttp2_adapter_test.cc +186 -5
  162. package/third_party/quiche/quiche/http2/adapter/oghttp2_session.cc +37 -43
  163. package/third_party/quiche/quiche/http2/adapter/oghttp2_session.h +22 -23
  164. package/third_party/quiche/quiche/http2/adapter/test_utils.cc +1 -1
  165. package/third_party/quiche/quiche/http2/adapter/window_manager_test.cc +11 -5
  166. package/third_party/quiche/quiche/http2/core/http2_trace_logging.cc +13 -11
  167. package/third_party/quiche/quiche/http2/core/http2_trace_logging.h +5 -4
  168. package/third_party/quiche/quiche/http2/core/priority_write_scheduler.h +42 -36
  169. package/third_party/quiche/quiche/http2/core/priority_write_scheduler_test.cc +2 -2
  170. package/third_party/quiche/quiche/http2/decoder/decode_buffer_test.cc +9 -9
  171. package/third_party/quiche/quiche/http2/decoder/decode_http2_structures_test.cc +1 -1
  172. package/third_party/quiche/quiche/http2/decoder/http2_frame_decoder_test.cc +14 -14
  173. package/third_party/quiche/quiche/http2/decoder/http2_structure_decoder_test.cc +17 -17
  174. package/third_party/quiche/quiche/http2/decoder/payload_decoders/altsvc_payload_decoder_test.cc +1 -1
  175. package/third_party/quiche/quiche/http2/decoder/payload_decoders/continuation_payload_decoder_test.cc +1 -1
  176. package/third_party/quiche/quiche/http2/decoder/payload_decoders/data_payload_decoder_test.cc +2 -2
  177. package/third_party/quiche/quiche/http2/decoder/payload_decoders/goaway_payload_decoder_test.cc +1 -1
  178. package/third_party/quiche/quiche/http2/decoder/payload_decoders/headers_payload_decoder_test.cc +1 -1
  179. package/third_party/quiche/quiche/http2/decoder/payload_decoders/ping_payload_decoder_test.cc +1 -1
  180. package/third_party/quiche/quiche/http2/decoder/payload_decoders/priority_payload_decoder_test.cc +1 -1
  181. package/third_party/quiche/quiche/http2/decoder/payload_decoders/priority_update_payload_decoder_test.cc +1 -1
  182. package/third_party/quiche/quiche/http2/decoder/payload_decoders/push_promise_payload_decoder_test.cc +1 -1
  183. package/third_party/quiche/quiche/http2/decoder/payload_decoders/rst_stream_payload_decoder_test.cc +1 -1
  184. package/third_party/quiche/quiche/http2/decoder/payload_decoders/settings_payload_decoder_test.cc +1 -1
  185. package/third_party/quiche/quiche/http2/decoder/payload_decoders/unknown_payload_decoder_test.cc +1 -1
  186. package/third_party/quiche/quiche/http2/decoder/payload_decoders/window_update_payload_decoder_test.cc +1 -1
  187. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_block_decoder_test.cc +2 -2
  188. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_state_test.cc +8 -8
  189. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_string_buffer_test.cc +4 -3
  190. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_tables_test.cc +17 -17
  191. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_test.cc +25 -25
  192. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_entry_decoder_test.cc +2 -2
  193. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_entry_type_decoder_test.cc +7 -6
  194. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_string_decoder_test.cc +6 -6
  195. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_whole_entry_buffer_test.cc +1 -1
  196. package/third_party/quiche/quiche/http2/hpack/huffman/hpack_huffman_decoder_test.cc +2 -2
  197. package/third_party/quiche/quiche/http2/hpack/huffman/hpack_huffman_encoder_test.cc +1 -1
  198. package/third_party/quiche/quiche/http2/hpack/huffman/hpack_huffman_transcoder_test.cc +5 -5
  199. package/third_party/quiche/quiche/http2/hpack/varint/hpack_varint_decoder_test.cc +4 -4
  200. package/third_party/quiche/quiche/http2/hpack/varint/hpack_varint_round_trip_test.cc +1 -1
  201. package/third_party/quiche/quiche/http2/http2_constants_test.cc +1 -1
  202. package/third_party/quiche/quiche/http2/http2_structures_test.cc +23 -22
  203. package/third_party/quiche/quiche/http2/test_tools/frame_decoder_state_test_util.cc +1 -1
  204. package/third_party/quiche/quiche/http2/test_tools/frame_decoder_state_test_util.h +1 -1
  205. package/third_party/quiche/quiche/http2/test_tools/frame_parts.cc +38 -38
  206. package/third_party/quiche/quiche/http2/test_tools/hpack_block_collector.cc +15 -15
  207. package/third_party/quiche/quiche/http2/test_tools/hpack_entry_collector.cc +24 -22
  208. package/third_party/quiche/quiche/http2/test_tools/hpack_string_collector.cc +5 -5
  209. package/third_party/quiche/quiche/http2/test_tools/http2_frame_builder_test.cc +70 -89
  210. package/third_party/quiche/quiche/http2/test_tools/payload_decoder_base_test_util.cc +1 -1
  211. package/third_party/quiche/quiche/http2/test_tools/payload_decoder_base_test_util.h +29 -26
  212. package/third_party/quiche/quiche/http2/test_tools/{random_decoder_test.cc → random_decoder_test_base.cc} +13 -10
  213. package/third_party/quiche/quiche/http2/test_tools/{random_decoder_test.h → random_decoder_test_base.h} +15 -17
  214. package/third_party/quiche/quiche/http2/test_tools/{random_decoder_test_test.cc → random_decoder_test_base_test.cc} +1 -1
  215. package/third_party/quiche/quiche/http2/test_tools/verify_macros.h +32 -0
  216. package/third_party/quiche/quiche/quic/core/congestion_control/bbr2_sender.cc +2 -1
  217. package/third_party/quiche/quiche/quic/core/congestion_control/bbr2_simulator_test.cc +3 -2
  218. package/third_party/quiche/quiche/quic/core/congestion_control/bbr_sender_test.cc +3 -2
  219. package/third_party/quiche/quiche/quic/core/congestion_control/rtt_stats.cc +3 -2
  220. package/third_party/quiche/quiche/quic/core/congestion_control/rtt_stats.h +2 -1
  221. package/third_party/quiche/quiche/quic/core/congestion_control/rtt_stats_test.cc +2 -13
  222. package/third_party/quiche/quiche/quic/core/crypto/certificate_view.cc +15 -0
  223. package/third_party/quiche/quiche/quic/core/crypto/certificate_view.h +7 -0
  224. package/third_party/quiche/quiche/quic/core/crypto/certificate_view_test.cc +16 -0
  225. package/third_party/quiche/quiche/quic/core/crypto/crypto_protocol.h +1 -0
  226. package/third_party/quiche/quiche/quic/core/crypto/proof_source.h +2 -2
  227. package/third_party/quiche/quiche/quic/core/crypto/proof_source_x509.cc +3 -5
  228. package/third_party/quiche/quiche/quic/core/crypto/proof_source_x509.h +1 -2
  229. package/third_party/quiche/quiche/quic/core/crypto/quic_crypto_server_config.cc +1 -1
  230. package/third_party/quiche/quiche/quic/core/crypto/quic_crypto_server_config.h +3 -3
  231. package/third_party/quiche/quiche/quic/core/frames/quic_blocked_frame.cc +2 -8
  232. package/third_party/quiche/quiche/quic/core/frames/quic_blocked_frame.h +0 -1
  233. package/third_party/quiche/quiche/quic/core/frames/quic_crypto_frame.h +2 -0
  234. package/third_party/quiche/quiche/quic/core/frames/quic_frames_test.cc +2 -1
  235. package/third_party/quiche/quiche/quic/core/http/capsule.cc +2 -22
  236. package/third_party/quiche/quiche/quic/core/http/capsule.h +0 -2
  237. package/third_party/quiche/quiche/quic/core/http/capsule_test.cc +1 -2
  238. package/third_party/quiche/quiche/quic/core/http/end_to_end_test.cc +148 -57
  239. package/third_party/quiche/quiche/quic/core/http/http_constants.cc +1 -1
  240. package/third_party/quiche/quiche/quic/core/http/http_constants.h +2 -2
  241. package/third_party/quiche/quiche/quic/core/http/quic_header_list_test.cc +2 -2
  242. package/third_party/quiche/quiche/quic/core/http/quic_headers_stream_test.cc +18 -14
  243. package/third_party/quiche/quiche/quic/core/http/quic_send_control_stream.h +2 -1
  244. package/third_party/quiche/quiche/quic/core/http/quic_send_control_stream_test.cc +3 -7
  245. package/third_party/quiche/quiche/quic/core/http/quic_server_session_base.h +4 -0
  246. package/third_party/quiche/quiche/quic/core/http/quic_spdy_session.cc +47 -65
  247. package/third_party/quiche/quiche/quic/core/http/quic_spdy_session.h +5 -17
  248. package/third_party/quiche/quiche/quic/core/http/quic_spdy_session_test.cc +63 -54
  249. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.cc +34 -91
  250. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.h +1 -9
  251. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream_test.cc +27 -134
  252. package/third_party/quiche/quiche/quic/core/http/spdy_utils.cc +0 -41
  253. package/third_party/quiche/quiche/quic/core/http/spdy_utils.h +0 -9
  254. package/third_party/quiche/quiche/quic/core/http/spdy_utils_test.cc +0 -32
  255. package/third_party/quiche/quiche/quic/core/http/web_transport_http3.cc +0 -1
  256. package/third_party/quiche/quiche/quic/core/packet_number_indexed_queue_test.cc +2 -2
  257. package/third_party/quiche/quiche/quic/core/qpack/qpack_header_table.cc +2 -1
  258. package/third_party/quiche/quiche/quic/core/qpack/qpack_send_stream.h +2 -1
  259. package/third_party/quiche/quiche/quic/core/quic_arena_scoped_ptr_test.cc +2 -2
  260. package/third_party/quiche/quiche/quic/core/quic_connection.cc +68 -46
  261. package/third_party/quiche/quiche/quic/core/quic_connection.h +7 -6
  262. package/third_party/quiche/quiche/quic/core/quic_connection_context_test.cc +2 -2
  263. package/third_party/quiche/quiche/quic/core/quic_connection_id_manager_test.cc +2 -2
  264. package/third_party/quiche/quiche/quic/core/quic_connection_id_test.cc +2 -2
  265. package/third_party/quiche/quiche/quic/core/quic_connection_test.cc +45 -132
  266. package/third_party/quiche/quiche/quic/core/quic_constants.h +0 -7
  267. package/third_party/quiche/quiche/quic/core/quic_control_frame_manager.cc +11 -3
  268. package/third_party/quiche/quiche/quic/core/quic_control_frame_manager.h +1 -1
  269. package/third_party/quiche/quiche/quic/core/quic_control_frame_manager_test.cc +2 -2
  270. package/third_party/quiche/quiche/quic/core/quic_crypto_client_handshaker.cc +13 -1
  271. package/third_party/quiche/quiche/quic/core/quic_crypto_client_handshaker.h +3 -0
  272. package/third_party/quiche/quiche/quic/core/quic_crypto_client_handshaker_test.cc +2 -2
  273. package/third_party/quiche/quiche/quic/core/quic_crypto_client_stream.cc +6 -0
  274. package/third_party/quiche/quiche/quic/core/quic_crypto_client_stream.h +8 -0
  275. package/third_party/quiche/quiche/quic/core/quic_crypto_server_stream.cc +26 -13
  276. package/third_party/quiche/quiche/quic/core/quic_crypto_server_stream.h +5 -2
  277. package/third_party/quiche/quiche/quic/core/quic_crypto_stream.cc +55 -47
  278. package/third_party/quiche/quiche/quic/core/quic_crypto_stream.h +15 -10
  279. package/third_party/quiche/quiche/quic/core/quic_crypto_stream_test.cc +34 -5
  280. package/third_party/quiche/quiche/quic/core/quic_dispatcher.cc +20 -11
  281. package/third_party/quiche/quiche/quic/core/quic_dispatcher_test.cc +37 -13
  282. package/third_party/quiche/quiche/quic/core/quic_flags_list.h +6 -10
  283. package/third_party/quiche/quiche/quic/core/quic_flow_controller.cc +3 -3
  284. package/third_party/quiche/quiche/quic/core/quic_flow_controller.h +2 -2
  285. package/third_party/quiche/quiche/quic/core/quic_flow_controller_test.cc +15 -10
  286. package/third_party/quiche/quiche/quic/core/quic_framer.cc +1 -1
  287. package/third_party/quiche/quiche/quic/core/quic_one_block_arena.h +3 -2
  288. package/third_party/quiche/quiche/quic/core/quic_one_block_arena_test.cc +2 -2
  289. package/third_party/quiche/quiche/quic/core/quic_packet_creator.cc +3 -11
  290. package/third_party/quiche/quiche/quic/core/quic_packet_creator.h +0 -8
  291. package/third_party/quiche/quiche/quic/core/quic_ping_manager.cc +14 -14
  292. package/third_party/quiche/quiche/quic/core/quic_ping_manager_test.cc +48 -0
  293. package/third_party/quiche/quiche/quic/core/quic_received_packet_manager.cc +3 -18
  294. package/third_party/quiche/quiche/quic/core/quic_received_packet_manager_test.cc +4 -14
  295. package/third_party/quiche/quiche/quic/core/quic_server_id_test.cc +2 -2
  296. package/third_party/quiche/quiche/quic/core/quic_session.cc +4 -4
  297. package/third_party/quiche/quiche/quic/core/quic_session.h +1 -1
  298. package/third_party/quiche/quiche/quic/core/quic_session_test.cc +21 -1
  299. package/third_party/quiche/quiche/quic/core/quic_stream.cc +4 -7
  300. package/third_party/quiche/quiche/quic/core/quic_stream_test.cc +2 -4
  301. package/third_party/quiche/quiche/quic/core/quic_trace_visitor_test.cc +2 -2
  302. package/third_party/quiche/quiche/quic/core/quic_types.h +3 -8
  303. package/third_party/quiche/quiche/quic/core/quic_udp_socket_posix.cc +5 -4
  304. package/third_party/quiche/quiche/quic/core/quic_unacked_packet_map_test.cc +1 -1
  305. package/third_party/quiche/quiche/quic/core/quic_utils.cc +1 -1
  306. package/third_party/quiche/quiche/quic/core/quic_utils.h +2 -2
  307. package/third_party/quiche/quiche/quic/core/quic_versions_test.cc +0 -1
  308. package/third_party/quiche/quiche/quic/core/tls_client_handshaker.cc +13 -0
  309. package/third_party/quiche/quiche/quic/core/tls_client_handshaker.h +2 -0
  310. package/third_party/quiche/quiche/quic/core/tls_server_handshaker.cc +17 -3
  311. package/third_party/quiche/quiche/quic/core/tls_server_handshaker.h +3 -1
  312. package/third_party/quiche/quiche/quic/core/uber_received_packet_manager_test.cc +18 -10
  313. package/third_party/quiche/quiche/quic/masque/masque_client_bin.cc +6 -4
  314. package/third_party/quiche/quiche/quic/masque/masque_client_session.cc +23 -7
  315. package/third_party/quiche/quiche/quic/masque/masque_client_session.h +1 -1
  316. package/third_party/quiche/quiche/quic/masque/masque_server_backend.cc +13 -0
  317. package/third_party/quiche/quiche/quic/masque/masque_server_backend.h +2 -0
  318. package/third_party/quiche/quiche/quic/masque/masque_server_bin.cc +5 -4
  319. package/third_party/quiche/quiche/quic/masque/masque_server_session.cc +30 -40
  320. package/third_party/quiche/quiche/quic/masque/masque_server_session.h +1 -1
  321. package/third_party/quiche/quiche/quic/platform/api/quic_export.h +4 -4
  322. package/third_party/quiche/quiche/quic/platform/api/quic_flags.h +0 -1
  323. package/third_party/quiche/quiche/quic/platform/api/quic_logging.h +0 -6
  324. package/third_party/quiche/quiche/quic/platform/api/quic_test.h +6 -5
  325. package/third_party/quiche/quiche/quic/qbone/bonnet/icmp_reachable_test.cc +2 -2
  326. package/third_party/quiche/quiche/quic/qbone/bonnet/mock_qbone_tunnel.h +2 -0
  327. package/third_party/quiche/quiche/quic/qbone/bonnet/qbone_tunnel_interface.h +2 -0
  328. package/third_party/quiche/quiche/quic/qbone/bonnet/tun_device_controller_test.cc +2 -2
  329. package/third_party/quiche/quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc +2 -2
  330. package/third_party/quiche/quiche/quic/qbone/bonnet/tun_device_test.cc +2 -2
  331. package/third_party/quiche/quiche/quic/qbone/platform/netlink_test.cc +2 -2
  332. package/third_party/quiche/quiche/quic/qbone/platform/tcp_packet.cc +5 -4
  333. package/third_party/quiche/quiche/quic/qbone/qbone_client_session.cc +4 -2
  334. package/third_party/quiche/quiche/quic/qbone/qbone_packet_processor.cc +2 -1
  335. package/third_party/quiche/quiche/quic/qbone/qbone_packet_processor_test.cc +2 -2
  336. package/third_party/quiche/quiche/quic/qbone/qbone_server_session.cc +4 -2
  337. package/third_party/quiche/quiche/quic/qbone/qbone_session_base.cc +3 -2
  338. package/third_party/quiche/quiche/quic/qbone/qbone_stream.cc +4 -4
  339. package/third_party/quiche/quiche/quic/test_tools/quic_connection_peer.cc +1 -1
  340. package/third_party/quiche/quiche/quic/test_tools/quic_http_response_cache_data/test.example.com/index.html +63 -0
  341. package/third_party/quiche/quiche/quic/test_tools/quic_http_response_cache_data/test.example.com/map.html +65 -0
  342. package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.cc +4 -3
  343. package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.h +18 -1
  344. package/third_party/quiche/quiche/quic/test_tools/simulator/quic_endpoint_test.cc +1 -1
  345. package/third_party/quiche/quiche/quic/test_tools/simulator/simulator_test.cc +1 -1
  346. package/third_party/quiche/quiche/quic/test_tools/test_ticket_crypter.cc +1 -1
  347. package/third_party/quiche/quiche/quic/test_tools/test_ticket_crypter.h +2 -2
  348. package/third_party/quiche/quiche/quic/{core/crypto → tools}/crypto_message_printer_bin.cc +0 -0
  349. package/third_party/quiche/quiche/quic/{core/qpack → tools}/qpack_offline_decoder_bin.cc +0 -0
  350. package/third_party/quiche/quiche/quic/tools/quic_client_interop_test_bin.cc +4 -3
  351. package/third_party/quiche/quiche/quic/tools/quic_memory_cache_backend_test.cc +3 -31
  352. package/third_party/quiche/quiche/quic/tools/quic_packet_printer_bin.cc +2 -2
  353. package/third_party/quiche/quiche/quic/tools/quic_simple_server_session.h +1 -1
  354. package/third_party/quiche/quiche/quic/tools/quic_simple_server_session_test.cc +1 -1
  355. package/third_party/quiche/quiche/quic/tools/quic_toy_client.cc +52 -38
  356. package/third_party/quiche/quiche/quic/tools/quic_toy_server.cc +10 -7
  357. package/third_party/quiche/quiche/quic/tools/simple_ticket_crypter.cc +1 -1
  358. package/third_party/quiche/quiche/quic/tools/simple_ticket_crypter.h +1 -1
  359. package/third_party/quiche/quiche/quic/tools/web_transport_test_visitors.h +3 -2
  360. package/third_party/quiche/quiche/spdy/core/array_output_buffer.h +1 -1
  361. package/third_party/quiche/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc +1 -1
  362. package/third_party/quiche/quiche/spdy/core/hpack/hpack_encoder_test.cc +2 -1
  363. package/third_party/quiche/quiche/spdy/core/hpack/hpack_header_table_test.cc +1 -1
  364. package/third_party/quiche/quiche/spdy/core/hpack/hpack_round_trip_test.cc +2 -1
  365. package/third_party/quiche/quiche/spdy/core/hpack/hpack_static_table_test.cc +1 -1
  366. package/third_party/quiche/quiche/spdy/core/http2_frame_decoder_adapter.cc +8 -6
  367. package/third_party/quiche/quiche/spdy/core/http2_frame_decoder_adapter.h +17 -6
  368. package/third_party/quiche/quiche/spdy/core/metadata_extension.cc +1 -1
  369. package/third_party/quiche/quiche/spdy/core/metadata_extension_test.cc +1 -1
  370. package/third_party/quiche/quiche/spdy/core/spdy_framer_test.cc +21 -17
  371. package/third_party/quiche/quiche/spdy/core/spdy_intrusive_list_test.cc +3 -3
  372. package/third_party/quiche/quiche/spdy/core/spdy_no_op_visitor.h +6 -4
  373. package/third_party/quiche/quiche/spdy/core/spdy_pinnable_buffer_piece_test.cc +1 -1
  374. package/third_party/quiche/quiche/spdy/core/spdy_prefixed_buffer_reader_test.cc +1 -1
  375. package/third_party/quiche/quiche/spdy/core/spdy_protocol_test.cc +1 -1
  376. package/third_party/quiche/quiche/spdy/test_tools/mock_spdy_framer_visitor.h +5 -4
  377. package/third_party/boringssl/src/util/bot/cmake-win32.zip.sha1 +0 -1
  378. package/third_party/quiche/quiche/common/platform/api/quiche_mock_log.h +0 -18
  379. package/third_party/quiche/quiche/common/platform/api/quiche_test_helpers.h +0 -8
  380. package/third_party/quiche/quiche/quic/platform/api/quic_mock_log.h +0 -19
  381. package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_dispatcher.cc +0 -51
  382. package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_dispatcher.h +0 -41
  383. package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_session.cc +0 -168
  384. package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_session.h +0 -78
@@ -0,0 +1,523 @@
1
+ #include "quiche/http2/adapter/noop_header_validator.h"
2
+
3
+ #include <utility>
4
+ #include <vector>
5
+
6
+ #include "absl/strings/str_cat.h"
7
+ #include "absl/types/optional.h"
8
+ #include "quiche/common/platform/api/quiche_test.h"
9
+
10
+ namespace http2 {
11
+ namespace adapter {
12
+ namespace test {
13
+
14
+ using ::testing::Optional;
15
+
16
+ using Header = std::pair<absl::string_view, absl::string_view>;
17
+ constexpr Header kSampleRequestPseudoheaders[] = {{":authority", "www.foo.com"},
18
+ {":method", "GET"},
19
+ {":path", "/foo"},
20
+ {":scheme", "https"}};
21
+
22
+ TEST(NoopHeaderValidatorTest, HeaderNameEmpty) {
23
+ NoopHeaderValidator v;
24
+ NoopHeaderValidator::HeaderStatus status =
25
+ v.ValidateSingleHeader("", "value");
26
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK, status);
27
+ }
28
+
29
+ TEST(NoopHeaderValidatorTest, HeaderValueEmpty) {
30
+ NoopHeaderValidator v;
31
+ NoopHeaderValidator::HeaderStatus status = v.ValidateSingleHeader("name", "");
32
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK, status);
33
+ }
34
+
35
+ TEST(NoopHeaderValidatorTest, ExceedsMaxSize) {
36
+ NoopHeaderValidator v;
37
+ v.SetMaxFieldSize(64u);
38
+ NoopHeaderValidator::HeaderStatus status =
39
+ v.ValidateSingleHeader("name", "value");
40
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK, status);
41
+ status = v.ValidateSingleHeader(
42
+ "name2",
43
+ "Antidisestablishmentariansism is supercalifragilisticexpialodocious.");
44
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK, status);
45
+ }
46
+
47
+ TEST(NoopHeaderValidatorTest, AnyNameCharIsValid) {
48
+ NoopHeaderValidator v;
49
+ char pseudo_name[] = ":met hod";
50
+ char name[] = "na me";
51
+ for (int i = std::numeric_limits<char>::min();
52
+ i < std::numeric_limits<char>::max(); ++i) {
53
+ char c = static_cast<char>(i);
54
+ // Test a pseudo-header name with this char.
55
+ pseudo_name[3] = c;
56
+ auto sv = absl::string_view(pseudo_name, 8);
57
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
58
+ v.ValidateSingleHeader(sv, "value"));
59
+ // Test a regular header name with this char.
60
+ name[2] = c;
61
+ sv = absl::string_view(name, 5);
62
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
63
+ v.ValidateSingleHeader(sv, "value"));
64
+ }
65
+ }
66
+
67
+ TEST(NoopHeaderValidatorTest, AnyValueCharIsValid) {
68
+ NoopHeaderValidator v;
69
+ char value[] = "val ue";
70
+ for (int i = std::numeric_limits<char>::min();
71
+ i < std::numeric_limits<char>::max(); ++i) {
72
+ char c = static_cast<char>(i);
73
+ value[3] = c;
74
+ auto sv = absl::string_view(value, 6);
75
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
76
+ v.ValidateSingleHeader("name", sv));
77
+ }
78
+ }
79
+
80
+ TEST(NoopHeaderValidatorTest, AnyStatusIsValid) {
81
+ NoopHeaderValidator v;
82
+
83
+ for (HeaderType type : {HeaderType::RESPONSE, HeaderType::RESPONSE_100}) {
84
+ v.StartHeaderBlock();
85
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
86
+ v.ValidateSingleHeader(":status", "bar"));
87
+ EXPECT_TRUE(v.FinishHeaderBlock(type));
88
+
89
+ v.StartHeaderBlock();
90
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
91
+ v.ValidateSingleHeader(":status", "10"));
92
+ EXPECT_TRUE(v.FinishHeaderBlock(type));
93
+
94
+ v.StartHeaderBlock();
95
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
96
+ v.ValidateSingleHeader(":status", "9000"));
97
+ EXPECT_TRUE(v.FinishHeaderBlock(type));
98
+
99
+ v.StartHeaderBlock();
100
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
101
+ v.ValidateSingleHeader(":status", "400"));
102
+ EXPECT_TRUE(v.FinishHeaderBlock(type));
103
+ }
104
+ }
105
+
106
+ TEST(NoopHeaderValidatorTest, AnyAuthorityCharIsValid) {
107
+ char value[] = "ho st.example.com";
108
+ for (int i = std::numeric_limits<char>::min();
109
+ i < std::numeric_limits<char>::max(); ++i) {
110
+ char c = static_cast<char>(i);
111
+ value[2] = c;
112
+ auto sv = absl::string_view(value, 17);
113
+ for (absl::string_view key : {":authority", "host"}) {
114
+ NoopHeaderValidator v;
115
+ v.StartHeaderBlock();
116
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
117
+ v.ValidateSingleHeader(key, sv));
118
+ }
119
+ }
120
+ }
121
+
122
+ TEST(NoopHeaderValidatorTest, RequestHostAndAuthority) {
123
+ NoopHeaderValidator v;
124
+ v.StartHeaderBlock();
125
+ for (Header to_add : kSampleRequestPseudoheaders) {
126
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
127
+ v.ValidateSingleHeader(to_add.first, to_add.second));
128
+ }
129
+ // If both "host" and ":authority" have the same value, validation succeeds.
130
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
131
+ v.ValidateSingleHeader("host", "www.foo.com"));
132
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
133
+
134
+ v.StartHeaderBlock();
135
+ for (Header to_add : kSampleRequestPseudoheaders) {
136
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
137
+ v.ValidateSingleHeader(to_add.first, to_add.second));
138
+ }
139
+ // If "host" and ":authority" have different values, validation still
140
+ // succeeds.
141
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
142
+ v.ValidateSingleHeader("host", "www.bar.com"));
143
+ }
144
+
145
+ TEST(NoopHeaderValidatorTest, RequestPseudoHeaders) {
146
+ NoopHeaderValidator v;
147
+ for (Header to_skip : kSampleRequestPseudoheaders) {
148
+ v.StartHeaderBlock();
149
+ for (Header to_add : kSampleRequestPseudoheaders) {
150
+ if (to_add != to_skip) {
151
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
152
+ v.ValidateSingleHeader(to_add.first, to_add.second));
153
+ }
154
+ }
155
+ // Even if a pseudo-header is missing, final validation will succeed.
156
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
157
+ }
158
+
159
+ // When all pseudo-headers are present, final validation will succeed.
160
+ v.StartHeaderBlock();
161
+ for (Header to_add : kSampleRequestPseudoheaders) {
162
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
163
+ v.ValidateSingleHeader(to_add.first, to_add.second));
164
+ }
165
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
166
+
167
+ // When an extra pseudo-header is present, final validation will still
168
+ // succeed.
169
+ v.StartHeaderBlock();
170
+ for (Header to_add : kSampleRequestPseudoheaders) {
171
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
172
+ v.ValidateSingleHeader(to_add.first, to_add.second));
173
+ }
174
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
175
+ v.ValidateSingleHeader(":extra", "blah"));
176
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
177
+
178
+ // When a required pseudo-header is repeated, final validation will succeed.
179
+ for (Header to_repeat : kSampleRequestPseudoheaders) {
180
+ v.StartHeaderBlock();
181
+ for (Header to_add : kSampleRequestPseudoheaders) {
182
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
183
+ v.ValidateSingleHeader(to_add.first, to_add.second));
184
+ if (to_add == to_repeat) {
185
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
186
+ v.ValidateSingleHeader(to_add.first, to_add.second));
187
+ }
188
+ }
189
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
190
+ }
191
+ }
192
+
193
+ TEST(NoopHeaderValidatorTest, WebsocketPseudoHeaders) {
194
+ NoopHeaderValidator v;
195
+ v.StartHeaderBlock();
196
+ for (Header to_add : kSampleRequestPseudoheaders) {
197
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
198
+ v.ValidateSingleHeader(to_add.first, to_add.second));
199
+ }
200
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
201
+ v.ValidateSingleHeader(":protocol", "websocket"));
202
+ // Validation always succeeds.
203
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
204
+
205
+ // This is a no-op for NoopHeaderValidator.
206
+ v.SetAllowExtendedConnect();
207
+
208
+ v.StartHeaderBlock();
209
+ for (Header to_add : kSampleRequestPseudoheaders) {
210
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
211
+ v.ValidateSingleHeader(to_add.first, to_add.second));
212
+ }
213
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
214
+ v.ValidateSingleHeader(":protocol", "websocket"));
215
+ // The validator does not check for a CONNECT request.
216
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
217
+
218
+ v.StartHeaderBlock();
219
+ for (Header to_add : kSampleRequestPseudoheaders) {
220
+ if (to_add.first == ":method") {
221
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
222
+ v.ValidateSingleHeader(to_add.first, "CONNECT"));
223
+ } else {
224
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
225
+ v.ValidateSingleHeader(to_add.first, to_add.second));
226
+ }
227
+ }
228
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
229
+ v.ValidateSingleHeader(":protocol", "websocket"));
230
+ // After allowing the method, `:protocol` is acepted for CONNECT requests.
231
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
232
+ }
233
+
234
+ TEST(NoopHeaderValidatorTest, AsteriskPathPseudoHeader) {
235
+ NoopHeaderValidator v;
236
+
237
+ // The validator does not perform any path validation.
238
+ v.StartHeaderBlock();
239
+ for (Header to_add : kSampleRequestPseudoheaders) {
240
+ if (to_add.first == ":path") {
241
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
242
+ v.ValidateSingleHeader(to_add.first, "*"));
243
+ } else {
244
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
245
+ v.ValidateSingleHeader(to_add.first, to_add.second));
246
+ }
247
+ }
248
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
249
+
250
+ v.StartHeaderBlock();
251
+ for (Header to_add : kSampleRequestPseudoheaders) {
252
+ if (to_add.first == ":path") {
253
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
254
+ v.ValidateSingleHeader(to_add.first, "*"));
255
+ } else if (to_add.first == ":method") {
256
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
257
+ v.ValidateSingleHeader(to_add.first, "OPTIONS"));
258
+ } else {
259
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
260
+ v.ValidateSingleHeader(to_add.first, to_add.second));
261
+ }
262
+ }
263
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
264
+ }
265
+
266
+ TEST(NoopHeaderValidatorTest, InvalidPathPseudoHeader) {
267
+ NoopHeaderValidator v;
268
+
269
+ // An empty path is allowed.
270
+ v.StartHeaderBlock();
271
+ for (Header to_add : kSampleRequestPseudoheaders) {
272
+ if (to_add.first == ":path") {
273
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
274
+ v.ValidateSingleHeader(to_add.first, ""));
275
+ } else {
276
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
277
+ v.ValidateSingleHeader(to_add.first, to_add.second));
278
+ }
279
+ }
280
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
281
+
282
+ // A path that does not start with a slash is allowed.
283
+ v.StartHeaderBlock();
284
+ for (Header to_add : kSampleRequestPseudoheaders) {
285
+ if (to_add.first == ":path") {
286
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
287
+ v.ValidateSingleHeader(to_add.first, "shawarma"));
288
+ } else {
289
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
290
+ v.ValidateSingleHeader(to_add.first, to_add.second));
291
+ }
292
+ }
293
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::REQUEST));
294
+ }
295
+
296
+ TEST(NoopHeaderValidatorTest, ResponsePseudoHeaders) {
297
+ NoopHeaderValidator v;
298
+
299
+ for (HeaderType type : {HeaderType::RESPONSE, HeaderType::RESPONSE_100}) {
300
+ // When `:status` is missing, validation succeeds.
301
+ v.StartHeaderBlock();
302
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
303
+ v.ValidateSingleHeader("foo", "bar"));
304
+ EXPECT_TRUE(v.FinishHeaderBlock(type));
305
+
306
+ // When all pseudo-headers are present, final validation succeeds.
307
+ v.StartHeaderBlock();
308
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
309
+ v.ValidateSingleHeader(":status", "199"));
310
+ EXPECT_TRUE(v.FinishHeaderBlock(type));
311
+ EXPECT_EQ("199", v.status_header());
312
+
313
+ // When `:status` is repeated, validation succeeds.
314
+ v.StartHeaderBlock();
315
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
316
+ v.ValidateSingleHeader(":status", "199"));
317
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
318
+ v.ValidateSingleHeader(":status", "299"));
319
+ EXPECT_TRUE(v.FinishHeaderBlock(type));
320
+
321
+ // When an extra pseudo-header is present, final validation succeeds.
322
+ v.StartHeaderBlock();
323
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
324
+ v.ValidateSingleHeader(":status", "199"));
325
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
326
+ v.ValidateSingleHeader(":extra", "blorp"));
327
+ EXPECT_TRUE(v.FinishHeaderBlock(type));
328
+ }
329
+ }
330
+
331
+ TEST(NoopHeaderValidatorTest, ResponseWithHost) {
332
+ NoopHeaderValidator v;
333
+
334
+ v.StartHeaderBlock();
335
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
336
+ v.ValidateSingleHeader(":status", "200"));
337
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
338
+ v.ValidateSingleHeader("host", "myserver.com"));
339
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::RESPONSE));
340
+ }
341
+
342
+ TEST(NoopHeaderValidatorTest, Response204) {
343
+ NoopHeaderValidator v;
344
+
345
+ v.StartHeaderBlock();
346
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
347
+ v.ValidateSingleHeader(":status", "204"));
348
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
349
+ v.ValidateSingleHeader("x-content", "is not present"));
350
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::RESPONSE));
351
+ }
352
+
353
+ TEST(NoopHeaderValidatorTest, ResponseWithMultipleIdenticalContentLength) {
354
+ NoopHeaderValidator v;
355
+
356
+ v.StartHeaderBlock();
357
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
358
+ v.ValidateSingleHeader(":status", "200"));
359
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
360
+ v.ValidateSingleHeader("content-length", "13"));
361
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
362
+ v.ValidateSingleHeader("content-length", "13"));
363
+ }
364
+
365
+ TEST(NoopHeaderValidatorTest, ResponseWithMultipleDifferingContentLength) {
366
+ NoopHeaderValidator v;
367
+
368
+ v.StartHeaderBlock();
369
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
370
+ v.ValidateSingleHeader(":status", "200"));
371
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
372
+ v.ValidateSingleHeader("content-length", "13"));
373
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
374
+ v.ValidateSingleHeader("content-length", "17"));
375
+ }
376
+
377
+ TEST(NoopHeaderValidatorTest, Response204WithContentLengthZero) {
378
+ NoopHeaderValidator v;
379
+
380
+ v.StartHeaderBlock();
381
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
382
+ v.ValidateSingleHeader(":status", "204"));
383
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
384
+ v.ValidateSingleHeader("x-content", "is not present"));
385
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
386
+ v.ValidateSingleHeader("content-length", "0"));
387
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::RESPONSE));
388
+ }
389
+
390
+ TEST(NoopHeaderValidatorTest, Response204WithContentLength) {
391
+ NoopHeaderValidator v;
392
+
393
+ v.StartHeaderBlock();
394
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
395
+ v.ValidateSingleHeader(":status", "204"));
396
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
397
+ v.ValidateSingleHeader("x-content", "is not present"));
398
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
399
+ v.ValidateSingleHeader("content-length", "1"));
400
+ }
401
+
402
+ TEST(NoopHeaderValidatorTest, Response100) {
403
+ NoopHeaderValidator v;
404
+
405
+ v.StartHeaderBlock();
406
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
407
+ v.ValidateSingleHeader(":status", "100"));
408
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
409
+ v.ValidateSingleHeader("x-content", "is not present"));
410
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::RESPONSE));
411
+ }
412
+
413
+ TEST(NoopHeaderValidatorTest, Response100WithContentLengthZero) {
414
+ NoopHeaderValidator v;
415
+
416
+ v.StartHeaderBlock();
417
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
418
+ v.ValidateSingleHeader(":status", "100"));
419
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
420
+ v.ValidateSingleHeader("x-content", "is not present"));
421
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
422
+ v.ValidateSingleHeader("content-length", "0"));
423
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::RESPONSE));
424
+ }
425
+
426
+ TEST(NoopHeaderValidatorTest, Response100WithContentLength) {
427
+ NoopHeaderValidator v;
428
+
429
+ v.StartHeaderBlock();
430
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
431
+ v.ValidateSingleHeader(":status", "100"));
432
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
433
+ v.ValidateSingleHeader("x-content", "is not present"));
434
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
435
+ v.ValidateSingleHeader("content-length", "1"));
436
+ }
437
+
438
+ TEST(NoopHeaderValidatorTest, ResponseTrailerPseudoHeaders) {
439
+ NoopHeaderValidator v;
440
+
441
+ // When no pseudo-headers are present, validation will succeed.
442
+ v.StartHeaderBlock();
443
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
444
+ v.ValidateSingleHeader("foo", "bar"));
445
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::RESPONSE_TRAILER));
446
+
447
+ // When a pseudo-header is present, validation will succeed.
448
+ v.StartHeaderBlock();
449
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
450
+ v.ValidateSingleHeader(":status", "200"));
451
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
452
+ v.ValidateSingleHeader("foo", "bar"));
453
+ EXPECT_TRUE(v.FinishHeaderBlock(HeaderType::RESPONSE_TRAILER));
454
+ }
455
+
456
+ TEST(NoopHeaderValidatorTest, ValidContentLength) {
457
+ NoopHeaderValidator v;
458
+
459
+ v.StartHeaderBlock();
460
+ EXPECT_EQ(v.content_length(), absl::nullopt);
461
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
462
+ v.ValidateSingleHeader("content-length", "41"));
463
+ EXPECT_EQ(v.content_length(), absl::nullopt);
464
+
465
+ v.StartHeaderBlock();
466
+ EXPECT_EQ(v.content_length(), absl::nullopt);
467
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
468
+ v.ValidateSingleHeader("content-length", "42"));
469
+ EXPECT_EQ(v.content_length(), absl::nullopt);
470
+ }
471
+
472
+ TEST(NoopHeaderValidatorTest, InvalidContentLength) {
473
+ NoopHeaderValidator v;
474
+
475
+ v.StartHeaderBlock();
476
+ EXPECT_EQ(v.content_length(), absl::nullopt);
477
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
478
+ v.ValidateSingleHeader("content-length", ""));
479
+ EXPECT_EQ(v.content_length(), absl::nullopt);
480
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
481
+ v.ValidateSingleHeader("content-length", "nan"));
482
+ EXPECT_EQ(v.content_length(), absl::nullopt);
483
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
484
+ v.ValidateSingleHeader("content-length", "-42"));
485
+ EXPECT_EQ(v.content_length(), absl::nullopt);
486
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
487
+ v.ValidateSingleHeader("content-length", "42"));
488
+ EXPECT_EQ(v.content_length(), absl::nullopt);
489
+ }
490
+
491
+ TEST(NoopHeaderValidatorTest, TeHeader) {
492
+ NoopHeaderValidator v;
493
+
494
+ v.StartHeaderBlock();
495
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
496
+ v.ValidateSingleHeader("te", "trailers"));
497
+
498
+ v.StartHeaderBlock();
499
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
500
+ v.ValidateSingleHeader("te", "trailers, deflate"));
501
+ }
502
+
503
+ TEST(NoopHeaderValidatorTest, ConnectionSpecificHeaders) {
504
+ const std::vector<Header> connection_headers = {
505
+ {"connection", "keep-alive"}, {"proxy-connection", "keep-alive"},
506
+ {"keep-alive", "timeout=42"}, {"transfer-encoding", "chunked"},
507
+ {"upgrade", "h2c"},
508
+ };
509
+ for (const auto& [connection_key, connection_value] : connection_headers) {
510
+ NoopHeaderValidator v;
511
+ v.StartHeaderBlock();
512
+ for (const auto& [sample_key, sample_value] : kSampleRequestPseudoheaders) {
513
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
514
+ v.ValidateSingleHeader(sample_key, sample_value));
515
+ }
516
+ EXPECT_EQ(NoopHeaderValidator::HEADER_OK,
517
+ v.ValidateSingleHeader(connection_key, connection_value));
518
+ }
519
+ }
520
+
521
+ } // namespace test
522
+ } // namespace adapter
523
+ } // namespace http2