@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.
Files changed (300) hide show
  1. package/package.json +1 -1
  2. package/readme.md +1 -3
  3. package/src/http3eventloop.cc +83 -9
  4. package/src/http3eventloop.h +13 -3
  5. package/src/http3server.cc +22 -22
  6. package/src/http3server.h +7 -20
  7. package/src/http3wtstreamvisitor.cc +31 -10
  8. package/src/http3wtstreamvisitor.h +38 -11
  9. package/src/webtransport.js +91 -23
  10. package/test/echoserver.js +29 -5
  11. package/test/testsuite.js +242 -220
  12. package/third_party/boringssl/src/CMakeLists.txt +2 -0
  13. package/third_party/boringssl/src/crypto/CMakeLists.txt +1 -0
  14. package/third_party/boringssl/src/crypto/asn1/a_bitstr.c +174 -177
  15. package/third_party/boringssl/src/crypto/asn1/a_bool.c +46 -48
  16. package/third_party/boringssl/src/crypto/asn1/a_d2i_fp.c +21 -23
  17. package/third_party/boringssl/src/crypto/asn1/a_dup.c +21 -23
  18. package/third_party/boringssl/src/crypto/asn1/a_gentm.c +84 -187
  19. package/third_party/boringssl/src/crypto/asn1/a_i2d_fp.c +19 -21
  20. package/third_party/boringssl/src/crypto/asn1/a_int.c +305 -329
  21. package/third_party/boringssl/src/crypto/asn1/a_mbstr.c +190 -195
  22. package/third_party/boringssl/src/crypto/asn1/a_object.c +182 -189
  23. package/third_party/boringssl/src/crypto/asn1/a_octet.c +6 -9
  24. package/third_party/boringssl/src/crypto/asn1/a_print.c +15 -16
  25. package/third_party/boringssl/src/crypto/asn1/a_strex.c +386 -399
  26. package/third_party/boringssl/src/crypto/asn1/a_strnid.c +110 -131
  27. package/third_party/boringssl/src/crypto/asn1/a_time.c +118 -111
  28. package/third_party/boringssl/src/crypto/asn1/a_type.c +59 -60
  29. package/third_party/boringssl/src/crypto/asn1/a_utctm.c +114 -186
  30. package/third_party/boringssl/src/crypto/asn1/a_utf8.c +171 -159
  31. package/third_party/boringssl/src/crypto/asn1/asn1_lib.c +245 -260
  32. package/third_party/boringssl/src/crypto/asn1/asn1_par.c +41 -40
  33. package/third_party/boringssl/src/crypto/asn1/asn1_test.cc +31 -0
  34. package/third_party/boringssl/src/crypto/asn1/asn_pack.c +31 -33
  35. package/third_party/boringssl/src/crypto/asn1/f_int.c +36 -33
  36. package/third_party/boringssl/src/crypto/asn1/f_string.c +29 -26
  37. package/third_party/boringssl/src/crypto/asn1/internal.h +62 -61
  38. package/third_party/boringssl/src/crypto/asn1/tasn_dec.c +706 -702
  39. package/third_party/boringssl/src/crypto/asn1/tasn_enc.c +507 -524
  40. package/third_party/boringssl/src/crypto/asn1/tasn_fre.c +141 -133
  41. package/third_party/boringssl/src/crypto/asn1/tasn_new.c +207 -199
  42. package/third_party/boringssl/src/crypto/asn1/tasn_typ.c +19 -22
  43. package/third_party/boringssl/src/crypto/asn1/tasn_utl.c +24 -24
  44. package/third_party/boringssl/src/crypto/asn1/time_support.c +13 -13
  45. package/third_party/boringssl/src/crypto/bio/connect.c +9 -3
  46. package/third_party/boringssl/src/crypto/bytestring/bytestring_test.cc +125 -1
  47. package/third_party/boringssl/src/crypto/bytestring/cbb.c +4 -7
  48. package/third_party/boringssl/src/crypto/bytestring/cbs.c +167 -9
  49. package/third_party/boringssl/src/crypto/cipher_extra/e_aesctrhmac.c +0 -2
  50. package/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.c +23 -54
  51. package/third_party/boringssl/src/crypto/cipher_extra/e_chacha20poly1305.c +0 -2
  52. package/third_party/boringssl/src/crypto/cipher_extra/e_tls.c +0 -2
  53. package/third_party/boringssl/src/crypto/curve25519/curve25519.c +6 -8
  54. package/third_party/boringssl/src/crypto/evp/evp_ctx.c +25 -22
  55. package/third_party/boringssl/src/crypto/evp/internal.h +15 -9
  56. package/third_party/boringssl/src/crypto/evp/p_dsa_asn1.c +2 -0
  57. package/third_party/boringssl/src/crypto/evp/p_ec_asn1.c +2 -0
  58. package/third_party/boringssl/src/crypto/evp/p_ed25519.c +3 -3
  59. package/third_party/boringssl/src/crypto/evp/p_ed25519_asn1.c +10 -7
  60. package/third_party/boringssl/src/crypto/evp/p_hkdf.c +241 -0
  61. package/third_party/boringssl/src/crypto/evp/p_rsa_asn1.c +2 -0
  62. package/third_party/boringssl/src/crypto/evp/p_x25519_asn1.c +1 -0
  63. package/third_party/boringssl/src/crypto/fipsmodule/aes/aes_nohw.c +9 -10
  64. package/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.c +2 -6
  65. package/third_party/boringssl/src/crypto/fipsmodule/bn/exponentiation.c +5 -11
  66. package/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h +1 -1
  67. package/third_party/boringssl/src/crypto/fipsmodule/bn/prime.c +2 -0
  68. package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.c +10 -26
  69. package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aesccm.c +2 -3
  70. package/third_party/boringssl/src/crypto/fipsmodule/digestsign/digestsign.c +1 -0
  71. package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.c +44 -43
  72. package/third_party/boringssl/src/crypto/fipsmodule/modes/cbc.c +5 -9
  73. package/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.c +14 -21
  74. package/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c +8 -8
  75. package/third_party/boringssl/src/crypto/fipsmodule/rand/internal.h +1 -4
  76. package/third_party/boringssl/src/crypto/hkdf/hkdf_test.cc +104 -0
  77. package/third_party/boringssl/src/crypto/internal.h +18 -4
  78. package/third_party/boringssl/src/crypto/lhash/internal.h +13 -1
  79. package/third_party/boringssl/src/crypto/obj/obj_dat.h +4 -1
  80. package/third_party/boringssl/src/crypto/obj/obj_mac.num +1 -0
  81. package/third_party/boringssl/src/crypto/obj/objects.txt +2 -0
  82. package/third_party/boringssl/src/crypto/pem/pem_all.c +77 -86
  83. package/third_party/boringssl/src/crypto/pem/pem_info.c +221 -233
  84. package/third_party/boringssl/src/crypto/pem/pem_lib.c +639 -608
  85. package/third_party/boringssl/src/crypto/pem/pem_oth.c +17 -16
  86. package/third_party/boringssl/src/crypto/pem/pem_pk8.c +133 -142
  87. package/third_party/boringssl/src/crypto/pem/pem_pkey.c +96 -92
  88. package/third_party/boringssl/src/crypto/poly1305/poly1305_vec.c +12 -28
  89. package/third_party/boringssl/src/crypto/siphash/siphash.c +8 -11
  90. package/third_party/boringssl/src/crypto/siphash/siphash_test.cc +5 -7
  91. package/third_party/boringssl/src/crypto/stack/stack.c +33 -16
  92. package/third_party/boringssl/src/crypto/thread_pthread.c +0 -2
  93. package/third_party/boringssl/src/crypto/thread_win.c +0 -2
  94. package/third_party/boringssl/src/crypto/trust_token/internal.h +14 -0
  95. package/third_party/boringssl/src/crypto/trust_token/pmbtoken.c +127 -30
  96. package/third_party/boringssl/src/crypto/trust_token/trust_token.c +40 -0
  97. package/third_party/boringssl/src/crypto/trust_token/trust_token_test.cc +165 -0
  98. package/third_party/boringssl/src/crypto/trust_token/voprf.c +55 -6
  99. package/third_party/boringssl/src/crypto/x509/a_digest.c +23 -24
  100. package/third_party/boringssl/src/crypto/x509/a_sign.c +52 -55
  101. package/third_party/boringssl/src/crypto/x509/a_verify.c +33 -34
  102. package/third_party/boringssl/src/crypto/x509/algorithm.c +17 -18
  103. package/third_party/boringssl/src/crypto/x509/asn1_gen.c +618 -612
  104. package/third_party/boringssl/src/crypto/x509/by_dir.c +320 -337
  105. package/third_party/boringssl/src/crypto/x509/by_file.c +186 -186
  106. package/third_party/boringssl/src/crypto/x509/i2d_pr.c +11 -14
  107. package/third_party/boringssl/src/crypto/x509/internal.h +22 -22
  108. package/third_party/boringssl/src/crypto/x509/name_print.c +155 -150
  109. package/third_party/boringssl/src/crypto/x509/rsa_pss.c +27 -29
  110. package/third_party/boringssl/src/crypto/x509/t_crl.c +67 -70
  111. package/third_party/boringssl/src/crypto/x509/t_req.c +3 -5
  112. package/third_party/boringssl/src/crypto/x509/t_x509.c +280 -251
  113. package/third_party/boringssl/src/crypto/x509/t_x509a.c +52 -47
  114. package/third_party/boringssl/src/crypto/x509/x509.c +3 -4
  115. package/third_party/boringssl/src/crypto/x509/x509_att.c +234 -223
  116. package/third_party/boringssl/src/crypto/x509/x509_cmp.c +286 -296
  117. package/third_party/boringssl/src/crypto/x509/x509_d2.c +37 -32
  118. package/third_party/boringssl/src/crypto/x509/x509_def.c +14 -30
  119. package/third_party/boringssl/src/crypto/x509/x509_ext.c +55 -84
  120. package/third_party/boringssl/src/crypto/x509/x509_lu.c +545 -581
  121. package/third_party/boringssl/src/crypto/x509/x509_obj.c +131 -121
  122. package/third_party/boringssl/src/crypto/x509/x509_req.c +120 -139
  123. package/third_party/boringssl/src/crypto/x509/x509_set.c +128 -142
  124. package/third_party/boringssl/src/crypto/x509/x509_trs.c +185 -193
  125. package/third_party/boringssl/src/crypto/x509/x509_txt.c +70 -72
  126. package/third_party/boringssl/src/crypto/x509/x509_v3.c +172 -161
  127. package/third_party/boringssl/src/crypto/x509/x509_vfy.c +2041 -2053
  128. package/third_party/boringssl/src/crypto/x509/x509_vpm.c +441 -461
  129. package/third_party/boringssl/src/crypto/x509/x509cset.c +152 -170
  130. package/third_party/boringssl/src/crypto/x509/x509name.c +274 -260
  131. package/third_party/boringssl/src/crypto/x509/x509rset.c +43 -20
  132. package/third_party/boringssl/src/crypto/x509/x509spki.c +62 -63
  133. package/third_party/boringssl/src/crypto/x509/x_algor.c +64 -62
  134. package/third_party/boringssl/src/crypto/x509/x_all.c +103 -133
  135. package/third_party/boringssl/src/crypto/x509/x_attrib.c +23 -24
  136. package/third_party/boringssl/src/crypto/x509/x_crl.c +310 -321
  137. package/third_party/boringssl/src/crypto/x509/x_exten.c +6 -5
  138. package/third_party/boringssl/src/crypto/x509/x_info.c +31 -28
  139. package/third_party/boringssl/src/crypto/x509/x_name.c +361 -365
  140. package/third_party/boringssl/src/crypto/x509/x_pkey.c +38 -32
  141. package/third_party/boringssl/src/crypto/x509/x_pubkey.c +114 -117
  142. package/third_party/boringssl/src/crypto/x509/x_req.c +27 -29
  143. package/third_party/boringssl/src/crypto/x509/x_sig.c +2 -2
  144. package/third_party/boringssl/src/crypto/x509/x_spki.c +8 -10
  145. package/third_party/boringssl/src/crypto/x509/x_val.c +2 -2
  146. package/third_party/boringssl/src/crypto/x509/x_x509.c +212 -226
  147. package/third_party/boringssl/src/crypto/x509/x_x509a.c +112 -109
  148. package/third_party/boringssl/src/crypto/x509v3/ext_dat.h +10 -13
  149. package/third_party/boringssl/src/crypto/x509v3/internal.h +72 -87
  150. package/third_party/boringssl/src/crypto/x509v3/pcy_cache.c +184 -176
  151. package/third_party/boringssl/src/crypto/x509v3/pcy_data.c +58 -56
  152. package/third_party/boringssl/src/crypto/x509v3/pcy_lib.c +71 -70
  153. package/third_party/boringssl/src/crypto/x509v3/pcy_map.c +56 -58
  154. package/third_party/boringssl/src/crypto/x509v3/pcy_node.c +89 -91
  155. package/third_party/boringssl/src/crypto/x509v3/pcy_tree.c +585 -590
  156. package/third_party/boringssl/src/crypto/x509v3/v3_akey.c +118 -112
  157. package/third_party/boringssl/src/crypto/x509v3/v3_akeya.c +3 -3
  158. package/third_party/boringssl/src/crypto/x509v3/v3_alt.c +447 -451
  159. package/third_party/boringssl/src/crypto/x509v3/v3_bcons.c +44 -38
  160. package/third_party/boringssl/src/crypto/x509v3/v3_bitst.c +39 -43
  161. package/third_party/boringssl/src/crypto/x509v3/v3_conf.c +321 -320
  162. package/third_party/boringssl/src/crypto/x509v3/v3_cpols.c +352 -327
  163. package/third_party/boringssl/src/crypto/x509v3/v3_crld.c +437 -383
  164. package/third_party/boringssl/src/crypto/x509v3/v3_enum.c +23 -16
  165. package/third_party/boringssl/src/crypto/x509v3/v3_extku.c +62 -53
  166. package/third_party/boringssl/src/crypto/x509v3/v3_genn.c +118 -115
  167. package/third_party/boringssl/src/crypto/x509v3/v3_ia5.c +30 -31
  168. package/third_party/boringssl/src/crypto/x509v3/v3_info.c +112 -98
  169. package/third_party/boringssl/src/crypto/x509v3/v3_int.c +40 -15
  170. package/third_party/boringssl/src/crypto/x509v3/v3_lib.c +248 -252
  171. package/third_party/boringssl/src/crypto/x509v3/v3_ncons.c +390 -386
  172. package/third_party/boringssl/src/crypto/x509v3/v3_ocsp.c +45 -32
  173. package/third_party/boringssl/src/crypto/x509v3/v3_pci.c +206 -209
  174. package/third_party/boringssl/src/crypto/x509v3/v3_pcia.c +6 -8
  175. package/third_party/boringssl/src/crypto/x509v3/v3_pcons.c +54 -50
  176. package/third_party/boringssl/src/crypto/x509v3/v3_pmaps.c +66 -65
  177. package/third_party/boringssl/src/crypto/x509v3/v3_prn.c +144 -133
  178. package/third_party/boringssl/src/crypto/x509v3/v3_purp.c +695 -709
  179. package/third_party/boringssl/src/crypto/x509v3/v3_skey.c +75 -69
  180. package/third_party/boringssl/src/crypto/x509v3/v3_utl.c +1102 -1082
  181. package/third_party/boringssl/src/include/openssl/base.h +3 -1
  182. package/third_party/boringssl/src/include/openssl/bn.h +3 -0
  183. package/third_party/boringssl/src/include/openssl/bytestring.h +20 -0
  184. package/third_party/boringssl/src/include/openssl/evp.h +6 -5
  185. package/third_party/boringssl/src/include/openssl/kdf.h +91 -0
  186. package/third_party/boringssl/src/include/openssl/nid.h +4 -0
  187. package/third_party/boringssl/src/include/openssl/ssl.h +6 -1
  188. package/third_party/boringssl/src/include/openssl/stack.h +47 -32
  189. package/third_party/boringssl/src/include/openssl/trust_token.h +18 -3
  190. package/third_party/boringssl/src/include/openssl/x509.h +18 -0
  191. package/third_party/boringssl/src/ssl/ssl_file.cc +61 -99
  192. package/third_party/boringssl/src/ssl/ssl_test.cc +101 -0
  193. package/third_party/boringssl/src/util/doc.config +2 -1
  194. package/third_party/boringssl/src/util/fipstools/acvp/acvptool/subprocess/subprocess.go +8 -0
  195. package/third_party/googleurl/AUTHORS +16 -2
  196. package/third_party/googleurl/base/BUILD +1 -0
  197. package/third_party/googleurl/base/compiler_specific.h +16 -17
  198. package/third_party/googleurl/base/containers/contiguous_iterator.h +13 -9
  199. package/third_party/googleurl/base/containers/span.h +23 -8
  200. package/third_party/googleurl/base/memory/raw_ptr.h +17 -25
  201. package/third_party/googleurl/base/memory/raw_ptr_exclusion.h +21 -0
  202. package/third_party/googleurl/base/strings/escape.cc +14 -2
  203. package/third_party/googleurl/base/strings/safe_sprintf.h +1 -1
  204. package/third_party/googleurl/base/strings/string_number_conversions.cc +5 -3
  205. package/third_party/googleurl/base/strings/string_number_conversions_internal.h +5 -5
  206. package/third_party/googleurl/base/strings/string_piece.h +3 -3
  207. package/third_party/googleurl/base/strings/string_util.cc +4 -27
  208. package/third_party/googleurl/base/strings/string_util.h +43 -8
  209. package/third_party/googleurl/base/strings/string_util_internal.h +11 -12
  210. package/third_party/googleurl/base/strings/string_util_unittest.cc +33 -0
  211. package/third_party/googleurl/base/strings/string_util_win.cc +0 -5
  212. package/third_party/googleurl/base/strings/string_util_win.h +9 -1
  213. package/third_party/googleurl/base/strings/utf_offset_string_conversions.cc +1 -1
  214. package/third_party/googleurl/base/strings/utf_string_conversion_utils.cc +5 -8
  215. package/third_party/googleurl/base/strings/utf_string_conversion_utils.h +13 -10
  216. package/third_party/googleurl/base/strings/utf_string_conversions.cc +32 -25
  217. package/third_party/googleurl/base/template_util.h +23 -35
  218. package/third_party/googleurl/build/build_config.h +14 -3
  219. package/third_party/googleurl/copy.bara.sky +1 -1
  220. package/third_party/googleurl/url/gurl.cc +8 -4
  221. package/third_party/googleurl/url/gurl.h +1 -0
  222. package/third_party/googleurl/url/gurl_unittest.cc +1 -0
  223. package/third_party/googleurl/url/origin.h +36 -26
  224. package/third_party/googleurl/url/scheme_host_port.h +4 -1
  225. package/third_party/googleurl/url/url_canon.h +2 -1
  226. package/third_party/googleurl/url/url_canon_internal.cc +9 -7
  227. package/third_party/googleurl/url/url_canon_internal.h +16 -16
  228. package/third_party/googleurl/url/url_canon_stdstring.h +2 -1
  229. package/third_party/googleurl/url/url_util.cc +9 -8
  230. package/third_party/quiche/build/source_list.bzl +7 -0
  231. package/third_party/quiche/build/source_list.gni +7 -0
  232. package/third_party/quiche/build/source_list.json +7 -0
  233. package/third_party/quiche/quiche/common/platform/api/quiche_mem_slice.h +7 -3
  234. package/third_party/quiche/quiche/http2/adapter/nghttp2_adapter_test.cc +86 -2
  235. package/third_party/quiche/quiche/http2/adapter/oghttp2_adapter_test.cc +104 -2
  236. package/third_party/quiche/quiche/http2/adapter/oghttp2_session.cc +23 -0
  237. package/third_party/quiche/quiche/http2/adapter/oghttp2_session.h +6 -1
  238. package/third_party/quiche/quiche/quic/core/congestion_control/send_algorithm_test.cc +0 -16
  239. package/third_party/quiche/quiche/quic/core/crypto/crypto_protocol.h +1 -1
  240. package/third_party/quiche/quiche/quic/core/http/end_to_end_test.cc +56 -2
  241. package/third_party/quiche/quiche/quic/core/http/http_constants.cc +1 -0
  242. package/third_party/quiche/quiche/quic/core/http/http_constants.h +1 -0
  243. package/third_party/quiche/quiche/quic/core/http/http_encoder.cc +28 -17
  244. package/third_party/quiche/quiche/quic/core/http/http_encoder.h +5 -0
  245. package/third_party/quiche/quiche/quic/core/http/http_encoder_test.cc +26 -30
  246. package/third_party/quiche/quiche/quic/core/http/http_frames.h +1 -0
  247. package/third_party/quiche/quiche/quic/core/http/quic_server_session_base.cc +4 -4
  248. package/third_party/quiche/quiche/quic/core/http/quic_server_session_base_test.cc +1 -1
  249. package/third_party/quiche/quiche/quic/core/http/quic_spdy_client_session.cc +5 -1
  250. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.cc +6 -33
  251. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.h +0 -17
  252. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream_test.cc +5 -20
  253. package/third_party/quiche/quiche/quic/core/io/quic_event_loop.h +81 -0
  254. package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop.cc +265 -0
  255. package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop.h +152 -0
  256. package/third_party/quiche/quiche/quic/core/io/quic_poll_event_loop_test.cc +341 -0
  257. package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store.cc +3 -1
  258. package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store.h +7 -7
  259. package/third_party/quiche/quiche/quic/core/quic_buffered_packet_store_test.cc +4 -3
  260. package/third_party/quiche/quiche/quic/core/quic_connection.cc +69 -19
  261. package/third_party/quiche/quiche/quic/core/quic_connection.h +9 -3
  262. package/third_party/quiche/quiche/quic/core/quic_connection_id_manager.cc +29 -10
  263. package/third_party/quiche/quiche/quic/core/quic_connection_id_manager.h +5 -3
  264. package/third_party/quiche/quiche/quic/core/quic_connection_id_manager_test.cc +85 -22
  265. package/third_party/quiche/quiche/quic/core/quic_connection_test.cc +186 -30
  266. package/third_party/quiche/quiche/quic/core/quic_crypto_stream.cc +2 -1
  267. package/third_party/quiche/quiche/quic/core/quic_default_clock.cc +31 -0
  268. package/third_party/quiche/quiche/quic/core/quic_default_clock.h +34 -0
  269. package/third_party/quiche/quiche/quic/core/quic_default_connection_helper.h +49 -0
  270. package/third_party/quiche/quiche/quic/core/quic_dispatcher.cc +53 -37
  271. package/third_party/quiche/quiche/quic/core/quic_dispatcher.h +19 -11
  272. package/third_party/quiche/quiche/quic/core/quic_dispatcher_test.cc +15 -2
  273. package/third_party/quiche/quiche/quic/core/quic_flags_list.h +10 -4
  274. package/third_party/quiche/quiche/quic/core/quic_idle_network_detector.cc +2 -2
  275. package/third_party/quiche/quiche/quic/core/quic_idle_network_detector_test.cc +4 -4
  276. package/third_party/quiche/quiche/quic/core/quic_packet_creator.cc +14 -3
  277. package/third_party/quiche/quiche/quic/core/quic_packet_creator_test.cc +145 -2
  278. package/third_party/quiche/quiche/quic/core/quic_packets.cc +3 -1
  279. package/third_party/quiche/quiche/quic/core/quic_packets.h +4 -0
  280. package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.cc +13 -11
  281. package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager.h +9 -0
  282. package/third_party/quiche/quiche/quic/core/quic_sent_packet_manager_test.cc +6 -0
  283. package/third_party/quiche/quiche/quic/core/quic_session.cc +3 -2
  284. package/third_party/quiche/quiche/quic/core/quic_session.h +8 -3
  285. package/third_party/quiche/quiche/quic/core/quic_types.cc +18 -0
  286. package/third_party/quiche/quiche/quic/core/quic_types.h +3 -0
  287. package/third_party/quiche/quiche/quic/core/tls_chlo_extractor.cc +3 -0
  288. package/third_party/quiche/quiche/quic/core/tls_chlo_extractor.h +10 -0
  289. package/third_party/quiche/quiche/quic/test_tools/mock_quic_session_visitor.h +1 -1
  290. package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.h +1 -1
  291. package/third_party/quiche/quiche/quic/test_tools/server_thread.cc +3 -2
  292. package/third_party/quiche/quiche/quic/test_tools/simple_session_notifier.cc +7 -1
  293. package/third_party/quiche/quiche/quic/test_tools/simple_session_notifier.h +3 -0
  294. package/third_party/quiche/quiche/quic/test_tools/simulator/quic_endpoint.h +4 -2
  295. package/certs/ca.cnf +0 -69
  296. package/certs/generate_certs.sh +0 -53
  297. package/certs/generate_certs_leaf.sh +0 -53
  298. package/certs/leaf.cnf +0 -24
  299. package/certs/readme.txt +0 -2
  300. 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
- 0x00,
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
- 0x01,
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
- 0x04,
49
- // length
50
- 0x07,
51
- // identifier (SETTINGS_QPACK_MAX_TABLE_CAPACITY)
52
- 0x01,
53
- // content
54
- 0x02,
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
- 0x07,
75
- // length
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
@@ -34,6 +34,7 @@ enum class HttpFrameType {
34
34
  PRIORITY_UPDATE_REQUEST_STREAM = 0xF0700,
35
35
  // https://www.ietf.org/archive/id/draft-ietf-webtrans-http3-00.html
36
36
  WEBTRANSPORT_STREAM = 0x41,
37
+ METADATA = 0x4d,
37
38
  };
38
39
 
39
40
  // 7.2.1. DATA
@@ -88,7 +88,7 @@ void QuicServerSessionBase::OnConfigNegotiated() {
88
88
 
89
89
  enable_sending_bandwidth_estimate_when_network_idle_ =
90
90
  GetQuicRestartFlag(
91
- quic_enable_sending_bandwidth_estimate_when_network_idle) &&
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
- quic_enable_sending_bandwidth_estimate_when_network_idle, 2, 3);
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
- quic_enable_sending_bandwidth_estimate_when_network_idle)) {
157
+ quic_enable_sending_bandwidth_estimate_when_network_idle_v2)) {
158
158
  QUIC_RESTART_FLAG_COUNT_N(
159
- quic_enable_sending_bandwidth_estimate_when_network_idle, 3, 3);
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
- quic_enable_sending_bandwidth_estimate_when_network_idle)) {
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
- connection()->EnableLegacyVersionEncapsulation(server_id_.host());
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 both
738
- // quic_abort_qpack_on_stream_reset and quic_fix_on_stream_reset are
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
- if (GetQuicReloadableFlag(quic_abort_qpack_on_stream_reset)) {
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
- if (GetQuicReloadableFlag(quic_abort_qpack_on_stream_reset)) {
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.?: 1");
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_