@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.
- package/.github/workflows/npm-publish-packages.yml +0 -0
- package/CMakeLists.txt +2 -0
- package/package.json +1 -1
- package/readme.md +0 -0
- package/src/http3serversession.h +1 -1
- package/src/webtransport.js +4 -2
- package/third_party/boringssl/src/CMakeLists.txt +9 -12
- package/third_party/boringssl/src/crypto/CMakeLists.txt +2 -3
- package/third_party/boringssl/src/crypto/asn1/time_support.c +206 -206
- package/third_party/boringssl/src/crypto/bio/socket_helper.c +124 -122
- package/third_party/boringssl/src/crypto/evp/digestsign.c +268 -231
- package/third_party/boringssl/src/crypto/evp/p_ec.c +286 -286
- package/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.c +246 -236
- package/third_party/boringssl/src/crypto/fipsmodule/aes/mode_wrappers.c +124 -122
- package/third_party/boringssl/src/crypto/fipsmodule/bcm.c +3 -0
- package/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.c +246 -230
- package/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h +734 -715
- package/third_party/boringssl/src/crypto/fipsmodule/bn/random.c +349 -341
- package/third_party/boringssl/src/crypto/fipsmodule/cipher/cipher.c +670 -648
- package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.c +1504 -1472
- package/third_party/boringssl/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +435 -446
- package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_3des_cmac_tests.txt +0 -0
- package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_aes128_cmac_tests.txt +0 -0
- package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_aes192_cmac_tests.txt +0 -0
- package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_aes256_cmac_tests.txt +0 -0
- package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +318 -278
- package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cmac_test.cc +268 -267
- package/third_party/boringssl/src/crypto/fipsmodule/dh/dh.c +5 -1
- package/third_party/boringssl/src/crypto/fipsmodule/ec/ec.c +11 -17
- package/third_party/boringssl/src/crypto/fipsmodule/ec/ec_key.c +15 -4
- package/third_party/boringssl/src/crypto/fipsmodule/ec/internal.h +2 -6
- package/third_party/boringssl/src/crypto/fipsmodule/ec/p224-64.c +1164 -1180
- package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.c +3 -3
- package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz_test.cc +2 -2
- package/third_party/boringssl/src/crypto/fipsmodule/ec/p256.c +44 -33
- package/third_party/boringssl/src/crypto/fipsmodule/ec/scalar.c +169 -175
- package/third_party/boringssl/src/crypto/fipsmodule/ec/simple.c +352 -357
- package/third_party/boringssl/src/crypto/fipsmodule/ecdh/ecdh.c +4 -0
- package/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.c +14 -9
- package/third_party/boringssl/src/crypto/fipsmodule/hmac/hmac.c +256 -235
- package/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c +204 -202
- package/third_party/boringssl/src/crypto/fipsmodule/rsa/padding.c +702 -695
- package/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa_impl.c +7 -2
- package/third_party/boringssl/src/crypto/fipsmodule/self_check/self_check.c +7 -0
- package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
- package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator.c +333 -0
- package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator_test.cc +2410 -0
- package/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.c +359 -357
- package/third_party/boringssl/src/crypto/fipsmodule/sha/sha256.c +325 -321
- package/third_party/boringssl/src/crypto/fipsmodule/sha/sha512.c +510 -508
- package/third_party/boringssl/src/crypto/fipsmodule/tls/kdf.c +177 -165
- package/third_party/boringssl/src/crypto/internal.h +13 -0
- package/third_party/boringssl/src/crypto/trust_token/trust_token_test.cc +884 -884
- package/third_party/boringssl/src/crypto/x509/internal.h +0 -2
- package/third_party/boringssl/src/crypto/x509/t_crl.c +148 -148
- package/third_party/boringssl/src/crypto/x509/t_req.c +249 -250
- package/third_party/boringssl/src/crypto/x509/t_x509.c +2 -3
- package/third_party/boringssl/src/crypto/x509/x509_req.c +262 -304
- package/third_party/boringssl/src/crypto/x509/x509_set.c +250 -240
- package/third_party/boringssl/src/crypto/x509/x509_test.cc +466 -4
- package/third_party/boringssl/src/crypto/x509/x509cset.c +292 -279
- package/third_party/boringssl/src/crypto/x509/x509rset.c +89 -86
- package/third_party/boringssl/src/crypto/x509/x_crl.c +37 -125
- package/third_party/boringssl/src/crypto/x509/x_req.c +114 -109
- package/third_party/boringssl/src/crypto/x509/x_x509.c +394 -394
- package/third_party/boringssl/src/crypto/x509v3/v3_akey.c +11 -16
- package/third_party/boringssl/src/crypto/x509v3/v3_alt.c +644 -642
- package/third_party/boringssl/src/crypto/x509v3/v3_bcons.c +130 -133
- package/third_party/boringssl/src/crypto/x509v3/v3_bitst.c +149 -144
- package/third_party/boringssl/src/crypto/x509v3/v3_cpols.c +496 -500
- package/third_party/boringssl/src/crypto/x509v3/v3_enum.c +105 -106
- package/third_party/boringssl/src/crypto/x509v3/v3_ia5.c +126 -121
- package/third_party/boringssl/src/crypto/x509v3/v3_info.c +206 -218
- package/third_party/boringssl/src/crypto/x509v3/v3_int.c +97 -91
- package/third_party/boringssl/src/crypto/x509v3/v3_pci.c +290 -289
- package/third_party/boringssl/src/crypto/x509v3/v3_skey.c +161 -156
- package/third_party/boringssl/src/crypto/x509v3/v3_utl.c +5 -3
- package/third_party/boringssl/src/include/openssl/aead.h +480 -480
- package/third_party/boringssl/src/include/openssl/asn1.h +2 -0
- package/third_party/boringssl/src/include/openssl/base.h +1 -1
- package/third_party/boringssl/src/include/openssl/service_indicator.h +96 -0
- package/third_party/boringssl/src/include/openssl/ssl.h +7 -0
- package/third_party/boringssl/src/include/openssl/x509.h +11 -33
- package/third_party/boringssl/src/include/openssl/x509v3.h +990 -1018
- package/third_party/boringssl/src/sources.cmake +4 -4
- package/third_party/boringssl/src/ssl/internal.h +10 -0
- package/third_party/boringssl/src/ssl/ssl_lib.cc +3081 -3072
- package/third_party/boringssl/src/ssl/ssl_test.cc +46 -0
- package/third_party/boringssl/src/ssl/tls13_server.cc +4 -6
- package/third_party/boringssl/src/util/bot/DEPS +14 -27
- package/third_party/boringssl/src/util/bot/UPDATING +3 -9
- package/third_party/boringssl/src/util/bot/update_clang.py +172 -172
- package/third_party/boringssl/src/util/bot/vs_toolchain.py +3 -3
- package/third_party/quiche/.bazelrc +8 -0
- package/third_party/quiche/BUILD.bazel +7 -0
- package/third_party/quiche/WHITESPACE +3 -1
- package/third_party/quiche/WORKSPACE.bazel +87 -0
- package/third_party/quiche/build/BUILD.bazel +7 -0
- package/third_party/quiche/build/source_list.bzl +1511 -0
- package/third_party/quiche/build/source_list.gni +1511 -0
- package/third_party/quiche/build/source_list.json +1511 -0
- package/third_party/quiche/build/test.bzl +26 -0
- package/third_party/quiche/build/zlib.BUILD +25 -0
- package/third_party/quiche/quiche/BUILD.bazel +270 -0
- package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_enums.cc +3 -3
- package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_enums.h +7 -7
- package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_frame.cc +39 -18
- package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_frame.h +11 -10
- package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_frame_test.cc +67 -63
- package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_headers.cc +13 -12
- package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_headers.h +16 -8
- package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_headers_test.cc +9 -9
- package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_visitor_interface.h +4 -4
- package/third_party/quiche/quiche/{common/balsa → balsa}/framer_interface.h +3 -3
- package/third_party/quiche/quiche/{common/balsa → balsa}/header_api.h +3 -3
- package/third_party/quiche/quiche/{common/balsa → balsa}/header_properties.cc +1 -1
- package/third_party/quiche/quiche/{common/balsa → balsa}/header_properties.h +3 -3
- package/third_party/quiche/quiche/{common/balsa → balsa}/header_properties_test.cc +1 -1
- package/third_party/quiche/quiche/{common/balsa → balsa}/http_validation_policy.cc +1 -1
- package/third_party/quiche/quiche/{common/balsa → balsa}/http_validation_policy.h +3 -3
- package/third_party/quiche/quiche/{common/balsa → balsa}/noop_balsa_visitor.h +4 -4
- package/third_party/quiche/quiche/{common/balsa → balsa}/simple_buffer.cc +22 -29
- package/third_party/quiche/quiche/{common/balsa → balsa}/simple_buffer.h +18 -16
- package/third_party/quiche/quiche/{common/balsa → balsa}/simple_buffer_test.cc +79 -32
- package/third_party/quiche/quiche/{common/balsa → balsa}/standard_header_map.cc +1 -1
- package/third_party/quiche/quiche/{common/balsa → balsa}/standard_header_map.h +3 -3
- package/third_party/quiche/quiche/common/platform/api/quiche_command_line_flags.h +6 -1
- package/third_party/quiche/quiche/common/platform/api/quiche_flags.h +8 -0
- package/third_party/quiche/quiche/common/platform/api/quiche_logging.h +0 -3
- package/third_party/quiche/quiche/common/platform/api/quiche_lower_case_string_test.cc +29 -0
- package/third_party/quiche/quiche/common/platform/api/quiche_test.h +5 -7
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quic_flags_impl.h +1 -1
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_bug_tracker_impl.h +3 -2
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.cc +41 -0
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h +33 -0
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_expect_bug_impl.h +15 -0
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h +84 -50
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h +25 -0
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_stack_trace_impl.cc +1 -1
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.cc +25 -0
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h +56 -0
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_output_impl.h +27 -0
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h +26 -0
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc +1 -0
- package/third_party/quiche/quiche/common/quiche_buffer_allocator_test.cc +1 -1
- package/third_party/quiche/quiche/common/quiche_mem_slice_storage.h +2 -3
- package/third_party/quiche/quiche/common/structured_headers.cc +14 -12
- package/third_party/quiche/quiche/http2/adapter/event_forwarder.cc +7 -5
- package/third_party/quiche/quiche/http2/adapter/event_forwarder.h +4 -2
- package/third_party/quiche/quiche/http2/adapter/event_forwarder_test.cc +14 -9
- package/third_party/quiche/quiche/http2/adapter/header_validator.cc +43 -19
- package/third_party/quiche/quiche/http2/adapter/header_validator.h +11 -40
- package/third_party/quiche/quiche/http2/adapter/header_validator_base.h +69 -0
- package/third_party/quiche/quiche/http2/adapter/header_validator_test.cc +73 -1
- package/third_party/quiche/quiche/http2/adapter/nghttp2_adapter_test.cc +66 -0
- package/third_party/quiche/quiche/http2/adapter/nghttp2_session_test.cc +8 -5
- package/third_party/quiche/quiche/http2/adapter/nghttp2_test.cc +1 -1
- package/third_party/quiche/quiche/http2/adapter/noop_header_validator.cc +22 -0
- package/third_party/quiche/quiche/http2/adapter/noop_header_validator.h +25 -0
- package/third_party/quiche/quiche/http2/adapter/noop_header_validator_test.cc +523 -0
- package/third_party/quiche/quiche/http2/adapter/oghttp2_adapter_test.cc +186 -5
- package/third_party/quiche/quiche/http2/adapter/oghttp2_session.cc +37 -43
- package/third_party/quiche/quiche/http2/adapter/oghttp2_session.h +22 -23
- package/third_party/quiche/quiche/http2/adapter/test_utils.cc +1 -1
- package/third_party/quiche/quiche/http2/adapter/window_manager_test.cc +11 -5
- package/third_party/quiche/quiche/http2/core/http2_trace_logging.cc +13 -11
- package/third_party/quiche/quiche/http2/core/http2_trace_logging.h +5 -4
- package/third_party/quiche/quiche/http2/core/priority_write_scheduler.h +42 -36
- package/third_party/quiche/quiche/http2/core/priority_write_scheduler_test.cc +2 -2
- package/third_party/quiche/quiche/http2/decoder/decode_buffer_test.cc +9 -9
- package/third_party/quiche/quiche/http2/decoder/decode_http2_structures_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/http2_frame_decoder_test.cc +14 -14
- package/third_party/quiche/quiche/http2/decoder/http2_structure_decoder_test.cc +17 -17
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/altsvc_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/continuation_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/data_payload_decoder_test.cc +2 -2
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/goaway_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/headers_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/ping_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/priority_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/priority_update_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/push_promise_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/rst_stream_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/settings_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/unknown_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/decoder/payload_decoders/window_update_payload_decoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/hpack/decoder/hpack_block_decoder_test.cc +2 -2
- package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_state_test.cc +8 -8
- package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_string_buffer_test.cc +4 -3
- package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_tables_test.cc +17 -17
- package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_test.cc +25 -25
- package/third_party/quiche/quiche/http2/hpack/decoder/hpack_entry_decoder_test.cc +2 -2
- package/third_party/quiche/quiche/http2/hpack/decoder/hpack_entry_type_decoder_test.cc +7 -6
- package/third_party/quiche/quiche/http2/hpack/decoder/hpack_string_decoder_test.cc +6 -6
- package/third_party/quiche/quiche/http2/hpack/decoder/hpack_whole_entry_buffer_test.cc +1 -1
- package/third_party/quiche/quiche/http2/hpack/huffman/hpack_huffman_decoder_test.cc +2 -2
- package/third_party/quiche/quiche/http2/hpack/huffman/hpack_huffman_encoder_test.cc +1 -1
- package/third_party/quiche/quiche/http2/hpack/huffman/hpack_huffman_transcoder_test.cc +5 -5
- package/third_party/quiche/quiche/http2/hpack/varint/hpack_varint_decoder_test.cc +4 -4
- package/third_party/quiche/quiche/http2/hpack/varint/hpack_varint_round_trip_test.cc +1 -1
- package/third_party/quiche/quiche/http2/http2_constants_test.cc +1 -1
- package/third_party/quiche/quiche/http2/http2_structures_test.cc +23 -22
- package/third_party/quiche/quiche/http2/test_tools/frame_decoder_state_test_util.cc +1 -1
- package/third_party/quiche/quiche/http2/test_tools/frame_decoder_state_test_util.h +1 -1
- package/third_party/quiche/quiche/http2/test_tools/frame_parts.cc +38 -38
- package/third_party/quiche/quiche/http2/test_tools/hpack_block_collector.cc +15 -15
- package/third_party/quiche/quiche/http2/test_tools/hpack_entry_collector.cc +24 -22
- package/third_party/quiche/quiche/http2/test_tools/hpack_string_collector.cc +5 -5
- package/third_party/quiche/quiche/http2/test_tools/http2_frame_builder_test.cc +70 -89
- package/third_party/quiche/quiche/http2/test_tools/payload_decoder_base_test_util.cc +1 -1
- package/third_party/quiche/quiche/http2/test_tools/payload_decoder_base_test_util.h +29 -26
- package/third_party/quiche/quiche/http2/test_tools/{random_decoder_test.cc → random_decoder_test_base.cc} +13 -10
- package/third_party/quiche/quiche/http2/test_tools/{random_decoder_test.h → random_decoder_test_base.h} +15 -17
- package/third_party/quiche/quiche/http2/test_tools/{random_decoder_test_test.cc → random_decoder_test_base_test.cc} +1 -1
- package/third_party/quiche/quiche/http2/test_tools/verify_macros.h +32 -0
- package/third_party/quiche/quiche/quic/core/congestion_control/bbr2_sender.cc +2 -1
- package/third_party/quiche/quiche/quic/core/congestion_control/bbr2_simulator_test.cc +3 -2
- package/third_party/quiche/quiche/quic/core/congestion_control/bbr_sender_test.cc +3 -2
- package/third_party/quiche/quiche/quic/core/congestion_control/rtt_stats.cc +3 -2
- package/third_party/quiche/quiche/quic/core/congestion_control/rtt_stats.h +2 -1
- package/third_party/quiche/quiche/quic/core/congestion_control/rtt_stats_test.cc +2 -13
- package/third_party/quiche/quiche/quic/core/crypto/certificate_view.cc +15 -0
- package/third_party/quiche/quiche/quic/core/crypto/certificate_view.h +7 -0
- package/third_party/quiche/quiche/quic/core/crypto/certificate_view_test.cc +16 -0
- package/third_party/quiche/quiche/quic/core/crypto/crypto_protocol.h +1 -0
- package/third_party/quiche/quiche/quic/core/crypto/proof_source.h +2 -2
- package/third_party/quiche/quiche/quic/core/crypto/proof_source_x509.cc +3 -5
- package/third_party/quiche/quiche/quic/core/crypto/proof_source_x509.h +1 -2
- package/third_party/quiche/quiche/quic/core/crypto/quic_crypto_server_config.cc +1 -1
- package/third_party/quiche/quiche/quic/core/crypto/quic_crypto_server_config.h +3 -3
- package/third_party/quiche/quiche/quic/core/frames/quic_blocked_frame.cc +2 -8
- package/third_party/quiche/quiche/quic/core/frames/quic_blocked_frame.h +0 -1
- package/third_party/quiche/quiche/quic/core/frames/quic_crypto_frame.h +2 -0
- package/third_party/quiche/quiche/quic/core/frames/quic_frames_test.cc +2 -1
- package/third_party/quiche/quiche/quic/core/http/capsule.cc +2 -22
- package/third_party/quiche/quiche/quic/core/http/capsule.h +0 -2
- package/third_party/quiche/quiche/quic/core/http/capsule_test.cc +1 -2
- package/third_party/quiche/quiche/quic/core/http/end_to_end_test.cc +148 -57
- package/third_party/quiche/quiche/quic/core/http/http_constants.cc +1 -1
- package/third_party/quiche/quiche/quic/core/http/http_constants.h +2 -2
- package/third_party/quiche/quiche/quic/core/http/quic_header_list_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/http/quic_headers_stream_test.cc +18 -14
- package/third_party/quiche/quiche/quic/core/http/quic_send_control_stream.h +2 -1
- package/third_party/quiche/quiche/quic/core/http/quic_send_control_stream_test.cc +3 -7
- package/third_party/quiche/quiche/quic/core/http/quic_server_session_base.h +4 -0
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_session.cc +47 -65
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_session.h +5 -17
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_session_test.cc +63 -54
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.cc +34 -91
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.h +1 -9
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream_test.cc +27 -134
- package/third_party/quiche/quiche/quic/core/http/spdy_utils.cc +0 -41
- package/third_party/quiche/quiche/quic/core/http/spdy_utils.h +0 -9
- package/third_party/quiche/quiche/quic/core/http/spdy_utils_test.cc +0 -32
- package/third_party/quiche/quiche/quic/core/http/web_transport_http3.cc +0 -1
- package/third_party/quiche/quiche/quic/core/packet_number_indexed_queue_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/qpack/qpack_header_table.cc +2 -1
- package/third_party/quiche/quiche/quic/core/qpack/qpack_send_stream.h +2 -1
- package/third_party/quiche/quiche/quic/core/quic_arena_scoped_ptr_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_connection.cc +68 -46
- package/third_party/quiche/quiche/quic/core/quic_connection.h +7 -6
- package/third_party/quiche/quiche/quic/core/quic_connection_context_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_connection_id_manager_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_connection_id_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_connection_test.cc +45 -132
- package/third_party/quiche/quiche/quic/core/quic_constants.h +0 -7
- package/third_party/quiche/quiche/quic/core/quic_control_frame_manager.cc +11 -3
- package/third_party/quiche/quiche/quic/core/quic_control_frame_manager.h +1 -1
- package/third_party/quiche/quiche/quic/core/quic_control_frame_manager_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_crypto_client_handshaker.cc +13 -1
- package/third_party/quiche/quiche/quic/core/quic_crypto_client_handshaker.h +3 -0
- package/third_party/quiche/quiche/quic/core/quic_crypto_client_handshaker_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_crypto_client_stream.cc +6 -0
- package/third_party/quiche/quiche/quic/core/quic_crypto_client_stream.h +8 -0
- package/third_party/quiche/quiche/quic/core/quic_crypto_server_stream.cc +26 -13
- package/third_party/quiche/quiche/quic/core/quic_crypto_server_stream.h +5 -2
- package/third_party/quiche/quiche/quic/core/quic_crypto_stream.cc +55 -47
- package/third_party/quiche/quiche/quic/core/quic_crypto_stream.h +15 -10
- package/third_party/quiche/quiche/quic/core/quic_crypto_stream_test.cc +34 -5
- package/third_party/quiche/quiche/quic/core/quic_dispatcher.cc +20 -11
- package/third_party/quiche/quiche/quic/core/quic_dispatcher_test.cc +37 -13
- package/third_party/quiche/quiche/quic/core/quic_flags_list.h +6 -10
- package/third_party/quiche/quiche/quic/core/quic_flow_controller.cc +3 -3
- package/third_party/quiche/quiche/quic/core/quic_flow_controller.h +2 -2
- package/third_party/quiche/quiche/quic/core/quic_flow_controller_test.cc +15 -10
- package/third_party/quiche/quiche/quic/core/quic_framer.cc +1 -1
- package/third_party/quiche/quiche/quic/core/quic_one_block_arena.h +3 -2
- package/third_party/quiche/quiche/quic/core/quic_one_block_arena_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_packet_creator.cc +3 -11
- package/third_party/quiche/quiche/quic/core/quic_packet_creator.h +0 -8
- package/third_party/quiche/quiche/quic/core/quic_ping_manager.cc +14 -14
- package/third_party/quiche/quiche/quic/core/quic_ping_manager_test.cc +48 -0
- package/third_party/quiche/quiche/quic/core/quic_received_packet_manager.cc +3 -18
- package/third_party/quiche/quiche/quic/core/quic_received_packet_manager_test.cc +4 -14
- package/third_party/quiche/quiche/quic/core/quic_server_id_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_session.cc +4 -4
- package/third_party/quiche/quiche/quic/core/quic_session.h +1 -1
- package/third_party/quiche/quiche/quic/core/quic_session_test.cc +21 -1
- package/third_party/quiche/quiche/quic/core/quic_stream.cc +4 -7
- package/third_party/quiche/quiche/quic/core/quic_stream_test.cc +2 -4
- package/third_party/quiche/quiche/quic/core/quic_trace_visitor_test.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_types.h +3 -8
- package/third_party/quiche/quiche/quic/core/quic_udp_socket_posix.cc +5 -4
- package/third_party/quiche/quiche/quic/core/quic_unacked_packet_map_test.cc +1 -1
- package/third_party/quiche/quiche/quic/core/quic_utils.cc +1 -1
- package/third_party/quiche/quiche/quic/core/quic_utils.h +2 -2
- package/third_party/quiche/quiche/quic/core/quic_versions_test.cc +0 -1
- package/third_party/quiche/quiche/quic/core/tls_client_handshaker.cc +13 -0
- package/third_party/quiche/quiche/quic/core/tls_client_handshaker.h +2 -0
- package/third_party/quiche/quiche/quic/core/tls_server_handshaker.cc +17 -3
- package/third_party/quiche/quiche/quic/core/tls_server_handshaker.h +3 -1
- package/third_party/quiche/quiche/quic/core/uber_received_packet_manager_test.cc +18 -10
- package/third_party/quiche/quiche/quic/masque/masque_client_bin.cc +6 -4
- package/third_party/quiche/quiche/quic/masque/masque_client_session.cc +23 -7
- package/third_party/quiche/quiche/quic/masque/masque_client_session.h +1 -1
- package/third_party/quiche/quiche/quic/masque/masque_server_backend.cc +13 -0
- package/third_party/quiche/quiche/quic/masque/masque_server_backend.h +2 -0
- package/third_party/quiche/quiche/quic/masque/masque_server_bin.cc +5 -4
- package/third_party/quiche/quiche/quic/masque/masque_server_session.cc +30 -40
- package/third_party/quiche/quiche/quic/masque/masque_server_session.h +1 -1
- package/third_party/quiche/quiche/quic/platform/api/quic_export.h +4 -4
- package/third_party/quiche/quiche/quic/platform/api/quic_flags.h +0 -1
- package/third_party/quiche/quiche/quic/platform/api/quic_logging.h +0 -6
- package/third_party/quiche/quiche/quic/platform/api/quic_test.h +6 -5
- package/third_party/quiche/quiche/quic/qbone/bonnet/icmp_reachable_test.cc +2 -2
- package/third_party/quiche/quiche/quic/qbone/bonnet/mock_qbone_tunnel.h +2 -0
- package/third_party/quiche/quiche/quic/qbone/bonnet/qbone_tunnel_interface.h +2 -0
- package/third_party/quiche/quiche/quic/qbone/bonnet/tun_device_controller_test.cc +2 -2
- package/third_party/quiche/quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc +2 -2
- package/third_party/quiche/quiche/quic/qbone/bonnet/tun_device_test.cc +2 -2
- package/third_party/quiche/quiche/quic/qbone/platform/netlink_test.cc +2 -2
- package/third_party/quiche/quiche/quic/qbone/platform/tcp_packet.cc +5 -4
- package/third_party/quiche/quiche/quic/qbone/qbone_client_session.cc +4 -2
- package/third_party/quiche/quiche/quic/qbone/qbone_packet_processor.cc +2 -1
- package/third_party/quiche/quiche/quic/qbone/qbone_packet_processor_test.cc +2 -2
- package/third_party/quiche/quiche/quic/qbone/qbone_server_session.cc +4 -2
- package/third_party/quiche/quiche/quic/qbone/qbone_session_base.cc +3 -2
- package/third_party/quiche/quiche/quic/qbone/qbone_stream.cc +4 -4
- package/third_party/quiche/quiche/quic/test_tools/quic_connection_peer.cc +1 -1
- package/third_party/quiche/quiche/quic/test_tools/quic_http_response_cache_data/test.example.com/index.html +63 -0
- package/third_party/quiche/quiche/quic/test_tools/quic_http_response_cache_data/test.example.com/map.html +65 -0
- package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.cc +4 -3
- package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.h +18 -1
- package/third_party/quiche/quiche/quic/test_tools/simulator/quic_endpoint_test.cc +1 -1
- package/third_party/quiche/quiche/quic/test_tools/simulator/simulator_test.cc +1 -1
- package/third_party/quiche/quiche/quic/test_tools/test_ticket_crypter.cc +1 -1
- package/third_party/quiche/quiche/quic/test_tools/test_ticket_crypter.h +2 -2
- package/third_party/quiche/quiche/quic/{core/crypto → tools}/crypto_message_printer_bin.cc +0 -0
- package/third_party/quiche/quiche/quic/{core/qpack → tools}/qpack_offline_decoder_bin.cc +0 -0
- package/third_party/quiche/quiche/quic/tools/quic_client_interop_test_bin.cc +4 -3
- package/third_party/quiche/quiche/quic/tools/quic_memory_cache_backend_test.cc +3 -31
- package/third_party/quiche/quiche/quic/tools/quic_packet_printer_bin.cc +2 -2
- package/third_party/quiche/quiche/quic/tools/quic_simple_server_session.h +1 -1
- package/third_party/quiche/quiche/quic/tools/quic_simple_server_session_test.cc +1 -1
- package/third_party/quiche/quiche/quic/tools/quic_toy_client.cc +52 -38
- package/third_party/quiche/quiche/quic/tools/quic_toy_server.cc +10 -7
- package/third_party/quiche/quiche/quic/tools/simple_ticket_crypter.cc +1 -1
- package/third_party/quiche/quiche/quic/tools/simple_ticket_crypter.h +1 -1
- package/third_party/quiche/quiche/quic/tools/web_transport_test_visitors.h +3 -2
- package/third_party/quiche/quiche/spdy/core/array_output_buffer.h +1 -1
- package/third_party/quiche/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc +1 -1
- package/third_party/quiche/quiche/spdy/core/hpack/hpack_encoder_test.cc +2 -1
- package/third_party/quiche/quiche/spdy/core/hpack/hpack_header_table_test.cc +1 -1
- package/third_party/quiche/quiche/spdy/core/hpack/hpack_round_trip_test.cc +2 -1
- package/third_party/quiche/quiche/spdy/core/hpack/hpack_static_table_test.cc +1 -1
- package/third_party/quiche/quiche/spdy/core/http2_frame_decoder_adapter.cc +8 -6
- package/third_party/quiche/quiche/spdy/core/http2_frame_decoder_adapter.h +17 -6
- package/third_party/quiche/quiche/spdy/core/metadata_extension.cc +1 -1
- package/third_party/quiche/quiche/spdy/core/metadata_extension_test.cc +1 -1
- package/third_party/quiche/quiche/spdy/core/spdy_framer_test.cc +21 -17
- package/third_party/quiche/quiche/spdy/core/spdy_intrusive_list_test.cc +3 -3
- package/third_party/quiche/quiche/spdy/core/spdy_no_op_visitor.h +6 -4
- package/third_party/quiche/quiche/spdy/core/spdy_pinnable_buffer_piece_test.cc +1 -1
- package/third_party/quiche/quiche/spdy/core/spdy_prefixed_buffer_reader_test.cc +1 -1
- package/third_party/quiche/quiche/spdy/core/spdy_protocol_test.cc +1 -1
- package/third_party/quiche/quiche/spdy/test_tools/mock_spdy_framer_visitor.h +5 -4
- package/third_party/boringssl/src/util/bot/cmake-win32.zip.sha1 +0 -1
- package/third_party/quiche/quiche/common/platform/api/quiche_mock_log.h +0 -18
- package/third_party/quiche/quiche/common/platform/api/quiche_test_helpers.h +0 -8
- package/third_party/quiche/quiche/quic/platform/api/quic_mock_log.h +0 -19
- package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_dispatcher.cc +0 -51
- package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_dispatcher.h +0 -41
- package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_session.cc +0 -168
- 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
|
-
|
|
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 (
|
|
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,
|
|
905
|
-
|
|
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(
|
|
1141
|
-
|
|
1142
|
-
|
|
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 (
|
|
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
|
-
|
|
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(
|
|
1346
|
-
|
|
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
|
|
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,
|
|
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(
|
|
589
|
-
|
|
590
|
-
|
|
598
|
+
EXPECT_CALL(
|
|
599
|
+
*dispatcher_,
|
|
600
|
+
ShouldCreateOrBufferPacketForConnection(
|
|
601
|
+
ReceivedPacketInfoConnectionIdEquals(original_connection_id)));
|
|
591
602
|
ProcessReceivedPacket(std::move(packets[0]), client_address, version_,
|
|
592
|
-
|
|
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(
|
|
611
|
+
CreateQuicSession(new_connection_id, _, client_address,
|
|
601
612
|
Eq(ExpectedAlpn()), _, Eq(ParsedClientHelloForTest())))
|
|
602
613
|
.WillOnce(Return(ByMove(CreateSession(
|
|
603
|
-
dispatcher_.get(), config_,
|
|
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
|
-
|
|
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,
|
|
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(
|
|
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
|
-
|
|
235
|
+
void QuicFlowController::MaybeSendBlocked() {
|
|
236
236
|
if (SendWindowSize() != 0 ||
|
|
237
237
|
last_blocked_send_window_offset_ >= send_window_offset_) {
|
|
238
|
-
return
|
|
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
|
-
|
|
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
|
-
//
|
|
82
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
-
|
|
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 (
|
|
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 (
|
|
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<
|
|
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 (
|
|
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 (
|
|
553
|
-
|
|
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
|
-
|
|
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
|
|
271
|
-
|
|
272
|
-
|
|
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
|
-
|
|
654
|
-
|
|
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
|
-
|
|
681
|
-
|
|
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
|