grpc 1.69.0 → 1.70.1

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 (640) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +251 -249
  3. data/include/grpc/support/atm.h +0 -13
  4. data/src/core/call/request_buffer.cc +224 -0
  5. data/src/core/call/request_buffer.h +192 -0
  6. data/src/core/client_channel/client_channel.cc +2 -3
  7. data/src/core/client_channel/client_channel_args.h +21 -0
  8. data/src/core/client_channel/client_channel_filter.h +1 -3
  9. data/src/core/client_channel/retry_interceptor.cc +406 -0
  10. data/src/core/client_channel/retry_interceptor.h +157 -0
  11. data/src/core/client_channel/retry_service_config.h +13 -0
  12. data/src/core/client_channel/retry_throttle.cc +33 -18
  13. data/src/core/client_channel/retry_throttle.h +3 -3
  14. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +596 -94
  15. data/src/core/ext/transport/chttp2/server/chttp2_server.h +189 -13
  16. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +1 -0
  17. data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -3
  18. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +40 -1
  19. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +3 -1
  20. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +66 -36
  21. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +19 -17
  22. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +116 -0
  23. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +31 -5
  24. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.h +2 -0
  25. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +67 -6
  26. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +12 -8
  27. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb.h +151 -0
  28. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.c +60 -0
  29. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.h +32 -0
  30. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +228 -21
  31. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +65 -17
  32. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.h +6 -0
  33. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +7 -106
  34. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +7 -28
  35. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.h +0 -2
  36. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +85 -0
  37. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +25 -3
  38. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
  39. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +152 -0
  40. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +40 -10
  41. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.h +2 -0
  42. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +135 -4
  43. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +41 -9
  44. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +2 -0
  45. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb.h +0 -2
  46. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.c +0 -1
  47. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.h +0 -1
  48. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +16 -0
  49. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +3 -2
  50. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +60 -0
  51. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +13 -2
  52. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb.h +0 -1
  53. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.c +0 -1
  54. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +102 -24
  55. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +28 -19
  56. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +251 -18
  57. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +41 -16
  58. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.h +2 -0
  59. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +2 -1
  60. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.c +11 -10
  61. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +418 -413
  62. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +161 -153
  63. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +5 -0
  64. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +267 -261
  65. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.c +46 -0
  66. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.h +33 -0
  67. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.c +29 -19
  68. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +15 -0
  69. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.c +58 -65
  70. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +0 -5
  71. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +73 -63
  72. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +49 -48
  73. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +117 -100
  74. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  75. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +905 -897
  76. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +5 -0
  77. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.c +15 -18
  78. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +460 -457
  79. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.c +16 -19
  80. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +95 -95
  81. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +202 -191
  82. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c +148 -135
  83. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  84. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.c +23 -22
  85. data/src/core/filter/filter_args.h +112 -0
  86. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +1 -1
  87. data/src/core/lib/channel/promise_based_filter.h +5 -79
  88. data/src/core/lib/debug/trace_flags.cc +2 -0
  89. data/src/core/lib/debug/trace_flags.h +1 -0
  90. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +14 -0
  91. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +7 -2
  92. data/src/core/lib/event_engine/posix_engine/posix_engine.h +0 -2
  93. data/src/core/lib/event_engine/windows/windows_engine.cc +1 -0
  94. data/src/core/lib/experiments/experiments.cc +90 -39
  95. data/src/core/lib/experiments/experiments.h +43 -24
  96. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +1 -1
  97. data/src/core/lib/promise/activity.cc +2 -0
  98. data/src/core/lib/promise/activity.h +29 -8
  99. data/src/core/lib/promise/map.h +42 -0
  100. data/src/core/lib/promise/party.cc +36 -1
  101. data/src/core/lib/promise/party.h +13 -5
  102. data/src/core/lib/promise/sleep.h +1 -0
  103. data/src/core/lib/promise/status_flag.h +10 -0
  104. data/src/core/lib/resource_quota/arena.h +8 -0
  105. data/src/core/lib/resource_quota/connection_quota.h +4 -0
  106. data/src/core/lib/surface/call_utils.h +2 -0
  107. data/src/core/lib/surface/client_call.cc +43 -35
  108. data/src/core/lib/surface/client_call.h +5 -0
  109. data/src/core/lib/surface/event_string.cc +7 -1
  110. data/src/core/lib/surface/init_internally.h +13 -2
  111. data/src/core/lib/surface/server_call.cc +100 -85
  112. data/src/core/lib/surface/version.cc +2 -2
  113. data/src/core/lib/transport/call_filters.cc +10 -4
  114. data/src/core/lib/transport/call_filters.h +8 -0
  115. data/src/core/lib/transport/call_spine.cc +36 -71
  116. data/src/core/lib/transport/call_spine.h +131 -7
  117. data/src/core/lib/transport/call_state.h +132 -39
  118. data/src/core/lib/transport/interception_chain.cc +8 -0
  119. data/src/core/lib/transport/interception_chain.h +9 -0
  120. data/src/core/load_balancing/endpoint_list.cc +10 -0
  121. data/src/core/load_balancing/endpoint_list.h +13 -6
  122. data/src/core/load_balancing/lb_policy.h +0 -8
  123. data/src/core/load_balancing/pick_first/pick_first.cc +89 -56
  124. data/src/core/load_balancing/ring_hash/ring_hash.cc +158 -70
  125. data/src/core/load_balancing/ring_hash/ring_hash.h +4 -11
  126. data/src/core/load_balancing/round_robin/round_robin.cc +9 -14
  127. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +12 -15
  128. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +4 -4
  129. data/src/core/resolver/xds/xds_dependency_manager.cc +139 -135
  130. data/src/core/resolver/xds/xds_dependency_manager.h +24 -18
  131. data/src/core/resolver/xds/xds_resolver.cc +28 -47
  132. data/src/core/server/server.cc +290 -24
  133. data/src/core/server/server.h +199 -61
  134. data/src/core/server/xds_server_config_fetcher.cc +78 -142
  135. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  136. data/src/core/util/backoff.cc +15 -4
  137. data/src/core/util/http_client/httpcli.cc +66 -18
  138. data/src/core/util/http_client/httpcli.h +14 -4
  139. data/src/core/util/matchers.h +5 -10
  140. data/src/core/util/ref_counted.h +1 -0
  141. data/src/core/util/ref_counted_ptr.h +1 -1
  142. data/src/core/util/useful.h +9 -11
  143. data/src/core/xds/grpc/xds_endpoint_parser.cc +54 -23
  144. data/src/core/xds/grpc/xds_metadata.h +8 -0
  145. data/src/core/xds/xds_client/xds_api.cc +0 -223
  146. data/src/core/xds/xds_client/xds_api.h +1 -133
  147. data/src/core/xds/xds_client/xds_client.cc +599 -466
  148. data/src/core/xds/xds_client/xds_client.h +107 -26
  149. data/src/core/xds/xds_client/xds_resource_type_impl.h +10 -5
  150. data/src/ruby/ext/grpc/extconf.rb +1 -0
  151. data/src/ruby/lib/grpc/version.rb +1 -1
  152. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_bitstr.c → a_bitstr.cc} +3 -2
  153. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_d2i_fp.c → a_d2i_fp.cc} +1 -1
  154. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_dup.c → a_dup.cc} +1 -1
  155. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_i2d_fp.c → a_i2d_fp.cc} +1 -1
  156. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_int.c → a_int.cc} +2 -1
  157. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_mbstr.c → a_mbstr.cc} +9 -7
  158. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_object.c → a_object.cc} +1 -1
  159. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_strnid.c → a_strnid.cc} +7 -4
  160. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_type.c → a_type.cc} +4 -4
  161. data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_lib.c → asn1_lib.cc} +4 -4
  162. data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn_pack.c → asn_pack.cc} +2 -2
  163. data/third_party/boringssl-with-bazel/src/crypto/asn1/{posix_time.c → posix_time.cc} +2 -2
  164. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_dec.c → tasn_dec.cc} +4 -3
  165. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_enc.c → tasn_enc.cc} +9 -6
  166. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_fre.c → tasn_fre.cc} +14 -20
  167. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_new.c → tasn_new.cc} +7 -6
  168. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_utl.c → tasn_utl.cc} +13 -10
  169. data/third_party/boringssl-with-bazel/src/crypto/base64/{base64.c → base64.cc} +9 -12
  170. data/third_party/boringssl-with-bazel/src/crypto/bcm_support.h +7 -1
  171. data/third_party/boringssl-with-bazel/src/crypto/bio/{bio.c → bio.cc} +32 -58
  172. data/third_party/boringssl-with-bazel/src/crypto/bio/{bio_mem.c → bio_mem.cc} +8 -7
  173. data/third_party/boringssl-with-bazel/src/crypto/bio/{connect.c → connect.cc} +24 -16
  174. data/third_party/boringssl-with-bazel/src/crypto/bio/{file.c → file.cc} +3 -3
  175. data/third_party/boringssl-with-bazel/src/crypto/bio/{pair.c → pair.cc} +22 -20
  176. data/third_party/boringssl-with-bazel/src/crypto/bio/{printf.c → printf.cc} +2 -2
  177. data/third_party/boringssl-with-bazel/src/crypto/bio/{socket_helper.c → socket_helper.cc} +1 -1
  178. data/third_party/boringssl-with-bazel/src/crypto/blake2/{blake2.c → blake2.cc} +2 -2
  179. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/{bn_asn1.c → bn_asn1.cc} +1 -1
  180. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/{convert.c → convert.cc} +21 -21
  181. data/third_party/boringssl-with-bazel/src/crypto/buf/{buf.c → buf.cc} +6 -3
  182. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{asn1_compat.c → asn1_compat.cc} +1 -1
  183. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{ber.c → ber.cc} +1 -1
  184. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{cbb.c → cbb.cc} +33 -49
  185. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{cbs.c → cbs.cc} +20 -27
  186. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +1 -1
  187. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{unicode.c → unicode.cc} +1 -1
  188. data/third_party/boringssl-with-bazel/src/crypto/chacha/{chacha.c → chacha.cc} +1 -1
  189. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +1 -1
  190. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_aesctrhmac.c → e_aesctrhmac.cc} +1 -1
  191. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_aesgcmsiv.c → e_aesgcmsiv.cc} +23 -26
  192. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_chacha20poly1305.c → e_chacha20poly1305.cc} +1 -8
  193. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_des.c → e_des.cc} +61 -49
  194. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_null.c → e_null.cc} +12 -9
  195. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_rc2.c → e_rc2.cc} +23 -19
  196. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_rc4.c → e_rc4.cc} +10 -8
  197. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_tls.c → e_tls.cc} +2 -1
  198. data/third_party/boringssl-with-bazel/src/crypto/conf/{conf.c → conf.cc} +17 -14
  199. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +1 -1
  200. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_apple.c → cpu_aarch64_apple.cc} +2 -2
  201. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_fuchsia.c → cpu_aarch64_fuchsia.cc} +2 -2
  202. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_linux.c → cpu_aarch64_linux.cc} +2 -2
  203. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_openbsd.c → cpu_aarch64_openbsd.cc} +4 -4
  204. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_sysreg.c → cpu_aarch64_sysreg.cc} +3 -2
  205. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_win.c → cpu_aarch64_win.cc} +2 -2
  206. data/third_party/boringssl-with-bazel/src/crypto/{cpu_arm_freebsd.c → cpu_arm_freebsd.cc} +3 -3
  207. data/third_party/boringssl-with-bazel/src/crypto/{cpu_arm_linux.c → cpu_arm_linux.cc} +5 -5
  208. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.h +1 -1
  209. data/third_party/boringssl-with-bazel/src/crypto/{cpu_intel.c → cpu_intel.cc} +47 -32
  210. data/third_party/boringssl-with-bazel/src/crypto/{crypto.c → crypto.cc} +6 -11
  211. data/third_party/boringssl-with-bazel/src/crypto/curve25519/{curve25519.c → curve25519.cc} +28 -31
  212. data/third_party/boringssl-with-bazel/src/crypto/curve25519/{curve25519_64_adx.c → curve25519_64_adx.cc} +1 -1
  213. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +1 -1
  214. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  215. data/third_party/boringssl-with-bazel/src/crypto/curve25519/{spake25519.c → spake25519.cc} +20 -16
  216. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/{dh_asn1.c → dh_asn1.cc} +2 -2
  217. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/{digest_extra.c → digest_extra.cc} +113 -31
  218. data/third_party/boringssl-with-bazel/src/crypto/dsa/{dsa.c → dsa.cc} +153 -154
  219. data/third_party/boringssl-with-bazel/src/crypto/dsa/{dsa_asn1.c → dsa_asn1.cc} +2 -2
  220. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +1 -3
  221. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/{ec_asn1.c → ec_asn1.cc} +35 -0
  222. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/{ec_derive.c → ec_derive.cc} +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/{hash_to_curve.c → hash_to_curve.cc} +66 -64
  224. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/{ecdsa_asn1.c → ecdsa_asn1.cc} +15 -25
  226. data/third_party/boringssl-with-bazel/src/crypto/engine/{engine.c → engine.cc} +12 -8
  227. data/third_party/boringssl-with-bazel/src/crypto/err/{err.c → err.cc} +24 -27
  228. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +1 -1
  229. data/third_party/boringssl-with-bazel/src/crypto/evp/{evp.c → evp.cc} +8 -9
  230. data/third_party/boringssl-with-bazel/src/crypto/evp/{evp_ctx.c → evp_ctx.cc} +7 -8
  231. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_dh.c → p_dh.cc} +23 -14
  232. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_dh_asn1.c → p_dh_asn1.cc} +38 -21
  233. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_dsa_asn1.c → p_dsa_asn1.cc} +19 -24
  234. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ec.c → p_ec.cc} +20 -23
  235. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ec_asn1.c → p_ec_asn1.cc} +20 -20
  236. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ed25519.c → p_ed25519.cc} +22 -19
  237. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ed25519_asn1.c → p_ed25519_asn1.cc} +14 -13
  238. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_hkdf.c → p_hkdf.cc} +18 -14
  239. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_rsa.c → p_rsa.cc} +38 -37
  240. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_rsa_asn1.c → p_rsa_asn1.cc} +16 -18
  241. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_x25519.c → p_x25519.cc} +22 -19
  242. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_x25519_asn1.c → p_x25519_asn1.cc} +18 -17
  243. data/third_party/boringssl-with-bazel/src/crypto/evp/{pbkdf.c → pbkdf.cc} +2 -2
  244. data/third_party/boringssl-with-bazel/src/crypto/evp/{print.c → print.cc} +4 -5
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/{scrypt.c → scrypt.cc} +7 -5
  246. data/third_party/boringssl-with-bazel/src/crypto/{ex_data.c → ex_data.cc} +3 -4
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{aes_nohw.c.inc → aes_nohw.cc.inc} +1 -1
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +1 -5
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{key_wrap.c.inc → key_wrap.cc.inc} +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{bcm.c → bcm.cc} +96 -101
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm_interface.h +165 -12
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{add.c.inc → add.cc.inc} +1 -0
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/{x86_64-gcc.c.inc → x86_64-gcc.cc.inc} +4 -4
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{bn.c.inc → bn.cc.inc} +12 -24
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{ctx.c.inc → ctx.cc.inc} +5 -7
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{div.c.inc → div.cc.inc} +29 -38
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{div_extra.c.inc → div_extra.cc.inc} +1 -1
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{exponentiation.c.inc → exponentiation.cc.inc} +22 -22
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{gcd.c.inc → gcd.cc.inc} +3 -6
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{gcd_extra.c.inc → gcd_extra.cc.inc} +33 -25
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{montgomery.c.inc → montgomery.cc.inc} +10 -17
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{mul.c.inc → mul.cc.inc} +11 -15
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{prime.c.inc → prime.cc.inc} +31 -34
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{shift.c.inc → shift.cc.inc} +3 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{aead.c.inc → aead.cc.inc} +18 -10
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{cipher.c.inc → cipher.cc.inc} +6 -9
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{e_aes.c.inc → e_aes.cc.inc} +46 -54
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cmac/{cmac.c.inc → cmac.cc.inc} +6 -6
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +14 -10
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/{dh.c.inc → dh.cc.inc} +15 -19
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +1 -3
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/{digest.c.inc → digest.cc.inc} +17 -13
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/{digests.c.inc → digests.cc.inc} +29 -113
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digestsign/{digestsign.c.inc → digestsign.cc.inc} +3 -3
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +1 -1
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec.c.inc → ec.cc.inc} +10 -15
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec_key.c.inc → ec_key.cc.inc} +12 -14
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{felem.c.inc → felem.cc.inc} +1 -1
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{oct.c.inc → oct.cc.inc} +5 -6
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p224-64.c.inc → p224-64.cc.inc} +1 -1
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz-table.h +1 -1
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-nistz.c.inc → p256-nistz.cc.inc} +15 -13
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256.c.inc → p256.cc.inc} +1 -1
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{scalar.c.inc → scalar.cc.inc} +1 -1
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{simple_mul.c.inc → simple_mul.cc.inc} +1 -1
  287. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{util.c.inc → util.cc.inc} +1 -1
  288. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{wnaf.c.inc → wnaf.cc.inc} +24 -15
  289. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/{ecdh.c.inc → ecdh.cc.inc} +14 -5
  290. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/{ecdsa.c.inc → ecdsa.cc.inc} +6 -7
  291. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +1 -1
  292. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{fips_shared_support.c → fips_shared_support.cc} +2 -3
  293. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/{hkdf.c.inc → hkdf.cc.inc} +1 -1
  294. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/{hmac.c.inc → hmac.cc.inc} +3 -2
  295. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{gcm.c.inc → gcm.cc.inc} +69 -21
  296. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{gcm_nohw.c.inc → gcm_nohw.cc.inc} +1 -1
  297. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +53 -33
  298. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{polyval.c.inc → polyval.cc.inc} +2 -3
  299. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/{ctrdrbg.c.inc → ctrdrbg.cc.inc} +5 -4
  300. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/{rand.c.inc → rand.cc.inc} +20 -18
  302. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{blinding.c.inc → blinding.cc.inc} +5 -4
  303. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{padding.c.inc → padding.cc.inc} +21 -21
  304. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{rsa.c.inc → rsa.cc.inc} +77 -73
  305. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{rsa_impl.c.inc → rsa_impl.cc.inc} +50 -53
  306. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/{fips.c.inc → fips.cc.inc} +14 -6
  307. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/{self_check.c.inc → self_check.cc.inc} +56 -52
  308. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/{service_indicator.c.inc → service_indicator.cc.inc} +10 -11
  309. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +2 -4
  310. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha1.c.inc → sha1.cc.inc} +26 -33
  311. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha256.c.inc → sha256.cc.inc} +37 -55
  312. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha512.c.inc → sha512.cc.inc} +48 -76
  313. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +1 -1
  314. data/third_party/boringssl-with-bazel/src/crypto/hpke/{hpke.c → hpke.cc} +7 -4
  315. data/third_party/boringssl-with-bazel/src/crypto/hrss/{hrss.c → hrss.cc} +53 -110
  316. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +1 -1
  317. data/third_party/boringssl-with-bazel/src/crypto/internal.h +191 -248
  318. data/third_party/boringssl-with-bazel/src/crypto/keccak/internal.h +1 -1
  319. data/third_party/boringssl-with-bazel/src/crypto/keccak/{keccak.c → keccak.cc} +1 -1
  320. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +1 -1
  321. data/third_party/boringssl-with-bazel/src/crypto/kyber/{kyber.c → kyber.cc} +1 -1
  322. data/third_party/boringssl-with-bazel/src/crypto/lhash/{lhash.c → lhash.cc} +8 -7
  323. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/md4/md4.c.inc → md4/md4.cc} +8 -12
  324. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/md5 → md5}/internal.h +1 -1
  325. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/md5/md5.c.inc → md5/md5.cc} +4 -3
  326. data/third_party/boringssl-with-bazel/src/crypto/{mem.c → mem.cc} +34 -22
  327. data/third_party/boringssl-with-bazel/src/crypto/mldsa/internal.h +4 -1
  328. data/third_party/boringssl-with-bazel/src/crypto/mldsa/{mldsa.c → mldsa.cc} +646 -543
  329. data/third_party/boringssl-with-bazel/src/crypto/mlkem/internal.h +1 -1
  330. data/third_party/boringssl-with-bazel/src/crypto/mlkem/mlkem.cc +8 -8
  331. data/third_party/boringssl-with-bazel/src/crypto/obj/{obj.c → obj.cc} +27 -30
  332. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_info.c → pem_info.cc} +2 -2
  333. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_lib.c → pem_lib.cc} +3 -4
  334. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_oth.c → pem_oth.cc} +1 -1
  335. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +1 -1
  336. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/{pkcs7.c → pkcs7.cc} +5 -5
  337. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/{pkcs7_x509.c → pkcs7_x509.cc} +26 -25
  338. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +2 -2
  339. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/{p5_pbev2.c → p5_pbev2.cc} +2 -2
  340. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/{pkcs8.c → pkcs8.cc} +159 -158
  341. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/{pkcs8_x509.c → pkcs8_x509.cc} +90 -97
  342. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +1 -1
  343. data/third_party/boringssl-with-bazel/src/crypto/poly1305/{poly1305.c → poly1305.cc} +3 -3
  344. data/third_party/boringssl-with-bazel/src/crypto/poly1305/{poly1305_arm.c → poly1305_arm.cc} +4 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/poly1305/{poly1305_vec.c → poly1305_vec.cc} +14 -11
  346. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pool/{pool.c → pool.cc} +12 -11
  348. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{deterministic.c → deterministic.cc} +2 -2
  349. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{fork_detect.c → fork_detect.cc} +11 -12
  350. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{forkunsafe.c → forkunsafe.cc} +2 -2
  351. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{getentropy.c → getentropy.cc} +1 -1
  352. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getrandom_fillin.h +1 -1
  353. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{ios.c → ios.cc} +1 -1
  354. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{passive.c → passive.cc} +22 -18
  355. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{rand_extra.c → rand_extra.cc} +1 -1
  356. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/sysrand_internal.h +1 -1
  357. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{trusty.c → trusty.cc} +1 -1
  358. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{urandom.c → urandom.cc} +7 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{windows.c → windows.cc} +1 -1
  360. data/third_party/boringssl-with-bazel/src/crypto/{refcount.c → refcount.cc} +1 -1
  361. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/{rsa_asn1.c → rsa_asn1.cc} +2 -2
  362. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/{rsa_crypt.c → rsa_crypt.cc} +81 -78
  363. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_extra.cc +17 -0
  364. data/third_party/boringssl-with-bazel/src/crypto/sha/sha1.cc +52 -0
  365. data/third_party/boringssl-with-bazel/src/crypto/sha/sha256.cc +87 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/sha/sha512.cc +104 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/siphash/{siphash.c → siphash.cc} +1 -1
  368. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/address.h +123 -0
  369. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/fors.cc +169 -0
  370. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/fors.h +58 -0
  371. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/internal.h +63 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/merkle.cc +161 -0
  373. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/merkle.h +70 -0
  374. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/params.h +83 -0
  375. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/slhdsa.cc +307 -0
  376. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/thash.cc +173 -0
  377. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/thash.h +85 -0
  378. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/wots.cc +171 -0
  379. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/wots.h +50 -0
  380. data/third_party/boringssl-with-bazel/src/crypto/stack/{stack.c → stack.cc} +10 -6
  381. data/third_party/boringssl-with-bazel/src/crypto/{thread_none.c → thread_none.cc} +1 -1
  382. data/third_party/boringssl-with-bazel/src/crypto/{thread_pthread.c → thread_pthread.cc} +9 -8
  383. data/third_party/boringssl-with-bazel/src/crypto/{thread_win.c → thread_win.cc} +21 -17
  384. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +1 -1
  385. data/third_party/boringssl-with-bazel/src/crypto/trust_token/{pmbtoken.c → pmbtoken.cc} +146 -158
  386. data/third_party/boringssl-with-bazel/src/crypto/trust_token/{trust_token.c → trust_token.cc} +19 -21
  387. data/third_party/boringssl-with-bazel/src/crypto/trust_token/{voprf.c → voprf.cc} +165 -169
  388. data/third_party/boringssl-with-bazel/src/crypto/x509/{a_digest.c → a_digest.cc} +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/x509/{a_sign.c → a_sign.cc} +37 -34
  390. data/third_party/boringssl-with-bazel/src/crypto/x509/{a_verify.c → a_verify.cc} +1 -1
  391. data/third_party/boringssl-with-bazel/src/crypto/x509/{algorithm.c → algorithm.cc} +1 -1
  392. data/third_party/boringssl-with-bazel/src/crypto/x509/{asn1_gen.c → asn1_gen.cc} +5 -6
  393. data/third_party/boringssl-with-bazel/src/crypto/x509/{by_dir.c → by_dir.cc} +7 -6
  394. data/third_party/boringssl-with-bazel/src/crypto/x509/{policy.c → policy.cc} +188 -178
  395. data/third_party/boringssl-with-bazel/src/crypto/x509/{rsa_pss.c → rsa_pss.cc} +48 -44
  396. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_akey.c → v3_akey.cc} +4 -2
  397. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_alt.c → v3_alt.cc} +5 -5
  398. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_bcons.c → v3_bcons.cc} +3 -1
  399. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_bitst.c → v3_bitst.cc} +6 -3
  400. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_conf.c → v3_conf.cc} +5 -5
  401. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_cpols.c → v3_cpols.cc} +47 -41
  402. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_crld.c → v3_crld.cc} +3 -2
  403. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_enum.c → v3_enum.cc} +5 -2
  404. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_extku.c → v3_extku.cc} +3 -1
  405. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_genn.c → v3_genn.cc} +7 -7
  406. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_ia5.c → v3_ia5.cc} +3 -2
  407. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_info.c → v3_info.cc} +4 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_int.c → v3_int.cc} +3 -1
  409. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_lib.c → v3_lib.cc} +9 -6
  410. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_ncons.c → v3_ncons.cc} +3 -3
  411. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_ocsp.c → v3_ocsp.cc} +4 -1
  412. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_pcons.c → v3_pcons.cc} +3 -3
  413. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_pmaps.c → v3_pmaps.cc} +3 -3
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_prn.c → v3_prn.cc} +2 -1
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_purp.c → v3_purp.cc} +16 -8
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_skey.c → v3_skey.cc} +6 -3
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_utl.c → v3_utl.cc} +15 -10
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_att.c → x509_att.cc} +3 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_lu.c → x509_lu.cc} +6 -5
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_v3.c → x509_v3.cc} +2 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_vfy.c → x509_vfy.cc} +216 -212
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_vpm.c → x509_vpm.cc} +55 -13
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509spki.c → x509spki.cc} +3 -3
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_all.c → x_all.cc} +10 -6
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_crl.c → x_crl.cc} +6 -6
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_name.c → x_name.cc} +39 -32
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_pubkey.c → x_pubkey.cc} +4 -2
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_x509.c → x_x509.cc} +48 -44
  429. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_x509a.c → x_x509a.cc} +4 -2
  430. data/third_party/boringssl-with-bazel/src/gen/crypto/{err_data.c → err_data.cc} +359 -358
  431. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -1
  432. data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h +1 -1
  434. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +237 -275
  435. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +12 -5
  436. data/third_party/boringssl-with-bazel/src/include/openssl/bcm_public.h +82 -0
  437. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -1
  438. data/third_party/boringssl-with-bazel/src/include/openssl/buffer.h +1 -1
  439. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -1
  440. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  441. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +1 -1
  442. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +1 -1
  443. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +13 -2
  444. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +1 -1
  445. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +1 -1
  446. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -0
  447. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -1
  448. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  449. data/third_party/boringssl-with-bazel/src/include/openssl/dtls1.h +1 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +1 -1
  451. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +17 -1
  452. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +1 -1
  453. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -1
  454. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/kyber.h +1 -1
  455. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +1 -1
  456. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  457. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +1 -1
  458. data/third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h +1 -1
  459. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/include/openssl/mldsa.h +8 -8
  461. data/third_party/boringssl-with-bazel/src/include/openssl/mlkem.h +1 -1
  462. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +1 -1
  463. data/third_party/boringssl-with-bazel/src/include/openssl/objects.h +1 -1
  464. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -1
  465. data/third_party/boringssl-with-bazel/src/include/openssl/opensslv.h +1 -1
  466. data/third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h +1 -1
  467. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h +1 -1
  468. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +1 -1
  469. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +2 -2
  470. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +1 -1
  471. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +1 -1
  472. data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +1 -1
  473. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +1 -1
  474. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +10 -5
  475. data/third_party/boringssl-with-bazel/src/include/openssl/safestack.h +1 -1
  476. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +2 -40
  477. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +1 -1
  478. data/third_party/boringssl-with-bazel/src/include/openssl/slhdsa.h +133 -0
  479. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +6 -1
  480. data/third_party/boringssl-with-bazel/src/include/openssl/srtp.h +1 -1
  481. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +160 -116
  482. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -0
  483. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +1 -1
  484. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +2 -2
  485. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +1 -1
  486. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -1
  487. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -1
  488. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -1
  489. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3_errors.h +2 -2
  490. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -6
  491. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +667 -322
  492. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +116 -119
  493. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +163 -21
  494. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +4 -12
  495. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +94 -49
  496. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +296 -198
  497. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +23 -14
  498. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +363 -343
  499. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +48 -58
  500. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +44 -36
  501. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +145 -159
  502. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +65 -58
  503. data/third_party/boringssl-with-bazel/src/ssl/internal.h +910 -356
  504. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +29 -41
  505. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +13 -11
  506. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +2 -2
  507. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +90 -183
  508. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +38 -64
  509. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -1
  510. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +103 -44
  511. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +210 -220
  512. data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +70 -12
  513. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +20 -17
  514. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +146 -169
  515. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +15 -16
  516. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +79 -95
  517. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -9
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +91 -16
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +30 -16
  520. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +51 -56
  521. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +22 -25
  522. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +43 -27
  523. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +63 -59
  524. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +204 -121
  525. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +86 -59
  526. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +51 -62
  527. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +37 -25
  528. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +6 -0
  529. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +6 -0
  530. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +4 -1
  531. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1 -1
  532. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +3 -0
  533. metadata +339 -339
  534. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb.h +0 -426
  535. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.c +0 -87
  536. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.h +0 -32
  537. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb.h +0 -408
  538. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.c +0 -124
  539. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.h +0 -38
  540. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.c +0 -108
  541. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.h +0 -33
  542. data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.c +0 -67
  543. data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.h +0 -48
  544. data/src/core/util/atm.cc +0 -34
  545. data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +0 -1539
  546. data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +0 -58
  547. data/third_party/boringssl-with-bazel/src/crypto/spx/address.c +0 -101
  548. data/third_party/boringssl-with-bazel/src/crypto/spx/address.h +0 -50
  549. data/third_party/boringssl-with-bazel/src/crypto/spx/fors.c +0 -133
  550. data/third_party/boringssl-with-bazel/src/crypto/spx/fors.h +0 -54
  551. data/third_party/boringssl-with-bazel/src/crypto/spx/merkle.c +0 -150
  552. data/third_party/boringssl-with-bazel/src/crypto/spx/merkle.h +0 -61
  553. data/third_party/boringssl-with-bazel/src/crypto/spx/params.h +0 -71
  554. data/third_party/boringssl-with-bazel/src/crypto/spx/spx.c +0 -140
  555. data/third_party/boringssl-with-bazel/src/crypto/spx/spx_util.c +0 -53
  556. data/third_party/boringssl-with-bazel/src/crypto/spx/spx_util.h +0 -44
  557. data/third_party/boringssl-with-bazel/src/crypto/spx/thash.c +0 -136
  558. data/third_party/boringssl-with-bazel/src/crypto/spx/thash.h +0 -70
  559. data/third_party/boringssl-with-bazel/src/crypto/spx/wots.c +0 -135
  560. data/third_party/boringssl-with-bazel/src/crypto/spx/wots.h +0 -45
  561. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +0 -129
  562. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/spx.h +0 -90
  563. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_bool.c → a_bool.cc} +0 -0
  564. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_gentm.c → a_gentm.cc} +0 -0
  565. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_octet.c → a_octet.cc} +0 -0
  566. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_strex.c → a_strex.cc} +0 -0
  567. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_time.c → a_time.cc} +0 -0
  568. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_utctm.c → a_utctm.cc} +0 -0
  569. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_par.c → asn1_par.cc} +0 -0
  570. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{f_int.c → f_int.cc} +0 -0
  571. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{f_string.c → f_string.cc} +0 -0
  572. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_typ.c → tasn_typ.cc} +0 -0
  573. /data/third_party/boringssl-with-bazel/src/crypto/bio/{errno.c → errno.cc} +0 -0
  574. /data/third_party/boringssl-with-bazel/src/crypto/bio/{fd.c → fd.cc} +0 -0
  575. /data/third_party/boringssl-with-bazel/src/crypto/bio/{hexdump.c → hexdump.cc} +0 -0
  576. /data/third_party/boringssl-with-bazel/src/crypto/bio/{socket.c → socket.cc} +0 -0
  577. /data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{cipher_extra.c → cipher_extra.cc} +0 -0
  578. /data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{derive_key.c → derive_key.cc} +0 -0
  579. /data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{tls_cbc.c → tls_cbc.cc} +0 -0
  580. /data/third_party/boringssl-with-bazel/src/crypto/des/{des.c → des.cc} +0 -0
  581. /data/third_party/boringssl-with-bazel/src/crypto/dh_extra/{params.c → params.cc} +0 -0
  582. /data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/{ecdh_extra.c → ecdh_extra.cc} +0 -0
  583. /data/third_party/boringssl-with-bazel/src/crypto/evp/{evp_asn1.c → evp_asn1.cc} +0 -0
  584. /data/third_party/boringssl-with-bazel/src/crypto/evp/{sign.c → sign.cc} +0 -0
  585. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{aes.c.inc → aes.cc.inc} +0 -0
  586. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{mode_wrappers.c.inc → mode_wrappers.cc.inc} +0 -0
  587. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{bytes.c.inc → bytes.cc.inc} +0 -0
  588. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{cmp.c.inc → cmp.cc.inc} +0 -0
  589. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{generic.c.inc → generic.cc.inc} +0 -0
  590. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{jacobi.c.inc → jacobi.cc.inc} +0 -0
  591. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{montgomery_inv.c.inc → montgomery_inv.cc.inc} +0 -0
  592. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{random.c.inc → random.cc.inc} +0 -0
  593. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{rsaz_exp.c.inc → rsaz_exp.cc.inc} +0 -0
  594. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{sqrt.c.inc → sqrt.cc.inc} +0 -0
  595. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{e_aesccm.c.inc → e_aesccm.cc.inc} +0 -0
  596. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/{check.c.inc → check.cc.inc} +0 -0
  597. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec_montgomery.c.inc → ec_montgomery.cc.inc} +0 -0
  598. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{simple.c.inc → simple.cc.inc} +0 -0
  599. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{cbc.c.inc → cbc.cc.inc} +0 -0
  600. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{cfb.c.inc → cfb.cc.inc} +0 -0
  601. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{ctr.c.inc → ctr.cc.inc} +0 -0
  602. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{ofb.c.inc → ofb.cc.inc} +0 -0
  603. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/{kdf.c.inc → kdf.cc.inc} +0 -0
  604. /data/third_party/boringssl-with-bazel/src/crypto/obj/{obj_xref.c → obj_xref.cc} +0 -0
  605. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_all.c → pem_all.cc} +0 -0
  606. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_pk8.c → pem_pk8.cc} +0 -0
  607. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_pkey.c → pem_pkey.cc} +0 -0
  608. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_x509.c → pem_x509.cc} +0 -0
  609. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_xaux.c → pem_xaux.cc} +0 -0
  610. /data/third_party/boringssl-with-bazel/src/crypto/rc4/{rc4.c → rc4.cc} +0 -0
  611. /data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/{rsa_print.c → rsa_print.cc} +0 -0
  612. /data/third_party/boringssl-with-bazel/src/crypto/{thread.c → thread.cc} +0 -0
  613. /data/third_party/boringssl-with-bazel/src/crypto/x509/{by_file.c → by_file.cc} +0 -0
  614. /data/third_party/boringssl-with-bazel/src/crypto/x509/{i2d_pr.c → i2d_pr.cc} +0 -0
  615. /data/third_party/boringssl-with-bazel/src/crypto/x509/{name_print.c → name_print.cc} +0 -0
  616. /data/third_party/boringssl-with-bazel/src/crypto/x509/{t_crl.c → t_crl.cc} +0 -0
  617. /data/third_party/boringssl-with-bazel/src/crypto/x509/{t_req.c → t_req.cc} +0 -0
  618. /data/third_party/boringssl-with-bazel/src/crypto/x509/{t_x509.c → t_x509.cc} +0 -0
  619. /data/third_party/boringssl-with-bazel/src/crypto/x509/{t_x509a.c → t_x509a.cc} +0 -0
  620. /data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_akeya.c → v3_akeya.cc} +0 -0
  621. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509.c → x509.cc} +0 -0
  622. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_cmp.c → x509_cmp.cc} +0 -0
  623. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_d2.c → x509_d2.cc} +0 -0
  624. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_def.c → x509_def.cc} +0 -0
  625. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_ext.c → x509_ext.cc} +0 -0
  626. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_obj.c → x509_obj.cc} +0 -0
  627. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_req.c → x509_req.cc} +0 -0
  628. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_set.c → x509_set.cc} +0 -0
  629. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_trs.c → x509_trs.cc} +0 -0
  630. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_txt.c → x509_txt.cc} +0 -0
  631. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509cset.c → x509cset.cc} +0 -0
  632. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509name.c → x509name.cc} +0 -0
  633. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509rset.c → x509rset.cc} +0 -0
  634. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_algor.c → x_algor.cc} +0 -0
  635. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_attrib.c → x_attrib.cc} +0 -0
  636. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_exten.c → x_exten.cc} +0 -0
  637. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_req.c → x_req.cc} +0 -0
  638. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_sig.c → x_sig.cc} +0 -0
  639. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_spki.c → x_spki.cc} +0 -0
  640. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_val.c → x_val.cc} +0 -0
@@ -82,6 +82,7 @@
82
82
  #include "src/core/lib/transport/transport.h"
83
83
  #include "src/core/server/server.h"
84
84
  #include "src/core/util/debug_location.h"
85
+ #include "src/core/util/match.h"
85
86
  #include "src/core/util/orphanable.h"
86
87
  #include "src/core/util/ref_counted_ptr.h"
87
88
  #include "src/core/util/status_helper.h"
@@ -107,24 +108,26 @@ const char kUnixUriPrefix[] = "unix:";
107
108
  const char kUnixAbstractUriPrefix[] = "unix-abstract:";
108
109
  const char kVSockUriPrefix[] = "vsock:";
109
110
 
110
- struct AcceptorDeleter {
111
- void operator()(grpc_tcp_server_acceptor* acceptor) const {
112
- gpr_free(acceptor);
113
- }
114
- };
111
+ namespace {
112
+ Timestamp GetConnectionDeadline(const ChannelArgs& args) {
113
+ return Timestamp::Now() +
114
+ std::max(
115
+ Duration::Milliseconds(1),
116
+ args.GetDurationFromIntMillis(GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS)
117
+ .value_or(Duration::Minutes(2)));
118
+ }
119
+ } // namespace
120
+
115
121
  using AcceptorPtr = std::unique_ptr<grpc_tcp_server_acceptor, AcceptorDeleter>;
116
122
 
117
123
  class Chttp2ServerListener : public Server::ListenerInterface {
118
124
  public:
119
125
  static grpc_error_handle Create(Server* server,
120
126
  const EventEngine::ResolvedAddress& addr,
121
- const ChannelArgs& args,
122
- Chttp2ServerArgsModifier args_modifier,
123
- int* port_num);
127
+ const ChannelArgs& args, int* port_num);
124
128
 
125
- static grpc_error_handle CreateWithAcceptor(
126
- Server* server, const char* name, const ChannelArgs& args,
127
- Chttp2ServerArgsModifier args_modifier);
129
+ static grpc_error_handle CreateWithAcceptor(Server* server, const char* name,
130
+ const ChannelArgs& args);
128
131
 
129
132
  static Chttp2ServerListener* CreateForPassiveListener(
130
133
  Server* server, const ChannelArgs& args,
@@ -132,14 +135,12 @@ class Chttp2ServerListener : public Server::ListenerInterface {
132
135
 
133
136
  // Do not instantiate directly. Use one of the factory methods above.
134
137
  Chttp2ServerListener(Server* server, const ChannelArgs& args,
135
- Chttp2ServerArgsModifier args_modifier,
136
- grpc_server_config_fetcher* config_fetcher,
138
+ ServerConfigFetcher* config_fetcher,
137
139
  std::shared_ptr<experimental::PassiveListenerImpl>
138
140
  passive_listener = nullptr);
139
141
  ~Chttp2ServerListener() override;
140
142
 
141
- void Start(Server* server,
142
- const std::vector<grpc_pollset*>* pollsets) override;
143
+ void Start() override;
143
144
 
144
145
  void AcceptConnectedEndpoint(std::unique_ptr<EventEngine::Endpoint> endpoint);
145
146
 
@@ -147,6 +148,15 @@ class Chttp2ServerListener : public Server::ListenerInterface {
147
148
  return channelz_listen_socket_.get();
148
149
  }
149
150
 
151
+ void SetServerListenerState(
152
+ RefCountedPtr<Server::ListenerState> /*listener_state*/) override {}
153
+
154
+ const grpc_resolved_address* resolved_address() const override {
155
+ // Should only be invoked with experiment server_listener
156
+ Crash("Illegal");
157
+ return nullptr;
158
+ }
159
+
150
160
  void SetOnDestroyDone(grpc_closure* on_destroy_done) override;
151
161
 
152
162
  void Orphan() override;
@@ -154,14 +164,13 @@ class Chttp2ServerListener : public Server::ListenerInterface {
154
164
  private:
155
165
  friend class experimental::PassiveListenerImpl;
156
166
 
157
- class ConfigFetcherWatcher
158
- : public grpc_server_config_fetcher::WatcherInterface {
167
+ class ConfigFetcherWatcher : public ServerConfigFetcher::WatcherInterface {
159
168
  public:
160
169
  explicit ConfigFetcherWatcher(RefCountedPtr<Chttp2ServerListener> listener)
161
170
  : listener_(std::move(listener)) {}
162
171
 
163
172
  void UpdateConnectionManager(
164
- RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
173
+ RefCountedPtr<ServerConfigFetcher::ConnectionManager>
165
174
  connection_manager) override;
166
175
 
167
176
  void StopServing() override;
@@ -267,12 +276,11 @@ class Chttp2ServerListener : public Server::ListenerInterface {
267
276
  Server* const server_ = nullptr;
268
277
  grpc_tcp_server* tcp_server_ = nullptr;
269
278
  grpc_resolved_address resolved_address_;
270
- Chttp2ServerArgsModifier const args_modifier_;
271
279
  ConfigFetcherWatcher* config_fetcher_watcher_ = nullptr;
272
280
  ChannelArgs args_;
273
281
  Mutex mu_;
274
- RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
275
- connection_manager_ ABSL_GUARDED_BY(mu_);
282
+ RefCountedPtr<ServerConfigFetcher::ConnectionManager> connection_manager_
283
+ ABSL_GUARDED_BY(mu_);
276
284
  // Signals whether grpc_tcp_server_start() has been called.
277
285
  bool started_ ABSL_GUARDED_BY(mu_) = false;
278
286
  // Signals whether grpc_tcp_server_start() has completed.
@@ -288,7 +296,7 @@ class Chttp2ServerListener : public Server::ListenerInterface {
288
296
  RefCountedPtr<channelz::ListenSocketNode> channelz_listen_socket_;
289
297
  MemoryQuotaRefPtr memory_quota_;
290
298
  ConnectionQuotaRefPtr connection_quota_;
291
- grpc_server_config_fetcher* config_fetcher_ = nullptr;
299
+ ServerConfigFetcher* config_fetcher_ = nullptr;
292
300
  // TODO(yashykt): consider using absl::variant<> to minimize memory usage for
293
301
  // disjoint cases where different fields are used.
294
302
  std::shared_ptr<experimental::PassiveListenerImpl> passive_listener_;
@@ -299,9 +307,8 @@ class Chttp2ServerListener : public Server::ListenerInterface {
299
307
  //
300
308
 
301
309
  void Chttp2ServerListener::ConfigFetcherWatcher::UpdateConnectionManager(
302
- RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
303
- connection_manager) {
304
- RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
310
+ RefCountedPtr<ServerConfigFetcher::ConnectionManager> connection_manager) {
311
+ RefCountedPtr<ServerConfigFetcher::ConnectionManager>
305
312
  connection_manager_to_destroy;
306
313
  class GracefulShutdownExistingConnections {
307
314
  public:
@@ -369,14 +376,6 @@ void Chttp2ServerListener::ConfigFetcherWatcher::StopServing() {
369
376
  // Chttp2ServerListener::ActiveConnection::HandshakingState
370
377
  //
371
378
 
372
- Timestamp GetConnectionDeadline(const ChannelArgs& args) {
373
- return Timestamp::Now() +
374
- std::max(
375
- Duration::Milliseconds(1),
376
- args.GetDurationFromIntMillis(GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS)
377
- .value_or(Duration::Seconds(120)));
378
- }
379
-
380
379
  Chttp2ServerListener::ActiveConnection::HandshakingState::HandshakingState(
381
380
  RefCountedPtr<ActiveConnection> connection_ref,
382
381
  grpc_pollset* accepting_pollset, AcceptorPtr acceptor,
@@ -708,11 +707,10 @@ void Chttp2ServerListener::ActiveConnection::OnDrainGraceTimeExpiry() {
708
707
 
709
708
  grpc_error_handle Chttp2ServerListener::Create(
710
709
  Server* server, const EventEngine::ResolvedAddress& addr,
711
- const ChannelArgs& args, Chttp2ServerArgsModifier args_modifier,
712
- int* port_num) {
710
+ const ChannelArgs& args, int* port_num) {
713
711
  // Create Chttp2ServerListener.
714
712
  OrphanablePtr<Chttp2ServerListener> listener =
715
- MakeOrphanable<Chttp2ServerListener>(server, args, args_modifier,
713
+ MakeOrphanable<Chttp2ServerListener>(server, args,
716
714
  server->config_fetcher());
717
715
  // The tcp_server will be unreffed when the listener is orphaned, which could
718
716
  // be at the end of this function if the listener was not added to the
@@ -752,10 +750,9 @@ grpc_error_handle Chttp2ServerListener::Create(
752
750
  }
753
751
 
754
752
  grpc_error_handle Chttp2ServerListener::CreateWithAcceptor(
755
- Server* server, const char* name, const ChannelArgs& args,
756
- Chttp2ServerArgsModifier args_modifier) {
753
+ Server* server, const char* name, const ChannelArgs& args) {
757
754
  auto listener = MakeOrphanable<Chttp2ServerListener>(
758
- server, args, args_modifier, server->config_fetcher());
755
+ server, args, server->config_fetcher());
759
756
  grpc_error_handle error = grpc_tcp_server_create(
760
757
  &listener->tcp_server_shutdown_complete_, ChannelArgsEndpointConfig(args),
761
758
  OnAccept, listener.get(), &listener->tcp_server_);
@@ -772,9 +769,7 @@ Chttp2ServerListener* Chttp2ServerListener::CreateForPassiveListener(
772
769
  std::shared_ptr<experimental::PassiveListenerImpl> passive_listener) {
773
770
  // TODO(hork): figure out how to handle channelz in this case
774
771
  auto listener = MakeOrphanable<Chttp2ServerListener>(
775
- server, args, /*args_modifier=*/
776
- [](const ChannelArgs& args, grpc_error_handle*) { return args; }, nullptr,
777
- std::move(passive_listener));
772
+ server, args, nullptr, std::move(passive_listener));
778
773
  auto listener_ptr = listener.get();
779
774
  server->AddListener(std::move(listener));
780
775
  return listener_ptr;
@@ -782,11 +777,9 @@ Chttp2ServerListener* Chttp2ServerListener::CreateForPassiveListener(
782
777
 
783
778
  Chttp2ServerListener::Chttp2ServerListener(
784
779
  Server* server, const ChannelArgs& args,
785
- Chttp2ServerArgsModifier args_modifier,
786
- grpc_server_config_fetcher* config_fetcher,
780
+ ServerConfigFetcher* config_fetcher,
787
781
  std::shared_ptr<experimental::PassiveListenerImpl> passive_listener)
788
782
  : server_(server),
789
- args_modifier_(args_modifier),
790
783
  args_(args),
791
784
  memory_quota_(args.GetObject<ResourceQuota>()->memory_quota()),
792
785
  connection_quota_(MakeRefCounted<ConnectionQuota>()),
@@ -812,8 +805,7 @@ Chttp2ServerListener::~Chttp2ServerListener() {
812
805
  }
813
806
 
814
807
  // Server callback: start listening on our ports
815
- void Chttp2ServerListener::Start(
816
- Server* /*server*/, const std::vector<grpc_pollset*>* /* pollsets */) {
808
+ void Chttp2ServerListener::Start() {
817
809
  if (config_fetcher_ != nullptr) {
818
810
  auto watcher = std::make_unique<ConfigFetcherWatcher>(
819
811
  RefAsSubclass<Chttp2ServerListener>());
@@ -848,6 +840,27 @@ void Chttp2ServerListener::AcceptConnectedEndpoint(
848
840
  /*accepting_pollset=*/nullptr, /*acceptor=*/nullptr);
849
841
  }
850
842
 
843
+ namespace {
844
+
845
+ ChannelArgs ModifyArgsForConnection(const ChannelArgs& args,
846
+ grpc_error_handle* error) {
847
+ auto* server_credentials = args.GetObject<grpc_server_credentials>();
848
+ if (server_credentials == nullptr) {
849
+ *error = GRPC_ERROR_CREATE("Could not find server credentials");
850
+ return args;
851
+ }
852
+ auto security_connector = server_credentials->create_security_connector(args);
853
+ if (security_connector == nullptr) {
854
+ *error = GRPC_ERROR_CREATE(
855
+ absl::StrCat("Unable to create secure server with credentials of type ",
856
+ server_credentials->type().name()));
857
+ return args;
858
+ }
859
+ return args.SetObject(security_connector);
860
+ }
861
+
862
+ } // namespace
863
+
851
864
  void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
852
865
  grpc_pollset* accepting_pollset,
853
866
  grpc_tcp_server_acceptor* server_acceptor) {
@@ -855,8 +868,7 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
855
868
  ChannelArgs args = self->args_;
856
869
  OrphanablePtr<grpc_endpoint> endpoint(tcp);
857
870
  AcceptorPtr acceptor(server_acceptor);
858
- RefCountedPtr<grpc_server_config_fetcher::ConnectionManager>
859
- connection_manager;
871
+ RefCountedPtr<ServerConfigFetcher::ConnectionManager> connection_manager;
860
872
  {
861
873
  MutexLock lock(&self->mu_);
862
874
  connection_manager = self->connection_manager_;
@@ -875,7 +887,7 @@ void Chttp2ServerListener::OnAccept(void* arg, grpc_endpoint* tcp,
875
887
  return;
876
888
  }
877
889
  grpc_error_handle error;
878
- args = self->args_modifier_(*args_result, &error);
890
+ args = ModifyArgsForConnection(*args_result, &error);
879
891
  if (!error.ok()) {
880
892
  return;
881
893
  }
@@ -953,19 +965,498 @@ void Chttp2ServerListener::Orphan() {
953
965
  }
954
966
 
955
967
  //
956
- // Chttp2ServerAddPort()
968
+ // NewChttp2ServerListener::ActiveConnection::HandshakingState
969
+ //
970
+
971
+ NewChttp2ServerListener::ActiveConnection::HandshakingState::HandshakingState(
972
+ RefCountedPtr<ActiveConnection> connection_ref, grpc_tcp_server* tcp_server,
973
+ grpc_pollset* accepting_pollset, AcceptorPtr acceptor,
974
+ const ChannelArgs& args, OrphanablePtr<grpc_endpoint> endpoint)
975
+ : connection_(std::move(connection_ref)),
976
+ tcp_server_(tcp_server),
977
+ accepting_pollset_(accepting_pollset),
978
+ acceptor_(std::move(acceptor)),
979
+ interested_parties_(grpc_pollset_set_create()),
980
+ deadline_(GetConnectionDeadline(args)),
981
+ endpoint_(std::move(endpoint)),
982
+ handshake_mgr_(MakeRefCounted<HandshakeManager>()) {
983
+ if (accepting_pollset != nullptr) {
984
+ grpc_pollset_set_add_pollset(interested_parties_, accepting_pollset_);
985
+ }
986
+ }
987
+
988
+ NewChttp2ServerListener::ActiveConnection::HandshakingState::
989
+ ~HandshakingState() {
990
+ if (accepting_pollset_ != nullptr) {
991
+ grpc_pollset_set_del_pollset(interested_parties_, accepting_pollset_);
992
+ }
993
+ grpc_pollset_set_destroy(interested_parties_);
994
+ if (tcp_server_ != nullptr) {
995
+ grpc_tcp_server_unref(tcp_server_);
996
+ }
997
+ }
998
+
999
+ void NewChttp2ServerListener::ActiveConnection::HandshakingState::Orphan() {
1000
+ connection_->work_serializer_.Run(
1001
+ [this] {
1002
+ ShutdownLocked(absl::UnavailableError("Listener stopped serving."));
1003
+ Unref();
1004
+ },
1005
+ DEBUG_LOCATION);
1006
+ }
1007
+
1008
+ void NewChttp2ServerListener::ActiveConnection::HandshakingState::StartLocked(
1009
+ const ChannelArgs& channel_args) {
1010
+ if (handshake_mgr_ == nullptr) {
1011
+ // The connection is already shutting down.
1012
+ return;
1013
+ }
1014
+ CoreConfiguration::Get().handshaker_registry().AddHandshakers(
1015
+ HANDSHAKER_SERVER, channel_args, interested_parties_,
1016
+ handshake_mgr_.get());
1017
+ handshake_mgr_->DoHandshake(
1018
+ std::move(endpoint_), channel_args, deadline_, acceptor_.get(),
1019
+ [self = Ref()](absl::StatusOr<HandshakerArgs*> result) mutable {
1020
+ auto* self_ptr = self.get();
1021
+ self_ptr->connection_->work_serializer_.Run(
1022
+ [self = std::move(self), result = std::move(result)]() mutable {
1023
+ self->OnHandshakeDoneLocked(std::move(result));
1024
+ },
1025
+ DEBUG_LOCATION);
1026
+ });
1027
+ }
1028
+
1029
+ void NewChttp2ServerListener::ActiveConnection::HandshakingState::
1030
+ ShutdownLocked(absl::Status status) {
1031
+ if (handshake_mgr_ != nullptr) {
1032
+ handshake_mgr_->Shutdown(std::move(status));
1033
+ }
1034
+ }
1035
+
1036
+ void NewChttp2ServerListener::ActiveConnection::HandshakingState::
1037
+ OnTimeoutLocked() {
1038
+ if (!timer_handle_.has_value()) {
1039
+ return;
1040
+ }
1041
+ timer_handle_.reset();
1042
+ auto t = absl::get<RefCountedPtr<grpc_chttp2_transport>>(connection_->state_);
1043
+ t->DisconnectWithError(GRPC_ERROR_CREATE(
1044
+ "Did not receive HTTP/2 settings before handshake timeout"));
1045
+ }
1046
+
1047
+ void NewChttp2ServerListener::ActiveConnection::HandshakingState::
1048
+ OnReceiveSettings(void* arg, grpc_error_handle /* error */) {
1049
+ HandshakingState* self = static_cast<HandshakingState*>(arg);
1050
+ self->connection_->work_serializer_.Run(
1051
+ [self] {
1052
+ if (self->timer_handle_.has_value()) {
1053
+ self->connection_->listener_state_->event_engine()->Cancel(
1054
+ *self->timer_handle_);
1055
+ self->timer_handle_.reset();
1056
+ }
1057
+ self->Unref();
1058
+ },
1059
+ DEBUG_LOCATION);
1060
+ }
1061
+
1062
+ void NewChttp2ServerListener::ActiveConnection::HandshakingState::
1063
+ OnHandshakeDoneLocked(absl::StatusOr<HandshakerArgs*> result) {
1064
+ OrphanablePtr<HandshakingState> handshaking_state_ref;
1065
+ RefCountedPtr<HandshakeManager> handshake_mgr;
1066
+ // If the handshaking succeeded but there is no endpoint, then the
1067
+ // handshaker may have handed off the connection to some external
1068
+ // code, so we can just clean up here without creating a transport.
1069
+ if (!connection_->shutdown_ && result.ok() &&
1070
+ (*result)->endpoint != nullptr) {
1071
+ RefCountedPtr<Transport> transport =
1072
+ grpc_create_chttp2_transport((*result)->args,
1073
+ std::move((*result)->endpoint), false)
1074
+ ->Ref();
1075
+ grpc_error_handle channel_init_err =
1076
+ connection_->listener_state_->server()->SetupTransport(
1077
+ transport.get(), accepting_pollset_, (*result)->args,
1078
+ grpc_chttp2_transport_get_socket_node(transport.get()));
1079
+ if (channel_init_err.ok()) {
1080
+ // Use notify_on_receive_settings callback to enforce the
1081
+ // handshake deadline.
1082
+ connection_->state_ =
1083
+ DownCast<grpc_chttp2_transport*>(transport.get())->Ref();
1084
+ Ref().release(); // Held by OnReceiveSettings().
1085
+ GRPC_CLOSURE_INIT(&on_receive_settings_, OnReceiveSettings, this,
1086
+ grpc_schedule_on_exec_ctx);
1087
+ grpc_closure* on_close = &connection_->on_close_;
1088
+ // Refs helds by OnClose()
1089
+ connection_->Ref().release();
1090
+ grpc_chttp2_transport_start_reading(
1091
+ transport.get(), (*result)->read_buffer.c_slice_buffer(),
1092
+ &on_receive_settings_, nullptr, on_close);
1093
+ timer_handle_ = connection_->listener_state_->event_engine()->RunAfter(
1094
+ deadline_ - Timestamp::Now(), [self = Ref()]() mutable {
1095
+ // HandshakingState deletion might require an active ExecCtx.
1096
+ ApplicationCallbackExecCtx callback_exec_ctx;
1097
+ ExecCtx exec_ctx;
1098
+ auto* self_ptr = self.get();
1099
+ self_ptr->connection_->work_serializer_.Run(
1100
+ [self = std::move(self)]() { self->OnTimeoutLocked(); },
1101
+ DEBUG_LOCATION);
1102
+ });
1103
+ } else {
1104
+ // Failed to create channel from transport. Clean up.
1105
+ LOG(ERROR) << "Failed to create channel: "
1106
+ << StatusToString(channel_init_err);
1107
+ transport->Orphan();
1108
+ }
1109
+ }
1110
+ // Since the handshake manager is done, the connection no longer needs to
1111
+ // shutdown the handshake when the listener needs to stop serving.
1112
+ handshake_mgr_.reset();
1113
+ connection_->listener_state_->OnHandshakeDone(connection_.get());
1114
+ // Clean up if we don't have a transport
1115
+ if (!absl::holds_alternative<RefCountedPtr<grpc_chttp2_transport>>(
1116
+ connection_->state_)) {
1117
+ connection_->listener_state_->connection_quota()->ReleaseConnections(1);
1118
+ connection_->listener_state_->RemoveLogicalConnection(connection_.get());
1119
+ }
1120
+ }
1121
+
1122
+ //
1123
+ // NewChttp2ServerListener::ActiveConnection
1124
+ //
1125
+
1126
+ NewChttp2ServerListener::ActiveConnection::ActiveConnection(
1127
+ RefCountedPtr<Server::ListenerState> listener_state,
1128
+ grpc_tcp_server* tcp_server, grpc_pollset* accepting_pollset,
1129
+ AcceptorPtr acceptor, const ChannelArgs& args, MemoryOwner memory_owner,
1130
+ OrphanablePtr<grpc_endpoint> endpoint)
1131
+ : listener_state_(std::move(listener_state)),
1132
+ work_serializer_(
1133
+ args.GetObjectRef<grpc_event_engine::experimental::EventEngine>()),
1134
+ state_(memory_owner.MakeOrphanable<HandshakingState>(
1135
+ RefAsSubclass<ActiveConnection>(), tcp_server, accepting_pollset,
1136
+ std::move(acceptor), args, std::move(endpoint))) {
1137
+ GRPC_CLOSURE_INIT(&on_close_, ActiveConnection::OnClose, this,
1138
+ grpc_schedule_on_exec_ctx);
1139
+ }
1140
+
1141
+ void NewChttp2ServerListener::ActiveConnection::Orphan() {
1142
+ work_serializer_.Run(
1143
+ [this]() {
1144
+ // If ActiveConnection is orphaned before handshake is established,
1145
+ // shutdown the handshaker. If the server is stopping to serve or
1146
+ // shutting down and a transport has already been established, GOAWAYs
1147
+ // should be sent separately.
1148
+ shutdown_ = true;
1149
+ if (absl::holds_alternative<OrphanablePtr<HandshakingState>>(state_)) {
1150
+ state_ = OrphanablePtr<HandshakingState>(nullptr);
1151
+ }
1152
+ Unref();
1153
+ },
1154
+ DEBUG_LOCATION);
1155
+ }
1156
+
1157
+ void NewChttp2ServerListener::ActiveConnection::SendGoAway() {
1158
+ work_serializer_.Run(
1159
+ [self = RefAsSubclass<ActiveConnection>()]() mutable {
1160
+ self->SendGoAwayImplLocked();
1161
+ },
1162
+ DEBUG_LOCATION);
1163
+ }
1164
+
1165
+ void NewChttp2ServerListener::ActiveConnection::DisconnectImmediately() {
1166
+ work_serializer_.Run(
1167
+ [self = RefAsSubclass<ActiveConnection>()]() mutable {
1168
+ self->DisconnectImmediatelyImplLocked();
1169
+ },
1170
+ DEBUG_LOCATION);
1171
+ }
1172
+
1173
+ void NewChttp2ServerListener::ActiveConnection::Start(const ChannelArgs& args) {
1174
+ work_serializer_.Run(
1175
+ [self = RefAsSubclass<ActiveConnection>(), args]() mutable {
1176
+ // If the Connection is already shutdown at this point, it implies the
1177
+ // owning NewChttp2ServerListener and all associated
1178
+ // ActiveConnections have been orphaned.
1179
+ if (self->shutdown_) return;
1180
+ absl::get<OrphanablePtr<HandshakingState>>(self->state_)
1181
+ ->StartLocked(args);
1182
+ },
1183
+ DEBUG_LOCATION);
1184
+ }
1185
+
1186
+ void NewChttp2ServerListener::ActiveConnection::OnClose(
1187
+ void* arg, grpc_error_handle /* error */) {
1188
+ ActiveConnection* self = static_cast<ActiveConnection*>(arg);
1189
+ self->listener_state_->RemoveLogicalConnection(self);
1190
+ self->listener_state_->connection_quota()->ReleaseConnections(1);
1191
+ self->Unref();
1192
+ }
1193
+
1194
+ void NewChttp2ServerListener::ActiveConnection::SendGoAwayImplLocked() {
1195
+ if (!shutdown_) {
1196
+ shutdown_ = true;
1197
+ Match(
1198
+ state_,
1199
+ [](const OrphanablePtr<HandshakingState>& handshaking_state) {
1200
+ // Shutdown the handshaker if it's still in progress.
1201
+ if (handshaking_state != nullptr) {
1202
+ handshaking_state->ShutdownLocked(
1203
+ absl::UnavailableError("Connection going away"));
1204
+ }
1205
+ },
1206
+ [](const RefCountedPtr<grpc_chttp2_transport>& transport) {
1207
+ // Send a GOAWAY if the transport exists
1208
+ if (transport != nullptr) {
1209
+ grpc_transport_op* op = grpc_make_transport_op(nullptr);
1210
+ op->goaway_error =
1211
+ GRPC_ERROR_CREATE("Server is stopping to serve requests.");
1212
+ transport->PerformOp(op);
1213
+ }
1214
+ });
1215
+ }
1216
+ }
1217
+
1218
+ void NewChttp2ServerListener::ActiveConnection::
1219
+ DisconnectImmediatelyImplLocked() {
1220
+ shutdown_ = true;
1221
+ Match(
1222
+ state_,
1223
+ [](const OrphanablePtr<HandshakingState>& handshaking_state) {
1224
+ // Shutdown the handshaker if it's still in progress.
1225
+ if (handshaking_state != nullptr) {
1226
+ handshaking_state->ShutdownLocked(
1227
+ absl::UnavailableError("Connection to be disconnected"));
1228
+ }
1229
+ },
1230
+ [](const RefCountedPtr<grpc_chttp2_transport>& transport) {
1231
+ // Disconnect immediately if the transport exists
1232
+ if (transport != nullptr) {
1233
+ grpc_transport_op* op = grpc_make_transport_op(nullptr);
1234
+ op->disconnect_with_error = GRPC_ERROR_CREATE(
1235
+ "Drain grace time expired. Closing connection immediately.");
1236
+ transport->PerformOp(op);
1237
+ }
1238
+ });
1239
+ }
1240
+
1241
+ //
1242
+ // NewChttp2ServerListener
957
1243
  //
958
1244
 
1245
+ grpc_error_handle NewChttp2ServerListener::Create(
1246
+ Server* server, const EventEngine::ResolvedAddress& addr,
1247
+ const ChannelArgs& args, int* port_num) {
1248
+ // Create NewChttp2ServerListener.
1249
+ OrphanablePtr<NewChttp2ServerListener> listener =
1250
+ MakeOrphanable<NewChttp2ServerListener>(args);
1251
+ // The tcp_server will be unreffed when the listener is orphaned, which
1252
+ // could be at the end of this function if the listener was not added to the
1253
+ // server's set of listeners.
1254
+ grpc_error_handle error = grpc_tcp_server_create(
1255
+ &listener->tcp_server_shutdown_complete_, ChannelArgsEndpointConfig(args),
1256
+ OnAccept, listener.get(), &listener->tcp_server_);
1257
+ if (!error.ok()) return error;
1258
+ // TODO(yijiem): remove this conversion when we remove all
1259
+ // grpc_resolved_address usages.
1260
+ grpc_resolved_address iomgr_addr =
1261
+ grpc_event_engine::experimental::CreateGRPCResolvedAddress(addr);
1262
+ if (server->config_fetcher() != nullptr) {
1263
+ // TODO(yashykt): Consider binding so as to be able to return the port
1264
+ // number.
1265
+ listener->resolved_address_ = iomgr_addr;
1266
+ {
1267
+ MutexLock lock(&listener->mu_);
1268
+ listener->add_port_on_start_ = true;
1269
+ }
1270
+ } else {
1271
+ error =
1272
+ grpc_tcp_server_add_port(listener->tcp_server_, &iomgr_addr, port_num);
1273
+ if (!error.ok()) return error;
1274
+ }
1275
+ // Create channelz node.
1276
+ if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
1277
+ .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
1278
+ auto string_address =
1279
+ grpc_event_engine::experimental::ResolvedAddressToString(addr);
1280
+ if (!string_address.ok()) {
1281
+ return GRPC_ERROR_CREATE(string_address.status().ToString());
1282
+ }
1283
+ listener->channelz_listen_socket_ =
1284
+ MakeRefCounted<channelz::ListenSocketNode>(
1285
+ *string_address, absl::StrCat("chttp2 listener ", *string_address));
1286
+ }
1287
+ // Register with the server only upon success
1288
+ server->AddListener(std::move(listener));
1289
+ return absl::OkStatus();
1290
+ }
1291
+
1292
+ grpc_error_handle NewChttp2ServerListener::CreateWithAcceptor(
1293
+ Server* server, const char* name, const ChannelArgs& args) {
1294
+ auto listener = MakeOrphanable<NewChttp2ServerListener>(args);
1295
+ grpc_error_handle error = grpc_tcp_server_create(
1296
+ &listener->tcp_server_shutdown_complete_, ChannelArgsEndpointConfig(args),
1297
+ OnAccept, listener.get(), &listener->tcp_server_);
1298
+ if (!error.ok()) return error;
1299
+ // TODO(yangg) channelz
1300
+ TcpServerFdHandler** arg_val = args.GetPointer<TcpServerFdHandler*>(name);
1301
+ *arg_val = grpc_tcp_server_create_fd_handler(listener->tcp_server_);
1302
+ server->AddListener(std::move(listener));
1303
+ return absl::OkStatus();
1304
+ }
1305
+
1306
+ NewChttp2ServerListener* NewChttp2ServerListener::CreateForPassiveListener(
1307
+ Server* server, const ChannelArgs& args,
1308
+ std::shared_ptr<experimental::PassiveListenerImpl> passive_listener) {
1309
+ // TODO(hork): figure out how to handle channelz in this case
1310
+ auto listener = MakeOrphanable<NewChttp2ServerListener>(
1311
+ args, std::move(passive_listener));
1312
+ auto listener_ptr = listener.get();
1313
+ server->AddListener(std::move(listener));
1314
+ return listener_ptr;
1315
+ }
1316
+
1317
+ NewChttp2ServerListener::NewChttp2ServerListener(
1318
+ const ChannelArgs& args,
1319
+ std::shared_ptr<experimental::PassiveListenerImpl> passive_listener)
1320
+ : args_(args), passive_listener_(std::move(passive_listener)) {
1321
+ GRPC_CLOSURE_INIT(&tcp_server_shutdown_complete_, TcpServerShutdownComplete,
1322
+ this, grpc_schedule_on_exec_ctx);
1323
+ }
1324
+
1325
+ NewChttp2ServerListener::~NewChttp2ServerListener() {
1326
+ if (passive_listener_ != nullptr) {
1327
+ passive_listener_->ListenerDestroyed();
1328
+ }
1329
+ if (on_destroy_done_ != nullptr) {
1330
+ ExecCtx::Run(DEBUG_LOCATION, on_destroy_done_, absl::OkStatus());
1331
+ }
1332
+ }
1333
+
1334
+ void NewChttp2ServerListener::Start() {
1335
+ bool should_add_port = false;
1336
+ grpc_tcp_server* tcp_server = nullptr;
1337
+ {
1338
+ MutexLock lock(&mu_);
1339
+ if (!shutdown_) {
1340
+ should_add_port = std::exchange(add_port_on_start_, false);
1341
+ // Hold a ref while we start the server
1342
+ if (tcp_server_ != nullptr) {
1343
+ grpc_tcp_server_ref(tcp_server_);
1344
+ tcp_server = tcp_server_;
1345
+ }
1346
+ }
1347
+ }
1348
+ if (should_add_port) {
1349
+ int port_temp;
1350
+ grpc_error_handle error =
1351
+ grpc_tcp_server_add_port(tcp_server_, resolved_address(), &port_temp);
1352
+ if (!error.ok()) {
1353
+ LOG(ERROR) << "Error adding port to server: " << StatusToString(error);
1354
+ // TODO(yashykt): We wouldn't need to assert here if we bound to the
1355
+ // port earlier during AddPort.
1356
+ CHECK(0);
1357
+ }
1358
+ }
1359
+ if (tcp_server != nullptr) {
1360
+ grpc_tcp_server_start(tcp_server, &listener_state_->server()->pollsets());
1361
+ // Give up the ref we took earlier
1362
+ grpc_tcp_server_unref(tcp_server);
1363
+ }
1364
+ }
1365
+
1366
+ void NewChttp2ServerListener::SetOnDestroyDone(grpc_closure* on_destroy_done) {
1367
+ MutexLock lock(&mu_);
1368
+ on_destroy_done_ = on_destroy_done;
1369
+ }
1370
+
1371
+ void NewChttp2ServerListener::AcceptConnectedEndpoint(
1372
+ std::unique_ptr<EventEngine::Endpoint> endpoint) {
1373
+ OnAccept(this, grpc_event_engine_endpoint_create(std::move(endpoint)),
1374
+ /*accepting_pollset=*/nullptr, /*acceptor=*/nullptr);
1375
+ }
1376
+
1377
+ void NewChttp2ServerListener::OnAccept(
1378
+ void* arg, grpc_endpoint* tcp, grpc_pollset* accepting_pollset,
1379
+ grpc_tcp_server_acceptor* server_acceptor) {
1380
+ NewChttp2ServerListener* self = static_cast<NewChttp2ServerListener*>(arg);
1381
+ OrphanablePtr<grpc_endpoint> endpoint(tcp);
1382
+ AcceptorPtr acceptor(server_acceptor);
1383
+ if (!self->listener_state_->connection_quota()->AllowIncomingConnection(
1384
+ self->listener_state_->memory_quota(),
1385
+ grpc_endpoint_get_peer(endpoint.get()))) {
1386
+ return;
1387
+ }
1388
+ {
1389
+ // The ref for the tcp_server need to be taken in the critical region
1390
+ // after having made sure that the listener has not been Orphaned, so as
1391
+ // to avoid heap-use-after-free issues where `Ref()` is invoked when the
1392
+ // listener is already shutdown. Note that the listener holds a ref to the
1393
+ // tcp_server but this ref is given away when the listener is orphaned
1394
+ // (shutdown). A connection needs the tcp_server to outlast the handshake
1395
+ // since the acceptor needs it.
1396
+ MutexLock lock(&self->mu_);
1397
+ if (self->shutdown_) {
1398
+ self->listener_state_->connection_quota()->ReleaseConnections(1);
1399
+ return;
1400
+ }
1401
+ if (self->tcp_server_ != nullptr) {
1402
+ grpc_tcp_server_ref(self->tcp_server_);
1403
+ }
1404
+ }
1405
+ auto memory_owner =
1406
+ self->listener_state_->memory_quota()->CreateMemoryOwner();
1407
+ auto connection = memory_owner.MakeOrphanable<ActiveConnection>(
1408
+ self->listener_state_, self->tcp_server_, accepting_pollset,
1409
+ std::move(acceptor), self->args_, std::move(memory_owner),
1410
+ std::move(endpoint));
1411
+ RefCountedPtr<ActiveConnection> connection_ref =
1412
+ connection->RefAsSubclass<ActiveConnection>();
1413
+ absl::optional<ChannelArgs> new_args =
1414
+ self->listener_state_->AddLogicalConnection(std::move(connection),
1415
+ self->args_, tcp);
1416
+ if (new_args.has_value()) {
1417
+ connection_ref->Start(*new_args);
1418
+ } else {
1419
+ self->listener_state_->connection_quota()->ReleaseConnections(1);
1420
+ }
1421
+ }
1422
+
1423
+ void NewChttp2ServerListener::TcpServerShutdownComplete(
1424
+ void* arg, grpc_error_handle /*error*/) {
1425
+ NewChttp2ServerListener* self = static_cast<NewChttp2ServerListener*>(arg);
1426
+ self->channelz_listen_socket_.reset();
1427
+ self->Unref();
1428
+ }
1429
+
1430
+ // Server callback: destroy the tcp listener (so we don't generate further
1431
+ // callbacks)
1432
+ void NewChttp2ServerListener::Orphan() {
1433
+ grpc_tcp_server* tcp_server;
1434
+ {
1435
+ MutexLock lock(&mu_);
1436
+ shutdown_ = true;
1437
+ tcp_server = tcp_server_;
1438
+ }
1439
+ if (tcp_server != nullptr) {
1440
+ grpc_tcp_server_shutdown_listeners(tcp_server);
1441
+ grpc_tcp_server_unref(tcp_server);
1442
+ } else {
1443
+ Unref();
1444
+ }
1445
+ }
1446
+
1447
+ namespace {
1448
+
959
1449
  grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
960
- const ChannelArgs& args,
961
- Chttp2ServerArgsModifier args_modifier,
962
- int* port_num) {
1450
+ const ChannelArgs& args, int* port_num) {
963
1451
  if (addr == nullptr) {
964
1452
  return GRPC_ERROR_CREATE("Invalid address: addr cannot be a nullptr.");
965
1453
  }
966
1454
  if (strncmp(addr, "external:", 9) == 0) {
967
- return Chttp2ServerListener::CreateWithAcceptor(server, addr, args,
968
- args_modifier);
1455
+ if (IsServerListenerEnabled()) {
1456
+ return NewChttp2ServerListener::CreateWithAcceptor(server, addr, args);
1457
+ } else {
1458
+ return Chttp2ServerListener::CreateWithAcceptor(server, addr, args);
1459
+ }
969
1460
  }
970
1461
  *port_num = -1;
971
1462
  absl::StatusOr<std::vector<grpc_resolved_address>> resolved;
@@ -1029,8 +1520,11 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
1029
1520
  *port_num);
1030
1521
  }
1031
1522
  int port_temp = -1;
1032
- error = Chttp2ServerListener::Create(server, addr, args, args_modifier,
1033
- &port_temp);
1523
+ if (IsServerListenerEnabled()) {
1524
+ error = NewChttp2ServerListener::Create(server, addr, args, &port_temp);
1525
+ } else {
1526
+ error = Chttp2ServerListener::Create(server, addr, args, &port_temp);
1527
+ }
1034
1528
  if (!error.ok()) {
1035
1529
  error_list.push_back(error);
1036
1530
  } else {
@@ -1063,25 +1557,6 @@ grpc_error_handle Chttp2ServerAddPort(Server* server, const char* addr,
1063
1557
  return error;
1064
1558
  }
1065
1559
 
1066
- namespace {
1067
-
1068
- ChannelArgs ModifyArgsForConnection(const ChannelArgs& args,
1069
- grpc_error_handle* error) {
1070
- auto* server_credentials = args.GetObject<grpc_server_credentials>();
1071
- if (server_credentials == nullptr) {
1072
- *error = GRPC_ERROR_CREATE("Could not find server credentials");
1073
- return args;
1074
- }
1075
- auto security_connector = server_credentials->create_security_connector(args);
1076
- if (security_connector == nullptr) {
1077
- *error = GRPC_ERROR_CREATE(
1078
- absl::StrCat("Unable to create secure server with credentials of type ",
1079
- server_credentials->type().name()));
1080
- return args;
1081
- }
1082
- return args.SetObject(security_connector);
1083
- }
1084
-
1085
1560
  } // namespace
1086
1561
 
1087
1562
  namespace experimental {
@@ -1089,19 +1564,40 @@ namespace experimental {
1089
1564
  absl::Status PassiveListenerImpl::AcceptConnectedEndpoint(
1090
1565
  std::unique_ptr<EventEngine::Endpoint> endpoint) {
1091
1566
  CHECK_NE(server_.get(), nullptr);
1092
- RefCountedPtr<Chttp2ServerListener> listener;
1093
- {
1094
- MutexLock lock(&mu_);
1095
- if (listener_ != nullptr) {
1096
- listener =
1097
- listener_->RefIfNonZero().TakeAsSubclass<Chttp2ServerListener>();
1567
+ if (IsServerListenerEnabled()) {
1568
+ RefCountedPtr<NewChttp2ServerListener> new_listener;
1569
+ {
1570
+ MutexLock lock(&mu_);
1571
+ auto* new_listener_ptr =
1572
+ absl::get_if<NewChttp2ServerListener*>(&listener_);
1573
+ if (new_listener_ptr != nullptr && *new_listener_ptr != nullptr) {
1574
+ new_listener = (*new_listener_ptr)
1575
+ ->RefIfNonZero()
1576
+ .TakeAsSubclass<NewChttp2ServerListener>();
1577
+ }
1098
1578
  }
1579
+ if (new_listener == nullptr) {
1580
+ return absl::UnavailableError("passive listener already shut down");
1581
+ }
1582
+ ExecCtx exec_ctx;
1583
+ new_listener->AcceptConnectedEndpoint(std::move(endpoint));
1584
+ } else {
1585
+ RefCountedPtr<Chttp2ServerListener> listener;
1586
+ {
1587
+ MutexLock lock(&mu_);
1588
+ auto* listener_ptr = absl::get_if<Chttp2ServerListener*>(&listener_);
1589
+ if (listener_ptr != nullptr && *listener_ptr != nullptr) {
1590
+ listener = (*listener_ptr)
1591
+ ->RefIfNonZero()
1592
+ .TakeAsSubclass<Chttp2ServerListener>();
1593
+ }
1594
+ }
1595
+ if (listener == nullptr) {
1596
+ return absl::UnavailableError("passive listener already shut down");
1597
+ }
1598
+ ExecCtx exec_ctx;
1599
+ listener->AcceptConnectedEndpoint(std::move(endpoint));
1099
1600
  }
1100
- if (listener == nullptr) {
1101
- return absl::UnavailableError("passive listener already shut down");
1102
- }
1103
- ExecCtx exec_ctx;
1104
- listener->AcceptConnectedEndpoint(std::move(endpoint));
1105
1601
  return absl::OkStatus();
1106
1602
  }
1107
1603
 
@@ -1123,7 +1619,7 @@ absl::Status PassiveListenerImpl::AcceptConnectedFd(int fd) {
1123
1619
 
1124
1620
  void PassiveListenerImpl::ListenerDestroyed() {
1125
1621
  MutexLock lock(&mu_);
1126
- listener_ = nullptr;
1622
+ listener_ = static_cast<Chttp2ServerListener*>(nullptr);
1127
1623
  }
1128
1624
 
1129
1625
  } // namespace experimental
@@ -1169,8 +1665,7 @@ int grpc_server_add_http2_port(grpc_server* server, const char* addr,
1169
1665
  args = args.SetObject(creds->Ref()).SetObject(sc);
1170
1666
  }
1171
1667
  // Add server port.
1172
- err = grpc_core::Chttp2ServerAddPort(
1173
- core_server, addr, args, grpc_core::ModifyArgsForConnection, &port_num);
1668
+ err = grpc_core::Chttp2ServerAddPort(core_server, addr, args, &port_num);
1174
1669
  done:
1175
1670
  sc.reset(DEBUG_LOCATION, "server");
1176
1671
  if (!err.ok()) {
@@ -1250,9 +1745,16 @@ absl::Status grpc_server_add_passive_listener(
1250
1745
  auto args = server->channel_args()
1251
1746
  .SetObject(credentials->Ref())
1252
1747
  .SetObject(std::move(sc));
1253
- passive_listener->listener_ =
1254
- grpc_core::Chttp2ServerListener::CreateForPassiveListener(
1255
- server, args, passive_listener);
1748
+ if (grpc_core::IsServerListenerEnabled()) {
1749
+ passive_listener->listener_ =
1750
+ grpc_core::NewChttp2ServerListener::CreateForPassiveListener(
1751
+ server, args, passive_listener);
1752
+ } else {
1753
+ passive_listener->listener_ =
1754
+ grpc_core::Chttp2ServerListener::CreateForPassiveListener(
1755
+ server, args, passive_listener);
1756
+ }
1757
+
1256
1758
  passive_listener->server_ = server->Ref();
1257
1759
  return absl::OkStatus();
1258
1760
  }