@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
@@ -278,7 +278,6 @@ size_t QuicSpdyStream::WriteHeaders(
278
278
  MaybeProcessSentWebTransportHeaders(header_block);
279
279
 
280
280
  if (web_transport_ != nullptr &&
281
- spdy_session_->http_datagram_support() != HttpDatagramSupport::kDraft00 &&
282
281
  spdy_session_->perspective() == Perspective::IS_SERVER) {
283
282
  header_block["sec-webtransport-http3-draft"] = "draft02";
284
283
  }
@@ -296,24 +295,20 @@ size_t QuicSpdyStream::WriteHeaders(
296
295
 
297
296
  if (web_transport_ != nullptr &&
298
297
  session()->perspective() == Perspective::IS_CLIENT) {
299
- if (spdy_session_->http_datagram_support() !=
300
- HttpDatagramSupport::kDraft00) {
301
- // draft-ietf-masque-h3-datagram-01 and later use capsules.
298
+ WriteGreaseCapsule();
299
+ if (spdy_session_->http_datagram_support() ==
300
+ HttpDatagramSupport::kDraft04) {
301
+ // Send a REGISTER_DATAGRAM_NO_CONTEXT capsule to support servers that
302
+ // are running draft-ietf-masque-h3-datagram-04 or -05.
303
+ uint64_t capsule_type = 0xff37a2; // REGISTER_DATAGRAM_NO_CONTEXT
304
+ constexpr unsigned char capsule_data[4] = {
305
+ 0x80, 0xff, 0x7c, 0x00, // WEBTRANSPORT datagram format type
306
+ };
307
+ WriteCapsule(Capsule::Unknown(
308
+ capsule_type,
309
+ absl::string_view(reinterpret_cast<const char*>(capsule_data),
310
+ sizeof(capsule_data))));
302
311
  WriteGreaseCapsule();
303
- if (spdy_session_->http_datagram_support() ==
304
- HttpDatagramSupport::kDraft04) {
305
- // Send a REGISTER_DATAGRAM_NO_CONTEXT capsule to support servers that
306
- // are running draft-ietf-masque-h3-datagram-04 or -05.
307
- uint64_t capsule_type = 0xff37a2; // REGISTER_DATAGRAM_NO_CONTEXT
308
- constexpr unsigned char capsule_data[4] = {
309
- 0x80, 0xff, 0x7c, 0x00, // WEBTRANSPORT datagram format type
310
- };
311
- WriteCapsule(Capsule::Unknown(
312
- capsule_type,
313
- absl::string_view(reinterpret_cast<const char*>(capsule_data),
314
- sizeof(capsule_data))));
315
- WriteGreaseCapsule();
316
- }
317
312
  }
318
313
  }
319
314
 
@@ -759,18 +754,20 @@ void QuicSpdyStream::OnStreamReset(const QuicRstStreamFrame& frame) {
759
754
  return;
760
755
  }
761
756
 
762
- if (GetQuicReloadableFlag(quic_fix_on_stream_reset) &&
763
- VersionUsesHttp3(transport_version())) {
764
- QUIC_RELOADABLE_FLAG_COUNT(quic_fix_on_stream_reset);
765
- if (!fin_received() && spdy_session_->qpack_decoder()) {
766
- spdy_session_->qpack_decoder()->OnStreamReset(id());
767
- qpack_decoded_headers_accumulator_.reset();
768
- qpack_decoded_headers_accumulator_reset_reason_ =
769
- QpackDecodedHeadersAccumulatorResetReason::kResetInOnStreamReset2;
770
- }
757
+ if (VersionUsesHttp3(transport_version())) {
758
+ QUIC_CODE_COUNT(quic_fix_on_stream_reset);
759
+ if (GetQuicReloadableFlag(quic_fix_on_stream_reset)) {
760
+ QUIC_RELOADABLE_FLAG_COUNT(quic_fix_on_stream_reset);
761
+ if (!fin_received() && spdy_session_->qpack_decoder()) {
762
+ spdy_session_->qpack_decoder()->OnStreamReset(id());
763
+ qpack_decoded_headers_accumulator_.reset();
764
+ qpack_decoded_headers_accumulator_reset_reason_ =
765
+ QpackDecodedHeadersAccumulatorResetReason::kResetInOnStreamReset2;
766
+ }
771
767
 
772
- QuicStream::OnStreamReset(frame);
773
- return;
768
+ QuicStream::OnStreamReset(frame);
769
+ return;
770
+ }
774
771
  }
775
772
 
776
773
  QUIC_DVLOG(1) << ENDPOINT
@@ -904,10 +901,6 @@ void QuicSpdyStream::OnClose() {
904
901
  visitor->OnClose(this);
905
902
  }
906
903
 
907
- if (datagram_flow_id_.has_value()) {
908
- spdy_session_->UnregisterHttp3DatagramFlowId(datagram_flow_id_.value());
909
- }
910
-
911
904
  if (web_transport_ != nullptr) {
912
905
  web_transport_->OnConnectStreamClosing();
913
906
  }
@@ -1259,8 +1252,6 @@ void QuicSpdyStream::MaybeProcessReceivedWebTransportHeaders() {
1259
1252
 
1260
1253
  std::string method;
1261
1254
  std::string protocol;
1262
- absl::optional<QuicDatagramStreamId> flow_id;
1263
- bool version_indicated = false;
1264
1255
  for (const auto& [header_name, header_value] : header_list_) {
1265
1256
  if (header_name == ":method") {
1266
1257
  if (!method.empty() || header_value.empty()) {
@@ -1275,21 +1266,10 @@ void QuicSpdyStream::MaybeProcessReceivedWebTransportHeaders() {
1275
1266
  protocol = header_value;
1276
1267
  }
1277
1268
  if (header_name == "datagram-flow-id") {
1278
- if (spdy_session_->http_datagram_support() !=
1279
- HttpDatagramSupport::kDraft00) {
1280
- QUIC_DLOG(ERROR) << ENDPOINT
1281
- << "Rejecting WebTransport due to unexpected "
1282
- "Datagram-Flow-Id header";
1283
- return;
1284
- }
1285
- if (flow_id.has_value() || header_value.empty()) {
1286
- return;
1287
- }
1288
- QuicDatagramStreamId flow_id_out;
1289
- if (!absl::SimpleAtoi(header_value, &flow_id_out)) {
1290
- return;
1291
- }
1292
- flow_id = flow_id_out;
1269
+ QUIC_DLOG(ERROR) << ENDPOINT
1270
+ << "Rejecting WebTransport due to unexpected "
1271
+ "Datagram-Flow-Id header";
1272
+ return;
1293
1273
  }
1294
1274
  if (header_name == "sec-webtransport-http3-draft02") {
1295
1275
  if (header_value != "1") {
@@ -1298,7 +1278,6 @@ void QuicSpdyStream::MaybeProcessReceivedWebTransportHeaders() {
1298
1278
  "Sec-Webtransport-Http3-Draft02 header";
1299
1279
  return;
1300
1280
  }
1301
- version_indicated = true;
1302
1281
  }
1303
1282
  }
1304
1283
 
@@ -1306,24 +1285,6 @@ void QuicSpdyStream::MaybeProcessReceivedWebTransportHeaders() {
1306
1285
  return;
1307
1286
  }
1308
1287
 
1309
- if (!version_indicated &&
1310
- spdy_session_->http_datagram_support() != HttpDatagramSupport::kDraft00) {
1311
- QUIC_DLOG(ERROR)
1312
- << ENDPOINT
1313
- << "WebTransport request rejected due to missing version header.";
1314
- return;
1315
- }
1316
-
1317
- if (spdy_session_->http_datagram_support() == HttpDatagramSupport::kDraft00) {
1318
- if (!flow_id.has_value()) {
1319
- QUIC_DLOG(ERROR)
1320
- << ENDPOINT
1321
- << "Rejecting WebTransport due to missing Datagram-Flow-Id header";
1322
- return;
1323
- }
1324
- RegisterHttp3DatagramFlowId(*flow_id);
1325
- }
1326
-
1327
1288
  web_transport_ =
1328
1289
  std::make_unique<WebTransportHttp3>(spdy_session_, this, id());
1329
1290
  }
@@ -1347,11 +1308,7 @@ void QuicSpdyStream::MaybeProcessSentWebTransportHeaders(
1347
1308
  return;
1348
1309
  }
1349
1310
 
1350
- if (spdy_session_->http_datagram_support() == HttpDatagramSupport::kDraft00) {
1351
- headers["datagram-flow-id"] = absl::StrCat(id());
1352
- } else {
1353
- headers["sec-webtransport-http3-draft02"] = "1";
1354
- }
1311
+ headers["sec-webtransport-http3-draft02"] = "1";
1355
1312
 
1356
1313
  web_transport_ =
1357
1314
  std::make_unique<WebTransportHttp3>(spdy_session_, this, id());
@@ -1491,9 +1448,7 @@ void QuicSpdyStream::WriteGreaseCapsule() {
1491
1448
  }
1492
1449
 
1493
1450
  MessageStatus QuicSpdyStream::SendHttp3Datagram(absl::string_view payload) {
1494
- QuicDatagramStreamId stream_id =
1495
- datagram_flow_id_.has_value() ? datagram_flow_id_.value() : id();
1496
- return spdy_session_->SendHttp3Datagram(stream_id, payload);
1451
+ return spdy_session_->SendHttp3Datagram(id(), payload);
1497
1452
  }
1498
1453
 
1499
1454
  void QuicSpdyStream::RegisterHttp3DatagramVisitor(
@@ -1555,20 +1510,13 @@ void QuicSpdyStream::OnDatagramReceived(QuicDataReader* reader) {
1555
1510
  QuicByteCount QuicSpdyStream::GetMaxDatagramSize() const {
1556
1511
  QuicByteCount prefix_size = 0;
1557
1512
  switch (spdy_session_->http_datagram_support()) {
1558
- case HttpDatagramSupport::kDraft00:
1559
- if (!datagram_flow_id_.has_value()) {
1560
- QUIC_BUG(GetMaxDatagramSize with no flow ID)
1561
- << "GetMaxDatagramSize() called when no flow ID available";
1562
- break;
1563
- }
1564
- prefix_size = QuicDataWriter::GetVarInt62Len(*datagram_flow_id_);
1565
- break;
1566
1513
  case HttpDatagramSupport::kDraft04:
1514
+ case HttpDatagramSupport::kDraft09:
1567
1515
  prefix_size =
1568
1516
  QuicDataWriter::GetVarInt62Len(id() / kHttpDatagramStreamIdDivisor);
1569
1517
  break;
1570
1518
  case HttpDatagramSupport::kNone:
1571
- case HttpDatagramSupport::kDraft00And04:
1519
+ case HttpDatagramSupport::kDraft04And09:
1572
1520
  QUIC_BUG(GetMaxDatagramSize called with no datagram support)
1573
1521
  << "GetMaxDatagramSize() called when no HTTP/3 datagram support has "
1574
1522
  "been negotiated. Support value: "
@@ -1591,11 +1539,6 @@ QuicByteCount QuicSpdyStream::GetMaxDatagramSize() const {
1591
1539
  return max_datagram_size - prefix_size;
1592
1540
  }
1593
1541
 
1594
- void QuicSpdyStream::RegisterHttp3DatagramFlowId(QuicDatagramStreamId flow_id) {
1595
- datagram_flow_id_ = flow_id;
1596
- spdy_session_->RegisterHttp3DatagramFlowId(datagram_flow_id_.value(), id());
1597
- }
1598
-
1599
1542
  void QuicSpdyStream::HandleBodyAvailable() {
1600
1543
  if (!capsule_parser_) {
1601
1544
  OnBodyAvailable();
@@ -262,8 +262,7 @@ class QUIC_EXPORT_PRIVATE QuicSpdyStream
262
262
  virtual ~Http3DatagramVisitor() {}
263
263
 
264
264
  // Called when an HTTP/3 datagram is received. |payload| does not contain
265
- // the stream ID. Note that this contains the stream ID even if flow IDs
266
- // from draft-ietf-masque-h3-datagram-00 are in use.
265
+ // the stream ID.
267
266
  virtual void OnHttp3Datagram(QuicStreamId stream_id,
268
267
  absl::string_view payload) = 0;
269
268
  };
@@ -285,10 +284,6 @@ class QUIC_EXPORT_PRIVATE QuicSpdyStream
285
284
 
286
285
  void OnDatagramReceived(QuicDataReader* reader);
287
286
 
288
- // Registers a datagram flow ID, only meant to be used when in legacy mode for
289
- // draft-ietf-masque-h3-datagram-00.
290
- void RegisterHttp3DatagramFlowId(QuicDatagramStreamId flow_id);
291
-
292
287
  QuicByteCount GetMaxDatagramSize() const;
293
288
 
294
289
  // Writes |capsule| onto the DATA stream.
@@ -467,9 +462,6 @@ class QUIC_EXPORT_PRIVATE QuicSpdyStream
467
462
 
468
463
  // HTTP/3 Datagram support.
469
464
  Http3DatagramVisitor* datagram_visitor_ = nullptr;
470
- // Flow ID is only used when in legacy mode for
471
- // draft-ietf-masque-h3-datagram-00.
472
- absl::optional<QuicDatagramStreamId> datagram_flow_id_;
473
465
  };
474
466
 
475
467
  } // namespace quic
@@ -192,6 +192,21 @@ class TestCryptoStream : public QuicCryptoStream, public QuicCryptoHandshaker {
192
192
  return level != ENCRYPTION_ZERO_RTT;
193
193
  }
194
194
 
195
+ EncryptionLevel GetEncryptionLevelToSendCryptoDataOfSpace(
196
+ PacketNumberSpace space) const override {
197
+ switch (space) {
198
+ case INITIAL_DATA:
199
+ return ENCRYPTION_INITIAL;
200
+ case HANDSHAKE_DATA:
201
+ return ENCRYPTION_HANDSHAKE;
202
+ case APPLICATION_DATA:
203
+ return ENCRYPTION_FORWARD_SECURE;
204
+ default:
205
+ QUICHE_DCHECK(false);
206
+ return NUM_ENCRYPTION_LEVELS;
207
+ }
208
+ }
209
+
195
210
  private:
196
211
  using QuicCryptoStream::session;
197
212
 
@@ -984,7 +999,7 @@ TEST_P(QuicSpdyStreamTest, StreamFlowControlBlocked) {
984
999
  }
985
1000
  EXPECT_CALL(*session_, WritevData(_, _, _, _, _, _))
986
1001
  .WillOnce(Return(QuicConsumedData(kWindow - kHeaderLength, true)));
987
- EXPECT_CALL(*session_, SendBlocked(_));
1002
+ EXPECT_CALL(*session_, SendBlocked(_, _));
988
1003
  EXPECT_CALL(*connection_, SendControlFrame(_));
989
1004
  stream_->WriteOrBufferBody(body, false);
990
1005
 
@@ -1239,7 +1254,8 @@ TEST_P(QuicSpdyStreamTest, StreamFlowControlFinNotBlocked) {
1239
1254
  std::string body = "";
1240
1255
  bool fin = true;
1241
1256
 
1242
- EXPECT_CALL(*session_, SendBlocked(GetNthClientInitiatedBidirectionalId(0)))
1257
+ EXPECT_CALL(*session_,
1258
+ SendBlocked(GetNthClientInitiatedBidirectionalId(0), _))
1243
1259
  .Times(0);
1244
1260
  EXPECT_CALL(*session_, WritevData(_, 0, _, FIN, _, _));
1245
1261
 
@@ -3060,39 +3076,13 @@ TEST_P(QuicSpdyStreamTest, TwoResetStreamFrames) {
3060
3076
  }
3061
3077
  }
3062
3078
 
3063
- TEST_P(QuicSpdyStreamTest, ProcessOutgoingWebTransportHeadersDatagramDraft00) {
3064
- if (!UsesHttp3()) {
3065
- return;
3066
- }
3067
-
3068
- InitializeWithPerspective(kShouldProcessData, Perspective::IS_CLIENT);
3069
- session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3070
- session_->EnableWebTransport();
3071
- session_->OnSetting(SETTINGS_ENABLE_CONNECT_PROTOCOL, 1);
3072
- QuicSpdySessionPeer::EnableWebTransport(session_.get());
3073
- QuicSpdySessionPeer::SetHttpDatagramSupport(session_.get(),
3074
- HttpDatagramSupport::kDraft00);
3075
-
3076
- EXPECT_CALL(*stream_, WriteHeadersMock(false));
3077
- EXPECT_CALL(*session_, WritevData(stream_->id(), _, _, _, _, _))
3078
- .Times(AnyNumber());
3079
-
3080
- spdy::SpdyHeaderBlock headers;
3081
- headers[":method"] = "CONNECT";
3082
- headers[":protocol"] = "webtransport";
3083
- headers["datagram-flow-id"] = absl::StrCat(stream_->id());
3084
- stream_->WriteHeaders(std::move(headers), /*fin=*/false, nullptr);
3085
- ASSERT_TRUE(stream_->web_transport() != nullptr);
3086
- EXPECT_EQ(stream_->id(), stream_->web_transport()->id());
3087
- }
3088
-
3089
3079
  TEST_P(QuicSpdyStreamTest, ProcessOutgoingWebTransportHeadersDatagramDraft04) {
3090
3080
  if (!UsesHttp3()) {
3091
3081
  return;
3092
3082
  }
3093
3083
 
3094
3084
  InitializeWithPerspective(kShouldProcessData, Perspective::IS_CLIENT);
3095
- session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3085
+ session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3096
3086
  session_->EnableWebTransport();
3097
3087
  session_->OnSetting(SETTINGS_ENABLE_CONNECT_PROTOCOL, 1);
3098
3088
  QuicSpdySessionPeer::EnableWebTransport(session_.get());
@@ -3117,7 +3107,7 @@ TEST_P(QuicSpdyStreamTest, ProcessIncomingWebTransportHeadersDatagramDraft04) {
3117
3107
  }
3118
3108
 
3119
3109
  Initialize(kShouldProcessData);
3120
- session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3110
+ session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3121
3111
  session_->EnableWebTransport();
3122
3112
  QuicSpdySessionPeer::EnableWebTransport(session_.get());
3123
3113
  QuicSpdySessionPeer::SetHttpDatagramSupport(session_.get(),
@@ -3137,111 +3127,14 @@ TEST_P(QuicSpdyStreamTest, ProcessIncomingWebTransportHeadersDatagramDraft04) {
3137
3127
  EXPECT_EQ(stream_->id(), stream_->web_transport()->id());
3138
3128
  }
3139
3129
 
3140
- TEST_P(QuicSpdyStreamTest, ProcessIncomingWebTransportHeadersDatagramDraft00) {
3141
- if (!UsesHttp3()) {
3142
- return;
3143
- }
3144
-
3145
- Initialize(kShouldProcessData);
3146
- session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3147
- session_->EnableWebTransport();
3148
- QuicSpdySessionPeer::EnableWebTransport(session_.get());
3149
- QuicSpdySessionPeer::SetHttpDatagramSupport(session_.get(),
3150
- HttpDatagramSupport::kDraft00);
3151
-
3152
- headers_[":method"] = "CONNECT";
3153
- headers_[":protocol"] = "webtransport";
3154
- headers_["datagram-flow-id"] = absl::StrCat(stream_->id());
3155
-
3156
- stream_->OnStreamHeadersPriority(
3157
- spdy::SpdyStreamPrecedence(kV3HighestPriority));
3158
- ProcessHeaders(false, headers_);
3159
- EXPECT_EQ("", stream_->data());
3160
- EXPECT_FALSE(stream_->header_list().empty());
3161
- EXPECT_FALSE(stream_->IsDoneReading());
3162
- ASSERT_TRUE(stream_->web_transport() != nullptr);
3163
- EXPECT_EQ(stream_->id(), stream_->web_transport()->id());
3164
- }
3165
-
3166
- TEST_P(QuicSpdyStreamTest,
3167
- ProcessIncomingWebTransportHeadersWithMismatchedFlowId) {
3168
- if (!UsesHttp3()) {
3169
- return;
3170
- }
3171
- // TODO(b/181256914) Remove this test when we deprecate
3172
- // draft-ietf-masque-h3-datagram-00 in favor of later drafts.
3173
-
3174
- Initialize(kShouldProcessData);
3175
- session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3176
- session_->EnableWebTransport();
3177
- QuicSpdySessionPeer::EnableWebTransport(session_.get());
3178
- QuicSpdySessionPeer::SetHttpDatagramSupport(session_.get(),
3179
- HttpDatagramSupport::kDraft00);
3180
-
3181
- headers_[":method"] = "CONNECT";
3182
- headers_[":protocol"] = "webtransport";
3183
- headers_["datagram-flow-id"] = "2";
3184
-
3185
- stream_->OnStreamHeadersPriority(
3186
- spdy::SpdyStreamPrecedence(kV3HighestPriority));
3187
- ProcessHeaders(false, headers_);
3188
- EXPECT_EQ("", stream_->data());
3189
- EXPECT_FALSE(stream_->header_list().empty());
3190
- EXPECT_FALSE(stream_->IsDoneReading());
3191
- ASSERT_TRUE(stream_->web_transport() != nullptr);
3192
- EXPECT_EQ(stream_->id(), stream_->web_transport()->id());
3193
- }
3194
-
3195
- TEST_P(QuicSpdyStreamTest, ReceiveHttpDatagramDraft00) {
3196
- if (!UsesHttp3()) {
3197
- return;
3198
- }
3199
- InitializeWithPerspective(kShouldProcessData, Perspective::IS_CLIENT);
3200
- session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3201
- QuicSpdySessionPeer::SetHttpDatagramSupport(session_.get(),
3202
- HttpDatagramSupport::kDraft00);
3203
- headers_[":method"] = "CONNECT";
3204
- headers_[":protocol"] = "webtransport";
3205
- headers_["datagram-flow-id"] = absl::StrCat(stream_->id());
3206
- ProcessHeaders(false, headers_);
3207
- session_->RegisterHttp3DatagramFlowId(stream_->id(), stream_->id());
3208
- SavingHttp3DatagramVisitor h3_datagram_visitor;
3209
- ASSERT_EQ(QuicDataWriter::GetVarInt62Len(stream_->id()), 1);
3210
- std::array<char, 256> datagram;
3211
- datagram[0] = stream_->id();
3212
- for (size_t i = 1; i < datagram.size(); i++) {
3213
- datagram[i] = i;
3214
- }
3215
- stream_->RegisterHttp3DatagramVisitor(&h3_datagram_visitor);
3216
- session_->OnMessageReceived(
3217
- absl::string_view(datagram.data(), datagram.size()));
3218
- EXPECT_THAT(
3219
- h3_datagram_visitor.received_h3_datagrams(),
3220
- ElementsAre(SavingHttp3DatagramVisitor::SavedHttp3Datagram{
3221
- stream_->id(), std::string(&datagram[1], datagram.size() - 1)}));
3222
- // Test move.
3223
- SavingHttp3DatagramVisitor h3_datagram_visitor2;
3224
- stream_->ReplaceHttp3DatagramVisitor(&h3_datagram_visitor2);
3225
- EXPECT_TRUE(h3_datagram_visitor2.received_h3_datagrams().empty());
3226
- session_->OnMessageReceived(
3227
- absl::string_view(datagram.data(), datagram.size()));
3228
- EXPECT_THAT(
3229
- h3_datagram_visitor2.received_h3_datagrams(),
3230
- ElementsAre(SavingHttp3DatagramVisitor::SavedHttp3Datagram{
3231
- stream_->id(), std::string(&datagram[1], datagram.size() - 1)}));
3232
- // Cleanup.
3233
- stream_->UnregisterHttp3DatagramVisitor();
3234
- session_->UnregisterHttp3DatagramFlowId(stream_->id());
3235
- }
3236
-
3237
- TEST_P(QuicSpdyStreamTest, ReceiveHttpDatagramDraft04) {
3130
+ TEST_P(QuicSpdyStreamTest, ReceiveHttpDatagram) {
3238
3131
  if (!UsesHttp3()) {
3239
3132
  return;
3240
3133
  }
3241
3134
  InitializeWithPerspective(kShouldProcessData, Perspective::IS_CLIENT);
3242
- session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3135
+ session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft09);
3243
3136
  QuicSpdySessionPeer::SetHttpDatagramSupport(session_.get(),
3244
- HttpDatagramSupport::kDraft04);
3137
+ HttpDatagramSupport::kDraft09);
3245
3138
  headers_[":method"] = "CONNECT";
3246
3139
  headers_[":protocol"] = "webtransport";
3247
3140
  ProcessHeaders(false, headers_);
@@ -3279,9 +3172,9 @@ TEST_P(QuicSpdyStreamTest, SendHttpDatagram) {
3279
3172
  return;
3280
3173
  }
3281
3174
  Initialize(kShouldProcessData);
3282
- session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3175
+ session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft09);
3283
3176
  QuicSpdySessionPeer::SetHttpDatagramSupport(session_.get(),
3284
- HttpDatagramSupport::kDraft04);
3177
+ HttpDatagramSupport::kDraft09);
3285
3178
  std::string http_datagram_payload = {1, 2, 3, 4, 5, 6};
3286
3179
  EXPECT_CALL(*connection_, SendMessage(1, _, false))
3287
3180
  .WillOnce(Return(MESSAGE_STATUS_SUCCESS));
@@ -3294,9 +3187,9 @@ TEST_P(QuicSpdyStreamTest, GetMaxDatagramSize) {
3294
3187
  return;
3295
3188
  }
3296
3189
  Initialize(kShouldProcessData);
3297
- session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3190
+ session_->set_local_http_datagram_support(HttpDatagramSupport::kDraft09);
3298
3191
  QuicSpdySessionPeer::SetHttpDatagramSupport(session_.get(),
3299
- HttpDatagramSupport::kDraft04);
3192
+ HttpDatagramSupport::kDraft09);
3300
3193
  EXPECT_GT(stream_->GetMaxDatagramSize(), 512u);
3301
3194
  }
3302
3195
 
@@ -154,47 +154,6 @@ bool SpdyUtils::PopulateHeaderBlockFromUrl(const std::string url,
154
154
  return true;
155
155
  }
156
156
 
157
- // static
158
- absl::optional<QuicDatagramStreamId> SpdyUtils::ParseDatagramFlowIdHeader(
159
- const spdy::SpdyHeaderBlock& headers) {
160
- auto flow_id_pair = headers.find("datagram-flow-id");
161
- if (flow_id_pair == headers.end()) {
162
- return absl::nullopt;
163
- }
164
- std::vector<absl::string_view> flow_id_strings =
165
- absl::StrSplit(flow_id_pair->second, ',');
166
- absl::optional<QuicDatagramStreamId> first_named_flow_id;
167
- for (absl::string_view flow_id_string : flow_id_strings) {
168
- std::vector<absl::string_view> flow_id_components =
169
- absl::StrSplit(flow_id_string, ';');
170
- if (flow_id_components.empty()) {
171
- continue;
172
- }
173
- absl::string_view flow_id_value_string = flow_id_components[0];
174
- quiche::QuicheTextUtils::RemoveLeadingAndTrailingWhitespace(
175
- &flow_id_value_string);
176
- QuicDatagramStreamId flow_id;
177
- if (!absl::SimpleAtoi(flow_id_value_string, &flow_id)) {
178
- continue;
179
- }
180
- if (flow_id_components.size() == 1) {
181
- // This flow ID is unnamed, return this one.
182
- return flow_id;
183
- }
184
- // Otherwise this is a named flow ID.
185
- if (!first_named_flow_id.has_value()) {
186
- first_named_flow_id = flow_id;
187
- }
188
- }
189
- return first_named_flow_id;
190
- }
191
-
192
- // static
193
- void SpdyUtils::AddDatagramFlowIdHeader(spdy::SpdyHeaderBlock* headers,
194
- QuicDatagramStreamId flow_id) {
195
- (*headers)["datagram-flow-id"] = absl::StrCat(flow_id);
196
- }
197
-
198
157
  // static
199
158
  ParsedQuicVersion SpdyUtils::ExtractQuicVersionFromAltSvcEntry(
200
159
  const spdy::SpdyAltSvcWireFormat::AlternativeService&
@@ -54,15 +54,6 @@ class QUIC_EXPORT_PRIVATE SpdyUtils {
54
54
  static bool PopulateHeaderBlockFromUrl(const std::string url,
55
55
  spdy::SpdyHeaderBlock* headers);
56
56
 
57
- // Parses the "datagram-flow-id" header, returns the flow ID on success, or
58
- // returns absl::nullopt if the header was not present or failed to parse.
59
- static absl::optional<QuicDatagramStreamId> ParseDatagramFlowIdHeader(
60
- const spdy::SpdyHeaderBlock& headers);
61
-
62
- // Adds the "datagram-flow-id" header.
63
- static void AddDatagramFlowIdHeader(spdy::SpdyHeaderBlock* headers,
64
- QuicDatagramStreamId flow_id);
65
-
66
57
  // Returns the advertised QUIC version from the specified alternative service
67
58
  // advertisement, or ParsedQuicVersion::Unsupported() if no supported version
68
59
  // is advertised.
@@ -34,14 +34,6 @@ static std::unique_ptr<QuicHeaderList> FromList(
34
34
  return headers;
35
35
  }
36
36
 
37
- static void ValidateDatagramFlowId(
38
- const std::string& header_value,
39
- absl::optional<QuicDatagramStreamId> expected_flow_id) {
40
- SpdyHeaderBlock headers;
41
- headers["datagram-flow-id"] = header_value;
42
- ASSERT_EQ(SpdyUtils::ParseDatagramFlowIdHeader(headers), expected_flow_id);
43
- }
44
-
45
37
  } // anonymous namespace
46
38
 
47
39
  using CopyAndValidateHeaders = QuicTest;
@@ -386,30 +378,6 @@ TEST_F(PopulateHeaderBlockFromUrl, Failure) {
386
378
  SpdyUtils::PopulateHeaderBlockFromUrl("www.google.com/", &headers));
387
379
  }
388
380
 
389
- using DatagramFlowIdTest = QuicTest;
390
-
391
- TEST_F(DatagramFlowIdTest, DatagramFlowId) {
392
- // Test missing header.
393
- SpdyHeaderBlock headers;
394
- EXPECT_EQ(SpdyUtils::ParseDatagramFlowIdHeader(headers), absl::nullopt);
395
- // Add header and verify it parses.
396
- QuicDatagramStreamId flow_id = 123;
397
- SpdyUtils::AddDatagramFlowIdHeader(&headers, flow_id);
398
- EXPECT_EQ(SpdyUtils::ParseDatagramFlowIdHeader(headers), flow_id);
399
- // Test empty header.
400
- ValidateDatagramFlowId("", absl::nullopt);
401
- // Test invalid header.
402
- ValidateDatagramFlowId("M4SQU3", absl::nullopt);
403
- // Test simple header.
404
- ValidateDatagramFlowId("42", 42);
405
- // Test with parameter.
406
- ValidateDatagramFlowId("42; abc=def", 42);
407
- // Test list.
408
- ValidateDatagramFlowId("42, 44; ecn-ect0, 46; ecn-ect1, 48; ecn-ce", 42);
409
- // Test reordered list.
410
- ValidateDatagramFlowId("44; ecn-ect0, 42, 48; ecn-ce, 46; ecn-ect1", 42);
411
- }
412
-
413
381
  using ExtractQuicVersionFromAltSvcEntry = QuicTest;
414
382
 
415
383
  TEST_F(ExtractQuicVersionFromAltSvcEntry, SupportedVersion) {
@@ -179,7 +179,6 @@ void WebTransportHttp3::HeadersReceived(const spdy::SpdyHeaderBlock& headers) {
179
179
  return;
180
180
  }
181
181
  bool should_validate_version =
182
- session_->http_datagram_support() != HttpDatagramSupport::kDraft00 &&
183
182
  session_->ShouldValidateWebTransportVersion();
184
183
  if (should_validate_version) {
185
184
  auto draft_version_it = headers.find("sec-webtransport-http3-draft");
@@ -11,7 +11,7 @@
11
11
  #include "quiche/quic/core/quic_packet_number.h"
12
12
  #include "quiche/quic/platform/api/quic_test.h"
13
13
 
14
- namespace quic {
14
+ namespace quic::test {
15
15
  namespace {
16
16
 
17
17
  class PacketNumberIndexedQueueTest : public QuicTest {
@@ -202,4 +202,4 @@ TEST_F(PacketNumberIndexedQueueTest, ConstGetter) {
202
202
  }
203
203
 
204
204
  } // namespace
205
- } // namespace quic
205
+ } // namespace quic::test
@@ -7,6 +7,7 @@
7
7
  #include "absl/strings/string_view.h"
8
8
  #include "quiche/quic/core/qpack/qpack_static_table.h"
9
9
  #include "quiche/quic/platform/api/quic_logging.h"
10
+ #include "quiche/common/platform/api/quiche_logging.h"
10
11
 
11
12
  namespace quic {
12
13
 
@@ -232,7 +233,7 @@ void QpackDecoderHeaderTable::UnregisterObserver(uint64_t required_insert_count,
232
233
  }
233
234
 
234
235
  // |observer| must have been registered.
235
- QUIC_NOTREACHED();
236
+ QUICHE_NOTREACHED();
236
237
  }
237
238
 
238
239
  } // namespace quic
@@ -11,6 +11,7 @@
11
11
  #include "quiche/quic/core/qpack/qpack_stream_sender_delegate.h"
12
12
  #include "quiche/quic/core/quic_stream.h"
13
13
  #include "quiche/quic/platform/api/quic_export.h"
14
+ #include "quiche/common/platform/api/quiche_logging.h"
14
15
 
15
16
  namespace quic {
16
17
 
@@ -36,7 +37,7 @@ class QUIC_EXPORT_PRIVATE QpackSendStream : public QuicStream,
36
37
 
37
38
  // The send QPACK stream is write unidirectional, so this method
38
39
  // should never be called.
39
- void OnDataAvailable() override { QUIC_NOTREACHED(); }
40
+ void OnDataAvailable() override { QUICHE_NOTREACHED(); }
40
41
 
41
42
  // Writes the instructions to peer. The stream type will be sent
42
43
  // before the first instruction so that the peer can open an qpack stream.
@@ -7,7 +7,7 @@
7
7
  #include "quiche/quic/core/quic_one_block_arena.h"
8
8
  #include "quiche/quic/platform/api/quic_test.h"
9
9
 
10
- namespace quic {
10
+ namespace quic::test {
11
11
  namespace {
12
12
 
13
13
  enum class TestParam { kFromHeap, kFromArena };
@@ -112,4 +112,4 @@ TEST_P(QuicArenaScopedPtrParamTest, Swap) {
112
112
  }
113
113
 
114
114
  } // namespace
115
- } // namespace quic
115
+ } // namespace quic::test