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
@@ -0,0 +1,170 @@
1
+ // Copyright 2021 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_CORE_LIB_SECURITY_AUTHORIZATION_RBAC_POLICY_H
16
+ #define GRPC_CORE_LIB_SECURITY_AUTHORIZATION_RBAC_POLICY_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <memory>
21
+
22
+ #include "src/core/lib/matchers/matchers.h"
23
+
24
+ namespace grpc_core {
25
+
26
+ // Represents Envoy RBAC Proto. [See
27
+ // https://github.com/envoyproxy/envoy/blob/release/v1.17/api/envoy/config/rbac/v3/rbac.proto]
28
+ struct Rbac {
29
+ enum class Action {
30
+ kAllow,
31
+ kDeny,
32
+ };
33
+
34
+ struct CidrRange {
35
+ CidrRange() = default;
36
+ CidrRange(std::string address_prefix, uint32_t prefix_len);
37
+
38
+ CidrRange(CidrRange&& other) noexcept;
39
+ CidrRange& operator=(CidrRange&& other) noexcept;
40
+
41
+ std::string ToString() const;
42
+
43
+ std::string address_prefix;
44
+ uint32_t prefix_len;
45
+ };
46
+
47
+ // TODO(ashithasantosh): Support for destination_port_range.
48
+ struct Permission {
49
+ enum class RuleType {
50
+ kAnd,
51
+ kOr,
52
+ kNot,
53
+ kAny,
54
+ kHeader,
55
+ kPath,
56
+ kDestIp,
57
+ kDestPort,
58
+ kMetadata,
59
+ kReqServerName,
60
+ };
61
+
62
+ static Permission MakeAndPermission(
63
+ std::vector<std::unique_ptr<Permission>> permissions);
64
+ static Permission MakeOrPermission(
65
+ std::vector<std::unique_ptr<Permission>> permissions);
66
+ static Permission MakeNotPermission(Permission permission);
67
+ static Permission MakeAnyPermission();
68
+ static Permission MakeHeaderPermission(HeaderMatcher header_matcher);
69
+ static Permission MakePathPermission(StringMatcher string_matcher);
70
+ static Permission MakeDestIpPermission(CidrRange ip);
71
+ static Permission MakeDestPortPermission(int port);
72
+ // All the other fields in MetadataMatcher are ignored except invert.
73
+ static Permission MakeMetadataPermission(bool invert);
74
+ static Permission MakeReqServerNamePermission(StringMatcher string_matcher);
75
+
76
+ Permission() = default;
77
+
78
+ Permission(Permission&& other) noexcept;
79
+ Permission& operator=(Permission&& other) noexcept;
80
+
81
+ std::string ToString() const;
82
+
83
+ RuleType type = RuleType::kAnd;
84
+ HeaderMatcher header_matcher;
85
+ StringMatcher string_matcher;
86
+ CidrRange ip;
87
+ int port;
88
+ // For type kAnd/kOr/kNot. For kNot type, the vector will have only one
89
+ // element.
90
+ std::vector<std::unique_ptr<Permission>> permissions;
91
+ // For kMetadata
92
+ bool invert = false;
93
+ };
94
+
95
+ struct Principal {
96
+ enum class RuleType {
97
+ kAnd,
98
+ kOr,
99
+ kNot,
100
+ kAny,
101
+ kPrincipalName,
102
+ kSourceIp,
103
+ kDirectRemoteIp,
104
+ kRemoteIp,
105
+ kHeader,
106
+ kPath,
107
+ kMetadata,
108
+ };
109
+
110
+ static Principal MakeAndPrincipal(
111
+ std::vector<std::unique_ptr<Principal>> principals);
112
+ static Principal MakeOrPrincipal(
113
+ std::vector<std::unique_ptr<Principal>> principals);
114
+ static Principal MakeNotPrincipal(Principal principal);
115
+ static Principal MakeAnyPrincipal();
116
+ static Principal MakeAuthenticatedPrincipal(StringMatcher string_matcher);
117
+ static Principal MakeSourceIpPrincipal(CidrRange ip);
118
+ static Principal MakeDirectRemoteIpPrincipal(CidrRange ip);
119
+ static Principal MakeRemoteIpPrincipal(CidrRange ip);
120
+ static Principal MakeHeaderPrincipal(HeaderMatcher header_matcher);
121
+ static Principal MakePathPrincipal(StringMatcher string_matcher);
122
+ // All the other fields in MetadataMatcher are ignored except invert.
123
+ static Principal MakeMetadataPrincipal(bool invert);
124
+
125
+ Principal() = default;
126
+
127
+ Principal(Principal&& other) noexcept;
128
+ Principal& operator=(Principal&& other) noexcept;
129
+
130
+ std::string ToString() const;
131
+
132
+ RuleType type = RuleType::kAnd;
133
+ HeaderMatcher header_matcher;
134
+ StringMatcher string_matcher;
135
+ CidrRange ip;
136
+ // For type kAnd/kOr/kNot. For kNot type, the vector will have only one
137
+ // element.
138
+ std::vector<std::unique_ptr<Principal>> principals;
139
+ // For kMetadata
140
+ bool invert = false;
141
+ };
142
+
143
+ struct Policy {
144
+ Policy() = default;
145
+ Policy(Permission permissions, Principal principals);
146
+
147
+ Policy(Policy&& other) noexcept;
148
+ Policy& operator=(Policy&& other) noexcept;
149
+
150
+ std::string ToString() const;
151
+
152
+ Permission permissions;
153
+ Principal principals;
154
+ };
155
+
156
+ Rbac() = default;
157
+ Rbac(Rbac::Action action, std::map<std::string, Policy> policies);
158
+
159
+ Rbac(Rbac&& other) noexcept;
160
+ Rbac& operator=(Rbac&& other) noexcept;
161
+
162
+ std::string ToString() const;
163
+
164
+ Action action;
165
+ std::map<std::string, Policy> policies;
166
+ };
167
+
168
+ } // namespace grpc_core
169
+
170
+ #endif /* GRPC_CORE_LIB_SECURITY_AUTHORIZATION_RBAC_POLICY_H */
@@ -29,9 +29,9 @@
29
29
 
30
30
  #include "src/core/lib/channel/channel_args.h"
31
31
  #include "src/core/lib/gpr/string.h"
32
- #include "src/core/lib/gprpp/arena.h"
33
32
  #include "src/core/lib/gprpp/ref_counted.h"
34
33
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
34
+ #include "src/core/lib/resource_quota/arena.h"
35
35
  #include "src/core/lib/surface/api_trace.h"
36
36
  #include "src/core/lib/surface/call.h"
37
37
 
@@ -235,7 +235,9 @@ void grpc_auth_context::add_property(const char* name, const char* value,
235
235
  grpc_auth_property* prop = &properties_.array[properties_.count++];
236
236
  prop->name = gpr_strdup(name);
237
237
  prop->value = static_cast<char*>(gpr_malloc(value_length + 1));
238
- memcpy(prop->value, value, value_length);
238
+ if (value != nullptr) {
239
+ memcpy(prop->value, value, value_length);
240
+ }
239
241
  prop->value[value_length] = '\0';
240
242
  prop->value_length = value_length;
241
243
  }
@@ -21,10 +21,10 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include "src/core/lib/gprpp/arena.h"
25
24
  #include "src/core/lib/gprpp/ref_counted.h"
26
25
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
27
26
  #include "src/core/lib/iomgr/pollset.h"
27
+ #include "src/core/lib/resource_quota/arena.h"
28
28
  #include "src/core/lib/security/credentials/credentials.h"
29
29
 
30
30
  extern grpc_core::DebugOnlyTraceFlag grpc_trace_auth_context_refcount;
@@ -44,7 +44,7 @@ struct grpc_composite_call_credentials_metadata_context {
44
44
  grpc_composite_call_credentials_metadata_context(
45
45
  grpc_composite_call_credentials* composite_creds,
46
46
  grpc_polling_entity* pollent, grpc_auth_metadata_context auth_md_context,
47
- grpc_credentials_mdelem_array* md_array,
47
+ grpc_core::CredentialsMetadataArray* md_array,
48
48
  grpc_closure* on_request_metadata)
49
49
  : composite_creds(composite_creds),
50
50
  pollent(pollent),
@@ -59,7 +59,7 @@ struct grpc_composite_call_credentials_metadata_context {
59
59
  size_t creds_index = 0;
60
60
  grpc_polling_entity* pollent;
61
61
  grpc_auth_metadata_context auth_md_context;
62
- grpc_credentials_mdelem_array* md_array;
62
+ grpc_core::CredentialsMetadataArray* md_array;
63
63
  grpc_closure* on_request_metadata;
64
64
  grpc_closure internal_on_request_metadata;
65
65
  };
@@ -91,8 +91,8 @@ static void composite_call_metadata_cb(void* arg, grpc_error_handle error) {
91
91
 
92
92
  bool grpc_composite_call_credentials::get_request_metadata(
93
93
  grpc_polling_entity* pollent, grpc_auth_metadata_context auth_md_context,
94
- grpc_credentials_mdelem_array* md_array, grpc_closure* on_request_metadata,
95
- grpc_error_handle* error) {
94
+ grpc_core::CredentialsMetadataArray* md_array,
95
+ grpc_closure* on_request_metadata, grpc_error_handle* error) {
96
96
  grpc_composite_call_credentials_metadata_context* ctx;
97
97
  ctx = new grpc_composite_call_credentials_metadata_context(
98
98
  this, pollent, auth_md_context, md_array, on_request_metadata);
@@ -113,7 +113,7 @@ bool grpc_composite_call_credentials::get_request_metadata(
113
113
  }
114
114
 
115
115
  void grpc_composite_call_credentials::cancel_get_request_metadata(
116
- grpc_credentials_mdelem_array* md_array, grpc_error_handle error) {
116
+ grpc_core::CredentialsMetadataArray* md_array, grpc_error_handle error) {
117
117
  for (size_t i = 0; i < inner_.size(); ++i) {
118
118
  inner_[i]->cancel_get_request_metadata(md_array, GRPC_ERROR_REF(error));
119
119
  }
@@ -81,12 +81,13 @@ class grpc_composite_call_credentials : public grpc_call_credentials {
81
81
 
82
82
  bool get_request_metadata(grpc_polling_entity* pollent,
83
83
  grpc_auth_metadata_context context,
84
- grpc_credentials_mdelem_array* md_array,
84
+ grpc_core::CredentialsMetadataArray* md_array,
85
85
  grpc_closure* on_request_metadata,
86
86
  grpc_error_handle* error) override;
87
87
 
88
- void cancel_get_request_metadata(grpc_credentials_mdelem_array* md_array,
89
- grpc_error_handle error) override;
88
+ void cancel_get_request_metadata(
89
+ grpc_core::CredentialsMetadataArray* md_array,
90
+ grpc_error_handle error) override;
90
91
 
91
92
  grpc_security_level min_security_level() const override {
92
93
  return min_security_level_;
@@ -153,21 +153,11 @@ grpc_channel_credentials* grpc_channel_credentials_from_arg(
153
153
  grpc_channel_credentials* grpc_channel_credentials_find_in_args(
154
154
  const grpc_channel_args* args);
155
155
 
156
- /* --- grpc_credentials_mdelem_array. --- */
156
+ /* --- grpc_core::CredentialsMetadataArray. --- */
157
157
 
158
- struct grpc_credentials_mdelem_array {
159
- grpc_mdelem* md = nullptr;
160
- size_t size = 0;
161
- };
162
- /// Takes a new ref to \a md.
163
- void grpc_credentials_mdelem_array_add(grpc_credentials_mdelem_array* list,
164
- grpc_mdelem md);
165
-
166
- /// Appends all elements from \a src to \a dst, taking a new ref to each one.
167
- void grpc_credentials_mdelem_array_append(grpc_credentials_mdelem_array* dst,
168
- grpc_credentials_mdelem_array* src);
169
-
170
- void grpc_credentials_mdelem_array_destroy(grpc_credentials_mdelem_array* list);
158
+ namespace grpc_core {
159
+ using CredentialsMetadataArray = std::vector<std::pair<Slice, Slice>>;
160
+ }
171
161
 
172
162
  /* --- grpc_call_credentials. --- */
173
163
 
@@ -188,17 +178,17 @@ struct grpc_call_credentials
188
178
  // be set to indicate the result. Otherwise, \a on_request_metadata will
189
179
  // be invoked asynchronously when complete. \a md_array will be populated
190
180
  // with the resulting metadata once complete.
191
- virtual bool get_request_metadata(grpc_polling_entity* pollent,
192
- grpc_auth_metadata_context context,
193
- grpc_credentials_mdelem_array* md_array,
194
- grpc_closure* on_request_metadata,
195
- grpc_error_handle* error) = 0;
181
+ virtual bool get_request_metadata(
182
+ grpc_polling_entity* pollent, grpc_auth_metadata_context context,
183
+ grpc_core::CredentialsMetadataArray* md_array,
184
+ grpc_closure* on_request_metadata, grpc_error_handle* error) = 0;
196
185
 
197
186
  // Cancels a pending asynchronous operation started by
198
187
  // grpc_call_credentials_get_request_metadata() with the corresponding
199
188
  // value of \a md_array.
200
189
  virtual void cancel_get_request_metadata(
201
- grpc_credentials_mdelem_array* md_array, grpc_error_handle error) = 0;
190
+ grpc_core::CredentialsMetadataArray* md_array,
191
+ grpc_error_handle error) = 0;
202
192
 
203
193
  virtual grpc_security_level min_security_level() const {
204
194
  return min_security_level_;
@@ -169,9 +169,8 @@ void AwsExternalAccountCredentials::RetrieveRegion() {
169
169
  grpc_http_response_destroy(&ctx_->response);
170
170
  ctx_->response = {};
171
171
  GRPC_CLOSURE_INIT(&ctx_->closure, OnRetrieveRegion, this, nullptr);
172
- grpc_httpcli_get(ctx_->httpcli_context, ctx_->pollent,
173
- ResourceQuota::Default(), &request, ctx_->deadline,
174
- &ctx_->closure, &ctx_->response);
172
+ grpc_httpcli_get(ctx_->pollent, ResourceQuota::Default(), &request,
173
+ ctx_->deadline, &ctx_->closure, &ctx_->response);
175
174
  grpc_http_request_destroy(&request.http);
176
175
  }
177
176
 
@@ -217,9 +216,8 @@ void AwsExternalAccountCredentials::RetrieveRoleName() {
217
216
  ctx_->response = {};
218
217
  GRPC_CLOSURE_INIT(&ctx_->closure, OnRetrieveRoleName, this, nullptr);
219
218
  // TODO(ctiller): use the caller's resource quota.
220
- grpc_httpcli_get(ctx_->httpcli_context, ctx_->pollent,
221
- ResourceQuota::Default(), &request, ctx_->deadline,
222
- &ctx_->closure, &ctx_->response);
219
+ grpc_httpcli_get(ctx_->pollent, ResourceQuota::Default(), &request,
220
+ ctx_->deadline, &ctx_->closure, &ctx_->response);
223
221
  grpc_http_request_destroy(&request.http);
224
222
  }
225
223
 
@@ -277,9 +275,8 @@ void AwsExternalAccountCredentials::RetrieveSigningKeys() {
277
275
  ctx_->response = {};
278
276
  GRPC_CLOSURE_INIT(&ctx_->closure, OnRetrieveSigningKeys, this, nullptr);
279
277
  // TODO(ctiller): use the caller's resource quota.
280
- grpc_httpcli_get(ctx_->httpcli_context, ctx_->pollent,
281
- ResourceQuota::Default(), &request, ctx_->deadline,
282
- &ctx_->closure, &ctx_->response);
278
+ grpc_httpcli_get(ctx_->pollent, ResourceQuota::Default(), &request,
279
+ ctx_->deadline, &ctx_->closure, &ctx_->response);
283
280
  grpc_http_request_destroy(&request.http);
284
281
  }
285
282
 
@@ -237,10 +237,10 @@ std::string ExternalAccountCredentials::debug_string() {
237
237
  // down.
238
238
  void ExternalAccountCredentials::fetch_oauth2(
239
239
  grpc_credentials_metadata_request* metadata_req,
240
- grpc_httpcli_context* httpcli_context, grpc_polling_entity* pollent,
241
- grpc_iomgr_cb_func response_cb, grpc_millis deadline) {
240
+ grpc_polling_entity* pollent, grpc_iomgr_cb_func response_cb,
241
+ grpc_millis deadline) {
242
242
  GPR_ASSERT(ctx_ == nullptr);
243
- ctx_ = new HTTPRequestContext(httpcli_context, pollent, deadline);
243
+ ctx_ = new HTTPRequestContext(pollent, deadline);
244
244
  metadata_req_ = metadata_req;
245
245
  response_cb_ = response_cb;
246
246
  auto cb = [this](std::string token, grpc_error_handle error) {
@@ -326,9 +326,8 @@ void ExternalAccountCredentials::ExchangeToken(
326
326
  grpc_http_response_destroy(&ctx_->response);
327
327
  ctx_->response = {};
328
328
  GRPC_CLOSURE_INIT(&ctx_->closure, OnExchangeToken, this, nullptr);
329
- grpc_httpcli_post(ctx_->httpcli_context, ctx_->pollent,
330
- ResourceQuota::Default(), &request, body.c_str(),
331
- body.size(), ctx_->deadline, &ctx_->closure,
329
+ grpc_httpcli_post(ctx_->pollent, ResourceQuota::Default(), &request,
330
+ body.c_str(), body.size(), ctx_->deadline, &ctx_->closure,
332
331
  &ctx_->response);
333
332
  grpc_http_request_destroy(&request.http);
334
333
  }
@@ -412,9 +411,8 @@ void ExternalAccountCredentials::ImpersenateServiceAccount() {
412
411
  ctx_->response = {};
413
412
  GRPC_CLOSURE_INIT(&ctx_->closure, OnImpersenateServiceAccount, this, nullptr);
414
413
  // TODO(ctiller): Use the callers resource quota.
415
- grpc_httpcli_post(ctx_->httpcli_context, ctx_->pollent,
416
- ResourceQuota::Default(), &request, body.c_str(),
417
- body.size(), ctx_->deadline, &ctx_->closure,
414
+ grpc_httpcli_post(ctx_->pollent, ResourceQuota::Default(), &request,
415
+ body.c_str(), body.size(), ctx_->deadline, &ctx_->closure,
418
416
  &ctx_->response);
419
417
  grpc_http_request_destroy(&request.http);
420
418
  }
@@ -61,16 +61,12 @@ class ExternalAccountCredentials
61
61
  // This is a helper struct to pass information between multiple callback based
62
62
  // asynchronous calls.
63
63
  struct HTTPRequestContext {
64
- HTTPRequestContext(grpc_httpcli_context* httpcli_context,
65
- grpc_polling_entity* pollent, grpc_millis deadline)
66
- : httpcli_context(httpcli_context),
67
- pollent(pollent),
68
- deadline(deadline) {}
64
+ HTTPRequestContext(grpc_polling_entity* pollent, grpc_millis deadline)
65
+ : pollent(pollent), deadline(deadline) {}
69
66
  ~HTTPRequestContext() { grpc_http_response_destroy(&response); }
70
67
 
71
68
  // Contextual parameters passed from
72
69
  // grpc_oauth2_token_fetcher_credentials::fetch_oauth2().
73
- grpc_httpcli_context* httpcli_context;
74
70
  grpc_polling_entity* pollent;
75
71
  grpc_millis deadline;
76
72
 
@@ -92,7 +88,6 @@ class ExternalAccountCredentials
92
88
  // This method implements the common token fetch logic and it will be called
93
89
  // when grpc_oauth2_token_fetcher_credentials request a new access token.
94
90
  void fetch_oauth2(grpc_credentials_metadata_request* req,
95
- grpc_httpcli_context* httpcli_context,
96
91
  grpc_polling_entity* pollent, grpc_iomgr_cb_func cb,
97
92
  grpc_millis deadline) override;
98
93
 
@@ -142,9 +142,8 @@ void UrlExternalAccountCredentials::RetrieveSubjectToken(
142
142
  grpc_http_response_destroy(&ctx_->response);
143
143
  ctx_->response = {};
144
144
  GRPC_CLOSURE_INIT(&ctx_->closure, OnRetrieveSubjectToken, this, nullptr);
145
- grpc_httpcli_get(ctx_->httpcli_context, ctx_->pollent,
146
- ResourceQuota::Default(), &request, ctx_->deadline,
147
- &ctx_->closure, &ctx_->response);
145
+ grpc_httpcli_get(ctx_->pollent, ResourceQuota::Default(), &request,
146
+ ctx_->deadline, &ctx_->closure, &ctx_->response);
148
147
  grpc_http_request_destroy(&request.http);
149
148
  }
150
149
 
@@ -91,9 +91,9 @@ const char* grpc_fake_transport_get_expected_targets(
91
91
 
92
92
  bool grpc_md_only_test_credentials::get_request_metadata(
93
93
  grpc_polling_entity* /*pollent*/, grpc_auth_metadata_context /*context*/,
94
- grpc_credentials_mdelem_array* md_array, grpc_closure* on_request_metadata,
95
- grpc_error_handle* /*error*/) {
96
- grpc_credentials_mdelem_array_add(md_array, md_);
94
+ grpc_core::CredentialsMetadataArray* md_array,
95
+ grpc_closure* on_request_metadata, grpc_error_handle* /*error*/) {
96
+ md_array->emplace_back(key_.Ref(), value_.Ref());
97
97
  if (is_async_) {
98
98
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_request_metadata,
99
99
  GRPC_ERROR_NONE);
@@ -103,7 +103,8 @@ bool grpc_md_only_test_credentials::get_request_metadata(
103
103
  }
104
104
 
105
105
  void grpc_md_only_test_credentials::cancel_get_request_metadata(
106
- grpc_credentials_mdelem_array* /*md_array*/, grpc_error_handle error) {
106
+ grpc_core::CredentialsMetadataArray* /*md_array*/,
107
+ grpc_error_handle error) {
107
108
  GRPC_ERROR_UNREF(error);
108
109
  }
109
110
 
@@ -63,24 +63,25 @@ class grpc_md_only_test_credentials : public grpc_call_credentials {
63
63
  bool is_async)
64
64
  : grpc_call_credentials(GRPC_CALL_CREDENTIALS_TYPE_OAUTH2,
65
65
  GRPC_SECURITY_NONE),
66
- md_(grpc_mdelem_from_slices(grpc_slice_from_copied_string(md_key),
67
- grpc_slice_from_copied_string(md_value))),
66
+ key_(grpc_core::Slice::FromCopiedString(md_key)),
67
+ value_(grpc_core::Slice::FromCopiedString(md_value)),
68
68
  is_async_(is_async) {}
69
- ~grpc_md_only_test_credentials() override { GRPC_MDELEM_UNREF(md_); }
70
69
 
71
70
  bool get_request_metadata(grpc_polling_entity* pollent,
72
71
  grpc_auth_metadata_context context,
73
- grpc_credentials_mdelem_array* md_array,
72
+ grpc_core::CredentialsMetadataArray* md_array,
74
73
  grpc_closure* on_request_metadata,
75
74
  grpc_error_handle* error) override;
76
75
 
77
- void cancel_get_request_metadata(grpc_credentials_mdelem_array* md_array,
78
- grpc_error_handle error) override;
76
+ void cancel_get_request_metadata(
77
+ grpc_core::CredentialsMetadataArray* md_array,
78
+ grpc_error_handle error) override;
79
79
 
80
80
  std::string debug_string() override { return "MD only Test Credentials"; };
81
81
 
82
82
  private:
83
- grpc_mdelem md_;
83
+ grpc_core::Slice key_;
84
+ grpc_core::Slice value_;
84
85
  bool is_async_;
85
86
  };
86
87
 
@@ -172,7 +172,6 @@ static void destroy_pollset(void* p, grpc_error_handle /*e*/) {
172
172
  static int is_metadata_server_reachable() {
173
173
  metadata_server_detector detector;
174
174
  grpc_httpcli_request request;
175
- grpc_httpcli_context context;
176
175
  grpc_closure destroy_closure;
177
176
  /* The http call is local. If it takes more than one sec, it is for sure not
178
177
  on compute engine. */
@@ -186,10 +185,9 @@ static int is_metadata_server_reachable() {
186
185
  memset(&request, 0, sizeof(grpc_httpcli_request));
187
186
  request.host = const_cast<char*>(GRPC_COMPUTE_ENGINE_DETECTION_HOST);
188
187
  request.http.path = const_cast<char*>("/");
189
- grpc_httpcli_context_init(&context);
190
188
  grpc_httpcli_get(
191
- &context, &detector.pollent, grpc_core::ResourceQuota::Default(),
192
- &request, grpc_core::ExecCtx::Get()->Now() + max_detection_delay,
189
+ &detector.pollent, grpc_core::ResourceQuota::Default(), &request,
190
+ grpc_core::ExecCtx::Get()->Now() + max_detection_delay,
193
191
  GRPC_CLOSURE_CREATE(on_metadata_server_detection_http_response, &detector,
194
192
  grpc_schedule_on_exec_ctx),
195
193
  &detector.response);
@@ -208,7 +206,6 @@ static int is_metadata_server_reachable() {
208
206
  }
209
207
  }
210
208
  gpr_mu_unlock(g_polling_mu);
211
- grpc_httpcli_context_destroy(&context);
212
209
  GRPC_CLOSURE_INIT(&destroy_closure, destroy_pollset,
213
210
  grpc_polling_entity_pollset(&detector.pollent),
214
211
  grpc_schedule_on_exec_ctx);
@@ -30,40 +30,37 @@
30
30
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
31
31
  #include "src/core/lib/surface/api_trace.h"
32
32
 
33
- grpc_google_iam_credentials::~grpc_google_iam_credentials() {
34
- grpc_credentials_mdelem_array_destroy(&md_array_);
35
- }
36
-
37
33
  bool grpc_google_iam_credentials::get_request_metadata(
38
34
  grpc_polling_entity* /*pollent*/, grpc_auth_metadata_context /*context*/,
39
- grpc_credentials_mdelem_array* md_array,
35
+ grpc_core::CredentialsMetadataArray* md_array,
40
36
  grpc_closure* /*on_request_metadata*/, grpc_error_handle* /*error*/) {
41
- grpc_credentials_mdelem_array_append(md_array, &md_array_);
37
+ if (token_.has_value()) {
38
+ md_array->emplace_back(grpc_core::Slice::FromStaticString(
39
+ GRPC_IAM_AUTHORIZATION_TOKEN_METADATA_KEY),
40
+ token_->Ref());
41
+ }
42
+ md_array->emplace_back(grpc_core::Slice::FromStaticString(
43
+ GRPC_IAM_AUTHORITY_SELECTOR_METADATA_KEY),
44
+ authority_selector_.Ref());
42
45
  return true;
43
46
  }
44
47
 
45
48
  void grpc_google_iam_credentials::cancel_get_request_metadata(
46
- grpc_credentials_mdelem_array* /*md_array*/, grpc_error_handle error) {
49
+ grpc_core::CredentialsMetadataArray* /*md_array*/,
50
+ grpc_error_handle error) {
47
51
  GRPC_ERROR_UNREF(error);
48
52
  }
49
53
 
50
54
  grpc_google_iam_credentials::grpc_google_iam_credentials(
51
55
  const char* token, const char* authority_selector)
52
56
  : grpc_call_credentials(GRPC_CALL_CREDENTIALS_TYPE_IAM),
57
+ token_(token == nullptr ? absl::optional<grpc_core::Slice>()
58
+ : grpc_core::Slice::FromCopiedString(token)),
59
+ authority_selector_(
60
+ grpc_core::Slice::FromCopiedString(authority_selector)),
53
61
  debug_string_(absl::StrFormat(
54
62
  "GoogleIAMCredentials{Token:%s,AuthoritySelector:%s}",
55
- token != nullptr ? "present" : "absent", authority_selector)) {
56
- grpc_mdelem md = grpc_mdelem_from_slices(
57
- grpc_slice_from_static_string(GRPC_IAM_AUTHORIZATION_TOKEN_METADATA_KEY),
58
- grpc_slice_from_copied_string(token));
59
- grpc_credentials_mdelem_array_add(&md_array_, md);
60
- GRPC_MDELEM_UNREF(md);
61
- md = grpc_mdelem_from_slices(
62
- grpc_slice_from_static_string(GRPC_IAM_AUTHORITY_SELECTOR_METADATA_KEY),
63
- grpc_slice_from_copied_string(authority_selector));
64
- grpc_credentials_mdelem_array_add(&md_array_, md);
65
- GRPC_MDELEM_UNREF(md);
66
- }
63
+ token != nullptr ? "present" : "absent", authority_selector)) {}
67
64
 
68
65
  grpc_call_credentials* grpc_google_iam_credentials_create(
69
66
  const char* token, const char* authority_selector, void* reserved) {
@@ -29,20 +29,21 @@ class grpc_google_iam_credentials : public grpc_call_credentials {
29
29
  public:
30
30
  grpc_google_iam_credentials(const char* token,
31
31
  const char* authority_selector);
32
- ~grpc_google_iam_credentials() override;
33
32
 
34
33
  bool get_request_metadata(grpc_polling_entity* pollent,
35
34
  grpc_auth_metadata_context context,
36
- grpc_credentials_mdelem_array* md_array,
35
+ grpc_core::CredentialsMetadataArray* md_array,
37
36
  grpc_closure* on_request_metadata,
38
37
  grpc_error_handle* error) override;
39
38
 
40
- void cancel_get_request_metadata(grpc_credentials_mdelem_array* md_array,
41
- grpc_error_handle error) override;
39
+ void cancel_get_request_metadata(
40
+ grpc_core::CredentialsMetadataArray* md_array,
41
+ grpc_error_handle error) override;
42
42
  std::string debug_string() override { return debug_string_; }
43
43
 
44
44
  private:
45
- grpc_credentials_mdelem_array md_array_;
45
+ const absl::optional<grpc_core::Slice> token_;
46
+ const grpc_core::Slice authority_selector_;
46
47
  const std::string debug_string_;
47
48
  };
48
49
 
@@ -22,6 +22,10 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include <openssl/bio.h>
26
+ #include <openssl/evp.h>
27
+ #include <openssl/pem.h>
28
+
25
29
  #include <grpc/grpc_security.h>
26
30
  #include <grpc/support/alloc.h>
27
31
  #include <grpc/support/log.h>
@@ -33,12 +37,6 @@
33
37
  #include "src/core/lib/security/util/json_util.h"
34
38
  #include "src/core/lib/slice/b64.h"
35
39
 
36
- extern "C" {
37
- #include <openssl/bio.h>
38
- #include <openssl/evp.h>
39
- #include <openssl/pem.h>
40
- }
41
-
42
40
  using grpc_core::Json;
43
41
 
44
42
  /* --- Constants. --- */