@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
@@ -0,0 +1,265 @@
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
+ #include "quiche/quic/core/io/quic_poll_event_loop.h"
6
+
7
+ #include <poll.h>
8
+
9
+ #include <algorithm>
10
+ #include <cerrno>
11
+ #include <memory>
12
+
13
+ #include "absl/types/span.h"
14
+ #include "quiche/quic/core/io/quic_event_loop.h"
15
+ #include "quiche/quic/core/quic_alarm.h"
16
+ #include "quiche/quic/core/quic_time.h"
17
+ #include "quiche/quic/platform/api/quic_bug_tracker.h"
18
+
19
+ namespace quic {
20
+
21
+ namespace {
22
+
23
+ using PollMask = decltype(::pollfd().events);
24
+
25
+ PollMask GetPollMask(QuicSocketEventMask event_mask) {
26
+ return ((event_mask & kSocketEventReadable) ? POLLIN : 0) |
27
+ ((event_mask & kSocketEventWritable) ? POLLOUT : 0) |
28
+ ((event_mask & kSocketEventError) ? POLLERR : 0);
29
+ }
30
+
31
+ QuicSocketEventMask GetEventMask(PollMask poll_mask) {
32
+ return ((poll_mask & POLLIN) ? kSocketEventReadable : 0) |
33
+ ((poll_mask & POLLOUT) ? kSocketEventWritable : 0) |
34
+ ((poll_mask & POLLERR) ? kSocketEventError : 0);
35
+ }
36
+
37
+ } // namespace
38
+
39
+ QuicPollEventLoop::QuicPollEventLoop(QuicClock* clock)
40
+ : clock_(clock), alarm_factory_(this) {}
41
+
42
+ bool QuicPollEventLoop::RegisterSocket(QuicUdpSocketFd fd,
43
+ QuicSocketEventMask events,
44
+ QuicSocketEventListener* listener) {
45
+ auto [it, success] =
46
+ registrations_.insert({fd, std::make_shared<Registration>()});
47
+ if (!success) {
48
+ return false;
49
+ }
50
+ Registration& registration = *it->second;
51
+ registration.events = events;
52
+ registration.listener = listener;
53
+ return true;
54
+ }
55
+
56
+ bool QuicPollEventLoop::UnregisterSocket(QuicUdpSocketFd fd) {
57
+ return registrations_.erase(fd);
58
+ }
59
+
60
+ bool QuicPollEventLoop::RearmSocket(QuicUdpSocketFd fd,
61
+ QuicSocketEventMask events) {
62
+ auto it = registrations_.find(fd);
63
+ if (it == registrations_.end()) {
64
+ return false;
65
+ }
66
+ it->second->events |= events;
67
+ return true;
68
+ }
69
+
70
+ bool QuicPollEventLoop::ArtificiallyNotifyEvent(QuicUdpSocketFd fd,
71
+ QuicSocketEventMask events) {
72
+ auto it = registrations_.find(fd);
73
+ if (it == registrations_.end()) {
74
+ return false;
75
+ }
76
+ has_artificial_events_pending_ = true;
77
+ it->second->artificially_notify_at_next_iteration |= events;
78
+ return true;
79
+ }
80
+
81
+ void QuicPollEventLoop::RunEventLoopOnce(QuicTime::Delta default_timeout) {
82
+ const QuicTime start_time = clock_->Now();
83
+ ProcessAlarmsUpTo(start_time);
84
+
85
+ QuicTime::Delta timeout = ComputePollTimeout(start_time, default_timeout);
86
+ ProcessIoEvents(start_time, timeout);
87
+
88
+ const QuicTime end_time = clock_->Now();
89
+ ProcessAlarmsUpTo(end_time);
90
+ }
91
+
92
+ QuicTime::Delta QuicPollEventLoop::ComputePollTimeout(
93
+ QuicTime now, QuicTime::Delta default_timeout) const {
94
+ if (has_artificial_events_pending_) {
95
+ return QuicTime::Delta::Zero();
96
+ }
97
+ if (alarms_.empty()) {
98
+ return default_timeout;
99
+ }
100
+ QuicTime end_time = std::min(now + default_timeout, alarms_.begin()->first);
101
+ if (end_time <= now) {
102
+ // Since we call ProcessAlarmsUpTo() right before this, this should never
103
+ // happen.
104
+ QUIC_BUG(Newest alarm is in the past)
105
+ << "now " << now.ToDebuggingValue()
106
+ << ", end_time: " << end_time.ToDebuggingValue();
107
+ return QuicTime::Delta::Zero();
108
+ }
109
+ return end_time - now;
110
+ }
111
+
112
+ int QuicPollEventLoop::PollWithRetries(absl::Span<pollfd> fds,
113
+ QuicTime start_time,
114
+ QuicTime::Delta timeout) {
115
+ const QuicTime timeout_at = start_time + timeout;
116
+ int poll_result;
117
+ for (;;) {
118
+ float timeout_ms = std::ceil(timeout.ToMicroseconds() / 1000.f);
119
+ poll_result =
120
+ PollSyscall(fds.data(), fds.size(), static_cast<int>(timeout_ms));
121
+
122
+ // Retry if EINTR happens.
123
+ bool is_eintr = poll_result < 0 && errno == EINTR;
124
+ if (!is_eintr) {
125
+ break;
126
+ }
127
+ QuicTime now = clock_->Now();
128
+ if (now >= timeout_at) {
129
+ break;
130
+ }
131
+ timeout = timeout_at - now;
132
+ }
133
+ return poll_result;
134
+ }
135
+
136
+ void QuicPollEventLoop::ProcessIoEvents(QuicTime start_time,
137
+ QuicTime::Delta timeout) {
138
+ // Set up the pollfd[] array.
139
+ const size_t registration_count = registrations_.size();
140
+ auto pollfds = std::make_unique<pollfd[]>(registration_count);
141
+ size_t i = 0;
142
+ for (auto& [fd, registration] : registrations_) {
143
+ QUICHE_CHECK_LT(
144
+ i, registration_count); // Crash instead of out-of-bounds access.
145
+ pollfds[i].fd = fd;
146
+ pollfds[i].events = GetPollMask(registration->events);
147
+ pollfds[i].revents = 0;
148
+ ++i;
149
+ }
150
+
151
+ // Actually run poll(2).
152
+ int poll_result =
153
+ PollWithRetries(absl::Span<pollfd>(pollfds.get(), registration_count),
154
+ start_time, timeout);
155
+ if (poll_result == 0) {
156
+ return;
157
+ }
158
+
159
+ // Prepare the list of all callbacks to be called, while resetting all events,
160
+ // since we're operating in the level-triggered mode.
161
+ std::vector<ReadyListEntry> ready_list;
162
+ ready_list.reserve(registration_count);
163
+ for (i = 0; i < registration_count; i++) {
164
+ DispatchIoEvent(ready_list, pollfds[i].fd, pollfds[i].revents);
165
+ }
166
+ has_artificial_events_pending_ = false;
167
+
168
+ // Actually call all of the callbacks.
169
+ RunReadyCallbacks(ready_list);
170
+ }
171
+
172
+ void QuicPollEventLoop::DispatchIoEvent(std::vector<ReadyListEntry>& ready_list,
173
+ QuicUdpSocketFd fd, PollMask mask) {
174
+ auto it = registrations_.find(fd);
175
+ if (it == registrations_.end()) {
176
+ QUIC_BUG(poll returned an unregistered fd) << fd;
177
+ return;
178
+ }
179
+ Registration& registration = *it->second;
180
+
181
+ mask |= GetPollMask(registration.artificially_notify_at_next_iteration);
182
+ registration.artificially_notify_at_next_iteration = QuicSocketEventMask();
183
+
184
+ // poll() always returns certain classes of events even if not requested.
185
+ mask &= GetPollMask(registration.events);
186
+ if (!mask) {
187
+ return;
188
+ }
189
+
190
+ ready_list.push_back(ReadyListEntry{fd, it->second, GetEventMask(mask)});
191
+ registration.events &= ~GetEventMask(mask);
192
+ }
193
+
194
+ void QuicPollEventLoop::RunReadyCallbacks(
195
+ std::vector<ReadyListEntry>& ready_list) {
196
+ for (ReadyListEntry& entry : ready_list) {
197
+ std::shared_ptr<Registration> registration = entry.registration.lock();
198
+ if (!registration) {
199
+ // The socket has been unregistered from within one of the callbacks.
200
+ continue;
201
+ }
202
+ registration->listener->OnSocketEvent(this, entry.fd, entry.events);
203
+ }
204
+ ready_list.clear();
205
+ }
206
+
207
+ void QuicPollEventLoop::ProcessAlarmsUpTo(QuicTime time) {
208
+ // Determine which alarm callbacks needs to be run.
209
+ std::vector<std::weak_ptr<Alarm*>> alarms_to_call;
210
+ while (!alarms_.empty() && alarms_.begin()->first <= time) {
211
+ auto& [deadline, schedule_handle_weak] = *alarms_.begin();
212
+ alarms_to_call.push_back(std::move(schedule_handle_weak));
213
+ alarms_.erase(alarms_.begin());
214
+ }
215
+ // Actually run those callbacks.
216
+ for (std::weak_ptr<Alarm*>& schedule_handle_weak : alarms_to_call) {
217
+ std::shared_ptr<Alarm*> schedule_handle = schedule_handle_weak.lock();
218
+ if (!schedule_handle) {
219
+ // The alarm has been cancelled and might not even exist anymore.
220
+ continue;
221
+ }
222
+ (*schedule_handle)->DoFire();
223
+ }
224
+ // Clean up all of the alarms in the front that have been cancelled.
225
+ while (!alarms_.empty()) {
226
+ if (alarms_.begin()->second.expired()) {
227
+ alarms_.erase(alarms_.begin());
228
+ } else {
229
+ break;
230
+ }
231
+ }
232
+ }
233
+
234
+ QuicAlarm* QuicPollEventLoop::AlarmFactory::CreateAlarm(
235
+ QuicAlarm::Delegate* delegate) {
236
+ return new Alarm(loop_, QuicArenaScopedPtr<QuicAlarm::Delegate>(delegate));
237
+ }
238
+
239
+ QuicArenaScopedPtr<QuicAlarm> QuicPollEventLoop::AlarmFactory::CreateAlarm(
240
+ QuicArenaScopedPtr<QuicAlarm::Delegate> delegate,
241
+ QuicConnectionArena* arena) {
242
+ if (arena != nullptr) {
243
+ return arena->New<Alarm>(loop_, std::move(delegate));
244
+ }
245
+ return QuicArenaScopedPtr<QuicAlarm>(new Alarm(loop_, std::move(delegate)));
246
+ }
247
+
248
+ QuicPollEventLoop::Alarm::Alarm(
249
+ QuicPollEventLoop* loop, QuicArenaScopedPtr<QuicAlarm::Delegate> delegate)
250
+ : QuicAlarm(std::move(delegate)), loop_(loop) {}
251
+
252
+ void QuicPollEventLoop::Alarm::SetImpl() {
253
+ current_schedule_handle_ = std::make_shared<Alarm*>(this);
254
+ loop_->alarms_.insert({deadline(), current_schedule_handle_});
255
+ }
256
+
257
+ void QuicPollEventLoop::Alarm::CancelImpl() {
258
+ current_schedule_handle_.reset();
259
+ }
260
+
261
+ QuicAlarmFactory* QuicPollEventLoop::GetAlarmFactory() {
262
+ return &alarm_factory_;
263
+ }
264
+
265
+ } // namespace quic
@@ -0,0 +1,152 @@
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_CORE_IO_QUIC_POLL_EVENT_LOOP_H_
6
+ #define QUICHE_QUIC_CORE_IO_QUIC_POLL_EVENT_LOOP_H_
7
+
8
+ #include <poll.h>
9
+
10
+ #include <memory>
11
+
12
+ #include "absl/container/btree_map.h"
13
+ #include "absl/types/span.h"
14
+ #include "quiche/quic/core/io/quic_event_loop.h"
15
+ #include "quiche/quic/core/quic_alarm.h"
16
+ #include "quiche/quic/core/quic_alarm_factory.h"
17
+ #include "quiche/quic/core/quic_clock.h"
18
+ #include "quiche/quic/core/quic_udp_socket.h"
19
+ #include "quiche/common/quiche_linked_hash_map.h"
20
+
21
+ namespace quic {
22
+
23
+ // A simple and portable implementation of QuicEventLoop using poll(2). Works
24
+ // on all POSIX platforms (and can be potentially made to support Windows using
25
+ // WSAPoll).
26
+ //
27
+ // For most operations, this implementation has a typical runtime of
28
+ // O(N + log M), where N is the number of file descriptors, and M is the number
29
+ // of pending alarms.
30
+ //
31
+ // This API has to deal with the situations where callbacks are modified from
32
+ // the callbacks themselves. To address this, we use the following two
33
+ // approaches:
34
+ // 1. The code does not execute any callbacks until the very end of the
35
+ // processing, when all of the state for the event loop is consistent.
36
+ // 2. The callbacks are stored as weak pointers, since other callbacks can
37
+ // cause them to be unregistered.
38
+ class QUICHE_NO_EXPORT QuicPollEventLoop : public QuicEventLoop {
39
+ public:
40
+ QuicPollEventLoop(QuicClock* clock);
41
+
42
+ // QuicEventLoop implementation.
43
+ bool SupportsEdgeTriggered() const override { return false; }
44
+ ABSL_MUST_USE_RESULT bool RegisterSocket(
45
+ QuicUdpSocketFd fd, QuicSocketEventMask events,
46
+ QuicSocketEventListener* listener) override;
47
+ ABSL_MUST_USE_RESULT bool UnregisterSocket(QuicUdpSocketFd fd) override;
48
+ ABSL_MUST_USE_RESULT bool RearmSocket(QuicUdpSocketFd fd,
49
+ QuicSocketEventMask events) override;
50
+ ABSL_MUST_USE_RESULT bool ArtificiallyNotifyEvent(
51
+ QuicUdpSocketFd fd, QuicSocketEventMask events) override;
52
+ void RunEventLoopOnce(QuicTime::Delta default_timeout) override;
53
+ QuicAlarmFactory* GetAlarmFactory() override;
54
+
55
+ protected:
56
+ // Allows poll(2) calls to be mocked out in unit tests.
57
+ virtual int PollSyscall(pollfd* fds, nfds_t nfds, int timeout) {
58
+ return ::poll(fds, nfds, timeout);
59
+ }
60
+
61
+ private:
62
+ friend class QuicPollEventLoopPeer;
63
+
64
+ struct Registration {
65
+ QuicSocketEventMask events = 0;
66
+ QuicSocketEventListener* listener;
67
+
68
+ QuicSocketEventMask artificially_notify_at_next_iteration = 0;
69
+ };
70
+
71
+ class Alarm : public QuicAlarm {
72
+ public:
73
+ Alarm(QuicPollEventLoop* loop,
74
+ QuicArenaScopedPtr<QuicAlarm::Delegate> delegate);
75
+
76
+ void SetImpl() override;
77
+ void CancelImpl() override;
78
+
79
+ void DoFire() {
80
+ current_schedule_handle_.reset();
81
+ Fire();
82
+ }
83
+
84
+ private:
85
+ QuicPollEventLoop* loop_;
86
+ // Deleted when the alarm is cancelled, causing the corresponding weak_ptr
87
+ // in the alarm list to not be executed.
88
+ std::shared_ptr<Alarm*> current_schedule_handle_;
89
+ };
90
+
91
+ class AlarmFactory : public QuicAlarmFactory {
92
+ public:
93
+ AlarmFactory(QuicPollEventLoop* loop) : loop_(loop) {}
94
+
95
+ // QuicAlarmFactory implementation.
96
+ QuicAlarm* CreateAlarm(QuicAlarm::Delegate* delegate) override;
97
+ QuicArenaScopedPtr<QuicAlarm> CreateAlarm(
98
+ QuicArenaScopedPtr<QuicAlarm::Delegate> delegate,
99
+ QuicConnectionArena* arena) override;
100
+
101
+ private:
102
+ QuicPollEventLoop* loop_;
103
+ };
104
+
105
+ // Used for deferred execution of I/O callbacks.
106
+ struct ReadyListEntry {
107
+ QuicUdpSocketFd fd;
108
+ std::weak_ptr<Registration> registration;
109
+ QuicSocketEventMask events;
110
+ };
111
+
112
+ // We're using a linked hash map here to ensure the events are called in the
113
+ // registration order. This isn't strictly speaking necessary, but makes
114
+ // testing things easier.
115
+ using RegistrationMap =
116
+ quiche::QuicheLinkedHashMap<QuicUdpSocketFd,
117
+ std::shared_ptr<Registration>>;
118
+ // Alarms are stored as weak pointers, since the alarm can be cancelled and
119
+ // disappear while in the queue.
120
+ using AlarmList = absl::btree_multimap<QuicTime, std::weak_ptr<Alarm*>>;
121
+
122
+ // Returns the timeout for the next poll(2) call. It is typically the time at
123
+ // which the next alarm is supposed to activate.
124
+ QuicTime::Delta ComputePollTimeout(QuicTime now,
125
+ QuicTime::Delta default_timeout) const;
126
+ // Calls poll(2) with the provided timeout and dispatches the callbacks
127
+ // accordingly.
128
+ void ProcessIoEvents(QuicTime start_time, QuicTime::Delta timeout);
129
+ // Calls all of the alarm callbacks that are scheduled before or at |time|.
130
+ void ProcessAlarmsUpTo(QuicTime time);
131
+
132
+ // Adds the I/O callbacks for |fd| to the |ready_lits| as appopriate.
133
+ void DispatchIoEvent(std::vector<ReadyListEntry>& ready_list,
134
+ QuicUdpSocketFd fd, short mask); // NOLINT(runtime/int)
135
+ // Runs all of the callbacks on the ready list.
136
+ void RunReadyCallbacks(std::vector<ReadyListEntry>& ready_list);
137
+
138
+ // Calls poll() while handling EINTR. Returns the return value of poll(2)
139
+ // system call.
140
+ int PollWithRetries(absl::Span<pollfd> fds, QuicTime start_time,
141
+ QuicTime::Delta timeout);
142
+
143
+ const QuicClock* clock_;
144
+ RegistrationMap registrations_;
145
+ AlarmList alarms_;
146
+ AlarmFactory alarm_factory_;
147
+ bool has_artificial_events_pending_ = false;
148
+ };
149
+
150
+ } // namespace quic
151
+
152
+ #endif // QUICHE_QUIC_CORE_IO_QUIC_POLL_EVENT_LOOP_H_