@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
|
@@ -17,10 +17,8 @@ namespace test {
|
|
|
17
17
|
TEST(HttpEncoderTest, SerializeDataFrameHeader) {
|
|
18
18
|
quiche::QuicheBuffer buffer = HttpEncoder::SerializeDataFrameHeader(
|
|
19
19
|
/* payload_length = */ 5, quiche::SimpleBufferAllocator::Get());
|
|
20
|
-
char output[] = {// type (DATA)
|
|
21
|
-
|
|
22
|
-
// length
|
|
23
|
-
0x05};
|
|
20
|
+
char output[] = {0x00, // type (DATA)
|
|
21
|
+
0x05}; // length
|
|
24
22
|
EXPECT_EQ(ABSL_ARRAYSIZE(output), buffer.size());
|
|
25
23
|
quiche::test::CompareCharArraysWithHexError(
|
|
26
24
|
"DATA", buffer.data(), buffer.size(), output, ABSL_ARRAYSIZE(output));
|
|
@@ -30,10 +28,8 @@ TEST(HttpEncoderTest, SerializeHeadersFrameHeader) {
|
|
|
30
28
|
std::unique_ptr<char[]> buffer;
|
|
31
29
|
uint64_t length = HttpEncoder::SerializeHeadersFrameHeader(
|
|
32
30
|
/* payload_length = */ 7, &buffer);
|
|
33
|
-
char output[] = {// type (HEADERS)
|
|
34
|
-
|
|
35
|
-
// length
|
|
36
|
-
0x07};
|
|
31
|
+
char output[] = {0x01, // type (HEADERS)
|
|
32
|
+
0x07}; // length
|
|
37
33
|
EXPECT_EQ(ABSL_ARRAYSIZE(output), length);
|
|
38
34
|
quiche::test::CompareCharArraysWithHexError("HEADERS", buffer.get(), length,
|
|
39
35
|
output, ABSL_ARRAYSIZE(output));
|
|
@@ -44,22 +40,14 @@ TEST(HttpEncoderTest, SerializeSettingsFrame) {
|
|
|
44
40
|
settings.values[1] = 2;
|
|
45
41
|
settings.values[6] = 5;
|
|
46
42
|
settings.values[256] = 4;
|
|
47
|
-
char output[] = {// type (SETTINGS)
|
|
48
|
-
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
// identifier (
|
|
52
|
-
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
// identifier (SETTINGS_MAX_HEADER_LIST_SIZE)
|
|
56
|
-
0x06,
|
|
57
|
-
// content
|
|
58
|
-
0x05,
|
|
59
|
-
// identifier (256 in variable length integer)
|
|
60
|
-
0x40 + 0x01, 0x00,
|
|
61
|
-
// content
|
|
62
|
-
0x04};
|
|
43
|
+
char output[] = {0x04, // type (SETTINGS)
|
|
44
|
+
0x07, // length
|
|
45
|
+
0x01, // identifier (SETTINGS_QPACK_MAX_TABLE_CAPACITY)
|
|
46
|
+
0x02, // content
|
|
47
|
+
0x06, // identifier (SETTINGS_MAX_HEADER_LIST_SIZE)
|
|
48
|
+
0x05, // content
|
|
49
|
+
0x41, 0x00, // identifier 0x100, varint encoded
|
|
50
|
+
0x04}; // content
|
|
63
51
|
std::unique_ptr<char[]> buffer;
|
|
64
52
|
uint64_t length = HttpEncoder::SerializeSettingsFrame(settings, &buffer);
|
|
65
53
|
EXPECT_EQ(ABSL_ARRAYSIZE(output), length);
|
|
@@ -70,12 +58,9 @@ TEST(HttpEncoderTest, SerializeSettingsFrame) {
|
|
|
70
58
|
TEST(HttpEncoderTest, SerializeGoAwayFrame) {
|
|
71
59
|
GoAwayFrame goaway;
|
|
72
60
|
goaway.id = 0x1;
|
|
73
|
-
char output[] = {// type (GOAWAY)
|
|
74
|
-
|
|
75
|
-
//
|
|
76
|
-
0x1,
|
|
77
|
-
// ID
|
|
78
|
-
0x01};
|
|
61
|
+
char output[] = {0x07, // type (GOAWAY)
|
|
62
|
+
0x1, // length
|
|
63
|
+
0x01}; // ID
|
|
79
64
|
std::unique_ptr<char[]> buffer;
|
|
80
65
|
uint64_t length = HttpEncoder::SerializeGoAwayFrame(goaway, &buffer);
|
|
81
66
|
EXPECT_EQ(ABSL_ARRAYSIZE(output), length);
|
|
@@ -138,5 +123,16 @@ TEST(HttpEncoderTest, SerializeWebTransportStreamFrameHeader) {
|
|
|
138
123
|
"WEBTRANSPORT_STREAM", buffer.get(), length, output, sizeof(output));
|
|
139
124
|
}
|
|
140
125
|
|
|
126
|
+
TEST(HttpEncoderTest, SerializeMetadataFrameHeader) {
|
|
127
|
+
std::unique_ptr<char[]> buffer;
|
|
128
|
+
uint64_t length = HttpEncoder::SerializeMetadataFrameHeader(
|
|
129
|
+
/* payload_length = */ 7, &buffer);
|
|
130
|
+
char output[] = {0x40, 0x4d, // type (METADATA, 0x4d, varint encoded)
|
|
131
|
+
0x07}; // length
|
|
132
|
+
EXPECT_EQ(ABSL_ARRAYSIZE(output), length);
|
|
133
|
+
quiche::test::CompareCharArraysWithHexError("METADATA", buffer.get(), length,
|
|
134
|
+
output, ABSL_ARRAYSIZE(output));
|
|
135
|
+
}
|
|
136
|
+
|
|
141
137
|
} // namespace test
|
|
142
138
|
} // namespace quic
|
|
@@ -88,7 +88,7 @@ void QuicServerSessionBase::OnConfigNegotiated() {
|
|
|
88
88
|
|
|
89
89
|
enable_sending_bandwidth_estimate_when_network_idle_ =
|
|
90
90
|
GetQuicRestartFlag(
|
|
91
|
-
|
|
91
|
+
quic_enable_sending_bandwidth_estimate_when_network_idle_v2) &&
|
|
92
92
|
version().HasIetfQuicFrames() &&
|
|
93
93
|
ContainsQuicTag(config()->ReceivedConnectionOptions(), kBWID);
|
|
94
94
|
|
|
@@ -146,7 +146,7 @@ void QuicServerSessionBase::OnBandwidthUpdateTimeout() {
|
|
|
146
146
|
const bool success = MaybeSendAddressToken();
|
|
147
147
|
QUIC_BUG_IF(QUIC_BUG_25522, !success) << "Failed to send address token.";
|
|
148
148
|
QUIC_RESTART_FLAG_COUNT_N(
|
|
149
|
-
|
|
149
|
+
quic_enable_sending_bandwidth_estimate_when_network_idle_v2, 2, 3);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
|
|
@@ -154,9 +154,9 @@ void QuicServerSessionBase::OnCongestionWindowChange(QuicTime now) {
|
|
|
154
154
|
// Sending bandwidth is no longer conditioned on if session does bandwidth
|
|
155
155
|
// resumption.
|
|
156
156
|
if (GetQuicRestartFlag(
|
|
157
|
-
|
|
157
|
+
quic_enable_sending_bandwidth_estimate_when_network_idle_v2)) {
|
|
158
158
|
QUIC_RESTART_FLAG_COUNT_N(
|
|
159
|
-
|
|
159
|
+
quic_enable_sending_bandwidth_estimate_when_network_idle_v2, 3, 3);
|
|
160
160
|
return;
|
|
161
161
|
}
|
|
162
162
|
if (!bandwidth_resumption_enabled_) {
|
|
@@ -608,7 +608,7 @@ TEST_P(QuicServerSessionBaseTest, BandwidthEstimates) {
|
|
|
608
608
|
HAS_RETRANSMITTABLE_DATA, true);
|
|
609
609
|
|
|
610
610
|
if (GetQuicRestartFlag(
|
|
611
|
-
|
|
611
|
+
quic_enable_sending_bandwidth_estimate_when_network_idle_v2)) {
|
|
612
612
|
EXPECT_CALL(*connection_, OnSendConnectionState(_)).Times(0);
|
|
613
613
|
} else {
|
|
614
614
|
// Verify that the proto has exactly the values we expect.
|
|
@@ -38,7 +38,11 @@ void QuicSpdyClientSession::Initialize() {
|
|
|
38
38
|
crypto_stream_ = CreateQuicCryptoStream();
|
|
39
39
|
if (config()->HasClientRequestedIndependentOption(kQLVE,
|
|
40
40
|
Perspective::IS_CLIENT)) {
|
|
41
|
-
|
|
41
|
+
if (GetQuicRestartFlag(quic_disable_legacy_version_encapsulation)) {
|
|
42
|
+
QUIC_CODE_COUNT(quic_disable_legacy_version_encapsulation_client_init);
|
|
43
|
+
} else {
|
|
44
|
+
connection()->EnableLegacyVersionEncapsulation(server_id_.host());
|
|
45
|
+
}
|
|
42
46
|
}
|
|
43
47
|
QuicSpdyClientSessionBase::Initialize();
|
|
44
48
|
}
|
|
@@ -185,8 +185,6 @@ QuicSpdyStream::QuicSpdyStream(QuicStreamId id, QuicSpdySession* spdy_session,
|
|
|
185
185
|
headers_payload_length_(0),
|
|
186
186
|
trailers_decompressed_(false),
|
|
187
187
|
trailers_consumed_(false),
|
|
188
|
-
qpack_decoded_headers_accumulator_reset_reason_(
|
|
189
|
-
QpackDecodedHeadersAccumulatorResetReason::kUnSet),
|
|
190
188
|
http_decoder_visitor_(std::make_unique<HttpDecoderVisitor>(this)),
|
|
191
189
|
decoder_(http_decoder_visitor_.get(),
|
|
192
190
|
HttpDecoderOptionsForBidiStream(spdy_session)),
|
|
@@ -223,8 +221,6 @@ QuicSpdyStream::QuicSpdyStream(PendingStream* pending,
|
|
|
223
221
|
headers_payload_length_(0),
|
|
224
222
|
trailers_decompressed_(false),
|
|
225
223
|
trailers_consumed_(false),
|
|
226
|
-
qpack_decoded_headers_accumulator_reset_reason_(
|
|
227
|
-
QpackDecodedHeadersAccumulatorResetReason::kUnSet),
|
|
228
224
|
http_decoder_visitor_(std::make_unique<HttpDecoderVisitor>(this)),
|
|
229
225
|
decoder_(http_decoder_visitor_.get()),
|
|
230
226
|
sequencer_offset_(sequencer()->NumBytesConsumed()),
|
|
@@ -561,8 +557,6 @@ void QuicSpdyStream::OnHeadersDecoded(QuicHeaderList headers,
|
|
|
561
557
|
bool header_list_size_limit_exceeded) {
|
|
562
558
|
header_list_size_limit_exceeded_ = header_list_size_limit_exceeded;
|
|
563
559
|
qpack_decoded_headers_accumulator_.reset();
|
|
564
|
-
qpack_decoded_headers_accumulator_reset_reason_ =
|
|
565
|
-
QpackDecodedHeadersAccumulatorResetReason::kResetInOnHeadersDecoded;
|
|
566
560
|
|
|
567
561
|
QuicSpdySession::LogHeaderCompressionRatioHistogram(
|
|
568
562
|
/* using_qpack = */ true,
|
|
@@ -592,8 +586,6 @@ void QuicSpdyStream::OnHeadersDecoded(QuicHeaderList headers,
|
|
|
592
586
|
void QuicSpdyStream::OnHeaderDecodingError(QuicErrorCode error_code,
|
|
593
587
|
absl::string_view error_message) {
|
|
594
588
|
qpack_decoded_headers_accumulator_.reset();
|
|
595
|
-
qpack_decoded_headers_accumulator_reset_reason_ =
|
|
596
|
-
QpackDecodedHeadersAccumulatorResetReason::kResetInOnHeaderDecodingError;
|
|
597
589
|
|
|
598
590
|
std::string connection_close_error_message = absl::StrCat(
|
|
599
591
|
"Error decoding ", headers_decompressed_ ? "trailers" : "headers",
|
|
@@ -734,20 +726,13 @@ void QuicSpdyStream::OnStreamReset(const QuicRstStreamFrame& frame) {
|
|
|
734
726
|
return;
|
|
735
727
|
}
|
|
736
728
|
|
|
737
|
-
// TODO(bnc): Merge the two blocks below when
|
|
738
|
-
//
|
|
739
|
-
// deprecated.
|
|
729
|
+
// TODO(bnc): Merge the two blocks below when deprecating
|
|
730
|
+
// quic_fix_on_stream_reset.
|
|
740
731
|
if (frame.error_code != QUIC_STREAM_NO_ERROR) {
|
|
741
732
|
if (VersionUsesHttp3(transport_version()) && !fin_received() &&
|
|
742
733
|
spdy_session_->qpack_decoder()) {
|
|
743
|
-
QUIC_CODE_COUNT_N(quic_abort_qpack_on_stream_reset, 1, 2);
|
|
744
734
|
spdy_session_->qpack_decoder()->OnStreamReset(id());
|
|
745
|
-
|
|
746
|
-
QUIC_RELOADABLE_FLAG_COUNT_N(quic_abort_qpack_on_stream_reset, 1, 2);
|
|
747
|
-
qpack_decoded_headers_accumulator_.reset();
|
|
748
|
-
qpack_decoded_headers_accumulator_reset_reason_ =
|
|
749
|
-
QpackDecodedHeadersAccumulatorResetReason::kResetInOnStreamReset1;
|
|
750
|
-
}
|
|
735
|
+
qpack_decoded_headers_accumulator_.reset();
|
|
751
736
|
}
|
|
752
737
|
|
|
753
738
|
QuicStream::OnStreamReset(frame);
|
|
@@ -761,8 +746,6 @@ void QuicSpdyStream::OnStreamReset(const QuicRstStreamFrame& frame) {
|
|
|
761
746
|
if (!fin_received() && spdy_session_->qpack_decoder()) {
|
|
762
747
|
spdy_session_->qpack_decoder()->OnStreamReset(id());
|
|
763
748
|
qpack_decoded_headers_accumulator_.reset();
|
|
764
|
-
qpack_decoded_headers_accumulator_reset_reason_ =
|
|
765
|
-
QpackDecodedHeadersAccumulatorResetReason::kResetInOnStreamReset2;
|
|
766
749
|
}
|
|
767
750
|
|
|
768
751
|
QuicStream::OnStreamReset(frame);
|
|
@@ -781,14 +764,8 @@ void QuicSpdyStream::OnStreamReset(const QuicRstStreamFrame& frame) {
|
|
|
781
764
|
void QuicSpdyStream::ResetWithError(QuicResetStreamError error) {
|
|
782
765
|
if (VersionUsesHttp3(transport_version()) && !fin_received() &&
|
|
783
766
|
spdy_session_->qpack_decoder() && web_transport_data_ == nullptr) {
|
|
784
|
-
QUIC_CODE_COUNT_N(quic_abort_qpack_on_stream_reset, 2, 2);
|
|
785
767
|
spdy_session_->qpack_decoder()->OnStreamReset(id());
|
|
786
|
-
|
|
787
|
-
QUIC_RELOADABLE_FLAG_COUNT_N(quic_abort_qpack_on_stream_reset, 2, 2);
|
|
788
|
-
qpack_decoded_headers_accumulator_.reset();
|
|
789
|
-
qpack_decoded_headers_accumulator_reset_reason_ =
|
|
790
|
-
QpackDecodedHeadersAccumulatorResetReason::kResetInResetWithError;
|
|
791
|
-
}
|
|
768
|
+
qpack_decoded_headers_accumulator_.reset();
|
|
792
769
|
}
|
|
793
770
|
|
|
794
771
|
QuicStream::ResetWithError(error);
|
|
@@ -890,8 +867,6 @@ void QuicSpdyStream::OnClose() {
|
|
|
890
867
|
QuicStream::OnClose();
|
|
891
868
|
|
|
892
869
|
qpack_decoded_headers_accumulator_.reset();
|
|
893
|
-
qpack_decoded_headers_accumulator_reset_reason_ =
|
|
894
|
-
QpackDecodedHeadersAccumulatorResetReason::kResetInOnClose;
|
|
895
870
|
|
|
896
871
|
if (visitor_) {
|
|
897
872
|
Visitor* visitor = visitor_;
|
|
@@ -1085,8 +1060,7 @@ bool QuicSpdyStream::OnHeadersFramePayload(absl::string_view payload) {
|
|
|
1085
1060
|
QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
|
|
1086
1061
|
|
|
1087
1062
|
if (!qpack_decoded_headers_accumulator_) {
|
|
1088
|
-
QUIC_BUG(b215142466_OnHeadersFramePayload)
|
|
1089
|
-
<< static_cast<int>(qpack_decoded_headers_accumulator_reset_reason_);
|
|
1063
|
+
QUIC_BUG(b215142466_OnHeadersFramePayload);
|
|
1090
1064
|
OnHeaderDecodingError(QUIC_INTERNAL_ERROR,
|
|
1091
1065
|
"qpack_decoded_headers_accumulator_ is nullptr");
|
|
1092
1066
|
return false;
|
|
@@ -1107,8 +1081,7 @@ bool QuicSpdyStream::OnHeadersFrameEnd() {
|
|
|
1107
1081
|
QUICHE_DCHECK(VersionUsesHttp3(transport_version()));
|
|
1108
1082
|
|
|
1109
1083
|
if (!qpack_decoded_headers_accumulator_) {
|
|
1110
|
-
QUIC_BUG(b215142466_OnHeadersFrameEnd)
|
|
1111
|
-
<< static_cast<int>(qpack_decoded_headers_accumulator_reset_reason_);
|
|
1084
|
+
QUIC_BUG(b215142466_OnHeadersFrameEnd);
|
|
1112
1085
|
OnHeaderDecodingError(QUIC_INTERNAL_ERROR,
|
|
1113
1086
|
"qpack_decoded_headers_accumulator_ is nullptr");
|
|
1114
1087
|
return false;
|
|
@@ -336,20 +336,6 @@ class QUIC_EXPORT_PRIVATE QuicSpdyStream
|
|
|
336
336
|
WebTransportStreamAdapter adapter;
|
|
337
337
|
};
|
|
338
338
|
|
|
339
|
-
// Reason codes for `qpack_decoded_headers_accumulator_` being nullptr.
|
|
340
|
-
enum class QpackDecodedHeadersAccumulatorResetReason {
|
|
341
|
-
// `qpack_decoded_headers_accumulator_` was default constructed to nullptr.
|
|
342
|
-
kUnSet = 0,
|
|
343
|
-
// `qpack_decoded_headers_accumulator_` was reset in the corresponding
|
|
344
|
-
// method.
|
|
345
|
-
kResetInOnHeadersDecoded = 1,
|
|
346
|
-
kResetInOnHeaderDecodingError = 2,
|
|
347
|
-
kResetInOnStreamReset1 = 3,
|
|
348
|
-
kResetInOnStreamReset2 = 4,
|
|
349
|
-
kResetInResetWithError = 5,
|
|
350
|
-
kResetInOnClose = 6,
|
|
351
|
-
};
|
|
352
|
-
|
|
353
339
|
// Called by HttpDecoderVisitor.
|
|
354
340
|
bool OnDataFrameStart(QuicByteCount header_length,
|
|
355
341
|
QuicByteCount payload_length);
|
|
@@ -417,9 +403,6 @@ class QUIC_EXPORT_PRIVATE QuicSpdyStream
|
|
|
417
403
|
// Headers accumulator for decoding HEADERS frame payload.
|
|
418
404
|
std::unique_ptr<QpackDecodedHeadersAccumulator>
|
|
419
405
|
qpack_decoded_headers_accumulator_;
|
|
420
|
-
// Reason for `qpack_decoded_headers_accumulator_` being nullptr.
|
|
421
|
-
QpackDecodedHeadersAccumulatorResetReason
|
|
422
|
-
qpack_decoded_headers_accumulator_reset_reason_;
|
|
423
406
|
// Visitor of the HttpDecoder.
|
|
424
407
|
std::unique_ptr<HttpDecoderVisitor> http_decoder_visitor_;
|
|
425
408
|
// HttpDecoder for processing raw incoming stream frames.
|
|
@@ -2564,27 +2564,13 @@ TEST_P(QuicSpdyStreamTest, HeaderDecodingUnblockedAfterResetReceived) {
|
|
|
2564
2564
|
/* offset = */ 1, _, _, _));
|
|
2565
2565
|
|
|
2566
2566
|
// OnStreamReset() is called when RESET_STREAM frame is received from peer.
|
|
2567
|
+
// This aborts header decompression.
|
|
2567
2568
|
stream_->OnStreamReset(QuicRstStreamFrame(
|
|
2568
2569
|
kInvalidControlFrameId, stream_->id(), QUIC_STREAM_CANCELLED, 0));
|
|
2569
2570
|
|
|
2570
|
-
if (!GetQuicReloadableFlag(quic_abort_qpack_on_stream_reset)) {
|
|
2571
|
-
// Header acknowledgement.
|
|
2572
|
-
EXPECT_CALL(*session_,
|
|
2573
|
-
WritevData(decoder_send_stream->id(), /* write_length = */ 1,
|
|
2574
|
-
/* offset = */ 2, _, _, _));
|
|
2575
|
-
EXPECT_CALL(debug_visitor, OnHeadersDecoded(stream_->id(), _));
|
|
2576
|
-
}
|
|
2577
|
-
|
|
2578
2571
|
// Deliver dynamic table entry to decoder.
|
|
2579
2572
|
session_->qpack_decoder()->OnInsertWithoutNameReference("foo", "bar");
|
|
2580
|
-
|
|
2581
|
-
if (GetQuicReloadableFlag(quic_abort_qpack_on_stream_reset)) {
|
|
2582
|
-
EXPECT_FALSE(stream_->headers_decompressed());
|
|
2583
|
-
} else {
|
|
2584
|
-
// Verify headers.
|
|
2585
|
-
EXPECT_TRUE(stream_->headers_decompressed());
|
|
2586
|
-
EXPECT_THAT(stream_->header_list(), ElementsAre(Pair("foo", "bar")));
|
|
2587
|
-
}
|
|
2573
|
+
EXPECT_FALSE(stream_->headers_decompressed());
|
|
2588
2574
|
}
|
|
2589
2575
|
|
|
2590
2576
|
class QuicSpdyStreamIncrementalConsumptionTest : public QuicSpdyStreamTest {
|
|
@@ -3209,15 +3195,14 @@ TEST_P(QuicSpdyStreamTest,
|
|
|
3209
3195
|
// Resets `qpack_decoded_headers_accumulator_`.
|
|
3210
3196
|
stream_->OnHeadersDecoded({}, false);
|
|
3211
3197
|
|
|
3212
|
-
// This private method should never be called when
|
|
3213
|
-
// `qpack_decoded_headers_accumulator_` is nullptr. The number 1 identifies
|
|
3214
|
-
// the site where `qpack_decoded_headers_accumulator_` was last reset.
|
|
3215
3198
|
EXPECT_QUIC_BUG(
|
|
3216
3199
|
{
|
|
3217
3200
|
EXPECT_CALL(*connection_, CloseConnection(_, _, _));
|
|
3201
|
+
// This private method should never be called when
|
|
3202
|
+
// `qpack_decoded_headers_accumulator_` is nullptr.
|
|
3218
3203
|
EXPECT_FALSE(QuicSpdyStreamPeer::OnHeadersFrameEnd(stream_));
|
|
3219
3204
|
},
|
|
3220
|
-
"b215142466_OnHeadersFrameEnd
|
|
3205
|
+
"b215142466_OnHeadersFrameEnd");
|
|
3221
3206
|
}
|
|
3222
3207
|
|
|
3223
3208
|
} // namespace
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// Copyright 2022 The Chromium Authors. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
#ifndef QUICHE_QUIC_IO_QUIC_EVENT_LOOP_H_
|
|
6
|
+
#define QUICHE_QUIC_IO_QUIC_EVENT_LOOP_H_
|
|
7
|
+
|
|
8
|
+
#include <cstdint>
|
|
9
|
+
#include <memory>
|
|
10
|
+
|
|
11
|
+
#include "absl/base/attributes.h"
|
|
12
|
+
#include "quiche/quic/core/quic_alarm_factory.h"
|
|
13
|
+
#include "quiche/quic/core/quic_udp_socket.h"
|
|
14
|
+
|
|
15
|
+
namespace quic {
|
|
16
|
+
|
|
17
|
+
// A bitmask indicating a set of I/O events.
|
|
18
|
+
using QuicSocketEventMask = uint8_t;
|
|
19
|
+
inline constexpr QuicSocketEventMask kSocketEventReadable = 0x01;
|
|
20
|
+
inline constexpr QuicSocketEventMask kSocketEventWritable = 0x02;
|
|
21
|
+
inline constexpr QuicSocketEventMask kSocketEventError = 0x04;
|
|
22
|
+
|
|
23
|
+
class QuicEventLoop;
|
|
24
|
+
|
|
25
|
+
// A listener associated with a file descriptor.
|
|
26
|
+
class QUICHE_NO_EXPORT QuicSocketEventListener {
|
|
27
|
+
public:
|
|
28
|
+
virtual ~QuicSocketEventListener() = default;
|
|
29
|
+
|
|
30
|
+
virtual void OnSocketEvent(QuicEventLoop* event_loop, QuicUdpSocketFd fd,
|
|
31
|
+
QuicSocketEventMask events) = 0;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// An abstraction for an event loop that can handle alarms and notify the
|
|
35
|
+
// listener about I/O events occuring to the registered UDP sockets.
|
|
36
|
+
//
|
|
37
|
+
// Note on error handling: while most of the methods below return a boolean to
|
|
38
|
+
// indicate whether the operation has succeeded or not, some will QUIC_BUG
|
|
39
|
+
// instead.
|
|
40
|
+
class QUICHE_NO_EXPORT QuicEventLoop {
|
|
41
|
+
public:
|
|
42
|
+
virtual ~QuicEventLoop() = default;
|
|
43
|
+
|
|
44
|
+
// Indicates whether the event loop implementation supports edge-triggered
|
|
45
|
+
// notifications. If true, all of the events are permanent and are notified
|
|
46
|
+
// as long as they are registered. If false, whenever an event is triggered,
|
|
47
|
+
// the event registration is unset and has to be re-armed using RearmSocket().
|
|
48
|
+
virtual bool SupportsEdgeTriggered() const = 0;
|
|
49
|
+
|
|
50
|
+
// Watches for all of the requested |events| that occur on the |fd| and
|
|
51
|
+
// notifies the |listener| about them. |fd| must not be already registered;
|
|
52
|
+
// if it is, the function returns false. The |listener| must be alive for as
|
|
53
|
+
// long as it is registered.
|
|
54
|
+
virtual ABSL_MUST_USE_RESULT bool RegisterSocket(
|
|
55
|
+
QuicUdpSocketFd fd, QuicSocketEventMask events,
|
|
56
|
+
QuicSocketEventListener* listener) = 0;
|
|
57
|
+
// Removes the listener associated with |fd|. Returns false if the listener
|
|
58
|
+
// is not found.
|
|
59
|
+
virtual ABSL_MUST_USE_RESULT bool UnregisterSocket(QuicUdpSocketFd fd) = 0;
|
|
60
|
+
// Adds |events| to the list of the listened events for |fd|, given that |fd|
|
|
61
|
+
// is already registered. Must be only called if SupportsEdgeTriggered() is
|
|
62
|
+
// false.
|
|
63
|
+
virtual ABSL_MUST_USE_RESULT bool RearmSocket(QuicUdpSocketFd fd,
|
|
64
|
+
QuicSocketEventMask events) = 0;
|
|
65
|
+
// Causes the |fd| to be notified of |events| on the next event loop iteration
|
|
66
|
+
// even if none of the specified events has happened.
|
|
67
|
+
virtual ABSL_MUST_USE_RESULT bool ArtificiallyNotifyEvent(
|
|
68
|
+
QuicUdpSocketFd fd, QuicSocketEventMask events) = 0;
|
|
69
|
+
|
|
70
|
+
// Runs a single iteration of the event loop. The iteration will run for at
|
|
71
|
+
// most |default_timeout|.
|
|
72
|
+
virtual void RunEventLoopOnce(QuicTime::Delta default_timeout) = 0;
|
|
73
|
+
|
|
74
|
+
// Returns an alarm factory that allows alarms to be scheduled on this event
|
|
75
|
+
// loop. The factory is owned by the event loop.
|
|
76
|
+
virtual QuicAlarmFactory* GetAlarmFactory() = 0;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
} // namespace quic
|
|
80
|
+
|
|
81
|
+
#endif // QUICHE_QUIC_IO_QUIC_EVENT_LOOP_H_
|