@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
@@ -8,6 +8,7 @@
8
8
  #include <string>
9
9
  #include <utility>
10
10
 
11
+ #include "absl/base/optimization.h"
11
12
  #include "absl/container/flat_hash_set.h"
12
13
  #include "absl/strings/string_view.h"
13
14
  #include "quiche/quic/core/chlo_extractor.h"
@@ -147,6 +148,7 @@ class PacketCollector : public QuicPacketCreator::DelegateInterface,
147
148
  class StatelessConnectionTerminator {
148
149
  public:
149
150
  StatelessConnectionTerminator(QuicConnectionId server_connection_id,
151
+ QuicConnectionId original_server_connection_id,
150
152
  const ParsedQuicVersion version,
151
153
  QuicConnectionHelperInterface* helper,
152
154
  QuicTimeWaitListManager* time_wait_list_manager)
@@ -158,7 +160,8 @@ class StatelessConnectionTerminator {
158
160
  creator_(server_connection_id, &framer_, &collector_),
159
161
  time_wait_list_manager_(time_wait_list_manager) {
160
162
  framer_.set_data_producer(&collector_);
161
- framer_.SetInitialObfuscators(server_connection_id);
163
+ // Always set encrypter with original_server_connection_id.
164
+ framer_.SetInitialObfuscators(original_server_connection_id);
162
165
  }
163
166
 
164
167
  ~StatelessConnectionTerminator() {
@@ -518,7 +521,7 @@ constexpr bool IsSourceUdpPortBlocked(uint16_t port) {
518
521
  constexpr size_t num_blocked_ports = ABSL_ARRAYSIZE(blocked_ports);
519
522
  constexpr uint16_t highest_blocked_port =
520
523
  blocked_ports[num_blocked_ports - 1];
521
- if (QUICHE_PREDICT_TRUE(port > highest_blocked_port)) {
524
+ if (ABSL_PREDICT_TRUE(port > highest_blocked_port)) {
522
525
  // Early-return to skip comparisons for the majority of traffic.
523
526
  return false;
524
527
  }
@@ -901,8 +904,9 @@ void QuicDispatcher::CleanUpSession(QuicConnectionId server_connection_id,
901
904
  // This serializes a connection close termination packet and adds the
902
905
  // connection to the time wait list.
903
906
  StatelessConnectionTerminator terminator(
904
- server_connection_id, connection->version(), helper_.get(),
905
- time_wait_list_manager_.get());
907
+ server_connection_id,
908
+ connection->GetOriginalDestinationConnectionId(),
909
+ connection->version(), helper_.get(), time_wait_list_manager_.get());
906
910
  terminator.CloseConnection(
907
911
  QUIC_HANDSHAKE_FAILED,
908
912
  "Connection is closed by server before handshake confirmed",
@@ -1137,9 +1141,9 @@ void QuicDispatcher::StatelesslyTerminateConnection(
1137
1141
  << version << ", error_code:" << error_code
1138
1142
  << ", error_details:" << error_details;
1139
1143
 
1140
- StatelessConnectionTerminator terminator(server_connection_id, version,
1141
- helper_.get(),
1142
- time_wait_list_manager_.get());
1144
+ StatelessConnectionTerminator terminator(
1145
+ server_connection_id, server_connection_id, version, helper_.get(),
1146
+ time_wait_list_manager_.get());
1143
1147
  // This also adds the connection to time wait list.
1144
1148
  terminator.CloseConnection(
1145
1149
  error_code, error_details, format != GOOGLE_QUIC_PACKET,
@@ -1313,7 +1317,7 @@ void QuicDispatcher::ProcessChlo(ParsedClientHello parsed_chlo,
1313
1317
  std::unique_ptr<QuicSession> session = CreateQuicSession(
1314
1318
  packet_info->destination_connection_id, packet_info->self_address,
1315
1319
  packet_info->peer_address, alpn, packet_info->version, parsed_chlo);
1316
- if (QUIC_PREDICT_FALSE(session == nullptr)) {
1320
+ if (ABSL_PREDICT_FALSE(session == nullptr)) {
1317
1321
  QUIC_BUG(quic_bug_10287_8)
1318
1322
  << "CreateQuicSession returned nullptr for "
1319
1323
  << packet_info->destination_connection_id << " from "
@@ -1321,7 +1325,9 @@ void QuicDispatcher::ProcessChlo(ParsedClientHello parsed_chlo,
1321
1325
  << " ALPN \"" << alpn << "\" version " << packet_info->version;
1322
1326
  return;
1323
1327
  }
1324
- if (original_connection_id != packet_info->destination_connection_id) {
1328
+ const bool replaced_connection_id =
1329
+ original_connection_id != packet_info->destination_connection_id;
1330
+ if (replaced_connection_id) {
1325
1331
  session->connection()->SetOriginalDestinationConnectionId(
1326
1332
  original_connection_id);
1327
1333
  }
@@ -1342,8 +1348,11 @@ void QuicDispatcher::ProcessChlo(ParsedClientHello parsed_chlo,
1342
1348
  }
1343
1349
  session_ptr = insertion_result.first->second.get();
1344
1350
  std::list<BufferedPacket> packets =
1345
- buffered_packets_.DeliverPackets(packet_info->destination_connection_id)
1346
- .buffered_packets;
1351
+ buffered_packets_.DeliverPackets(original_connection_id).buffered_packets;
1352
+ if (replaced_connection_id && !packets.empty()) {
1353
+ QUIC_CODE_COUNT(
1354
+ quic_delivered_buffered_packets_to_connection_with_replaced_id);
1355
+ }
1347
1356
  // Process CHLO at first.
1348
1357
  session_ptr->ProcessUdpPacket(packet_info->self_address,
1349
1358
  packet_info->peer_address, packet_info->packet);
@@ -490,7 +490,8 @@ class QuicDispatcherTestBase : public QuicTestWithParam<ParsedQuicVersion> {
490
490
  ProcessFirstFlight(version, client_address, connection_id);
491
491
  }
492
492
 
493
- void TestTlsMultiPacketClientHello(bool add_reordering);
493
+ void TestTlsMultiPacketClientHello(bool add_reordering,
494
+ bool long_connection_id);
494
495
 
495
496
  void TestVersionNegotiationForUnknownVersionInvalidShortInitialConnectionId(
496
497
  const QuicConnectionId& server_connection_id,
@@ -560,14 +561,23 @@ TEST_P(QuicDispatcherTestAllVersions, TlsClientHelloCreatesSession) {
560
561
  }
561
562
 
562
563
  void QuicDispatcherTestBase::TestTlsMultiPacketClientHello(
563
- bool add_reordering) {
564
+ bool add_reordering, bool long_connection_id) {
564
565
  if (!version_.UsesTls()) {
565
566
  return;
566
567
  }
567
568
  SetAddressToken("857293462398");
568
569
 
569
570
  QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
570
- QuicConnectionId server_connection_id = TestConnectionId();
571
+ QuicConnectionId original_connection_id, new_connection_id;
572
+ if (long_connection_id) {
573
+ original_connection_id = QuicConnectionId(
574
+ {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09});
575
+ new_connection_id =
576
+ QuicConnectionId({0x6c, 0x6b, 0x4b, 0xad, 0x8d, 0x00, 0x24, 0xd8});
577
+ } else {
578
+ original_connection_id = TestConnectionId();
579
+ new_connection_id = original_connection_id;
580
+ }
571
581
  QuicConfig client_config = DefaultQuicConfig();
572
582
  // Add a 2000-byte custom parameter to increase the length of the CHLO.
573
583
  constexpr auto kCustomParameterId =
@@ -576,7 +586,7 @@ void QuicDispatcherTestBase::TestTlsMultiPacketClientHello(
576
586
  client_config.custom_transport_parameters_to_send()[kCustomParameterId] =
577
587
  kCustomParameterValue;
578
588
  std::vector<std::unique_ptr<QuicReceivedPacket>> packets =
579
- GetFirstFlightOfPackets(version_, client_config, server_connection_id,
589
+ GetFirstFlightOfPackets(version_, client_config, original_connection_id,
580
590
  EmptyQuicConnectionId(),
581
591
  TestClientCryptoConfig());
582
592
  ASSERT_EQ(packets.size(), 2u);
@@ -585,11 +595,12 @@ void QuicDispatcherTestBase::TestTlsMultiPacketClientHello(
585
595
  }
586
596
 
587
597
  // Processing the first packet should not create a new session.
588
- EXPECT_CALL(*dispatcher_,
589
- ShouldCreateOrBufferPacketForConnection(
590
- ReceivedPacketInfoConnectionIdEquals(server_connection_id)));
598
+ EXPECT_CALL(
599
+ *dispatcher_,
600
+ ShouldCreateOrBufferPacketForConnection(
601
+ ReceivedPacketInfoConnectionIdEquals(original_connection_id)));
591
602
  ProcessReceivedPacket(std::move(packets[0]), client_address, version_,
592
- server_connection_id);
603
+ original_connection_id);
593
604
 
594
605
  EXPECT_EQ(dispatcher_->NumSessions(), 0u)
595
606
  << "No session should be created before the rest of the CHLO arrives.";
@@ -597,10 +608,10 @@ void QuicDispatcherTestBase::TestTlsMultiPacketClientHello(
597
608
  // Processing the second packet should create the new session.
598
609
  EXPECT_CALL(
599
610
  *dispatcher_,
600
- CreateQuicSession(server_connection_id, _, client_address,
611
+ CreateQuicSession(new_connection_id, _, client_address,
601
612
  Eq(ExpectedAlpn()), _, Eq(ParsedClientHelloForTest())))
602
613
  .WillOnce(Return(ByMove(CreateSession(
603
- dispatcher_.get(), config_, server_connection_id, client_address,
614
+ dispatcher_.get(), config_, new_connection_id, client_address,
604
615
  &mock_helper_, &mock_alarm_factory_, &crypto_config_,
605
616
  QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_))));
606
617
  EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()),
@@ -608,16 +619,29 @@ void QuicDispatcherTestBase::TestTlsMultiPacketClientHello(
608
619
  .Times(2);
609
620
 
610
621
  ProcessReceivedPacket(std::move(packets[1]), client_address, version_,
611
- server_connection_id);
622
+ original_connection_id);
612
623
  EXPECT_EQ(dispatcher_->NumSessions(), 1u);
613
624
  }
614
625
 
615
626
  TEST_P(QuicDispatcherTestAllVersions, TlsMultiPacketClientHello) {
616
- TestTlsMultiPacketClientHello(/*add_reordering=*/false);
627
+ TestTlsMultiPacketClientHello(/*add_reordering=*/false,
628
+ /*long_connection_id=*/false);
617
629
  }
618
630
 
619
631
  TEST_P(QuicDispatcherTestAllVersions, TlsMultiPacketClientHelloWithReordering) {
620
- TestTlsMultiPacketClientHello(/*add_reordering=*/true);
632
+ TestTlsMultiPacketClientHello(/*add_reordering=*/true,
633
+ /*long_connection_id=*/false);
634
+ }
635
+
636
+ TEST_P(QuicDispatcherTestAllVersions, TlsMultiPacketClientHelloWithLongId) {
637
+ TestTlsMultiPacketClientHello(/*add_reordering=*/false,
638
+ /*long_connection_id=*/true);
639
+ }
640
+
641
+ TEST_P(QuicDispatcherTestAllVersions,
642
+ TlsMultiPacketClientHelloWithReorderingAndLongId) {
643
+ TestTlsMultiPacketClientHello(/*add_reordering=*/true,
644
+ /*long_connection_id=*/true);
621
645
  }
622
646
 
623
647
  TEST_P(QuicDispatcherTestAllVersions, LegacyVersionEncapsulation) {
@@ -19,8 +19,6 @@ QUIC_FLAG(FLAGS_quic_restart_flag_quic_testonly_default_true, true)
19
19
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_bbr2_no_probe_up_exit_if_no_queue, true)
20
20
  // If true, 1) QUIC connections will use a lower minimum for trusted initial rtt, 2) When TRTT is received, QUIC server sessions will mark the initial rtt from CachedNetworkParameters as trusted.
21
21
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_use_lower_min_for_trusted_irtt, true)
22
- // If true, QUIC connection will be closed if it fails to serialize a coalesced packet.
23
- QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_close_connection_if_fail_to_serialzie_coalesced_packet2, true)
24
22
  // If true, QUIC will default enable MTU discovery at server, with a target of 1450 bytes.
25
23
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_mtu_discovery_at_server, false)
26
24
  // If true, QuicGsoBatchWriter will support release time if it is available and the process has the permission to do so.
@@ -33,6 +31,8 @@ QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_can_send_ack_frequency, true)
33
31
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_allow_client_enabled_bbr_v2, true)
34
32
  // If true, close read side but not write side in QuicSpdyStream::OnStreamReset().
35
33
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_on_stream_reset, true)
34
+ // If true, consider original connection ID as active before handshake completes.
35
+ QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_consider_original_connection_id_as_active_pre_handshake, false)
36
36
  // If true, consolidate more logic into SetRetransmissionAlarm to ensure the logic is applied consistently.
37
37
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_simplify_set_retransmission_alarm, true)
38
38
  // If true, default-enable 5RTO blachole detection.
@@ -52,19 +52,19 @@ QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_version_draft_29, false)
52
52
  // If true, disable blackhole detection on server side.
53
53
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_disable_server_blackhole_detection, false)
54
54
  // If true, disable resumption when receiving NRES connection option.
55
- QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_disable_resumption, false)
55
+ QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_disable_resumption, true)
56
56
  // If true, discard INITIAL packet if the key has been dropped.
57
57
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_discard_initial_packet_with_key_dropped, true)
58
58
  // If true, do not bundle ACK while sending PATH_CHALLENGE on alternative path.
59
59
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_not_bundle_ack_on_alternative_path, true)
60
60
  // If true, enable server retransmittable on wire PING.
61
61
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_server_on_wire_ping, true)
62
- // If true, flush creator after coalesce packet of higher space.
63
- QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_flush_after_coalesce_higher_space_packets, true)
64
62
  // If true, flush pending frames as well as pending padding bytes on connection migration.
65
63
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_flush_pending_frames_and_padding_bytes_on_migration, true)
66
64
  // If true, ietf connection migration is no longer conditioned on connection option RVCM.
67
65
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_remove_connection_migration_connection_option_v2, false)
66
+ // If true, include offset in QUIC STREAM_DATA_BLOCKED and DATA_BLOCKED frames.
67
+ QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_include_offset_in_blocked_frames, false)
68
68
  // If true, include stream information in idle timeout connection close detail.
69
69
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_add_stream_info_to_idle_close_detail, true)
70
70
  // If true, quic server will send ENABLE_CONNECT_PROTOCOL setting and and endpoint will validate required request/response headers and extended CONNECT mechanism and update code counts of valid/invalid headers.
@@ -77,18 +77,14 @@ QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_require_handshake_confirmation, false)
77
77
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_retire_cid_on_reverse_path_validation_failure, true)
78
78
  // If true, server sends bandwidth eastimate when network is idle for a while.
79
79
  QUIC_FLAG(FLAGS_quic_restart_flag_quic_enable_sending_bandwidth_estimate_when_network_idle, true)
80
- // If true, servers drop received packets with changed server address.
81
- QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_drop_packets_with_changed_server_address, true)
82
80
  // If true, set burst token to 2 in cwnd bootstrapping experiment.
83
81
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_conservative_bursts, false)
84
82
  // If true, stop resetting ideal_next_packet_send_time_ in pacing sender.
85
83
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_donot_reset_ideal_next_packet_send_time, false)
86
- // If true, update ACK timeout based on packet receipt time rather than now.
87
- QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_update_ack_timeout_on_receipt_time, true)
88
84
  // If true, use BBRv2 as the default congestion controller. Takes precedence over --quic_default_to_bbr.
89
85
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_default_to_bbr_v2, false)
90
86
  // If true, use PING manager to manage the PING alarm.
91
- QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_use_ping_manager, true)
87
+ QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_use_ping_manager2, true)
92
88
  // If true, use new connection ID in connection migration.
93
89
  QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_connection_migration_use_new_cid_v2, true)
94
90
  // If true, uses conservative cwnd gain and pacing gain when cwnd gets bootstrapped.
@@ -232,10 +232,10 @@ void QuicFlowController::UpdateReceiveWindowOffsetAndSendWindowUpdate(
232
232
  SendWindowUpdate();
233
233
  }
234
234
 
235
- bool QuicFlowController::ShouldSendBlocked() {
235
+ void QuicFlowController::MaybeSendBlocked() {
236
236
  if (SendWindowSize() != 0 ||
237
237
  last_blocked_send_window_offset_ >= send_window_offset_) {
238
- return false;
238
+ return;
239
239
  }
240
240
  QUIC_DLOG(INFO) << ENDPOINT << LogLabel() << " is flow control blocked. "
241
241
  << "Send window: " << SendWindowSize()
@@ -247,7 +247,7 @@ bool QuicFlowController::ShouldSendBlocked() {
247
247
  // Keep track of when we last sent a BLOCKED frame so that we only send one
248
248
  // at a given send offset.
249
249
  last_blocked_send_window_offset_ = send_window_offset_;
250
- return true;
250
+ session_->SendBlocked(id_, last_blocked_send_window_offset_);
251
251
  }
252
252
 
253
253
  bool QuicFlowController::UpdateSendWindowOffset(
@@ -78,8 +78,8 @@ class QUIC_EXPORT_PRIVATE QuicFlowController
78
78
 
79
79
  QuicByteCount receive_window_size() const { return receive_window_size_; }
80
80
 
81
- // Returns whether a BLOCKED frame should be sent.
82
- bool ShouldSendBlocked();
81
+ // Sends a BLOCKED frame if needed.
82
+ void MaybeSendBlocked();
83
83
 
84
84
  // Returns true if flow control send limits have been reached.
85
85
  bool IsBlocked() const;
@@ -18,6 +18,7 @@
18
18
 
19
19
  using testing::_;
20
20
  using testing::Invoke;
21
+ using testing::StrictMock;
21
22
 
22
23
  namespace quic {
23
24
  namespace test {
@@ -43,7 +44,7 @@ class QuicFlowControllerTest : public QuicTest {
43
44
  connection_->SetEncrypter(
44
45
  ENCRYPTION_FORWARD_SECURE,
45
46
  std::make_unique<NullEncrypter>(connection_->perspective()));
46
- session_ = std::make_unique<MockQuicSession>(connection_);
47
+ session_ = std::make_unique<StrictMock<MockQuicSession>>(connection_);
47
48
  flow_controller_ = std::make_unique<QuicFlowController>(
48
49
  session_.get(), stream_id_, /*is_connection_flow_controller*/ false,
49
50
  send_window_, receive_window_, kStreamReceiveWindowLimit,
@@ -58,7 +59,7 @@ class QuicFlowControllerTest : public QuicTest {
58
59
  MockQuicConnectionHelper helper_;
59
60
  MockAlarmFactory alarm_factory_;
60
61
  MockQuicConnection* connection_;
61
- std::unique_ptr<MockQuicSession> session_;
62
+ std::unique_ptr<StrictMock<MockQuicSession>> session_;
62
63
  MockFlowController session_flow_controller_;
63
64
  bool should_auto_tune_receive_window_ = false;
64
65
  };
@@ -81,7 +82,8 @@ TEST_F(QuicFlowControllerTest, SendingBytes) {
81
82
  EXPECT_EQ(0u, flow_controller_->SendWindowSize());
82
83
 
83
84
  // BLOCKED frame should get sent.
84
- EXPECT_TRUE(flow_controller_->ShouldSendBlocked());
85
+ EXPECT_CALL(*session_, SendBlocked(_, _)).Times(1);
86
+ flow_controller_->MaybeSendBlocked();
85
87
 
86
88
  // Update the send window, and verify this has unblocked.
87
89
  EXPECT_TRUE(flow_controller_->UpdateSendWindowOffset(2 * send_window_));
@@ -164,14 +166,16 @@ TEST_F(QuicFlowControllerTest, OnlySendBlockedFrameOncePerOffset) {
164
166
  EXPECT_EQ(0u, flow_controller_->SendWindowSize());
165
167
 
166
168
  // BLOCKED frame should get sent.
167
- EXPECT_TRUE(flow_controller_->ShouldSendBlocked());
169
+ EXPECT_CALL(*session_, SendBlocked(_, _)).Times(1);
170
+ flow_controller_->MaybeSendBlocked();
168
171
 
169
172
  // BLOCKED frame should not get sent again until our send offset changes.
170
- EXPECT_FALSE(flow_controller_->ShouldSendBlocked());
171
- EXPECT_FALSE(flow_controller_->ShouldSendBlocked());
172
- EXPECT_FALSE(flow_controller_->ShouldSendBlocked());
173
- EXPECT_FALSE(flow_controller_->ShouldSendBlocked());
174
- EXPECT_FALSE(flow_controller_->ShouldSendBlocked());
173
+ EXPECT_CALL(*session_, SendBlocked(_, _)).Times(0);
174
+ flow_controller_->MaybeSendBlocked();
175
+ flow_controller_->MaybeSendBlocked();
176
+ flow_controller_->MaybeSendBlocked();
177
+ flow_controller_->MaybeSendBlocked();
178
+ flow_controller_->MaybeSendBlocked();
175
179
 
176
180
  // Update the send window, then send enough bytes to block again.
177
181
  EXPECT_TRUE(flow_controller_->UpdateSendWindowOffset(2 * send_window_));
@@ -182,7 +186,8 @@ TEST_F(QuicFlowControllerTest, OnlySendBlockedFrameOncePerOffset) {
182
186
  EXPECT_EQ(0u, flow_controller_->SendWindowSize());
183
187
 
184
188
  // BLOCKED frame should get sent as send offset has changed.
185
- EXPECT_TRUE(flow_controller_->ShouldSendBlocked());
189
+ EXPECT_CALL(*session_, SendBlocked(_, _)).Times(1);
190
+ flow_controller_->MaybeSendBlocked();
186
191
  }
187
192
 
188
193
  TEST_F(QuicFlowControllerTest, ReceivingBytesFastIncreasesFlowWindow) {
@@ -5701,7 +5701,7 @@ bool QuicFramer::AppendAckFrameAndTypeByte(const QuicAckFrame& frame,
5701
5701
  ++num_ack_blocks_written;
5702
5702
  }
5703
5703
  if (num_ack_blocks_written >= num_ack_blocks) {
5704
- if (QUIC_PREDICT_FALSE(num_ack_blocks_written != num_ack_blocks)) {
5704
+ if (ABSL_PREDICT_FALSE(num_ack_blocks_written != num_ack_blocks)) {
5705
5705
  QUIC_BUG(quic_bug_10850_85)
5706
5706
  << "Wrote " << num_ack_blocks_written << ", expected to write "
5707
5707
  << num_ack_blocks;
@@ -12,6 +12,7 @@
12
12
 
13
13
  #include <cstdint>
14
14
 
15
+ #include "absl/base/optimization.h"
15
16
  #include "quiche/quic/core/quic_arena_scoped_ptr.h"
16
17
  #include "quiche/quic/core/quic_types.h"
17
18
  #include "quiche/quic/platform/api/quic_bug_tracker.h"
@@ -37,7 +38,7 @@ class QUIC_EXPORT_PRIVATE QuicOneBlockArena {
37
38
  << "Object is too large for the arena.";
38
39
  static_assert(alignof(T) > 1,
39
40
  "Objects added to the arena must be at least 2B aligned.");
40
- if (QUIC_PREDICT_FALSE(offset_ > ArenaSize - AlignedSize<T>())) {
41
+ if (ABSL_PREDICT_FALSE(offset_ > ArenaSize - AlignedSize<T>())) {
41
42
  QUIC_BUG(quic_bug_10593_1)
42
43
  << "Ran out of space in QuicOneBlockArena at " << this
43
44
  << ", max size was " << ArenaSize << ", failing request was "
@@ -69,7 +70,7 @@ class QUIC_EXPORT_PRIVATE QuicOneBlockArena {
69
70
 
70
71
  // QuicConnections currently use around 1KB of polymorphic types which would
71
72
  // ordinarily be on the heap. Instead, store them inline in an arena.
72
- using QuicConnectionArena = QuicOneBlockArena<1248>;
73
+ using QuicConnectionArena = QuicOneBlockArena<1280>;
73
74
 
74
75
  } // namespace quic
75
76
 
@@ -10,7 +10,7 @@
10
10
  #include "quiche/quic/platform/api/quic_test.h"
11
11
  #include "quiche/quic/test_tools/quic_test_utils.h"
12
12
 
13
- namespace quic {
13
+ namespace quic::test {
14
14
  namespace {
15
15
 
16
16
  static const uint32_t kMaxAlign = 8;
@@ -56,4 +56,4 @@ TEST_F(QuicOneBlockArenaTest, NoOverlaps) {
56
56
  }
57
57
 
58
58
  } // namespace
59
- } // namespace quic
59
+ } // namespace quic::test
@@ -511,8 +511,7 @@ size_t QuicPacketCreator::ReserializeInitialPacketInCoalescedPacket(
511
511
  << "Attempt to serialize empty ENCRYPTION_INITIAL packet in coalesced "
512
512
  "packet";
513
513
 
514
- if (close_connection_if_fail_to_serialzie_coalesced_packet_ &&
515
- HasPendingFrames()) {
514
+ if (HasPendingFrames()) {
516
515
  QUIC_BUG(quic_packet_creator_unexpected_queued_frames)
517
516
  << "Unexpected queued frames: " << GetPendingFramesInfo();
518
517
  return 0;
@@ -549,15 +548,8 @@ size_t QuicPacketCreator::ReserializeInitialPacketInCoalescedPacket(
549
548
  }
550
549
  }
551
550
 
552
- if (close_connection_if_fail_to_serialzie_coalesced_packet_) {
553
- QUIC_RELOADABLE_FLAG_COUNT_N(
554
- quic_close_connection_if_fail_to_serialzie_coalesced_packet2, 1, 2);
555
- }
556
-
557
- if (!SerializePacket(
558
- QuicOwnedPacketBuffer(buffer, nullptr), buffer_len,
559
- /*allow_padding=*/
560
- !close_connection_if_fail_to_serialzie_coalesced_packet_)) {
551
+ if (!SerializePacket(QuicOwnedPacketBuffer(buffer, nullptr), buffer_len,
552
+ /*allow_padding=*/false)) {
561
553
  return 0;
562
554
  }
563
555
  const size_t encrypted_length = packet_.encrypted_length;
@@ -485,10 +485,6 @@ class QUIC_EXPORT_PRIVATE QuicPacketCreator {
485
485
 
486
486
  const QuicSocketAddress& peer_address() const { return packet_.peer_address; }
487
487
 
488
- bool close_connection_if_fail_to_serialzie_coalesced_packet() const {
489
- return close_connection_if_fail_to_serialzie_coalesced_packet_;
490
- }
491
-
492
488
  private:
493
489
  friend class test::QuicPacketCreatorPeer;
494
490
 
@@ -692,10 +688,6 @@ class QUIC_EXPORT_PRIVATE QuicPacketCreator {
692
688
 
693
689
  // Whether to attempt protecting initial packets with chaos.
694
690
  bool chaos_protection_enabled_;
695
-
696
- const bool close_connection_if_fail_to_serialzie_coalesced_packet_ =
697
- GetQuicReloadableFlag(
698
- quic_close_connection_if_fail_to_serialzie_coalesced_packet2);
699
691
  };
700
692
 
701
693
  } // namespace quic
@@ -8,6 +8,11 @@ namespace quic {
8
8
 
9
9
  namespace {
10
10
 
11
+ // Maximum shift used to calculate retransmittable on wire timeout. For 200ms
12
+ // initial retransmittable on wire delay, this would get a maximum of 200ms * (1
13
+ // << 10) = 204.8s
14
+ const int kMaxRetransmittableOnWireDelayShift = 10;
15
+
11
16
  class AlarmDelegate : public QuicAlarm::DelegateWithContext {
12
17
  public:
13
18
  explicit AlarmDelegate(QuicPingManager* manager,
@@ -47,11 +52,6 @@ void QuicPingManager::SetAlarm(QuicTime now, bool should_keep_alive,
47
52
  return;
48
53
  }
49
54
  alarm_->Update(earliest_deadline, kAlarmGranularity);
50
- if (GetQuicFlag(
51
- FLAGS_quic_max_aggressive_retransmittable_on_wire_ping_count) != 0) {
52
- ++consecutive_retransmittable_on_wire_count_;
53
- }
54
- ++retransmittable_on_wire_count_;
55
55
  }
56
56
 
57
57
  void QuicPingManager::OnAlarm() {
@@ -65,6 +65,12 @@ void QuicPingManager::OnAlarm() {
65
65
  // to SetAlarm later.
66
66
  if (earliest_deadline == retransmittable_on_wire_deadline_) {
67
67
  retransmittable_on_wire_deadline_ = QuicTime::Zero();
68
+ if (GetQuicFlag(
69
+ FLAGS_quic_max_aggressive_retransmittable_on_wire_ping_count) !=
70
+ 0) {
71
+ ++consecutive_retransmittable_on_wire_count_;
72
+ }
73
+ ++retransmittable_on_wire_count_;
68
74
  delegate_->OnRetransmittableOnWireTimeout();
69
75
  return;
70
76
  }
@@ -125,8 +131,9 @@ void QuicPingManager::UpdateDeadlines(QuicTime now, bool should_keep_alive,
125
131
  max_aggressive_retransmittable_on_wire_count) {
126
132
  // Exponentially back off the timeout if the number of consecutive
127
133
  // retransmittable on wire pings has exceeds the allowance.
128
- int shift = consecutive_retransmittable_on_wire_count_ -
129
- max_aggressive_retransmittable_on_wire_count;
134
+ int shift = std::min(consecutive_retransmittable_on_wire_count_ -
135
+ max_aggressive_retransmittable_on_wire_count,
136
+ kMaxRetransmittableOnWireDelayShift);
130
137
  retransmittable_on_wire_timeout =
131
138
  initial_retransmittable_on_wire_timeout_ * (1 << shift);
132
139
  }
@@ -134,13 +141,6 @@ void QuicPingManager::UpdateDeadlines(QuicTime now, bool should_keep_alive,
134
141
  retransmittable_on_wire_deadline_ <
135
142
  now + retransmittable_on_wire_timeout) {
136
143
  // Alarm is set to an earlier time. Do not postpone it.
137
- QUIC_BUG_IF(quic_retransmittable_on_wire_deadline_is_in_past,
138
- retransmittable_on_wire_deadline_ < now)
139
- << "QUIC retransmittable PING deadline is in past, now: "
140
- << now.ToDebuggingValue() << ", retransmittable_on_wire_deadline: "
141
- << retransmittable_on_wire_deadline_.ToDebuggingValue()
142
- << ", difference: "
143
- << (now - retransmittable_on_wire_deadline_).ToDebuggingValue();
144
144
  return;
145
145
  }
146
146
  retransmittable_on_wire_deadline_ = now + retransmittable_on_wire_timeout;
@@ -16,6 +16,11 @@ class QuicPingManagerPeer {
16
16
  static QuicAlarm* GetAlarm(QuicPingManager* manager) {
17
17
  return manager->alarm_.get();
18
18
  }
19
+
20
+ static void SetPerspective(QuicPingManager* manager,
21
+ Perspective perspective) {
22
+ manager->perspective_ = perspective;
23
+ }
19
24
  };
20
25
 
21
26
  namespace {
@@ -292,6 +297,9 @@ TEST_F(QuicPingManagerTest,
292
297
  !kHasInflightPackets);
293
298
  EXPECT_EQ(initial_retransmittable_on_wire_timeout,
294
299
  alarm_->deadline() - clock_.ApproximateNow());
300
+ EXPECT_CALL(delegate_, OnRetransmittableOnWireTimeout());
301
+ clock_.AdvanceTime(initial_retransmittable_on_wire_timeout);
302
+ alarm_->Fire();
295
303
 
296
304
  for (int i = 0; i < kMaxAggressiveRetransmittableOnWireCount; i++) {
297
305
  manager_.SetAlarm(clock_.ApproximateNow(), kShouldKeepAlive,
@@ -375,6 +383,46 @@ TEST_F(QuicPingManagerTest, RetransmittableOnWireLimit) {
375
383
  EXPECT_FALSE(alarm_->IsSet());
376
384
  }
377
385
 
386
+ TEST_F(QuicPingManagerTest, MaxRetransmittableOnWireDelayShift) {
387
+ QuicPingManagerPeer::SetPerspective(&manager_, Perspective::IS_SERVER);
388
+ const int kMaxAggressiveRetransmittableOnWireCount = 3;
389
+ SetQuicFlag(FLAGS_quic_max_aggressive_retransmittable_on_wire_ping_count,
390
+ kMaxAggressiveRetransmittableOnWireCount);
391
+ const QuicTime::Delta initial_retransmittable_on_wire_timeout =
392
+ QuicTime::Delta::FromMilliseconds(200);
393
+ manager_.set_initial_retransmittable_on_wire_timeout(
394
+ initial_retransmittable_on_wire_timeout);
395
+
396
+ for (int i = 0; i <= kMaxAggressiveRetransmittableOnWireCount; i++) {
397
+ manager_.SetAlarm(clock_.ApproximateNow(), kShouldKeepAlive,
398
+ !kHasInflightPackets);
399
+ EXPECT_TRUE(alarm_->IsSet());
400
+ EXPECT_EQ(initial_retransmittable_on_wire_timeout,
401
+ alarm_->deadline() - clock_.ApproximateNow());
402
+ clock_.AdvanceTime(initial_retransmittable_on_wire_timeout);
403
+ EXPECT_CALL(delegate_, OnRetransmittableOnWireTimeout());
404
+ alarm_->Fire();
405
+ manager_.SetAlarm(clock_.ApproximateNow(), kShouldKeepAlive,
406
+ kHasInflightPackets);
407
+ }
408
+ for (int i = 1; i <= 20; ++i) {
409
+ manager_.SetAlarm(clock_.ApproximateNow(), kShouldKeepAlive,
410
+ !kHasInflightPackets);
411
+ EXPECT_TRUE(alarm_->IsSet());
412
+ if (i <= 10) {
413
+ EXPECT_EQ(initial_retransmittable_on_wire_timeout * (1 << i),
414
+ alarm_->deadline() - clock_.ApproximateNow());
415
+ } else {
416
+ // Verify shift is capped.
417
+ EXPECT_EQ(initial_retransmittable_on_wire_timeout * (1 << 10),
418
+ alarm_->deadline() - clock_.ApproximateNow());
419
+ }
420
+ clock_.AdvanceTime(alarm_->deadline() - clock_.ApproximateNow());
421
+ EXPECT_CALL(delegate_, OnRetransmittableOnWireTimeout());
422
+ alarm_->Fire();
423
+ }
424
+ }
425
+
378
426
  } // namespace
379
427
 
380
428
  } // namespace test
@@ -267,24 +267,9 @@ void QuicReceivedPacketManager::MaybeUpdateAckTimeout(
267
267
  return;
268
268
  }
269
269
 
270
- QuicTime ack_timeout_base = now;
271
- const bool quic_update_ack_timeout_on_receipt_time =
272
- GetQuicReloadableFlag(quic_update_ack_timeout_on_receipt_time);
273
- if (quic_update_ack_timeout_on_receipt_time) {
274
- if (last_packet_receipt_time <= now) {
275
- QUIC_CODE_COUNT(quic_update_ack_timeout_on_receipt_time);
276
- ack_timeout_base = last_packet_receipt_time;
277
- } else {
278
- QUIC_CODE_COUNT(quic_update_ack_timeout_on_now);
279
- ack_timeout_base = now;
280
- }
281
- }
282
- QuicTime updated_ack_time =
283
- ack_timeout_base +
284
- GetMaxAckDelay(last_received_packet_number, *rtt_stats);
285
- if (quic_update_ack_timeout_on_receipt_time) {
286
- updated_ack_time = std::max(now, updated_ack_time);
287
- }
270
+ const QuicTime updated_ack_time = std::max(
271
+ now, std::min(last_packet_receipt_time, now) +
272
+ GetMaxAckDelay(last_received_packet_number, *rtt_stats));
288
273
  if (!ack_timeout_.IsInitialized() || ack_timeout_ > updated_ack_time) {
289
274
  ack_timeout_ = updated_ack_time;
290
275
  }
@@ -650,13 +650,8 @@ TEST_F(QuicReceivedPacketManagerTest, UpdateAckTimeoutOnPacketReceiptTime) {
650
650
  kInstigateAck, QuicPacketNumber(3),
651
651
  /*last_packet_receipt_time=*/packet_receipt_time3,
652
652
  clock_.ApproximateNow(), &rtt_stats_);
653
- if (GetQuicReloadableFlag(quic_update_ack_timeout_on_receipt_time)) {
654
- // Make sure ACK timeout is based on receipt time.
655
- CheckAckTimeout(packet_receipt_time3 + kDelayedAckTime);
656
- } else {
657
- // Make sure ACK timeout is based on now.
658
- CheckAckTimeout(clock_.ApproximateNow() + kDelayedAckTime);
659
- }
653
+ // Make sure ACK timeout is based on receipt time.
654
+ CheckAckTimeout(packet_receipt_time3 + kDelayedAckTime);
660
655
 
661
656
  RecordPacketReceipt(4, clock_.ApproximateNow());
662
657
  MaybeUpdateAckTimeout(kInstigateAck, 4);
@@ -677,13 +672,8 @@ TEST_F(QuicReceivedPacketManagerTest,
677
672
  kInstigateAck, QuicPacketNumber(3),
678
673
  /*last_packet_receipt_time=*/packet_receipt_time3,
679
674
  clock_.ApproximateNow(), &rtt_stats_);
680
- if (GetQuicReloadableFlag(quic_update_ack_timeout_on_receipt_time)) {
681
- // Given 100ms > ack delay, verify immediate ACK.
682
- CheckAckTimeout(clock_.ApproximateNow());
683
- } else {
684
- // Make sure ACK timeout is based on now.
685
- CheckAckTimeout(clock_.ApproximateNow() + kDelayedAckTime);
686
- }
675
+ // Given 100ms > ack delay, verify immediate ACK.
676
+ CheckAckTimeout(clock_.ApproximateNow());
687
677
  }
688
678
 
689
679
  } // namespace