grpc 1.78.0 → 1.80.0.pre1

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 (431) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +22 -8
  3. data/include/grpc/credentials.h +47 -37
  4. data/include/grpc/credentials_cpp.h +39 -0
  5. data/include/grpc/event_engine/event_engine.h +8 -3
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/impl/call.h +9 -0
  8. data/include/grpc/impl/channel_arg_names.h +7 -0
  9. data/include/grpc/module.modulemap +2 -0
  10. data/include/grpc/private_key_signer.h +104 -0
  11. data/include/grpc/support/port_platform.h +6 -0
  12. data/src/core/call/call_filters.h +101 -78
  13. data/src/core/call/call_spine.h +91 -68
  14. data/src/core/call/call_state.h +60 -4
  15. data/src/core/call/client_call.cc +9 -9
  16. data/src/core/call/client_call.h +1 -1
  17. data/src/core/call/metadata_batch.cc +2 -0
  18. data/src/core/call/metadata_batch.h +48 -1
  19. data/src/core/call/metadata_info.cc +35 -0
  20. data/src/core/call/metadata_info.h +2 -0
  21. data/src/core/call/simple_slice_based_metadata.h +2 -1
  22. data/src/core/channelz/channelz.cc +9 -6
  23. data/src/core/channelz/channelz.h +7 -4
  24. data/src/core/channelz/property_list.h +5 -0
  25. data/src/core/channelz/v2tov1/convert.cc +1 -1
  26. data/src/core/channelz/v2tov1/legacy_api.cc +164 -307
  27. data/src/core/client_channel/buffered_call.cc +7 -3
  28. data/src/core/client_channel/buffered_call.h +11 -5
  29. data/src/core/client_channel/client_channel.cc +106 -44
  30. data/src/core/client_channel/client_channel.h +3 -6
  31. data/src/core/client_channel/client_channel_filter.cc +90 -64
  32. data/src/core/client_channel/client_channel_filter.h +3 -6
  33. data/src/core/client_channel/client_channel_internal.h +5 -0
  34. data/src/core/client_channel/config_selector.h +17 -12
  35. data/src/core/client_channel/dynamic_filters.cc +8 -7
  36. data/src/core/client_channel/dynamic_filters.h +7 -5
  37. data/src/core/client_channel/retry_filter.cc +1 -1
  38. data/src/core/client_channel/retry_filter.h +2 -2
  39. data/src/core/client_channel/subchannel.cc +1682 -266
  40. data/src/core/client_channel/subchannel.h +411 -134
  41. data/src/core/client_channel/subchannel_stream_client.cc +22 -18
  42. data/src/core/client_channel/subchannel_stream_client.h +8 -9
  43. data/src/core/client_channel/subchannel_stream_limiter.cc +76 -0
  44. data/src/core/client_channel/subchannel_stream_limiter.h +51 -0
  45. data/src/core/config/config_vars.cc +9 -1
  46. data/src/core/config/config_vars.h +6 -0
  47. data/src/core/credentials/call/call_creds_registry.h +51 -22
  48. data/src/core/credentials/call/call_creds_registry_init.cc +86 -2
  49. data/src/core/credentials/call/external/aws_external_account_credentials.cc +2 -2
  50. data/src/core/credentials/call/external/external_account_credentials.cc +11 -4
  51. data/src/core/credentials/call/external/file_external_account_credentials.cc +2 -2
  52. data/src/core/credentials/transport/channel_creds_registry.h +71 -20
  53. data/src/core/credentials/transport/channel_creds_registry_init.cc +338 -29
  54. data/src/core/credentials/transport/ssl/ssl_credentials.cc +43 -24
  55. data/src/core/credentials/transport/ssl/ssl_credentials.h +7 -1
  56. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +2 -8
  57. data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -3
  58. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -5
  59. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +7 -5
  60. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +181 -109
  61. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +55 -42
  62. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +28 -23
  63. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.h +26 -23
  64. data/src/core/credentials/transport/tls/spiffe_utils.cc +2 -2
  65. data/src/core/credentials/transport/tls/ssl_utils.cc +18 -18
  66. data/src/core/credentials/transport/tls/ssl_utils.h +12 -10
  67. data/src/core/credentials/transport/tls/tls_security_connector.cc +106 -74
  68. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -8
  69. data/src/core/credentials/transport/xds/xds_credentials.cc +76 -32
  70. data/src/core/credentials/transport/xds/xds_credentials.h +4 -2
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +117 -35
  72. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +42 -4
  73. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +58 -29
  74. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +19 -11
  75. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +82 -25
  76. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +28 -3
  77. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +9 -7
  78. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  79. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +7 -1
  80. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +117 -67
  81. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  82. data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -1
  83. data/src/core/ext/transport/chttp2/transport/frame.cc +2 -15
  84. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  85. data/src/core/ext/transport/chttp2/transport/goaway.cc +17 -2
  86. data/src/core/ext/transport/chttp2/transport/goaway.h +27 -6
  87. data/src/core/ext/transport/chttp2/transport/header_assembler.h +8 -21
  88. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +101 -40
  89. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
  90. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +923 -772
  91. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +406 -423
  92. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -0
  93. data/src/core/ext/transport/chttp2/transport/http2_settings.h +8 -1
  94. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +25 -13
  95. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +71 -24
  96. data/src/core/ext/transport/chttp2/transport/http2_transport.h +25 -49
  97. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +2 -2
  98. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +29 -9
  99. data/src/core/ext/transport/chttp2/transport/internal.h +6 -2
  100. data/src/core/ext/transport/chttp2/transport/keepalive.cc +14 -20
  101. data/src/core/ext/transport/chttp2/transport/keepalive.h +9 -6
  102. data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -0
  103. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +34 -74
  104. data/src/core/ext/transport/chttp2/transport/ping_promise.h +123 -79
  105. data/src/core/ext/transport/chttp2/transport/security_frame.h +233 -3
  106. data/src/core/ext/transport/chttp2/transport/stream.h +152 -73
  107. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +155 -85
  108. data/src/core/ext/transport/chttp2/transport/transport_common.h +0 -5
  109. data/src/core/ext/transport/chttp2/transport/writable_streams.h +8 -7
  110. data/src/core/ext/transport/chttp2/transport/write_cycle.cc +86 -0
  111. data/src/core/ext/transport/chttp2/transport/write_cycle.h +355 -0
  112. data/src/core/ext/transport/chttp2/transport/writing.cc +31 -29
  113. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +1875 -0
  114. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +409 -0
  115. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +56 -0
  116. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +2223 -0
  117. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +489 -0
  118. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +60 -0
  119. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +2 -1
  120. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +130 -18
  121. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +18 -13
  122. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +70 -38
  123. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +20 -17
  124. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +26 -10
  125. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +8 -7
  126. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +495 -0
  127. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +114 -0
  128. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +36 -0
  129. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +26 -10
  130. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +8 -7
  131. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +121 -0
  132. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +54 -0
  133. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +32 -0
  134. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +143 -9
  135. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +18 -6
  136. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +112 -11
  137. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +22 -9
  138. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +276 -0
  139. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +60 -5
  140. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +4 -0
  141. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +72 -0
  142. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +23 -2
  143. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +2 -0
  144. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +129 -13
  145. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +36 -10
  146. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +2 -0
  147. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +30 -0
  148. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +5 -3
  149. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +16 -0
  150. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -3
  151. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +31 -0
  152. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +5 -3
  153. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
  154. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +63 -0
  155. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +12 -7
  156. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +97 -81
  157. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +40 -23
  158. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +604 -228
  159. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +146 -100
  160. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +30 -0
  161. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +5 -3
  162. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +35 -3
  163. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +7 -4
  164. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +66 -14
  165. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +22 -11
  166. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +87 -0
  167. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +29 -2
  168. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +2 -0
  169. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +0 -1
  170. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +0 -1
  171. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +20 -4
  172. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +5 -4
  173. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +239 -60
  174. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +59 -28
  175. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +2 -0
  176. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +89 -0
  177. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +50 -0
  178. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +32 -0
  179. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +135 -0
  180. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +53 -0
  181. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +32 -0
  182. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +105 -0
  183. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +51 -0
  184. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +32 -0
  185. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +32 -0
  186. 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 +6 -3
  187. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +206 -0
  188. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +41 -8
  189. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +2 -0
  190. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +64 -0
  191. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +4 -3
  192. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +64 -0
  193. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +31 -5
  194. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +2 -0
  195. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +283 -14
  196. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -11
  197. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +2 -0
  198. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +144 -6
  199. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -7
  200. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +2 -0
  201. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +42 -21
  202. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +9 -8
  203. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +164 -1
  204. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +37 -6
  205. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +2 -0
  206. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +0 -1
  207. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +0 -1
  208. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +0 -1
  209. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +0 -1
  210. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +26 -11
  211. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +8 -8
  212. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +33 -0
  213. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +14 -3
  214. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +90 -10
  215. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +18 -7
  216. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.c +248 -0
  217. data/src/core/ext/upbdefs-gen/cel/expr/checked.upbdefs.h +97 -0
  218. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.c +283 -0
  219. data/src/core/ext/upbdefs-gen/cel/expr/syntax.upbdefs.h +107 -0
  220. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +213 -211
  221. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +635 -614
  222. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1012 -1000
  223. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +276 -273
  224. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.c +152 -0
  225. data/src/core/ext/upbdefs-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upbdefs.h +47 -0
  226. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +149 -144
  227. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +367 -370
  228. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.c +63 -0
  229. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/cel.upbdefs.h +37 -0
  230. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +297 -284
  231. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +492 -469
  232. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +74 -43
  233. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +10 -0
  234. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +60 -59
  235. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +202 -184
  236. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -0
  237. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +354 -339
  238. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  239. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +28 -19
  240. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +30 -27
  241. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +71 -66
  242. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +94 -91
  243. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +386 -369
  244. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +60 -57
  245. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +1974 -1884
  246. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +119 -112
  247. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +62 -51
  248. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +109 -88
  249. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +54 -36
  250. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -0
  251. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +78 -84
  252. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +48 -46
  253. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1041 -984
  254. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  255. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +304 -290
  256. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +94 -77
  257. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -0
  258. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +246 -193
  259. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -0
  260. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +37 -23
  261. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -0
  262. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +5 -3
  263. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +4 -4
  264. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +4 -5
  265. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +113 -87
  266. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +5 -0
  267. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +5 -5
  268. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +6 -5
  269. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +5 -5
  270. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +5 -5
  271. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +5 -5
  272. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +25 -30
  273. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +14 -20
  274. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +180 -183
  275. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +56 -47
  276. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +69 -47
  277. data/src/core/filter/filter_chain.h +95 -0
  278. data/src/core/handshaker/http_connect/{http_connect_handshaker.cc → http_connect_client_handshaker.cc} +32 -31
  279. data/src/core/handshaker/http_connect/{http_connect_handshaker.h → http_connect_client_handshaker.h} +4 -4
  280. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +1 -1
  281. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  282. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +14 -13
  283. data/src/core/handshaker/security/secure_endpoint.cc +282 -68
  284. data/src/core/handshaker/security/secure_endpoint.h +0 -7
  285. data/src/core/lib/channel/channel_args.h +1 -1
  286. data/src/core/lib/channel/promise_based_filter.cc +17 -4
  287. data/src/core/lib/channel/promise_based_filter.h +3 -2
  288. data/src/core/lib/debug/trace_flags.cc +2 -0
  289. data/src/core/lib/debug/trace_flags.h +1 -0
  290. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +35 -8
  291. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -2
  292. data/src/core/lib/event_engine/event_engine.cc +9 -0
  293. data/src/core/lib/event_engine/extensions/tcp_trace.h +0 -3
  294. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +2 -2
  295. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +1 -1
  296. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +34 -9
  297. data/src/core/lib/event_engine/posix_engine/posix_engine.h +24 -2
  298. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -3
  299. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +141 -14
  300. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +19 -2
  301. data/src/core/lib/event_engine/posix_engine/posix_interface.h +7 -0
  302. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +21 -3
  303. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +16 -0
  304. data/src/core/lib/experiments/experiments.cc +309 -201
  305. data/src/core/lib/experiments/experiments.h +141 -80
  306. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  307. data/src/core/lib/iomgr/resolve_address.h +0 -2
  308. data/src/core/lib/iomgr/resolved_address.h +0 -2
  309. data/src/core/lib/iomgr/tcp_posix.cc +13 -5
  310. data/src/core/lib/iomgr/tcp_server.cc +0 -5
  311. data/src/core/lib/iomgr/tcp_server.h +0 -7
  312. data/src/core/lib/iomgr/tcp_server_posix.cc +0 -17
  313. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -3
  314. data/src/core/lib/iomgr/tcp_server_windows.cc +12 -51
  315. data/src/core/lib/promise/all_ok.h +17 -12
  316. data/src/core/lib/promise/cancel_callback.h +12 -13
  317. data/src/core/lib/promise/detail/join_state.h +626 -0
  318. data/src/core/lib/promise/detail/promise_factory.h +14 -14
  319. data/src/core/lib/promise/for_each.h +32 -8
  320. data/src/core/lib/promise/if.h +9 -7
  321. data/src/core/lib/promise/loop.h +18 -16
  322. data/src/core/lib/promise/map.h +54 -47
  323. data/src/core/lib/promise/mpsc.h +11 -10
  324. data/src/core/lib/promise/observable.h +6 -6
  325. data/src/core/lib/promise/party.h +25 -19
  326. data/src/core/lib/promise/poll.h +5 -5
  327. data/src/core/lib/promise/prioritized_race.h +10 -7
  328. data/src/core/lib/promise/promise.h +16 -11
  329. data/src/core/lib/promise/race.h +6 -5
  330. data/src/core/lib/promise/seq.h +109 -74
  331. data/src/core/lib/promise/try_join.h +14 -6
  332. data/src/core/lib/promise/try_seq.h +76 -60
  333. data/src/core/lib/resource_quota/api.cc +7 -0
  334. data/src/core/lib/resource_quota/arena.h +1 -1
  335. data/src/core/lib/resource_quota/memory_quota.cc +4 -1
  336. data/src/core/lib/resource_quota/resource_quota.cc +2 -1
  337. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  338. data/src/core/lib/resource_quota/stream_quota.cc +77 -1
  339. data/src/core/lib/resource_quota/stream_quota.h +64 -1
  340. data/src/core/lib/resource_quota/telemetry.h +1 -1
  341. data/src/core/lib/surface/call.cc +13 -0
  342. data/src/core/lib/surface/call_utils.h +58 -43
  343. data/src/core/lib/surface/channel.h +1 -4
  344. data/src/core/lib/surface/completion_queue.cc +13 -6
  345. data/src/core/lib/surface/validate_metadata.cc +20 -15
  346. data/src/core/lib/surface/validate_metadata.h +3 -1
  347. data/src/core/lib/surface/version.cc +2 -2
  348. data/src/core/lib/transport/promise_endpoint.cc +1 -1
  349. data/src/core/lib/transport/promise_endpoint.h +1 -1
  350. data/src/core/lib/transport/transport.h +5 -0
  351. data/src/core/load_balancing/health_check_client.cc +1 -15
  352. data/src/core/load_balancing/health_check_client_internal.h +0 -2
  353. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  354. data/src/core/load_balancing/oob_backend_metric_internal.h +0 -1
  355. data/src/core/load_balancing/xds/xds_cluster_impl.cc +12 -9
  356. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -2
  357. data/src/core/resolver/xds/xds_resolver.cc +162 -116
  358. data/src/core/server/server.cc +18 -1
  359. data/src/core/server/server.h +2 -0
  360. data/src/core/server/xds_server_config_fetcher.cc +4 -4
  361. data/src/core/telemetry/call_tracer.cc +87 -2
  362. data/src/core/telemetry/call_tracer.h +46 -8
  363. data/src/core/telemetry/instrument.cc +102 -40
  364. data/src/core/telemetry/instrument.h +246 -65
  365. data/src/core/tsi/fake_transport_security.cc +3 -1
  366. data/src/core/tsi/ssl_transport_security.cc +516 -137
  367. data/src/core/tsi/ssl_transport_security.h +28 -22
  368. data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
  369. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  370. data/src/core/util/bitset.h +6 -0
  371. data/src/core/util/function_signature.h +3 -1
  372. data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
  373. data/src/core/util/json/json_reader.cc +0 -4
  374. data/src/core/xds/grpc/certificate_provider_store.cc +2 -1
  375. data/src/core/xds/grpc/certificate_provider_store.h +3 -17
  376. data/src/core/xds/grpc/certificate_provider_store_interface.h +61 -0
  377. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +48 -0
  378. data/src/core/xds/grpc/xds_bootstrap_grpc.h +18 -0
  379. data/src/core/xds/grpc/xds_certificate_provider.cc +7 -2
  380. data/src/core/xds/grpc/xds_certificate_provider.h +13 -2
  381. data/src/core/xds/grpc/xds_client_grpc.cc +13 -6
  382. data/src/core/xds/grpc/xds_client_grpc.h +10 -7
  383. data/src/core/xds/grpc/xds_cluster.cc +18 -4
  384. data/src/core/xds/grpc/xds_cluster.h +17 -2
  385. data/src/core/xds/grpc/xds_cluster_parser.cc +36 -11
  386. data/src/core/xds/grpc/xds_common_types.cc +45 -0
  387. data/src/core/xds/grpc/xds_common_types.h +31 -0
  388. data/src/core/xds/grpc/xds_common_types_parser.cc +274 -16
  389. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  390. data/src/core/xds/grpc/xds_http_fault_filter.cc +128 -24
  391. data/src/core/xds/grpc/xds_http_fault_filter.h +19 -10
  392. data/src/core/xds/grpc/xds_http_filter.cc +38 -0
  393. data/src/core/xds/grpc/xds_http_filter.h +70 -47
  394. data/src/core/xds/grpc/xds_http_filter_registry.cc +48 -14
  395. data/src/core/xds/grpc/xds_http_filter_registry.h +29 -15
  396. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +88 -22
  397. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +22 -11
  398. data/src/core/xds/grpc/xds_http_rbac_filter.cc +36 -20
  399. data/src/core/xds/grpc/xds_http_rbac_filter.h +19 -10
  400. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +143 -26
  401. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -10
  402. data/src/core/xds/grpc/xds_listener.cc +4 -1
  403. data/src/core/xds/grpc/xds_listener.h +10 -2
  404. data/src/core/xds/grpc/xds_listener_parser.cc +23 -18
  405. data/src/core/xds/grpc/xds_matcher.cc +40 -5
  406. data/src/core/xds/grpc/xds_matcher.h +13 -0
  407. data/src/core/xds/grpc/xds_matcher_action.h +1 -1
  408. data/src/core/xds/grpc/xds_matcher_parse.cc +60 -40
  409. data/src/core/xds/grpc/xds_matcher_parse.h +2 -1
  410. data/src/core/xds/grpc/xds_route_config.cc +12 -1
  411. data/src/core/xds/grpc/xds_route_config.h +15 -2
  412. data/src/core/xds/grpc/xds_route_config_parser.cc +11 -5
  413. data/src/core/xds/grpc/xds_routing.cc +181 -6
  414. data/src/core/xds/grpc/xds_routing.h +57 -0
  415. data/src/core/xds/grpc/xds_server_grpc.cc +55 -43
  416. data/src/core/xds/grpc/xds_server_grpc.h +13 -6
  417. data/src/core/xds/grpc/xds_server_grpc_interface.h +3 -2
  418. data/src/core/xds/grpc/xds_transport_grpc.cc +12 -6
  419. data/src/core/xds/grpc/xds_transport_grpc.h +5 -1
  420. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -8
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -12
  422. data/src/ruby/lib/grpc/grpc.rb +7 -9
  423. data/src/ruby/lib/grpc/version.rb +1 -1
  424. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  425. data/src/ruby/spec/client_server_spec.rb +1 -1
  426. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  427. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
  428. data/src/ruby/spec/spec_helper.rb +1 -1
  429. metadata +64 -14
  430. data/src/core/ext/transport/chttp2/transport/security_frame.cc +0 -31
  431. data/src/core/handshaker/security/legacy_secure_endpoint.cc +0 -597
@@ -18,16 +18,22 @@
18
18
 
19
19
  #include "src/core/credentials/transport/ssl/ssl_credentials.h"
20
20
 
21
+ #include <grpc/credentials.h>
22
+ #include <grpc/grpc_security.h>
23
+ #include <grpc/grpc_security_constants.h>
21
24
  #include <grpc/impl/channel_arg_names.h>
22
25
  #include <grpc/support/alloc.h>
23
26
  #include <grpc/support/port_platform.h>
24
27
  #include <grpc/support/string_util.h>
25
28
  #include <string.h>
26
29
 
30
+ #include <memory>
27
31
  #include <optional>
28
32
  #include <string>
29
33
  #include <utility>
30
34
 
35
+ #include "src/core/credentials/transport/security_connector.h"
36
+ #include "src/core/credentials/transport/ssl/ssl_security_connector.h"
31
37
  #include "src/core/credentials/transport/tls/ssl_utils.h"
32
38
  #include "src/core/lib/channel/channel_args.h"
33
39
  #include "src/core/lib/debug/trace.h"
@@ -35,6 +41,8 @@
35
41
  #include "src/core/tsi/ssl_transport_security.h"
36
42
  #include "src/core/tsi/transport_security_interface.h"
37
43
  #include "src/core/util/grpc_check.h"
44
+ #include "src/core/util/ref_counted_ptr.h"
45
+ #include "src/core/util/unique_type_name.h"
38
46
  #include "absl/log/log.h"
39
47
 
40
48
  //
@@ -68,7 +76,6 @@ grpc_ssl_credentials::grpc_ssl_credentials(
68
76
 
69
77
  grpc_ssl_credentials::~grpc_ssl_credentials() {
70
78
  gpr_free(config_.pem_root_certs);
71
- grpc_tsi_ssl_pem_key_cert_pairs_destroy(config_.pem_key_cert_pair, 1);
72
79
  if (config_.verify_options.verify_peer_destruct != nullptr) {
73
80
  config_.verify_options.verify_peer_destruct(
74
81
  config_.verify_options.verify_peer_callback_userdata);
@@ -145,14 +152,8 @@ void grpc_ssl_credentials::build_config(
145
152
  if (pem_key_cert_pair != nullptr) {
146
153
  GRPC_CHECK_NE(pem_key_cert_pair->private_key, nullptr);
147
154
  GRPC_CHECK_NE(pem_key_cert_pair->cert_chain, nullptr);
148
- config_.pem_key_cert_pair = static_cast<tsi_ssl_pem_key_cert_pair*>(
149
- gpr_zalloc(sizeof(tsi_ssl_pem_key_cert_pair)));
150
- config_.pem_key_cert_pair->cert_chain =
151
- gpr_strdup(pem_key_cert_pair->cert_chain);
152
- config_.pem_key_cert_pair->private_key =
153
- gpr_strdup(pem_key_cert_pair->private_key);
154
- } else {
155
- config_.pem_key_cert_pair = nullptr;
155
+ config_.pem_key_cert_pair.cert_chain = pem_key_cert_pair->cert_chain;
156
+ config_.pem_key_cert_pair.private_key = pem_key_cert_pair->private_key;
156
157
  }
157
158
  if (verify_options != nullptr) {
158
159
  memcpy(&config_.verify_options, verify_options,
@@ -184,21 +185,21 @@ grpc_security_status grpc_ssl_credentials::InitializeClientHandshakerFactory(
184
185
  return GRPC_SECURITY_OK;
185
186
  }
186
187
 
187
- bool has_key_cert_pair = config->pem_key_cert_pair != nullptr &&
188
- config->pem_key_cert_pair->private_key != nullptr &&
189
- config->pem_key_cert_pair->cert_chain != nullptr;
188
+ bool has_key_cert_pair =
189
+ !grpc_core::IsPrivateKeyEmpty(config->pem_key_cert_pair.private_key) &&
190
+ !config->pem_key_cert_pair.cert_chain.empty();
190
191
  tsi_ssl_client_handshaker_options options;
191
192
  if (pem_root_certs == nullptr) {
192
193
  LOG(ERROR) << "Handshaker factory creation failed. pem_root_certs cannot "
193
194
  "be nullptr";
194
195
  return GRPC_SECURITY_ERROR;
195
196
  }
196
- options.root_cert_info = std::make_shared<RootCertInfo>(pem_root_certs);
197
+ options.root_cert_info = std::make_shared<tsi::RootCertInfo>(pem_root_certs);
197
198
  options.root_store = root_store;
198
199
  options.alpn_protocols =
199
200
  grpc_fill_alpn_protocol_strings(&options.num_alpn_protocols);
200
201
  if (has_key_cert_pair) {
201
- options.pem_key_cert_pair = config->pem_key_cert_pair;
202
+ options.pem_key_cert_pair = &config->pem_key_cert_pair;
202
203
  }
203
204
  options.cipher_suites = grpc_get_ssl_cipher_suites();
204
205
  options.session_cache = ssl_session_cache;
@@ -271,8 +272,6 @@ grpc_ssl_server_credentials::grpc_ssl_server_credentials(
271
272
  }
272
273
 
273
274
  grpc_ssl_server_credentials::~grpc_ssl_server_credentials() {
274
- grpc_tsi_ssl_pem_key_cert_pairs_destroy(config_.pem_key_cert_pairs,
275
- config_.num_key_cert_pairs);
276
275
  gpr_free(config_.pem_root_certs);
277
276
  }
278
277
  grpc_core::RefCountedPtr<grpc_server_security_connector>
@@ -286,20 +285,18 @@ grpc_core::UniqueTypeName grpc_ssl_server_credentials::Type() {
286
285
  return kFactory.Create();
287
286
  }
288
287
 
289
- tsi_ssl_pem_key_cert_pair* grpc_convert_grpc_to_tsi_cert_pairs(
288
+ std::vector<tsi_ssl_pem_key_cert_pair> grpc_convert_grpc_to_tsi_cert_pairs(
290
289
  const grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs,
291
290
  size_t num_key_cert_pairs) {
292
- tsi_ssl_pem_key_cert_pair* tsi_pairs = nullptr;
291
+ std::vector<tsi_ssl_pem_key_cert_pair> tsi_pairs;
293
292
  if (num_key_cert_pairs > 0) {
294
293
  GRPC_CHECK_NE(pem_key_cert_pairs, nullptr);
295
- tsi_pairs = static_cast<tsi_ssl_pem_key_cert_pair*>(
296
- gpr_zalloc(num_key_cert_pairs * sizeof(tsi_ssl_pem_key_cert_pair)));
297
294
  }
298
295
  for (size_t i = 0; i < num_key_cert_pairs; i++) {
299
296
  GRPC_CHECK_NE(pem_key_cert_pairs[i].private_key, nullptr);
300
297
  GRPC_CHECK_NE(pem_key_cert_pairs[i].cert_chain, nullptr);
301
- tsi_pairs[i].cert_chain = gpr_strdup(pem_key_cert_pairs[i].cert_chain);
302
- tsi_pairs[i].private_key = gpr_strdup(pem_key_cert_pairs[i].private_key);
298
+ tsi_pairs.emplace_back(pem_key_cert_pairs[i].private_key,
299
+ pem_key_cert_pairs[i].cert_chain);
303
300
  }
304
301
  return tsi_pairs;
305
302
  }
@@ -312,7 +309,6 @@ void grpc_ssl_server_credentials::build_config(
312
309
  config_.pem_root_certs = gpr_strdup(pem_root_certs);
313
310
  config_.pem_key_cert_pairs = grpc_convert_grpc_to_tsi_cert_pairs(
314
311
  pem_key_cert_pairs, num_key_cert_pairs);
315
- config_.num_key_cert_pairs = num_key_cert_pairs;
316
312
  }
317
313
 
318
314
  void grpc_ssl_server_credentials::set_min_tls_version(
@@ -422,7 +418,7 @@ grpc_server_credentials* grpc_ssl_server_credentials_create_ex(
422
418
  GRPC_TRACE_LOG(api, INFO)
423
419
  << "grpc_ssl_server_credentials_create_ex(pem_root_certs="
424
420
  << pem_root_certs << ", pem_key_cert_pairs=" << pem_key_cert_pairs
425
- << ", num_key_cert_pairs=" << (unsigned long)num_key_cert_pairs
421
+ << ", num_key_cert_pairs=" << num_key_cert_pairs
426
422
  << ", client_certificate_request=" << client_certificate_request
427
423
  << ", reserved=" << reserved << ")";
428
424
  GRPC_CHECK_EQ(reserved, nullptr);
@@ -471,3 +467,26 @@ void grpc_ssl_server_credentials_options_destroy(
471
467
  grpc_ssl_server_certificate_config_destroy(o->certificate_config);
472
468
  gpr_free(o);
473
469
  }
470
+
471
+ namespace {
472
+
473
+ std::string GetLeafCert(const grpc_auth_context* ctx) {
474
+ if (ctx == nullptr) return "";
475
+ grpc_auth_property_iterator it = grpc_auth_context_find_properties_by_name(
476
+ ctx, GRPC_X509_PEM_CERT_PROPERTY_NAME);
477
+ const grpc_auth_property* prop = grpc_auth_property_iterator_next(&it);
478
+ if (prop == nullptr) return "";
479
+ return std::string(prop->value, prop->value_length);
480
+ }
481
+
482
+ } // namespace
483
+
484
+ bool SslLeafHashComparator(const grpc_auth_context* ctx1,
485
+ const grpc_auth_context* ctx2) {
486
+ std::string cert1 = GetLeafCert(ctx1);
487
+ std::string cert2 = GetLeafCert(ctx2);
488
+ // If either cert is empty, we consider them not matching (or not
489
+ // authenticated). This is a safe default for now.
490
+ if (cert1.empty() || cert2.empty()) return false;
491
+ return cert1 == cert2;
492
+ }
@@ -137,8 +137,14 @@ class grpc_ssl_server_credentials final : public grpc_server_credentials {
137
137
  grpc_ssl_server_certificate_config_fetcher certificate_config_fetcher_;
138
138
  };
139
139
 
140
- tsi_ssl_pem_key_cert_pair* grpc_convert_grpc_to_tsi_cert_pairs(
140
+ std::vector<tsi_ssl_pem_key_cert_pair> grpc_convert_grpc_to_tsi_cert_pairs(
141
141
  const grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs,
142
142
  size_t num_key_cert_pairs);
143
143
 
144
+ // Compares the leaf certificate of the peer in two auth contexts.
145
+ // Returns true if both contexts have the same leaf certificate (PEM).
146
+ // Returns false otherwise.
147
+ bool SslLeafHashComparator(const grpc_auth_context* ctx1,
148
+ const grpc_auth_context* ctx2);
149
+
144
150
  #endif // GRPC_SRC_CORE_CREDENTIALS_TRANSPORT_SSL_SSL_CREDENTIALS_H
@@ -241,10 +241,8 @@ class grpc_ssl_server_security_connector
241
241
  tsi_ssl_server_handshaker_options options;
242
242
  options.pem_key_cert_pairs =
243
243
  server_credentials->config().pem_key_cert_pairs;
244
- options.num_key_cert_pairs =
245
- server_credentials->config().num_key_cert_pairs;
246
244
  if (server_credentials->config().pem_root_certs != nullptr) {
247
- options.root_cert_info = std::make_shared<RootCertInfo>(
245
+ options.root_cert_info = std::make_shared<tsi::RootCertInfo>(
248
246
  server_credentials->config().pem_root_certs);
249
247
  }
250
248
  options.client_certificate_request =
@@ -361,10 +359,9 @@ class grpc_ssl_server_security_connector
361
359
  tsi_ssl_server_handshaker_options options;
362
360
  options.pem_key_cert_pairs = grpc_convert_grpc_to_tsi_cert_pairs(
363
361
  config->pem_key_cert_pairs, config->num_key_cert_pairs);
364
- options.num_key_cert_pairs = config->num_key_cert_pairs;
365
362
  if (config->pem_root_certs != nullptr) {
366
363
  options.root_cert_info =
367
- std::make_shared<RootCertInfo>(config->pem_root_certs);
364
+ std::make_shared<tsi::RootCertInfo>(config->pem_root_certs);
368
365
  }
369
366
  options.client_certificate_request =
370
367
  grpc_get_tsi_client_certificate_request_type(
@@ -374,9 +371,6 @@ class grpc_ssl_server_security_connector
374
371
  options.num_alpn_protocols = static_cast<uint16_t>(num_alpn_protocols);
375
372
  tsi_result result = tsi_create_ssl_server_handshaker_factory_with_options(
376
373
  &options, &new_handshaker_factory);
377
- grpc_tsi_ssl_pem_key_cert_pairs_destroy(
378
- const_cast<tsi_ssl_pem_key_cert_pair*>(options.pem_key_cert_pairs),
379
- options.num_key_cert_pairs);
380
374
  gpr_free(alpn_protocol_strings);
381
375
 
382
376
  if (result != TSI_OK) {
@@ -25,12 +25,14 @@
25
25
  #include <grpc/support/port_platform.h>
26
26
  #include <stddef.h>
27
27
 
28
+ #include <vector>
29
+
28
30
  #include "src/core/credentials/transport/security_connector.h"
29
31
  #include "src/core/tsi/ssl_transport_security.h"
30
32
  #include "src/core/util/ref_counted_ptr.h"
31
33
 
32
34
  struct grpc_ssl_config {
33
- tsi_ssl_pem_key_cert_pair* pem_key_cert_pair;
35
+ tsi_ssl_pem_key_cert_pair pem_key_cert_pair;
34
36
  char* pem_root_certs;
35
37
  verify_peer_options verify_options;
36
38
  grpc_tls_version min_tls_version = grpc_tls_version::TLS1_2;
@@ -60,8 +62,7 @@ grpc_ssl_channel_security_connector_create(
60
62
 
61
63
  // Config for ssl servers.
62
64
  struct grpc_ssl_server_config {
63
- tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs = nullptr;
64
- size_t num_key_cert_pairs = 0;
65
+ std::vector<tsi_ssl_pem_key_cert_pair> pem_key_cert_pairs;
65
66
  char* pem_root_certs = nullptr;
66
67
  grpc_ssl_client_certificate_request_type client_certificate_request =
67
68
  GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE;
@@ -20,17 +20,16 @@
20
20
  #include <grpc/grpc_security.h>
21
21
  #include <grpc/support/port_platform.h>
22
22
 
23
- #include "src/core/credentials/transport/tls/spiffe_utils.h"
24
23
  #include "src/core/tsi/ssl_transport_security.h"
25
24
  #include "src/core/util/grpc_check.h"
26
25
  #include "absl/status/status.h"
27
26
 
28
27
  bool grpc_tls_certificate_distributor::CertificateInfo::AreRootsEmpty() {
29
- return IsRootCertInfoEmpty(roots.get());
28
+ return tsi::IsRootCertInfoEmpty(roots.get());
30
29
  }
31
30
 
32
31
  void grpc_tls_certificate_distributor::SetKeyMaterials(
33
- const std::string& cert_name, std::shared_ptr<RootCertInfo> roots,
32
+ const std::string& cert_name, std::shared_ptr<tsi::RootCertInfo> roots,
34
33
  std::optional<grpc_core::PemKeyCertPairList> pem_key_cert_pairs) {
35
34
  GRPC_CHECK(roots != nullptr || pem_key_cert_pairs.has_value());
36
35
  grpc_core::MutexLock lock(&mu_);
@@ -67,7 +66,7 @@ void grpc_tls_certificate_distributor::SetKeyMaterials(
67
66
  const auto watcher_it = watchers_.find(watcher_ptr);
68
67
  GRPC_CHECK(watcher_it != watchers_.end());
69
68
  GRPC_CHECK(watcher_it->second.identity_cert_name.has_value());
70
- std::shared_ptr<RootCertInfo> roots_to_report;
69
+ std::shared_ptr<tsi::RootCertInfo> roots_to_report;
71
70
  if (roots != nullptr && watcher_it->second.root_cert_name == cert_name) {
72
71
  // In this case, We've already sent the credential updates at the time
73
72
  // when checking pem_root_certs, so we will skip here.
@@ -190,7 +189,7 @@ void grpc_tls_certificate_distributor::WatchTlsCertificates(
190
189
  GRPC_CHECK(watcher_it == watchers_.end());
191
190
  watchers_[watcher_ptr] = {std::move(watcher), root_cert_name,
192
191
  identity_cert_name};
193
- std::shared_ptr<RootCertInfo> updated_roots;
192
+ std::shared_ptr<tsi::RootCertInfo> updated_roots;
194
193
  std::optional<grpc_core::PemKeyCertPairList> updated_identity_pairs;
195
194
  grpc_error_handle root_error;
196
195
  grpc_error_handle identity_error;
@@ -336,6 +335,27 @@ void grpc_tls_identity_pairs_add_pair(grpc_tls_identity_pairs* pairs,
336
335
  pairs->pem_key_cert_pairs.emplace_back(private_key, cert_chain);
337
336
  }
338
337
 
338
+ absl::Status grpc_tls_identity_pairs_add_pair_with_signer(
339
+ grpc_tls_identity_pairs* pairs,
340
+ std::shared_ptr<grpc_core::PrivateKeySigner> private_key_signer,
341
+ absl::string_view cert_chain) {
342
+ #ifndef OPENSSL_IS_BORINGSSL
343
+ return absl::UnimplementedError(
344
+ "grpc_tls_identity_pairs_add_pair_with_signer is only supported with "
345
+ "BoringSSL.");
346
+ #else
347
+ if (pairs == nullptr) {
348
+ return absl::InvalidArgumentError("pairs must not be null.");
349
+ }
350
+ if (private_key_signer == nullptr) {
351
+ return absl::InvalidArgumentError("private_key_signer must not be null.");
352
+ }
353
+ pairs->pem_key_cert_pairs.emplace_back(std::move(private_key_signer),
354
+ cert_chain);
355
+ return absl::OkStatus();
356
+ #endif
357
+ }
358
+
339
359
  void grpc_tls_identity_pairs_destroy(grpc_tls_identity_pairs* pairs) {
340
360
  GRPC_CHECK_NE(pairs, nullptr);
341
361
  delete pairs;
@@ -27,20 +27,22 @@
27
27
  #include <string>
28
28
  #include <utility>
29
29
 
30
- #include "src/core/credentials/transport/tls/spiffe_utils.h"
31
30
  #include "src/core/credentials/transport/tls/ssl_utils.h"
32
31
  #include "src/core/lib/iomgr/error.h"
33
32
  #include "src/core/tsi/ssl_transport_security.h"
34
33
  #include "src/core/util/ref_counted.h"
35
34
  #include "src/core/util/sync.h"
36
35
  #include "absl/base/thread_annotations.h"
37
- #include "absl/strings/string_view.h"
38
36
 
39
37
  struct grpc_tls_identity_pairs {
40
38
  grpc_core::PemKeyCertPairList pem_key_cert_pairs;
41
39
  };
42
40
 
43
41
  // TLS certificate distributor.
42
+ // TODO(anasalazar): Since there are no use-cases where we need to update root
43
+ // and identity certs as an atomic unit, the flow of the certs through the cert
44
+ // providers and to the TLS security connector can be greatly simplified. We may
45
+ // even be able to remove the distributor code completely.
44
46
  struct grpc_tls_certificate_distributor
45
47
  : public grpc_core::RefCounted<grpc_tls_certificate_distributor> {
46
48
  public:
@@ -59,7 +61,7 @@ struct grpc_tls_certificate_distributor
59
61
  // @param key_cert_pairs the contents of the reloaded identity key-cert
60
62
  // pairs.
61
63
  virtual void OnCertificatesChanged(
62
- std::shared_ptr<RootCertInfo> roots,
64
+ std::shared_ptr<tsi::RootCertInfo> roots,
63
65
  std::optional<grpc_core::PemKeyCertPairList> key_cert_pairs) = 0;
64
66
 
65
67
  // Handles an error that occurs while attempting to fetch certificate data.
@@ -87,7 +89,7 @@ struct grpc_tls_certificate_distributor
87
89
  // the SpiffeBundleMap.
88
90
  // @param pem_key_cert_pairs The content of identity key-cert pairs.
89
91
  void SetKeyMaterials(
90
- const std::string& cert_name, std::shared_ptr<RootCertInfo> roots,
92
+ const std::string& cert_name, std::shared_ptr<tsi::RootCertInfo> roots,
91
93
  std::optional<grpc_core::PemKeyCertPairList> pem_key_cert_pairs);
92
94
 
93
95
  bool HasRootCerts(const std::string& root_cert_name);
@@ -174,7 +176,7 @@ struct grpc_tls_certificate_distributor
174
176
  // root certs, while pem_root_certs still contains the valid old data.
175
177
  struct CertificateInfo {
176
178
  // The contents of the root certificates.
177
- std::shared_ptr<RootCertInfo> roots;
179
+ std::shared_ptr<tsi::RootCertInfo> roots;
178
180
  // The contents of the identity key-certificate pairs.
179
181
  grpc_core::PemKeyCertPairList pem_key_cert_pairs;
180
182
  // TODO(gtcooke94) Swap to using absl::StatusOr<>