grpc 1.37.1 → 1.40.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (738) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +112 -59
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/endpoint_config.h +48 -0
  5. data/include/grpc/event_engine/event_engine.h +330 -0
  6. data/include/grpc/event_engine/port.h +41 -0
  7. data/include/grpc/event_engine/slice_allocator.h +66 -0
  8. data/include/grpc/grpc.h +11 -4
  9. data/include/grpc/grpc_security.h +32 -0
  10. data/include/grpc/grpc_security_constants.h +15 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +44 -19
  12. data/include/grpc/impl/codegen/port_platform.h +46 -0
  13. data/include/grpc/module.modulemap +14 -14
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  16. data/src/core/ext/filters/client_channel/client_channel.cc +975 -3282
  17. data/src/core/ext/filters/client_channel/client_channel.h +513 -55
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +20 -7
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +53 -51
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -23
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +16 -16
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +734 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -17
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +17 -20
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +53 -65
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +36 -44
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +33 -55
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +151 -163
  43. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -16
  44. data/src/core/ext/filters/client_channel/lb_policy.h +70 -46
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  46. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
  63. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +158 -102
  65. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  68. data/src/core/ext/filters/client_channel/retry_filter.cc +2598 -0
  69. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  70. data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
  71. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  72. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  73. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  74. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  75. data/src/core/ext/filters/client_channel/service_config_call_data.h +45 -5
  76. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  77. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  78. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  79. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  80. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  81. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  82. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  83. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  84. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  85. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  86. data/src/core/ext/filters/http/client/http_client_filter.cc +33 -23
  87. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  88. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  89. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  90. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  91. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  92. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  93. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  94. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  95. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  96. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  97. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  98. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
  99. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +49 -46
  101. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  102. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  103. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
  104. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +1 -1
  106. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
  107. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
  108. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +141 -126
  109. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  110. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  111. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  112. data/src/core/ext/transport/chttp2/transport/flow_control.h +9 -9
  113. data/src/core/ext/transport/chttp2/transport/frame_data.cc +12 -12
  114. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +15 -16
  116. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  118. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  120. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +11 -10
  122. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  124. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +652 -736
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  131. data/src/core/ext/transport/chttp2/transport/internal.h +33 -28
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +129 -106
  133. data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
  136. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +56 -35
  137. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +180 -76
  138. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -27
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +97 -48
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +45 -9
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +67 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +66 -9
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +227 -0
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
  149. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +32 -24
  150. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -73
  151. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +4 -2
  152. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +15 -0
  153. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  154. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
  155. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +8 -6
  156. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +27 -19
  157. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +1 -0
  158. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -7
  159. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +57 -0
  160. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +29 -17
  161. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +72 -0
  162. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +3 -2
  163. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
  164. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -5
  165. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +15 -11
  166. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +85 -43
  167. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +274 -91
  168. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +11 -8
  169. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +30 -13
  170. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -5
  171. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +115 -0
  172. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  173. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
  174. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +1 -0
  175. data/src/core/ext/upb-generated/validate/validate.upb.c +82 -66
  176. data/src/core/ext/upb-generated/validate/validate.upb.h +220 -124
  177. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
  178. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +53 -52
  179. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +318 -277
  180. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -0
  181. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +437 -410
  182. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +198 -170
  183. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  184. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +9 -8
  185. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +219 -163
  186. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +15 -0
  187. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  188. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  189. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +29 -25
  190. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  191. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  192. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +135 -125
  193. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  194. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +131 -123
  195. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  196. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  197. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +32 -24
  198. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -55
  199. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
  200. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +684 -664
  201. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
  202. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +13 -10
  203. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +13 -10
  204. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +441 -375
  205. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
  206. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +122 -114
  207. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +1 -1
  208. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +112 -79
  209. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +5 -0
  210. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  211. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  212. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
  213. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
  214. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -160
  215. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  216. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  217. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  218. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  219. data/src/core/ext/xds/xds_api.cc +665 -317
  220. data/src/core/ext/xds/xds_api.h +52 -14
  221. data/src/core/ext/xds/xds_bootstrap.cc +101 -160
  222. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  223. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  224. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  225. data/src/core/ext/xds/xds_channel_args.h +5 -2
  226. data/src/core/ext/xds/xds_client.cc +370 -215
  227. data/src/core/ext/xds/xds_client.h +38 -28
  228. data/src/core/ext/xds/xds_client_stats.h +3 -2
  229. data/src/core/ext/xds/xds_http_filters.cc +3 -2
  230. data/src/core/ext/xds/xds_http_filters.h +3 -0
  231. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  232. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  233. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  234. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
  235. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
  236. data/src/core/lib/channel/call_tracer.h +85 -0
  237. data/src/core/lib/channel/channel_stack.cc +10 -9
  238. data/src/core/lib/channel/channel_stack.h +11 -10
  239. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  240. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  241. data/src/core/lib/channel/channelz.cc +21 -13
  242. data/src/core/lib/channel/channelz.h +3 -0
  243. data/src/core/lib/channel/connected_channel.cc +4 -4
  244. data/src/core/lib/channel/context.h +3 -0
  245. data/src/core/lib/channel/handshaker.cc +7 -6
  246. data/src/core/lib/channel/handshaker.h +5 -5
  247. data/src/core/lib/channel/status_util.h +4 -0
  248. data/src/core/lib/compression/stream_compression.h +1 -1
  249. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  250. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  251. data/src/core/lib/debug/stats.h +1 -1
  252. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  253. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  254. data/src/core/lib/event_engine/event_engine.cc +50 -0
  255. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  256. data/src/core/lib/event_engine/sockaddr.h +44 -0
  257. data/src/core/lib/gpr/murmur_hash.cc +4 -2
  258. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  259. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  260. data/src/core/lib/gprpp/orphanable.h +3 -3
  261. data/src/core/lib/gprpp/ref_counted.h +28 -14
  262. data/src/core/lib/gprpp/status_helper.cc +407 -0
  263. data/src/core/lib/gprpp/status_helper.h +183 -0
  264. data/src/core/lib/gprpp/sync.h +2 -30
  265. data/src/core/lib/http/httpcli.cc +11 -11
  266. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  267. data/src/core/lib/http/parser.cc +16 -16
  268. data/src/core/lib/http/parser.h +4 -4
  269. data/src/core/lib/iomgr/buffer_list.cc +8 -10
  270. data/src/core/lib/iomgr/buffer_list.h +4 -5
  271. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  272. data/src/core/lib/iomgr/call_combiner.h +12 -14
  273. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  274. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  275. data/src/core/lib/iomgr/closure.h +7 -6
  276. data/src/core/lib/iomgr/combiner.cc +14 -12
  277. data/src/core/lib/iomgr/combiner.h +2 -2
  278. data/src/core/lib/iomgr/endpoint.cc +1 -1
  279. data/src/core/lib/iomgr/endpoint.h +2 -2
  280. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  281. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  282. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  283. data/src/core/lib/iomgr/error.cc +168 -61
  284. data/src/core/lib/iomgr/error.h +217 -106
  285. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  286. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  287. data/src/core/lib/iomgr/error_internal.h +5 -1
  288. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  289. data/src/core/lib/iomgr/ev_apple.h +1 -1
  290. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  291. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  292. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  293. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  294. data/src/core/lib/iomgr/ev_posix.h +9 -9
  295. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  296. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  297. data/src/core/lib/iomgr/event_engine/endpoint.cc +192 -0
  298. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  299. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  300. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  301. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  302. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  303. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  304. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  305. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  306. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  307. data/src/core/lib/iomgr/event_engine/tcp.cc +263 -0
  308. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  309. data/src/core/lib/iomgr/exec_ctx.cc +12 -4
  310. data/src/core/lib/iomgr/exec_ctx.h +4 -5
  311. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  312. data/src/core/lib/iomgr/executor/threadpool.h +2 -2
  313. data/src/core/lib/iomgr/executor.cc +8 -8
  314. data/src/core/lib/iomgr/executor.h +2 -2
  315. data/src/core/lib/iomgr/iomgr.cc +2 -2
  316. data/src/core/lib/iomgr/iomgr.h +1 -1
  317. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  318. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  319. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  320. data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
  321. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
  322. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  323. data/src/core/lib/iomgr/load_file.cc +4 -4
  324. data/src/core/lib/iomgr/load_file.h +2 -2
  325. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  326. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  327. data/src/core/lib/iomgr/pollset.cc +5 -5
  328. data/src/core/lib/iomgr/pollset.h +9 -9
  329. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  330. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  331. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  332. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  333. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  334. data/src/core/lib/iomgr/port.h +7 -5
  335. data/src/core/lib/iomgr/python_util.h +2 -2
  336. data/src/core/lib/iomgr/resolve_address.cc +8 -4
  337. data/src/core/lib/iomgr/resolve_address.h +12 -6
  338. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  339. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  340. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  341. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  342. data/src/core/lib/iomgr/resource_quota.cc +13 -10
  343. data/src/core/lib/iomgr/sockaddr.h +1 -0
  344. data/src/core/lib/iomgr/socket_mutator.cc +15 -2
  345. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  346. data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
  347. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  348. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  349. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  350. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
  351. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  352. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  353. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  354. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  355. data/src/core/lib/iomgr/tcp_posix.cc +78 -73
  356. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  357. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  358. data/src/core/lib/iomgr/tcp_server.h +12 -11
  359. data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
  360. data/src/core/lib/iomgr/tcp_server_posix.cc +29 -21
  361. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  362. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
  363. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  364. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  365. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  366. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  367. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  368. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  369. data/src/core/lib/iomgr/timer.h +6 -1
  370. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  371. data/src/core/lib/iomgr/timer_custom.h +1 -1
  372. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  373. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  374. data/src/core/lib/iomgr/udp_server.cc +21 -20
  375. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  376. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  377. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  378. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  379. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  380. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  381. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  382. data/src/core/lib/iomgr/work_serializer.h +17 -1
  383. data/src/core/lib/json/json.h +1 -1
  384. data/src/core/lib/json/json_reader.cc +5 -6
  385. data/src/core/lib/matchers/matchers.cc +46 -58
  386. data/src/core/lib/matchers/matchers.h +30 -29
  387. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  388. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  389. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  390. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  391. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  392. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  393. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  394. data/src/core/lib/security/credentials/credentials.h +2 -2
  395. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  396. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  397. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  398. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  399. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  400. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  401. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  402. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  403. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  404. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  405. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  406. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  407. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
  408. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  409. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  410. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  411. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  412. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  413. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  414. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  415. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  416. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  417. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  418. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  419. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  420. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +68 -13
  421. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -0
  422. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  423. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  424. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  425. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  426. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  427. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  428. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  429. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  430. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  431. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
  432. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  433. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  434. data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
  435. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  436. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +60 -76
  437. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  438. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  439. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  440. data/src/core/lib/security/transport/security_handshaker.cc +45 -36
  441. data/src/core/lib/security/transport/server_auth_filter.cc +17 -18
  442. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  443. data/src/core/lib/security/transport/tsi_error.h +2 -1
  444. data/src/core/lib/security/util/json_util.cc +2 -2
  445. data/src/core/lib/security/util/json_util.h +1 -1
  446. data/src/core/lib/slice/slice_internal.h +1 -0
  447. data/src/core/lib/surface/call.cc +72 -52
  448. data/src/core/lib/surface/call.h +13 -2
  449. data/src/core/lib/surface/channel.cc +6 -6
  450. data/src/core/lib/surface/channel.h +3 -2
  451. data/src/core/lib/surface/channel_ping.cc +1 -1
  452. data/src/core/lib/surface/completion_queue.cc +68 -69
  453. data/src/core/lib/surface/completion_queue.h +3 -2
  454. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  455. data/src/core/lib/surface/init.cc +1 -3
  456. data/src/core/lib/surface/init.h +10 -1
  457. data/src/core/lib/surface/lame_client.cc +11 -11
  458. data/src/core/lib/surface/lame_client.h +1 -1
  459. data/src/core/lib/surface/server.cc +31 -23
  460. data/src/core/lib/surface/server.h +19 -18
  461. data/src/core/lib/surface/validate_metadata.cc +7 -7
  462. data/src/core/lib/surface/validate_metadata.h +3 -2
  463. data/src/core/lib/surface/version.cc +2 -2
  464. data/src/core/lib/transport/byte_stream.cc +5 -5
  465. data/src/core/lib/transport/byte_stream.h +8 -8
  466. data/src/core/lib/transport/connectivity_state.cc +1 -1
  467. data/src/core/lib/transport/error_utils.cc +21 -10
  468. data/src/core/lib/transport/error_utils.h +11 -5
  469. data/src/core/lib/transport/metadata_batch.cc +37 -37
  470. data/src/core/lib/transport/metadata_batch.h +19 -18
  471. data/src/core/lib/transport/transport.cc +4 -3
  472. data/src/core/lib/transport/transport.h +6 -4
  473. data/src/core/lib/transport/transport_op_string.cc +6 -6
  474. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  475. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  476. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  477. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  478. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  479. data/src/core/tsi/ssl_transport_security.cc +32 -14
  480. data/src/core/tsi/ssl_transport_security.h +3 -4
  481. data/src/ruby/bin/math_services_pb.rb +1 -1
  482. data/src/ruby/ext/grpc/extconf.rb +2 -0
  483. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
  484. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
  485. data/src/ruby/lib/grpc/version.rb +1 -1
  486. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  487. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  488. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  489. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  490. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  491. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  492. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  493. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  494. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  495. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  496. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  497. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  498. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  499. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  500. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  501. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  502. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  503. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  504. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  505. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  506. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  507. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  508. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  509. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  510. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  511. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  512. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  513. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  514. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  515. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  516. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  517. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  518. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  519. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  520. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  521. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  522. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  523. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  524. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  525. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  526. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  527. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  528. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  529. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  530. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  531. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  532. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  533. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  534. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  535. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  536. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  537. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  538. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  539. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  540. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  541. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  542. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  543. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  544. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  545. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  546. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  547. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  548. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  549. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  550. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  551. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  552. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  553. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  554. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  555. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  556. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  557. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  558. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  559. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  560. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  561. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  562. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  563. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  564. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  565. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  566. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  567. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  568. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  569. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  570. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  571. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  572. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  573. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  574. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  575. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  576. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  577. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  578. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  579. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  580. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  581. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  582. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  583. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  584. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  585. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  586. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  587. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  588. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  589. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  590. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  591. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  592. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  593. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  594. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  595. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  596. data/third_party/boringssl-with-bazel/err_data.c +483 -461
  597. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  598. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
  599. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  600. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  601. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  602. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  603. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  604. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  605. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  606. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  607. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  608. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  609. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  610. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  611. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  612. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  613. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  614. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  615. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  616. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  617. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
  618. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  619. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  620. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  621. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  622. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  623. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  624. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  625. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  626. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  627. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  628. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  629. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  630. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  631. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  632. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  633. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
  634. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
  635. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  636. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
  637. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
  638. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  639. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  640. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  641. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  642. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  643. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
  644. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  645. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  646. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  647. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  648. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  649. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  650. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  651. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  652. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  653. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  654. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  655. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  656. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  657. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  658. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  659. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  660. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  661. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
  662. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  663. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
  664. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  665. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  666. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
  667. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  668. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  669. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  670. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  671. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  672. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  673. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  674. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
  675. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  676. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  677. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  678. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
  679. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  680. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  681. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  682. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
  683. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
  684. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  685. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  686. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  687. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
  688. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  689. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  690. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  691. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
  692. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  693. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  694. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  695. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  696. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  697. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  698. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  699. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
  700. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
  701. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
  702. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  703. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
  704. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  705. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  706. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  707. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  708. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
  709. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
  710. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
  711. data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
  712. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  713. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  714. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  715. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  716. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  717. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
  718. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  719. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
  720. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  721. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
  722. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  723. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
  724. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
  725. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
  726. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
  727. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
  728. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  729. data/third_party/xxhash/xxhash.h +77 -195
  730. metadata +116 -51
  731. data/src/core/lib/gpr/arena.h +0 -47
  732. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  733. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  734. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  735. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  736. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  737. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  738. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -38,6 +38,7 @@
38
38
  #include "src/core/ext/xds/xds_bootstrap.h"
39
39
  #include "src/core/ext/xds/xds_client_stats.h"
40
40
  #include "src/core/ext/xds/xds_http_filters.h"
41
+ #include "src/core/lib/channel/status_util.h"
41
42
  #include "src/core/lib/matchers/matchers.h"
42
43
 
43
44
  namespace grpc_core {
@@ -109,10 +110,34 @@ class XdsApi {
109
110
  bool operator==(const HashPolicy& other) const;
110
111
  std::string ToString() const;
111
112
  };
112
-
113
113
  Matchers matchers;
114
114
  std::vector<HashPolicy> hash_policies;
115
115
 
116
+ struct RetryPolicy {
117
+ internal::StatusCodeSet retry_on;
118
+ uint32_t num_retries;
119
+
120
+ struct RetryBackOff {
121
+ Duration base_interval;
122
+ Duration max_interval;
123
+
124
+ bool operator==(const RetryBackOff& other) const {
125
+ return base_interval == other.base_interval &&
126
+ max_interval == other.max_interval;
127
+ }
128
+ std::string ToString() const;
129
+ };
130
+ RetryBackOff retry_back_off;
131
+
132
+ bool operator==(const RetryPolicy& other) const {
133
+ return (retry_on == other.retry_on &&
134
+ num_retries == other.num_retries &&
135
+ retry_back_off == other.retry_back_off);
136
+ }
137
+ std::string ToString() const;
138
+ };
139
+ absl::optional<RetryPolicy> retry_policy;
140
+
116
141
  // Action for this route.
117
142
  // TODO(roth): When we can use absl::variant<>, consider using that
118
143
  // here, to enforce the fact that only one of the two fields can be set.
@@ -139,6 +164,7 @@ class XdsApi {
139
164
 
140
165
  bool operator==(const Route& other) const {
141
166
  return matchers == other.matchers && cluster_name == other.cluster_name &&
167
+ retry_policy == other.retry_policy &&
142
168
  weighted_clusters == other.weighted_clusters &&
143
169
  max_stream_duration == other.max_stream_duration &&
144
170
  typed_per_filter_config == other.typed_per_filter_config;
@@ -399,34 +425,42 @@ class XdsApi {
399
425
  // The name to use in the EDS request.
400
426
  // If empty, the cluster name will be used.
401
427
  std::string eds_service_name;
428
+ // For cluster type LOGICAL_DNS.
429
+ // The hostname to lookup in DNS.
430
+ std::string dns_hostname;
431
+ // For cluster type AGGREGATE.
432
+ // The prioritized list of cluster names.
433
+ std::vector<std::string> prioritized_cluster_names;
434
+
402
435
  // Tls Context used by clients
403
436
  CommonTlsContext common_tls_context;
437
+
404
438
  // The LRS server to use for load reporting.
405
439
  // If not set, load reporting will be disabled.
406
440
  // If set to the empty string, will use the same server we obtained the CDS
407
441
  // data from.
408
442
  absl::optional<std::string> lrs_load_reporting_server_name;
443
+
409
444
  // The LB policy to use (e.g., "ROUND_ROBIN" or "RING_HASH").
410
445
  std::string lb_policy;
411
446
  // Used for RING_HASH LB policy only.
412
447
  uint64_t min_ring_size = 1024;
413
448
  uint64_t max_ring_size = 8388608;
414
- enum HashFunction { XX_HASH, MURMUR_HASH_2 };
415
- HashFunction hash_function;
416
449
  // Maximum number of outstanding requests can be made to the upstream
417
450
  // cluster.
418
451
  uint32_t max_concurrent_requests = 1024;
419
- // For cluster type AGGREGATE.
420
- // The prioritized list of cluster names.
421
- std::vector<std::string> prioritized_cluster_names;
422
452
 
423
453
  bool operator==(const CdsUpdate& other) const {
424
454
  return cluster_type == other.cluster_type &&
425
455
  eds_service_name == other.eds_service_name &&
456
+ dns_hostname == other.dns_hostname &&
457
+ prioritized_cluster_names == other.prioritized_cluster_names &&
426
458
  common_tls_context == other.common_tls_context &&
427
459
  lrs_load_reporting_server_name ==
428
460
  other.lrs_load_reporting_server_name &&
429
- prioritized_cluster_names == other.prioritized_cluster_names &&
461
+ lb_policy == other.lb_policy &&
462
+ min_ring_size == other.min_ring_size &&
463
+ max_ring_size == other.max_ring_size &&
430
464
  max_concurrent_requests == other.max_concurrent_requests;
431
465
  }
432
466
 
@@ -609,7 +643,7 @@ class XdsApi {
609
643
  // Otherwise, one of the *_update_map fields will be populated, based
610
644
  // on the type_url field.
611
645
  struct AdsParseResult {
612
- grpc_error* parse_error = GRPC_ERROR_NONE;
646
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
613
647
  std::string version;
614
648
  std::string nonce;
615
649
  std::string type_url;
@@ -620,7 +654,8 @@ class XdsApi {
620
654
  std::set<std::string> resource_names_failed;
621
655
  };
622
656
 
623
- XdsApi(XdsClient* client, TraceFlag* tracer, const XdsBootstrap::Node* node);
657
+ XdsApi(XdsClient* client, TraceFlag* tracer, const XdsBootstrap::Node* node,
658
+ const CertificateProviderStore::PluginDefinitionMap* map);
624
659
 
625
660
  // Creates an ADS request.
626
661
  // Takes ownership of \a error.
@@ -628,7 +663,7 @@ class XdsApi {
628
663
  const std::string& type_url,
629
664
  const std::set<absl::string_view>& resource_names,
630
665
  const std::string& version,
631
- const std::string& nonce, grpc_error* error,
666
+ const std::string& nonce, grpc_error_handle error,
632
667
  bool populate_node);
633
668
 
634
669
  // Parses an ADS response.
@@ -648,10 +683,10 @@ class XdsApi {
648
683
  // Parses the LRS response and returns \a
649
684
  // load_reporting_interval for client-side load reporting. If there is any
650
685
  // error, the output config is invalid.
651
- grpc_error* ParseLrsResponse(const grpc_slice& encoded_response,
652
- bool* send_all_clusters,
653
- std::set<std::string>* cluster_names,
654
- grpc_millis* load_reporting_interval);
686
+ grpc_error_handle ParseLrsResponse(const grpc_slice& encoded_response,
687
+ bool* send_all_clusters,
688
+ std::set<std::string>* cluster_names,
689
+ grpc_millis* load_reporting_interval);
655
690
 
656
691
  // Assemble the client config proto message and return the serialized result.
657
692
  std::string AssembleClientConfig(
@@ -661,9 +696,12 @@ class XdsApi {
661
696
  XdsClient* client_;
662
697
  TraceFlag* tracer_;
663
698
  const XdsBootstrap::Node* node_; // Do not own.
699
+ const CertificateProviderStore::PluginDefinitionMap*
700
+ certificate_provider_definition_map_; // Do not own.
664
701
  upb::SymbolTable symtab_;
665
702
  const std::string build_version_;
666
703
  const std::string user_agent_name_;
704
+ const std::string user_agent_version_;
667
705
  };
668
706
 
669
707
  } // namespace grpc_core
@@ -30,7 +30,6 @@
30
30
 
31
31
  #include "src/core/ext/xds/certificate_provider_registry.h"
32
32
  #include "src/core/ext/xds/xds_api.h"
33
- #include "src/core/lib/gpr/env.h"
34
33
  #include "src/core/lib/gpr/string.h"
35
34
  #include "src/core/lib/iomgr/load_file.h"
36
35
  #include "src/core/lib/security/credentials/credentials.h"
@@ -81,142 +80,27 @@ bool XdsBootstrap::XdsServer::ShouldUseV3() const {
81
80
  // XdsBootstrap
82
81
  //
83
82
 
84
- namespace {
85
-
86
- std::string BootstrapString(const XdsBootstrap& bootstrap) {
87
- std::vector<std::string> parts;
88
- if (bootstrap.node() != nullptr) {
89
- parts.push_back(absl::StrFormat(
90
- "node={\n"
91
- " id=\"%s\",\n"
92
- " cluster=\"%s\",\n"
93
- " locality={\n"
94
- " region=\"%s\",\n"
95
- " zone=\"%s\",\n"
96
- " sub_zone=\"%s\"\n"
97
- " },\n"
98
- " metadata=%s,\n"
99
- "},\n",
100
- bootstrap.node()->id, bootstrap.node()->cluster,
101
- bootstrap.node()->locality_region, bootstrap.node()->locality_zone,
102
- bootstrap.node()->locality_sub_zone,
103
- bootstrap.node()->metadata.Dump()));
104
- }
105
- parts.push_back(absl::StrFormat(
106
- "servers=[\n"
107
- " {\n"
108
- " uri=\"%s\",\n"
109
- " creds_type=%s,\n",
110
- bootstrap.server().server_uri, bootstrap.server().channel_creds_type));
111
- if (bootstrap.server().channel_creds_config.type() != Json::Type::JSON_NULL) {
112
- parts.push_back(
113
- absl::StrFormat(" creds_config=%s,",
114
- bootstrap.server().channel_creds_config.Dump()));
115
- }
116
- if (!bootstrap.server().server_features.empty()) {
117
- parts.push_back(absl::StrCat(
118
- " server_features=[",
119
- absl::StrJoin(bootstrap.server().server_features, ", "), "],\n"));
120
- }
121
- parts.push_back(" }\n],\n");
122
- if (!bootstrap.server_listener_resource_name_template().empty()) {
123
- parts.push_back(
124
- absl::StrFormat("server_listener_resource_name_template=\"%s\",\n",
125
- bootstrap.server_listener_resource_name_template()));
126
- }
127
- parts.push_back("certificate_providers={\n");
128
- for (const auto& entry : bootstrap.certificate_providers()) {
129
- parts.push_back(
130
- absl::StrFormat(" %s={\n"
131
- " plugin_name=%s\n"
132
- " config=%s\n"
133
- " },\n",
134
- entry.first, entry.second.plugin_name,
135
- entry.second.config->ToString()));
136
- }
137
- parts.push_back("}");
138
- return absl::StrJoin(parts, "");
139
- }
140
-
141
- std::unique_ptr<XdsBootstrap> ParseJsonAndCreate(
142
- XdsClient* client, TraceFlag* tracer, absl::string_view json_string,
143
- absl::string_view bootstrap_source, grpc_error** error) {
83
+ std::unique_ptr<XdsBootstrap> XdsBootstrap::Create(
84
+ absl::string_view json_string, grpc_error_handle* error) {
144
85
  Json json = Json::Parse(json_string, error);
145
86
  if (*error != GRPC_ERROR_NONE) {
146
- grpc_error* error_out = GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
147
- absl::StrCat("Failed to parse bootstrap from ", bootstrap_source)
148
- .c_str(),
149
- error, 1);
87
+ grpc_error_handle error_out =
88
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
89
+ "Failed to parse bootstrap JSON string", error, 1);
150
90
  GRPC_ERROR_UNREF(*error);
151
91
  *error = error_out;
152
92
  return nullptr;
153
93
  }
154
- std::unique_ptr<XdsBootstrap> result =
155
- absl::make_unique<XdsBootstrap>(std::move(json), error);
156
- if (*error == GRPC_ERROR_NONE && GRPC_TRACE_FLAG_ENABLED(*tracer)) {
157
- gpr_log(GPR_INFO,
158
- "[xds_client %p] Bootstrap config for creating xds client:\n%s",
159
- client, BootstrapString(*result).c_str());
160
- }
161
- return result;
162
- }
163
-
164
- } // namespace
165
-
166
- std::unique_ptr<XdsBootstrap> XdsBootstrap::Create(XdsClient* client,
167
- TraceFlag* tracer,
168
- const char* fallback_config,
169
- grpc_error** error) {
170
- // First, try GRPC_XDS_BOOTSTRAP env var.
171
- grpc_core::UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
172
- if (path != nullptr) {
173
- if (GRPC_TRACE_FLAG_ENABLED(*tracer)) {
174
- gpr_log(GPR_INFO,
175
- "[xds_client %p] Got bootstrap file location from "
176
- "GRPC_XDS_BOOTSTRAP environment variable: %s",
177
- client, path.get());
178
- }
179
- grpc_slice contents;
180
- *error =
181
- grpc_load_file(path.get(), /*add_null_terminator=*/true, &contents);
182
- if (*error != GRPC_ERROR_NONE) return nullptr;
183
- absl::string_view contents_str_view = StringViewFromSlice(contents);
184
- if (GRPC_TRACE_FLAG_ENABLED(*tracer)) {
185
- gpr_log(GPR_DEBUG, "[xds_client %p] Bootstrap file contents: %s", client,
186
- std::string(contents_str_view).c_str());
187
- }
188
- std::string bootstrap_source = absl::StrCat("file ", path.get());
189
- auto result = ParseJsonAndCreate(client, tracer, contents_str_view,
190
- bootstrap_source, error);
191
- grpc_slice_unref_internal(contents);
192
- return result;
193
- }
194
- // Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
195
- grpc_core::UniquePtr<char> env_config(
196
- gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
197
- if (env_config != nullptr) {
198
- return ParseJsonAndCreate(client, tracer, env_config.get(),
199
- "GRPC_XDS_BOOTSTRAP_CONFIG env var", error);
200
- }
201
- // Finally, try fallback config.
202
- if (fallback_config != nullptr) {
203
- return ParseJsonAndCreate(client, tracer, fallback_config,
204
- "fallback config", error);
205
- }
206
- // No bootstrap config found.
207
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
208
- "Environment variables GRPC_XDS_BOOTSTRAP or GRPC_XDS_BOOTSTRAP_CONFIG "
209
- "not defined");
210
- return nullptr;
94
+ return absl::make_unique<XdsBootstrap>(std::move(json), error);
211
95
  }
212
96
 
213
- XdsBootstrap::XdsBootstrap(Json json, grpc_error** error) {
97
+ XdsBootstrap::XdsBootstrap(Json json, grpc_error_handle* error) {
214
98
  if (json.type() != Json::Type::OBJECT) {
215
99
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
216
100
  "malformed JSON in bootstrap file");
217
101
  return;
218
102
  }
219
- std::vector<grpc_error*> error_list;
103
+ std::vector<grpc_error_handle> error_list;
220
104
  auto it = json.mutable_object()->find("xds_servers");
221
105
  if (it == json.mutable_object()->end()) {
222
106
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -225,7 +109,7 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error** error) {
225
109
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
226
110
  "\"xds_servers\" field is not an array"));
227
111
  } else {
228
- grpc_error* parse_error = ParseXdsServerList(&it->second);
112
+ grpc_error_handle parse_error = ParseXdsServerList(&it->second);
229
113
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
230
114
  }
231
115
  it = json.mutable_object()->find("node");
@@ -234,7 +118,7 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error** error) {
234
118
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
235
119
  "\"node\" field is not an object"));
236
120
  } else {
237
- grpc_error* parse_error = ParseNode(&it->second);
121
+ grpc_error_handle parse_error = ParseNode(&it->second);
238
122
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
239
123
  }
240
124
  }
@@ -255,7 +139,7 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error** error) {
255
139
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
256
140
  "\"certificate_providers\" field is not an object"));
257
141
  } else {
258
- grpc_error* parse_error = ParseCertificateProviders(&it->second);
142
+ grpc_error_handle parse_error = ParseCertificateProviders(&it->second);
259
143
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
260
144
  }
261
145
  }
@@ -264,15 +148,15 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error** error) {
264
148
  &error_list);
265
149
  }
266
150
 
267
- grpc_error* XdsBootstrap::ParseXdsServerList(Json* json) {
268
- std::vector<grpc_error*> error_list;
151
+ grpc_error_handle XdsBootstrap::ParseXdsServerList(Json* json) {
152
+ std::vector<grpc_error_handle> error_list;
269
153
  for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
270
154
  Json& child = json->mutable_array()->at(i);
271
155
  if (child.type() != Json::Type::OBJECT) {
272
156
  error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
273
157
  absl::StrCat("array element ", i, " is not an object").c_str()));
274
158
  } else {
275
- grpc_error* parse_error = ParseXdsServer(&child, i);
159
+ grpc_error_handle parse_error = ParseXdsServer(&child, i);
276
160
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
277
161
  }
278
162
  }
@@ -280,8 +164,8 @@ grpc_error* XdsBootstrap::ParseXdsServerList(Json* json) {
280
164
  &error_list);
281
165
  }
282
166
 
283
- grpc_error* XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
284
- std::vector<grpc_error*> error_list;
167
+ grpc_error_handle XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
168
+ std::vector<grpc_error_handle> error_list;
285
169
  servers_.emplace_back();
286
170
  XdsServer& server = servers_[servers_.size() - 1];
287
171
  auto it = json->mutable_object()->find("server_uri");
@@ -302,7 +186,8 @@ grpc_error* XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
302
186
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
303
187
  "\"channel_creds\" field is not an array"));
304
188
  } else {
305
- grpc_error* parse_error = ParseChannelCredsArray(&it->second, &server);
189
+ grpc_error_handle parse_error =
190
+ ParseChannelCredsArray(&it->second, &server);
306
191
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
307
192
  }
308
193
  it = json->mutable_object()->find("server_features");
@@ -311,14 +196,15 @@ grpc_error* XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
311
196
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
312
197
  "\"server_features\" field is not an array"));
313
198
  } else {
314
- grpc_error* parse_error = ParseServerFeaturesArray(&it->second, &server);
199
+ grpc_error_handle parse_error =
200
+ ParseServerFeaturesArray(&it->second, &server);
315
201
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
316
202
  }
317
203
  }
318
204
  // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
319
205
  // string is not static in this case.
320
206
  if (error_list.empty()) return GRPC_ERROR_NONE;
321
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
207
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
322
208
  absl::StrCat("errors parsing index ", idx).c_str());
323
209
  for (size_t i = 0; i < error_list.size(); ++i) {
324
210
  error = grpc_error_add_child(error, error_list[i]);
@@ -326,16 +212,16 @@ grpc_error* XdsBootstrap::ParseXdsServer(Json* json, size_t idx) {
326
212
  return error;
327
213
  }
328
214
 
329
- grpc_error* XdsBootstrap::ParseChannelCredsArray(Json* json,
330
- XdsServer* server) {
331
- std::vector<grpc_error*> error_list;
215
+ grpc_error_handle XdsBootstrap::ParseChannelCredsArray(Json* json,
216
+ XdsServer* server) {
217
+ std::vector<grpc_error_handle> error_list;
332
218
  for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
333
219
  Json& child = json->mutable_array()->at(i);
334
220
  if (child.type() != Json::Type::OBJECT) {
335
221
  error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
336
222
  absl::StrCat("array element ", i, " is not an object").c_str()));
337
223
  } else {
338
- grpc_error* parse_error = ParseChannelCreds(&child, i, server);
224
+ grpc_error_handle parse_error = ParseChannelCreds(&child, i, server);
339
225
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
340
226
  }
341
227
  }
@@ -347,9 +233,9 @@ grpc_error* XdsBootstrap::ParseChannelCredsArray(Json* json,
347
233
  &error_list);
348
234
  }
349
235
 
350
- grpc_error* XdsBootstrap::ParseChannelCreds(Json* json, size_t idx,
351
- XdsServer* server) {
352
- std::vector<grpc_error*> error_list;
236
+ grpc_error_handle XdsBootstrap::ParseChannelCreds(Json* json, size_t idx,
237
+ XdsServer* server) {
238
+ std::vector<grpc_error_handle> error_list;
353
239
  std::string type;
354
240
  auto it = json->mutable_object()->find("type");
355
241
  if (it == json->mutable_object()->end()) {
@@ -385,7 +271,7 @@ grpc_error* XdsBootstrap::ParseChannelCreds(Json* json, size_t idx,
385
271
  // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
386
272
  // string is not static in this case.
387
273
  if (error_list.empty()) return GRPC_ERROR_NONE;
388
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
274
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
389
275
  absl::StrCat("errors parsing index ", idx).c_str());
390
276
  for (size_t i = 0; i < error_list.size(); ++i) {
391
277
  error = grpc_error_add_child(error, error_list[i]);
@@ -393,9 +279,9 @@ grpc_error* XdsBootstrap::ParseChannelCreds(Json* json, size_t idx,
393
279
  return error;
394
280
  }
395
281
 
396
- grpc_error* XdsBootstrap::ParseServerFeaturesArray(Json* json,
397
- XdsServer* server) {
398
- std::vector<grpc_error*> error_list;
282
+ grpc_error_handle XdsBootstrap::ParseServerFeaturesArray(Json* json,
283
+ XdsServer* server) {
284
+ std::vector<grpc_error_handle> error_list;
399
285
  for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
400
286
  Json& child = json->mutable_array()->at(i);
401
287
  if (child.type() == Json::Type::STRING &&
@@ -407,8 +293,8 @@ grpc_error* XdsBootstrap::ParseServerFeaturesArray(Json* json,
407
293
  "errors parsing \"server_features\" array", &error_list);
408
294
  }
409
295
 
410
- grpc_error* XdsBootstrap::ParseNode(Json* json) {
411
- std::vector<grpc_error*> error_list;
296
+ grpc_error_handle XdsBootstrap::ParseNode(Json* json) {
297
+ std::vector<grpc_error_handle> error_list;
412
298
  node_ = absl::make_unique<Node>();
413
299
  auto it = json->mutable_object()->find("id");
414
300
  if (it != json->mutable_object()->end()) {
@@ -434,7 +320,7 @@ grpc_error* XdsBootstrap::ParseNode(Json* json) {
434
320
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
435
321
  "\"locality\" field is not an object"));
436
322
  } else {
437
- grpc_error* parse_error = ParseLocality(&it->second);
323
+ grpc_error_handle parse_error = ParseLocality(&it->second);
438
324
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
439
325
  }
440
326
  }
@@ -451,8 +337,8 @@ grpc_error* XdsBootstrap::ParseNode(Json* json) {
451
337
  &error_list);
452
338
  }
453
339
 
454
- grpc_error* XdsBootstrap::ParseLocality(Json* json) {
455
- std::vector<grpc_error*> error_list;
340
+ grpc_error_handle XdsBootstrap::ParseLocality(Json* json) {
341
+ std::vector<grpc_error_handle> error_list;
456
342
  auto it = json->mutable_object()->find("region");
457
343
  if (it != json->mutable_object()->end()) {
458
344
  if (it->second.type() != Json::Type::STRING) {
@@ -484,8 +370,8 @@ grpc_error* XdsBootstrap::ParseLocality(Json* json) {
484
370
  &error_list);
485
371
  }
486
372
 
487
- grpc_error* XdsBootstrap::ParseCertificateProviders(Json* json) {
488
- std::vector<grpc_error*> error_list;
373
+ grpc_error_handle XdsBootstrap::ParseCertificateProviders(Json* json) {
374
+ std::vector<grpc_error_handle> error_list;
489
375
  for (auto& certificate_provider : *(json->mutable_object())) {
490
376
  if (certificate_provider.second.type() != Json::Type::OBJECT) {
491
377
  error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
@@ -493,7 +379,7 @@ grpc_error* XdsBootstrap::ParseCertificateProviders(Json* json) {
493
379
  "\" is not an object")
494
380
  .c_str()));
495
381
  } else {
496
- grpc_error* parse_error = ParseCertificateProvider(
382
+ grpc_error_handle parse_error = ParseCertificateProvider(
497
383
  certificate_provider.first, &certificate_provider.second);
498
384
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
499
385
  }
@@ -502,9 +388,9 @@ grpc_error* XdsBootstrap::ParseCertificateProviders(Json* json) {
502
388
  "errors parsing \"certificate_providers\" object", &error_list);
503
389
  }
504
390
 
505
- grpc_error* XdsBootstrap::ParseCertificateProvider(
391
+ grpc_error_handle XdsBootstrap::ParseCertificateProvider(
506
392
  const std::string& instance_name, Json* certificate_provider_json) {
507
- std::vector<grpc_error*> error_list;
393
+ std::vector<grpc_error_handle> error_list;
508
394
  auto it = certificate_provider_json->mutable_object()->find("plugin_name");
509
395
  if (it == certificate_provider_json->mutable_object()->end()) {
510
396
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -517,7 +403,10 @@ grpc_error* XdsBootstrap::ParseCertificateProvider(
517
403
  CertificateProviderFactory* factory =
518
404
  CertificateProviderRegistry::LookupCertificateProviderFactory(
519
405
  plugin_name);
520
- if (factory != nullptr) {
406
+ if (factory == nullptr) {
407
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
408
+ absl::StrCat("Unrecognized plugin name: ", plugin_name).c_str()));
409
+ } else {
521
410
  RefCountedPtr<CertificateProviderFactory::Config> config;
522
411
  it = certificate_provider_json->mutable_object()->find("config");
523
412
  if (it != certificate_provider_json->mutable_object()->end()) {
@@ -525,14 +414,14 @@ grpc_error* XdsBootstrap::ParseCertificateProvider(
525
414
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
526
415
  "\"config\" field is not an object"));
527
416
  } else {
528
- grpc_error* parse_error = GRPC_ERROR_NONE;
417
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
529
418
  config = factory->CreateCertificateProviderConfig(it->second,
530
419
  &parse_error);
531
420
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
532
421
  }
533
422
  } else {
534
423
  // "config" is an optional field, so create an empty JSON object.
535
- grpc_error* parse_error = GRPC_ERROR_NONE;
424
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
536
425
  config = factory->CreateCertificateProviderConfig(Json::Object(),
537
426
  &parse_error);
538
427
  if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
@@ -544,7 +433,7 @@ grpc_error* XdsBootstrap::ParseCertificateProvider(
544
433
  // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
545
434
  // string is not static in this case.
546
435
  if (error_list.empty()) return GRPC_ERROR_NONE;
547
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
436
+ grpc_error_handle error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
548
437
  absl::StrCat("errors parsing element \"", instance_name, "\"").c_str());
549
438
  for (size_t i = 0; i < error_list.size(); ++i) {
550
439
  error = grpc_error_add_child(error, error_list[i]);
@@ -552,4 +441,56 @@ grpc_error* XdsBootstrap::ParseCertificateProvider(
552
441
  return error;
553
442
  }
554
443
 
444
+ std::string XdsBootstrap::ToString() const {
445
+ std::vector<std::string> parts;
446
+ if (node_ != nullptr) {
447
+ parts.push_back(absl::StrFormat(
448
+ "node={\n"
449
+ " id=\"%s\",\n"
450
+ " cluster=\"%s\",\n"
451
+ " locality={\n"
452
+ " region=\"%s\",\n"
453
+ " zone=\"%s\",\n"
454
+ " sub_zone=\"%s\"\n"
455
+ " },\n"
456
+ " metadata=%s,\n"
457
+ "},\n",
458
+ node_->id, node_->cluster, node_->locality_region, node_->locality_zone,
459
+ node_->locality_sub_zone, node_->metadata.Dump()));
460
+ }
461
+ parts.push_back(
462
+ absl::StrFormat("servers=[\n"
463
+ " {\n"
464
+ " uri=\"%s\",\n"
465
+ " creds_type=%s,\n",
466
+ server().server_uri, server().channel_creds_type));
467
+ if (server().channel_creds_config.type() != Json::Type::JSON_NULL) {
468
+ parts.push_back(absl::StrFormat(" creds_config=%s,",
469
+ server().channel_creds_config.Dump()));
470
+ }
471
+ if (!server().server_features.empty()) {
472
+ parts.push_back(absl::StrCat(" server_features=[",
473
+ absl::StrJoin(server().server_features, ", "),
474
+ "],\n"));
475
+ }
476
+ parts.push_back(" }\n],\n");
477
+ if (!server_listener_resource_name_template_.empty()) {
478
+ parts.push_back(
479
+ absl::StrFormat("server_listener_resource_name_template=\"%s\",\n",
480
+ server_listener_resource_name_template_));
481
+ }
482
+ parts.push_back("certificate_providers={\n");
483
+ for (const auto& entry : certificate_providers_) {
484
+ parts.push_back(
485
+ absl::StrFormat(" %s={\n"
486
+ " plugin_name=%s\n"
487
+ " config=%s\n"
488
+ " },\n",
489
+ entry.first, entry.second.plugin_name,
490
+ entry.second.config->ToString()));
491
+ }
492
+ parts.push_back("}");
493
+ return absl::StrJoin(parts, "");
494
+ }
495
+
555
496
  } // namespace grpc_core