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