grpc 1.43.1 → 1.44.0.pre2

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 (382) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +84 -64
  3. data/include/grpc/grpc_security.h +10 -0
  4. data/include/grpc/impl/codegen/compression_types.h +0 -2
  5. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  6. data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
  7. data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
  8. data/src/core/ext/filters/client_channel/client_channel.h +8 -8
  9. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  10. data/src/core/ext/filters/client_channel/config_selector.h +4 -4
  11. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
  26. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
  35. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  36. data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
  37. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  48. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
  51. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  52. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  53. data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
  54. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  55. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  56. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  57. data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
  58. data/src/core/ext/filters/client_channel/subchannel.h +2 -3
  59. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
  60. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
  61. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
  63. data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
  64. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
  65. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
  67. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  68. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  69. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  70. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  71. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  72. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  73. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
  74. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
  75. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
  76. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
  78. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
  80. data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
  81. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
  82. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
  83. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  84. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  85. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
  87. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
  88. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
  89. data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
  90. data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
  91. data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
  92. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  93. data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
  94. data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
  95. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  96. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  100. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  101. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  102. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  103. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  104. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  105. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  106. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  107. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  108. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  109. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  110. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  111. data/src/core/ext/xds/upb_utils.h +65 -0
  112. data/src/core/ext/xds/xds_api.cc +81 -3458
  113. data/src/core/ext/xds/xds_api.h +56 -611
  114. data/src/core/ext/xds/xds_bootstrap.cc +189 -125
  115. data/src/core/ext/xds/xds_bootstrap.h +20 -15
  116. data/src/core/ext/xds/xds_certificate_provider.h +1 -0
  117. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  118. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  119. data/src/core/ext/xds/xds_client.cc +584 -994
  120. data/src/core/ext/xds/xds_client.h +78 -135
  121. data/src/core/ext/xds/xds_cluster.cc +451 -0
  122. data/src/core/ext/xds/xds_cluster.h +111 -0
  123. data/src/core/ext/xds/xds_common_types.cc +388 -0
  124. data/src/core/ext/xds/xds_common_types.h +110 -0
  125. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  126. data/src/core/ext/xds/xds_endpoint.h +135 -0
  127. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  128. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  129. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  130. data/src/core/ext/xds/xds_listener.cc +1036 -0
  131. data/src/core/ext/xds/xds_listener.h +220 -0
  132. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  133. data/src/core/ext/xds/xds_resource_type.h +98 -0
  134. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  135. data/src/core/ext/xds/xds_route_config.cc +993 -0
  136. data/src/core/ext/xds/xds_route_config.h +215 -0
  137. data/src/core/ext/xds/xds_routing.cc +11 -8
  138. data/src/core/ext/xds/xds_routing.h +8 -5
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
  140. data/src/core/lib/address_utils/parse_address.cc +20 -0
  141. data/src/core/lib/address_utils/parse_address.h +5 -0
  142. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  143. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  144. data/src/core/lib/backoff/backoff.cc +4 -30
  145. data/src/core/lib/backoff/backoff.h +3 -3
  146. data/src/core/lib/channel/channel_args.cc +0 -1
  147. data/src/core/lib/channel/channel_stack.cc +8 -0
  148. data/src/core/lib/channel/channel_stack.h +1 -1
  149. data/src/core/lib/channel/channel_stack_builder.cc +5 -9
  150. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  151. data/src/core/lib/channel/channelz.cc +1 -0
  152. data/src/core/lib/compression/compression.cc +19 -111
  153. data/src/core/lib/compression/compression_internal.cc +142 -202
  154. data/src/core/lib/compression/compression_internal.h +64 -69
  155. data/src/core/lib/compression/message_compress.cc +11 -11
  156. data/src/core/lib/compression/message_compress.h +2 -2
  157. data/src/core/lib/gpr/useful.h +4 -0
  158. data/src/core/lib/gprpp/bitset.h +7 -0
  159. data/src/core/lib/gprpp/chunked_vector.h +45 -3
  160. data/src/core/lib/gprpp/status_helper.cc +20 -28
  161. data/src/core/lib/gprpp/status_helper.h +6 -19
  162. data/src/core/lib/gprpp/table.h +11 -0
  163. data/src/core/lib/http/httpcli.cc +37 -46
  164. data/src/core/lib/http/httpcli.h +3 -15
  165. data/src/core/lib/iomgr/call_combiner.cc +15 -4
  166. data/src/core/lib/iomgr/closure.h +29 -9
  167. data/src/core/lib/iomgr/combiner.cc +25 -3
  168. data/src/core/lib/iomgr/error.cc +2 -0
  169. data/src/core/lib/iomgr/error.h +3 -0
  170. data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
  171. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  172. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  173. data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
  174. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  175. data/src/core/lib/iomgr/exec_ctx.cc +22 -9
  176. data/src/core/lib/iomgr/executor.cc +10 -1
  177. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  178. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  179. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  180. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  181. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  182. data/src/core/lib/iomgr/port.h +2 -2
  183. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  184. data/src/core/lib/iomgr/resolve_address.h +47 -44
  185. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  186. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  187. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  188. data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
  189. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  190. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  191. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  192. data/src/core/lib/iomgr/resolved_address.h +39 -0
  193. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  194. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  198. data/src/core/lib/matchers/matchers.cc +1 -1
  199. data/src/core/lib/promise/activity.h +49 -20
  200. data/src/core/lib/promise/detail/status.h +5 -0
  201. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  202. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  203. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
  204. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
  205. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
  206. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  207. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
  208. data/src/core/lib/resource_quota/api.h +0 -1
  209. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  210. data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
  211. data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
  212. data/src/core/lib/security/authorization/evaluate_args.h +1 -0
  213. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  214. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  215. data/src/core/lib/security/authorization/matchers.cc +227 -0
  216. data/src/core/lib/security/authorization/matchers.h +211 -0
  217. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  218. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  219. data/src/core/lib/security/context/security_context.cc +4 -2
  220. data/src/core/lib/security/context/security_context.h +1 -1
  221. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
  222. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  223. data/src/core/lib/security/credentials/credentials.h +10 -20
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
  226. data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
  227. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
  228. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  229. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  230. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
  231. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  232. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  233. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  234. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
  235. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  236. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
  237. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
  238. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  239. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  240. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  241. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
  243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
  244. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  245. data/src/core/lib/security/security_connector/security_connector.cc +0 -4
  246. data/src/core/lib/security/security_connector/security_connector.h +5 -1
  247. data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
  248. data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
  249. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
  250. data/src/core/lib/security/transport/auth_filters.h +7 -0
  251. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  252. data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
  253. data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
  254. data/src/core/{ext → lib}/service_config/service_config.h +4 -4
  255. data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
  256. data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
  257. data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
  258. data/src/core/lib/slice/slice.cc +3 -1
  259. data/src/core/lib/slice/slice.h +43 -13
  260. data/src/core/lib/slice/slice_intern.cc +3 -101
  261. data/src/core/lib/slice/slice_internal.h +1 -2
  262. data/src/core/lib/slice/slice_refcount.h +4 -13
  263. data/src/core/lib/slice/slice_refcount_base.h +0 -16
  264. data/src/core/lib/surface/call.cc +140 -382
  265. data/src/core/lib/surface/call.h +4 -4
  266. data/src/core/lib/surface/channel.cc +42 -44
  267. data/src/core/lib/surface/channel.h +4 -4
  268. data/src/core/lib/surface/init.cc +0 -2
  269. data/src/core/lib/surface/lame_client.cc +0 -1
  270. data/src/core/lib/surface/server.cc +12 -29
  271. data/src/core/lib/surface/server.h +2 -2
  272. data/src/core/lib/surface/version.cc +2 -2
  273. data/src/core/lib/transport/error_utils.h +14 -0
  274. data/src/core/lib/transport/metadata_batch.h +799 -717
  275. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  276. data/src/core/lib/transport/parsed_metadata.h +95 -92
  277. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  278. data/src/core/lib/transport/timeout_encoding.h +40 -10
  279. data/src/core/lib/transport/transport.h +1 -1
  280. data/src/core/lib/transport/transport_op_string.cc +6 -39
  281. data/src/core/lib/uri/uri_parser.cc +223 -53
  282. data/src/core/lib/uri/uri_parser.h +36 -23
  283. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
  284. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  285. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  286. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
  287. data/src/core/tsi/ssl_transport_security.cc +53 -13
  288. data/src/core/tsi/ssl_transport_security.h +18 -6
  289. data/src/ruby/ext/grpc/extconf.rb +10 -3
  290. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  291. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  292. data/src/ruby/lib/grpc/version.rb +1 -1
  293. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  294. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  295. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  296. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  297. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  298. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  299. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  300. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  301. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  302. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  303. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  304. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  305. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  306. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  307. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  308. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  309. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  310. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  311. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  312. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  313. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  314. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  315. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  316. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  317. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  318. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  319. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  320. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  321. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  322. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  323. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  324. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  325. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  326. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  327. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  328. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  329. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  330. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  331. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  332. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  333. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  334. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  335. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  336. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  337. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  338. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  339. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  340. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  341. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  346. data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  348. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  349. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  350. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  351. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  352. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  353. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
  354. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
  356. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  357. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
  358. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  359. data/third_party/xxhash/xxhash.h +607 -352
  360. metadata +149 -77
  361. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  362. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  363. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  364. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  365. data/src/core/lib/compression/compression_args.cc +0 -140
  366. data/src/core/lib/compression/compression_args.h +0 -58
  367. data/src/core/lib/compression/stream_compression.cc +0 -81
  368. data/src/core/lib/compression/stream_compression.h +0 -117
  369. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  370. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  371. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  372. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  373. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  374. data/src/core/lib/slice/static_slice.cc +0 -377
  375. data/src/core/lib/slice/static_slice.h +0 -300
  376. data/src/core/lib/transport/metadata.cc +0 -714
  377. data/src/core/lib/transport/metadata.h +0 -449
  378. data/src/core/lib/transport/metadata_batch.cc +0 -99
  379. data/src/core/lib/transport/static_metadata.cc +0 -1032
  380. data/src/core/lib/transport/static_metadata.h +0 -322
  381. data/src/core/lib/transport/status_metadata.cc +0 -63
  382. data/src/core/lib/transport/status_metadata.h +0 -48
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2018 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
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
+ //
18
16
 
19
17
  #ifndef GRPC_CORE_EXT_XDS_XDS_API_H
20
18
  #define GRPC_CORE_EXT_XDS_XDS_API_H
@@ -25,561 +23,53 @@
25
23
 
26
24
  #include <set>
27
25
 
28
- #include "absl/container/inlined_vector.h"
29
- #include "absl/types/optional.h"
30
- #include "absl/types/variant.h"
31
26
  #include "envoy/admin/v3/config_dump.upb.h"
32
- #include "re2/re2.h"
33
27
  #include "upb/def.hpp"
34
28
 
35
- #include <grpc/slice_buffer.h>
29
+ #include <grpc/slice.h>
36
30
 
37
- #include "src/core/ext/filters/client_channel/server_address.h"
31
+ #include "src/core/ext/xds/upb_utils.h"
38
32
  #include "src/core/ext/xds/xds_bootstrap.h"
39
33
  #include "src/core/ext/xds/xds_client_stats.h"
40
34
  #include "src/core/ext/xds/xds_http_filters.h"
41
35
  #include "src/core/lib/channel/status_util.h"
42
36
  #include "src/core/lib/matchers/matchers.h"
37
+ #include "src/core/lib/resolver/server_address.h"
43
38
 
44
39
  namespace grpc_core {
45
40
 
46
- bool XdsRbacEnabled();
47
-
48
41
  class XdsClient;
49
42
 
43
+ // TODO(roth): When we have time, split this into multiple pieces:
44
+ // - a common upb-based parsing framework (combine with XdsEncodingContext)
45
+ // - ADS request/response handling
46
+ // - LRS request/response handling
47
+ // - CSDS response generation
50
48
  class XdsApi {
51
49
  public:
52
- static const char* kLdsTypeUrl;
53
- static const char* kRdsTypeUrl;
54
- static const char* kCdsTypeUrl;
55
- static const char* kEdsTypeUrl;
56
-
57
- struct Duration {
58
- Duration() {}
59
- int64_t seconds = 0;
60
- int32_t nanos = 0;
61
- bool operator==(const Duration& other) const {
62
- return seconds == other.seconds && nanos == other.nanos;
63
- }
64
- std::string ToString() const {
65
- return absl::StrFormat("Duration seconds: %ld, nanos %d", seconds, nanos);
66
- }
67
- };
68
-
69
- using TypedPerFilterConfig =
70
- std::map<std::string, XdsHttpFilterImpl::FilterConfig>;
71
-
72
- struct RetryPolicy {
73
- internal::StatusCodeSet retry_on;
74
- uint32_t num_retries;
75
-
76
- struct RetryBackOff {
77
- Duration base_interval;
78
- Duration max_interval;
79
-
80
- bool operator==(const RetryBackOff& other) const {
81
- return base_interval == other.base_interval &&
82
- max_interval == other.max_interval;
83
- }
84
- std::string ToString() const;
85
- };
86
- RetryBackOff retry_back_off;
87
-
88
- bool operator==(const RetryPolicy& other) const {
89
- return (retry_on == other.retry_on && num_retries == other.num_retries &&
90
- retry_back_off == other.retry_back_off);
91
- }
92
- std::string ToString() const;
93
- };
94
-
95
- // TODO(donnadionne): When we can use absl::variant<>, consider using that
96
- // for: PathMatcher, HeaderMatcher, cluster_name and weighted_clusters
97
- struct Route {
98
- // Matchers for this route.
99
- struct Matchers {
100
- StringMatcher path_matcher;
101
- std::vector<HeaderMatcher> header_matchers;
102
- absl::optional<uint32_t> fraction_per_million;
103
-
104
- bool operator==(const Matchers& other) const {
105
- return path_matcher == other.path_matcher &&
106
- header_matchers == other.header_matchers &&
107
- fraction_per_million == other.fraction_per_million;
108
- }
109
- std::string ToString() const;
110
- };
111
-
112
- Matchers matchers;
113
-
114
- struct UnknownAction {
115
- bool operator==(const UnknownAction& /* other */) const { return true; }
116
- };
117
-
118
- struct RouteAction {
119
- struct HashPolicy {
120
- enum Type { HEADER, CHANNEL_ID };
121
- Type type;
122
- bool terminal = false;
123
- // Fields used for type HEADER.
124
- std::string header_name;
125
- std::unique_ptr<RE2> regex = nullptr;
126
- std::string regex_substitution;
127
-
128
- HashPolicy() {}
129
-
130
- // Copyable.
131
- HashPolicy(const HashPolicy& other);
132
- HashPolicy& operator=(const HashPolicy& other);
133
-
134
- // Moveable.
135
- HashPolicy(HashPolicy&& other) noexcept;
136
- HashPolicy& operator=(HashPolicy&& other) noexcept;
137
-
138
- bool operator==(const HashPolicy& other) const;
139
- std::string ToString() const;
140
- };
141
-
142
- struct ClusterWeight {
143
- std::string name;
144
- uint32_t weight;
145
- TypedPerFilterConfig typed_per_filter_config;
146
-
147
- bool operator==(const ClusterWeight& other) const {
148
- return name == other.name && weight == other.weight &&
149
- typed_per_filter_config == other.typed_per_filter_config;
150
- }
151
- std::string ToString() const;
152
- };
153
-
154
- std::vector<HashPolicy> hash_policies;
155
- absl::optional<RetryPolicy> retry_policy;
156
-
157
- // Action for this route.
158
- // TODO(roth): When we can use absl::variant<>, consider using that
159
- // here, to enforce the fact that only one of the two fields can be set.
160
- std::string cluster_name;
161
- std::vector<ClusterWeight> weighted_clusters;
162
- // Storing the timeout duration from route action:
163
- // RouteAction.max_stream_duration.grpc_timeout_header_max or
164
- // RouteAction.max_stream_duration.max_stream_duration if the former is
165
- // not set.
166
- absl::optional<Duration> max_stream_duration;
167
-
168
- bool operator==(const RouteAction& other) const {
169
- return hash_policies == other.hash_policies &&
170
- retry_policy == other.retry_policy &&
171
- cluster_name == other.cluster_name &&
172
- weighted_clusters == other.weighted_clusters &&
173
- max_stream_duration == other.max_stream_duration;
174
- }
175
- std::string ToString() const;
176
- };
177
-
178
- struct NonForwardingAction {
179
- bool operator==(const NonForwardingAction& /* other */) const {
180
- return true;
181
- }
182
- };
183
-
184
- absl::variant<UnknownAction, RouteAction, NonForwardingAction> action;
185
- TypedPerFilterConfig typed_per_filter_config;
186
-
187
- bool operator==(const Route& other) const {
188
- return matchers == other.matchers && action == other.action &&
189
- typed_per_filter_config == other.typed_per_filter_config;
190
- }
191
- std::string ToString() const;
192
- };
193
-
194
- struct RdsUpdate {
195
- struct VirtualHost {
196
- std::vector<std::string> domains;
197
- std::vector<Route> routes;
198
- TypedPerFilterConfig typed_per_filter_config;
199
-
200
- bool operator==(const VirtualHost& other) const {
201
- return domains == other.domains && routes == other.routes &&
202
- typed_per_filter_config == other.typed_per_filter_config;
203
- }
204
- };
205
-
206
- std::vector<VirtualHost> virtual_hosts;
207
-
208
- bool operator==(const RdsUpdate& other) const {
209
- return virtual_hosts == other.virtual_hosts;
210
- }
211
- std::string ToString() const;
212
- };
213
-
214
- struct CommonTlsContext {
215
- struct CertificateProviderPluginInstance {
216
- std::string instance_name;
217
- std::string certificate_name;
218
-
219
- bool operator==(const CertificateProviderPluginInstance& other) const {
220
- return instance_name == other.instance_name &&
221
- certificate_name == other.certificate_name;
222
- }
223
-
224
- std::string ToString() const;
225
- bool Empty() const;
226
- };
227
-
228
- struct CertificateValidationContext {
229
- CertificateProviderPluginInstance ca_certificate_provider_instance;
230
- std::vector<StringMatcher> match_subject_alt_names;
231
-
232
- bool operator==(const CertificateValidationContext& other) const {
233
- return ca_certificate_provider_instance ==
234
- other.ca_certificate_provider_instance &&
235
- match_subject_alt_names == other.match_subject_alt_names;
236
- }
237
-
238
- std::string ToString() const;
239
- bool Empty() const;
240
- };
241
-
242
- CertificateValidationContext certificate_validation_context;
243
- CertificateProviderPluginInstance tls_certificate_provider_instance;
244
-
245
- bool operator==(const CommonTlsContext& other) const {
246
- return certificate_validation_context ==
247
- other.certificate_validation_context &&
248
- tls_certificate_provider_instance ==
249
- other.tls_certificate_provider_instance;
250
- }
251
-
252
- std::string ToString() const;
253
- bool Empty() const;
254
- };
255
-
256
- struct DownstreamTlsContext {
257
- CommonTlsContext common_tls_context;
258
- bool require_client_certificate = false;
259
-
260
- bool operator==(const DownstreamTlsContext& other) const {
261
- return common_tls_context == other.common_tls_context &&
262
- require_client_certificate == other.require_client_certificate;
263
- }
264
-
265
- std::string ToString() const;
266
- bool Empty() const;
267
- };
268
-
269
- // TODO(roth): When we can use absl::variant<>, consider using that
270
- // here, to enforce the fact that only one of the two fields can be set.
271
- struct LdsUpdate {
272
- enum class ListenerType {
273
- kTcpListener = 0,
274
- kHttpApiListener,
275
- } type;
276
-
277
- struct HttpConnectionManager {
278
- // The name to use in the RDS request.
279
- std::string route_config_name;
280
- // Storing the Http Connection Manager Common Http Protocol Option
281
- // max_stream_duration
282
- Duration http_max_stream_duration;
283
- // The RouteConfiguration to use for this listener.
284
- // Present only if it is inlined in the LDS response.
285
- absl::optional<RdsUpdate> rds_update;
286
-
287
- struct HttpFilter {
288
- std::string name;
289
- XdsHttpFilterImpl::FilterConfig config;
290
-
291
- bool operator==(const HttpFilter& other) const {
292
- return name == other.name && config == other.config;
293
- }
294
-
295
- std::string ToString() const;
296
- };
297
- std::vector<HttpFilter> http_filters;
298
-
299
- bool operator==(const HttpConnectionManager& other) const {
300
- return route_config_name == other.route_config_name &&
301
- http_max_stream_duration == other.http_max_stream_duration &&
302
- rds_update == other.rds_update &&
303
- http_filters == other.http_filters;
304
- }
305
-
306
- std::string ToString() const;
307
- };
308
-
309
- // Populated for type=kHttpApiListener.
310
- HttpConnectionManager http_connection_manager;
311
-
312
- // Populated for type=kTcpListener.
313
- // host:port listening_address set when type is kTcpListener
314
- std::string address;
315
-
316
- struct FilterChainData {
317
- DownstreamTlsContext downstream_tls_context;
318
- // This is in principle the filter list.
319
- // We currently require exactly one filter, which is the HCM.
320
- HttpConnectionManager http_connection_manager;
321
-
322
- bool operator==(const FilterChainData& other) const {
323
- return downstream_tls_context == other.downstream_tls_context &&
324
- http_connection_manager == other.http_connection_manager;
325
- }
326
-
327
- std::string ToString() const;
50
+ // Interface defined by caller and passed to ParseAdsResponse().
51
+ class AdsResponseParserInterface {
52
+ public:
53
+ struct AdsResponseFields {
54
+ std::string type_url;
55
+ std::string version;
56
+ std::string nonce;
57
+ size_t num_resources;
328
58
  };
329
59
 
330
- // A multi-level map used to determine which filter chain to use for a given
331
- // incoming connection. Determining the right filter chain for a given
332
- // connection checks the following properties, in order:
333
- // - destination port (never matched, so not present in map)
334
- // - destination IP address
335
- // - server name (never matched, so not present in map)
336
- // - transport protocol (allows only "raw_buffer" or unset, prefers the
337
- // former, so only one of those two types is present in map)
338
- // - application protocol (never matched, so not present in map)
339
- // - connection source type (any, local or external)
340
- // - source IP address
341
- // - source port
342
- // https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/listener/v3/listener_components.proto#config-listener-v3-filterchainmatch
343
- // for more details
344
- struct FilterChainMap {
345
- struct FilterChainDataSharedPtr {
346
- std::shared_ptr<FilterChainData> data;
347
- bool operator==(const FilterChainDataSharedPtr& other) const {
348
- return *data == *other.data;
349
- }
350
- };
351
- struct CidrRange {
352
- grpc_resolved_address address;
353
- uint32_t prefix_len;
354
-
355
- bool operator==(const CidrRange& other) const {
356
- return memcmp(&address, &other.address, sizeof(address)) == 0 &&
357
- prefix_len == other.prefix_len;
358
- }
359
-
360
- std::string ToString() const;
361
- };
362
- using SourcePortsMap = std::map<uint16_t, FilterChainDataSharedPtr>;
363
- struct SourceIp {
364
- absl::optional<CidrRange> prefix_range;
365
- SourcePortsMap ports_map;
366
-
367
- bool operator==(const SourceIp& other) const {
368
- return prefix_range == other.prefix_range &&
369
- ports_map == other.ports_map;
370
- }
371
- };
372
- using SourceIpVector = std::vector<SourceIp>;
373
- enum class ConnectionSourceType {
374
- kAny = 0,
375
- kSameIpOrLoopback,
376
- kExternal
377
- };
378
- using ConnectionSourceTypesArray = std::array<SourceIpVector, 3>;
379
- struct DestinationIp {
380
- absl::optional<CidrRange> prefix_range;
381
- // We always fail match on server name, so those filter chains are not
382
- // included here.
383
- ConnectionSourceTypesArray source_types_array;
384
-
385
- bool operator==(const DestinationIp& other) const {
386
- return prefix_range == other.prefix_range &&
387
- source_types_array == other.source_types_array;
388
- }
389
- };
390
- // We always fail match on destination ports map
391
- using DestinationIpVector = std::vector<DestinationIp>;
392
- DestinationIpVector destination_ip_vector;
393
-
394
- bool operator==(const FilterChainMap& other) const {
395
- return destination_ip_vector == other.destination_ip_vector;
396
- }
397
-
398
- std::string ToString() const;
399
- } filter_chain_map;
400
-
401
- absl::optional<FilterChainData> default_filter_chain;
402
-
403
- bool operator==(const LdsUpdate& other) const {
404
- return http_connection_manager == other.http_connection_manager &&
405
- address == other.address &&
406
- filter_chain_map == other.filter_chain_map &&
407
- default_filter_chain == other.default_filter_chain;
408
- }
409
-
410
- std::string ToString() const;
411
- };
412
-
413
- struct ResourceName {
414
- std::string authority;
415
- std::string id;
416
-
417
- bool operator<(const ResourceName& other) const {
418
- if (authority < other.authority) return true;
419
- if (id < other.id) return true;
420
- return false;
421
- }
422
- };
423
-
424
- struct LdsResourceData {
425
- LdsUpdate resource;
426
- std::string serialized_proto;
427
- };
428
-
429
- using LdsUpdateMap = std::map<ResourceName, LdsResourceData>;
430
-
431
- struct RdsResourceData {
432
- RdsUpdate resource;
433
- std::string serialized_proto;
434
- };
60
+ virtual ~AdsResponseParserInterface() = default;
435
61
 
436
- using RdsUpdateMap = std::map<ResourceName, RdsResourceData>;
62
+ // Called when the top-level ADS fields are parsed.
63
+ // If this returns non-OK, parsing will stop, and the individual
64
+ // resources will not be processed.
65
+ virtual absl::Status ProcessAdsResponseFields(AdsResponseFields fields) = 0;
437
66
 
438
- struct CdsUpdate {
439
- enum ClusterType { EDS, LOGICAL_DNS, AGGREGATE };
440
- ClusterType cluster_type;
441
- // For cluster type EDS.
442
- // The name to use in the EDS request.
443
- // If empty, the cluster name will be used.
444
- std::string eds_service_name;
445
- // For cluster type LOGICAL_DNS.
446
- // The hostname to lookup in DNS.
447
- std::string dns_hostname;
448
- // For cluster type AGGREGATE.
449
- // The prioritized list of cluster names.
450
- std::vector<std::string> prioritized_cluster_names;
451
-
452
- // Tls Context used by clients
453
- CommonTlsContext common_tls_context;
454
-
455
- // The LRS server to use for load reporting.
456
- // If not set, load reporting will be disabled.
457
- // If set to the empty string, will use the same server we obtained the CDS
458
- // data from.
459
- absl::optional<std::string> lrs_load_reporting_server_name;
460
-
461
- // The LB policy to use (e.g., "ROUND_ROBIN" or "RING_HASH").
462
- std::string lb_policy;
463
- // Used for RING_HASH LB policy only.
464
- uint64_t min_ring_size = 1024;
465
- uint64_t max_ring_size = 8388608;
466
- // Maximum number of outstanding requests can be made to the upstream
467
- // cluster.
468
- uint32_t max_concurrent_requests = 1024;
469
-
470
- bool operator==(const CdsUpdate& other) const {
471
- return cluster_type == other.cluster_type &&
472
- eds_service_name == other.eds_service_name &&
473
- dns_hostname == other.dns_hostname &&
474
- prioritized_cluster_names == other.prioritized_cluster_names &&
475
- common_tls_context == other.common_tls_context &&
476
- lrs_load_reporting_server_name ==
477
- other.lrs_load_reporting_server_name &&
478
- lb_policy == other.lb_policy &&
479
- min_ring_size == other.min_ring_size &&
480
- max_ring_size == other.max_ring_size &&
481
- max_concurrent_requests == other.max_concurrent_requests;
482
- }
483
-
484
- std::string ToString() const;
485
- };
486
-
487
- struct CdsResourceData {
488
- CdsUpdate resource;
489
- std::string serialized_proto;
67
+ // Called to parse each individual resource in the ADS response.
68
+ virtual void ParseResource(const XdsEncodingContext& context, size_t idx,
69
+ absl::string_view type_url,
70
+ absl::string_view serialized_resource) = 0;
490
71
  };
491
72
 
492
- using CdsUpdateMap = std::map<ResourceName, CdsResourceData>;
493
-
494
- struct EdsUpdate {
495
- struct Priority {
496
- struct Locality {
497
- RefCountedPtr<XdsLocalityName> name;
498
- uint32_t lb_weight;
499
- ServerAddressList endpoints;
500
-
501
- bool operator==(const Locality& other) const {
502
- return *name == *other.name && lb_weight == other.lb_weight &&
503
- endpoints == other.endpoints;
504
- }
505
- bool operator!=(const Locality& other) const {
506
- return !(*this == other);
507
- }
508
- std::string ToString() const;
509
- };
510
-
511
- std::map<XdsLocalityName*, Locality, XdsLocalityName::Less> localities;
512
-
513
- bool operator==(const Priority& other) const;
514
- std::string ToString() const;
515
- };
516
- using PriorityList = absl::InlinedVector<Priority, 2>;
517
-
518
- // There are two phases of accessing this class's content:
519
- // 1. to initialize in the control plane combiner;
520
- // 2. to use in the data plane combiner.
521
- // So no additional synchronization is needed.
522
- class DropConfig : public RefCounted<DropConfig> {
523
- public:
524
- struct DropCategory {
525
- bool operator==(const DropCategory& other) const {
526
- return name == other.name &&
527
- parts_per_million == other.parts_per_million;
528
- }
529
-
530
- std::string name;
531
- const uint32_t parts_per_million;
532
- };
533
-
534
- using DropCategoryList = absl::InlinedVector<DropCategory, 2>;
535
-
536
- void AddCategory(std::string name, uint32_t parts_per_million) {
537
- drop_category_list_.emplace_back(
538
- DropCategory{std::move(name), parts_per_million});
539
- if (parts_per_million == 1000000) drop_all_ = true;
540
- }
541
-
542
- // The only method invoked from outside the WorkSerializer (used in
543
- // the data plane).
544
- bool ShouldDrop(const std::string** category_name) const;
545
-
546
- const DropCategoryList& drop_category_list() const {
547
- return drop_category_list_;
548
- }
549
-
550
- bool drop_all() const { return drop_all_; }
551
-
552
- bool operator==(const DropConfig& other) const {
553
- return drop_category_list_ == other.drop_category_list_;
554
- }
555
- bool operator!=(const DropConfig& other) const {
556
- return !(*this == other);
557
- }
558
-
559
- std::string ToString() const;
560
-
561
- private:
562
- DropCategoryList drop_category_list_;
563
- bool drop_all_ = false;
564
- };
565
-
566
- PriorityList priorities;
567
- RefCountedPtr<DropConfig> drop_config;
568
-
569
- bool operator==(const EdsUpdate& other) const {
570
- return priorities == other.priorities &&
571
- *drop_config == *other.drop_config;
572
- }
573
- std::string ToString() const;
574
- };
575
-
576
- struct EdsResourceData {
577
- EdsUpdate resource;
578
- std::string serialized_proto;
579
- };
580
-
581
- using EdsUpdateMap = std::map<ResourceName, EdsResourceData>;
582
-
583
73
  struct ClusterLoadReport {
584
74
  XdsClusterDropStats::Snapshot dropped_requests;
585
75
  std::map<RefCountedPtr<XdsLocalityName>, XdsClusterLocalityStats::Snapshot,
@@ -647,69 +137,24 @@ class XdsApi {
647
137
  ResourceMetadata::ClientResourceStatus::NACKED,
648
138
  "");
649
139
 
650
- // If the response can't be parsed at the top level, the resulting
651
- // type_url will be empty.
652
- // If there is any other type of validation error, the parse_error
653
- // field will be set to something other than GRPC_ERROR_NONE and the
654
- // resource_names_failed field will be populated.
655
- // Otherwise, one of the *_update_map fields will be populated, based
656
- // on the type_url field.
657
- struct AdsParseResult {
658
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
659
- std::string version;
660
- std::string nonce;
661
- std::string type_url;
662
- LdsUpdateMap lds_update_map;
663
- RdsUpdateMap rds_update_map;
664
- CdsUpdateMap cds_update_map;
665
- EdsUpdateMap eds_update_map;
666
- std::set<ResourceName> resource_names_failed;
667
- };
668
-
669
140
  XdsApi(XdsClient* client, TraceFlag* tracer, const XdsBootstrap::Node* node,
670
- const CertificateProviderStore::PluginDefinitionMap* map);
671
-
672
- static bool IsLds(absl::string_view type_url);
673
- static bool IsRds(absl::string_view type_url);
674
- static bool IsCds(absl::string_view type_url);
675
- static bool IsEds(absl::string_view type_url);
676
-
677
- // A helper method to parse the resource name and return back a ResourceName
678
- // struct. Optionally the parser can check the resource type portion of the
679
- // resource name.
680
- static absl::StatusOr<ResourceName> ParseResourceName(
681
- absl::string_view name,
682
- bool (*is_expected_type)(absl::string_view) = nullptr);
683
-
684
- // A helper method to construct the resource name from parts.
685
- static std::string ConstructFullResourceName(absl::string_view authority,
686
- absl::string_view resource_type,
687
- absl::string_view name);
141
+ const CertificateProviderStore::PluginDefinitionMap* map,
142
+ upb::SymbolTable* symtab);
688
143
 
689
144
  // Creates an ADS request.
690
145
  // Takes ownership of \a error.
691
- grpc_slice CreateAdsRequest(
692
- const XdsBootstrap::XdsServer& server, const std::string& type_url,
693
- const std::map<absl::string_view /*authority*/,
694
- std::set<absl::string_view /*name*/>>& resource_names,
695
- const std::string& version, const std::string& nonce,
696
- grpc_error_handle error, bool populate_node);
697
-
698
- // Parses an ADS response.
699
- AdsParseResult ParseAdsResponse(
700
- const XdsBootstrap::XdsServer& server, const grpc_slice& encoded_response,
701
- const std::map<absl::string_view /*authority*/,
702
- std::set<absl::string_view /*name*/>>&
703
- subscribed_listener_names,
704
- const std::map<absl::string_view /*authority*/,
705
- std::set<absl::string_view /*name*/>>&
706
- subscribed_route_config_names,
707
- const std::map<absl::string_view /*authority*/,
708
- std::set<absl::string_view /*name*/>>&
709
- subscribed_cluster_names,
710
- const std::map<absl::string_view /*authority*/,
711
- std::set<absl::string_view /*name*/>>&
712
- subscribed_eds_service_names);
146
+ grpc_slice CreateAdsRequest(const XdsBootstrap::XdsServer& server,
147
+ absl::string_view type_url,
148
+ absl::string_view version,
149
+ absl::string_view nonce,
150
+ const std::vector<std::string>& resource_names,
151
+ grpc_error_handle error, bool populate_node);
152
+
153
+ // Returns non-OK when failing to deserialize response message.
154
+ // Otherwise, all events are reported to the parser.
155
+ absl::Status ParseAdsResponse(const XdsBootstrap::XdsServer& server,
156
+ const grpc_slice& encoded_response,
157
+ AdsResponseParserInterface* parser);
713
158
 
714
159
  // Creates an initial LRS request.
715
160
  grpc_slice CreateLrsInitialRequest(const XdsBootstrap::XdsServer& server);
@@ -735,7 +180,7 @@ class XdsApi {
735
180
  const XdsBootstrap::Node* node_; // Do not own.
736
181
  const CertificateProviderStore::PluginDefinitionMap*
737
182
  certificate_provider_definition_map_; // Do not own.
738
- upb::SymbolTable symtab_;
183
+ upb::SymbolTable* symtab_; // Do not own.
739
184
  const std::string build_version_;
740
185
  const std::string user_agent_name_;
741
186
  const std::string user_agent_version_;
@@ -743,4 +188,4 @@ class XdsApi {
743
188
 
744
189
  } // namespace grpc_core
745
190
 
746
- #endif /* GRPC_CORE_EXT_XDS_XDS_API_H */
191
+ #endif // GRPC_CORE_EXT_XDS_XDS_API_H