@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
@@ -11,9 +11,11 @@
11
11
  #include "quiche/quic/core/crypto/crypto_protocol.h"
12
12
  #include "quiche/quic/core/crypto/crypto_utils.h"
13
13
  #include "quiche/quic/core/quic_session.h"
14
+ #include "quiche/quic/core/quic_types.h"
14
15
  #include "quiche/quic/platform/api/quic_client_stats.h"
15
16
  #include "quiche/quic/platform/api/quic_flags.h"
16
17
  #include "quiche/quic/platform/api/quic_logging.h"
18
+ #include "quiche/common/platform/api/quiche_logging.h"
17
19
 
18
20
  namespace quic {
19
21
 
@@ -149,6 +151,16 @@ bool QuicCryptoClientHandshaker::IsCryptoFrameExpectedForEncryptionLevel(
149
151
  return true;
150
152
  }
151
153
 
154
+ EncryptionLevel
155
+ QuicCryptoClientHandshaker::GetEncryptionLevelToSendCryptoDataOfSpace(
156
+ PacketNumberSpace space) const {
157
+ if (space == INITIAL_DATA) {
158
+ return ENCRYPTION_INITIAL;
159
+ }
160
+ QUICHE_DCHECK(false);
161
+ return NUM_ENCRYPTION_LEVELS;
162
+ }
163
+
152
164
  bool QuicCryptoClientHandshaker::one_rtt_keys_available() const {
153
165
  return one_rtt_keys_available_;
154
166
  }
@@ -263,7 +275,7 @@ void QuicCryptoClientHandshaker::DoHandshakeLoop(
263
275
  DoInitializeServerConfigUpdate(cached);
264
276
  break;
265
277
  case STATE_NONE:
266
- QUIC_NOTREACHED();
278
+ QUICHE_NOTREACHED();
267
279
  return;
268
280
  case STATE_CONNECTION_CLOSED:
269
281
  rv = QUIC_FAILURE;
@@ -11,6 +11,7 @@
11
11
  #include "quiche/quic/core/crypto/quic_crypto_client_config.h"
12
12
  #include "quiche/quic/core/quic_crypto_client_stream.h"
13
13
  #include "quiche/quic/core/quic_server_id.h"
14
+ #include "quiche/quic/core/quic_types.h"
14
15
  #include "quiche/quic/platform/api/quic_export.h"
15
16
  #include "quiche/common/platform/api/quiche_logging.h"
16
17
 
@@ -45,6 +46,8 @@ class QUIC_EXPORT_PRIVATE QuicCryptoClientHandshaker
45
46
  bool encryption_established() const override;
46
47
  bool IsCryptoFrameExpectedForEncryptionLevel(
47
48
  EncryptionLevel level) const override;
49
+ EncryptionLevel GetEncryptionLevelToSendCryptoDataOfSpace(
50
+ PacketNumberSpace space) const override;
48
51
  bool one_rtt_keys_available() const override;
49
52
  const QuicCryptoNegotiatedParameters& crypto_negotiated_params()
50
53
  const override;
@@ -11,7 +11,7 @@
11
11
  #include "quiche/quic/platform/api/quic_test.h"
12
12
  #include "quiche/quic/test_tools/quic_test_utils.h"
13
13
 
14
- namespace quic {
14
+ namespace quic::test {
15
15
  namespace {
16
16
 
17
17
  class TestProofHandler : public QuicCryptoClientStream::ProofHandler {
@@ -214,4 +214,4 @@ TEST_P(QuicCryptoClientHandshakerTest, TestNoPaddingInFullHelloWhenDisabled) {
214
214
  }
215
215
 
216
216
  } // namespace
217
- } // namespace quic
217
+ } // namespace quic::test
@@ -169,4 +169,10 @@ bool QuicCryptoClientStream::IsCryptoFrameExpectedForEncryptionLevel(
169
169
  return handshaker_->IsCryptoFrameExpectedForEncryptionLevel(level);
170
170
  }
171
171
 
172
+ EncryptionLevel
173
+ QuicCryptoClientStream::GetEncryptionLevelToSendCryptoDataOfSpace(
174
+ PacketNumberSpace space) const {
175
+ return handshaker_->GetEncryptionLevelToSendCryptoDataOfSpace(space);
176
+ }
177
+
172
178
  } // namespace quic
@@ -17,6 +17,7 @@
17
17
  #include "quiche/quic/core/quic_crypto_stream.h"
18
18
  #include "quiche/quic/core/quic_server_id.h"
19
19
  #include "quiche/quic/core/quic_session.h"
20
+ #include "quiche/quic/core/quic_types.h"
20
21
  #include "quiche/quic/core/quic_versions.h"
21
22
  #include "quiche/quic/platform/api/quic_export.h"
22
23
 
@@ -173,6 +174,10 @@ class QUIC_EXPORT_PRIVATE QuicCryptoClientStream
173
174
  virtual bool IsCryptoFrameExpectedForEncryptionLevel(
174
175
  EncryptionLevel level) const = 0;
175
176
 
177
+ // Returns the encryption level to send CRYPTO_FRAME for `space`.
178
+ virtual EncryptionLevel GetEncryptionLevelToSendCryptoDataOfSpace(
179
+ PacketNumberSpace space) const = 0;
180
+
176
181
  // Returns true once 1RTT keys are available.
177
182
  virtual bool one_rtt_keys_available() const = 0;
178
183
 
@@ -289,6 +294,9 @@ class QUIC_EXPORT_PRIVATE QuicCryptoClientStream
289
294
  SSL* GetSsl() const override;
290
295
  bool IsCryptoFrameExpectedForEncryptionLevel(
291
296
  EncryptionLevel level) const override;
297
+ EncryptionLevel GetEncryptionLevelToSendCryptoDataOfSpace(
298
+ PacketNumberSpace space) const override;
299
+
292
300
  bool ExportKeyingMaterial(absl::string_view label, absl::string_view context,
293
301
  size_t result_len, std::string* result) override;
294
302
  std::string chlo_hash() const;
@@ -10,6 +10,7 @@
10
10
  #include "absl/base/macros.h"
11
11
  #include "absl/strings/string_view.h"
12
12
  #include "openssl/sha.h"
13
+ #include "quiche/quic/core/quic_types.h"
13
14
  #include "quiche/quic/platform/api/quic_flag_utils.h"
14
15
  #include "quiche/quic/platform/api/quic_testvalue.h"
15
16
  #include "quiche/common/platform/api/quiche_logging.h"
@@ -68,7 +69,6 @@ QuicCryptoServerStream::QuicCryptoServerStream(
68
69
  zero_rtt_attempted_(false),
69
70
  chlo_packet_size_(0),
70
71
  validate_client_hello_cb_(nullptr),
71
- process_client_hello_cb_(nullptr),
72
72
  encryption_established_(false),
73
73
  one_rtt_keys_available_(false),
74
74
  one_rtt_packet_decrypted_(false),
@@ -88,9 +88,10 @@ void QuicCryptoServerStream::CancelOutstandingCallbacks() {
88
88
  send_server_config_update_cb_->Cancel();
89
89
  send_server_config_update_cb_ = nullptr;
90
90
  }
91
- if (process_client_hello_cb_ != nullptr) {
92
- process_client_hello_cb_->Cancel();
93
- process_client_hello_cb_ = nullptr;
91
+ if (std::shared_ptr<ProcessClientHelloCallback> cb =
92
+ process_client_hello_cb_.lock()) {
93
+ cb->Cancel();
94
+ process_client_hello_cb_.reset();
94
95
  }
95
96
  }
96
97
 
@@ -114,7 +115,7 @@ void QuicCryptoServerStream::OnHandshakeMessage(
114
115
  }
115
116
 
116
117
  if (validate_client_hello_cb_ != nullptr ||
117
- process_client_hello_cb_ != nullptr) {
118
+ !process_client_hello_cb_.expired()) {
118
119
  // Already processing some other handshake message. The protocol
119
120
  // does not allow for clients to send multiple handshake messages
120
121
  // before the server has a chance to respond.
@@ -128,7 +129,7 @@ void QuicCryptoServerStream::OnHandshakeMessage(
128
129
 
129
130
  std::unique_ptr<ValidateCallback> cb(new ValidateCallback(this));
130
131
  QUICHE_DCHECK(validate_client_hello_cb_ == nullptr);
131
- QUICHE_DCHECK(process_client_hello_cb_ == nullptr);
132
+ QUICHE_DCHECK(process_client_hello_cb_.expired());
132
133
  validate_client_hello_cb_ = cb.get();
133
134
  crypto_config_->ValidateClientHello(
134
135
  message, GetClientAddress(), session()->connection()->self_address(),
@@ -143,12 +144,11 @@ void QuicCryptoServerStream::FinishProcessingHandshakeMessage(
143
144
  std::unique_ptr<ProofSource::Details> details) {
144
145
  // Clear the callback that got us here.
145
146
  QUICHE_DCHECK(validate_client_hello_cb_ != nullptr);
146
- QUICHE_DCHECK(process_client_hello_cb_ == nullptr);
147
+ QUICHE_DCHECK(process_client_hello_cb_.expired());
147
148
  validate_client_hello_cb_ = nullptr;
148
149
 
149
- std::unique_ptr<ProcessClientHelloCallback> cb(
150
- new ProcessClientHelloCallback(this, result));
151
- process_client_hello_cb_ = cb.get();
150
+ auto cb = std::make_shared<ProcessClientHelloCallback>(this, result);
151
+ process_client_hello_cb_ = cb;
152
152
  ProcessClientHello(result, std::move(details), std::move(cb));
153
153
  }
154
154
 
@@ -160,9 +160,9 @@ void QuicCryptoServerStream::
160
160
  std::unique_ptr<DiversificationNonce> diversification_nonce,
161
161
  std::unique_ptr<ProofSource::Details> proof_source_details) {
162
162
  // Clear the callback that got us here.
163
- QUICHE_DCHECK(process_client_hello_cb_ != nullptr);
163
+ QUICHE_DCHECK(!process_client_hello_cb_.expired());
164
164
  QUICHE_DCHECK(validate_client_hello_cb_ == nullptr);
165
- process_client_hello_cb_ = nullptr;
165
+ process_client_hello_cb_.reset();
166
166
  proof_source_details_ = std::move(proof_source_details);
167
167
 
168
168
  AdjustTestValue("quic::QuicCryptoServerStream::after_process_client_hello",
@@ -456,7 +456,7 @@ void QuicCryptoServerStream::ProcessClientHello(
456
456
  ValidateClientHelloResultCallback::Result>
457
457
  result,
458
458
  std::unique_ptr<ProofSource::Details> proof_source_details,
459
- std::unique_ptr<ProcessClientHelloResultCallback> done_cb) {
459
+ std::shared_ptr<ProcessClientHelloResultCallback> done_cb) {
460
460
  proof_source_details_ = std::move(proof_source_details);
461
461
  const CryptoHandshakeMessage& message = result->client_hello;
462
462
  std::string error_details;
@@ -532,4 +532,17 @@ bool QuicCryptoServerStream::IsCryptoFrameExpectedForEncryptionLevel(
532
532
  return true;
533
533
  }
534
534
 
535
+ EncryptionLevel
536
+ QuicCryptoServerStream::GetEncryptionLevelToSendCryptoDataOfSpace(
537
+ PacketNumberSpace space) const {
538
+ if (space == INITIAL_DATA) {
539
+ return ENCRYPTION_INITIAL;
540
+ }
541
+ if (space == APPLICATION_DATA) {
542
+ return ENCRYPTION_ZERO_RTT;
543
+ }
544
+ QUICHE_DCHECK(false);
545
+ return NUM_ENCRYPTION_LEVELS;
546
+ }
547
+
535
548
  } // namespace quic
@@ -12,6 +12,7 @@
12
12
  #include "quiche/quic/core/quic_crypto_handshaker.h"
13
13
  #include "quiche/quic/core/quic_crypto_server_stream_base.h"
14
14
  #include "quiche/quic/core/quic_session.h"
15
+ #include "quiche/quic/core/quic_types.h"
15
16
  #include "quiche/quic/platform/api/quic_export.h"
16
17
 
17
18
  namespace quic {
@@ -74,6 +75,8 @@ class QUIC_EXPORT_PRIVATE QuicCryptoServerStream
74
75
  SSL* GetSsl() const override;
75
76
  bool IsCryptoFrameExpectedForEncryptionLevel(
76
77
  EncryptionLevel level) const override;
78
+ EncryptionLevel GetEncryptionLevelToSendCryptoDataOfSpace(
79
+ PacketNumberSpace space) const override;
77
80
 
78
81
  // From QuicCryptoHandshaker
79
82
  void OnHandshakeMessage(const CryptoHandshakeMessage& message) override;
@@ -98,7 +101,7 @@ class QUIC_EXPORT_PRIVATE QuicCryptoServerStream
98
101
  ValidateClientHelloResultCallback::Result>
99
102
  result,
100
103
  std::unique_ptr<ProofSource::Details> proof_source_details,
101
- std::unique_ptr<ProcessClientHelloResultCallback> done_cb);
104
+ std::shared_ptr<ProcessClientHelloResultCallback> done_cb);
102
105
 
103
106
  // Hook that allows the server to set QuicConfig defaults just
104
107
  // before going through the parameter negotiation step.
@@ -251,7 +254,7 @@ class QUIC_EXPORT_PRIVATE QuicCryptoServerStream
251
254
  // ProcessClientHello and forward it to
252
255
  // FinishProcessingHandshakeMessageAfterProcessClientHello. Note that this
253
256
  // field is mutually exclusive with validate_client_hello_cb_.
254
- ProcessClientHelloCallback* process_client_hello_cb_;
257
+ std::weak_ptr<ProcessClientHelloCallback> process_client_hello_cb_;
255
258
 
256
259
  // The ProofSource::Details from this connection.
257
260
  std::unique_ptr<ProofSource::Details> proof_source_details_;
@@ -37,10 +37,7 @@ QuicCryptoStream::QuicCryptoStream(QuicSession* session)
37
37
  QuicVersionUsesCryptoFrames(session->transport_version())
38
38
  ? CRYPTO
39
39
  : BIDIRECTIONAL),
40
- substreams_{{{this, ENCRYPTION_INITIAL},
41
- {this, ENCRYPTION_HANDSHAKE},
42
- {this, ENCRYPTION_ZERO_RTT},
43
- {this, ENCRYPTION_FORWARD_SECURE}}} {
40
+ substreams_{{{this}, {this}, {this}}} {
44
41
  // The crypto stream is exempt from connection level flow control.
45
42
  DisableConnectionFlowControlForThisStream();
46
43
  }
@@ -82,9 +79,11 @@ void QuicCryptoStream::OnCryptoFrame(const QuicCryptoFrame& frame) {
82
79
  absl::StrCat("CRYPTO_FRAME is unexpectedly received at level ", level));
83
80
  return;
84
81
  }
85
- substreams_[level].sequencer.OnCryptoFrame(frame);
82
+ CryptoSubstream& substream =
83
+ substreams_[QuicUtils::GetPacketNumberSpace(level)];
84
+ substream.sequencer.OnCryptoFrame(frame);
86
85
  EncryptionLevel frame_level = level;
87
- if (substreams_[level].sequencer.NumBytesBuffered() >
86
+ if (substream.sequencer.NumBytesBuffered() >
88
87
  BufferSizeLimitForLevel(frame_level)) {
89
88
  OnUnrecoverableError(QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA,
90
89
  "Too much crypto data received");
@@ -109,7 +108,8 @@ void QuicCryptoStream::OnDataAvailable() {
109
108
  OnDataAvailableInSequencer(sequencer(), level);
110
109
  return;
111
110
  }
112
- OnDataAvailableInSequencer(&substreams_[level].sequencer, level);
111
+ OnDataAvailableInSequencer(
112
+ &substreams_[QuicUtils::GetPacketNumberSpace(level)].sequencer, level);
113
113
  }
114
114
 
115
115
  void QuicCryptoStream::OnDataAvailableInSequencer(
@@ -146,7 +146,8 @@ void QuicCryptoStream::WriteCryptoData(EncryptionLevel level,
146
146
  }
147
147
  const bool had_buffered_data = HasBufferedCryptoFrames();
148
148
  // Append |data| to the send buffer for this encryption level.
149
- QuicStreamSendBuffer* send_buffer = &substreams_[level].send_buffer;
149
+ QuicStreamSendBuffer* send_buffer =
150
+ &substreams_[QuicUtils::GetPacketNumberSpace(level)].send_buffer;
150
151
  QuicStreamOffset offset = send_buffer->stream_offset();
151
152
  send_buffer->SaveStreamData(data);
152
153
  if (kMaxStreamLength - offset < data.length()) {
@@ -173,8 +174,9 @@ size_t QuicCryptoStream::BufferSizeLimitForLevel(EncryptionLevel) const {
173
174
  bool QuicCryptoStream::OnCryptoFrameAcked(const QuicCryptoFrame& frame,
174
175
  QuicTime::Delta /*ack_delay_time*/) {
175
176
  QuicByteCount newly_acked_length = 0;
176
- if (!substreams_[frame.level].send_buffer.OnStreamDataAcked(
177
- frame.offset, frame.data_length, &newly_acked_length)) {
177
+ if (!substreams_[QuicUtils::GetPacketNumberSpace(frame.level)]
178
+ .send_buffer.OnStreamDataAcked(frame.offset, frame.data_length,
179
+ &newly_acked_length)) {
178
180
  OnUnrecoverableError(QUIC_INTERNAL_ERROR,
179
181
  "Trying to ack unsent crypto data.");
180
182
  return false;
@@ -201,9 +203,10 @@ void QuicCryptoStream::NeuterStreamDataOfEncryptionLevel(
201
203
  }
202
204
  return;
203
205
  }
204
- QuicStreamSendBuffer* send_buffer = &substreams_[level].send_buffer;
205
- // TODO(nharper): Consider adding a Clear() method to QuicStreamSendBuffer to
206
- // replace the following code.
206
+ QuicStreamSendBuffer* send_buffer =
207
+ &substreams_[QuicUtils::GetPacketNumberSpace(level)].send_buffer;
208
+ // TODO(nharper): Consider adding a Clear() method to QuicStreamSendBuffer
209
+ // to replace the following code.
207
210
  QuicIntervalSet<QuicStreamOffset> to_ack = send_buffer->bytes_acked();
208
211
  to_ack.Complement(0, send_buffer->stream_offset());
209
212
  for (const auto& interval : to_ack) {
@@ -225,22 +228,13 @@ void QuicCryptoStream::OnStreamDataConsumed(QuicByteCount bytes_consumed) {
225
228
  QuicStream::OnStreamDataConsumed(bytes_consumed);
226
229
  }
227
230
 
228
- namespace {
229
-
230
- constexpr std::array<EncryptionLevel, NUM_ENCRYPTION_LEVELS>
231
- AllEncryptionLevels() {
232
- return {ENCRYPTION_INITIAL, ENCRYPTION_HANDSHAKE, ENCRYPTION_ZERO_RTT,
233
- ENCRYPTION_FORWARD_SECURE};
234
- }
235
-
236
- } // namespace
237
231
 
238
232
  bool QuicCryptoStream::HasPendingCryptoRetransmission() const {
239
233
  if (!QuicVersionUsesCryptoFrames(session()->transport_version())) {
240
234
  return false;
241
235
  }
242
- for (EncryptionLevel level : AllEncryptionLevels()) {
243
- if (substreams_[level].send_buffer.HasPendingRetransmission()) {
236
+ for (const auto& substream : substreams_) {
237
+ if (substream.send_buffer.HasPendingRetransmission()) {
244
238
  return true;
245
239
  }
246
240
  }
@@ -251,12 +245,15 @@ void QuicCryptoStream::WritePendingCryptoRetransmission() {
251
245
  QUIC_BUG_IF(quic_bug_12573_3,
252
246
  !QuicVersionUsesCryptoFrames(session()->transport_version()))
253
247
  << "Versions less than 47 don't write CRYPTO frames";
254
- for (EncryptionLevel level : AllEncryptionLevels()) {
255
- QuicStreamSendBuffer* send_buffer = &substreams_[level].send_buffer;
248
+ for (uint8_t i = INITIAL_DATA; i <= APPLICATION_DATA; ++i) {
249
+ auto packet_number_space = static_cast<PacketNumberSpace>(i);
250
+ QuicStreamSendBuffer* send_buffer =
251
+ &substreams_[packet_number_space].send_buffer;
256
252
  while (send_buffer->HasPendingRetransmission()) {
257
253
  auto pending = send_buffer->NextPendingRetransmission();
258
254
  size_t bytes_consumed = stream_delegate()->SendCryptoData(
259
- level, pending.length, pending.offset, HANDSHAKE_RETRANSMISSION);
255
+ GetEncryptionLevelToSendCryptoDataOfSpace(packet_number_space),
256
+ pending.length, pending.offset, HANDSHAKE_RETRANSMISSION);
260
257
  send_buffer->OnStreamDataRetransmitted(pending.offset, bytes_consumed);
261
258
  if (bytes_consumed < pending.length) {
262
259
  return;
@@ -351,14 +348,17 @@ uint64_t QuicCryptoStream::crypto_bytes_read() const {
351
348
  return stream_bytes_read();
352
349
  }
353
350
  uint64_t bytes_read = 0;
354
- for (EncryptionLevel level : AllEncryptionLevels()) {
355
- bytes_read += substreams_[level].sequencer.NumBytesConsumed();
351
+ for (const CryptoSubstream& substream : substreams_) {
352
+ bytes_read += substream.sequencer.NumBytesConsumed();
356
353
  }
357
354
  return bytes_read;
358
355
  }
359
356
 
357
+ // TODO(haoyuewang) Move this test-only method under
358
+ // quiche/quic/test_tools.
360
359
  uint64_t QuicCryptoStream::BytesReadOnLevel(EncryptionLevel level) const {
361
- return substreams_[level].sequencer.NumBytesConsumed();
360
+ return substreams_[QuicUtils::GetPacketNumberSpace(level)]
361
+ .sequencer.NumBytesConsumed();
362
362
  }
363
363
 
364
364
  bool QuicCryptoStream::WriteCryptoFrame(EncryptionLevel level,
@@ -368,16 +368,17 @@ bool QuicCryptoStream::WriteCryptoFrame(EncryptionLevel level,
368
368
  QUIC_BUG_IF(quic_bug_12573_4,
369
369
  !QuicVersionUsesCryptoFrames(session()->transport_version()))
370
370
  << "Versions less than 47 don't write CRYPTO frames (2)";
371
- return substreams_[level].send_buffer.WriteStreamData(offset, data_length,
372
- writer);
371
+ return substreams_[QuicUtils::GetPacketNumberSpace(level)]
372
+ .send_buffer.WriteStreamData(offset, data_length, writer);
373
373
  }
374
374
 
375
375
  void QuicCryptoStream::OnCryptoFrameLost(QuicCryptoFrame* crypto_frame) {
376
376
  QUIC_BUG_IF(quic_bug_12573_5,
377
377
  !QuicVersionUsesCryptoFrames(session()->transport_version()))
378
378
  << "Versions less than 47 don't lose CRYPTO frames";
379
- substreams_[crypto_frame->level].send_buffer.OnStreamDataLost(
380
- crypto_frame->offset, crypto_frame->data_length);
379
+ substreams_[QuicUtils::GetPacketNumberSpace(crypto_frame->level)]
380
+ .send_buffer.OnStreamDataLost(crypto_frame->offset,
381
+ crypto_frame->data_length);
381
382
  }
382
383
 
383
384
  bool QuicCryptoStream::RetransmitData(QuicCryptoFrame* crypto_frame,
@@ -388,7 +389,8 @@ bool QuicCryptoStream::RetransmitData(QuicCryptoFrame* crypto_frame,
388
389
  QuicIntervalSet<QuicStreamOffset> retransmission(
389
390
  crypto_frame->offset, crypto_frame->offset + crypto_frame->data_length);
390
391
  QuicStreamSendBuffer* send_buffer =
391
- &substreams_[crypto_frame->level].send_buffer;
392
+ &substreams_[QuicUtils::GetPacketNumberSpace(crypto_frame->level)]
393
+ .send_buffer;
392
394
  retransmission.Difference(send_buffer->bytes_acked());
393
395
  if (retransmission.Empty()) {
394
396
  return true;
@@ -396,9 +398,12 @@ bool QuicCryptoStream::RetransmitData(QuicCryptoFrame* crypto_frame,
396
398
  for (const auto& interval : retransmission) {
397
399
  size_t retransmission_offset = interval.min();
398
400
  size_t retransmission_length = interval.max() - interval.min();
401
+ EncryptionLevel retransmission_encryption_level =
402
+ GetEncryptionLevelToSendCryptoDataOfSpace(
403
+ QuicUtils::GetPacketNumberSpace(crypto_frame->level));
399
404
  size_t bytes_consumed = stream_delegate()->SendCryptoData(
400
- crypto_frame->level, retransmission_length, retransmission_offset,
401
- type);
405
+ retransmission_encryption_level, retransmission_length,
406
+ retransmission_offset, type);
402
407
  send_buffer->OnStreamDataRetransmitted(retransmission_offset,
403
408
  bytes_consumed);
404
409
  if (bytes_consumed < retransmission_length) {
@@ -412,8 +417,10 @@ void QuicCryptoStream::WriteBufferedCryptoFrames() {
412
417
  QUIC_BUG_IF(quic_bug_12573_7,
413
418
  !QuicVersionUsesCryptoFrames(session()->transport_version()))
414
419
  << "Versions less than 47 don't use CRYPTO frames";
415
- for (EncryptionLevel level : AllEncryptionLevels()) {
416
- QuicStreamSendBuffer* send_buffer = &substreams_[level].send_buffer;
420
+ for (uint8_t i = INITIAL_DATA; i <= APPLICATION_DATA; ++i) {
421
+ auto packet_number_space = static_cast<PacketNumberSpace>(i);
422
+ QuicStreamSendBuffer* send_buffer =
423
+ &substreams_[packet_number_space].send_buffer;
417
424
  const size_t data_length =
418
425
  send_buffer->stream_offset() - send_buffer->stream_bytes_written();
419
426
  if (data_length == 0) {
@@ -421,8 +428,8 @@ void QuicCryptoStream::WriteBufferedCryptoFrames() {
421
428
  continue;
422
429
  }
423
430
  size_t bytes_consumed = stream_delegate()->SendCryptoData(
424
- level, data_length, send_buffer->stream_bytes_written(),
425
- NOT_RETRANSMISSION);
431
+ GetEncryptionLevelToSendCryptoDataOfSpace(packet_number_space),
432
+ data_length, send_buffer->stream_bytes_written(), NOT_RETRANSMISSION);
426
433
  send_buffer->OnStreamDataConsumed(bytes_consumed);
427
434
  if (bytes_consumed < data_length) {
428
435
  // Connection is write blocked.
@@ -435,8 +442,8 @@ bool QuicCryptoStream::HasBufferedCryptoFrames() const {
435
442
  QUIC_BUG_IF(quic_bug_12573_8,
436
443
  !QuicVersionUsesCryptoFrames(session()->transport_version()))
437
444
  << "Versions less than 47 don't use CRYPTO frames";
438
- for (EncryptionLevel level : AllEncryptionLevels()) {
439
- const QuicStreamSendBuffer& send_buffer = substreams_[level].send_buffer;
445
+ for (const CryptoSubstream& substream : substreams_) {
446
+ const QuicStreamSendBuffer& send_buffer = substream.send_buffer;
440
447
  QUICHE_DCHECK_GE(send_buffer.stream_offset(),
441
448
  send_buffer.stream_bytes_written());
442
449
  if (send_buffer.stream_offset() > send_buffer.stream_bytes_written()) {
@@ -457,15 +464,16 @@ bool QuicCryptoStream::IsFrameOutstanding(EncryptionLevel level, size_t offset,
457
464
  // the wrong transport version.
458
465
  return false;
459
466
  }
460
- return substreams_[level].send_buffer.IsStreamDataOutstanding(offset, length);
467
+ return substreams_[QuicUtils::GetPacketNumberSpace(level)]
468
+ .send_buffer.IsStreamDataOutstanding(offset, length);
461
469
  }
462
470
 
463
471
  bool QuicCryptoStream::IsWaitingForAcks() const {
464
472
  if (!QuicVersionUsesCryptoFrames(session()->transport_version())) {
465
473
  return QuicStream::IsWaitingForAcks();
466
474
  }
467
- for (EncryptionLevel level : AllEncryptionLevels()) {
468
- if (substreams_[level].send_buffer.stream_bytes_outstanding()) {
475
+ for (const CryptoSubstream& substream : substreams_) {
476
+ if (substream.send_buffer.stream_bytes_outstanding()) {
469
477
  return true;
470
478
  }
471
479
  }
@@ -473,7 +481,7 @@ bool QuicCryptoStream::IsWaitingForAcks() const {
473
481
  }
474
482
 
475
483
  QuicCryptoStream::CryptoSubstream::CryptoSubstream(
476
- QuicCryptoStream* crypto_stream, EncryptionLevel)
484
+ QuicCryptoStream* crypto_stream)
477
485
  : sequencer(crypto_stream),
478
486
  send_buffer(crypto_stream->session()
479
487
  ->connection()
@@ -236,8 +236,9 @@ class QUIC_EXPORT_PRIVATE QuicCryptoStream : public QuicStream {
236
236
  virtual void OnDataAvailableInSequencer(QuicStreamSequencer* sequencer,
237
237
  EncryptionLevel level);
238
238
 
239
- QuicStreamSequencer* GetStreamSequencerForLevel(EncryptionLevel level) {
240
- return &substreams_[level].sequencer;
239
+ QuicStreamSequencer* GetStreamSequencerForPacketNumberSpace(
240
+ PacketNumberSpace packet_number_space) {
241
+ return &substreams_[packet_number_space].sequencer;
241
242
  }
242
243
 
243
244
  // Called by OnCryptoFrame to check if a CRYPTO frame is received at an
@@ -245,13 +246,17 @@ class QUIC_EXPORT_PRIVATE QuicCryptoStream : public QuicStream {
245
246
  virtual bool IsCryptoFrameExpectedForEncryptionLevel(
246
247
  EncryptionLevel level) const = 0;
247
248
 
249
+ // Called to determine the encryption level to send/retransmit crypto data.
250
+ virtual EncryptionLevel GetEncryptionLevelToSendCryptoDataOfSpace(
251
+ PacketNumberSpace space) const = 0;
252
+
248
253
  private:
249
- // Data sent and received in CRYPTO frames is sent at multiple encryption
250
- // levels. Some of the state for the single logical crypto stream is split
251
- // across encryption levels, and a CryptoSubstream is used to manage that
252
- // state for a particular encryption level.
254
+ // Data sent and received in CRYPTO frames is sent at multiple packet number
255
+ // spaces. Some of the state for the single logical crypto stream is split
256
+ // across packet number spaces, and a CryptoSubstream is used to manage that
257
+ // state for a particular packet number space.
253
258
  struct QUIC_EXPORT_PRIVATE CryptoSubstream {
254
- CryptoSubstream(QuicCryptoStream* crypto_stream, EncryptionLevel);
259
+ CryptoSubstream(QuicCryptoStream* crypto_stream);
255
260
 
256
261
  QuicStreamSequencer sequencer;
257
262
  QuicStreamSendBuffer send_buffer;
@@ -262,9 +267,9 @@ class QUIC_EXPORT_PRIVATE QuicCryptoStream : public QuicStream {
262
267
  // TLS 1.3, which never encrypts crypto data.
263
268
  QuicIntervalSet<QuicStreamOffset> bytes_consumed_[NUM_ENCRYPTION_LEVELS];
264
269
 
265
- // Keeps state for data sent/received in CRYPTO frames at each encryption
266
- // level.
267
- std::array<CryptoSubstream, NUM_ENCRYPTION_LEVELS> substreams_;
270
+ // Keeps state for data sent/received in CRYPTO frames at each packet number
271
+ // space;
272
+ std::array<CryptoSubstream, NUM_PACKET_NUMBER_SPACES> substreams_;
268
273
  };
269
274
 
270
275
  } // namespace quic
@@ -13,6 +13,7 @@
13
13
  #include "quiche/quic/core/crypto/crypto_handshake.h"
14
14
  #include "quiche/quic/core/crypto/crypto_protocol.h"
15
15
  #include "quiche/quic/core/crypto/null_encrypter.h"
16
+ #include "quiche/quic/core/quic_types.h"
16
17
  #include "quiche/quic/core/quic_utils.h"
17
18
  #include "quiche/quic/platform/api/quic_socket_address.h"
18
19
  #include "quiche/quic/platform/api/quic_test.h"
@@ -101,6 +102,22 @@ class MockQuicCryptoStream : public QuicCryptoStream,
101
102
  return level != ENCRYPTION_ZERO_RTT;
102
103
  }
103
104
 
105
+ EncryptionLevel GetEncryptionLevelToSendCryptoDataOfSpace(
106
+ PacketNumberSpace space) const override {
107
+ switch (space) {
108
+ case INITIAL_DATA:
109
+ return ENCRYPTION_INITIAL;
110
+ case HANDSHAKE_DATA:
111
+ return ENCRYPTION_HANDSHAKE;
112
+ case APPLICATION_DATA:
113
+ return QuicCryptoStream::session()
114
+ ->GetEncryptionLevelToSendApplicationData();
115
+ default:
116
+ QUICHE_DCHECK(false);
117
+ return NUM_ENCRYPTION_LEVELS;
118
+ }
119
+ }
120
+
104
121
  private:
105
122
  quiche::QuicheReferenceCountedPointer<QuicCryptoNegotiatedParameters> params_;
106
123
  std::vector<CryptoHandshakeMessage> messages_;
@@ -266,6 +283,17 @@ TEST_F(QuicCryptoStreamTest, RetransmitCryptoDataInCryptoFrames) {
266
283
  .WillOnce(Invoke(connection_,
267
284
  &MockQuicConnection::QuicConnection_SendCryptoData));
268
285
  stream_->WriteCryptoData(ENCRYPTION_ZERO_RTT, data);
286
+
287
+ // Before encryption moves to ENCRYPTION_FORWARD_SECURE, ZERO RTT data are
288
+ // retranmitted at ENCRYPTION_ZERO_RTT.
289
+ QuicCryptoFrame lost_frame = QuicCryptoFrame(ENCRYPTION_ZERO_RTT, 0, 650);
290
+ stream_->OnCryptoFrameLost(&lost_frame);
291
+
292
+ EXPECT_CALL(*connection_, SendCryptoData(ENCRYPTION_ZERO_RTT, 650, 0))
293
+ .WillOnce(Invoke(connection_,
294
+ &MockQuicConnection::QuicConnection_SendCryptoData));
295
+ stream_->WritePendingCryptoRetransmission();
296
+
269
297
  connection_->SetEncrypter(
270
298
  ENCRYPTION_FORWARD_SECURE,
271
299
  std::make_unique<NullEncrypter>(Perspective::IS_CLIENT));
@@ -273,7 +301,7 @@ TEST_F(QuicCryptoStreamTest, RetransmitCryptoDataInCryptoFrames) {
273
301
  EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, connection_->encryption_level());
274
302
 
275
303
  // Lost [0, 1000).
276
- QuicCryptoFrame lost_frame(ENCRYPTION_INITIAL, 0, 1000);
304
+ lost_frame = QuicCryptoFrame(ENCRYPTION_INITIAL, 0, 1000);
277
305
  stream_->OnCryptoFrameLost(&lost_frame);
278
306
  EXPECT_TRUE(stream_->HasPendingCryptoRetransmission());
279
307
  // Lost [1200, 2000).
@@ -289,7 +317,7 @@ TEST_F(QuicCryptoStreamTest, RetransmitCryptoDataInCryptoFrames) {
289
317
  EXPECT_CALL(*connection_, SendCryptoData(ENCRYPTION_INITIAL, 150, 1200))
290
318
  .WillOnce(Invoke(connection_,
291
319
  &MockQuicConnection::QuicConnection_SendCryptoData));
292
- EXPECT_CALL(*connection_, SendCryptoData(ENCRYPTION_ZERO_RTT, 650, 0))
320
+ EXPECT_CALL(*connection_, SendCryptoData(ENCRYPTION_FORWARD_SECURE, 650, 0))
293
321
  .WillOnce(Invoke(connection_,
294
322
  &MockQuicConnection::QuicConnection_SendCryptoData));
295
323
  stream_->WritePendingCryptoRetransmission();
@@ -533,7 +561,7 @@ TEST_F(QuicCryptoStreamTest, RetransmitStreamDataWithCryptoFrames) {
533
561
  stream_->OnCryptoFrameAcked(acked_frame, QuicTime::Delta::Zero()));
534
562
 
535
563
  // Retransmit only [1350, 1500).
536
- EXPECT_CALL(*connection_, SendCryptoData(ENCRYPTION_ZERO_RTT, 150, 0))
564
+ EXPECT_CALL(*connection_, SendCryptoData(ENCRYPTION_FORWARD_SECURE, 150, 0))
537
565
  .WillOnce(Invoke(connection_,
538
566
  &MockQuicConnection::QuicConnection_SendCryptoData));
539
567
  QuicCryptoFrame frame_to_retransmit(ENCRYPTION_ZERO_RTT, 0, 150);
@@ -543,10 +571,11 @@ TEST_F(QuicCryptoStreamTest, RetransmitStreamDataWithCryptoFrames) {
543
571
  EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, connection_->encryption_level());
544
572
 
545
573
  // Retransmit [1350, 2700) again and all data is sent.
546
- EXPECT_CALL(*connection_, SendCryptoData(ENCRYPTION_ZERO_RTT, 650, 0))
574
+ EXPECT_CALL(*connection_, SendCryptoData(ENCRYPTION_FORWARD_SECURE, 650, 0))
547
575
  .WillOnce(Invoke(connection_,
548
576
  &MockQuicConnection::QuicConnection_SendCryptoData));
549
- EXPECT_CALL(*connection_, SendCryptoData(ENCRYPTION_ZERO_RTT, 200, 1150))
577
+ EXPECT_CALL(*connection_,
578
+ SendCryptoData(ENCRYPTION_FORWARD_SECURE, 200, 1150))
550
579
  .WillOnce(Invoke(connection_,
551
580
  &MockQuicConnection::QuicConnection_SendCryptoData));
552
581
  frame_to_retransmit = QuicCryptoFrame(ENCRYPTION_ZERO_RTT, 0, 1350);