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
@@ -0,0 +1,177 @@
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include "src/core/xds/grpc/xds_grpc_service_parser.h"
18
+
19
+ #include <memory>
20
+ #include <string>
21
+ #include <utility>
22
+ #include <variant>
23
+ #include <vector>
24
+
25
+ #include "src/core/config/core_configuration.h"
26
+ #include "src/core/util/down_cast.h"
27
+ #include "src/core/util/upb_utils.h"
28
+ #include "src/core/util/validation_errors.h"
29
+ #include "src/core/xds/grpc/xds_bootstrap_grpc.h"
30
+ #include "src/core/xds/grpc/xds_common_types.h"
31
+ #include "src/core/xds/grpc/xds_common_types_parser.h"
32
+ #include "src/core/xds/xds_client/xds_client.h"
33
+ #include "absl/strings/str_cat.h"
34
+ #include "absl/strings/string_view.h"
35
+
36
+ namespace grpc_core {
37
+
38
+ GrpcXdsServerTarget ParseXdsGrpcService(
39
+ const XdsResourceType::DecodeContext& context,
40
+ const envoy_config_core_v3_GrpcService* grpc_service,
41
+ ValidationErrors* errors) {
42
+ if (grpc_service == nullptr) {
43
+ errors->AddError("field not set");
44
+ return GrpcXdsServerTarget(/*server_uri=*/"",
45
+ /*channel_creds_config=*/nullptr,
46
+ /*call_creds_configs=*/{});
47
+ }
48
+ // timeout
49
+ Duration timeout = Duration::Zero();
50
+ if (auto* timeout_proto =
51
+ envoy_config_core_v3_GrpcService_timeout(grpc_service);
52
+ timeout_proto != nullptr) {
53
+ ValidationErrors::ScopedField field(errors, ".timeout");
54
+ timeout = ParseDuration(timeout_proto, errors);
55
+ if (timeout <= Duration::Zero()) {
56
+ errors->AddError("duration must be positive");
57
+ }
58
+ }
59
+ // initial_metadata
60
+ std::vector<std::pair<std::string, std::string>> initial_metadata;
61
+ size_t initial_metadata_size;
62
+ auto* initial_metadata_proto =
63
+ envoy_config_core_v3_GrpcService_initial_metadata(grpc_service,
64
+ &initial_metadata_size);
65
+ for (size_t i = 0; i < initial_metadata_size; ++i) {
66
+ ValidationErrors::ScopedField field(
67
+ errors, absl::StrCat(".initial_metadata[", i, "]"));
68
+ initial_metadata.push_back(
69
+ ParseXdsHeader(initial_metadata_proto[i], errors));
70
+ }
71
+ // google_grpc
72
+ ValidationErrors::ScopedField field(errors, ".google_grpc");
73
+ auto* google_grpc =
74
+ envoy_config_core_v3_GrpcService_google_grpc(grpc_service);
75
+ if (google_grpc == nullptr) {
76
+ errors->AddError("field not set");
77
+ return GrpcXdsServerTarget(/*server_uri=*/"",
78
+ /*channel_creds_config=*/nullptr,
79
+ /*call_creds_configs=*/{});
80
+ }
81
+ // target_uri
82
+ std::string target_uri = UpbStringToStdString(
83
+ envoy_config_core_v3_GrpcService_GoogleGrpc_target_uri(google_grpc));
84
+ if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(target_uri)) {
85
+ ValidationErrors::ScopedField field(errors, ".target_uri");
86
+ errors->AddError("invalid target URI");
87
+ }
88
+ // credentials
89
+ RefCountedPtr<const ChannelCredsConfig> channel_creds_config;
90
+ std::vector<RefCountedPtr<const CallCredsConfig>> call_creds_configs;
91
+ if (DownCast<const GrpcXdsServer&>(context.server).TrustedXdsServer()) {
92
+ // Trusted xDS server. Use credentials from the GoogleGrpc proto.
93
+ // First, look at channel creds.
94
+ {
95
+ ValidationErrors::ScopedField field(errors,
96
+ ".channel_credentials_plugin");
97
+ size_t size;
98
+ const auto* const* channel_creds_plugin =
99
+ envoy_config_core_v3_GrpcService_GoogleGrpc_channel_credentials_plugin(
100
+ google_grpc, &size);
101
+ if (size == 0) {
102
+ errors->AddError("field not set");
103
+ } else {
104
+ const auto& registry =
105
+ CoreConfiguration::Get().channel_creds_registry();
106
+ const auto& certificate_providers =
107
+ DownCast<const GrpcXdsBootstrap&>(context.client->bootstrap())
108
+ .certificate_providers();
109
+ for (size_t i = 0; i < size; ++i) {
110
+ ValidationErrors::ScopedField field(errors,
111
+ absl::StrCat("[", i, "]"));
112
+ auto extension =
113
+ ExtractXdsExtension(context, channel_creds_plugin[i], errors);
114
+ if (!extension.has_value()) continue;
115
+ if (!registry.IsProtoSupported(extension->type)) continue;
116
+ absl::string_view* serialized_config =
117
+ std::get_if<absl::string_view>(&extension->value);
118
+ if (serialized_config == nullptr) {
119
+ errors->AddError("can't decode config");
120
+ continue;
121
+ }
122
+ channel_creds_config =
123
+ registry.ParseProto(extension->type, *serialized_config,
124
+ certificate_providers, errors);
125
+ break;
126
+ }
127
+ if (channel_creds_config == nullptr) {
128
+ errors->AddError("no supported channel credentials type found");
129
+ }
130
+ }
131
+ }
132
+ // Now look at call creds.
133
+ {
134
+ ValidationErrors::ScopedField field(errors, ".call_credentials_plugin");
135
+ size_t size;
136
+ const auto* const* call_creds_plugin =
137
+ envoy_config_core_v3_GrpcService_GoogleGrpc_call_credentials_plugin(
138
+ google_grpc, &size);
139
+ const auto& registry = CoreConfiguration::Get().call_creds_registry();
140
+ for (size_t i = 0; i < size; ++i) {
141
+ ValidationErrors::ScopedField field(errors, absl::StrCat("[", i, "]"));
142
+ auto extension =
143
+ ExtractXdsExtension(context, call_creds_plugin[i], errors);
144
+ if (!extension.has_value()) continue;
145
+ if (!registry.IsProtoSupported(extension->type)) continue;
146
+ absl::string_view* serialized_config =
147
+ std::get_if<absl::string_view>(&extension->value);
148
+ if (serialized_config == nullptr) {
149
+ errors->AddError("can't decode config");
150
+ continue;
151
+ }
152
+ call_creds_configs.push_back(
153
+ registry.ParseProto(extension->type, *serialized_config, errors));
154
+ }
155
+ }
156
+ } else {
157
+ // Not a trusted xDS server. Do lookup in bootstrap.
158
+ const auto& bootstrap =
159
+ DownCast<const GrpcXdsBootstrap&>(context.client->bootstrap());
160
+ auto& allowed_grpc_services = bootstrap.allowed_grpc_services();
161
+ auto it = allowed_grpc_services.find(target_uri);
162
+ if (it == allowed_grpc_services.end()) {
163
+ ValidationErrors::ScopedField field(errors, ".target_uri");
164
+ errors->AddError(
165
+ "service not present in \"allowed_grpc_services\" "
166
+ "in bootstrap config");
167
+ } else {
168
+ channel_creds_config = it->second.channel_creds_config;
169
+ call_creds_configs = it->second.call_creds_configs;
170
+ }
171
+ }
172
+ return GrpcXdsServerTarget(target_uri, std::move(channel_creds_config),
173
+ std::move(call_creds_configs),
174
+ std::move(initial_metadata), timeout);
175
+ }
176
+
177
+ } // namespace grpc_core
@@ -1,4 +1,5 @@
1
- // Copyright 2022 The gRPC Authors
1
+ //
2
+ // Copyright 2018 gRPC authors.
2
3
  //
3
4
  // Licensed under the Apache License, Version 2.0 (the "License");
4
5
  // you may not use this file except in compliance with the License.
@@ -11,19 +12,23 @@
11
12
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
13
  // See the License for the specific language governing permissions and
13
14
  // limitations under the License.
14
- #ifndef GRPC_SRC_CORE_RESOLVER_DNS_C_ARES_DNS_RESOLVER_ARES_H
15
- #define GRPC_SRC_CORE_RESOLVER_DNS_C_ARES_DNS_RESOLVER_ARES_H
15
+ //
16
16
 
17
- #include <grpc/support/port_platform.h>
17
+ #ifndef GRPC_SRC_CORE_XDS_GRPC_XDS_GRPC_SERVICE_PARSER_H
18
+ #define GRPC_SRC_CORE_XDS_GRPC_XDS_GRPC_SERVICE_PARSER_H
18
19
 
19
- #include "src/core/config/core_configuration.h"
20
- #include "absl/strings/string_view.h"
20
+ #include "envoy/config/core/v3/grpc_service.upb.h"
21
+ #include "src/core/util/validation_errors.h"
22
+ #include "src/core/xds/grpc/xds_server_grpc.h"
23
+ #include "src/core/xds/xds_client/xds_resource_type.h"
21
24
 
22
25
  namespace grpc_core {
23
26
 
24
- bool ShouldUseAresDnsResolver(absl::string_view resolver_env);
25
- void RegisterAresDnsResolver(CoreConfiguration::Builder*);
27
+ GrpcXdsServerTarget ParseXdsGrpcService(
28
+ const XdsResourceType::DecodeContext& context,
29
+ const envoy_config_core_v3_GrpcService* grpc_service,
30
+ ValidationErrors* errors);
26
31
 
27
32
  } // namespace grpc_core
28
33
 
29
- #endif // GRPC_SRC_CORE_RESOLVER_DNS_C_ARES_DNS_RESOLVER_ARES_H
34
+ #endif // GRPC_SRC_CORE_XDS_GRPC_XDS_GRPC_SERVICE_PARSER_H
@@ -26,6 +26,7 @@
26
26
  #include "src/core/filter/composite/composite_filter.h"
27
27
  #include "src/core/util/validation_errors.h"
28
28
  #include "src/core/xds/grpc/xds_bootstrap_grpc.h"
29
+ #include "src/core/xds/grpc/xds_common_types_parser.h"
29
30
  #include "src/core/xds/grpc/xds_http_filter.h"
30
31
  #include "src/core/xds/grpc/xds_http_filter_registry.h"
31
32
  #include "src/core/xds/grpc/xds_matcher.h"
@@ -37,15 +38,16 @@
37
38
 
38
39
  namespace grpc_core {
39
40
 
40
- absl::string_view XdsHttpCompositeFilter::ConfigProtoName() const {
41
+ absl::string_view XdsHttpCompositeFilterFactory::ConfigProtoName() const {
41
42
  return "envoy.extensions.common.matching.v3.ExtensionWithMatcher";
42
43
  }
43
44
 
44
- absl::string_view XdsHttpCompositeFilter::OverrideConfigProtoName() const {
45
+ absl::string_view XdsHttpCompositeFilterFactory::OverrideConfigProtoName()
46
+ const {
45
47
  return "envoy.extensions.common.matching.v3.ExtensionWithMatcherPerRoute";
46
48
  }
47
49
 
48
- void XdsHttpCompositeFilter::PopulateSymtab(upb_DefPool* symtab) const {
50
+ void XdsHttpCompositeFilterFactory::PopulateSymtab(upb_DefPool* symtab) const {
49
51
  envoy_extensions_common_matching_v3_ExtensionWithMatcher_getmsgdef(symtab);
50
52
  envoy_extensions_common_matching_v3_ExtensionWithMatcherPerRoute_getmsgdef(
51
53
  symtab);
@@ -56,13 +58,14 @@ void XdsHttpCompositeFilter::PopulateSymtab(upb_DefPool* symtab) const {
56
58
  symtab);
57
59
  }
58
60
 
59
- void XdsHttpCompositeFilter::AddFilter(
61
+ void XdsHttpCompositeFilterFactory::AddFilter(
60
62
  FilterChainBuilder& builder,
61
63
  RefCountedPtr<const FilterConfig> config) const {
62
64
  builder.AddFilter<CompositeFilter>(std::move(config));
63
65
  }
64
66
 
65
- const grpc_channel_filter* XdsHttpCompositeFilter::channel_filter() const {
67
+ const grpc_channel_filter* XdsHttpCompositeFilterFactory::channel_filter()
68
+ const {
66
69
  return &CompositeFilter::kFilterVtable;
67
70
  }
68
71
 
@@ -167,22 +170,21 @@ class ExecuteFilterActionFactory final : public XdsMatcherActionFactory {
167
170
  envoy_config_core_v3_TypedExtensionConfig_typed_config(typed_config);
168
171
  ValidationErrors::ScopedField field(errors, ".typed_config.typed_config");
169
172
  auto extension = ExtractXdsExtension(context, any, errors);
170
- const XdsHttpFilterImpl* filter_impl = nullptr;
173
+ const XdsHttpFilterFactory* factory = nullptr;
171
174
  RefCountedPtr<const FilterConfig> config;
172
175
  if (extension.has_value()) {
173
- filter_impl =
174
- http_filter_registry.GetFilterForTopLevelType(extension->type);
175
- if (filter_impl == nullptr) {
176
+ factory = http_filter_registry.GetFilterForTopLevelType(extension->type);
177
+ if (factory == nullptr) {
176
178
  errors->AddError("unsupported filter type");
177
- } else if (filter_impl->IsTerminalFilter()) {
179
+ } else if (factory->IsTerminalFilter()) {
178
180
  errors->AddError(
179
181
  "terminal filters may not be used under composite filter");
180
182
  } else {
181
183
  config =
182
- filter_impl->ParseTopLevelConfig(name, context, *extension, errors);
184
+ factory->ParseTopLevelConfig(name, context, *extension, errors);
183
185
  }
184
186
  }
185
- return {filter_impl, std::move(config)};
187
+ return {factory, std::move(config)};
186
188
  }
187
189
  };
188
190
 
@@ -200,7 +202,8 @@ std::unique_ptr<XdsMatcher> ParseMatcher(
200
202
 
201
203
  } // namespace
202
204
 
203
- RefCountedPtr<const FilterConfig> XdsHttpCompositeFilter::ParseTopLevelConfig(
205
+ RefCountedPtr<const FilterConfig>
206
+ XdsHttpCompositeFilterFactory::ParseTopLevelConfig(
204
207
  absl::string_view /*instance_name*/,
205
208
  const XdsResourceType::DecodeContext& context,
206
209
  const XdsExtension& extension, ValidationErrors* errors) const {
@@ -251,7 +254,8 @@ RefCountedPtr<const FilterConfig> XdsHttpCompositeFilter::ParseTopLevelConfig(
251
254
  return config;
252
255
  }
253
256
 
254
- RefCountedPtr<const FilterConfig> XdsHttpCompositeFilter::ParseOverrideConfig(
257
+ RefCountedPtr<const FilterConfig>
258
+ XdsHttpCompositeFilterFactory::ParseOverrideConfig(
255
259
  absl::string_view /*instance_name*/,
256
260
  const XdsResourceType::DecodeContext& context,
257
261
  const XdsExtension& extension, ValidationErrors* errors) const {
@@ -279,17 +283,17 @@ RefCountedPtr<const FilterConfig> XdsHttpCompositeFilter::ParseOverrideConfig(
279
283
  return config;
280
284
  }
281
285
 
282
- RefCountedPtr<const FilterConfig> XdsHttpCompositeFilter::MergeConfigs(
286
+ RefCountedPtr<const FilterConfig> XdsHttpCompositeFilterFactory::MergeConfigs(
283
287
  RefCountedPtr<const FilterConfig> top_level_config,
284
288
  RefCountedPtr<const FilterConfig> virtual_host_override_config,
285
289
  RefCountedPtr<const FilterConfig> route_override_config,
286
290
  RefCountedPtr<const FilterConfig> cluster_weight_override_config,
287
- Blackboard& blackboard) const {
291
+ XdsTransportFactory& transport_factory, Blackboard& blackboard) const {
288
292
  // Get the config to use via our base class.
289
- auto config_to_use = XdsHttpFilterImpl::MergeConfigs(
293
+ auto config_to_use = XdsHttpFilterFactory::MergeConfigs(
290
294
  std::move(top_level_config), std::move(virtual_host_override_config),
291
295
  std::move(route_override_config),
292
- std::move(cluster_weight_override_config), blackboard);
296
+ std::move(cluster_weight_override_config), transport_factory, blackboard);
293
297
  auto& composite_config =
294
298
  DownCast<const CompositeFilter::Config&>(*config_to_use);
295
299
  if (composite_config.matcher == nullptr) return config_to_use;
@@ -304,12 +308,13 @@ RefCountedPtr<const FilterConfig> XdsHttpCompositeFilter::MergeConfigs(
304
308
  DownCast<const CompositeFilter::ExecuteFilterAction&>(action);
305
309
  auto& merged_configs = new_config->merged_config_map[&action];
306
310
  GRPC_CHECK(merged_configs.empty());
307
- for (const auto& [filter_impl, filter_config] :
311
+ for (const auto& [factory, filter_config] :
308
312
  execute_filter_action.filter_chain()) {
309
- merged_configs.push_back(filter_impl->MergeConfigs(
313
+ merged_configs.push_back(factory->MergeConfigs(
310
314
  filter_config, /*virtual_host_override_config=*/nullptr,
311
315
  /*route_override_config=*/nullptr,
312
- /*cluster_weight_override_config=*/nullptr, blackboard));
316
+ /*cluster_weight_override_config=*/nullptr, transport_factory,
317
+ blackboard));
313
318
  }
314
319
  });
315
320
  return new_config;
@@ -19,19 +19,19 @@
19
19
 
20
20
  #include <optional>
21
21
 
22
- #include "src/core/lib/channel/channel_args.h"
23
22
  #include "src/core/lib/channel/channel_fwd.h"
24
23
  #include "src/core/util/validation_errors.h"
25
24
  #include "src/core/xds/grpc/xds_common_types.h"
26
25
  #include "src/core/xds/grpc/xds_http_filter.h"
27
26
  #include "src/core/xds/xds_client/xds_resource_type.h"
27
+ #include "src/core/xds/xds_client/xds_transport.h"
28
28
  #include "upb/reflection/def.h"
29
29
  #include "absl/status/statusor.h"
30
30
  #include "absl/strings/string_view.h"
31
31
 
32
32
  namespace grpc_core {
33
33
 
34
- class XdsHttpCompositeFilter final : public XdsHttpFilterImpl {
34
+ class XdsHttpCompositeFilterFactory final : public XdsHttpFilterFactory {
35
35
  public:
36
36
  absl::string_view ConfigProtoName() const override;
37
37
  absl::string_view OverrideConfigProtoName() const override;
@@ -77,9 +77,10 @@ class XdsHttpCompositeFilter final : public XdsHttpFilterImpl {
77
77
  RefCountedPtr<const FilterConfig> virtual_host_override_config,
78
78
  RefCountedPtr<const FilterConfig> route_override_config,
79
79
  RefCountedPtr<const FilterConfig> cluster_weight_override_config,
80
+ XdsTransportFactory& transport_factory,
80
81
  Blackboard& blackboard) const override;
81
82
  bool IsSupportedOnClients() const override { return true; }
82
- bool IsSupportedOnServers() const override { return false; }
83
+ bool IsSupportedOnServers() const override { return true; }
83
84
  };
84
85
 
85
86
  } // namespace grpc_core