@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
@@ -18,6 +18,7 @@
18
18
  #include "quiche/quic/core/crypto/null_encrypter.h"
19
19
  #include "quiche/quic/core/crypto/quic_decrypter.h"
20
20
  #include "quiche/quic/core/crypto/quic_encrypter.h"
21
+ #include "quiche/quic/core/frames/quic_frame.h"
21
22
  #include "quiche/quic/core/frames/quic_stream_frame.h"
22
23
  #include "quiche/quic/core/quic_connection_id.h"
23
24
  #include "quiche/quic/core/quic_data_writer.h"
@@ -1927,6 +1928,10 @@ TEST_P(QuicPacketCreatorTest, PacketTransmissionType) {
1927
1928
  absl::string_view()));
1928
1929
  ASSERT_TRUE(QuicUtils::IsRetransmittableFrame(stream_frame.type));
1929
1930
 
1931
+ QuicFrame stream_frame_2(QuicStreamFrame(stream_id,
1932
+ /*fin=*/false, 1u,
1933
+ absl::string_view()));
1934
+
1930
1935
  QuicFrame padding_frame{QuicPaddingFrame()};
1931
1936
  ASSERT_FALSE(QuicUtils::IsRetransmittableFrame(padding_frame.type));
1932
1937
 
@@ -1939,16 +1944,154 @@ TEST_P(QuicPacketCreatorTest, PacketTransmissionType) {
1939
1944
  EXPECT_TRUE(creator_.AddFrame(stream_frame, PTO_RETRANSMISSION));
1940
1945
  ASSERT_EQ(serialized_packet_, nullptr);
1941
1946
 
1942
- EXPECT_TRUE(creator_.AddFrame(padding_frame, LOSS_RETRANSMISSION));
1947
+ EXPECT_TRUE(creator_.AddFrame(stream_frame_2, PATH_RETRANSMISSION));
1948
+ ASSERT_EQ(serialized_packet_, nullptr);
1949
+
1950
+ EXPECT_TRUE(creator_.AddFrame(padding_frame, PTO_RETRANSMISSION));
1943
1951
  creator_.FlushCurrentPacket();
1944
1952
  ASSERT_TRUE(serialized_packet_->encrypted_buffer);
1945
1953
 
1946
1954
  // The last retransmittable frame on packet is a stream frame, the packet's
1947
1955
  // transmission type should be the same as the stream frame's.
1948
- EXPECT_EQ(serialized_packet_->transmission_type, PTO_RETRANSMISSION);
1956
+ EXPECT_EQ(serialized_packet_->transmission_type, PATH_RETRANSMISSION);
1957
+ DeleteSerializedPacket();
1958
+ }
1959
+
1960
+ TEST_P(QuicPacketCreatorTest,
1961
+ PacketBytesRetransmitted_AddFrame_Retransmission) {
1962
+ creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
1963
+
1964
+ QuicAckFrame temp_ack_frame = InitAckFrame(1);
1965
+ QuicFrame ack_frame(&temp_ack_frame);
1966
+ EXPECT_TRUE(creator_.AddFrame(ack_frame, LOSS_RETRANSMISSION));
1967
+
1968
+ QuicStreamId stream_id = QuicUtils::GetFirstBidirectionalStreamId(
1969
+ client_framer_.transport_version(), Perspective::IS_CLIENT);
1970
+
1971
+ QuicFrame stream_frame;
1972
+ const std::string data("data");
1973
+ // ConsumeDataToFillCurrentPacket calls AddFrame
1974
+ ASSERT_TRUE(creator_.ConsumeDataToFillCurrentPacket(
1975
+ stream_id, data, 0u, false, false, PTO_RETRANSMISSION, &stream_frame));
1976
+ EXPECT_EQ(4u, stream_frame.stream_frame.data_length);
1977
+
1978
+ EXPECT_CALL(delegate_, OnSerializedPacket(_))
1979
+ .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
1980
+
1981
+ creator_.FlushCurrentPacket();
1982
+ ASSERT_TRUE(serialized_packet_->encrypted_buffer);
1983
+ ASSERT_FALSE(serialized_packet_->bytes_not_retransmitted.has_value());
1984
+
1949
1985
  DeleteSerializedPacket();
1950
1986
  }
1951
1987
 
1988
+ TEST_P(QuicPacketCreatorTest,
1989
+ PacketBytesRetransmitted_AddFrame_NotRetransmission) {
1990
+ creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
1991
+
1992
+ QuicAckFrame temp_ack_frame = InitAckFrame(1);
1993
+ QuicFrame ack_frame(&temp_ack_frame);
1994
+ EXPECT_TRUE(creator_.AddFrame(ack_frame, NOT_RETRANSMISSION));
1995
+
1996
+ QuicStreamId stream_id = QuicUtils::GetFirstBidirectionalStreamId(
1997
+ client_framer_.transport_version(), Perspective::IS_CLIENT);
1998
+
1999
+ QuicFrame stream_frame;
2000
+ const std::string data("data");
2001
+ // ConsumeDataToFillCurrentPacket calls AddFrame
2002
+ ASSERT_TRUE(creator_.ConsumeDataToFillCurrentPacket(
2003
+ stream_id, data, 0u, false, false, NOT_RETRANSMISSION, &stream_frame));
2004
+ EXPECT_EQ(4u, stream_frame.stream_frame.data_length);
2005
+
2006
+ EXPECT_CALL(delegate_, OnSerializedPacket(_))
2007
+ .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
2008
+
2009
+ creator_.FlushCurrentPacket();
2010
+ ASSERT_TRUE(serialized_packet_->encrypted_buffer);
2011
+ ASSERT_FALSE(serialized_packet_->bytes_not_retransmitted.has_value());
2012
+
2013
+ DeleteSerializedPacket();
2014
+ }
2015
+
2016
+ TEST_P(QuicPacketCreatorTest, PacketBytesRetransmitted_AddFrame_MixedFrames) {
2017
+ creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
2018
+
2019
+ QuicAckFrame temp_ack_frame = InitAckFrame(1);
2020
+ QuicFrame ack_frame(&temp_ack_frame);
2021
+ EXPECT_TRUE(creator_.AddFrame(ack_frame, NOT_RETRANSMISSION));
2022
+
2023
+ QuicStreamId stream_id = QuicUtils::GetFirstBidirectionalStreamId(
2024
+ client_framer_.transport_version(), Perspective::IS_CLIENT);
2025
+
2026
+ QuicFrame stream_frame;
2027
+ const std::string data("data");
2028
+ // ConsumeDataToFillCurrentPacket calls AddFrame
2029
+ ASSERT_TRUE(creator_.ConsumeDataToFillCurrentPacket(
2030
+ stream_id, data, 0u, false, false, NOT_RETRANSMISSION, &stream_frame));
2031
+ EXPECT_EQ(4u, stream_frame.stream_frame.data_length);
2032
+
2033
+ QuicFrame stream_frame2;
2034
+ // ConsumeDataToFillCurrentPacket calls AddFrame
2035
+ ASSERT_TRUE(creator_.ConsumeDataToFillCurrentPacket(
2036
+ stream_id, data, 0u, false, false, LOSS_RETRANSMISSION, &stream_frame2));
2037
+ EXPECT_EQ(4u, stream_frame2.stream_frame.data_length);
2038
+
2039
+ EXPECT_CALL(delegate_, OnSerializedPacket(_))
2040
+ .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
2041
+
2042
+ creator_.FlushCurrentPacket();
2043
+ ASSERT_TRUE(serialized_packet_->encrypted_buffer);
2044
+ ASSERT_TRUE(serialized_packet_->bytes_not_retransmitted.has_value());
2045
+ ASSERT_GE(serialized_packet_->bytes_not_retransmitted.value(), 4u);
2046
+
2047
+ DeleteSerializedPacket();
2048
+ }
2049
+
2050
+ TEST_P(QuicPacketCreatorTest,
2051
+ PacketBytesRetransmitted_CreateAndSerializeStreamFrame_Retransmission) {
2052
+ creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
2053
+
2054
+ const std::string data("test");
2055
+ producer_.SaveStreamData(GetNthClientInitiatedStreamId(0), data);
2056
+ EXPECT_CALL(delegate_, OnSerializedPacket(_))
2057
+ .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
2058
+ size_t num_bytes_consumed;
2059
+ // Retransmission frame adds to packet's bytes_retransmitted
2060
+ creator_.CreateAndSerializeStreamFrame(
2061
+ GetNthClientInitiatedStreamId(0), data.length(), 0, 0, true,
2062
+ LOSS_RETRANSMISSION, &num_bytes_consumed);
2063
+ EXPECT_EQ(4u, num_bytes_consumed);
2064
+
2065
+ ASSERT_TRUE(serialized_packet_->encrypted_buffer);
2066
+ ASSERT_FALSE(serialized_packet_->bytes_not_retransmitted.has_value());
2067
+ DeleteSerializedPacket();
2068
+
2069
+ EXPECT_FALSE(creator_.HasPendingFrames());
2070
+ }
2071
+
2072
+ TEST_P(
2073
+ QuicPacketCreatorTest,
2074
+ PacketBytesRetransmitted_CreateAndSerializeStreamFrame_NotRetransmission) {
2075
+ creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
2076
+
2077
+ const std::string data("test");
2078
+ producer_.SaveStreamData(GetNthClientInitiatedStreamId(0), data);
2079
+ EXPECT_CALL(delegate_, OnSerializedPacket(_))
2080
+ .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket));
2081
+ size_t num_bytes_consumed;
2082
+ // Non-retransmission frame does not add to packet's bytes_retransmitted
2083
+ creator_.CreateAndSerializeStreamFrame(
2084
+ GetNthClientInitiatedStreamId(0), data.length(), 0, 0, true,
2085
+ NOT_RETRANSMISSION, &num_bytes_consumed);
2086
+ EXPECT_EQ(4u, num_bytes_consumed);
2087
+
2088
+ ASSERT_TRUE(serialized_packet_->encrypted_buffer);
2089
+ ASSERT_FALSE(serialized_packet_->bytes_not_retransmitted.has_value());
2090
+ DeleteSerializedPacket();
2091
+
2092
+ EXPECT_FALSE(creator_.HasPendingFrames());
2093
+ }
2094
+
1952
2095
  TEST_P(QuicPacketCreatorTest, RetryToken) {
1953
2096
  if (!GetParam().version_serialization ||
1954
2097
  !QuicVersionHasLongHeaderLengths(client_framer_.transport_version())) {
@@ -439,7 +439,8 @@ SerializedPacket::SerializedPacket(SerializedPacket&& other)
439
439
  has_ack_frequency(other.has_ack_frequency),
440
440
  has_message(other.has_message),
441
441
  fate(other.fate),
442
- peer_address(other.peer_address) {
442
+ peer_address(other.peer_address),
443
+ bytes_not_retransmitted(other.bytes_not_retransmitted) {
443
444
  if (this != &other) {
444
445
  if (release_encrypted_buffer && encrypted_buffer != nullptr) {
445
446
  release_encrypted_buffer(encrypted_buffer);
@@ -486,6 +487,7 @@ SerializedPacket* CopySerializedPacket(const SerializedPacket& serialized,
486
487
  copy->has_message = serialized.has_message;
487
488
  copy->fate = serialized.fate;
488
489
  copy->peer_address = serialized.peer_address;
490
+ copy->bytes_not_retransmitted = serialized.bytes_not_retransmitted;
489
491
 
490
492
  if (copy_buffer) {
491
493
  copy->encrypted_buffer = CopyBuffer(serialized);
@@ -376,6 +376,10 @@ struct QUIC_EXPORT_PRIVATE SerializedPacket {
376
376
  bool has_message;
377
377
  SerializedPacketFate fate;
378
378
  QuicSocketAddress peer_address;
379
+ // Sum of bytes from frames that are not retransmissions. This field is only
380
+ // populated for packets with "mixed frames": at least one frame of a
381
+ // retransmission type and at least one frame of NOT_RETRANSMISSION type.
382
+ absl::optional<QuicByteCount> bytes_not_retransmitted;
379
383
  };
380
384
 
381
385
  // Make a copy of |serialized| (including the underlying frames). |copy_buffer|
@@ -131,17 +131,19 @@ void QuicSentPacketManager::SetFromConfig(const QuicConfig& config) {
131
131
  ignore_ack_delay_ = true;
132
132
  }
133
133
 
134
- if (config.HasClientRequestedIndependentOption(kPDP1, perspective)) {
135
- num_ptos_for_path_degrading_ = 1;
136
- }
137
- if (config.HasClientRequestedIndependentOption(kPDP2, perspective)) {
138
- num_ptos_for_path_degrading_ = 2;
139
- }
140
- if (config.HasClientRequestedIndependentOption(kPDP3, perspective)) {
141
- num_ptos_for_path_degrading_ = 3;
142
- }
143
- if (config.HasClientRequestedIndependentOption(kPDP5, perspective)) {
144
- num_ptos_for_path_degrading_ = 5;
134
+ if (!remove_blackhole_detection_experiments_) {
135
+ if (config.HasClientRequestedIndependentOption(kPDP1, perspective)) {
136
+ num_ptos_for_path_degrading_ = 1;
137
+ }
138
+ if (config.HasClientRequestedIndependentOption(kPDP2, perspective)) {
139
+ num_ptos_for_path_degrading_ = 2;
140
+ }
141
+ if (config.HasClientRequestedIndependentOption(kPDP3, perspective)) {
142
+ num_ptos_for_path_degrading_ = 3;
143
+ }
144
+ if (config.HasClientRequestedIndependentOption(kPDP5, perspective)) {
145
+ num_ptos_for_path_degrading_ = 5;
146
+ }
145
147
  }
146
148
 
147
149
  // Configure congestion control.
@@ -26,6 +26,7 @@
26
26
  #include "quiche/quic/core/quic_types.h"
27
27
  #include "quiche/quic/core/quic_unacked_packet_map.h"
28
28
  #include "quiche/quic/platform/api/quic_export.h"
29
+ #include "quiche/quic/platform/api/quic_flags.h"
29
30
  #include "quiche/common/quiche_circular_deque.h"
30
31
 
31
32
  namespace quic {
@@ -464,6 +465,11 @@ class QUIC_EXPORT_PRIVATE QuicSentPacketManager {
464
465
  // kMinUntrustedInitialRoundTripTimeUs if not |trusted|.
465
466
  void SetInitialRtt(QuicTime::Delta rtt, bool trusted);
466
467
 
468
+ // Latched value of --quic_remove_blackhole_detection_experiments.
469
+ bool remove_blackhole_detection_experiments() const {
470
+ return remove_blackhole_detection_experiments_;
471
+ }
472
+
467
473
  private:
468
474
  friend class test::QuicConnectionPeer;
469
475
  friend class test::QuicSentPacketManagerPeer;
@@ -668,6 +674,9 @@ class QUIC_EXPORT_PRIVATE QuicSentPacketManager {
668
674
 
669
675
  // Whether to ignore the ack_delay in received ACKs.
670
676
  bool ignore_ack_delay_;
677
+
678
+ const bool remove_blackhole_detection_experiments_ =
679
+ GetQuicReloadableFlag(quic_remove_blackhole_detection_experiments);
671
680
  };
672
681
 
673
682
  } // namespace quic
@@ -2499,6 +2499,9 @@ TEST_F(QuicSentPacketManagerTest, GetPathDegradingDelayDefaultPTO) {
2499
2499
  }
2500
2500
 
2501
2501
  TEST_F(QuicSentPacketManagerTest, GetPathDegradingDelayUsing2PTO) {
2502
+ if (GetQuicReloadableFlag(quic_remove_blackhole_detection_experiments)) {
2503
+ return;
2504
+ }
2502
2505
  QuicConfig client_config;
2503
2506
  QuicTagVector client_options;
2504
2507
  client_options.push_back(kPDP2);
@@ -2512,6 +2515,9 @@ TEST_F(QuicSentPacketManagerTest, GetPathDegradingDelayUsing2PTO) {
2512
2515
  }
2513
2516
 
2514
2517
  TEST_F(QuicSentPacketManagerTest, GetPathDegradingDelayUsing1PTO) {
2518
+ if (GetQuicReloadableFlag(quic_remove_blackhole_detection_experiments)) {
2519
+ return;
2520
+ }
2515
2521
  QuicConfig client_config;
2516
2522
  QuicTagVector client_options;
2517
2523
  client_options.push_back(kPDP1);
@@ -2098,12 +2098,13 @@ void QuicSession::SendRetireConnectionId(uint64_t sequence_number) {
2098
2098
  control_frame_manager_.WriteOrBufferRetireConnectionId(sequence_number);
2099
2099
  }
2100
2100
 
2101
- void QuicSession::OnServerConnectionIdIssued(
2101
+ bool QuicSession::MaybeReserveConnectionId(
2102
2102
  const QuicConnectionId& server_connection_id) {
2103
2103
  if (visitor_) {
2104
- visitor_->OnNewConnectionIdSent(
2104
+ return visitor_->TryAddNewConnectionId(
2105
2105
  connection_->GetOneActiveServerConnectionId(), server_connection_id);
2106
2106
  }
2107
+ return true;
2107
2108
  }
2108
2109
 
2109
2110
  void QuicSession::OnServerConnectionIdRetired(
@@ -89,8 +89,8 @@ class QUIC_EXPORT_PRIVATE QuicSession
89
89
  // peer.
90
90
  virtual void OnStopSendingReceived(const QuicStopSendingFrame& frame) = 0;
91
91
 
92
- // Called when a NewConnectionId frame has been sent.
93
- virtual void OnNewConnectionIdSent(
92
+ // Called when on whether a NewConnectionId frame can been sent.
93
+ virtual bool TryAddNewConnectionId(
94
94
  const QuicConnectionId& server_connection_id,
95
95
  const QuicConnectionId& new_connection_id) = 0;
96
96
 
@@ -145,7 +145,12 @@ class QUIC_EXPORT_PRIVATE QuicSession
145
145
  void SendAckFrequency(const QuicAckFrequencyFrame& frame) override;
146
146
  void SendNewConnectionId(const QuicNewConnectionIdFrame& frame) override;
147
147
  void SendRetireConnectionId(uint64_t sequence_number) override;
148
- void OnServerConnectionIdIssued(
148
+ // Returns true if server_connection_id can be issued. If returns true,
149
+ // |visitor_| may establish a mapping from |server_connection_id| to this
150
+ // session, if that's not desired,
151
+ // OnServerConnectionIdRetired(server_connection_id) can be used to remove the
152
+ // mapping.
153
+ bool MaybeReserveConnectionId(
149
154
  const QuicConnectionId& server_connection_id) override;
150
155
  void OnServerConnectionIdRetired(
151
156
  const QuicConnectionId& server_connection_id) override;
@@ -307,6 +307,24 @@ std::ostream& operator<<(std::ostream& os, SerializedPacketFate fate) {
307
307
  return os;
308
308
  }
309
309
 
310
+ std::string CongestionControlTypeToString(CongestionControlType cc_type) {
311
+ switch (cc_type) {
312
+ case kCubicBytes:
313
+ return "CUBIC_BYTES";
314
+ case kRenoBytes:
315
+ return "RENO_BYTES";
316
+ case kBBR:
317
+ return "BBR";
318
+ case kBBRv2:
319
+ return "BBRv2";
320
+ case kPCC:
321
+ return "PCC";
322
+ case kGoogCC:
323
+ return "GoogCC";
324
+ }
325
+ return absl::StrCat("Unknown(", static_cast<int>(cc_type), ")");
326
+ }
327
+
310
328
  std::string EncryptionLevelToString(EncryptionLevel level) {
311
329
  switch (level) {
312
330
  RETURN_STRING_LITERAL(ENCRYPTION_INITIAL);
@@ -452,6 +452,9 @@ enum CongestionControlType {
452
452
  kBBRv2,
453
453
  };
454
454
 
455
+ QUIC_EXPORT_PRIVATE std::string CongestionControlTypeToString(
456
+ CongestionControlType cc_type);
457
+
455
458
  // EncryptionLevel enumerates the stages of encryption that a QUIC connection
456
459
  // progresses through. When retransmitting a packet, the encryption level needs
457
460
  // to be specified so that it is retransmitted at a level which the peer can
@@ -267,6 +267,9 @@ void TlsChloExtractor::SendAlert(uint8_t tls_alert_value) {
267
267
  HandleUnrecoverableError(absl::StrCat(
268
268
  "BoringSSL attempted to send alert ", static_cast<int>(tls_alert_value),
269
269
  " ", SSL_alert_desc_string_long(tls_alert_value)));
270
+ if (state_ == State::kUnrecoverableFailure) {
271
+ tls_alert_ = tls_alert_value;
272
+ }
270
273
  }
271
274
 
272
275
  // static
@@ -62,6 +62,13 @@ class QUIC_NO_EXPORT TlsChloExtractor
62
62
  state_ == State::kParsedFullMultiPacketChlo;
63
63
  }
64
64
 
65
+ // Returns the TLS alert that caused the unrecoverable error, if any.
66
+ absl::optional<uint8_t> tls_alert() const {
67
+ QUICHE_DCHECK(!tls_alert_.has_value() ||
68
+ state_ == State::kUnrecoverableFailure);
69
+ return tls_alert_;
70
+ }
71
+
65
72
  // Methods from QuicFramerVisitorInterface.
66
73
  void OnError(QuicFramer* /*framer*/) override {}
67
74
  bool OnProtocolVersionMismatch(ParsedQuicVersion version) override;
@@ -249,6 +256,9 @@ class QUIC_NO_EXPORT TlsChloExtractor
249
256
  // Whether early data is attempted from the CHLO, indicated by the
250
257
  // 'early_data' TLS extension.
251
258
  bool early_data_attempted_ = false;
259
+ // If set, contains the TLS alert that caused an unrecoverable error, which is
260
+ // an AlertDescription value defined in go/rfc/8446#appendix-B.2.
261
+ absl::optional<uint8_t> tls_alert_;
252
262
  };
253
263
 
254
264
  // Convenience method to facilitate logging TlsChloExtractor::State.
@@ -27,7 +27,7 @@ class MockQuicSessionVisitor : public QuicTimeWaitListManager::Visitor {
27
27
  (override));
28
28
  MOCK_METHOD(void, OnStopSendingReceived, (const QuicStopSendingFrame& frame),
29
29
  (override));
30
- MOCK_METHOD(void, OnNewConnectionIdSent,
30
+ MOCK_METHOD(bool, TryAddNewConnectionId,
31
31
  (const QuicConnectionId& server_connection_id,
32
32
  const QuicConnectionId& new_connection_id),
33
33
  (override));
@@ -475,7 +475,7 @@ class MockQuicConnectionVisitor : public QuicConnectionVisitorInterface {
475
475
  (const QuicNewConnectionIdFrame& frame), (override));
476
476
  MOCK_METHOD(void, SendRetireConnectionId, (uint64_t sequence_number),
477
477
  (override));
478
- MOCK_METHOD(void, OnServerConnectionIdIssued,
478
+ MOCK_METHOD(bool, MaybeReserveConnectionId,
479
479
  (const QuicConnectionId& server_connection_id), (override));
480
480
  MOCK_METHOD(void, OnServerConnectionIdRetired,
481
481
  (const QuicConnectionId& server_connection_id), (override));
@@ -27,8 +27,9 @@ void ServerThread::Initialize() {
27
27
  if (initialized_) {
28
28
  return;
29
29
  }
30
-
31
- server_->CreateUDPSocketAndListen(address_);
30
+ if (!server_->CreateUDPSocketAndListen(address_)) {
31
+ return;
32
+ }
32
33
 
33
34
  QuicWriterMutexLock lock(&port_lock_);
34
35
  port_ = server_->port();
@@ -37,6 +37,12 @@ SimpleSessionNotifier::StreamState::~StreamState() {}
37
37
 
38
38
  QuicConsumedData SimpleSessionNotifier::WriteOrBufferData(
39
39
  QuicStreamId id, QuicByteCount data_length, StreamSendingState state) {
40
+ return WriteOrBufferData(id, data_length, state, NOT_RETRANSMISSION);
41
+ }
42
+
43
+ QuicConsumedData SimpleSessionNotifier::WriteOrBufferData(
44
+ QuicStreamId id, QuicByteCount data_length, StreamSendingState state,
45
+ TransmissionType transmission_type) {
40
46
  if (!stream_map_.contains(id)) {
41
47
  stream_map_[id] = StreamState();
42
48
  }
@@ -53,7 +59,7 @@ QuicConsumedData SimpleSessionNotifier::WriteOrBufferData(
53
59
  return {0, false};
54
60
  }
55
61
  const size_t length = stream_state.bytes_total - stream_state.bytes_sent;
56
- connection_->SetTransmissionType(NOT_RETRANSMISSION);
62
+ connection_->SetTransmissionType(transmission_type);
57
63
  QuicConsumedData consumed =
58
64
  connection_->SendStreamData(id, length, stream_state.bytes_sent, state);
59
65
  QUIC_DVLOG(1) << "consumed: " << consumed;
@@ -28,6 +28,9 @@ class SimpleSessionNotifier : public SessionNotifierInterface {
28
28
  // Tries to write stream data and returns data consumed.
29
29
  QuicConsumedData WriteOrBufferData(QuicStreamId id, QuicByteCount data_length,
30
30
  StreamSendingState state);
31
+ QuicConsumedData WriteOrBufferData(QuicStreamId id, QuicByteCount data_length,
32
+ StreamSendingState state,
33
+ TransmissionType transmission_type);
31
34
 
32
35
  // Tries to write RST_STREAM_FRAME.
33
36
  void WriteOrBufferRstStream(QuicStreamId id, QuicRstStreamErrorCode error,
@@ -74,8 +74,10 @@ class QuicEndpoint : public QuicEndpointBase,
74
74
  void SendNewConnectionId(const QuicNewConnectionIdFrame& /*frame*/) override {
75
75
  }
76
76
  void SendRetireConnectionId(uint64_t /*sequence_number*/) override {}
77
- void OnServerConnectionIdIssued(
78
- const QuicConnectionId& /*server_connection_id*/) override {}
77
+ bool MaybeReserveConnectionId(
78
+ const QuicConnectionId& /*server_connection_id*/) override {
79
+ return true;
80
+ }
79
81
  void OnServerConnectionIdRetired(
80
82
  const QuicConnectionId& /*server_connection_id*/) override {}
81
83
  bool AllowSelfAddressChange() const override;
package/certs/ca.cnf DELETED
@@ -1,69 +0,0 @@
1
- # Defaults in the event they're not set in the environment
2
- CA_DIR = out
3
- KEY_SIZE = 2048
4
- ALGO = sha256
5
- CERT_TYPE = root
6
- CA_NAME = req_env_dn
7
- [ca]
8
- default_ca = CA_root
9
- preserve = yes
10
- # The default test root, used to generate certificates and CRLs.
11
- [CA_root]
12
- dir = $ENV::CA_DIR
13
- key_size = $ENV::KEY_SIZE
14
- algo = $ENV::ALGO
15
- cert_type = $ENV::CERT_TYPE
16
- type = $key_size-$algo-$cert_type
17
- database = $dir/$type-index.txt
18
- new_certs_dir = $dir
19
- serial = $dir/$type-serial
20
- certificate = $dir/$type.pem
21
- private_key = $dir/$type.key
22
- RANDFILE = $dir/.rand
23
- default_days = 3650
24
- default_crl_days = 30
25
- default_md = sha256
26
- policy = policy_anything
27
- unique_subject = no
28
- copy_extensions = copy
29
- [user_cert]
30
- # Extensions to add when signing a request for an EE cert
31
- basicConstraints = critical, CA:false
32
- subjectKeyIdentifier = hash
33
- authorityKeyIdentifier = keyid:always
34
- extendedKeyUsage = serverAuth,clientAuth
35
- [ca_cert]
36
- # Extensions to add when signing a request for an intermediate/CA cert
37
- basicConstraints = critical, CA:true
38
- subjectKeyIdentifier = hash
39
- keyUsage = critical, keyCertSign, cRLSign
40
- [crl_extensions]
41
- # Extensions to add when signing a CRL
42
- authorityKeyIdentifier = keyid:always
43
- [policy_anything]
44
- # Default signing policy
45
- countryName = optional
46
- stateOrProvinceName = optional
47
- localityName = optional
48
- organizationName = optional
49
- organizationalUnitName = optional
50
- commonName = optional
51
- emailAddress = optional
52
- [req]
53
- # The request section used to generate the root CA certificate. This should
54
- # not be used to generate end-entity certificates. For certificates other
55
- # than the root CA, see README to find the appropriate configuration file
56
- # (ie: openssl_cert.cnf).
57
- default_bits = $ENV::KEY_SIZE
58
- default_md = sha256
59
- string_mask = utf8only
60
- prompt = no
61
- encrypt_key = no
62
- distinguished_name = $ENV::CA_NAME
63
- x509_extensions = req_ca_exts
64
- [req_env_dn]
65
- CN = FAILS Server Root CA
66
- [req_ca_exts]
67
- basicConstraints = critical, CA:true
68
- keyUsage = critical, keyCertSign, cRLSign
69
- subjectKeyIdentifier = hash
@@ -1,53 +0,0 @@
1
- #!/bin/sh
2
- # Copyright 2015 The Chromium Authors. All rights reserved.
3
- # Use of this source code is governed by a BSD-style license that can be
4
- # found in the LICENSE file.
5
- # This script generates a CA and leaf cert which can be used for the
6
- # quic_server.
7
- try() {
8
- "$@" || (e=$?; echo "$@" > /dev/stderr; exit $e)
9
- }
10
- try rm -rf out
11
- try mkdir out
12
- try /bin/sh -c "echo 01 > out/2048-sha256-root-serial"
13
- touch out/2048-sha256-root-index.txt
14
- # Generate the key.
15
- try openssl genrsa -out out/2048-sha256-root.key 2048
16
- # Generate the root certificate.
17
- try openssl req \
18
- -new \
19
- -key out/2048-sha256-root.key \
20
- -out out/2048-sha256-root.req \
21
- -config ca.cnf
22
- try openssl x509 \
23
- -req -days 365 \
24
- -in out/2048-sha256-root.req \
25
- -signkey out/2048-sha256-root.key \
26
- -extfile ca.cnf \
27
- -extensions ca_cert \
28
- -text > out/2048-sha256-root.pem
29
- # Generate the leaf certificate request.
30
- try openssl req \
31
- -new \
32
- -keyout out/leaf_cert.key \
33
- -out out/leaf_cert.req \
34
- -config leaf.cnf
35
- # Convert the key to pkcs8.
36
- try openssl pkcs8 \
37
- -topk8 \
38
- -outform DER \
39
- -inform PEM \
40
- -in out/leaf_cert.key \
41
- -out out/leaf_cert.pkcs8 \
42
- -nocrypt
43
- # Generate the leaf certificate to be valid for 365 days.
44
- try openssl ca \
45
- -batch \
46
- -days 365 \
47
- -extensions user_cert \
48
- -in out/leaf_cert.req \
49
- -out out/leaf_cert.pem \
50
- -config ca.cnf
51
-
52
- # TODO
53
- try openssl x509 -in out/leaf_cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 > out/fingerprint.txt
@@ -1,53 +0,0 @@
1
- #!/bin/sh
2
- # Copyright 2015 The Chromium Authors. All rights reserved.
3
- # Use of this source code is governed by a BSD-style license that can be
4
- # found in the LICENSE file.
5
- # This script generates a CA and leaf cert which can be used for the
6
- # quic_server.
7
- try() {
8
- "$@" || (e=$?; echo "$@" > /dev/stderr; exit $e)
9
- }
10
- #try rm -rf out
11
- try mkdir out
12
- try /bin/sh -c "echo 01 > out/2048-sha256-root-serial"
13
- touch out/2048-sha256-root-index.txt
14
- # Generate the key.
15
- #try openssl genrsa -out out/2048-sha256-root.key 2048
16
- # Generate the root certificate.
17
- #try openssl req \
18
- # -new \
19
- # -key out/2048-sha256-root.key \
20
- # -out out/2048-sha256-root.req \
21
- # -config ca.cnf
22
- #try openssl x509 \
23
- # -req -days 365 \
24
- # -in out/2048-sha256-root.req \
25
- # -signkey out/2048-sha256-root.key \
26
- # -extfile ca.cnf \
27
- # -extensions ca_cert \
28
- # -text > out/2048-sha256-root.pem
29
- # Generate the leaf certificate request.
30
- try openssl req \
31
- -new \
32
- -keyout out/leaf_cert.key \
33
- -out out/leaf_cert.req \
34
- -config leaf.cnf
35
- # Convert the key to pkcs8.
36
- try openssl pkcs8 \
37
- -topk8 \
38
- -outform DER \
39
- -inform PEM \
40
- -in out/leaf_cert.key \
41
- -out out/leaf_cert.pkcs8 \
42
- -nocrypt
43
- # Generate the leaf certificate to be valid for 365 days.
44
- try openssl ca \
45
- -batch \
46
- -days 365 \
47
- -extensions user_cert \
48
- -in out/leaf_cert.req \
49
- -out out/leaf_cert.pem \
50
- -config ca.cnf
51
-
52
- # TODO
53
- try openssl x509 -in out/leaf_cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 > out/fingerprint.txt