@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
@@ -133,11 +133,11 @@ TEST_P(QuicSendControlStreamTest, WriteSettings) {
133
133
  if ((!GetQuicReloadableFlag(quic_verify_request_headers_2) ||
134
134
  perspective() == Perspective::IS_CLIENT) &&
135
135
  QuicSpdySessionPeer::LocalHttpDatagramSupport(&session_) ==
136
- HttpDatagramSupport::kDraft00And04) {
136
+ HttpDatagramSupport::kDraft04) {
137
137
  expected_write_data = absl::HexStringToBytes(
138
138
  "00" // stream type: control stream
139
139
  "04" // frame type: SETTINGS frame
140
- "0e" // frame length
140
+ "0b" // frame length
141
141
  "01" // SETTINGS_QPACK_MAX_TABLE_CAPACITY
142
142
  "40ff" // 255
143
143
  "06" // SETTINGS_MAX_HEADER_LIST_SIZE
@@ -146,8 +146,6 @@ TEST_P(QuicSendControlStreamTest, WriteSettings) {
146
146
  "10" // 16
147
147
  "4040" // 0x40 as the reserved settings id
148
148
  "14" // 20
149
- "4276" // SETTINGS_H3_DATAGRAM_DRAFT00
150
- "01" // 1
151
149
  "800ffd277" // SETTINGS_H3_DATAGRAM_DRAFT04
152
150
  "01" // 1
153
151
  "4040" // 0x40 as the reserved frame type
@@ -183,7 +181,7 @@ TEST_P(QuicSendControlStreamTest, WriteSettings) {
183
181
  expected_write_data = absl::HexStringToBytes(
184
182
  "00" // stream type: control stream
185
183
  "04" // frame type: SETTINGS frame
186
- "11" // frame length
184
+ "0e" // frame length
187
185
  "01" // SETTINGS_QPACK_MAX_TABLE_CAPACITY
188
186
  "40ff" // 255
189
187
  "06" // SETTINGS_MAX_HEADER_LIST_SIZE
@@ -194,8 +192,6 @@ TEST_P(QuicSendControlStreamTest, WriteSettings) {
194
192
  "01" // 1
195
193
  "4040" // 0x40 as the reserved settings id
196
194
  "14" // 20
197
- "4276" // SETTINGS_H3_DATAGRAM_DRAFT00
198
- "01" // 1
199
195
  "800ffd277" // SETTINGS_H3_DATAGRAM_DRAFT04
200
196
  "01" // 1
201
197
  "4040" // 0x40 as the reserved frame type
@@ -75,6 +75,10 @@ class QUIC_EXPORT_PRIVATE QuicServerSessionBase : public QuicSpdySession {
75
75
 
76
76
  QuicSSLConfig GetSSLConfig() const override;
77
77
 
78
+ bool enable_sending_bandwidth_estimate_when_network_idle() const {
79
+ return enable_sending_bandwidth_estimate_when_network_idle_;
80
+ }
81
+
78
82
  protected:
79
83
  // QuicSession methods(override them with return type of QuicSpdyStream*):
80
84
  QuicCryptoServerStreamBase* GetMutableCryptoStream() override;
@@ -318,8 +318,9 @@ class QuicSpdySession::SpdyFramerVisitor
318
318
  QUIC_INVALID_HEADERS_STREAM_DATA);
319
319
  }
320
320
 
321
- void OnHeaders(SpdyStreamId stream_id, bool has_priority, int weight,
322
- SpdyStreamId /* parent_stream_id */, bool /* exclusive */,
321
+ void OnHeaders(SpdyStreamId stream_id, size_t /*payload_length*/,
322
+ bool has_priority, int weight,
323
+ SpdyStreamId /*parent_stream_id*/, bool /*exclusive*/,
323
324
  bool fin, bool /*end*/) override {
324
325
  if (!session_->IsConnected()) {
325
326
  return;
@@ -362,7 +363,8 @@ class QuicSpdySession::SpdyFramerVisitor
362
363
  session_->OnPushPromise(stream_id, promised_stream_id);
363
364
  }
364
365
 
365
- void OnContinuation(SpdyStreamId /*stream_id*/, bool /*end*/) override {}
366
+ void OnContinuation(SpdyStreamId /*stream_id*/, size_t /*payload_size*/,
367
+ bool /*end*/) override {}
366
368
 
367
369
  void OnPriority(SpdyStreamId stream_id, SpdyStreamId /* parent_id */,
368
370
  int weight, bool /* exclusive */) override {
@@ -516,15 +518,19 @@ void QuicSpdySession::FillSettingsFrame() {
516
518
  settings_.values[SETTINGS_MAX_FIELD_SECTION_SIZE] =
517
519
  max_inbound_header_list_size_;
518
520
  if (version().UsesHttp3()) {
519
- HttpDatagramSupport local_http_datagram_support =
520
- LocalHttpDatagramSupport();
521
- if (local_http_datagram_support == HttpDatagramSupport::kDraft00 ||
522
- local_http_datagram_support == HttpDatagramSupport::kDraft00And04) {
523
- settings_.values[SETTINGS_H3_DATAGRAM_DRAFT00] = 1;
524
- }
525
- if (local_http_datagram_support == HttpDatagramSupport::kDraft04 ||
526
- local_http_datagram_support == HttpDatagramSupport::kDraft00And04) {
527
- settings_.values[SETTINGS_H3_DATAGRAM_DRAFT04] = 1;
521
+ switch (LocalHttpDatagramSupport()) {
522
+ case HttpDatagramSupport::kNone:
523
+ break;
524
+ case HttpDatagramSupport::kDraft04:
525
+ settings_.values[SETTINGS_H3_DATAGRAM_DRAFT04] = 1;
526
+ break;
527
+ case HttpDatagramSupport::kDraft09:
528
+ settings_.values[SETTINGS_H3_DATAGRAM_DRAFT09] = 1;
529
+ break;
530
+ case HttpDatagramSupport::kDraft04And09:
531
+ settings_.values[SETTINGS_H3_DATAGRAM_DRAFT04] = 1;
532
+ settings_.values[SETTINGS_H3_DATAGRAM_DRAFT09] = 1;
533
+ break;
528
534
  }
529
535
  }
530
536
  if (WillNegotiateWebTransport()) {
@@ -1141,15 +1147,15 @@ bool QuicSpdySession::OnSetting(uint64_t id, uint64_t value) {
1141
1147
  absl::StrCat("received HTTP/2 specific setting in HTTP/3 session: ",
1142
1148
  id));
1143
1149
  return false;
1144
- case SETTINGS_H3_DATAGRAM_DRAFT00: {
1150
+ case SETTINGS_H3_DATAGRAM_DRAFT04: {
1145
1151
  HttpDatagramSupport local_http_datagram_support =
1146
1152
  LocalHttpDatagramSupport();
1147
- if (local_http_datagram_support != HttpDatagramSupport::kDraft00 &&
1148
- local_http_datagram_support != HttpDatagramSupport::kDraft00And04) {
1153
+ if (local_http_datagram_support != HttpDatagramSupport::kDraft04 &&
1154
+ local_http_datagram_support != HttpDatagramSupport::kDraft04And09) {
1149
1155
  break;
1150
1156
  }
1151
1157
  QUIC_DVLOG(1) << ENDPOINT
1152
- << "SETTINGS_H3_DATAGRAM_DRAFT00 received with value "
1158
+ << "SETTINGS_H3_DATAGRAM_DRAFT04 received with value "
1153
1159
  << value;
1154
1160
  if (!version().UsesHttp3()) {
1155
1161
  break;
@@ -1157,21 +1163,21 @@ bool QuicSpdySession::OnSetting(uint64_t id, uint64_t value) {
1157
1163
  if (!VerifySettingIsZeroOrOne(id, value)) {
1158
1164
  return false;
1159
1165
  }
1160
- if (value && http_datagram_support_ != HttpDatagramSupport::kDraft04) {
1161
- // If both draft-00 and draft-04 are supported, use draft-04.
1162
- http_datagram_support_ = HttpDatagramSupport::kDraft00;
1166
+ if (value && http_datagram_support_ != HttpDatagramSupport::kDraft09) {
1167
+ // If both draft-04 and draft-09 are supported, use draft-09.
1168
+ http_datagram_support_ = HttpDatagramSupport::kDraft04;
1163
1169
  }
1164
1170
  break;
1165
1171
  }
1166
- case SETTINGS_H3_DATAGRAM_DRAFT04: {
1172
+ case SETTINGS_H3_DATAGRAM_DRAFT09: {
1167
1173
  HttpDatagramSupport local_http_datagram_support =
1168
1174
  LocalHttpDatagramSupport();
1169
- if (local_http_datagram_support != HttpDatagramSupport::kDraft04 &&
1170
- local_http_datagram_support != HttpDatagramSupport::kDraft00And04) {
1175
+ if (local_http_datagram_support != HttpDatagramSupport::kDraft09 &&
1176
+ local_http_datagram_support != HttpDatagramSupport::kDraft04And09) {
1171
1177
  break;
1172
1178
  }
1173
1179
  QUIC_DVLOG(1) << ENDPOINT
1174
- << "SETTINGS_H3_DATAGRAM_DRAFT04 received with value "
1180
+ << "SETTINGS_H3_DATAGRAM_DRAFT09 received with value "
1175
1181
  << value;
1176
1182
  if (!version().UsesHttp3()) {
1177
1183
  break;
@@ -1180,7 +1186,7 @@ bool QuicSpdySession::OnSetting(uint64_t id, uint64_t value) {
1180
1186
  return false;
1181
1187
  }
1182
1188
  if (value) {
1183
- http_datagram_support_ = HttpDatagramSupport::kDraft04;
1189
+ http_datagram_support_ = HttpDatagramSupport::kDraft09;
1184
1190
  }
1185
1191
  break;
1186
1192
  }
@@ -1599,18 +1605,15 @@ void QuicSpdySession::LogHeaderCompressionRatioHistogram(
1599
1605
  }
1600
1606
  }
1601
1607
 
1602
- MessageStatus QuicSpdySession::SendHttp3Datagram(QuicDatagramStreamId stream_id,
1608
+ MessageStatus QuicSpdySession::SendHttp3Datagram(QuicStreamId stream_id,
1603
1609
  absl::string_view payload) {
1604
1610
  if (!SupportsH3Datagram()) {
1605
1611
  QUIC_BUG(send http datagram too early)
1606
1612
  << "Refusing to send HTTP Datagram before SETTINGS received";
1607
1613
  return MESSAGE_STATUS_INTERNAL_ERROR;
1608
1614
  }
1609
- uint64_t stream_id_to_write = stream_id;
1610
- if (http_datagram_support_ != HttpDatagramSupport::kDraft00) {
1611
- // Stream ID is sent divided by four as per the specification.
1612
- stream_id_to_write /= kHttpDatagramStreamIdDivisor;
1613
- }
1615
+ // Stream ID is sent divided by four as per the specification.
1616
+ uint64_t stream_id_to_write = stream_id / kHttpDatagramStreamIdDivisor;
1614
1617
  size_t slice_length =
1615
1618
  QuicDataWriter::GetVarInt62Len(stream_id_to_write) + payload.length();
1616
1619
  quiche::QuicheBuffer buffer(
@@ -1638,16 +1641,6 @@ void QuicSpdySession::SetMaxDatagramTimeInQueueForStreamId(
1638
1641
  datagram_queue()->SetMaxTimeInQueue(max_time_in_queue);
1639
1642
  }
1640
1643
 
1641
- void QuicSpdySession::RegisterHttp3DatagramFlowId(QuicDatagramStreamId flow_id,
1642
- QuicStreamId stream_id) {
1643
- h3_datagram_flow_id_to_stream_id_map_[flow_id] = stream_id;
1644
- }
1645
-
1646
- void QuicSpdySession::UnregisterHttp3DatagramFlowId(
1647
- QuicDatagramStreamId flow_id) {
1648
- h3_datagram_flow_id_to_stream_id_map_.erase(flow_id);
1649
- }
1650
-
1651
1644
  void QuicSpdySession::OnMessageReceived(absl::string_view message) {
1652
1645
  QuicSession::OnMessageReceived(message);
1653
1646
  if (!SupportsH3Datagram()) {
@@ -1660,35 +1653,24 @@ void QuicSpdySession::OnMessageReceived(absl::string_view message) {
1660
1653
  QUIC_DLOG(ERROR) << "Failed to parse stream ID in received HTTP/3 datagram";
1661
1654
  return;
1662
1655
  }
1663
- if (http_datagram_support_ != HttpDatagramSupport::kDraft00) {
1664
- // Stream ID is sent divided by four as per the specification.
1665
- stream_id64 *= kHttpDatagramStreamIdDivisor;
1666
- }
1667
- if (perspective() == Perspective::IS_SERVER &&
1668
- http_datagram_support_ == HttpDatagramSupport::kDraft00) {
1669
- auto it = h3_datagram_flow_id_to_stream_id_map_.find(stream_id64);
1670
- if (it == h3_datagram_flow_id_to_stream_id_map_.end()) {
1671
- QUIC_DLOG(INFO) << "Received unknown HTTP/3 datagram flow ID "
1672
- << stream_id64;
1673
- return;
1674
- }
1675
- stream_id64 = it->second;
1676
- }
1677
- if (stream_id64 > std::numeric_limits<QuicStreamId>::max()) {
1678
- // TODO(b/181256914) make this a connection close once we deprecate
1679
- // draft-ietf-masque-h3-datagram-00 in favor of later drafts.
1680
- QUIC_DLOG(ERROR) << "Received unexpectedly high HTTP/3 datagram stream ID "
1681
- << stream_id64;
1656
+ // Stream ID is sent divided by four as per the specification.
1657
+ if (stream_id64 >
1658
+ std::numeric_limits<QuicStreamId>::max() / kHttpDatagramStreamIdDivisor) {
1659
+ CloseConnectionWithDetails(
1660
+ QUIC_HTTP_FRAME_ERROR,
1661
+ absl::StrCat("Received HTTP Datagram with invalid quarter stream ID ",
1662
+ stream_id64));
1682
1663
  return;
1683
1664
  }
1665
+ stream_id64 *= kHttpDatagramStreamIdDivisor;
1684
1666
  QuicStreamId stream_id = static_cast<QuicStreamId>(stream_id64);
1685
1667
  QuicSpdyStream* stream =
1686
1668
  static_cast<QuicSpdyStream*>(GetActiveStream(stream_id));
1687
1669
  if (stream == nullptr) {
1688
1670
  QUIC_DLOG(INFO) << "Received HTTP/3 datagram for unknown stream ID "
1689
1671
  << stream_id;
1690
- // TODO(b/181256914) buffer unknown HTTP/3 datagram flow IDs for a short
1691
- // period of time in case they were reordered.
1672
+ // TODO(b/181256914) buffer HTTP/3 datagrams with unknown stream IDs for a
1673
+ // short period of time in case they were reordered.
1692
1674
  return;
1693
1675
  }
1694
1676
  stream->OnDatagramReceived(&reader);
@@ -1840,12 +1822,12 @@ std::string HttpDatagramSupportToString(
1840
1822
  switch (http_datagram_support) {
1841
1823
  case HttpDatagramSupport::kNone:
1842
1824
  return "None";
1843
- case HttpDatagramSupport::kDraft00:
1844
- return "Draft00";
1845
1825
  case HttpDatagramSupport::kDraft04:
1846
1826
  return "Draft04";
1847
- case HttpDatagramSupport::kDraft00And04:
1848
- return "Draft00And04";
1827
+ case HttpDatagramSupport::kDraft09:
1828
+ return "Draft09";
1829
+ case HttpDatagramSupport::kDraft04And09:
1830
+ return "Draft04And09";
1849
1831
  }
1850
1832
  return absl::StrCat("Unknown(", static_cast<int>(http_datagram_support), ")");
1851
1833
  }
@@ -118,10 +118,10 @@ class QUIC_EXPORT_PRIVATE Http3DebugVisitor {
118
118
  // Whether draft-ietf-masque-h3-datagram is supported on this session and if so
119
119
  // which draft is currently in use.
120
120
  enum class HttpDatagramSupport : uint8_t {
121
- kNone = 0, // HTTP Datagrams are not supported for this session.
122
- kDraft00 = 1,
123
- kDraft04 = 2,
124
- kDraft00And04 = 3, // only used locally, we only negotiate one draft.
121
+ kNone, // HTTP Datagrams are not supported for this session.
122
+ kDraft04,
123
+ kDraft09,
124
+ kDraft04And09, // Only used locally for sending, we only negotiate one draft.
125
125
  };
126
126
 
127
127
  QUIC_EXPORT_PRIVATE std::string HttpDatagramSupportToString(
@@ -378,17 +378,11 @@ class QUIC_EXPORT_PRIVATE QuicSpdySession
378
378
  }
379
379
 
380
380
  // This must not be used except by QuicSpdyStream::SendHttp3Datagram.
381
- MessageStatus SendHttp3Datagram(QuicDatagramStreamId stream_id,
381
+ MessageStatus SendHttp3Datagram(QuicStreamId stream_id,
382
382
  absl::string_view payload);
383
383
  // This must not be used except by QuicSpdyStream::SetMaxDatagramTimeInQueue.
384
384
  void SetMaxDatagramTimeInQueueForStreamId(QuicStreamId stream_id,
385
385
  QuicTime::Delta max_time_in_queue);
386
- // This must not be used except by
387
- // QuicSpdyStream::MaybeProcessReceivedWebTransportHeaders.
388
- void RegisterHttp3DatagramFlowId(QuicDatagramStreamId flow_id,
389
- QuicStreamId stream_id);
390
- // This must not be used except by QuicSpdyStream::OnClose.
391
- void UnregisterHttp3DatagramFlowId(QuicDatagramStreamId flow_id);
392
386
 
393
387
  // Override from QuicSession to support HTTP/3 datagrams.
394
388
  void OnMessageReceived(absl::string_view message) override;
@@ -645,12 +639,6 @@ class QUIC_EXPORT_PRIVATE QuicSpdySession
645
639
  // Whether the peer has indicated WebTransport support.
646
640
  bool peer_supports_webtransport_ = false;
647
641
 
648
- // This maps from draft-ietf-masque-h3-datagram-00 flow IDs to stream IDs.
649
- // TODO(b/181256914) remove this when we deprecate support for that draft in
650
- // favor of more recent ones.
651
- absl::flat_hash_map<uint64_t, QuicStreamId>
652
- h3_datagram_flow_id_to_stream_id_map_;
653
-
654
642
  // Whether any settings have been received, either from the peer or from a
655
643
  // session ticket.
656
644
  bool any_settings_received_ = false;
@@ -199,11 +199,25 @@ class TestCryptoStream : public QuicCryptoStream, public QuicCryptoHandshaker {
199
199
  EncryptionLevel level) const override {
200
200
  return level != ENCRYPTION_ZERO_RTT;
201
201
  }
202
+ EncryptionLevel GetEncryptionLevelToSendCryptoDataOfSpace(
203
+ PacketNumberSpace space) const override {
204
+ switch (space) {
205
+ case INITIAL_DATA:
206
+ return ENCRYPTION_INITIAL;
207
+ case HANDSHAKE_DATA:
208
+ return ENCRYPTION_HANDSHAKE;
209
+ case APPLICATION_DATA:
210
+ return ENCRYPTION_FORWARD_SECURE;
211
+ default:
212
+ QUICHE_DCHECK(false);
213
+ return NUM_ENCRYPTION_LEVELS;
214
+ }
215
+ }
202
216
 
203
217
  bool ExportKeyingMaterial(absl::string_view /*label*/,
204
218
  absl::string_view /*context*/,
205
- size_t /*result_len*/,
206
- std::string* /*result*/) override {
219
+ size_t /*result_len*/, std::string*
220
+ /*result*/) override {
207
221
  return false;
208
222
  }
209
223
 
@@ -568,11 +582,7 @@ class QuicSpdySessionTestBase : public QuicTestWithParam<ParsedQuicVersion> {
568
582
  headers.OnHeaderBlockStart();
569
583
  headers.OnHeader(":method", "CONNECT");
570
584
  headers.OnHeader(":protocol", "webtransport");
571
- if (session_.http_datagram_support() == HttpDatagramSupport::kDraft00) {
572
- headers.OnHeader("datagram-flow-id", absl::StrCat(session_id));
573
- } else {
574
- headers.OnHeader("sec-webtransport-http3-draft02", "1");
575
- }
585
+ headers.OnHeader("sec-webtransport-http3-draft02", "1");
576
586
  stream->OnStreamHeaderList(/*fin=*/true, 0, headers);
577
587
  WebTransportHttp3* web_transport =
578
588
  session_.GetWebTransportSession(session_id);
@@ -3375,15 +3385,15 @@ void QuicSpdySessionTestBase::TestHttpDatagramSetting(
3375
3385
  switch (remote_support) {
3376
3386
  case HttpDatagramSupport::kNone:
3377
3387
  break;
3378
- case HttpDatagramSupport::kDraft00:
3379
- settings.values[SETTINGS_H3_DATAGRAM_DRAFT00] = 1;
3380
- break;
3381
3388
  case HttpDatagramSupport::kDraft04:
3382
3389
  settings.values[SETTINGS_H3_DATAGRAM_DRAFT04] = 1;
3383
3390
  break;
3384
- case HttpDatagramSupport::kDraft00And04:
3385
- settings.values[SETTINGS_H3_DATAGRAM_DRAFT00] = 1;
3391
+ case HttpDatagramSupport::kDraft09:
3392
+ settings.values[SETTINGS_H3_DATAGRAM_DRAFT09] = 1;
3393
+ break;
3394
+ case HttpDatagramSupport::kDraft04And09:
3386
3395
  settings.values[SETTINGS_H3_DATAGRAM_DRAFT04] = 1;
3396
+ settings.values[SETTINGS_H3_DATAGRAM_DRAFT09] = 1;
3387
3397
  break;
3388
3398
  }
3389
3399
  std::string data = std::string(1, kControlStream) + EncodeSettings(settings);
@@ -3399,84 +3409,83 @@ void QuicSpdySessionTestBase::TestHttpDatagramSetting(
3399
3409
  EXPECT_EQ(session_.SupportsH3Datagram(), expected_datagram_supported);
3400
3410
  }
3401
3411
 
3402
- TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal00Remote00) {
3412
+ TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal04Remote04) {
3403
3413
  TestHttpDatagramSetting(
3404
- /*local_support=*/HttpDatagramSupport::kDraft00,
3405
- /*remote_support=*/HttpDatagramSupport::kDraft00,
3406
- /*expected_support=*/HttpDatagramSupport::kDraft00,
3414
+ /*local_support=*/HttpDatagramSupport::kDraft04,
3415
+ /*remote_support=*/HttpDatagramSupport::kDraft04,
3416
+ /*expected_support=*/HttpDatagramSupport::kDraft04,
3407
3417
  /*expected_datagram_supported=*/true);
3408
3418
  }
3409
3419
 
3410
- TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal00Remote04) {
3420
+ TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal04Remote09) {
3411
3421
  TestHttpDatagramSetting(
3412
- /*local_support=*/HttpDatagramSupport::kDraft00,
3413
- /*remote_support=*/HttpDatagramSupport::kDraft04,
3422
+ /*local_support=*/HttpDatagramSupport::kDraft04,
3423
+ /*remote_support=*/HttpDatagramSupport::kDraft09,
3414
3424
  /*expected_support=*/HttpDatagramSupport::kNone,
3415
3425
  /*expected_datagram_supported=*/false);
3416
3426
  }
3417
3427
 
3418
- TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal00Remote00And04) {
3428
+ TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal04Remote04And09) {
3419
3429
  TestHttpDatagramSetting(
3420
- /*local_support=*/HttpDatagramSupport::kDraft00,
3421
- /*remote_support=*/HttpDatagramSupport::kDraft00And04,
3422
- /*expected_support=*/HttpDatagramSupport::kDraft00,
3430
+ /*local_support=*/HttpDatagramSupport::kDraft04,
3431
+ /*remote_support=*/HttpDatagramSupport::kDraft04And09,
3432
+ /*expected_support=*/HttpDatagramSupport::kDraft04,
3423
3433
  /*expected_datagram_supported=*/true);
3424
3434
  }
3425
3435
 
3426
- TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal04Remote00) {
3436
+ TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal09Remote04) {
3427
3437
  TestHttpDatagramSetting(
3428
- /*local_support=*/HttpDatagramSupport::kDraft04,
3429
- /*remote_support=*/HttpDatagramSupport::kDraft00,
3438
+ /*local_support=*/HttpDatagramSupport::kDraft09,
3439
+ /*remote_support=*/HttpDatagramSupport::kDraft04,
3430
3440
  /*expected_support=*/HttpDatagramSupport::kNone,
3431
3441
  /*expected_datagram_supported=*/false);
3432
3442
  }
3433
3443
 
3434
- TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal04Remote04) {
3444
+ TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal09Remote09) {
3435
3445
  TestHttpDatagramSetting(
3436
- /*local_support=*/HttpDatagramSupport::kDraft04,
3437
- /*remote_support=*/HttpDatagramSupport::kDraft04,
3438
- /*expected_support=*/HttpDatagramSupport::kDraft04,
3446
+ /*local_support=*/HttpDatagramSupport::kDraft09,
3447
+ /*remote_support=*/HttpDatagramSupport::kDraft09,
3448
+ /*expected_support=*/HttpDatagramSupport::kDraft09,
3439
3449
  /*expected_datagram_supported=*/true);
3440
3450
  }
3441
3451
 
3442
- TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal04Remote00And04) {
3452
+ TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal09Remote04And09) {
3443
3453
  TestHttpDatagramSetting(
3444
- /*local_support=*/HttpDatagramSupport::kDraft04,
3445
- /*remote_support=*/HttpDatagramSupport::kDraft00And04,
3446
- /*expected_support=*/HttpDatagramSupport::kDraft04,
3454
+ /*local_support=*/HttpDatagramSupport::kDraft09,
3455
+ /*remote_support=*/HttpDatagramSupport::kDraft04And09,
3456
+ /*expected_support=*/HttpDatagramSupport::kDraft09,
3447
3457
  /*expected_datagram_supported=*/true);
3448
3458
  }
3449
3459
 
3450
- TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal00And04Remote00) {
3460
+ TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal04And09Remote04) {
3451
3461
  TestHttpDatagramSetting(
3452
- /*local_support=*/HttpDatagramSupport::kDraft00And04,
3453
- /*remote_support=*/HttpDatagramSupport::kDraft00,
3454
- /*expected_support=*/HttpDatagramSupport::kDraft00,
3462
+ /*local_support=*/HttpDatagramSupport::kDraft04And09,
3463
+ /*remote_support=*/HttpDatagramSupport::kDraft04,
3464
+ /*expected_support=*/HttpDatagramSupport::kDraft04,
3455
3465
  /*expected_datagram_supported=*/true);
3456
3466
  }
3457
3467
 
3458
- TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal00And04Remote04) {
3468
+ TEST_P(QuicSpdySessionTestClient, HttpDatagramSettingLocal04And09Remote09) {
3459
3469
  TestHttpDatagramSetting(
3460
- /*local_support=*/HttpDatagramSupport::kDraft00And04,
3461
- /*remote_support=*/HttpDatagramSupport::kDraft04,
3462
- /*expected_support=*/HttpDatagramSupport::kDraft04,
3470
+ /*local_support=*/HttpDatagramSupport::kDraft04And09,
3471
+ /*remote_support=*/HttpDatagramSupport::kDraft09,
3472
+ /*expected_support=*/HttpDatagramSupport::kDraft09,
3463
3473
  /*expected_datagram_supported=*/true);
3464
3474
  }
3465
3475
 
3466
3476
  TEST_P(QuicSpdySessionTestClient,
3467
- HttpDatagramSettingLocal00And04Remote00And04) {
3477
+ HttpDatagramSettingLocal04And09Remote04And09) {
3468
3478
  TestHttpDatagramSetting(
3469
- /*local_support=*/HttpDatagramSupport::kDraft00And04,
3470
- /*remote_support=*/HttpDatagramSupport::kDraft00And04,
3471
- /*expected_support=*/HttpDatagramSupport::kDraft04,
3479
+ /*local_support=*/HttpDatagramSupport::kDraft04And09,
3480
+ /*remote_support=*/HttpDatagramSupport::kDraft04And09,
3481
+ /*expected_support=*/HttpDatagramSupport::kDraft09,
3472
3482
  /*expected_datagram_supported=*/true);
3473
3483
  }
3474
-
3475
3484
  TEST_P(QuicSpdySessionTestClient, WebTransportSetting) {
3476
3485
  if (!version().UsesHttp3()) {
3477
3486
  return;
3478
3487
  }
3479
- session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3488
+ session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3480
3489
  session_.set_supports_webtransport(true);
3481
3490
 
3482
3491
  EXPECT_FALSE(session_.SupportsWebTransport());
@@ -3499,7 +3508,7 @@ TEST_P(QuicSpdySessionTestClient, WebTransportSettingSetToZero) {
3499
3508
  if (!version().UsesHttp3()) {
3500
3509
  return;
3501
3510
  }
3502
- session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3511
+ session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3503
3512
  session_.set_supports_webtransport(true);
3504
3513
 
3505
3514
  EXPECT_FALSE(session_.SupportsWebTransport());
@@ -3529,7 +3538,7 @@ TEST_P(QuicSpdySessionTestServer, WebTransportSetting) {
3529
3538
  if (!version().UsesHttp3()) {
3530
3539
  return;
3531
3540
  }
3532
- session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3541
+ session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3533
3542
  session_.set_supports_webtransport(true);
3534
3543
 
3535
3544
  EXPECT_FALSE(session_.SupportsWebTransport());
@@ -3546,7 +3555,7 @@ TEST_P(QuicSpdySessionTestServer, BufferingIncomingStreams) {
3546
3555
  if (!version().UsesHttp3()) {
3547
3556
  return;
3548
3557
  }
3549
- session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3558
+ session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3550
3559
  session_.set_supports_webtransport(true);
3551
3560
 
3552
3561
  CompleteHandshake();
@@ -3579,7 +3588,7 @@ TEST_P(QuicSpdySessionTestServer, BufferingIncomingStreamsLimit) {
3579
3588
  if (!version().UsesHttp3()) {
3580
3589
  return;
3581
3590
  }
3582
- session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3591
+ session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3583
3592
  session_.set_supports_webtransport(true);
3584
3593
 
3585
3594
  CompleteHandshake();
@@ -3620,7 +3629,7 @@ TEST_P(QuicSpdySessionTestServer, ResetOutgoingWebTransportStreams) {
3620
3629
  if (!version().UsesHttp3()) {
3621
3630
  return;
3622
3631
  }
3623
- session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3632
+ session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3624
3633
  session_.set_supports_webtransport(true);
3625
3634
 
3626
3635
  CompleteHandshake();
@@ -3657,7 +3666,7 @@ TEST_P(QuicSpdySessionTestClient, WebTransportWithoutExtendedConnect) {
3657
3666
  }
3658
3667
  SetQuicReloadableFlag(quic_verify_request_headers_2, true);
3659
3668
  SetQuicReloadableFlag(quic_act_upon_invalid_header, true);
3660
- session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft00And04);
3669
+ session_.set_local_http_datagram_support(HttpDatagramSupport::kDraft04);
3661
3670
  session_.set_supports_webtransport(true);
3662
3671
 
3663
3672
  EXPECT_FALSE(session_.SupportsWebTransport());