@fails-components/webtransport 0.0.1 → 0.0.2
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/package.json +1 -1
- package/readme.md +1 -3
- package/src/http3eventloop.cc +83 -9
- package/src/http3eventloop.h +13 -3
- package/src/http3server.cc +22 -22
- package/src/http3server.h +7 -20
- package/src/http3wtstreamvisitor.cc +31 -10
- package/src/http3wtstreamvisitor.h +38 -11
- package/src/webtransport.js +91 -23
- package/test/echoserver.js +29 -5
- package/test/testsuite.js +242 -220
- package/third_party/boringssl/src/CMakeLists.txt +2 -0
- package/third_party/boringssl/src/crypto/CMakeLists.txt +1 -0
- package/third_party/boringssl/src/crypto/asn1/a_bitstr.c +174 -177
- package/third_party/boringssl/src/crypto/asn1/a_bool.c +46 -48
- package/third_party/boringssl/src/crypto/asn1/a_d2i_fp.c +21 -23
- package/third_party/boringssl/src/crypto/asn1/a_dup.c +21 -23
- package/third_party/boringssl/src/crypto/asn1/a_gentm.c +84 -187
- package/third_party/boringssl/src/crypto/asn1/a_i2d_fp.c +19 -21
- package/third_party/boringssl/src/crypto/asn1/a_int.c +305 -329
- package/third_party/boringssl/src/crypto/asn1/a_mbstr.c +190 -195
- package/third_party/boringssl/src/crypto/asn1/a_object.c +182 -189
- package/third_party/boringssl/src/crypto/asn1/a_octet.c +6 -9
- package/third_party/boringssl/src/crypto/asn1/a_print.c +15 -16
- package/third_party/boringssl/src/crypto/asn1/a_strex.c +386 -399
- package/third_party/boringssl/src/crypto/asn1/a_strnid.c +110 -131
- package/third_party/boringssl/src/crypto/asn1/a_time.c +118 -111
- package/third_party/boringssl/src/crypto/asn1/a_type.c +59 -60
- package/third_party/boringssl/src/crypto/asn1/a_utctm.c +114 -186
- package/third_party/boringssl/src/crypto/asn1/a_utf8.c +171 -159
- package/third_party/boringssl/src/crypto/asn1/asn1_lib.c +245 -260
- package/third_party/boringssl/src/crypto/asn1/asn1_par.c +41 -40
- package/third_party/boringssl/src/crypto/asn1/asn1_test.cc +31 -0
- package/third_party/boringssl/src/crypto/asn1/asn_pack.c +31 -33
- package/third_party/boringssl/src/crypto/asn1/f_int.c +36 -33
- package/third_party/boringssl/src/crypto/asn1/f_string.c +29 -26
- package/third_party/boringssl/src/crypto/asn1/internal.h +62 -61
- package/third_party/boringssl/src/crypto/asn1/tasn_dec.c +706 -702
- package/third_party/boringssl/src/crypto/asn1/tasn_enc.c +507 -524
- package/third_party/boringssl/src/crypto/asn1/tasn_fre.c +141 -133
- package/third_party/boringssl/src/crypto/asn1/tasn_new.c +207 -199
- package/third_party/boringssl/src/crypto/asn1/tasn_typ.c +19 -22
- package/third_party/boringssl/src/crypto/asn1/tasn_utl.c +24 -24
- package/third_party/boringssl/src/crypto/asn1/time_support.c +13 -13
- package/third_party/boringssl/src/crypto/bio/connect.c +9 -3
- package/third_party/boringssl/src/crypto/bytestring/bytestring_test.cc +125 -1
- package/third_party/boringssl/src/crypto/bytestring/cbb.c +4 -7
- package/third_party/boringssl/src/crypto/bytestring/cbs.c +167 -9
- package/third_party/boringssl/src/crypto/cipher_extra/e_aesctrhmac.c +0 -2
- package/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.c +23 -54
- package/third_party/boringssl/src/crypto/cipher_extra/e_chacha20poly1305.c +0 -2
- package/third_party/boringssl/src/crypto/cipher_extra/e_tls.c +0 -2
- package/third_party/boringssl/src/crypto/curve25519/curve25519.c +6 -8
- package/third_party/boringssl/src/crypto/evp/evp_ctx.c +25 -22
- package/third_party/boringssl/src/crypto/evp/internal.h +15 -9
- package/third_party/boringssl/src/crypto/evp/p_dsa_asn1.c +2 -0
- package/third_party/boringssl/src/crypto/evp/p_ec_asn1.c +2 -0
- package/third_party/boringssl/src/crypto/evp/p_ed25519.c +3 -3
- package/third_party/boringssl/src/crypto/evp/p_ed25519_asn1.c +10 -7
- package/third_party/boringssl/src/crypto/evp/p_hkdf.c +241 -0
- package/third_party/boringssl/src/crypto/evp/p_rsa_asn1.c +2 -0
- package/third_party/boringssl/src/crypto/evp/p_x25519_asn1.c +1 -0
- package/third_party/boringssl/src/crypto/fipsmodule/aes/aes_nohw.c +9 -10
- package/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.c +2 -6
- package/third_party/boringssl/src/crypto/fipsmodule/bn/exponentiation.c +5 -11
- package/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h +1 -1
- package/third_party/boringssl/src/crypto/fipsmodule/bn/prime.c +2 -0
- package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.c +10 -26
- package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aesccm.c +2 -3
- package/third_party/boringssl/src/crypto/fipsmodule/digestsign/digestsign.c +1 -0
- package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.c +44 -43
- package/third_party/boringssl/src/crypto/fipsmodule/modes/cbc.c +5 -9
- package/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.c +14 -21
- package/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c +8 -8
- package/third_party/boringssl/src/crypto/fipsmodule/rand/internal.h +1 -4
- package/third_party/boringssl/src/crypto/hkdf/hkdf_test.cc +104 -0
- package/third_party/boringssl/src/crypto/internal.h +18 -4
- package/third_party/boringssl/src/crypto/lhash/internal.h +13 -1
- package/third_party/boringssl/src/crypto/obj/obj_dat.h +4 -1
- package/third_party/boringssl/src/crypto/obj/obj_mac.num +1 -0
- package/third_party/boringssl/src/crypto/obj/objects.txt +2 -0
- package/third_party/boringssl/src/crypto/pem/pem_all.c +77 -86
- package/third_party/boringssl/src/crypto/pem/pem_info.c +221 -233
- package/third_party/boringssl/src/crypto/pem/pem_lib.c +639 -608
- package/third_party/boringssl/src/crypto/pem/pem_oth.c +17 -16
- package/third_party/boringssl/src/crypto/pem/pem_pk8.c +133 -142
- package/third_party/boringssl/src/crypto/pem/pem_pkey.c +96 -92
- package/third_party/boringssl/src/crypto/poly1305/poly1305_vec.c +12 -28
- package/third_party/boringssl/src/crypto/siphash/siphash.c +8 -11
- package/third_party/boringssl/src/crypto/siphash/siphash_test.cc +5 -7
- package/third_party/boringssl/src/crypto/stack/stack.c +33 -16
- package/third_party/boringssl/src/crypto/thread_pthread.c +0 -2
- package/third_party/boringssl/src/crypto/thread_win.c +0 -2
- package/third_party/boringssl/src/crypto/trust_token/internal.h +14 -0
- package/third_party/boringssl/src/crypto/trust_token/pmbtoken.c +127 -30
- package/third_party/boringssl/src/crypto/trust_token/trust_token.c +40 -0
- package/third_party/boringssl/src/crypto/trust_token/trust_token_test.cc +165 -0
- package/third_party/boringssl/src/crypto/trust_token/voprf.c +55 -6
- package/third_party/boringssl/src/crypto/x509/a_digest.c +23 -24
- package/third_party/boringssl/src/crypto/x509/a_sign.c +52 -55
- package/third_party/boringssl/src/crypto/x509/a_verify.c +33 -34
- package/third_party/boringssl/src/crypto/x509/algorithm.c +17 -18
- package/third_party/boringssl/src/crypto/x509/asn1_gen.c +618 -612
- package/third_party/boringssl/src/crypto/x509/by_dir.c +320 -337
- package/third_party/boringssl/src/crypto/x509/by_file.c +186 -186
- package/third_party/boringssl/src/crypto/x509/i2d_pr.c +11 -14
- package/third_party/boringssl/src/crypto/x509/internal.h +22 -22
- package/third_party/boringssl/src/crypto/x509/name_print.c +155 -150
- package/third_party/boringssl/src/crypto/x509/rsa_pss.c +27 -29
- package/third_party/boringssl/src/crypto/x509/t_crl.c +67 -70
- package/third_party/boringssl/src/crypto/x509/t_req.c +3 -5
- package/third_party/boringssl/src/crypto/x509/t_x509.c +280 -251
- package/third_party/boringssl/src/crypto/x509/t_x509a.c +52 -47
- package/third_party/boringssl/src/crypto/x509/x509.c +3 -4
- package/third_party/boringssl/src/crypto/x509/x509_att.c +234 -223
- package/third_party/boringssl/src/crypto/x509/x509_cmp.c +286 -296
- package/third_party/boringssl/src/crypto/x509/x509_d2.c +37 -32
- package/third_party/boringssl/src/crypto/x509/x509_def.c +14 -30
- package/third_party/boringssl/src/crypto/x509/x509_ext.c +55 -84
- package/third_party/boringssl/src/crypto/x509/x509_lu.c +545 -581
- package/third_party/boringssl/src/crypto/x509/x509_obj.c +131 -121
- package/third_party/boringssl/src/crypto/x509/x509_req.c +120 -139
- package/third_party/boringssl/src/crypto/x509/x509_set.c +128 -142
- package/third_party/boringssl/src/crypto/x509/x509_trs.c +185 -193
- package/third_party/boringssl/src/crypto/x509/x509_txt.c +70 -72
- package/third_party/boringssl/src/crypto/x509/x509_v3.c +172 -161
- package/third_party/boringssl/src/crypto/x509/x509_vfy.c +2041 -2053
- package/third_party/boringssl/src/crypto/x509/x509_vpm.c +441 -461
- package/third_party/boringssl/src/crypto/x509/x509cset.c +152 -170
- package/third_party/boringssl/src/crypto/x509/x509name.c +274 -260
- package/third_party/boringssl/src/crypto/x509/x509rset.c +43 -20
- package/third_party/boringssl/src/crypto/x509/x509spki.c +62 -63
- package/third_party/boringssl/src/crypto/x509/x_algor.c +64 -62
- package/third_party/boringssl/src/crypto/x509/x_all.c +103 -133
- package/third_party/boringssl/src/crypto/x509/x_attrib.c +23 -24
- package/third_party/boringssl/src/crypto/x509/x_crl.c +310 -321
- package/third_party/boringssl/src/crypto/x509/x_exten.c +6 -5
- package/third_party/boringssl/src/crypto/x509/x_info.c +31 -28
- package/third_party/boringssl/src/crypto/x509/x_name.c +361 -365
- package/third_party/boringssl/src/crypto/x509/x_pkey.c +38 -32
- package/third_party/boringssl/src/crypto/x509/x_pubkey.c +114 -117
- package/third_party/boringssl/src/crypto/x509/x_req.c +27 -29
- package/third_party/boringssl/src/crypto/x509/x_sig.c +2 -2
- package/third_party/boringssl/src/crypto/x509/x_spki.c +8 -10
- package/third_party/boringssl/src/crypto/x509/x_val.c +2 -2
- package/third_party/boringssl/src/crypto/x509/x_x509.c +212 -226
- package/third_party/boringssl/src/crypto/x509/x_x509a.c +112 -109
- package/third_party/boringssl/src/crypto/x509v3/ext_dat.h +10 -13
- package/third_party/boringssl/src/crypto/x509v3/internal.h +72 -87
- package/third_party/boringssl/src/crypto/x509v3/pcy_cache.c +184 -176
- package/third_party/boringssl/src/crypto/x509v3/pcy_data.c +58 -56
- package/third_party/boringssl/src/crypto/x509v3/pcy_lib.c +71 -70
- package/third_party/boringssl/src/crypto/x509v3/pcy_map.c +56 -58
- package/third_party/boringssl/src/crypto/x509v3/pcy_node.c +89 -91
- package/third_party/boringssl/src/crypto/x509v3/pcy_tree.c +585 -590
- package/third_party/boringssl/src/crypto/x509v3/v3_akey.c +118 -112
- package/third_party/boringssl/src/crypto/x509v3/v3_akeya.c +3 -3
- package/third_party/boringssl/src/crypto/x509v3/v3_alt.c +447 -451
- package/third_party/boringssl/src/crypto/x509v3/v3_bcons.c +44 -38
- package/third_party/boringssl/src/crypto/x509v3/v3_bitst.c +39 -43
- package/third_party/boringssl/src/crypto/x509v3/v3_conf.c +321 -320
- package/third_party/boringssl/src/crypto/x509v3/v3_cpols.c +352 -327
- package/third_party/boringssl/src/crypto/x509v3/v3_crld.c +437 -383
- package/third_party/boringssl/src/crypto/x509v3/v3_enum.c +23 -16
- package/third_party/boringssl/src/crypto/x509v3/v3_extku.c +62 -53
- package/third_party/boringssl/src/crypto/x509v3/v3_genn.c +118 -115
- package/third_party/boringssl/src/crypto/x509v3/v3_ia5.c +30 -31
- package/third_party/boringssl/src/crypto/x509v3/v3_info.c +112 -98
- package/third_party/boringssl/src/crypto/x509v3/v3_int.c +40 -15
- package/third_party/boringssl/src/crypto/x509v3/v3_lib.c +248 -252
- package/third_party/boringssl/src/crypto/x509v3/v3_ncons.c +390 -386
- package/third_party/boringssl/src/crypto/x509v3/v3_ocsp.c +45 -32
- package/third_party/boringssl/src/crypto/x509v3/v3_pci.c +206 -209
- package/third_party/boringssl/src/crypto/x509v3/v3_pcia.c +6 -8
- package/third_party/boringssl/src/crypto/x509v3/v3_pcons.c +54 -50
- package/third_party/boringssl/src/crypto/x509v3/v3_pmaps.c +66 -65
- package/third_party/boringssl/src/crypto/x509v3/v3_prn.c +144 -133
- package/third_party/boringssl/src/crypto/x509v3/v3_purp.c +695 -709
- package/third_party/boringssl/src/crypto/x509v3/v3_skey.c +75 -69
- package/third_party/boringssl/src/crypto/x509v3/v3_utl.c +1102 -1082
- package/third_party/boringssl/src/include/openssl/base.h +3 -1
- package/third_party/boringssl/src/include/openssl/bn.h +3 -0
- package/third_party/boringssl/src/include/openssl/bytestring.h +20 -0
- package/third_party/boringssl/src/include/openssl/evp.h +6 -5
- package/third_party/boringssl/src/include/openssl/kdf.h +91 -0
- package/third_party/boringssl/src/include/openssl/nid.h +4 -0
- package/third_party/boringssl/src/include/openssl/ssl.h +6 -1
- package/third_party/boringssl/src/include/openssl/stack.h +47 -32
- package/third_party/boringssl/src/include/openssl/trust_token.h +18 -3
- package/third_party/boringssl/src/include/openssl/x509.h +18 -0
- package/third_party/boringssl/src/ssl/ssl_file.cc +61 -99
- package/third_party/boringssl/src/ssl/ssl_test.cc +101 -0
- package/third_party/boringssl/src/util/doc.config +2 -1
- package/third_party/boringssl/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go +8 -0
- package/third_party/googleurl/AUTHORS +16 -2
- package/third_party/googleurl/base/BUILD +1 -0
- package/third_party/googleurl/base/compiler_specific.h +16 -17
- package/third_party/googleurl/base/containers/contiguous_iterator.h +13 -9
- package/third_party/googleurl/base/containers/span.h +23 -8
- package/third_party/googleurl/base/memory/raw_ptr.h +17 -25
- package/third_party/googleurl/base/memory/raw_ptr_exclusion.h +21 -0
- package/third_party/googleurl/base/strings/escape.cc +14 -2
- package/third_party/googleurl/base/strings/safe_sprintf.h +1 -1
- package/third_party/googleurl/base/strings/string_number_conversions.cc +5 -3
- package/third_party/googleurl/base/strings/string_number_conversions_internal.h +5 -5
- package/third_party/googleurl/base/strings/string_piece.h +3 -3
- package/third_party/googleurl/base/strings/string_util.cc +4 -27
- package/third_party/googleurl/base/strings/string_util.h +43 -8
- package/third_party/googleurl/base/strings/string_util_internal.h +11 -12
- package/third_party/googleurl/base/strings/string_util_unittest.cc +33 -0
- package/third_party/googleurl/base/strings/string_util_win.cc +0 -5
- package/third_party/googleurl/base/strings/string_util_win.h +9 -1
- package/third_party/googleurl/base/strings/utf_offset_string_conversions.cc +1 -1
- package/third_party/googleurl/base/strings/utf_string_conversion_utils.cc +5 -8
- package/third_party/googleurl/base/strings/utf_string_conversion_utils.h +13 -10
- package/third_party/googleurl/base/strings/utf_string_conversions.cc +32 -25
- package/third_party/googleurl/base/template_util.h +23 -35
- package/third_party/googleurl/build/build_config.h +14 -3
- package/third_party/googleurl/copy.bara.sky +1 -1
- package/third_party/googleurl/url/gurl.cc +8 -4
- package/third_party/googleurl/url/gurl.h +1 -0
- package/third_party/googleurl/url/gurl_unittest.cc +1 -0
- package/third_party/googleurl/url/origin.h +36 -26
- package/third_party/googleurl/url/scheme_host_port.h +4 -1
- package/third_party/googleurl/url/url_canon.h +2 -1
- package/third_party/googleurl/url/url_canon_internal.cc +9 -7
- package/third_party/googleurl/url/url_canon_internal.h +16 -16
- package/third_party/googleurl/url/url_canon_stdstring.h +2 -1
- package/third_party/googleurl/url/url_util.cc +9 -8
- package/third_party/quiche/build/source_list.bzl +7 -0
- package/third_party/quiche/build/source_list.gni +7 -0
- package/third_party/quiche/build/source_list.json +7 -0
- package/third_party/quiche/quiche/common/platform/api/quiche_mem_slice.h +7 -3
- package/third_party/quiche/quiche/http2/adapter/nghttp2_adapter_test.cc +86 -2
- package/third_party/quiche/quiche/http2/adapter/oghttp2_adapter_test.cc +104 -2
- package/third_party/quiche/quiche/http2/adapter/oghttp2_session.cc +23 -0
- package/third_party/quiche/quiche/http2/adapter/oghttp2_session.h +6 -1
- package/third_party/quiche/quiche/quic/core/congestion_control/send_algorithm_test.cc +0 -16
- package/third_party/quiche/quiche/quic/core/crypto/crypto_protocol.h +1 -1
- package/third_party/quiche/quiche/quic/core/http/end_to_end_test.cc +56 -2
- package/third_party/quiche/quiche/quic/core/http/http_constants.cc +1 -0
- package/third_party/quiche/quiche/quic/core/http/http_constants.h +1 -0
- package/third_party/quiche/quiche/quic/core/http/http_encoder.cc +28 -17
- package/third_party/quiche/quiche/quic/core/http/http_encoder.h +5 -0
- package/third_party/quiche/quiche/quic/core/http/http_encoder_test.cc +26 -30
- package/third_party/quiche/quiche/quic/core/http/http_frames.h +1 -0
- package/third_party/quiche/quiche/quic/core/http/quic_server_session_base.cc +4 -4
- package/third_party/quiche/quiche/quic/core/http/quic_server_session_base_test.cc +1 -1
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_client_session.cc +5 -1
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.cc +6 -33
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.h +0 -17
- package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream_test.cc +5 -20
- package/third_party/quiche/quiche/quic/core/io/quic_event_loop.h +81 -0
- package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop.cc +265 -0
- package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop.h +152 -0
- package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop_test.cc +341 -0
- package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store.cc +3 -1
- package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store.h +7 -7
- package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store_test.cc +4 -3
- package/third_party/quiche/quiche/quic/core/quic_connection.cc +69 -19
- package/third_party/quiche/quiche/quic/core/quic_connection.h +9 -3
- package/third_party/quiche/quiche/quic/core/quic_connection_id_manager.cc +29 -10
- package/third_party/quiche/quiche/quic/core/quic_connection_id_manager.h +5 -3
- package/third_party/quiche/quiche/quic/core/quic_connection_id_manager_test.cc +85 -22
- package/third_party/quiche/quiche/quic/core/quic_connection_test.cc +186 -30
- package/third_party/quiche/quiche/quic/core/quic_crypto_stream.cc +2 -1
- package/third_party/quiche/quiche/quic/core/quic_default_clock.cc +31 -0
- package/third_party/quiche/quiche/quic/core/quic_default_clock.h +34 -0
- package/third_party/quiche/quiche/quic/core/quic_default_connection_helper.h +49 -0
- package/third_party/quiche/quiche/quic/core/quic_dispatcher.cc +53 -37
- package/third_party/quiche/quiche/quic/core/quic_dispatcher.h +19 -11
- package/third_party/quiche/quiche/quic/core/quic_dispatcher_test.cc +15 -2
- package/third_party/quiche/quiche/quic/core/quic_flags_list.h +10 -4
- package/third_party/quiche/quiche/quic/core/quic_idle_network_detector.cc +2 -2
- package/third_party/quiche/quiche/quic/core/quic_idle_network_detector_test.cc +4 -4
- package/third_party/quiche/quiche/quic/core/quic_packet_creator.cc +14 -3
- package/third_party/quiche/quiche/quic/core/quic_packet_creator_test.cc +145 -2
- package/third_party/quiche/quiche/quic/core/quic_packets.cc +3 -1
- package/third_party/quiche/quiche/quic/core/quic_packets.h +4 -0
- package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.cc +13 -11
- package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.h +9 -0
- package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager_test.cc +6 -0
- package/third_party/quiche/quiche/quic/core/quic_session.cc +3 -2
- package/third_party/quiche/quiche/quic/core/quic_session.h +8 -3
- package/third_party/quiche/quiche/quic/core/quic_types.cc +18 -0
- package/third_party/quiche/quiche/quic/core/quic_types.h +3 -0
- package/third_party/quiche/quiche/quic/core/tls_chlo_extractor.cc +3 -0
- package/third_party/quiche/quiche/quic/core/tls_chlo_extractor.h +10 -0
- package/third_party/quiche/quiche/quic/test_tools/mock_quic_session_visitor.h +1 -1
- package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.h +1 -1
- package/third_party/quiche/quiche/quic/test_tools/server_thread.cc +3 -2
- package/third_party/quiche/quiche/quic/test_tools/simple_session_notifier.cc +7 -1
- package/third_party/quiche/quiche/quic/test_tools/simple_session_notifier.h +3 -0
- package/third_party/quiche/quiche/quic/test_tools/simulator/quic_endpoint.h +4 -2
- package/certs/ca.cnf +0 -69
- package/certs/generate_certs.sh +0 -53
- package/certs/generate_certs_leaf.sh +0 -53
- package/certs/leaf.cnf +0 -24
- package/certs/readme.txt +0 -2
- package/third_party/quiche/build/BUILD.bazel +0 -7
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#include "quiche/quic/core/crypto/null_encrypter.h"
|
|
19
19
|
#include "quiche/quic/core/crypto/quic_decrypter.h"
|
|
20
20
|
#include "quiche/quic/core/crypto/quic_encrypter.h"
|
|
21
|
+
#include "quiche/quic/core/frames/quic_frame.h"
|
|
21
22
|
#include "quiche/quic/core/frames/quic_stream_frame.h"
|
|
22
23
|
#include "quiche/quic/core/quic_connection_id.h"
|
|
23
24
|
#include "quiche/quic/core/quic_data_writer.h"
|
|
@@ -1927,6 +1928,10 @@ TEST_P(QuicPacketCreatorTest, PacketTransmissionType) {
|
|
|
1927
1928
|
absl::string_view()));
|
|
1928
1929
|
ASSERT_TRUE(QuicUtils::IsRetransmittableFrame(stream_frame.type));
|
|
1929
1930
|
|
|
1931
|
+
QuicFrame stream_frame_2(QuicStreamFrame(stream_id,
|
|
1932
|
+
/*fin=*/false, 1u,
|
|
1933
|
+
absl::string_view()));
|
|
1934
|
+
|
|
1930
1935
|
QuicFrame padding_frame{QuicPaddingFrame()};
|
|
1931
1936
|
ASSERT_FALSE(QuicUtils::IsRetransmittableFrame(padding_frame.type));
|
|
1932
1937
|
|
|
@@ -1939,16 +1944,154 @@ TEST_P(QuicPacketCreatorTest, PacketTransmissionType) {
|
|
|
1939
1944
|
EXPECT_TRUE(creator_.AddFrame(stream_frame, PTO_RETRANSMISSION));
|
|
1940
1945
|
ASSERT_EQ(serialized_packet_, nullptr);
|
|
1941
1946
|
|
|
1942
|
-
EXPECT_TRUE(creator_.AddFrame(
|
|
1947
|
+
EXPECT_TRUE(creator_.AddFrame(stream_frame_2, PATH_RETRANSMISSION));
|
|
1948
|
+
ASSERT_EQ(serialized_packet_, nullptr);
|
|
1949
|
+
|
|
1950
|
+
EXPECT_TRUE(creator_.AddFrame(padding_frame, PTO_RETRANSMISSION));
|
|
1943
1951
|
creator_.FlushCurrentPacket();
|
|
1944
1952
|
ASSERT_TRUE(serialized_packet_->encrypted_buffer);
|
|
1945
1953
|
|
|
1946
1954
|
// The last retransmittable frame on packet is a stream frame, the packet's
|
|
1947
1955
|
// transmission type should be the same as the stream frame's.
|
|
1948
|
-
EXPECT_EQ(serialized_packet_->transmission_type,
|
|
1956
|
+
EXPECT_EQ(serialized_packet_->transmission_type, PATH_RETRANSMISSION);
|
|
1957
|
+
DeleteSerializedPacket();
|
|
1958
|
+
}
|
|
1959
|
+
|
|
1960
|
+
TEST_P(QuicPacketCreatorTest,
|
|
1961
|
+
PacketBytesRetransmitted_AddFrame_Retransmission) {
|
|
1962
|
+
creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
|
|
1963
|
+
|
|
1964
|
+
QuicAckFrame temp_ack_frame = InitAckFrame(1);
|
|
1965
|
+
QuicFrame ack_frame(&temp_ack_frame);
|
|
1966
|
+
EXPECT_TRUE(creator_.AddFrame(ack_frame, LOSS_RETRANSMISSION));
|
|
1967
|
+
|
|
1968
|
+
QuicStreamId stream_id = QuicUtils::GetFirstBidirectionalStreamId(
|
|
1969
|
+
client_framer_.transport_version(), Perspective::IS_CLIENT);
|
|
1970
|
+
|
|
1971
|
+
QuicFrame stream_frame;
|
|
1972
|
+
const std::string data("data");
|
|
1973
|
+
// ConsumeDataToFillCurrentPacket calls AddFrame
|
|
1974
|
+
ASSERT_TRUE(creator_.ConsumeDataToFillCurrentPacket(
|
|
1975
|
+
stream_id, data, 0u, false, false, PTO_RETRANSMISSION, &stream_frame));
|
|
1976
|
+
EXPECT_EQ(4u, stream_frame.stream_frame.data_length);
|
|
1977
|
+
|
|
1978
|
+
EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
|
1979
|
+
.WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
|
1980
|
+
|
|
1981
|
+
creator_.FlushCurrentPacket();
|
|
1982
|
+
ASSERT_TRUE(serialized_packet_->encrypted_buffer);
|
|
1983
|
+
ASSERT_FALSE(serialized_packet_->bytes_not_retransmitted.has_value());
|
|
1984
|
+
|
|
1949
1985
|
DeleteSerializedPacket();
|
|
1950
1986
|
}
|
|
1951
1987
|
|
|
1988
|
+
TEST_P(QuicPacketCreatorTest,
|
|
1989
|
+
PacketBytesRetransmitted_AddFrame_NotRetransmission) {
|
|
1990
|
+
creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
|
|
1991
|
+
|
|
1992
|
+
QuicAckFrame temp_ack_frame = InitAckFrame(1);
|
|
1993
|
+
QuicFrame ack_frame(&temp_ack_frame);
|
|
1994
|
+
EXPECT_TRUE(creator_.AddFrame(ack_frame, NOT_RETRANSMISSION));
|
|
1995
|
+
|
|
1996
|
+
QuicStreamId stream_id = QuicUtils::GetFirstBidirectionalStreamId(
|
|
1997
|
+
client_framer_.transport_version(), Perspective::IS_CLIENT);
|
|
1998
|
+
|
|
1999
|
+
QuicFrame stream_frame;
|
|
2000
|
+
const std::string data("data");
|
|
2001
|
+
// ConsumeDataToFillCurrentPacket calls AddFrame
|
|
2002
|
+
ASSERT_TRUE(creator_.ConsumeDataToFillCurrentPacket(
|
|
2003
|
+
stream_id, data, 0u, false, false, NOT_RETRANSMISSION, &stream_frame));
|
|
2004
|
+
EXPECT_EQ(4u, stream_frame.stream_frame.data_length);
|
|
2005
|
+
|
|
2006
|
+
EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
|
2007
|
+
.WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
|
2008
|
+
|
|
2009
|
+
creator_.FlushCurrentPacket();
|
|
2010
|
+
ASSERT_TRUE(serialized_packet_->encrypted_buffer);
|
|
2011
|
+
ASSERT_FALSE(serialized_packet_->bytes_not_retransmitted.has_value());
|
|
2012
|
+
|
|
2013
|
+
DeleteSerializedPacket();
|
|
2014
|
+
}
|
|
2015
|
+
|
|
2016
|
+
TEST_P(QuicPacketCreatorTest, PacketBytesRetransmitted_AddFrame_MixedFrames) {
|
|
2017
|
+
creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
|
|
2018
|
+
|
|
2019
|
+
QuicAckFrame temp_ack_frame = InitAckFrame(1);
|
|
2020
|
+
QuicFrame ack_frame(&temp_ack_frame);
|
|
2021
|
+
EXPECT_TRUE(creator_.AddFrame(ack_frame, NOT_RETRANSMISSION));
|
|
2022
|
+
|
|
2023
|
+
QuicStreamId stream_id = QuicUtils::GetFirstBidirectionalStreamId(
|
|
2024
|
+
client_framer_.transport_version(), Perspective::IS_CLIENT);
|
|
2025
|
+
|
|
2026
|
+
QuicFrame stream_frame;
|
|
2027
|
+
const std::string data("data");
|
|
2028
|
+
// ConsumeDataToFillCurrentPacket calls AddFrame
|
|
2029
|
+
ASSERT_TRUE(creator_.ConsumeDataToFillCurrentPacket(
|
|
2030
|
+
stream_id, data, 0u, false, false, NOT_RETRANSMISSION, &stream_frame));
|
|
2031
|
+
EXPECT_EQ(4u, stream_frame.stream_frame.data_length);
|
|
2032
|
+
|
|
2033
|
+
QuicFrame stream_frame2;
|
|
2034
|
+
// ConsumeDataToFillCurrentPacket calls AddFrame
|
|
2035
|
+
ASSERT_TRUE(creator_.ConsumeDataToFillCurrentPacket(
|
|
2036
|
+
stream_id, data, 0u, false, false, LOSS_RETRANSMISSION, &stream_frame2));
|
|
2037
|
+
EXPECT_EQ(4u, stream_frame2.stream_frame.data_length);
|
|
2038
|
+
|
|
2039
|
+
EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
|
2040
|
+
.WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
|
2041
|
+
|
|
2042
|
+
creator_.FlushCurrentPacket();
|
|
2043
|
+
ASSERT_TRUE(serialized_packet_->encrypted_buffer);
|
|
2044
|
+
ASSERT_TRUE(serialized_packet_->bytes_not_retransmitted.has_value());
|
|
2045
|
+
ASSERT_GE(serialized_packet_->bytes_not_retransmitted.value(), 4u);
|
|
2046
|
+
|
|
2047
|
+
DeleteSerializedPacket();
|
|
2048
|
+
}
|
|
2049
|
+
|
|
2050
|
+
TEST_P(QuicPacketCreatorTest,
|
|
2051
|
+
PacketBytesRetransmitted_CreateAndSerializeStreamFrame_Retransmission) {
|
|
2052
|
+
creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
|
|
2053
|
+
|
|
2054
|
+
const std::string data("test");
|
|
2055
|
+
producer_.SaveStreamData(GetNthClientInitiatedStreamId(0), data);
|
|
2056
|
+
EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
|
2057
|
+
.WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
|
2058
|
+
size_t num_bytes_consumed;
|
|
2059
|
+
// Retransmission frame adds to packet's bytes_retransmitted
|
|
2060
|
+
creator_.CreateAndSerializeStreamFrame(
|
|
2061
|
+
GetNthClientInitiatedStreamId(0), data.length(), 0, 0, true,
|
|
2062
|
+
LOSS_RETRANSMISSION, &num_bytes_consumed);
|
|
2063
|
+
EXPECT_EQ(4u, num_bytes_consumed);
|
|
2064
|
+
|
|
2065
|
+
ASSERT_TRUE(serialized_packet_->encrypted_buffer);
|
|
2066
|
+
ASSERT_FALSE(serialized_packet_->bytes_not_retransmitted.has_value());
|
|
2067
|
+
DeleteSerializedPacket();
|
|
2068
|
+
|
|
2069
|
+
EXPECT_FALSE(creator_.HasPendingFrames());
|
|
2070
|
+
}
|
|
2071
|
+
|
|
2072
|
+
TEST_P(
|
|
2073
|
+
QuicPacketCreatorTest,
|
|
2074
|
+
PacketBytesRetransmitted_CreateAndSerializeStreamFrame_NotRetransmission) {
|
|
2075
|
+
creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
|
|
2076
|
+
|
|
2077
|
+
const std::string data("test");
|
|
2078
|
+
producer_.SaveStreamData(GetNthClientInitiatedStreamId(0), data);
|
|
2079
|
+
EXPECT_CALL(delegate_, OnSerializedPacket(_))
|
|
2080
|
+
.WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
|
|
2081
|
+
size_t num_bytes_consumed;
|
|
2082
|
+
// Non-retransmission frame does not add to packet's bytes_retransmitted
|
|
2083
|
+
creator_.CreateAndSerializeStreamFrame(
|
|
2084
|
+
GetNthClientInitiatedStreamId(0), data.length(), 0, 0, true,
|
|
2085
|
+
NOT_RETRANSMISSION, &num_bytes_consumed);
|
|
2086
|
+
EXPECT_EQ(4u, num_bytes_consumed);
|
|
2087
|
+
|
|
2088
|
+
ASSERT_TRUE(serialized_packet_->encrypted_buffer);
|
|
2089
|
+
ASSERT_FALSE(serialized_packet_->bytes_not_retransmitted.has_value());
|
|
2090
|
+
DeleteSerializedPacket();
|
|
2091
|
+
|
|
2092
|
+
EXPECT_FALSE(creator_.HasPendingFrames());
|
|
2093
|
+
}
|
|
2094
|
+
|
|
1952
2095
|
TEST_P(QuicPacketCreatorTest, RetryToken) {
|
|
1953
2096
|
if (!GetParam().version_serialization ||
|
|
1954
2097
|
!QuicVersionHasLongHeaderLengths(client_framer_.transport_version())) {
|
|
@@ -439,7 +439,8 @@ SerializedPacket::SerializedPacket(SerializedPacket&& other)
|
|
|
439
439
|
has_ack_frequency(other.has_ack_frequency),
|
|
440
440
|
has_message(other.has_message),
|
|
441
441
|
fate(other.fate),
|
|
442
|
-
peer_address(other.peer_address)
|
|
442
|
+
peer_address(other.peer_address),
|
|
443
|
+
bytes_not_retransmitted(other.bytes_not_retransmitted) {
|
|
443
444
|
if (this != &other) {
|
|
444
445
|
if (release_encrypted_buffer && encrypted_buffer != nullptr) {
|
|
445
446
|
release_encrypted_buffer(encrypted_buffer);
|
|
@@ -486,6 +487,7 @@ SerializedPacket* CopySerializedPacket(const SerializedPacket& serialized,
|
|
|
486
487
|
copy->has_message = serialized.has_message;
|
|
487
488
|
copy->fate = serialized.fate;
|
|
488
489
|
copy->peer_address = serialized.peer_address;
|
|
490
|
+
copy->bytes_not_retransmitted = serialized.bytes_not_retransmitted;
|
|
489
491
|
|
|
490
492
|
if (copy_buffer) {
|
|
491
493
|
copy->encrypted_buffer = CopyBuffer(serialized);
|
|
@@ -376,6 +376,10 @@ struct QUIC_EXPORT_PRIVATE SerializedPacket {
|
|
|
376
376
|
bool has_message;
|
|
377
377
|
SerializedPacketFate fate;
|
|
378
378
|
QuicSocketAddress peer_address;
|
|
379
|
+
// Sum of bytes from frames that are not retransmissions. This field is only
|
|
380
|
+
// populated for packets with "mixed frames": at least one frame of a
|
|
381
|
+
// retransmission type and at least one frame of NOT_RETRANSMISSION type.
|
|
382
|
+
absl::optional<QuicByteCount> bytes_not_retransmitted;
|
|
379
383
|
};
|
|
380
384
|
|
|
381
385
|
// Make a copy of |serialized| (including the underlying frames). |copy_buffer|
|
|
@@ -131,17 +131,19 @@ void QuicSentPacketManager::SetFromConfig(const QuicConfig& config) {
|
|
|
131
131
|
ignore_ack_delay_ = true;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
if (
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
134
|
+
if (!remove_blackhole_detection_experiments_) {
|
|
135
|
+
if (config.HasClientRequestedIndependentOption(kPDP1, perspective)) {
|
|
136
|
+
num_ptos_for_path_degrading_ = 1;
|
|
137
|
+
}
|
|
138
|
+
if (config.HasClientRequestedIndependentOption(kPDP2, perspective)) {
|
|
139
|
+
num_ptos_for_path_degrading_ = 2;
|
|
140
|
+
}
|
|
141
|
+
if (config.HasClientRequestedIndependentOption(kPDP3, perspective)) {
|
|
142
|
+
num_ptos_for_path_degrading_ = 3;
|
|
143
|
+
}
|
|
144
|
+
if (config.HasClientRequestedIndependentOption(kPDP5, perspective)) {
|
|
145
|
+
num_ptos_for_path_degrading_ = 5;
|
|
146
|
+
}
|
|
145
147
|
}
|
|
146
148
|
|
|
147
149
|
// Configure congestion control.
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
#include "quiche/quic/core/quic_types.h"
|
|
27
27
|
#include "quiche/quic/core/quic_unacked_packet_map.h"
|
|
28
28
|
#include "quiche/quic/platform/api/quic_export.h"
|
|
29
|
+
#include "quiche/quic/platform/api/quic_flags.h"
|
|
29
30
|
#include "quiche/common/quiche_circular_deque.h"
|
|
30
31
|
|
|
31
32
|
namespace quic {
|
|
@@ -464,6 +465,11 @@ class QUIC_EXPORT_PRIVATE QuicSentPacketManager {
|
|
|
464
465
|
// kMinUntrustedInitialRoundTripTimeUs if not |trusted|.
|
|
465
466
|
void SetInitialRtt(QuicTime::Delta rtt, bool trusted);
|
|
466
467
|
|
|
468
|
+
// Latched value of --quic_remove_blackhole_detection_experiments.
|
|
469
|
+
bool remove_blackhole_detection_experiments() const {
|
|
470
|
+
return remove_blackhole_detection_experiments_;
|
|
471
|
+
}
|
|
472
|
+
|
|
467
473
|
private:
|
|
468
474
|
friend class test::QuicConnectionPeer;
|
|
469
475
|
friend class test::QuicSentPacketManagerPeer;
|
|
@@ -668,6 +674,9 @@ class QUIC_EXPORT_PRIVATE QuicSentPacketManager {
|
|
|
668
674
|
|
|
669
675
|
// Whether to ignore the ack_delay in received ACKs.
|
|
670
676
|
bool ignore_ack_delay_;
|
|
677
|
+
|
|
678
|
+
const bool remove_blackhole_detection_experiments_ =
|
|
679
|
+
GetQuicReloadableFlag(quic_remove_blackhole_detection_experiments);
|
|
671
680
|
};
|
|
672
681
|
|
|
673
682
|
} // namespace quic
|
|
@@ -2499,6 +2499,9 @@ TEST_F(QuicSentPacketManagerTest, GetPathDegradingDelayDefaultPTO) {
|
|
|
2499
2499
|
}
|
|
2500
2500
|
|
|
2501
2501
|
TEST_F(QuicSentPacketManagerTest, GetPathDegradingDelayUsing2PTO) {
|
|
2502
|
+
if (GetQuicReloadableFlag(quic_remove_blackhole_detection_experiments)) {
|
|
2503
|
+
return;
|
|
2504
|
+
}
|
|
2502
2505
|
QuicConfig client_config;
|
|
2503
2506
|
QuicTagVector client_options;
|
|
2504
2507
|
client_options.push_back(kPDP2);
|
|
@@ -2512,6 +2515,9 @@ TEST_F(QuicSentPacketManagerTest, GetPathDegradingDelayUsing2PTO) {
|
|
|
2512
2515
|
}
|
|
2513
2516
|
|
|
2514
2517
|
TEST_F(QuicSentPacketManagerTest, GetPathDegradingDelayUsing1PTO) {
|
|
2518
|
+
if (GetQuicReloadableFlag(quic_remove_blackhole_detection_experiments)) {
|
|
2519
|
+
return;
|
|
2520
|
+
}
|
|
2515
2521
|
QuicConfig client_config;
|
|
2516
2522
|
QuicTagVector client_options;
|
|
2517
2523
|
client_options.push_back(kPDP1);
|
|
@@ -2098,12 +2098,13 @@ void QuicSession::SendRetireConnectionId(uint64_t sequence_number) {
|
|
|
2098
2098
|
control_frame_manager_.WriteOrBufferRetireConnectionId(sequence_number);
|
|
2099
2099
|
}
|
|
2100
2100
|
|
|
2101
|
-
|
|
2101
|
+
bool QuicSession::MaybeReserveConnectionId(
|
|
2102
2102
|
const QuicConnectionId& server_connection_id) {
|
|
2103
2103
|
if (visitor_) {
|
|
2104
|
-
visitor_->
|
|
2104
|
+
return visitor_->TryAddNewConnectionId(
|
|
2105
2105
|
connection_->GetOneActiveServerConnectionId(), server_connection_id);
|
|
2106
2106
|
}
|
|
2107
|
+
return true;
|
|
2107
2108
|
}
|
|
2108
2109
|
|
|
2109
2110
|
void QuicSession::OnServerConnectionIdRetired(
|
|
@@ -89,8 +89,8 @@ class QUIC_EXPORT_PRIVATE QuicSession
|
|
|
89
89
|
// peer.
|
|
90
90
|
virtual void OnStopSendingReceived(const QuicStopSendingFrame& frame) = 0;
|
|
91
91
|
|
|
92
|
-
// Called when a NewConnectionId frame
|
|
93
|
-
virtual
|
|
92
|
+
// Called when on whether a NewConnectionId frame can been sent.
|
|
93
|
+
virtual bool TryAddNewConnectionId(
|
|
94
94
|
const QuicConnectionId& server_connection_id,
|
|
95
95
|
const QuicConnectionId& new_connection_id) = 0;
|
|
96
96
|
|
|
@@ -145,7 +145,12 @@ class QUIC_EXPORT_PRIVATE QuicSession
|
|
|
145
145
|
void SendAckFrequency(const QuicAckFrequencyFrame& frame) override;
|
|
146
146
|
void SendNewConnectionId(const QuicNewConnectionIdFrame& frame) override;
|
|
147
147
|
void SendRetireConnectionId(uint64_t sequence_number) override;
|
|
148
|
-
|
|
148
|
+
// Returns true if server_connection_id can be issued. If returns true,
|
|
149
|
+
// |visitor_| may establish a mapping from |server_connection_id| to this
|
|
150
|
+
// session, if that's not desired,
|
|
151
|
+
// OnServerConnectionIdRetired(server_connection_id) can be used to remove the
|
|
152
|
+
// mapping.
|
|
153
|
+
bool MaybeReserveConnectionId(
|
|
149
154
|
const QuicConnectionId& server_connection_id) override;
|
|
150
155
|
void OnServerConnectionIdRetired(
|
|
151
156
|
const QuicConnectionId& server_connection_id) override;
|
|
@@ -307,6 +307,24 @@ std::ostream& operator<<(std::ostream& os, SerializedPacketFate fate) {
|
|
|
307
307
|
return os;
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
+
std::string CongestionControlTypeToString(CongestionControlType cc_type) {
|
|
311
|
+
switch (cc_type) {
|
|
312
|
+
case kCubicBytes:
|
|
313
|
+
return "CUBIC_BYTES";
|
|
314
|
+
case kRenoBytes:
|
|
315
|
+
return "RENO_BYTES";
|
|
316
|
+
case kBBR:
|
|
317
|
+
return "BBR";
|
|
318
|
+
case kBBRv2:
|
|
319
|
+
return "BBRv2";
|
|
320
|
+
case kPCC:
|
|
321
|
+
return "PCC";
|
|
322
|
+
case kGoogCC:
|
|
323
|
+
return "GoogCC";
|
|
324
|
+
}
|
|
325
|
+
return absl::StrCat("Unknown(", static_cast<int>(cc_type), ")");
|
|
326
|
+
}
|
|
327
|
+
|
|
310
328
|
std::string EncryptionLevelToString(EncryptionLevel level) {
|
|
311
329
|
switch (level) {
|
|
312
330
|
RETURN_STRING_LITERAL(ENCRYPTION_INITIAL);
|
|
@@ -452,6 +452,9 @@ enum CongestionControlType {
|
|
|
452
452
|
kBBRv2,
|
|
453
453
|
};
|
|
454
454
|
|
|
455
|
+
QUIC_EXPORT_PRIVATE std::string CongestionControlTypeToString(
|
|
456
|
+
CongestionControlType cc_type);
|
|
457
|
+
|
|
455
458
|
// EncryptionLevel enumerates the stages of encryption that a QUIC connection
|
|
456
459
|
// progresses through. When retransmitting a packet, the encryption level needs
|
|
457
460
|
// to be specified so that it is retransmitted at a level which the peer can
|
|
@@ -267,6 +267,9 @@ void TlsChloExtractor::SendAlert(uint8_t tls_alert_value) {
|
|
|
267
267
|
HandleUnrecoverableError(absl::StrCat(
|
|
268
268
|
"BoringSSL attempted to send alert ", static_cast<int>(tls_alert_value),
|
|
269
269
|
" ", SSL_alert_desc_string_long(tls_alert_value)));
|
|
270
|
+
if (state_ == State::kUnrecoverableFailure) {
|
|
271
|
+
tls_alert_ = tls_alert_value;
|
|
272
|
+
}
|
|
270
273
|
}
|
|
271
274
|
|
|
272
275
|
// static
|
|
@@ -62,6 +62,13 @@ class QUIC_NO_EXPORT TlsChloExtractor
|
|
|
62
62
|
state_ == State::kParsedFullMultiPacketChlo;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
// Returns the TLS alert that caused the unrecoverable error, if any.
|
|
66
|
+
absl::optional<uint8_t> tls_alert() const {
|
|
67
|
+
QUICHE_DCHECK(!tls_alert_.has_value() ||
|
|
68
|
+
state_ == State::kUnrecoverableFailure);
|
|
69
|
+
return tls_alert_;
|
|
70
|
+
}
|
|
71
|
+
|
|
65
72
|
// Methods from QuicFramerVisitorInterface.
|
|
66
73
|
void OnError(QuicFramer* /*framer*/) override {}
|
|
67
74
|
bool OnProtocolVersionMismatch(ParsedQuicVersion version) override;
|
|
@@ -249,6 +256,9 @@ class QUIC_NO_EXPORT TlsChloExtractor
|
|
|
249
256
|
// Whether early data is attempted from the CHLO, indicated by the
|
|
250
257
|
// 'early_data' TLS extension.
|
|
251
258
|
bool early_data_attempted_ = false;
|
|
259
|
+
// If set, contains the TLS alert that caused an unrecoverable error, which is
|
|
260
|
+
// an AlertDescription value defined in go/rfc/8446#appendix-B.2.
|
|
261
|
+
absl::optional<uint8_t> tls_alert_;
|
|
252
262
|
};
|
|
253
263
|
|
|
254
264
|
// Convenience method to facilitate logging TlsChloExtractor::State.
|
|
@@ -27,7 +27,7 @@ class MockQuicSessionVisitor : public QuicTimeWaitListManager::Visitor {
|
|
|
27
27
|
(override));
|
|
28
28
|
MOCK_METHOD(void, OnStopSendingReceived, (const QuicStopSendingFrame& frame),
|
|
29
29
|
(override));
|
|
30
|
-
MOCK_METHOD(
|
|
30
|
+
MOCK_METHOD(bool, TryAddNewConnectionId,
|
|
31
31
|
(const QuicConnectionId& server_connection_id,
|
|
32
32
|
const QuicConnectionId& new_connection_id),
|
|
33
33
|
(override));
|
|
@@ -475,7 +475,7 @@ class MockQuicConnectionVisitor : public QuicConnectionVisitorInterface {
|
|
|
475
475
|
(const QuicNewConnectionIdFrame& frame), (override));
|
|
476
476
|
MOCK_METHOD(void, SendRetireConnectionId, (uint64_t sequence_number),
|
|
477
477
|
(override));
|
|
478
|
-
MOCK_METHOD(
|
|
478
|
+
MOCK_METHOD(bool, MaybeReserveConnectionId,
|
|
479
479
|
(const QuicConnectionId& server_connection_id), (override));
|
|
480
480
|
MOCK_METHOD(void, OnServerConnectionIdRetired,
|
|
481
481
|
(const QuicConnectionId& server_connection_id), (override));
|
|
@@ -27,8 +27,9 @@ void ServerThread::Initialize() {
|
|
|
27
27
|
if (initialized_) {
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
if (!server_->CreateUDPSocketAndListen(address_)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
32
33
|
|
|
33
34
|
QuicWriterMutexLock lock(&port_lock_);
|
|
34
35
|
port_ = server_->port();
|
|
@@ -37,6 +37,12 @@ SimpleSessionNotifier::StreamState::~StreamState() {}
|
|
|
37
37
|
|
|
38
38
|
QuicConsumedData SimpleSessionNotifier::WriteOrBufferData(
|
|
39
39
|
QuicStreamId id, QuicByteCount data_length, StreamSendingState state) {
|
|
40
|
+
return WriteOrBufferData(id, data_length, state, NOT_RETRANSMISSION);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
QuicConsumedData SimpleSessionNotifier::WriteOrBufferData(
|
|
44
|
+
QuicStreamId id, QuicByteCount data_length, StreamSendingState state,
|
|
45
|
+
TransmissionType transmission_type) {
|
|
40
46
|
if (!stream_map_.contains(id)) {
|
|
41
47
|
stream_map_[id] = StreamState();
|
|
42
48
|
}
|
|
@@ -53,7 +59,7 @@ QuicConsumedData SimpleSessionNotifier::WriteOrBufferData(
|
|
|
53
59
|
return {0, false};
|
|
54
60
|
}
|
|
55
61
|
const size_t length = stream_state.bytes_total - stream_state.bytes_sent;
|
|
56
|
-
connection_->SetTransmissionType(
|
|
62
|
+
connection_->SetTransmissionType(transmission_type);
|
|
57
63
|
QuicConsumedData consumed =
|
|
58
64
|
connection_->SendStreamData(id, length, stream_state.bytes_sent, state);
|
|
59
65
|
QUIC_DVLOG(1) << "consumed: " << consumed;
|
|
@@ -28,6 +28,9 @@ class SimpleSessionNotifier : public SessionNotifierInterface {
|
|
|
28
28
|
// Tries to write stream data and returns data consumed.
|
|
29
29
|
QuicConsumedData WriteOrBufferData(QuicStreamId id, QuicByteCount data_length,
|
|
30
30
|
StreamSendingState state);
|
|
31
|
+
QuicConsumedData WriteOrBufferData(QuicStreamId id, QuicByteCount data_length,
|
|
32
|
+
StreamSendingState state,
|
|
33
|
+
TransmissionType transmission_type);
|
|
31
34
|
|
|
32
35
|
// Tries to write RST_STREAM_FRAME.
|
|
33
36
|
void WriteOrBufferRstStream(QuicStreamId id, QuicRstStreamErrorCode error,
|
|
@@ -74,8 +74,10 @@ class QuicEndpoint : public QuicEndpointBase,
|
|
|
74
74
|
void SendNewConnectionId(const QuicNewConnectionIdFrame& /*frame*/) override {
|
|
75
75
|
}
|
|
76
76
|
void SendRetireConnectionId(uint64_t /*sequence_number*/) override {}
|
|
77
|
-
|
|
78
|
-
const QuicConnectionId& /*server_connection_id*/) override {
|
|
77
|
+
bool MaybeReserveConnectionId(
|
|
78
|
+
const QuicConnectionId& /*server_connection_id*/) override {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
79
81
|
void OnServerConnectionIdRetired(
|
|
80
82
|
const QuicConnectionId& /*server_connection_id*/) override {}
|
|
81
83
|
bool AllowSelfAddressChange() const override;
|
package/certs/ca.cnf
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# Defaults in the event they're not set in the environment
|
|
2
|
-
CA_DIR = out
|
|
3
|
-
KEY_SIZE = 2048
|
|
4
|
-
ALGO = sha256
|
|
5
|
-
CERT_TYPE = root
|
|
6
|
-
CA_NAME = req_env_dn
|
|
7
|
-
[ca]
|
|
8
|
-
default_ca = CA_root
|
|
9
|
-
preserve = yes
|
|
10
|
-
# The default test root, used to generate certificates and CRLs.
|
|
11
|
-
[CA_root]
|
|
12
|
-
dir = $ENV::CA_DIR
|
|
13
|
-
key_size = $ENV::KEY_SIZE
|
|
14
|
-
algo = $ENV::ALGO
|
|
15
|
-
cert_type = $ENV::CERT_TYPE
|
|
16
|
-
type = $key_size-$algo-$cert_type
|
|
17
|
-
database = $dir/$type-index.txt
|
|
18
|
-
new_certs_dir = $dir
|
|
19
|
-
serial = $dir/$type-serial
|
|
20
|
-
certificate = $dir/$type.pem
|
|
21
|
-
private_key = $dir/$type.key
|
|
22
|
-
RANDFILE = $dir/.rand
|
|
23
|
-
default_days = 3650
|
|
24
|
-
default_crl_days = 30
|
|
25
|
-
default_md = sha256
|
|
26
|
-
policy = policy_anything
|
|
27
|
-
unique_subject = no
|
|
28
|
-
copy_extensions = copy
|
|
29
|
-
[user_cert]
|
|
30
|
-
# Extensions to add when signing a request for an EE cert
|
|
31
|
-
basicConstraints = critical, CA:false
|
|
32
|
-
subjectKeyIdentifier = hash
|
|
33
|
-
authorityKeyIdentifier = keyid:always
|
|
34
|
-
extendedKeyUsage = serverAuth,clientAuth
|
|
35
|
-
[ca_cert]
|
|
36
|
-
# Extensions to add when signing a request for an intermediate/CA cert
|
|
37
|
-
basicConstraints = critical, CA:true
|
|
38
|
-
subjectKeyIdentifier = hash
|
|
39
|
-
keyUsage = critical, keyCertSign, cRLSign
|
|
40
|
-
[crl_extensions]
|
|
41
|
-
# Extensions to add when signing a CRL
|
|
42
|
-
authorityKeyIdentifier = keyid:always
|
|
43
|
-
[policy_anything]
|
|
44
|
-
# Default signing policy
|
|
45
|
-
countryName = optional
|
|
46
|
-
stateOrProvinceName = optional
|
|
47
|
-
localityName = optional
|
|
48
|
-
organizationName = optional
|
|
49
|
-
organizationalUnitName = optional
|
|
50
|
-
commonName = optional
|
|
51
|
-
emailAddress = optional
|
|
52
|
-
[req]
|
|
53
|
-
# The request section used to generate the root CA certificate. This should
|
|
54
|
-
# not be used to generate end-entity certificates. For certificates other
|
|
55
|
-
# than the root CA, see README to find the appropriate configuration file
|
|
56
|
-
# (ie: openssl_cert.cnf).
|
|
57
|
-
default_bits = $ENV::KEY_SIZE
|
|
58
|
-
default_md = sha256
|
|
59
|
-
string_mask = utf8only
|
|
60
|
-
prompt = no
|
|
61
|
-
encrypt_key = no
|
|
62
|
-
distinguished_name = $ENV::CA_NAME
|
|
63
|
-
x509_extensions = req_ca_exts
|
|
64
|
-
[req_env_dn]
|
|
65
|
-
CN = FAILS Server Root CA
|
|
66
|
-
[req_ca_exts]
|
|
67
|
-
basicConstraints = critical, CA:true
|
|
68
|
-
keyUsage = critical, keyCertSign, cRLSign
|
|
69
|
-
subjectKeyIdentifier = hash
|
package/certs/generate_certs.sh
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
# Copyright 2015 The Chromium Authors. All rights reserved.
|
|
3
|
-
# Use of this source code is governed by a BSD-style license that can be
|
|
4
|
-
# found in the LICENSE file.
|
|
5
|
-
# This script generates a CA and leaf cert which can be used for the
|
|
6
|
-
# quic_server.
|
|
7
|
-
try() {
|
|
8
|
-
"$@" || (e=$?; echo "$@" > /dev/stderr; exit $e)
|
|
9
|
-
}
|
|
10
|
-
try rm -rf out
|
|
11
|
-
try mkdir out
|
|
12
|
-
try /bin/sh -c "echo 01 > out/2048-sha256-root-serial"
|
|
13
|
-
touch out/2048-sha256-root-index.txt
|
|
14
|
-
# Generate the key.
|
|
15
|
-
try openssl genrsa -out out/2048-sha256-root.key 2048
|
|
16
|
-
# Generate the root certificate.
|
|
17
|
-
try openssl req \
|
|
18
|
-
-new \
|
|
19
|
-
-key out/2048-sha256-root.key \
|
|
20
|
-
-out out/2048-sha256-root.req \
|
|
21
|
-
-config ca.cnf
|
|
22
|
-
try openssl x509 \
|
|
23
|
-
-req -days 365 \
|
|
24
|
-
-in out/2048-sha256-root.req \
|
|
25
|
-
-signkey out/2048-sha256-root.key \
|
|
26
|
-
-extfile ca.cnf \
|
|
27
|
-
-extensions ca_cert \
|
|
28
|
-
-text > out/2048-sha256-root.pem
|
|
29
|
-
# Generate the leaf certificate request.
|
|
30
|
-
try openssl req \
|
|
31
|
-
-new \
|
|
32
|
-
-keyout out/leaf_cert.key \
|
|
33
|
-
-out out/leaf_cert.req \
|
|
34
|
-
-config leaf.cnf
|
|
35
|
-
# Convert the key to pkcs8.
|
|
36
|
-
try openssl pkcs8 \
|
|
37
|
-
-topk8 \
|
|
38
|
-
-outform DER \
|
|
39
|
-
-inform PEM \
|
|
40
|
-
-in out/leaf_cert.key \
|
|
41
|
-
-out out/leaf_cert.pkcs8 \
|
|
42
|
-
-nocrypt
|
|
43
|
-
# Generate the leaf certificate to be valid for 365 days.
|
|
44
|
-
try openssl ca \
|
|
45
|
-
-batch \
|
|
46
|
-
-days 365 \
|
|
47
|
-
-extensions user_cert \
|
|
48
|
-
-in out/leaf_cert.req \
|
|
49
|
-
-out out/leaf_cert.pem \
|
|
50
|
-
-config ca.cnf
|
|
51
|
-
|
|
52
|
-
# TODO
|
|
53
|
-
try openssl x509 -in out/leaf_cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 > out/fingerprint.txt
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
# Copyright 2015 The Chromium Authors. All rights reserved.
|
|
3
|
-
# Use of this source code is governed by a BSD-style license that can be
|
|
4
|
-
# found in the LICENSE file.
|
|
5
|
-
# This script generates a CA and leaf cert which can be used for the
|
|
6
|
-
# quic_server.
|
|
7
|
-
try() {
|
|
8
|
-
"$@" || (e=$?; echo "$@" > /dev/stderr; exit $e)
|
|
9
|
-
}
|
|
10
|
-
#try rm -rf out
|
|
11
|
-
try mkdir out
|
|
12
|
-
try /bin/sh -c "echo 01 > out/2048-sha256-root-serial"
|
|
13
|
-
touch out/2048-sha256-root-index.txt
|
|
14
|
-
# Generate the key.
|
|
15
|
-
#try openssl genrsa -out out/2048-sha256-root.key 2048
|
|
16
|
-
# Generate the root certificate.
|
|
17
|
-
#try openssl req \
|
|
18
|
-
# -new \
|
|
19
|
-
# -key out/2048-sha256-root.key \
|
|
20
|
-
# -out out/2048-sha256-root.req \
|
|
21
|
-
# -config ca.cnf
|
|
22
|
-
#try openssl x509 \
|
|
23
|
-
# -req -days 365 \
|
|
24
|
-
# -in out/2048-sha256-root.req \
|
|
25
|
-
# -signkey out/2048-sha256-root.key \
|
|
26
|
-
# -extfile ca.cnf \
|
|
27
|
-
# -extensions ca_cert \
|
|
28
|
-
# -text > out/2048-sha256-root.pem
|
|
29
|
-
# Generate the leaf certificate request.
|
|
30
|
-
try openssl req \
|
|
31
|
-
-new \
|
|
32
|
-
-keyout out/leaf_cert.key \
|
|
33
|
-
-out out/leaf_cert.req \
|
|
34
|
-
-config leaf.cnf
|
|
35
|
-
# Convert the key to pkcs8.
|
|
36
|
-
try openssl pkcs8 \
|
|
37
|
-
-topk8 \
|
|
38
|
-
-outform DER \
|
|
39
|
-
-inform PEM \
|
|
40
|
-
-in out/leaf_cert.key \
|
|
41
|
-
-out out/leaf_cert.pkcs8 \
|
|
42
|
-
-nocrypt
|
|
43
|
-
# Generate the leaf certificate to be valid for 365 days.
|
|
44
|
-
try openssl ca \
|
|
45
|
-
-batch \
|
|
46
|
-
-days 365 \
|
|
47
|
-
-extensions user_cert \
|
|
48
|
-
-in out/leaf_cert.req \
|
|
49
|
-
-out out/leaf_cert.pem \
|
|
50
|
-
-config ca.cnf
|
|
51
|
-
|
|
52
|
-
# TODO
|
|
53
|
-
try openssl x509 -in out/leaf_cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 > out/fingerprint.txt
|