grpc 1.46.3-x86_64-linux → 1.47.0-x86_64-linux

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 (487) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  461. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  462. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  463. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  464. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  465. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  466. data/src/ruby/lib/grpc/version.rb +1 -1
  467. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  468. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  469. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  470. metadata +36 -29
  471. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  472. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  473. data/src/core/lib/event_engine/sockaddr.h +0 -44
  474. data/src/core/lib/gprpp/capture.h +0 -76
  475. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  476. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  477. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  478. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  479. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  480. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  481. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  482. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  483. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  484. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  485. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  486. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  487. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -21,6 +21,8 @@
21
21
  #include "absl/strings/str_join.h"
22
22
  #include "absl/strings/str_replace.h"
23
23
 
24
+ #include <grpc/support/string_util.h>
25
+
24
26
  #include "src/core/lib/gpr/env.h"
25
27
  #include "src/core/lib/http/httpcli_ssl_credentials.h"
26
28
 
@@ -119,6 +121,12 @@ AwsExternalAccountCredentials::AwsExternalAccountCredentials(
119
121
  return;
120
122
  }
121
123
  regional_cred_verification_url_ = it->second.string_value();
124
+ it =
125
+ options.credential_source.object_value().find("imdsv2_session_token_url");
126
+ if (it != options.credential_source.object_value().end() &&
127
+ it->second.type() == Json::Type::STRING) {
128
+ imdsv2_session_token_url_ = it->second.string_value();
129
+ }
122
130
  }
123
131
 
124
132
  void AwsExternalAccountCredentials::RetrieveSubjectToken(
@@ -133,6 +141,62 @@ void AwsExternalAccountCredentials::RetrieveSubjectToken(
133
141
  }
134
142
  ctx_ = ctx;
135
143
  cb_ = cb;
144
+ if (!imdsv2_session_token_url_.empty()) {
145
+ RetrieveImdsV2SessionToken();
146
+ } else if (signer_ != nullptr) {
147
+ BuildSubjectToken();
148
+ } else {
149
+ RetrieveRegion();
150
+ }
151
+ }
152
+
153
+ void AwsExternalAccountCredentials::RetrieveImdsV2SessionToken() {
154
+ absl::StatusOr<URI> uri = URI::Parse(imdsv2_session_token_url_);
155
+ if (!uri.ok()) {
156
+ return;
157
+ }
158
+ grpc_http_header* headers =
159
+ static_cast<grpc_http_header*>(gpr_malloc(sizeof(grpc_http_header)));
160
+ headers[0].key = gpr_strdup("x-aws-ec2-metadata-token-ttl-seconds");
161
+ headers[0].value = gpr_strdup("300");
162
+ grpc_http_request request;
163
+ memset(&request, 0, sizeof(grpc_http_request));
164
+ request.hdr_count = 1;
165
+ request.hdrs = headers;
166
+ grpc_http_response_destroy(&ctx_->response);
167
+ ctx_->response = {};
168
+ GRPC_CLOSURE_INIT(&ctx_->closure, OnRetrieveImdsV2SessionToken, this,
169
+ nullptr);
170
+ RefCountedPtr<grpc_channel_credentials> http_request_creds;
171
+ if (uri->scheme() == "http") {
172
+ http_request_creds = RefCountedPtr<grpc_channel_credentials>(
173
+ grpc_insecure_credentials_create());
174
+ } else {
175
+ http_request_creds = CreateHttpRequestSSLCredentials();
176
+ }
177
+ http_request_ =
178
+ HttpRequest::Put(std::move(*uri), nullptr /* channel args */,
179
+ ctx_->pollent, &request, ctx_->deadline, &ctx_->closure,
180
+ &ctx_->response, std::move(http_request_creds));
181
+ http_request_->Start();
182
+ grpc_http_request_destroy(&request);
183
+ }
184
+
185
+ void AwsExternalAccountCredentials::OnRetrieveImdsV2SessionToken(
186
+ void* arg, grpc_error_handle error) {
187
+ AwsExternalAccountCredentials* self =
188
+ static_cast<AwsExternalAccountCredentials*>(arg);
189
+ self->OnRetrieveImdsV2SessionTokenInternal(GRPC_ERROR_REF(error));
190
+ }
191
+
192
+ void AwsExternalAccountCredentials::OnRetrieveImdsV2SessionTokenInternal(
193
+ grpc_error_handle error) {
194
+ if (error != GRPC_ERROR_NONE) {
195
+ FinishRetrieveSubjectToken("", error);
196
+ return;
197
+ }
198
+ imdsv2_session_token_ =
199
+ std::string(ctx_->response.body, ctx_->response.body_length);
136
200
  if (signer_ != nullptr) {
137
201
  BuildSubjectToken();
138
202
  } else {
@@ -140,6 +204,20 @@ void AwsExternalAccountCredentials::RetrieveSubjectToken(
140
204
  }
141
205
  }
142
206
 
207
+ void AwsExternalAccountCredentials::AddMetadataRequestHeaders(
208
+ grpc_http_request* request) {
209
+ if (!imdsv2_session_token_.empty()) {
210
+ GPR_ASSERT(request->hdr_count == 0);
211
+ GPR_ASSERT(request->hdrs == nullptr);
212
+ grpc_http_header* headers =
213
+ static_cast<grpc_http_header*>(gpr_malloc(sizeof(grpc_http_header)));
214
+ headers[0].key = gpr_strdup("x-aws-ec2-metadata-token");
215
+ headers[0].value = gpr_strdup(imdsv2_session_token_.c_str());
216
+ request->hdr_count = 1;
217
+ request->hdrs = headers;
218
+ }
219
+ }
220
+
143
221
  void AwsExternalAccountCredentials::RetrieveRegion() {
144
222
  UniquePtr<char> region_from_env(gpr_getenv(kRegionEnvVar));
145
223
  if (region_from_env == nullptr) {
@@ -165,6 +243,7 @@ void AwsExternalAccountCredentials::RetrieveRegion() {
165
243
  memset(&request, 0, sizeof(grpc_http_request));
166
244
  grpc_http_response_destroy(&ctx_->response);
167
245
  ctx_->response = {};
246
+ AddMetadataRequestHeaders(&request);
168
247
  GRPC_CLOSURE_INIT(&ctx_->closure, OnRetrieveRegion, this, nullptr);
169
248
  RefCountedPtr<grpc_channel_credentials> http_request_creds;
170
249
  if (uri->scheme() == "http") {
@@ -217,6 +296,7 @@ void AwsExternalAccountCredentials::RetrieveRoleName() {
217
296
  memset(&request, 0, sizeof(grpc_http_request));
218
297
  grpc_http_response_destroy(&ctx_->response);
219
298
  ctx_->response = {};
299
+ AddMetadataRequestHeaders(&request);
220
300
  GRPC_CLOSURE_INIT(&ctx_->closure, OnRetrieveRoleName, this, nullptr);
221
301
  // TODO(ctiller): use the caller's resource quota.
222
302
  RefCountedPtr<grpc_channel_credentials> http_request_creds;
@@ -282,6 +362,7 @@ void AwsExternalAccountCredentials::RetrieveSigningKeys() {
282
362
  memset(&request, 0, sizeof(grpc_http_request));
283
363
  grpc_http_response_destroy(&ctx_->response);
284
364
  ctx_->response = {};
365
+ AddMetadataRequestHeaders(&request);
285
366
  GRPC_CLOSURE_INIT(&ctx_->closure, OnRetrieveSigningKeys, this, nullptr);
286
367
  // TODO(ctiller): use the caller's resource quota.
287
368
  RefCountedPtr<grpc_channel_credentials> http_request_creds;
@@ -43,6 +43,10 @@ class AwsExternalAccountCredentials final : public ExternalAccountCredentials {
43
43
  static void OnRetrieveRegion(void* arg, grpc_error_handle error);
44
44
  void OnRetrieveRegionInternal(grpc_error_handle error);
45
45
 
46
+ void RetrieveImdsV2SessionToken();
47
+ static void OnRetrieveImdsV2SessionToken(void* arg, grpc_error_handle error);
48
+ void OnRetrieveImdsV2SessionTokenInternal(grpc_error_handle error);
49
+
46
50
  void RetrieveRoleName();
47
51
  static void OnRetrieveRoleName(void* arg, grpc_error_handle error);
48
52
  void OnRetrieveRoleNameInternal(grpc_error_handle error);
@@ -55,6 +59,8 @@ class AwsExternalAccountCredentials final : public ExternalAccountCredentials {
55
59
  void FinishRetrieveSubjectToken(std::string subject_token,
56
60
  grpc_error_handle error);
57
61
 
62
+ void AddMetadataRequestHeaders(grpc_http_request* request);
63
+
58
64
  std::string audience_;
59
65
  OrphanablePtr<HttpRequest> http_request_;
60
66
 
@@ -62,6 +68,7 @@ class AwsExternalAccountCredentials final : public ExternalAccountCredentials {
62
68
  std::string region_url_;
63
69
  std::string url_;
64
70
  std::string regional_cred_verification_url_;
71
+ std::string imdsv2_session_token_url_;
65
72
 
66
73
  // Information required by request signer
67
74
  std::string region_;
@@ -69,6 +76,7 @@ class AwsExternalAccountCredentials final : public ExternalAccountCredentials {
69
76
  std::string access_key_id_;
70
77
  std::string secret_access_key_;
71
78
  std::string token_;
79
+ std::string imdsv2_session_token_;
72
80
 
73
81
  std::unique_ptr<AwsRequestSigner> signer_;
74
82
  std::string cred_verification_url_;
@@ -13,6 +13,7 @@
13
13
  // See the License for the specific language governing permissions and
14
14
  // limitations under the License.
15
15
  //
16
+
16
17
  #include <grpc/support/port_platform.h>
17
18
 
18
19
  #include "src/core/lib/security/credentials/external/external_account_credentials.h"
@@ -25,6 +26,8 @@
25
26
  #include "absl/time/clock.h"
26
27
  #include "absl/time/time.h"
27
28
 
29
+ #include <grpc/support/string_util.h>
30
+
28
31
  #include "src/core/lib/http/httpcli_ssl_credentials.h"
29
32
  #include "src/core/lib/http/parser.h"
30
33
  #include "src/core/lib/security/credentials/external/aws_external_account_credentials.h"
@@ -21,6 +21,8 @@
21
21
  #include "absl/strings/str_format.h"
22
22
  #include "absl/strings/str_split.h"
23
23
 
24
+ #include <grpc/support/string_util.h>
25
+
24
26
  #include "src/core/lib/http/httpcli_ssl_credentials.h"
25
27
  #include "src/core/lib/transport/error_utils.h"
26
28
 
@@ -35,6 +35,7 @@
35
35
  /* -- Fake transport security credentials. -- */
36
36
 
37
37
  namespace {
38
+
38
39
  class grpc_fake_channel_credentials final : public grpc_channel_credentials {
39
40
  public:
40
41
  grpc_core::RefCountedPtr<grpc_channel_security_connector>
@@ -46,7 +47,10 @@ class grpc_fake_channel_credentials final : public grpc_channel_credentials {
46
47
  this->Ref(), std::move(call_creds), target, args);
47
48
  }
48
49
 
49
- const char* type() const override { return "Fake"; }
50
+ grpc_core::UniqueTypeName type() const override {
51
+ static grpc_core::UniqueTypeName::Factory kFactory("Fake");
52
+ return kFactory.Create();
53
+ }
50
54
 
51
55
  private:
52
56
  int cmp_impl(const grpc_channel_credentials* other) const override {
@@ -63,7 +67,10 @@ class grpc_fake_server_credentials final : public grpc_server_credentials {
63
67
  return grpc_fake_server_security_connector_create(this->Ref());
64
68
  }
65
69
 
66
- const char* type() const override { return "Fake"; }
70
+ grpc_core::UniqueTypeName type() const override {
71
+ static grpc_core::UniqueTypeName::Factory kFactory("Fake");
72
+ return kFactory.Create();
73
+ }
67
74
  };
68
75
  } // namespace
69
76
 
@@ -101,7 +108,10 @@ grpc_md_only_test_credentials::GetRequestMetadata(
101
108
  return grpc_core::Immediate(std::move(initial_metadata));
102
109
  }
103
110
 
104
- const char* grpc_md_only_test_credentials::Type() { return "MdOnlyTest"; }
111
+ grpc_core::UniqueTypeName grpc_md_only_test_credentials::Type() {
112
+ static grpc_core::UniqueTypeName::Factory kFactory("MdOnlyTest");
113
+ return kFactory.Create();
114
+ }
105
115
 
106
116
  grpc_call_credentials* grpc_md_only_test_credentials_create(
107
117
  const char* md_key, const char* md_value) {
@@ -70,9 +70,9 @@ class grpc_md_only_test_credentials : public grpc_call_credentials {
70
70
 
71
71
  std::string debug_string() override { return "MD only Test Credentials"; }
72
72
 
73
- static const char* Type();
73
+ static grpc_core::UniqueTypeName Type();
74
74
 
75
- const char* type() const override { return Type(); }
75
+ grpc_core::UniqueTypeName type() const override { return Type(); }
76
76
 
77
77
  private:
78
78
  int cmp_impl(const grpc_call_credentials* other) const override {
@@ -49,6 +49,7 @@
49
49
  #include "src/core/lib/slice/slice_internal.h"
50
50
  #include "src/core/lib/slice/slice_string_helpers.h"
51
51
  #include "src/core/lib/surface/api_trace.h"
52
+ #include "src/core/lib/uri/uri_parser.h"
52
53
 
53
54
  using grpc_core::Json;
54
55
 
@@ -83,6 +84,21 @@ struct metadata_server_detector {
83
84
  int success;
84
85
  grpc_http_response response;
85
86
  };
87
+
88
+ namespace {
89
+
90
+ bool IsXdsNonCfeCluster(const char* xds_cluster) {
91
+ if (xds_cluster == nullptr) return false;
92
+ if (absl::StartsWith(xds_cluster, "google_cfe_")) return false;
93
+ if (!absl::StartsWith(xds_cluster, "xdstp:")) return true;
94
+ auto uri = grpc_core::URI::Parse(xds_cluster);
95
+ if (!uri.ok()) return true; // Shouldn't happen, but assume ALTS.
96
+ return !absl::StartsWith(uri->path(),
97
+ "/envoy.config.cluster.v3.Cluster/google_cfe_");
98
+ }
99
+
100
+ } // namespace
101
+
86
102
  grpc_core::RefCountedPtr<grpc_channel_security_connector>
87
103
  grpc_google_default_channel_credentials::create_security_connector(
88
104
  grpc_core::RefCountedPtr<grpc_call_credentials> call_creds,
@@ -94,8 +110,7 @@ grpc_google_default_channel_credentials::create_security_connector(
94
110
  args, GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER, false);
95
111
  const char* xds_cluster =
96
112
  grpc_channel_args_find_string(args, GRPC_ARG_XDS_CLUSTER_NAME);
97
- const bool is_xds_non_cfe_cluster =
98
- xds_cluster != nullptr && !absl::StartsWith(xds_cluster, "google_cfe_");
113
+ const bool is_xds_non_cfe_cluster = IsXdsNonCfeCluster(xds_cluster);
99
114
  const bool use_alts = is_grpclb_load_balancer ||
100
115
  is_backend_from_grpclb_load_balancer ||
101
116
  is_xds_non_cfe_cluster;
@@ -125,21 +140,16 @@ grpc_google_default_channel_credentials::create_security_connector(
125
140
  return sc;
126
141
  }
127
142
 
128
- grpc_channel_args* grpc_google_default_channel_credentials::update_arguments(
129
- grpc_channel_args* args) {
130
- grpc_channel_args* updated = args;
131
- if (grpc_channel_args_find(args, GRPC_ARG_DNS_ENABLE_SRV_QUERIES) ==
132
- nullptr) {
133
- grpc_arg new_srv_arg = grpc_channel_arg_integer_create(
134
- const_cast<char*>(GRPC_ARG_DNS_ENABLE_SRV_QUERIES), true);
135
- updated = grpc_channel_args_copy_and_add(args, &new_srv_arg, 1);
136
- grpc_channel_args_destroy(args);
137
- }
138
- return updated;
143
+ grpc_core::ChannelArgs
144
+ grpc_google_default_channel_credentials::update_arguments(
145
+ grpc_core::ChannelArgs args) {
146
+ return args.SetIfUnset(GRPC_ARG_DNS_ENABLE_SRV_QUERIES, true);
139
147
  }
140
148
 
141
- const char* grpc_google_default_channel_credentials::type() const {
142
- return "GoogleDefault";
149
+ grpc_core::UniqueTypeName grpc_google_default_channel_credentials::type()
150
+ const {
151
+ static grpc_core::UniqueTypeName::Factory kFactory("GoogleDefault");
152
+ return kFactory.Create();
143
153
  }
144
154
 
145
155
  static void on_metadata_server_detection_http_response(
@@ -56,9 +56,9 @@ class grpc_google_default_channel_credentials
56
56
  const char* target, const grpc_channel_args* args,
57
57
  grpc_channel_args** new_args) override;
58
58
 
59
- grpc_channel_args* update_arguments(grpc_channel_args* args) override;
59
+ grpc_core::ChannelArgs update_arguments(grpc_core::ChannelArgs args) override;
60
60
 
61
- const char* type() const override;
61
+ grpc_core::UniqueTypeName type() const override;
62
62
 
63
63
  const grpc_channel_credentials* alts_creds() const {
64
64
  return alts_creds_.get();
@@ -56,7 +56,10 @@ grpc_google_iam_credentials::grpc_google_iam_credentials(
56
56
  "GoogleIAMCredentials{Token:%s,AuthoritySelector:%s}",
57
57
  token != nullptr ? "present" : "absent", authority_selector)) {}
58
58
 
59
- const char* grpc_google_iam_credentials::Type() { return "Iam"; }
59
+ grpc_core::UniqueTypeName grpc_google_iam_credentials::Type() {
60
+ static grpc_core::UniqueTypeName::Factory kFactory("Iam");
61
+ return kFactory.Create();
62
+ }
60
63
 
61
64
  grpc_call_credentials* grpc_google_iam_credentials_create(
62
65
  const char* token, const char* authority_selector, void* reserved) {
@@ -36,9 +36,9 @@ class grpc_google_iam_credentials : public grpc_call_credentials {
36
36
 
37
37
  std::string debug_string() override { return debug_string_; }
38
38
 
39
- static const char* Type();
39
+ static grpc_core::UniqueTypeName Type();
40
40
 
41
- const char* type() const override { return Type(); }
41
+ grpc_core::UniqueTypeName type() const override { return Type(); }
42
42
 
43
43
  private:
44
44
  int cmp_impl(const grpc_call_credentials* other) const override {
@@ -33,7 +33,10 @@ InsecureCredentials::create_security_connector(
33
33
  Ref(), std::move(request_metadata_creds));
34
34
  }
35
35
 
36
- const char* InsecureCredentials::Type() { return "Insecure"; }
36
+ UniqueTypeName InsecureCredentials::Type() {
37
+ static UniqueTypeName::Factory kFactory("Insecure");
38
+ return kFactory.Create();
39
+ }
37
40
 
38
41
  int InsecureCredentials::cmp_impl(
39
42
  const grpc_channel_credentials* /* other */) const {
@@ -47,7 +50,10 @@ InsecureServerCredentials::create_security_connector(
47
50
  return MakeRefCounted<InsecureServerSecurityConnector>(Ref());
48
51
  }
49
52
 
50
- const char* InsecureServerCredentials::Type() { return "Insecure"; }
53
+ UniqueTypeName InsecureServerCredentials::Type() {
54
+ static auto* kFactory = new UniqueTypeName::Factory("Insecure");
55
+ return kFactory->Create();
56
+ }
51
57
 
52
58
  } // namespace grpc_core
53
59
 
@@ -34,9 +34,9 @@ class InsecureCredentials final : public grpc_channel_credentials {
34
34
  const char* /* target_name */, const grpc_channel_args* /* args */,
35
35
  grpc_channel_args** /* new_args */) override;
36
36
 
37
- static const char* Type();
37
+ static UniqueTypeName Type();
38
38
 
39
- const char* type() const override { return Type(); }
39
+ UniqueTypeName type() const override { return Type(); }
40
40
 
41
41
  private:
42
42
  int cmp_impl(const grpc_channel_credentials* other) const override;
@@ -47,9 +47,9 @@ class InsecureServerCredentials final : public grpc_server_credentials {
47
47
  RefCountedPtr<grpc_server_security_connector> create_security_connector(
48
48
  const grpc_channel_args* /* args */) override;
49
49
 
50
- static const char* Type();
50
+ static UniqueTypeName Type();
51
51
 
52
- const char* type() const override { return Type(); }
52
+ UniqueTypeName type() const override { return Type(); }
53
53
  };
54
54
 
55
55
  } // namespace grpc_core
@@ -118,8 +118,9 @@ grpc_service_account_jwt_access_credentials::
118
118
  gpr_mu_init(&cache_mu_);
119
119
  }
120
120
 
121
- const char* grpc_service_account_jwt_access_credentials::Type() {
122
- return "Jwt";
121
+ grpc_core::UniqueTypeName grpc_service_account_jwt_access_credentials::Type() {
122
+ static grpc_core::UniqueTypeName::Factory kFactory("Jwt");
123
+ return kFactory.Create();
123
124
  }
124
125
 
125
126
  grpc_core::RefCountedPtr<grpc_call_credentials>
@@ -52,9 +52,9 @@ class grpc_service_account_jwt_access_credentials
52
52
  static_cast<int64_t>(gpr_timespec_to_micros(jwt_lifetime_)))));
53
53
  };
54
54
 
55
- static const char* Type();
55
+ static grpc_core::UniqueTypeName Type();
56
56
 
57
- const char* type() const override { return Type(); }
57
+ grpc_core::UniqueTypeName type() const override { return Type(); }
58
58
 
59
59
  private:
60
60
  int cmp_impl(const grpc_call_credentials* other) const override {
@@ -36,7 +36,10 @@ grpc_local_credentials::create_security_connector(
36
36
  this->Ref(), std::move(request_metadata_creds), args, target_name);
37
37
  }
38
38
 
39
- const char* grpc_local_credentials::type() const { return "Local"; }
39
+ grpc_core::UniqueTypeName grpc_local_credentials::type() const {
40
+ static grpc_core::UniqueTypeName::Factory kFactory("Local");
41
+ return kFactory.Create();
42
+ }
40
43
 
41
44
  grpc_core::RefCountedPtr<grpc_server_security_connector>
42
45
  grpc_local_server_credentials::create_security_connector(
@@ -44,7 +47,10 @@ grpc_local_server_credentials::create_security_connector(
44
47
  return grpc_local_server_security_connector_create(this->Ref());
45
48
  }
46
49
 
47
- const char* grpc_local_server_credentials::type() const { return "Local"; }
50
+ grpc_core::UniqueTypeName grpc_local_server_credentials::type() const {
51
+ static grpc_core::UniqueTypeName::Factory kFactory("Local");
52
+ return kFactory.Create();
53
+ }
48
54
 
49
55
  grpc_local_credentials::grpc_local_credentials(
50
56
  grpc_local_connect_type connect_type)
@@ -37,7 +37,7 @@ class grpc_local_credentials final : public grpc_channel_credentials {
37
37
  const char* target_name, const grpc_channel_args* args,
38
38
  grpc_channel_args** new_args) override;
39
39
 
40
- const char* type() const override;
40
+ grpc_core::UniqueTypeName type() const override;
41
41
 
42
42
  grpc_local_connect_type connect_type() const { return connect_type_; }
43
43
 
@@ -60,7 +60,7 @@ class grpc_local_server_credentials final : public grpc_server_credentials {
60
60
  grpc_core::RefCountedPtr<grpc_server_security_connector>
61
61
  create_security_connector(const grpc_channel_args* /* args */) override;
62
62
 
63
- const char* type() const override;
63
+ grpc_core::UniqueTypeName type() const override;
64
64
 
65
65
  grpc_local_connect_type connect_type() const { return connect_type_; }
66
66
 
@@ -38,7 +38,6 @@
38
38
  #include <grpc/support/string_util.h>
39
39
 
40
40
  #include "src/core/lib/gpr/string.h"
41
- #include "src/core/lib/gprpp/capture.h"
42
41
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
43
42
  #include "src/core/lib/http/httpcli_ssl_credentials.h"
44
43
  #include "src/core/lib/iomgr/error.h"
@@ -347,8 +346,9 @@ std::string grpc_oauth2_token_fetcher_credentials::debug_string() {
347
346
  return "OAuth2TokenFetcherCredentials";
348
347
  }
349
348
 
350
- const char* grpc_oauth2_token_fetcher_credentials::type() const {
351
- return "Oauth2";
349
+ grpc_core::UniqueTypeName grpc_oauth2_token_fetcher_credentials::type() const {
350
+ static grpc_core::UniqueTypeName::Factory kFactory("Oauth2");
351
+ return kFactory.Create();
352
352
  }
353
353
 
354
354
  //
@@ -476,8 +476,9 @@ std::string grpc_google_refresh_token_credentials::debug_string() {
476
476
  grpc_oauth2_token_fetcher_credentials::debug_string());
477
477
  }
478
478
 
479
- const char* grpc_google_refresh_token_credentials::type() const {
480
- return "GoogleRefreshToken";
479
+ grpc_core::UniqueTypeName grpc_google_refresh_token_credentials::type() const {
480
+ static grpc_core::UniqueTypeName::Factory kFactory("GoogleRefreshToken");
481
+ return kFactory.Create();
481
482
  }
482
483
 
483
484
  static std::string create_loggable_refresh_token(
@@ -713,7 +714,10 @@ grpc_access_token_credentials::GetRequestMetadata(
713
714
  return grpc_core::Immediate(std::move(initial_metadata));
714
715
  }
715
716
 
716
- const char* grpc_access_token_credentials::Type() { return "AccessToken"; }
717
+ grpc_core::UniqueTypeName grpc_access_token_credentials::Type() {
718
+ static grpc_core::UniqueTypeName::Factory kFactory("AccessToken");
719
+ return kFactory.Create();
720
+ }
717
721
 
718
722
  grpc_access_token_credentials::grpc_access_token_credentials(
719
723
  const char* access_token)
@@ -102,7 +102,7 @@ class grpc_oauth2_token_fetcher_credentials : public grpc_call_credentials {
102
102
  grpc_error_handle error);
103
103
  std::string debug_string() override;
104
104
 
105
- const char* type() const override;
105
+ grpc_core::UniqueTypeName type() const override;
106
106
 
107
107
  protected:
108
108
  virtual void fetch_oauth2(grpc_credentials_metadata_request* req,
@@ -138,7 +138,7 @@ class grpc_google_refresh_token_credentials final
138
138
 
139
139
  std::string debug_string() override;
140
140
 
141
- const char* type() const override;
141
+ grpc_core::UniqueTypeName type() const override;
142
142
 
143
143
  protected:
144
144
  void fetch_oauth2(grpc_credentials_metadata_request* req,
@@ -162,9 +162,9 @@ class grpc_access_token_credentials final : public grpc_call_credentials {
162
162
 
163
163
  std::string debug_string() override;
164
164
 
165
- static const char* Type();
165
+ static grpc_core::UniqueTypeName Type();
166
166
 
167
- const char* type() const override { return Type(); }
167
+ grpc_core::UniqueTypeName type() const override { return Type(); }
168
168
 
169
169
  private:
170
170
  int cmp_impl(const grpc_call_credentials* other) const override {
@@ -60,7 +60,10 @@ std::string grpc_plugin_credentials::debug_string() {
60
60
  return debug_str;
61
61
  }
62
62
 
63
- const char* grpc_plugin_credentials::type() const { return "Plugin"; }
63
+ grpc_core::UniqueTypeName grpc_plugin_credentials::type() const {
64
+ static grpc_core::UniqueTypeName::Factory kFactory("Plugin");
65
+ return kFactory.Create();
66
+ }
64
67
 
65
68
  absl::StatusOr<grpc_core::ClientMetadataHandle>
66
69
  grpc_plugin_credentials::PendingRequest::ProcessPluginResult(
@@ -41,7 +41,7 @@ struct grpc_plugin_credentials final : public grpc_call_credentials {
41
41
 
42
42
  std::string debug_string() override;
43
43
 
44
- const char* type() const override;
44
+ grpc_core::UniqueTypeName type() const override;
45
45
 
46
46
  private:
47
47
  class PendingRequest : public grpc_core::RefCounted<PendingRequest> {
@@ -82,7 +82,10 @@ grpc_ssl_credentials::create_security_connector(
82
82
  return sc;
83
83
  }
84
84
 
85
- const char* grpc_ssl_credentials::Type() { return "Ssl"; }
85
+ grpc_core::UniqueTypeName grpc_ssl_credentials::Type() {
86
+ static grpc_core::UniqueTypeName::Factory kFactory("Ssl");
87
+ return kFactory.Create();
88
+ }
86
89
 
87
90
  void grpc_ssl_credentials::build_config(
88
91
  const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
@@ -186,7 +189,10 @@ grpc_ssl_server_credentials::create_security_connector(
186
189
  return grpc_ssl_server_security_connector_create(this->Ref());
187
190
  }
188
191
 
189
- const char* grpc_ssl_server_credentials::Type() { return "Ssl"; }
192
+ grpc_core::UniqueTypeName grpc_ssl_server_credentials::Type() {
193
+ static grpc_core::UniqueTypeName::Factory kFactory("Ssl");
194
+ return kFactory.Create();
195
+ }
190
196
 
191
197
  tsi_ssl_pem_key_cert_pair* grpc_convert_grpc_to_tsi_cert_pairs(
192
198
  const grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs,
@@ -37,9 +37,9 @@ class grpc_ssl_credentials : public grpc_channel_credentials {
37
37
  const char* target, const grpc_channel_args* args,
38
38
  grpc_channel_args** new_args) override;
39
39
 
40
- static const char* Type();
40
+ static grpc_core::UniqueTypeName Type();
41
41
 
42
- const char* type() const override { return Type(); }
42
+ grpc_core::UniqueTypeName type() const override { return Type(); }
43
43
 
44
44
  // TODO(mattstev): Plumb to wrapped languages. Until then, setting the TLS
45
45
  // version should be done for testing purposes only.
@@ -80,9 +80,9 @@ class grpc_ssl_server_credentials final : public grpc_server_credentials {
80
80
  grpc_core::RefCountedPtr<grpc_server_security_connector>
81
81
  create_security_connector(const grpc_channel_args* /* args */) override;
82
82
 
83
- static const char* Type();
83
+ static grpc_core::UniqueTypeName Type();
84
84
 
85
- const char* type() const override { return Type(); }
85
+ grpc_core::UniqueTypeName type() const override { return Type(); }
86
86
 
87
87
  bool has_cert_config_fetcher() const {
88
88
  return certificate_config_fetcher_.cb != nullptr;
@@ -85,6 +85,11 @@ StaticDataCertificateProvider::~StaticDataCertificateProvider() {
85
85
  distributor_->SetWatchStatusCallback(nullptr);
86
86
  }
87
87
 
88
+ UniqueTypeName StaticDataCertificateProvider::type() const {
89
+ static UniqueTypeName::Factory kFactory("StaticData");
90
+ return kFactory.Create();
91
+ }
92
+
88
93
  namespace {
89
94
 
90
95
  gpr_timespec TimeoutSecondsToDeadline(int64_t seconds) {
@@ -177,6 +182,11 @@ FileWatcherCertificateProvider::~FileWatcherCertificateProvider() {
177
182
  refresh_thread_.Join();
178
183
  }
179
184
 
185
+ UniqueTypeName FileWatcherCertificateProvider::type() const {
186
+ static UniqueTypeName::Factory kFactory("FileWatcher");
187
+ return kFactory.Create();
188
+ }
189
+
180
190
  void FileWatcherCertificateProvider::ForceUpdate() {
181
191
  absl::optional<std::string> root_certificate;
182
192
  absl::optional<PemKeyCertPairList> pem_key_cert_pairs;