@fails-components/webtransport 0.0.1-rc.2 → 0.0.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/CMakeLists.txt +5 -2
- package/package.json +1 -1
- package/platform/net/quiche/common/platform/impl/quiche_flags_impl.h +1 -54
- package/platform/quiche_platform_impl/quic_flags_impl.h +1 -27
- package/platform/quiche_platform_impl/quiche_flag_utils_impl.h +1 -16
- package/platform/quiche_platform_impl/quiche_flags_impl.h +6 -1
- package/src/http3client.cc +14 -2
- package/src/http3client.h +10 -15
- package/src/webtransport.js +4 -1
- package/third_party/boringssl/src/.clang-format +11 -0
- package/third_party/boringssl/src/crypto/CMakeLists.txt +0 -1
- package/third_party/boringssl/src/crypto/asn1/a_strex.c +61 -95
- package/third_party/boringssl/src/crypto/asn1/asn1_par.c +31 -9
- package/third_party/boringssl/src/crypto/asn1/tasn_dec.c +33 -19
- package/third_party/boringssl/src/crypto/cipher_extra/asm/chacha20_poly1305_armv8.pl +8 -8
- package/third_party/boringssl/src/crypto/cipher_extra/derive_key.c +4 -4
- package/third_party/boringssl/src/crypto/cipher_extra/e_des.c +1 -0
- package/third_party/boringssl/src/crypto/cipher_extra/e_null.c +1 -0
- package/third_party/boringssl/src/crypto/cipher_extra/e_rc2.c +1 -0
- package/third_party/boringssl/src/crypto/cipher_extra/e_rc4.c +2 -0
- package/third_party/boringssl/src/crypto/fipsmodule/bcm.c +1 -0
- package/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl +0 -197
- package/third_party/boringssl/src/crypto/fipsmodule/bn/bn_test.cc +0 -9
- package/third_party/boringssl/src/crypto/fipsmodule/bn/bn_tests.txt +68 -0
- package/third_party/boringssl/src/crypto/fipsmodule/bn/exponentiation.c +45 -40
- package/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h +11 -8
- package/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.c +15 -106
- package/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.h +5 -1
- package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.c +12 -32
- package/third_party/boringssl/src/crypto/fipsmodule/cipher/internal.h +39 -0
- package/third_party/boringssl/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +7 -9
- package/third_party/boringssl/src/crypto/fipsmodule/ec/ec_key.c +1 -0
- package/third_party/boringssl/src/crypto/fipsmodule/ecdh/ecdh.c +2 -1
- package/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -0
- package/third_party/boringssl/src/crypto/fipsmodule/hmac/hmac.c +1 -0
- package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator.c +1 -0
- package/third_party/boringssl/src/crypto/pkcs8/pkcs8_x509.c +4 -4
- package/third_party/boringssl/src/crypto/x509/algorithm.c +18 -1
- package/third_party/boringssl/src/crypto/x509/x_algor.c +1 -1
- package/third_party/boringssl/src/crypto/x509/x_crl.c +3 -3
- package/third_party/boringssl/src/crypto/x509/x_exten.c +1 -1
- package/third_party/boringssl/src/crypto/x509/x_name.c +1 -1
- package/third_party/boringssl/src/crypto/x509/x_pubkey.c +1 -1
- package/third_party/boringssl/src/crypto/x509/x_req.c +2 -2
- package/third_party/boringssl/src/crypto/x509/x_sig.c +1 -1
- package/third_party/boringssl/src/crypto/x509/x_spki.c +2 -2
- package/third_party/boringssl/src/crypto/x509/x_val.c +1 -1
- package/third_party/boringssl/src/crypto/x509/x_x509.c +2 -2
- package/third_party/boringssl/src/crypto/x509v3/v3_akey.c +1 -1
- package/third_party/boringssl/src/crypto/x509v3/v3_akeya.c +1 -1
- package/third_party/boringssl/src/crypto/x509v3/v3_bcons.c +2 -2
- package/third_party/boringssl/src/crypto/x509v3/v3_cpols.c +6 -6
- package/third_party/boringssl/src/crypto/x509v3/v3_crld.c +6 -6
- package/third_party/boringssl/src/crypto/x509v3/v3_enum.c +1 -1
- package/third_party/boringssl/src/crypto/x509v3/v3_extku.c +2 -2
- package/third_party/boringssl/src/crypto/x509v3/v3_genn.c +3 -3
- package/third_party/boringssl/src/crypto/x509v3/v3_info.c +3 -3
- package/third_party/boringssl/src/crypto/x509v3/v3_int.c +3 -3
- package/third_party/boringssl/src/crypto/x509v3/v3_ncons.c +2 -2
- package/third_party/boringssl/src/crypto/x509v3/v3_ocsp.c +2 -2
- package/third_party/boringssl/src/crypto/x509v3/v3_pcons.c +1 -1
- package/third_party/boringssl/src/crypto/x509v3/v3_pmaps.c +2 -2
- package/third_party/boringssl/src/crypto/x509v3/v3_skey.c +1 -1
- package/third_party/boringssl/src/decrepit/blowfish/blowfish.c +1 -0
- package/third_party/boringssl/src/decrepit/cast/cast.c +1 -0
- package/third_party/boringssl/src/decrepit/cfb/cfb.c +1 -0
- package/third_party/boringssl/src/decrepit/xts/xts.c +2 -1
- package/third_party/boringssl/src/fuzz/CMakeLists.txt +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip.cc +57 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/0461791e54b4840c109637952eab43d9b938cab8 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/06e57a7b98a403a00822739739924b97ae6c74e9 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/078c3c1199930781466871c8dda69bec379286a4 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/082a991742f652549e4b207100ee521f474e0a99 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/091e3389548686c5038d04e3d76b9c4d30502074 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/13e484c406efe97dc9d91f8b80a27b0e597c34da +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/153d254254345b61e20e7b37637dd6f6fd71ba01 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/163605136e22f5b5302fe60d1f17837bee6b6b2b +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/1a96ec99b487b93052cd860c447e6d126dcc36d4 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/1cc9ad96fcee279e8589b7071c7a0ccd111098f2 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/229b8e1825512868e0e11a199ed71231dd41bb4f +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/236d820eadf7f84d70de7bb8be5f1c57a4005de2 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/24fd9742dbdee3167509db4af245ad6f8c4c1e99 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/2896f8deb3c4e8bdfeab743b22c64c92316880f7 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/29b6252fe9c4d1186394b1664c421cca795b61a5 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/2b4955132275314d1d377f37f93d8c1879a3519a +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/2e7112ac524a7a663632397cbb41f7dfd22e92c6 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/396d197005432accf99bf0f483286e459eb24063 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/3c75fe79266cf639f2180722a3f03f8fc3e25685 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/3fbb104fb0eb6cae4af34d8a516998336b3a6778 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/422fa995b3fdfed572b68b292062c330d6d05272 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/428b48fc494cee828f0c27f77aef477cb2e1fd80 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/4bd69e424b6fa38f9e63e58b8d0e95ac2d38d598 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/4be7e1f134e1c55aeadeead515200f6f1e6254ba +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/4de268400e174db2dc306f45c833cf968a6c6546 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/52d2c7efcd7da0eb7463829e05a598e36729bfae +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/53cf415eb9de49fb5a0cb46e745e413a99aa0779 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/53ea84c48a5792281a46eb5a9c896d54ea3f1838 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/5ba93c9db0cff93f52b521d7420e43f6eda2784f +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/5bab61eb53176449e25c2c82f172b82cb13ffb9d +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/5e5361730362736fe3e2804d8566e3c91454509b +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/6654fedb1fc4b07095695b062b5af4c2f12d59ae +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/6cad8b2a41194372ec897bece6512fe8331e274d +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/6f40330ec07e8e22f113f982b297ff7f86b8e485 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/738f291e53e97c08dae378c71ef70a60e31ae900 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/7396791821e64fc9340249a4bcbd2198e9f237db +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/7653595e28f23e62ea6707c99ca08c780a69335f +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/77de68daecd823babbb58edb1c8e14d7106e83bb +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/7cb5c71603a787032973d6ddc9c2c34638005784 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/80a1e1ae75c1e5ef7bbde5f5877e3e5b26b3cf58 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/872ba8af52a8c1380c388bab0e20bec2e729db80 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/8855f2d904cf1bbaffc54e68d98890fdc9ec14cc +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/8a22f56ee86cc2d67e9610a6b0ed59f21008a341 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/935a69e9f3bfa1dd3bf058fa3e1b953e82195de6 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/951ccb49640c8f9e81fb4e0d82730321f4e15bb3 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/9af1f3ed10c7a54f6b57c344015141cc082db23b +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/a0b7dd1684089c63a4aac2e4a832544df4d639d6 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/a22d0d3565a509a4bfedce078090d8c6a908d950 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/a22f1185582f66227118c8e9002a5c29728f0650 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/a457945cb86ec812235f407ed70fe72fbaf694a1 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/a4ee44c4e8728d4924642ef8765063262e8c4601 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/a4fc609a6546fc0061f499f0faed9054fd388c9a +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/a7c13e6fe60eee08b9aac00a095a9301ea1a9824 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/a98e22a5a8c2f5dda365d55e76536931010e1560 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/aca6ed86348b1176bfbe4ebf32b2d48a0aa42f9f +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/aeefb82d7f5cc69168aade3b196a84d0f5c14bf2 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/b37e0f6fa42840c773747c4cb608c278ab65021d +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/b5d4e67f0ec5b1a90100d8ad424d77aea8e16353 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/b65ea16ba4dae8599ebbad7c4cb9fcd505edf485 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/b95311782071c4d9182c0effe32487fc5cdbd33d +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/bbcaf4d15f92bfc6d624eee967fade1a74329f30 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/bc26b8c794ac0adf948cbca02e88b3901824ef17 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/bc7b23c2c68e4ad33ecea493ff6e60d423371cd0 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/bd8daf3e78d8ba3a25838053b6993edc7a21c30e +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/c4d94647e646f02da1736b3179804ad6083acde9 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/c869b259f9f81bec8ed24a9bc2cef35a513fb9fc +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/ceee46f04a09ef5d3342ef25d9f483e861727575 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/d05c069216b54f35bc7e3ee08371baee243c089a +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/d18c30ba21e0d085dd983ad528f2c9001285d3d2 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/d2c00146b2f2bcb4c6cecb731d2062273523d8c8 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/d9bc7157a485958a5fce35ce777f551fe3f7d94c +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/defce76f0d3c3e057bb623986bacee7bbd07d1a1 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/df9b696736847e43672b7a99ca05655af8a81135 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/e5b420f71cf412bd9fdebdd46245fabd1f3462e5 +1 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/e7979b0e6e3e9cd64ceab99778c55205d6f92a73 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/ee629f1935abc05fdc32ba314ec1f80f4bff2a17 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/f944dcd635f9801f7ac90a407fbc479964dec024 +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/fadcde7d914246ca04bd56e68fd4045b1cf1c5ef +0 -0
- package/third_party/boringssl/src/fuzz/der_roundtrip_corpus/fd8be6506a9995f626eef831b9c981a80b0e3640 +0 -0
- package/third_party/boringssl/src/include/openssl/cipher.h +21 -48
- package/third_party/boringssl/src/include/openssl/ssl.h +38 -0
- package/third_party/boringssl/src/ssl/handshake_client.cc +8 -2
- package/third_party/boringssl/src/ssl/internal.h +16 -3
- package/third_party/boringssl/src/ssl/s3_both.cc +23 -1
- package/third_party/boringssl/src/ssl/ssl_lib.cc +94 -1
- package/third_party/boringssl/src/ssl/test/runner/runner.go +192 -0
- package/third_party/boringssl/src/ssl/test/test_config.cc +6 -0
- package/third_party/boringssl/src/ssl/test/test_config.h +1 -0
- package/third_party/boringssl/src/ssl/tls13_client.cc +7 -3
- package/third_party/boringssl/src/ssl/tls13_server.cc +2 -1
- package/third_party/boringssl/src/util/convert_comments.go +23 -0
- package/third_party/boringssl/src/util/fipstools/acvp/acvptool/acvp/acvp.go +1 -1
- package/third_party/boringssl/src/util/fipstools/acvp/modulewrapper/modulewrapper.cc +32 -21
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.cc +1 -1
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.h +1 -1
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h +3 -2
- package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.cc +2 -2
- package/third_party/quiche/quiche/http2/adapter/http2_protocol.h +5 -1
- package/third_party/quiche/quiche/http2/adapter/http2_util.cc +2 -0
- package/third_party/quiche/quiche/http2/adapter/http2_visitor_interface.h +2 -0
- package/third_party/quiche/quiche/http2/adapter/nghttp2_adapter_test.cc +119 -0
- package/third_party/quiche/quiche/http2/adapter/oghttp2_adapter_test.cc +130 -0
- package/third_party/quiche/quiche/http2/adapter/oghttp2_session.cc +23 -12
- package/third_party/quiche/quiche/http2/decoder/decode_buffer_test.cc +6 -11
- package/third_party/quiche/quiche/quic/core/congestion_control/bbr2_sender.cc +0 -5
- package/third_party/quiche/quiche/quic/core/congestion_control/bbr2_sender.h +0 -2
- package/third_party/quiche/quiche/quic/core/congestion_control/bbr_sender.cc +0 -10
- package/third_party/quiche/quiche/quic/core/congestion_control/bbr_sender.h +0 -1
- package/third_party/quiche/quiche/quic/core/congestion_control/send_algorithm_interface.h +0 -6
- package/third_party/quiche/quiche/quic/core/congestion_control/tcp_cubic_sender_bytes.cc +0 -2
- package/third_party/quiche/quiche/quic/core/congestion_control/tcp_cubic_sender_bytes.h +0 -1
- package/third_party/quiche/quiche/quic/core/crypto/transport_parameters_test.cc +1 -3
- package/third_party/quiche/quiche/quic/core/http/end_to_end_test.cc +19 -9
- package/third_party/quiche/quiche/quic/core/http/http_decoder_test.cc +6 -3
- package/third_party/quiche/quiche/quic/core/http/quic_server_session_base.cc +4 -16
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_session.h +6 -6
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_session_test.cc +25 -15
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream_test.cc +6 -5
- package/third_party/quiche/quiche/quic/core/http/web_transport_http3.cc +1 -2
- package/third_party/quiche/quiche/quic/core/quic_bandwidth_test.cc +12 -12
- package/third_party/quiche/quiche/quic/core/quic_connection.cc +5 -95
- package/third_party/quiche/quiche/quic/core/quic_connection.h +0 -35
- package/third_party/quiche/quiche/quic/core/quic_connection_test.cc +80 -196
- package/third_party/quiche/quiche/quic/core/quic_control_frame_manager.cc +1 -1
- package/third_party/quiche/quiche/quic/core/quic_crypto_stream.cc +29 -5
- package/third_party/quiche/quiche/quic/core/quic_crypto_stream_test.cc +46 -0
- package/third_party/quiche/quiche/quic/core/quic_dispatcher_test.cc +17 -14
- package/third_party/quiche/quiche/quic/core/quic_flags_list.h +54 -54
- package/third_party/quiche/quiche/quic/core/quic_flow_controller_test.cc +8 -5
- package/third_party/quiche/quiche/quic/core/quic_framer_test.cc +8 -5
- package/third_party/quiche/quiche/quic/core/quic_idle_network_detector.cc +1 -0
- package/third_party/quiche/quiche/quic/core/quic_idle_network_detector_test.cc +29 -0
- package/third_party/quiche/quiche/quic/core/quic_packet_creator.cc +1 -5
- package/third_party/quiche/quiche/quic/core/quic_packet_creator_test.cc +18 -11
- package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.cc +9 -28
- package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.h +0 -13
- package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager_test.cc +1 -49
- package/third_party/quiche/quiche/quic/core/quic_session.cc +0 -8
- package/third_party/quiche/quiche/quic/core/quic_session.h +0 -1
- package/third_party/quiche/quiche/quic/core/quic_stream.cc +1 -1
- package/third_party/quiche/quiche/quic/core/quic_stream_sequencer.cc +5 -0
- package/third_party/quiche/quiche/quic/core/quic_stream_sequencer.h +4 -0
- package/third_party/quiche/quiche/quic/core/quic_stream_sequencer_test.cc +12 -5
- package/third_party/quiche/quiche/quic/core/quic_stream_test.cc +27 -12
- package/third_party/quiche/quiche/quic/core/quic_types.cc +0 -1
- package/third_party/quiche/quiche/quic/core/quic_types.h +0 -3
- package/third_party/quiche/quiche/quic/core/quic_utils.cc +0 -3
- package/third_party/quiche/quiche/quic/core/quic_utils_test.cc +0 -2
- package/third_party/quiche/quiche/quic/core/tls_client_handshaker_test.cc +16 -12
- package/third_party/quiche/quiche/quic/core/tls_handshaker.cc +18 -3
- package/third_party/quiche/quiche/quic/qbone/platform/internet_checksum.cc +7 -2
- package/third_party/quiche/quiche/quic/test_tools/crypto_test_utils.cc +20 -12
- package/third_party/quiche/quiche/quic/test_tools/crypto_test_utils.h +10 -5
- package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.h +0 -2
- package/third_party/quiche/quiche/quic/test_tools/simulator/quic_endpoint.cc +0 -8
- package/third_party/quiche/quiche/quic/test_tools/simulator/quic_endpoint.h +0 -1
- package/third_party/quiche/quiche/quic/tools/quic_simple_server_stream_test.cc +2 -1
- package/platform/net/quiche/common/platform/impl/quic_flags_list_add.h +0 -379
- package/platform/net/quiche/common/platform/impl/quiche_flags_impl.cc +0 -21
- package/third_party/boringssl/src/crypto/asn1/charmap.h +0 -15
- package/third_party/boringssl/src/crypto/asn1/charmap.pl +0 -135
|
@@ -5883,6 +5883,35 @@ TEST(NgHttp2AdapterTest, AutomaticPingAcksDisabled) {
|
|
|
5883
5883
|
EXPECT_THAT(visitor.data(), EqualsFrames({SpdyFrameType::SETTINGS}));
|
|
5884
5884
|
}
|
|
5885
5885
|
|
|
5886
|
+
TEST(NgHttp2AdapterTest, InvalidMaxFrameSize) {
|
|
5887
|
+
DataSavingVisitor visitor;
|
|
5888
|
+
auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
|
|
5889
|
+
|
|
5890
|
+
const std::string frames =
|
|
5891
|
+
TestFrameSequence().ClientPreface({{MAX_FRAME_SIZE, 3}}).Serialize();
|
|
5892
|
+
testing::InSequence s;
|
|
5893
|
+
|
|
5894
|
+
// Client preface
|
|
5895
|
+
EXPECT_CALL(visitor, OnFrameHeader(0, 6, SETTINGS, 0));
|
|
5896
|
+
EXPECT_CALL(
|
|
5897
|
+
visitor,
|
|
5898
|
+
OnInvalidFrame(0, Http2VisitorInterface::InvalidFrameError::kProtocol));
|
|
5899
|
+
|
|
5900
|
+
const int64_t read_result = adapter->ProcessBytes(frames);
|
|
5901
|
+
EXPECT_EQ(static_cast<size_t>(read_result), frames.size());
|
|
5902
|
+
|
|
5903
|
+
EXPECT_TRUE(adapter->want_write());
|
|
5904
|
+
|
|
5905
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
|
|
5906
|
+
EXPECT_CALL(visitor,
|
|
5907
|
+
OnFrameSent(GOAWAY, 0, _, 0x0,
|
|
5908
|
+
static_cast<int>(Http2ErrorCode::PROTOCOL_ERROR)));
|
|
5909
|
+
|
|
5910
|
+
int send_result = adapter->Send();
|
|
5911
|
+
EXPECT_EQ(0, send_result);
|
|
5912
|
+
EXPECT_THAT(visitor.data(), EqualsFrames({SpdyFrameType::GOAWAY}));
|
|
5913
|
+
}
|
|
5914
|
+
|
|
5886
5915
|
TEST(NgHttp2AdapterTest, ServerForbidsProtocolPseudoheaderBeforeAck) {
|
|
5887
5916
|
DataSavingVisitor visitor;
|
|
5888
5917
|
auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
|
|
@@ -6793,6 +6822,96 @@ TEST(NgHttp2AdapterTest, ServerHandlesConnectionSpecificHeaders) {
|
|
|
6793
6822
|
SpdyFrameType::RST_STREAM, SpdyFrameType::RST_STREAM}));
|
|
6794
6823
|
}
|
|
6795
6824
|
|
|
6825
|
+
TEST(NgHttp2AdapterTest, NegativeFlowControlStreamResumption) {
|
|
6826
|
+
DataSavingVisitor visitor;
|
|
6827
|
+
auto adapter = NgHttp2Adapter::CreateServerAdapter(visitor);
|
|
6828
|
+
|
|
6829
|
+
const std::string frames =
|
|
6830
|
+
TestFrameSequence()
|
|
6831
|
+
.ClientPreface({{INITIAL_WINDOW_SIZE, 128u * 1024u}})
|
|
6832
|
+
.WindowUpdate(0, 1 << 20)
|
|
6833
|
+
.Headers(1,
|
|
6834
|
+
{{":method", "GET"},
|
|
6835
|
+
{":scheme", "https"},
|
|
6836
|
+
{":authority", "example.com"},
|
|
6837
|
+
{":path", "/this/is/request/one"}},
|
|
6838
|
+
/*fin=*/true)
|
|
6839
|
+
.Serialize();
|
|
6840
|
+
testing::InSequence s;
|
|
6841
|
+
|
|
6842
|
+
// Client preface (empty SETTINGS)
|
|
6843
|
+
EXPECT_CALL(visitor, OnFrameHeader(0, 6, SETTINGS, 0));
|
|
6844
|
+
EXPECT_CALL(visitor, OnSettingsStart());
|
|
6845
|
+
EXPECT_CALL(visitor,
|
|
6846
|
+
OnSetting(Http2Setting{Http2KnownSettingsId::INITIAL_WINDOW_SIZE,
|
|
6847
|
+
128u * 1024u}));
|
|
6848
|
+
EXPECT_CALL(visitor, OnSettingsEnd());
|
|
6849
|
+
|
|
6850
|
+
EXPECT_CALL(visitor, OnFrameHeader(0, 4, WINDOW_UPDATE, 0));
|
|
6851
|
+
EXPECT_CALL(visitor, OnWindowUpdate(0, 1 << 20));
|
|
6852
|
+
|
|
6853
|
+
// Stream 1
|
|
6854
|
+
EXPECT_CALL(visitor, OnFrameHeader(1, _, HEADERS, 0x5));
|
|
6855
|
+
EXPECT_CALL(visitor, OnBeginHeadersForStream(1));
|
|
6856
|
+
EXPECT_CALL(visitor, OnHeaderForStream(1, _, _)).Times(4);
|
|
6857
|
+
EXPECT_CALL(visitor, OnEndHeadersForStream(1));
|
|
6858
|
+
EXPECT_CALL(visitor, OnEndStream(1));
|
|
6859
|
+
|
|
6860
|
+
const int64_t read_result = adapter->ProcessBytes(frames);
|
|
6861
|
+
EXPECT_EQ(static_cast<size_t>(read_result), frames.size());
|
|
6862
|
+
|
|
6863
|
+
// Submit a response for the stream.
|
|
6864
|
+
auto body = absl::make_unique<TestDataFrameSource>(visitor, true);
|
|
6865
|
+
TestDataFrameSource& body_ref = *body;
|
|
6866
|
+
body_ref.AppendPayload(std::string(70000, 'a'));
|
|
6867
|
+
int submit_result = adapter->SubmitResponse(
|
|
6868
|
+
1, ToHeaders({{":status", "200"}}), std::move(body));
|
|
6869
|
+
ASSERT_EQ(0, submit_result);
|
|
6870
|
+
|
|
6871
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
|
|
6872
|
+
EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
|
|
6873
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x4));
|
|
6874
|
+
EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x4, 0));
|
|
6875
|
+
EXPECT_CALL(visitor, OnFrameSent(DATA, 1, _, 0x0, 0)).Times(5);
|
|
6876
|
+
|
|
6877
|
+
adapter->Send();
|
|
6878
|
+
EXPECT_FALSE(adapter->want_write());
|
|
6879
|
+
|
|
6880
|
+
EXPECT_CALL(visitor, OnFrameHeader(0, 6, SETTINGS, 0));
|
|
6881
|
+
EXPECT_CALL(visitor, OnSettingsStart());
|
|
6882
|
+
EXPECT_CALL(visitor,
|
|
6883
|
+
OnSetting(Http2Setting{Http2KnownSettingsId::INITIAL_WINDOW_SIZE,
|
|
6884
|
+
64u * 1024u}));
|
|
6885
|
+
EXPECT_CALL(visitor, OnSettingsEnd());
|
|
6886
|
+
|
|
6887
|
+
// Processing these SETTINGS will cause stream 1's send window to become
|
|
6888
|
+
// negative.
|
|
6889
|
+
adapter->ProcessBytes(TestFrameSequence()
|
|
6890
|
+
.Settings({{INITIAL_WINDOW_SIZE, 64u * 1024u}})
|
|
6891
|
+
.Serialize());
|
|
6892
|
+
EXPECT_TRUE(adapter->want_write());
|
|
6893
|
+
// nghttp2 does not expose the fact that the send window size is negative.
|
|
6894
|
+
EXPECT_EQ(adapter->GetStreamSendWindowSize(1), 0);
|
|
6895
|
+
|
|
6896
|
+
body_ref.AppendPayload("Stream should be resumed.");
|
|
6897
|
+
adapter->ResumeStream(1);
|
|
6898
|
+
|
|
6899
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
|
|
6900
|
+
EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
|
|
6901
|
+
adapter->Send();
|
|
6902
|
+
EXPECT_FALSE(adapter->want_write());
|
|
6903
|
+
|
|
6904
|
+
// Upon receiving the WINDOW_UPDATE, stream 1 should be ready to write.
|
|
6905
|
+
EXPECT_CALL(visitor, OnFrameHeader(1, 4, WINDOW_UPDATE, 0));
|
|
6906
|
+
EXPECT_CALL(visitor, OnWindowUpdate(1, 10000));
|
|
6907
|
+
adapter->ProcessBytes(TestFrameSequence().WindowUpdate(1, 10000).Serialize());
|
|
6908
|
+
EXPECT_TRUE(adapter->want_write());
|
|
6909
|
+
EXPECT_GT(adapter->GetStreamSendWindowSize(1), 0);
|
|
6910
|
+
|
|
6911
|
+
EXPECT_CALL(visitor, OnFrameSent(DATA, 1, _, 0x0, 0));
|
|
6912
|
+
adapter->Send();
|
|
6913
|
+
}
|
|
6914
|
+
|
|
6796
6915
|
} // namespace
|
|
6797
6916
|
} // namespace test
|
|
6798
6917
|
} // namespace adapter
|
|
@@ -347,6 +347,42 @@ TEST(OgHttp2AdapterTest, AutomaticPingAcksDisabled) {
|
|
|
347
347
|
EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::SETTINGS}));
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
+
TEST(OgHttp2AdapterTest, InvalidMaxFrameSize) {
|
|
351
|
+
DataSavingVisitor visitor;
|
|
352
|
+
OgHttp2Adapter::Options options;
|
|
353
|
+
options.perspective = Perspective::kServer;
|
|
354
|
+
auto adapter = OgHttp2Adapter::Create(visitor, options);
|
|
355
|
+
|
|
356
|
+
const std::string frames =
|
|
357
|
+
TestFrameSequence().ClientPreface({{MAX_FRAME_SIZE, 3}}).Serialize();
|
|
358
|
+
testing::InSequence s;
|
|
359
|
+
|
|
360
|
+
// Client preface
|
|
361
|
+
EXPECT_CALL(visitor, OnFrameHeader(0, 6, SETTINGS, 0));
|
|
362
|
+
EXPECT_CALL(visitor, OnSettingsStart());
|
|
363
|
+
EXPECT_CALL(
|
|
364
|
+
visitor,
|
|
365
|
+
OnInvalidFrame(0, Http2VisitorInterface::InvalidFrameError::kProtocol));
|
|
366
|
+
EXPECT_CALL(visitor, OnConnectionError(ConnectionError::kInvalidSetting));
|
|
367
|
+
|
|
368
|
+
const int64_t read_result = adapter->ProcessBytes(frames);
|
|
369
|
+
EXPECT_EQ(static_cast<size_t>(read_result), frames.size());
|
|
370
|
+
|
|
371
|
+
EXPECT_TRUE(adapter->want_write());
|
|
372
|
+
|
|
373
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
|
|
374
|
+
EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
|
|
375
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(GOAWAY, 0, _, 0x0));
|
|
376
|
+
EXPECT_CALL(visitor,
|
|
377
|
+
OnFrameSent(GOAWAY, 0, _, 0x0,
|
|
378
|
+
static_cast<int>(Http2ErrorCode::PROTOCOL_ERROR)));
|
|
379
|
+
|
|
380
|
+
int send_result = adapter->Send();
|
|
381
|
+
EXPECT_EQ(0, send_result);
|
|
382
|
+
EXPECT_THAT(visitor.data(),
|
|
383
|
+
EqualsFrames({SpdyFrameType::SETTINGS, SpdyFrameType::GOAWAY}));
|
|
384
|
+
}
|
|
385
|
+
|
|
350
386
|
TEST(OgHttp2AdapterTest, ClientHandles100Headers) {
|
|
351
387
|
DataSavingVisitor visitor;
|
|
352
388
|
OgHttp2Adapter::Options options;
|
|
@@ -7556,6 +7592,100 @@ TEST(OgHttp2AdapterTest, NoopHeaderValidatorTest) {
|
|
|
7556
7592
|
EXPECT_EQ(frames.size(), static_cast<size_t>(result));
|
|
7557
7593
|
}
|
|
7558
7594
|
|
|
7595
|
+
TEST(OgHttp2AdapterTest, NegativeFlowControlStreamResumption) {
|
|
7596
|
+
DataSavingVisitor visitor;
|
|
7597
|
+
OgHttp2Adapter::Options options;
|
|
7598
|
+
options.perspective = Perspective::kServer;
|
|
7599
|
+
auto adapter = OgHttp2Adapter::Create(visitor, options);
|
|
7600
|
+
|
|
7601
|
+
const std::string frames =
|
|
7602
|
+
TestFrameSequence()
|
|
7603
|
+
.ClientPreface({{INITIAL_WINDOW_SIZE, 128u * 1024u}})
|
|
7604
|
+
.WindowUpdate(0, 1 << 20)
|
|
7605
|
+
.Headers(1,
|
|
7606
|
+
{{":method", "GET"},
|
|
7607
|
+
{":scheme", "https"},
|
|
7608
|
+
{":authority", "example.com"},
|
|
7609
|
+
{":path", "/this/is/request/one"}},
|
|
7610
|
+
/*fin=*/true)
|
|
7611
|
+
.Serialize();
|
|
7612
|
+
testing::InSequence s;
|
|
7613
|
+
|
|
7614
|
+
// Client preface (empty SETTINGS)
|
|
7615
|
+
EXPECT_CALL(visitor, OnFrameHeader(0, 6, SETTINGS, 0));
|
|
7616
|
+
EXPECT_CALL(visitor, OnSettingsStart());
|
|
7617
|
+
EXPECT_CALL(visitor,
|
|
7618
|
+
OnSetting(Http2Setting{Http2KnownSettingsId::INITIAL_WINDOW_SIZE,
|
|
7619
|
+
128u * 1024u}));
|
|
7620
|
+
EXPECT_CALL(visitor, OnSettingsEnd());
|
|
7621
|
+
|
|
7622
|
+
EXPECT_CALL(visitor, OnFrameHeader(0, 4, WINDOW_UPDATE, 0));
|
|
7623
|
+
EXPECT_CALL(visitor, OnWindowUpdate(0, 1 << 20));
|
|
7624
|
+
|
|
7625
|
+
// Stream 1
|
|
7626
|
+
EXPECT_CALL(visitor, OnFrameHeader(1, _, HEADERS, 0x5));
|
|
7627
|
+
EXPECT_CALL(visitor, OnBeginHeadersForStream(1));
|
|
7628
|
+
EXPECT_CALL(visitor, OnHeaderForStream(1, _, _)).Times(4);
|
|
7629
|
+
EXPECT_CALL(visitor, OnEndHeadersForStream(1));
|
|
7630
|
+
EXPECT_CALL(visitor, OnEndStream(1));
|
|
7631
|
+
|
|
7632
|
+
const int64_t read_result = adapter->ProcessBytes(frames);
|
|
7633
|
+
EXPECT_EQ(static_cast<size_t>(read_result), frames.size());
|
|
7634
|
+
|
|
7635
|
+
// Submit a response for the stream.
|
|
7636
|
+
auto body = absl::make_unique<TestDataFrameSource>(visitor, true);
|
|
7637
|
+
TestDataFrameSource& body_ref = *body;
|
|
7638
|
+
body_ref.AppendPayload(std::string(70000, 'a'));
|
|
7639
|
+
int submit_result = adapter->SubmitResponse(
|
|
7640
|
+
1, ToHeaders({{":status", "200"}}), std::move(body));
|
|
7641
|
+
ASSERT_EQ(0, submit_result);
|
|
7642
|
+
|
|
7643
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x0));
|
|
7644
|
+
EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x0, 0));
|
|
7645
|
+
|
|
7646
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
|
|
7647
|
+
EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
|
|
7648
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(HEADERS, 1, _, 0x4));
|
|
7649
|
+
EXPECT_CALL(visitor, OnFrameSent(HEADERS, 1, _, 0x4, 0));
|
|
7650
|
+
EXPECT_CALL(visitor, OnFrameSent(DATA, 1, _, 0x0, 0)).Times(5);
|
|
7651
|
+
|
|
7652
|
+
adapter->Send();
|
|
7653
|
+
EXPECT_FALSE(adapter->want_write());
|
|
7654
|
+
|
|
7655
|
+
EXPECT_CALL(visitor, OnFrameHeader(0, 6, SETTINGS, 0));
|
|
7656
|
+
EXPECT_CALL(visitor, OnSettingsStart());
|
|
7657
|
+
EXPECT_CALL(visitor,
|
|
7658
|
+
OnSetting(Http2Setting{Http2KnownSettingsId::INITIAL_WINDOW_SIZE,
|
|
7659
|
+
64u * 1024u}));
|
|
7660
|
+
EXPECT_CALL(visitor, OnSettingsEnd());
|
|
7661
|
+
|
|
7662
|
+
// Processing these SETTINGS will cause stream 1's send window to become
|
|
7663
|
+
// negative.
|
|
7664
|
+
adapter->ProcessBytes(TestFrameSequence()
|
|
7665
|
+
.Settings({{INITIAL_WINDOW_SIZE, 64u * 1024u}})
|
|
7666
|
+
.Serialize());
|
|
7667
|
+
EXPECT_TRUE(adapter->want_write());
|
|
7668
|
+
EXPECT_LT(adapter->GetStreamSendWindowSize(1), 0);
|
|
7669
|
+
|
|
7670
|
+
body_ref.AppendPayload("Stream should be resumed.");
|
|
7671
|
+
adapter->ResumeStream(1);
|
|
7672
|
+
|
|
7673
|
+
EXPECT_CALL(visitor, OnBeforeFrameSent(SETTINGS, 0, _, 0x1));
|
|
7674
|
+
EXPECT_CALL(visitor, OnFrameSent(SETTINGS, 0, _, 0x1, 0));
|
|
7675
|
+
adapter->Send();
|
|
7676
|
+
EXPECT_FALSE(adapter->want_write());
|
|
7677
|
+
|
|
7678
|
+
// Upon receiving the WINDOW_UPDATE, stream 1 should be ready to write.
|
|
7679
|
+
EXPECT_CALL(visitor, OnFrameHeader(1, 4, WINDOW_UPDATE, 0));
|
|
7680
|
+
EXPECT_CALL(visitor, OnWindowUpdate(1, 10000));
|
|
7681
|
+
adapter->ProcessBytes(TestFrameSequence().WindowUpdate(1, 10000).Serialize());
|
|
7682
|
+
EXPECT_TRUE(adapter->want_write());
|
|
7683
|
+
EXPECT_GT(adapter->GetStreamSendWindowSize(1), 0);
|
|
7684
|
+
|
|
7685
|
+
EXPECT_CALL(visitor, OnFrameSent(DATA, 1, _, 0x0, 0));
|
|
7686
|
+
adapter->Send();
|
|
7687
|
+
}
|
|
7688
|
+
|
|
7559
7689
|
} // namespace
|
|
7560
7690
|
} // namespace test
|
|
7561
7691
|
} // namespace adapter
|
|
@@ -1218,16 +1218,6 @@ void OgHttp2Session::OnSettings() {
|
|
|
1218
1218
|
|
|
1219
1219
|
void OgHttp2Session::OnSetting(spdy::SpdySettingsId id, uint32_t value) {
|
|
1220
1220
|
switch (id) {
|
|
1221
|
-
case MAX_FRAME_SIZE:
|
|
1222
|
-
max_frame_payload_ = value;
|
|
1223
|
-
break;
|
|
1224
|
-
case MAX_CONCURRENT_STREAMS:
|
|
1225
|
-
max_outbound_concurrent_streams_ = value;
|
|
1226
|
-
if (!IsServerSession()) {
|
|
1227
|
-
// We may now be able to start pending streams.
|
|
1228
|
-
StartPendingStreams();
|
|
1229
|
-
}
|
|
1230
|
-
break;
|
|
1231
1221
|
case HEADER_TABLE_SIZE:
|
|
1232
1222
|
value = std::min(value, HpackCapacityBound(options_));
|
|
1233
1223
|
if (value < framer_.GetHpackEncoder()->CurrentHeaderTableSizeSetting()) {
|
|
@@ -1243,6 +1233,13 @@ void OgHttp2Session::OnSetting(spdy::SpdySettingsId id, uint32_t value) {
|
|
|
1243
1233
|
encoder_header_table_capacity_when_acking_ = value;
|
|
1244
1234
|
}
|
|
1245
1235
|
break;
|
|
1236
|
+
case MAX_CONCURRENT_STREAMS:
|
|
1237
|
+
max_outbound_concurrent_streams_ = value;
|
|
1238
|
+
if (!IsServerSession()) {
|
|
1239
|
+
// We may now be able to start pending streams.
|
|
1240
|
+
StartPendingStreams();
|
|
1241
|
+
}
|
|
1242
|
+
break;
|
|
1246
1243
|
case INITIAL_WINDOW_SIZE:
|
|
1247
1244
|
if (value > spdy::kSpdyMaximumWindowSize) {
|
|
1248
1245
|
visitor_.OnInvalidFrame(
|
|
@@ -1256,6 +1253,19 @@ void OgHttp2Session::OnSetting(spdy::SpdySettingsId id, uint32_t value) {
|
|
|
1256
1253
|
UpdateStreamSendWindowSizes(value);
|
|
1257
1254
|
}
|
|
1258
1255
|
break;
|
|
1256
|
+
case MAX_FRAME_SIZE:
|
|
1257
|
+
if (value < kDefaultFramePayloadSizeLimit ||
|
|
1258
|
+
value > kMaximumFramePayloadSizeLimit) {
|
|
1259
|
+
visitor_.OnInvalidFrame(
|
|
1260
|
+
0, Http2VisitorInterface::InvalidFrameError::kProtocol);
|
|
1261
|
+
// The specification says this is a connection-level protocol error.
|
|
1262
|
+
LatchErrorAndNotify(
|
|
1263
|
+
Http2ErrorCode::PROTOCOL_ERROR,
|
|
1264
|
+
Http2VisitorInterface::ConnectionError::kInvalidSetting);
|
|
1265
|
+
return;
|
|
1266
|
+
}
|
|
1267
|
+
max_frame_payload_ = value;
|
|
1268
|
+
break;
|
|
1259
1269
|
default:
|
|
1260
1270
|
// TODO(bnc): See if C++17 inline constants are allowed in QUICHE.
|
|
1261
1271
|
if (id == kMetadataExtensionId) {
|
|
@@ -1416,12 +1426,13 @@ void OgHttp2Session::OnWindowUpdate(spdy::SpdyStreamId stream_id,
|
|
|
1416
1426
|
if (streams_reset_.contains(stream_id)) {
|
|
1417
1427
|
return;
|
|
1418
1428
|
}
|
|
1419
|
-
|
|
1429
|
+
const bool was_blocked = (it->second.send_window <= 0);
|
|
1430
|
+
it->second.send_window += delta_window_size;
|
|
1431
|
+
if (was_blocked && it->second.send_window > 0) {
|
|
1420
1432
|
// The stream was blocked on flow control.
|
|
1421
1433
|
QUICHE_VLOG(1) << "Marking stream " << stream_id << " ready to write.";
|
|
1422
1434
|
write_scheduler_.MarkStreamReady(stream_id, false);
|
|
1423
1435
|
}
|
|
1424
|
-
it->second.send_window += delta_window_size;
|
|
1425
1436
|
}
|
|
1426
1437
|
}
|
|
1427
1438
|
visitor_.OnWindowUpdate(stream_id, delta_window_size);
|
|
@@ -131,14 +131,9 @@ TEST(DecodeBufferDeathTest, NonNullBufferRequired) {
|
|
|
131
131
|
TEST(DecodeBufferDeathTest, ModestBufferSizeRequired) {
|
|
132
132
|
EXPECT_QUICHE_DEBUG_DEATH(
|
|
133
133
|
{
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
// std::string data(DecodeBuffer::kMaxDecodeBufferLength + 1, ' ');
|
|
138
|
-
// DecodeBuffer b(data.data(), data.size());
|
|
139
|
-
|
|
140
|
-
const char data[DecodeBuffer::kMaxDecodeBufferLength + 1] = {};
|
|
141
|
-
DecodeBuffer b(data, sizeof data);
|
|
134
|
+
constexpr size_t kLength = DecodeBuffer::kMaxDecodeBufferLength + 1;
|
|
135
|
+
auto data = std::make_unique<char[]>(kLength);
|
|
136
|
+
DecodeBuffer b(data.get(), kLength);
|
|
142
137
|
},
|
|
143
138
|
"Max.*Length");
|
|
144
139
|
}
|
|
@@ -159,7 +154,7 @@ TEST(DecodeBufferDeathTest, LimitedAdvance) {
|
|
|
159
154
|
DecodeBuffer b(data, 3);
|
|
160
155
|
b.AdvanceCursor(4);
|
|
161
156
|
},
|
|
162
|
-
"
|
|
157
|
+
"Remaining");
|
|
163
158
|
}
|
|
164
159
|
|
|
165
160
|
// Make sure that DecodeBuffer detects decode beyond end, in debug mode.
|
|
@@ -168,7 +163,7 @@ TEST(DecodeBufferDeathTest, DecodeUInt8PastEnd) {
|
|
|
168
163
|
DecodeBuffer b(data, sizeof data);
|
|
169
164
|
EXPECT_EQ(2u, b.FullSize());
|
|
170
165
|
EXPECT_EQ(0x1223, b.DecodeUInt16());
|
|
171
|
-
EXPECT_QUICHE_DEBUG_DEATH({ b.DecodeUInt8(); }, "
|
|
166
|
+
EXPECT_QUICHE_DEBUG_DEATH({ b.DecodeUInt8(); }, "Remaining");
|
|
172
167
|
}
|
|
173
168
|
|
|
174
169
|
// Make sure that DecodeBuffer detects decode beyond end, in debug mode.
|
|
@@ -177,7 +172,7 @@ TEST(DecodeBufferDeathTest, DecodeUInt16OverEnd) {
|
|
|
177
172
|
DecodeBuffer b(data, sizeof data);
|
|
178
173
|
EXPECT_EQ(3u, b.FullSize());
|
|
179
174
|
EXPECT_EQ(0x1223, b.DecodeUInt16());
|
|
180
|
-
EXPECT_QUICHE_DEBUG_DEATH({ b.DecodeUInt16(); }, "
|
|
175
|
+
EXPECT_QUICHE_DEBUG_DEATH({ b.DecodeUInt16(); }, "Remaining");
|
|
181
176
|
}
|
|
182
177
|
|
|
183
178
|
// Make sure that DecodeBuffer doesn't agree with having two subsets.
|
|
@@ -505,11 +505,6 @@ void Bbr2Sender::OnExitQuiescence(QuicTime now) {
|
|
|
505
505
|
}
|
|
506
506
|
}
|
|
507
507
|
|
|
508
|
-
bool Bbr2Sender::ShouldSendProbingPacket() const {
|
|
509
|
-
// TODO(wub): Implement ShouldSendProbingPacket properly.
|
|
510
|
-
return BBR2_MODE_DISPATCH(IsProbingForBandwidth());
|
|
511
|
-
}
|
|
512
|
-
|
|
513
508
|
std::string Bbr2Sender::GetDebugState() const {
|
|
514
509
|
std::ostringstream stream;
|
|
515
510
|
stream << ExportDebugState();
|
|
@@ -204,16 +204,6 @@ bool BbrSender::InRecovery() const {
|
|
|
204
204
|
return recovery_state_ != NOT_IN_RECOVERY;
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
bool BbrSender::ShouldSendProbingPacket() const {
|
|
208
|
-
if (pacing_gain_ <= 1) {
|
|
209
|
-
return false;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// TODO(b/77975811): If the pipe is highly under-utilized, consider not
|
|
213
|
-
// sending a probing transmission, because the extra bandwidth is not needed.
|
|
214
|
-
return true;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
207
|
void BbrSender::SetFromConfig(const QuicConfig& config,
|
|
218
208
|
Perspective perspective) {
|
|
219
209
|
if (config.HasClientRequestedIndependentOption(k1RTT, perspective)) {
|
|
@@ -100,7 +100,6 @@ class QUIC_EXPORT_PRIVATE BbrSender : public SendAlgorithmInterface {
|
|
|
100
100
|
// Start implementation of SendAlgorithmInterface.
|
|
101
101
|
bool InSlowStart() const override;
|
|
102
102
|
bool InRecovery() const override;
|
|
103
|
-
bool ShouldSendProbingPacket() const override;
|
|
104
103
|
|
|
105
104
|
void SetFromConfig(const QuicConfig& config,
|
|
106
105
|
Perspective perspective) override;
|
|
@@ -129,12 +129,6 @@ class QUIC_EXPORT_PRIVATE SendAlgorithmInterface {
|
|
|
129
129
|
// Whether the send algorithm is currently in recovery.
|
|
130
130
|
virtual bool InRecovery() const = 0;
|
|
131
131
|
|
|
132
|
-
// True when the congestion control is probing for more bandwidth and needs
|
|
133
|
-
// enough data to not be app-limited to do so.
|
|
134
|
-
// TODO(ianswett): In the future, this API may want to indicate the size of
|
|
135
|
-
// the probing packet.
|
|
136
|
-
virtual bool ShouldSendProbingPacket() const = 0;
|
|
137
|
-
|
|
138
132
|
// Returns the size of the slow start congestion window in bytes,
|
|
139
133
|
// aka ssthresh. Only defined for Cubic and Reno, other algorithms return 0.
|
|
140
134
|
virtual QuicByteCount GetSlowStartThreshold() const = 0;
|
|
@@ -233,8 +233,6 @@ bool TcpCubicSenderBytes::InRecovery() const {
|
|
|
233
233
|
largest_acked_packet_number_ <= largest_sent_at_last_cutback_;
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
bool TcpCubicSenderBytes::ShouldSendProbingPacket() const { return false; }
|
|
237
|
-
|
|
238
236
|
void TcpCubicSenderBytes::OnRetransmissionTimeout(bool packets_retransmitted) {
|
|
239
237
|
largest_sent_at_last_cutback_.Clear();
|
|
240
238
|
if (!packets_retransmitted) {
|
|
@@ -69,7 +69,6 @@ class QUIC_EXPORT_PRIVATE TcpCubicSenderBytes : public SendAlgorithmInterface {
|
|
|
69
69
|
CongestionControlType GetCongestionControlType() const override;
|
|
70
70
|
bool InSlowStart() const override;
|
|
71
71
|
bool InRecovery() const override;
|
|
72
|
-
bool ShouldSendProbingPacket() const override;
|
|
73
72
|
std::string GetDebugState() const override;
|
|
74
73
|
void OnApplicationLimited(QuicByteCount bytes_in_flight) override;
|
|
75
74
|
void PopulateConnectionStats(QuicConnectionStats* /*stats*/) const override {}
|
|
@@ -484,12 +484,10 @@ TEST_P(TransportParametersTest, NoClientParamsWithStatelessResetToken) {
|
|
|
484
484
|
orig_params.max_udp_payload_size.set_value(kMaxPacketSizeForTest);
|
|
485
485
|
|
|
486
486
|
std::vector<uint8_t> out;
|
|
487
|
-
bool ok = true;
|
|
488
487
|
EXPECT_QUIC_BUG(
|
|
489
|
-
|
|
488
|
+
EXPECT_FALSE(SerializeTransportParameters(orig_params, &out)),
|
|
490
489
|
"Not serializing invalid transport parameters: Client cannot send "
|
|
491
490
|
"stateless reset token");
|
|
492
|
-
EXPECT_FALSE(ok);
|
|
493
491
|
}
|
|
494
492
|
|
|
495
493
|
TEST_P(TransportParametersTest, ParseClientParams) {
|
|
@@ -1508,7 +1508,8 @@ TEST_P(EndToEndTest, LargePostNoPacketLoss) {
|
|
|
1508
1508
|
VerifyCleanConnection(true);
|
|
1509
1509
|
}
|
|
1510
1510
|
|
|
1511
|
-
|
|
1511
|
+
// Marked as slow since this adds a real-clock one second of delay.
|
|
1512
|
+
TEST_P(EndToEndTest, QUICHE_SLOW_TEST(LargePostNoPacketLoss1sRTT)) {
|
|
1512
1513
|
ASSERT_TRUE(Initialize());
|
|
1513
1514
|
SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(1000));
|
|
1514
1515
|
|
|
@@ -1637,7 +1638,13 @@ TEST_P(EndToEndTest, LargePostNoPacketLossWithDelayAndReordering) {
|
|
|
1637
1638
|
client_->SendCustomSynchronousRequest(headers, body));
|
|
1638
1639
|
}
|
|
1639
1640
|
|
|
1640
|
-
|
|
1641
|
+
// TODO(b/214587920): make this test not rely on timeouts.
|
|
1642
|
+
TEST_P(EndToEndTest, QUICHE_SLOW_TEST(AddressToken)) {
|
|
1643
|
+
client_config_.set_max_time_before_crypto_handshake(
|
|
1644
|
+
QuicTime::Delta::FromSeconds(3));
|
|
1645
|
+
client_config_.set_max_idle_time_before_crypto_handshake(
|
|
1646
|
+
QuicTime::Delta::FromSeconds(1));
|
|
1647
|
+
|
|
1641
1648
|
client_extra_copts_.push_back(kTRTT);
|
|
1642
1649
|
ASSERT_TRUE(Initialize());
|
|
1643
1650
|
if (!version_.HasIetfQuicFrames()) {
|
|
@@ -1686,11 +1693,7 @@ TEST_P(EndToEndTest, AddressToken) {
|
|
|
1686
1693
|
// QuicSentPacketManager::SetInitialRtt clamps the initial_rtt to between
|
|
1687
1694
|
// [min_initial_rtt, max_initial_rtt].
|
|
1688
1695
|
const QuicTime::Delta min_initial_rtt =
|
|
1689
|
-
|
|
1690
|
-
? QuicTime::Delta::FromMicroseconds(
|
|
1691
|
-
kMinTrustedInitialRoundTripTimeUs)
|
|
1692
|
-
: QuicTime::Delta::FromMicroseconds(
|
|
1693
|
-
kMinUntrustedInitialRoundTripTimeUs);
|
|
1696
|
+
QuicTime::Delta::FromMicroseconds(kMinTrustedInitialRoundTripTimeUs);
|
|
1694
1697
|
const QuicTime::Delta max_initial_rtt =
|
|
1695
1698
|
QuicTime::Delta::FromMicroseconds(kMaxInitialRoundTripTimeUs);
|
|
1696
1699
|
const QuicTime::Delta expected_initial_rtt =
|
|
@@ -1753,7 +1756,13 @@ TEST_P(EndToEndTest, AddressToken) {
|
|
|
1753
1756
|
}
|
|
1754
1757
|
|
|
1755
1758
|
// Verify that client does not reuse a source address token.
|
|
1756
|
-
|
|
1759
|
+
// TODO(b/214587920): make this test not rely on timeouts.
|
|
1760
|
+
TEST_P(EndToEndTest, QUICHE_SLOW_TEST(AddressTokenNotReusedByClient)) {
|
|
1761
|
+
client_config_.set_max_time_before_crypto_handshake(
|
|
1762
|
+
QuicTime::Delta::FromSeconds(3));
|
|
1763
|
+
client_config_.set_max_idle_time_before_crypto_handshake(
|
|
1764
|
+
QuicTime::Delta::FromSeconds(1));
|
|
1765
|
+
|
|
1757
1766
|
ASSERT_TRUE(Initialize());
|
|
1758
1767
|
if (!version_.HasIetfQuicFrames()) {
|
|
1759
1768
|
return;
|
|
@@ -4254,7 +4263,8 @@ TEST_P(EndToEndTest, BadPacketHeaderFlags) {
|
|
|
4254
4263
|
|
|
4255
4264
|
// Send a packet from the client with bad encrypted data. The server should not
|
|
4256
4265
|
// tear down the connection.
|
|
4257
|
-
|
|
4266
|
+
// Marked as slow since it calls absl::SleepFor().
|
|
4267
|
+
TEST_P(EndToEndTest, QUICHE_SLOW_TEST(BadEncryptedData)) {
|
|
4258
4268
|
ASSERT_TRUE(Initialize());
|
|
4259
4269
|
|
|
4260
4270
|
// Start the connection.
|
|
@@ -1066,9 +1066,12 @@ TEST(HttpDecoderTestNoFixture, WebTransportStreamError) {
|
|
|
1066
1066
|
EXPECT_CALL(visitor, OnWebTransportStreamFrameType(_, _));
|
|
1067
1067
|
decoder.ProcessInput(input.data(), input.size());
|
|
1068
1068
|
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1069
|
+
EXPECT_QUIC_BUG(
|
|
1070
|
+
{
|
|
1071
|
+
EXPECT_CALL(visitor, OnError(_));
|
|
1072
|
+
decoder.ProcessInput(input.data(), input.size());
|
|
1073
|
+
},
|
|
1074
|
+
"HttpDecoder called after an indefinite-length frame");
|
|
1072
1075
|
}
|
|
1073
1076
|
|
|
1074
1077
|
TEST_F(HttpDecoderTest, DecodeSettings) {
|
|
@@ -47,15 +47,6 @@ void QuicServerSessionBase::Initialize() {
|
|
|
47
47
|
void QuicServerSessionBase::OnConfigNegotiated() {
|
|
48
48
|
QuicSpdySession::OnConfigNegotiated();
|
|
49
49
|
|
|
50
|
-
const bool use_lower_min_irtt =
|
|
51
|
-
connection()->sent_packet_manager().use_lower_min_irtt();
|
|
52
|
-
|
|
53
|
-
if (!use_lower_min_irtt) {
|
|
54
|
-
if (!config()->HasReceivedConnectionOptions()) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
50
|
const CachedNetworkParameters* cached_network_params =
|
|
60
51
|
crypto_stream_->PreviousCachedNetworkParams();
|
|
61
52
|
|
|
@@ -65,7 +56,7 @@ void QuicServerSessionBase::OnConfigNegotiated() {
|
|
|
65
56
|
if (version().UsesTls() && cached_network_params != nullptr) {
|
|
66
57
|
if (cached_network_params->serving_region() == serving_region_) {
|
|
67
58
|
QUIC_CODE_COUNT(quic_server_received_network_params_at_same_region);
|
|
68
|
-
if (
|
|
59
|
+
if (config()->HasReceivedConnectionOptions() &&
|
|
69
60
|
ContainsQuicTag(config()->ReceivedConnectionOptions(), kTRTT)) {
|
|
70
61
|
QUIC_DLOG(INFO)
|
|
71
62
|
<< "Server: Setting initial rtt to "
|
|
@@ -74,18 +65,15 @@ void QuicServerSessionBase::OnConfigNegotiated() {
|
|
|
74
65
|
connection()->sent_packet_manager().SetInitialRtt(
|
|
75
66
|
QuicTime::Delta::FromMilliseconds(
|
|
76
67
|
cached_network_params->min_rtt_ms()),
|
|
77
|
-
/*trusted=*/
|
|
68
|
+
/*trusted=*/true);
|
|
78
69
|
}
|
|
79
70
|
} else {
|
|
80
71
|
QUIC_CODE_COUNT(quic_server_received_network_params_at_different_region);
|
|
81
72
|
}
|
|
82
73
|
}
|
|
83
74
|
|
|
84
|
-
if (
|
|
85
|
-
|
|
86
|
-
if (!config()->HasReceivedConnectionOptions()) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
75
|
+
if (!config()->HasReceivedConnectionOptions()) {
|
|
76
|
+
return;
|
|
89
77
|
}
|
|
90
78
|
|
|
91
79
|
if (GetQuicReloadableFlag(quic_enable_disable_resumption) &&
|
|
@@ -515,6 +515,12 @@ class QUIC_EXPORT_PRIVATE QuicSpdySession
|
|
|
515
515
|
// in settings and accept remote settings for.
|
|
516
516
|
virtual HttpDatagramSupport LocalHttpDatagramSupport();
|
|
517
517
|
|
|
518
|
+
// Sends any data which should be sent at the start of a connection, including
|
|
519
|
+
// the initial SETTINGS frame. When using 0-RTT, this method is called twice:
|
|
520
|
+
// once when encryption is established, and again when 1-RTT keys are
|
|
521
|
+
// available.
|
|
522
|
+
void SendInitialData();
|
|
523
|
+
|
|
518
524
|
private:
|
|
519
525
|
friend class test::QuicSpdySessionPeer;
|
|
520
526
|
|
|
@@ -549,12 +555,6 @@ class QUIC_EXPORT_PRIVATE QuicSpdySession
|
|
|
549
555
|
void CloseConnectionOnDuplicateHttp3UnidirectionalStreams(
|
|
550
556
|
absl::string_view type);
|
|
551
557
|
|
|
552
|
-
// Sends any data which should be sent at the start of a connection, including
|
|
553
|
-
// the initial SETTINGS frame. When using 0-RTT, this method is called twice:
|
|
554
|
-
// once when encryption is established, and again when 1-RTT keys are
|
|
555
|
-
// available.
|
|
556
|
-
void SendInitialData();
|
|
557
|
-
|
|
558
558
|
void FillSettingsFrame();
|
|
559
559
|
|
|
560
560
|
bool VerifySettingIsZeroOrOne(uint64_t id, uint64_t value);
|