grpc 1.83.1 → 1.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +21 -17
  3. data/include/grpc/credentials.h +10 -0
  4. data/include/grpc/grpc_security_constants.h +2 -0
  5. data/include/grpc/impl/channel_arg_names.h +9 -0
  6. data/src/core/call/call_filters.h +4 -2
  7. data/src/core/call/client_call.cc +20 -8
  8. data/src/core/call/client_call.h +4 -0
  9. data/src/core/call/interception_chain.cc +2 -0
  10. data/src/core/call/interception_chain.h +14 -1
  11. data/src/core/call/metadata.cc +1 -3
  12. data/src/core/call/metadata_batch.h +13 -5
  13. data/src/core/call/server_call.cc +31 -14
  14. data/src/core/call/server_call.h +4 -0
  15. data/src/core/channelz/text_encode.cc +9 -4
  16. data/src/core/channelz/v2tov1/convert.cc +2 -2
  17. data/src/core/client_channel/backup_poller.cc +1 -2
  18. data/src/core/client_channel/client_channel.cc +6 -33
  19. data/src/core/client_channel/client_channel_filter.cc +22 -55
  20. data/src/core/client_channel/client_channel_filter.h +2 -2
  21. data/src/core/client_channel/client_channel_service_config.cc +3 -19
  22. data/src/core/client_channel/direct_channel.cc +7 -1
  23. data/src/core/client_channel/direct_channel.h +2 -2
  24. data/src/core/client_channel/load_balanced_call_destination.cc +5 -3
  25. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -12
  26. data/src/core/client_channel/subchannel.cc +310 -1058
  27. data/src/core/client_channel/subchannel.h +44 -329
  28. data/src/core/client_channel/subchannel_metrics.cc +48 -0
  29. data/src/core/client_channel/subchannel_metrics.h +60 -0
  30. data/src/core/credentials/call/external/file_external_account_credentials.cc +1 -1
  31. data/src/core/credentials/call/external/url_external_account_credentials.cc +2 -3
  32. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +8 -24
  33. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +3 -6
  34. data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.cc +525 -0
  35. data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.h +138 -0
  36. data/src/core/credentials/call/json_util.h +1 -0
  37. data/src/core/credentials/call/jwt/json_token.cc +10 -2
  38. data/src/core/credentials/call/jwt/jwt_verifier.cc +15 -1
  39. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +1 -1
  40. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +42 -79
  41. data/src/core/credentials/call/oauth2/oauth2_credentials.h +2 -5
  42. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +52 -31
  43. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +21 -8
  44. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -4
  45. data/src/core/credentials/transport/ssl/ssl_credentials.cc +59 -72
  46. data/src/core/credentials/transport/ssl/ssl_credentials.h +9 -8
  47. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +12 -6
  48. data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -4
  49. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -18
  50. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +9 -6
  51. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +45 -56
  52. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -4
  53. data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +26 -0
  54. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +1 -1
  55. data/src/core/credentials/transport/tls/load_system_roots.h +2 -6
  56. data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +2 -4
  57. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +13 -15
  58. data/src/core/credentials/transport/tls/load_system_roots_supported.h +3 -2
  59. data/src/core/credentials/transport/tls/load_system_roots_windows.cc +5 -8
  60. data/src/core/credentials/transport/tls/spiffe_utils.cc +1 -1
  61. data/src/core/credentials/transport/tls/ssl_utils.cc +39 -28
  62. data/src/core/credentials/transport/tls/ssl_utils.h +12 -49
  63. data/src/core/credentials/transport/tls/tls_security_connector.cc +48 -33
  64. data/src/core/credentials/transport/tls/tls_security_connector.h +31 -10
  65. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +15 -11
  66. data/src/core/ext/filters/http/http_filters_plugin.cc +20 -9
  67. data/src/core/ext/filters/rbac/rbac_filter.cc +43 -21
  68. data/src/core/ext/filters/rbac/rbac_filter.h +21 -3
  69. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
  70. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  71. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -20
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +32 -67
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -0
  74. data/src/core/ext/transport/chttp2/transport/flow_control.h +78 -4
  75. data/src/core/ext/transport/chttp2/transport/frame.h +2 -0
  76. data/src/core/ext/transport/chttp2/transport/frame_data.cc +3 -4
  77. data/src/core/ext/transport/chttp2/transport/goaway.h +7 -0
  78. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +5 -3
  79. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -1
  80. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +141 -130
  81. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +22 -22
  82. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +402 -269
  83. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +80 -49
  84. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +1 -2
  85. data/src/core/ext/transport/chttp2/transport/http2_status.h +38 -37
  86. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +178 -5
  87. data/src/core/ext/transport/chttp2/transport/http2_transport.h +345 -5
  88. data/src/core/ext/transport/chttp2/transport/parsing.cc +5 -5
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +3 -2
  90. data/src/core/ext/transport/chttp2/transport/ping_promise.h +25 -5
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +3 -4
  92. data/src/core/ext/transport/chttp2/transport/read_context.h +30 -3
  93. data/src/core/ext/transport/chttp2/transport/stream.h +65 -23
  94. data/src/core/ext/transport/chttp2/transport/writing.cc +0 -3
  95. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -5
  96. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +4 -17
  97. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb.h +1912 -0
  98. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.c +300 -0
  99. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.h +37 -0
  100. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb.h +187 -0
  101. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.c +64 -0
  102. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.h +31 -0
  103. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb.h +2362 -0
  104. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.c +556 -0
  105. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.h +47 -0
  106. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb.h +5 -5
  107. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.c +3 -3
  108. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.h +5 -5
  109. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.c +453 -0
  110. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.h +67 -0
  111. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.c +142 -0
  112. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.h +37 -0
  113. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +715 -0
  114. data/src/core/ext/upbdefs-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upbdefs.h +44 -44
  115. data/src/core/filter/auth/server_auth_filter.cc +2 -3
  116. data/src/core/filter/composite/composite_filter.cc +45 -33
  117. data/src/core/filter/composite/composite_filter.h +5 -4
  118. data/src/core/filter/ext_proc/ext_proc_filter.cc +224 -0
  119. data/src/core/filter/ext_proc/ext_proc_filter.h +155 -0
  120. data/src/core/filter/ext_proc/ext_proc_messages.cc +701 -0
  121. data/src/core/filter/ext_proc/ext_proc_messages.h +297 -0
  122. data/src/core/filter/filter_args.h +13 -2
  123. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +30 -3
  124. data/src/core/handshaker/security/security_handshaker.cc +9 -6
  125. data/src/core/lib/channel/channel_stack.cc +3 -0
  126. data/src/core/lib/channel/channel_stack.h +2 -0
  127. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -2
  128. data/src/core/lib/channel/promise_based_filter.cc +132 -20
  129. data/src/core/lib/channel/promise_based_filter.h +42 -12
  130. data/src/core/lib/compression/compression_internal.cc +4 -5
  131. data/src/core/lib/debug/trace_flags.cc +8 -0
  132. data/src/core/lib/debug/trace_flags.h +3 -0
  133. data/src/core/lib/event_engine/ares_resolver.cc +54 -50
  134. data/src/core/lib/event_engine/ares_resolver.h +3 -2
  135. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +3 -3
  136. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -10
  137. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +74 -33
  138. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +4 -4
  139. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -2
  140. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -0
  141. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -0
  142. data/src/core/lib/event_engine/windows/windows_endpoint.cc +1 -3
  143. data/src/core/lib/experiments/experiments.cc +60 -96
  144. data/src/core/lib/experiments/experiments.h +34 -50
  145. data/src/core/lib/iomgr/cfstream_handle.cc +2 -6
  146. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -10
  147. data/src/core/lib/iomgr/error.cc +2 -6
  148. data/src/core/lib/iomgr/error_cfstream.cc +1 -1
  149. data/src/core/lib/iomgr/ev_poll_posix.cc +5 -9
  150. data/src/core/lib/iomgr/event_engine_shims/closure.cc +1 -1
  151. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +1 -2
  152. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
  153. data/src/core/lib/iomgr/iomgr_posix.cc +0 -4
  154. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -4
  155. data/src/core/lib/iomgr/iomgr_windows.cc +0 -4
  156. data/src/core/lib/iomgr/socket_factory_posix.h +1 -1
  157. data/src/core/lib/iomgr/socket_utils_posix.cc +3 -0
  158. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  159. data/src/core/lib/iomgr/systemd_utils.cc +0 -1
  160. data/src/core/lib/iomgr/tcp_client.h +1 -1
  161. data/src/core/lib/iomgr/tcp_posix.cc +23 -15
  162. data/src/core/lib/iomgr/tcp_server.h +1 -1
  163. data/src/core/lib/iomgr/tcp_server_posix.cc +2 -3
  164. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -1
  165. data/src/core/lib/iomgr/tcp_server_windows.cc +0 -1
  166. data/src/core/lib/iomgr/tcp_windows.cc +5 -10
  167. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  168. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  169. data/src/core/lib/iomgr/vsock.h +3 -1
  170. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  171. data/src/core/lib/security/authorization/rbac_policy.cc +139 -56
  172. data/src/core/lib/security/authorization/rbac_policy.h +21 -3
  173. data/src/core/lib/surface/call.cc +3 -9
  174. data/src/core/lib/surface/call_utils.h +113 -0
  175. data/src/core/lib/surface/channel_create.cc +1 -1
  176. data/src/core/lib/surface/channel_create.h +0 -2
  177. data/src/core/lib/surface/channel_init.cc +77 -38
  178. data/src/core/lib/surface/channel_init.h +30 -16
  179. data/src/core/lib/surface/filter_stack_call.cc +5 -10
  180. data/src/core/lib/surface/init.cc +13 -27
  181. data/src/core/lib/surface/version.cc +1 -1
  182. data/src/core/lib/transport/error_utils.cc +0 -27
  183. data/src/core/lib/transport/error_utils.h +0 -16
  184. data/src/core/lib/transport/transport.h +7 -5
  185. data/src/core/load_balancing/pick_first/pick_first.cc +2 -0
  186. data/src/core/load_balancing/rls/rls.cc +28 -11
  187. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -42
  188. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +0 -2
  189. data/src/core/load_balancing/xds/cds.cc +3 -1
  190. data/src/core/load_balancing/xds/xds_cluster_impl.cc +0 -1
  191. data/src/core/mitigation_engine/mitigation.h +14 -5
  192. data/src/core/mitigation_engine/mitigation_engine.h +7 -3
  193. data/src/core/mitigation_engine/mitigation_provider.h +2 -1
  194. data/src/core/plugin_registry/grpc_plugin_registry.cc +39 -8
  195. data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.cc → dns_resolver.cc} +42 -41
  196. data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.h → dns_resolver.h} +8 -5
  197. data/src/core/resolver/dns/{event_engine/service_config_helper.cc → service_config_helper.cc} +1 -1
  198. data/src/core/resolver/dns/{event_engine/service_config_helper.h → service_config_helper.h} +3 -3
  199. data/src/core/resolver/endpoint_addresses.h +3 -0
  200. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +2 -1
  201. data/src/core/resolver/xds/xds_resolver.cc +35 -9
  202. data/src/core/server/server.cc +2 -6
  203. data/src/core/server/server_config_selector.h +18 -3
  204. data/src/core/server/server_config_selector_filter.cc +178 -91
  205. data/src/core/server/server_config_selector_filter.h +58 -3
  206. data/src/core/server/xds_server_config_fetcher.cc +196 -129
  207. data/src/core/server/xds_server_config_fetcher.h +49 -0
  208. data/src/core/server/xds_server_config_fetcher_legacy.cc +41 -37
  209. data/src/core/telemetry/histogram.h +94 -14
  210. data/src/core/telemetry/instrument.cc +179 -74
  211. data/src/core/telemetry/instrument.h +78 -30
  212. data/src/core/telemetry/metrics.h +5 -0
  213. data/src/core/{resolver/dns/dns_resolver_plugin.h → telemetry/telemetry_label.h} +12 -8
  214. data/src/core/tsi/alts/crypt/aes_gcm.cc +10 -13
  215. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  216. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +3 -1
  217. data/src/core/tsi/ssl_telemetry_utils.cc +216 -259
  218. data/src/core/tsi/ssl_telemetry_utils.h +12 -2
  219. data/src/core/tsi/ssl_transport_security.cc +238 -80
  220. data/src/core/tsi/ssl_transport_security.h +63 -33
  221. data/src/core/tsi/tls_telemetry.cc +31 -0
  222. data/src/core/tsi/tls_telemetry.h +47 -0
  223. data/src/core/tsi/transport_security.cc +2 -2
  224. data/src/core/tsi/transport_security.h +1 -1
  225. data/src/core/tsi/transport_security_interface.h +1 -1
  226. data/src/core/{resolver/dns/native/dns_resolver.h → util/address_sorting_init.cc} +21 -8
  227. data/src/core/{resolver/dns/c_ares/grpc_ares_wrapper_posix.cc → util/address_sorting_init.h} +7 -8
  228. data/src/core/util/http_client/httpcli.cc +16 -53
  229. data/src/core/util/http_client/httpcli.h +0 -7
  230. data/src/core/util/http_client/httpcli_security_connector.cc +13 -8
  231. data/src/core/util/linux/cpu.cc +1 -1
  232. data/src/core/util/load_file.cc +3 -9
  233. data/src/core/util/load_file.h +3 -4
  234. data/src/core/util/matchers.h +8 -0
  235. data/src/core/util/posix/cpu.cc +1 -1
  236. data/src/core/util/status_helper.cc +0 -20
  237. data/src/core/util/status_helper.h +3 -14
  238. data/src/core/xds/grpc/xds_audit_logger_registry.cc +51 -31
  239. data/src/core/xds/grpc/xds_audit_logger_registry.h +17 -3
  240. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -10
  241. data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -6
  242. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +488 -0
  243. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.h +97 -0
  244. data/src/core/xds/grpc/xds_certificate_provider.cc +7 -7
  245. data/src/core/xds/grpc/xds_client_grpc.cc +4 -8
  246. data/src/core/xds/grpc/xds_client_grpc.h +0 -4
  247. data/src/core/xds/grpc/xds_cluster.h +1 -0
  248. data/src/core/xds/grpc/xds_cluster_parser.cc +1 -5
  249. data/src/core/xds/grpc/xds_cluster_parser.h +0 -2
  250. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +0 -2
  251. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +0 -2
  252. data/src/core/xds/grpc/xds_common_types.cc +0 -91
  253. data/src/core/xds/grpc/xds_common_types.h +1 -47
  254. data/src/core/xds/grpc/xds_common_types_parser.cc +84 -378
  255. data/src/core/xds/grpc/xds_common_types_parser.h +9 -11
  256. data/src/core/xds/grpc/xds_endpoint_parser.cc +0 -2
  257. data/src/core/xds/grpc/xds_grpc_service_parser.cc +177 -0
  258. data/src/core/{resolver/dns/c_ares/dns_resolver_ares.h → xds/grpc/xds_grpc_service_parser.h} +14 -9
  259. data/src/core/xds/grpc/xds_http_composite_filter.cc +26 -21
  260. data/src/core/xds/grpc/xds_http_composite_filter.h +4 -3
  261. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +418 -0
  262. data/src/core/xds/grpc/xds_http_ext_proc_filter.h +89 -0
  263. data/src/core/xds/grpc/xds_http_fault_filter.cc +9 -12
  264. data/src/core/xds/grpc/xds_http_fault_filter.h +1 -4
  265. data/src/core/xds/grpc/xds_http_filter.cc +2 -1
  266. data/src/core/xds/grpc/xds_http_filter.h +6 -5
  267. data/src/core/xds/grpc/xds_http_filter_registry.cc +10 -127
  268. data/src/core/xds/grpc/xds_http_filter_registry.h +7 -59
  269. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +13 -14
  270. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -2
  271. data/src/core/xds/grpc/xds_http_rbac_filter.cc +403 -25
  272. data/src/core/xds/grpc/xds_http_rbac_filter.h +1 -3
  273. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +8 -13
  274. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +1 -4
  275. data/src/core/xds/grpc/xds_lb_policy_registry.cc +0 -292
  276. data/src/core/xds/grpc/xds_lb_policy_registry.h +7 -3
  277. data/src/core/xds/grpc/xds_listener.cc +2 -0
  278. data/src/core/xds/grpc/xds_listener.h +5 -0
  279. data/src/core/xds/grpc/xds_listener_parser.cc +16 -11
  280. data/src/core/xds/grpc/xds_matcher_parse.h +3 -1
  281. data/src/core/xds/grpc/xds_metadata_parser.cc +6 -1
  282. data/src/core/xds/grpc/xds_metadata_parser.h +2 -0
  283. data/src/core/xds/grpc/xds_route_config.cc +2 -0
  284. data/src/core/xds/grpc/xds_route_config.h +3 -1
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +13 -79
  286. data/src/core/xds/grpc/xds_route_config_parser.h +0 -3
  287. data/src/core/xds/grpc/xds_routing.cc +116 -69
  288. data/src/core/xds/grpc/xds_routing.h +19 -8
  289. data/src/core/xds/grpc/xds_tls_context.cc +117 -0
  290. data/src/core/xds/grpc/xds_tls_context.h +76 -0
  291. data/src/core/xds/grpc/xds_tls_context_parser.cc +275 -0
  292. data/src/core/xds/grpc/xds_tls_context_parser.h +35 -0
  293. data/src/core/xds/grpc/xds_transport_grpc.cc +41 -38
  294. data/src/core/xds/grpc/xds_transport_grpc.h +4 -2
  295. data/src/ruby/ext/grpc/rb_call.c +26 -15
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +6 -5
  297. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  298. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  299. data/src/ruby/lib/grpc/version.rb +1 -1
  300. data/src/ruby/pb/test/client.rb +5 -4
  301. data/src/ruby/spec/call_spec.rb +14 -0
  302. data/src/ruby/spec/generic/server_interceptors_spec.rb +3 -6
  303. metadata +50 -35
  304. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +0 -716
  305. data/src/core/lib/iomgr/resolve_address.cc +0 -59
  306. data/src/core/lib/iomgr/resolve_address.h +0 -125
  307. data/src/core/lib/iomgr/resolve_address_impl.h +0 -58
  308. data/src/core/lib/iomgr/resolve_address_posix.cc +0 -184
  309. data/src/core/lib/iomgr/resolve_address_posix.h +0 -78
  310. data/src/core/lib/iomgr/resolve_address_windows.cc +0 -169
  311. data/src/core/lib/iomgr/resolve_address_windows.h +0 -76
  312. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +0 -781
  313. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +0 -93
  314. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +0 -203
  315. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +0 -838
  316. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +0 -1237
  317. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +0 -130
  318. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +0 -35
  319. data/src/core/resolver/dns/dns_resolver_plugin.cc +0 -64
  320. data/src/core/resolver/dns/native/dns_resolver.cc +0 -173
  321. data/src/core/util/json/json_util.cc +0 -101
  322. data/src/core/util/json/json_util.h +0 -163
@@ -538,6 +538,11 @@ static EVP_PKEY* pkey_from_jwk(const Json& json, const char* kty) {
538
538
  LOG(ERROR) << "Could not create rsa key.";
539
539
  goto end;
540
540
  }
541
+ #else
542
+ if (bld == nullptr) {
543
+ LOG(ERROR) << "Could not create OSSL_PARAM_BLD.";
544
+ goto end;
545
+ }
541
546
  #endif
542
547
  it = json.object().find("n");
543
548
  if (it == json.object().end()) {
@@ -562,7 +567,16 @@ static EVP_PKEY* pkey_from_jwk(const Json& json, const char* kty) {
562
567
  tmp_n = nullptr;
563
568
  tmp_e = nullptr;
564
569
  result = EVP_PKEY_new();
565
- EVP_PKEY_set1_RSA(result, rsa); // uprefs rsa.
570
+ if (result == nullptr) {
571
+ LOG(ERROR) << "Could not create EVP_PKEY.";
572
+ goto end;
573
+ }
574
+ if (EVP_PKEY_set1_RSA(result, rsa) == 0) {
575
+ LOG(ERROR) << "Cannot set RSA key from inputs.";
576
+ EVP_PKEY_free(result);
577
+ result = nullptr;
578
+ goto end;
579
+ }
566
580
  #else
567
581
 
568
582
  if (!OSSL_PARAM_BLD_push_BN(bld, "n", tmp_n) ||
@@ -44,7 +44,7 @@ class JwtTokenFileCallCredentials::FileReader final
44
44
 
45
45
  private:
46
46
  void ReadFile() {
47
- auto contents = LoadFile(creds_->path_, /*add_null_terminator=*/false);
47
+ auto contents = LoadFile(creds_->path_);
48
48
  if (!contents.ok()) {
49
49
  on_done_(absl::UnavailableError(contents.status().message()));
50
50
  return;
@@ -220,33 +220,20 @@ UniqueTypeName Oauth2TokenFetcherCredentials::type() const {
220
220
  return kFactory.Create();
221
221
  }
222
222
 
223
- OrphanablePtr<TokenFetcherCredentials::FetchRequest>
224
- Oauth2TokenFetcherCredentials::FetchToken(
225
- Timestamp deadline,
226
- absl::AnyInvocable<
227
- void(absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)>
228
- on_done) {
229
- return MakeOrphanable<HttpTokenFetcherCredentials::HttpFetchRequest>(
230
- this, deadline,
231
- [on_done = std::move(on_done)](
232
- absl::StatusOr<grpc_http_response> response) mutable {
233
- if (!response.ok()) {
234
- on_done(response.status());
235
- return;
236
- }
237
- // Parse oauth2 token.
238
- std::optional<Slice> access_token_value;
239
- Duration token_lifetime;
240
- grpc_credentials_status status =
241
- grpc_oauth2_token_fetcher_credentials_parse_server_response(
242
- &(*response), &access_token_value, &token_lifetime);
243
- if (status != GRPC_CREDENTIALS_OK) {
244
- on_done(absl::UnavailableError("error parsing oauth2 token"));
245
- return;
246
- }
247
- on_done(MakeRefCounted<Token>(std::move(*access_token_value),
248
- Timestamp::Now() + token_lifetime));
249
- });
223
+ absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>
224
+ Oauth2TokenFetcherCredentials::ExtractToken(
225
+ const grpc_http_response& response) {
226
+ // Parse oauth2 token.
227
+ std::optional<Slice> access_token_value;
228
+ Duration token_lifetime;
229
+ grpc_credentials_status status =
230
+ grpc_oauth2_token_fetcher_credentials_parse_server_response(
231
+ &response, &access_token_value, &token_lifetime);
232
+ if (status != GRPC_CREDENTIALS_OK) {
233
+ return absl::UnavailableError("error parsing oauth2 token");
234
+ }
235
+ return MakeRefCounted<Token>(std::move(*access_token_value),
236
+ Timestamp::Now() + token_lifetime);
250
237
  }
251
238
 
252
239
  } // namespace grpc_core
@@ -298,6 +285,7 @@ class grpc_compute_engine_token_fetcher_credentials
298
285
  grpc_core::OrphanablePtr<grpc_core::HttpRequest> StartHttpRequest(
299
286
  grpc_polling_entity* pollent, grpc_core::Timestamp deadline,
300
287
  grpc_http_response* response, grpc_closure* on_complete) override {
288
+ email_fetcher_->StartEmailFetch();
301
289
  memset(response, 0, sizeof(*response));
302
290
  grpc_http_header header = {const_cast<char*>("Metadata-Flavor"),
303
291
  const_cast<char*>("Google")};
@@ -322,39 +310,25 @@ class grpc_compute_engine_token_fetcher_credentials
322
310
  return http_request;
323
311
  }
324
312
 
325
- grpc_core::OrphanablePtr<FetchRequest> FetchToken(
326
- grpc_core::Timestamp deadline,
327
- absl::AnyInvocable<void(absl::StatusOr<grpc_core::RefCountedPtr<
328
- TokenFetcherCredentials::Token>>)>
329
- on_done) override {
330
- email_fetcher_->StartEmailFetch();
331
- return grpc_core::MakeOrphanable<HttpFetchRequest>(
332
- this, deadline,
333
- [email_fetcher = email_fetcher_, on_done = std::move(on_done)](
334
- absl::StatusOr<grpc_http_response> response) mutable {
335
- if (!response.ok()) {
336
- on_done(response.status());
337
- return;
338
- }
339
- std::optional<grpc_core::Slice> access_token_value;
340
- grpc_core::Duration token_lifetime;
341
- grpc_credentials_status status =
342
- grpc_oauth2_token_fetcher_credentials_parse_server_response(
343
- &(*response), &access_token_value, &token_lifetime);
344
- if (status != GRPC_CREDENTIALS_OK) {
345
- on_done(absl::UnavailableError("error parsing oauth2 token"));
346
- return;
347
- }
348
- on_done(grpc_core::MakeRefCounted<TokenWithEmail>(
349
- std::move(*access_token_value),
350
- grpc_core::Timestamp::Now() + token_lifetime,
351
- std::move(email_fetcher)));
352
- });
313
+ absl::StatusOr<grpc_core::RefCountedPtr<Token>> ExtractToken(
314
+ const grpc_http_response& response) final {
315
+ std::optional<grpc_core::Slice> access_token_value;
316
+ grpc_core::Duration token_lifetime;
317
+ grpc_credentials_status status =
318
+ grpc_oauth2_token_fetcher_credentials_parse_server_response(
319
+ &response, &access_token_value, &token_lifetime);
320
+ if (status != GRPC_CREDENTIALS_OK) {
321
+ return absl::UnavailableError("error parsing oauth2 token");
322
+ }
323
+ return grpc_core::MakeRefCounted<TokenWithEmail>(
324
+ std::move(*access_token_value),
325
+ grpc_core::Timestamp::Now() + token_lifetime, email_fetcher_);
353
326
  }
354
327
 
355
328
  grpc_core::RefCountedPtr<grpc_core::EmailFetcher> email_fetcher_;
356
329
  std::vector<grpc_core::URI::QueryParam> query_params_;
357
330
  };
331
+
358
332
  } // namespace
359
333
 
360
334
  grpc_call_credentials* grpc_google_compute_engine_credentials_create(
@@ -469,21 +443,20 @@ namespace grpc_core {
469
443
 
470
444
  namespace {
471
445
 
472
- void MaybeAddToBody(const char* field_name, const char* field,
446
+ void MaybeAddToBody(absl::string_view field_name, absl::string_view field,
473
447
  std::vector<std::string>* body) {
474
- if (field == nullptr || strlen(field) == 0) return;
448
+ if (field.empty()) return;
475
449
  body->push_back(absl::StrFormat("&%s=%s", field_name, field));
476
450
  }
477
451
 
478
- grpc_error_handle LoadTokenFile(const char* path, grpc_slice* token) {
479
- auto slice = LoadFile(path, /*add_null_terminator=*/true);
452
+ absl::StatusOr<Slice> LoadTokenFile(const char* path) {
453
+ auto slice = LoadFile(path);
480
454
  if (!slice.ok()) return slice.status();
481
455
  if (slice->empty()) {
482
456
  LOG(ERROR) << "Token file " << path << " is empty";
483
457
  return GRPC_ERROR_CREATE("Token file is empty.");
484
458
  }
485
- *token = slice->TakeCSlice();
486
- return absl::OkStatus();
459
+ return slice;
487
460
  }
488
461
 
489
462
  class StsTokenFetcherCredentials : public Oauth2TokenFetcherCredentials {
@@ -543,43 +516,33 @@ class StsTokenFetcherCredentials : public Oauth2TokenFetcherCredentials {
543
516
  grpc_error_handle FillBody(char** body, size_t* body_length) {
544
517
  *body = nullptr;
545
518
  std::vector<std::string> body_parts;
546
- grpc_slice subject_token = grpc_empty_slice();
547
- grpc_slice actor_token = grpc_empty_slice();
548
- grpc_error_handle err;
549
519
 
550
- auto cleanup = [&body, &body_length, &body_parts, &subject_token,
551
- &actor_token, &err]() {
520
+ auto cleanup = [&body, &body_length, &body_parts](absl::Status err) {
552
521
  if (err.ok()) {
553
522
  std::string body_str = absl::StrJoin(body_parts, "");
554
523
  *body = gpr_strdup(body_str.c_str());
555
524
  *body_length = body_str.size();
556
525
  }
557
- CSliceUnref(subject_token);
558
- CSliceUnref(actor_token);
559
526
  return err;
560
527
  };
561
528
 
562
- err = LoadTokenFile(subject_token_path_.get(), &subject_token);
563
- if (!err.ok()) return cleanup();
529
+ auto subject_token = LoadTokenFile(subject_token_path_.get());
530
+ if (!subject_token.ok()) return cleanup(subject_token.status());
564
531
  body_parts.push_back(absl::StrFormat(
565
532
  GRPC_STS_POST_MINIMAL_BODY_FORMAT_STRING,
566
- reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(subject_token)),
567
- subject_token_type_.get()));
533
+ subject_token->as_string_view(), subject_token_type_.get()));
568
534
  MaybeAddToBody("resource", resource_.get(), &body_parts);
569
535
  MaybeAddToBody("audience", audience_.get(), &body_parts);
570
536
  MaybeAddToBody("scope", scope_.get(), &body_parts);
571
537
  MaybeAddToBody("requested_token_type", requested_token_type_.get(),
572
538
  &body_parts);
573
539
  if ((actor_token_path_ != nullptr) && *actor_token_path_ != '\0') {
574
- err = LoadTokenFile(actor_token_path_.get(), &actor_token);
575
- if (!err.ok()) return cleanup();
576
- MaybeAddToBody(
577
- "actor_token",
578
- reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(actor_token)),
579
- &body_parts);
540
+ auto actor_token = LoadTokenFile(actor_token_path_.get());
541
+ if (!actor_token.ok()) return cleanup(actor_token.status());
542
+ MaybeAddToBody("actor_token", actor_token->as_string_view(), &body_parts);
580
543
  MaybeAddToBody("actor_token_type", actor_token_type_.get(), &body_parts);
581
544
  }
582
- return cleanup();
545
+ return cleanup(absl::OkStatus());
583
546
  }
584
547
 
585
548
  URI sts_url_;
@@ -95,11 +95,8 @@ class Oauth2TokenFetcherCredentials : public HttpTokenFetcherCredentials {
95
95
 
96
96
  UniqueTypeName type() const override;
97
97
 
98
- OrphanablePtr<FetchRequest> FetchToken(
99
- Timestamp deadline,
100
- absl::AnyInvocable<
101
- void(absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)>
102
- on_done) final;
98
+ absl::StatusOr<RefCountedPtr<Token>> ExtractToken(
99
+ const grpc_http_response& response) final;
103
100
 
104
101
  private:
105
102
  int cmp_impl(const grpc_call_credentials* other) const override {
@@ -21,6 +21,7 @@
21
21
  #include "src/core/lib/debug/trace.h"
22
22
  #include "src/core/lib/event_engine/default_event_engine.h"
23
23
  #include "src/core/lib/iomgr/pollset_set.h"
24
+ #include "src/core/lib/promise/cancel_callback.h"
24
25
  #include "src/core/lib/promise/context.h"
25
26
  #include "src/core/lib/promise/poll.h"
26
27
  #include "src/core/lib/promise/promise.h"
@@ -192,9 +193,6 @@ void TokenFetcherCredentials::FetchState::ResumeQueuedCalls(
192
193
  queued_call->result = token;
193
194
  queued_call->done.store(true, std::memory_order_release);
194
195
  queued_call->waker.Wakeup();
195
- grpc_polling_entity_del_from_pollset_set(
196
- queued_call->pollent,
197
- grpc_polling_entity_pollset_set(&creds_->pollent_));
198
196
  }
199
197
  queued_calls_.clear();
200
198
  }
@@ -204,9 +202,6 @@ TokenFetcherCredentials::FetchState::QueueCall(
204
202
  ClientMetadataHandle initial_metadata) {
205
203
  auto queued_call = MakeRefCounted<QueuedCall>();
206
204
  queued_call->waker = GetContext<Activity>()->MakeNonOwningWaker();
207
- queued_call->pollent = GetContext<grpc_polling_entity>();
208
- grpc_polling_entity_add_to_pollset_set(
209
- queued_call->pollent, grpc_polling_entity_pollset_set(&creds_->pollent_));
210
205
  queued_call->md = std::move(initial_metadata);
211
206
  queued_calls_.insert(queued_call);
212
207
  // If backoff has expired since the last attempt, trigger a new one.
@@ -281,25 +276,39 @@ TokenFetcherCredentials::GetRequestMetadata(
281
276
  << " no cached token; queuing call";
282
277
  queued_call = fetch_state_->QueueCall(std::move(initial_metadata));
283
278
  }
284
- return [this, queued_call = std::move(queued_call)]()
285
- -> Poll<absl::StatusOr<ClientMetadataHandle>> {
286
- if (!queued_call->done.load(std::memory_order_acquire)) {
287
- return Pending{};
288
- }
289
- if (!queued_call->result.ok()) {
290
- GRPC_TRACE_LOG(token_fetcher_credentials, INFO)
291
- << "[TokenFetcherCredentials " << this
292
- << "]: " << GetContext<Activity>()->DebugTag()
293
- << " token fetch failed; failing call";
294
- return queued_call->result.status();
295
- }
296
- GRPC_TRACE_LOG(token_fetcher_credentials, INFO)
297
- << "[TokenFetcherCredentials " << this
298
- << "]: " << GetContext<Activity>()->DebugTag()
299
- << " token fetch complete; resuming call";
300
- (*queued_call->result)->AddTokenToClientInitialMetadata(*queued_call->md);
301
- return std::move(queued_call->md);
302
- };
279
+ grpc_polling_entity_add_to_pollset_set(
280
+ GetContext<grpc_polling_entity>(),
281
+ grpc_polling_entity_pollset_set(&pollent_));
282
+ return OnCancel(
283
+ [self = WeakRefAsSubclass<TokenFetcherCredentials>(),
284
+ queued_call = std::move(
285
+ queued_call)]() -> Poll<absl::StatusOr<ClientMetadataHandle>> {
286
+ if (!queued_call->done.load(std::memory_order_acquire)) {
287
+ return Pending{};
288
+ }
289
+ grpc_polling_entity_del_from_pollset_set(
290
+ GetContext<grpc_polling_entity>(),
291
+ grpc_polling_entity_pollset_set(&self->pollent_));
292
+ if (!queued_call->result.ok()) {
293
+ GRPC_TRACE_LOG(token_fetcher_credentials, INFO)
294
+ << "[TokenFetcherCredentials " << self.get()
295
+ << "]: " << GetContext<Activity>()->DebugTag()
296
+ << " token fetch failed; failing call";
297
+ return queued_call->result.status();
298
+ }
299
+ GRPC_TRACE_LOG(token_fetcher_credentials, INFO)
300
+ << "[TokenFetcherCredentials " << self.get()
301
+ << "]: " << GetContext<Activity>()->DebugTag()
302
+ << " token fetch complete; resuming call";
303
+ (*queued_call->result)
304
+ ->AddTokenToClientInitialMetadata(*queued_call->md);
305
+ return std::move(queued_call->md);
306
+ },
307
+ [self = WeakRefAsSubclass<TokenFetcherCredentials>(),
308
+ pollent = GetContext<grpc_polling_entity>()]() {
309
+ grpc_polling_entity_del_from_pollset_set(
310
+ pollent, grpc_polling_entity_pollset_set(&self->pollent_));
311
+ });
303
312
  }
304
313
 
305
314
  //
@@ -307,13 +316,13 @@ TokenFetcherCredentials::GetRequestMetadata(
307
316
  //
308
317
 
309
318
  HttpTokenFetcherCredentials::HttpFetchRequest::HttpFetchRequest(
310
- HttpTokenFetcherCredentials* creds, Timestamp deadline,
311
- absl::AnyInvocable<void(absl::StatusOr<grpc_http_response>)> on_done)
312
- : on_done_(std::move(on_done)) {
319
+ WeakRefCountedPtr<HttpTokenFetcherCredentials> creds, Timestamp deadline,
320
+ absl::AnyInvocable<void(absl::StatusOr<RefCountedPtr<Token>>)> on_done)
321
+ : creds_(std::move(creds)), on_done_(std::move(on_done)) {
313
322
  GRPC_CLOSURE_INIT(&on_http_response_, OnHttpResponse, this, nullptr);
314
323
  Ref().release(); // Ref held by HTTP request callback.
315
- http_request_ = creds->StartHttpRequest(creds->pollent(), deadline,
316
- &response_, &on_http_response_);
324
+ http_request_ = creds_->StartHttpRequest(creds_->pollent(), deadline,
325
+ &response_, &on_http_response_);
317
326
  }
318
327
 
319
328
  void HttpTokenFetcherCredentials::HttpFetchRequest::Orphan() {
@@ -332,6 +341,7 @@ void HttpTokenFetcherCredentials::HttpFetchRequest::OnHttpResponse(
332
341
  self->on_done_(absl::UnavailableError(StatusToString(error)));
333
342
  return;
334
343
  }
344
+ // Check HTTP status code.
335
345
  if (self->response_.status != 200) {
336
346
  grpc_status_code status_code =
337
347
  grpc_http2_status_to_grpc_status(self->response_.status);
@@ -344,7 +354,18 @@ void HttpTokenFetcherCredentials::HttpFetchRequest::OnHttpResponse(
344
354
  self->response_.status)));
345
355
  return;
346
356
  }
347
- self->on_done_(self->response_);
357
+ // Extract token and return result.
358
+ auto token = self->creds_->ExtractToken(self->response_);
359
+ self->on_done_(std::move(token));
360
+ }
361
+
362
+ OrphanablePtr<TokenFetcherCredentials::FetchRequest>
363
+ HttpTokenFetcherCredentials::FetchToken(
364
+ Timestamp deadline,
365
+ absl::AnyInvocable<void(absl::StatusOr<RefCountedPtr<Token>>)> on_done) {
366
+ return MakeOrphanable<HttpFetchRequest>(
367
+ WeakRefAsSubclass<HttpTokenFetcherCredentials>(), deadline,
368
+ std::move(on_done));
348
369
  }
349
370
 
350
371
  } // namespace grpc_core
@@ -102,7 +102,6 @@ class TokenFetcherCredentials : public grpc_call_credentials {
102
102
  struct QueuedCall : public RefCounted<QueuedCall> {
103
103
  std::atomic<bool> done{false};
104
104
  Waker waker;
105
- grpc_polling_entity* pollent;
106
105
  ClientMetadataHandle md;
107
106
  absl::StatusOr<RefCountedPtr<Token>> result;
108
107
  };
@@ -183,32 +182,46 @@ class TokenFetcherCredentials : public grpc_call_credentials {
183
182
  };
184
183
 
185
184
  // A base class for fetching tokens via an HTTP request.
185
+ // Subclasses must implement StartHttpRequest() and ExtractToken().
186
186
  class HttpTokenFetcherCredentials : public TokenFetcherCredentials {
187
187
  public:
188
+ // Starts an HTTP request.
188
189
  virtual OrphanablePtr<HttpRequest> StartHttpRequest(
189
190
  grpc_polling_entity* pollent, Timestamp deadline,
190
191
  grpc_http_response* response, grpc_closure* on_complete) = 0;
191
192
 
192
- protected:
193
+ // Extracts a token from the HTTP response.
194
+ // This will be called only if the HTTP status code was 200 (OK).
195
+ virtual absl::StatusOr<RefCountedPtr<Token>> ExtractToken(
196
+ const grpc_http_response& response) = 0;
197
+
198
+ private:
193
199
  // State held for a pending HTTP request.
194
200
  class HttpFetchRequest : public TokenFetcherCredentials::FetchRequest {
195
201
  public:
196
- // The given callback should assume the http response status has already
197
- // been checked and handle the token parsing.
198
202
  HttpFetchRequest(
199
- HttpTokenFetcherCredentials* creds, Timestamp deadline,
200
- absl::AnyInvocable<void(absl::StatusOr<grpc_http_response>)> on_done);
203
+ WeakRefCountedPtr<HttpTokenFetcherCredentials> creds,
204
+ Timestamp deadline,
205
+ absl::AnyInvocable<void(absl::StatusOr<RefCountedPtr<Token>>)> on_done);
206
+
201
207
  ~HttpFetchRequest() override { grpc_http_response_destroy(&response_); }
202
208
 
203
209
  void Orphan() override;
204
210
 
205
211
  private:
206
212
  static void OnHttpResponse(void* arg, grpc_error_handle error);
207
- OrphanablePtr<HttpRequest> http_request_;
213
+
214
+ WeakRefCountedPtr<HttpTokenFetcherCredentials> creds_;
215
+ absl::AnyInvocable<void(absl::StatusOr<RefCountedPtr<Token>>)> on_done_;
208
216
  grpc_closure on_http_response_;
217
+ OrphanablePtr<HttpRequest> http_request_;
209
218
  grpc_http_response response_;
210
- absl::AnyInvocable<void(absl::StatusOr<grpc_http_response>)> on_done_;
211
219
  };
220
+
221
+ OrphanablePtr<FetchRequest> FetchToken(
222
+ Timestamp deadline,
223
+ absl::AnyInvocable<void(absl::StatusOr<RefCountedPtr<Token>>)> on_done)
224
+ final;
212
225
  };
213
226
 
214
227
  } // namespace grpc_core
@@ -266,14 +266,13 @@ static grpc_error_handle create_default_creds_from_path(
266
266
  if (creds_path.empty()) {
267
267
  return GRPC_ERROR_CREATE("creds_path unset");
268
268
  }
269
- auto creds_data =
270
- grpc_core::LoadFile(creds_path, /*add_null_terminator=*/false);
269
+ auto creds_data = grpc_core::LoadFile(creds_path);
271
270
  if (!creds_data.ok()) {
272
- return absl_status_to_grpc_error(creds_data.status());
271
+ return creds_data.status();
273
272
  }
274
273
  auto json = grpc_core::JsonParse(creds_data->as_string_view());
275
274
  if (!json.ok()) {
276
- return absl_status_to_grpc_error(json.status());
275
+ return json.status();
277
276
  }
278
277
  if (json->type() != Json::Type::kObject) {
279
278
  return GRPC_ERROR_CREATE(absl::StrCat("Failed to parse JSON \"",