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
@@ -41,23 +41,15 @@
41
41
 
42
42
  using grpc_core::Json;
43
43
 
44
- void grpc_service_account_jwt_access_credentials::reset_cache() {
45
- GRPC_MDELEM_UNREF(cached_.jwt_md);
46
- cached_.jwt_md = GRPC_MDNULL;
47
- cached_.service_url.clear();
48
- cached_.jwt_expiration = gpr_inf_past(GPR_CLOCK_REALTIME);
49
- }
50
-
51
44
  grpc_service_account_jwt_access_credentials::
52
45
  ~grpc_service_account_jwt_access_credentials() {
53
46
  grpc_auth_json_key_destruct(&key_);
54
- reset_cache();
55
47
  gpr_mu_destroy(&cache_mu_);
56
48
  }
57
49
 
58
50
  bool grpc_service_account_jwt_access_credentials::get_request_metadata(
59
51
  grpc_polling_entity* /*pollent*/, grpc_auth_metadata_context context,
60
- grpc_credentials_mdelem_array* md_array,
52
+ grpc_core::CredentialsMetadataArray* md_array,
61
53
  grpc_closure* /*on_request_metadata*/, grpc_error_handle* error) {
62
54
  gpr_timespec refresh_threshold = gpr_time_from_seconds(
63
55
  GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS, GPR_TIMESPAN);
@@ -71,42 +63,38 @@ bool grpc_service_account_jwt_access_credentials::get_request_metadata(
71
63
  return true;
72
64
  }
73
65
  /* See if we can return a cached jwt. */
74
- grpc_mdelem jwt_md = GRPC_MDNULL;
66
+ absl::optional<grpc_core::Slice> jwt_value;
75
67
  {
76
68
  gpr_mu_lock(&cache_mu_);
77
- if (!cached_.service_url.empty() && cached_.service_url == *uri &&
78
- !GRPC_MDISNULL(cached_.jwt_md) &&
69
+ if (cached_.has_value() && cached_->service_url == *uri &&
79
70
  (gpr_time_cmp(
80
- gpr_time_sub(cached_.jwt_expiration, gpr_now(GPR_CLOCK_REALTIME)),
71
+ gpr_time_sub(cached_->jwt_expiration, gpr_now(GPR_CLOCK_REALTIME)),
81
72
  refresh_threshold) > 0)) {
82
- jwt_md = GRPC_MDELEM_REF(cached_.jwt_md);
73
+ jwt_value = cached_->jwt_value.Ref();
83
74
  }
84
75
  gpr_mu_unlock(&cache_mu_);
85
76
  }
86
77
 
87
- if (GRPC_MDISNULL(jwt_md)) {
78
+ if (!jwt_value.has_value()) {
88
79
  char* jwt = nullptr;
89
80
  /* Generate a new jwt. */
90
81
  gpr_mu_lock(&cache_mu_);
91
- reset_cache();
82
+ cached_.reset();
92
83
  jwt = grpc_jwt_encode_and_sign(&key_, uri->c_str(), jwt_lifetime_, nullptr);
93
84
  if (jwt != nullptr) {
94
85
  std::string md_value = absl::StrCat("Bearer ", jwt);
95
86
  gpr_free(jwt);
96
- cached_.jwt_expiration =
97
- gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), jwt_lifetime_);
98
- cached_.service_url = std::move(*uri);
99
- cached_.jwt_md = grpc_mdelem_from_slices(
100
- grpc_slice_from_static_string(GRPC_AUTHORIZATION_METADATA_KEY),
101
- grpc_slice_from_cpp_string(std::move(md_value)));
102
- jwt_md = GRPC_MDELEM_REF(cached_.jwt_md);
87
+ jwt_value = grpc_core::Slice::FromCopiedString(md_value);
88
+ cached_ = {jwt_value->Ref(), std::move(*uri),
89
+ gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), jwt_lifetime_)};
103
90
  }
104
91
  gpr_mu_unlock(&cache_mu_);
105
92
  }
106
93
 
107
- if (!GRPC_MDISNULL(jwt_md)) {
108
- grpc_credentials_mdelem_array_add(md_array, jwt_md);
109
- GRPC_MDELEM_UNREF(jwt_md);
94
+ if (jwt_value.has_value()) {
95
+ md_array->emplace_back(
96
+ grpc_core::Slice::FromStaticString(GRPC_AUTHORIZATION_METADATA_KEY),
97
+ std::move(*jwt_value));
110
98
  } else {
111
99
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Could not generate JWT.");
112
100
  }
@@ -114,7 +102,8 @@ bool grpc_service_account_jwt_access_credentials::get_request_metadata(
114
102
  }
115
103
 
116
104
  void grpc_service_account_jwt_access_credentials::cancel_get_request_metadata(
117
- grpc_credentials_mdelem_array* /*md_array*/, grpc_error_handle error) {
105
+ grpc_core::CredentialsMetadataArray* /*md_array*/,
106
+ grpc_error_handle error) {
118
107
  GRPC_ERROR_UNREF(error);
119
108
  }
120
109
 
@@ -131,7 +120,6 @@ grpc_service_account_jwt_access_credentials::
131
120
  }
132
121
  jwt_lifetime_ = token_lifetime;
133
122
  gpr_mu_init(&cache_mu_);
134
- reset_cache();
135
123
  }
136
124
 
137
125
  grpc_core::RefCountedPtr<grpc_call_credentials>
@@ -40,12 +40,13 @@ class grpc_service_account_jwt_access_credentials
40
40
 
41
41
  bool get_request_metadata(grpc_polling_entity* pollent,
42
42
  grpc_auth_metadata_context context,
43
- grpc_credentials_mdelem_array* md_array,
43
+ grpc_core::CredentialsMetadataArray* md_array,
44
44
  grpc_closure* on_request_metadata,
45
45
  grpc_error_handle* error) override;
46
46
 
47
- void cancel_get_request_metadata(grpc_credentials_mdelem_array* md_array,
48
- grpc_error_handle error) override;
47
+ void cancel_get_request_metadata(
48
+ grpc_core::CredentialsMetadataArray* md_array,
49
+ grpc_error_handle error) override;
49
50
 
50
51
  const gpr_timespec& jwt_lifetime() const { return jwt_lifetime_; }
51
52
  const grpc_auth_json_key& key() const { return key_; }
@@ -58,16 +59,15 @@ class grpc_service_account_jwt_access_credentials
58
59
  };
59
60
 
60
61
  private:
61
- void reset_cache();
62
-
63
62
  // Have a simple cache for now with just 1 entry. We could have a map based on
64
63
  // the service_url for a more sophisticated one.
65
64
  gpr_mu cache_mu_;
66
- struct {
67
- grpc_mdelem jwt_md = GRPC_MDNULL;
65
+ struct Cache {
66
+ grpc_core::Slice jwt_value;
68
67
  std::string service_url;
69
68
  gpr_timespec jwt_expiration;
70
- } cached_;
69
+ };
70
+ absl::optional<Cache> cached_;
71
71
 
72
72
  grpc_auth_json_key key_;
73
73
  gpr_timespec jwt_lifetime_;
@@ -23,17 +23,15 @@
23
23
  #include <limits.h>
24
24
  #include <string.h>
25
25
 
26
+ #include <openssl/bn.h>
27
+ #include <openssl/pem.h>
28
+ #include <openssl/rsa.h>
29
+
26
30
  #include <grpc/support/alloc.h>
27
31
  #include <grpc/support/log.h>
28
32
  #include <grpc/support/string_util.h>
29
33
  #include <grpc/support/sync.h>
30
34
 
31
- extern "C" {
32
- #include <openssl/bn.h>
33
- #include <openssl/pem.h>
34
- #include <openssl/rsa.h>
35
- }
36
-
37
35
  #include "src/core/lib/gpr/string.h"
38
36
  #include "src/core/lib/gprpp/manual_constructor.h"
39
37
  #include "src/core/lib/http/httpcli.h"
@@ -397,7 +395,6 @@ struct grpc_jwt_verifier {
397
395
  email_key_mapping* mappings;
398
396
  size_t num_mappings; /* Should be very few, linear search ok. */
399
397
  size_t allocated_mappings;
400
- grpc_httpcli_context http_ctx;
401
398
  };
402
399
 
403
400
  static Json json_from_http(const grpc_httpcli_response* response) {
@@ -700,8 +697,7 @@ static void on_openid_config_retrieved(void* user_data,
700
697
  channel. This would allow us to cancel an authentication query when under
701
698
  extreme memory pressure. */
702
699
  grpc_httpcli_get(
703
- &ctx->verifier->http_ctx, &ctx->pollent,
704
- grpc_core::ResourceQuota::Default(), &req,
700
+ &ctx->pollent, grpc_core::ResourceQuota::Default(), &req,
705
701
  grpc_core::ExecCtx::Get()->Now() + grpc_jwt_verifier_max_delay,
706
702
  GRPC_CLOSURE_CREATE(on_keys_retrieved, ctx, grpc_schedule_on_exec_ctx),
707
703
  &ctx->responses[HTTP_RESPONSE_KEYS]);
@@ -824,8 +820,7 @@ static void retrieve_key_and_verify(verifier_cb_ctx* ctx) {
824
820
  channel. This would allow us to cancel an authentication query when under
825
821
  extreme memory pressure. */
826
822
  grpc_httpcli_get(
827
- &ctx->verifier->http_ctx, &ctx->pollent,
828
- grpc_core::ResourceQuota::Default(), &req,
823
+ &ctx->pollent, grpc_core::ResourceQuota::Default(), &req,
829
824
  grpc_core::ExecCtx::Get()->Now() + grpc_jwt_verifier_max_delay, http_cb,
830
825
  &ctx->responses[rsp_idx]);
831
826
  gpr_free(req.host);
@@ -886,7 +881,6 @@ grpc_jwt_verifier* grpc_jwt_verifier_create(
886
881
  const grpc_jwt_verifier_email_domain_key_url_mapping* mappings,
887
882
  size_t num_mappings) {
888
883
  grpc_jwt_verifier* v = grpc_core::Zalloc<grpc_jwt_verifier>();
889
- grpc_httpcli_context_init(&v->http_ctx);
890
884
 
891
885
  /* We know at least of one mapping. */
892
886
  v->allocated_mappings = 1 + num_mappings;
@@ -908,7 +902,6 @@ grpc_jwt_verifier* grpc_jwt_verifier_create(
908
902
  void grpc_jwt_verifier_destroy(grpc_jwt_verifier* v) {
909
903
  size_t i;
910
904
  if (v == nullptr) return;
911
- grpc_httpcli_context_destroy(&v->http_ctx);
912
905
  if (v->mappings != nullptr) {
913
906
  for (i = 0; i < v->num_mappings; i++) {
914
907
  gpr_free(v->mappings[i].email_domain);
@@ -127,15 +127,14 @@ void grpc_auth_refresh_token_destruct(grpc_auth_refresh_token* refresh_token) {
127
127
 
128
128
  grpc_oauth2_token_fetcher_credentials::
129
129
  ~grpc_oauth2_token_fetcher_credentials() {
130
- GRPC_MDELEM_UNREF(access_token_md_);
131
130
  gpr_mu_destroy(&mu_);
132
131
  grpc_pollset_set_destroy(grpc_polling_entity_pollset_set(&pollent_));
133
- grpc_httpcli_context_destroy(&httpcli_context_);
134
132
  }
135
133
 
136
134
  grpc_credentials_status
137
135
  grpc_oauth2_token_fetcher_credentials_parse_server_response(
138
- const grpc_http_response* response, grpc_mdelem* token_md,
136
+ const grpc_http_response* response,
137
+ absl::optional<grpc_core::Slice>* token_value,
139
138
  grpc_millis* token_lifetime) {
140
139
  char* null_terminated_body = nullptr;
141
140
  grpc_credentials_status status = GRPC_CREDENTIALS_OK;
@@ -204,19 +203,13 @@ grpc_oauth2_token_fetcher_credentials_parse_server_response(
204
203
  }
205
204
  expires_in = it->second.string_value().c_str();
206
205
  *token_lifetime = strtol(expires_in, nullptr, 10) * GPR_MS_PER_SEC;
207
- if (!GRPC_MDISNULL(*token_md)) GRPC_MDELEM_UNREF(*token_md);
208
- *token_md = grpc_mdelem_from_slices(
209
- grpc_core::ExternallyManagedSlice(GRPC_AUTHORIZATION_METADATA_KEY),
210
- grpc_slice_from_cpp_string(
211
- absl::StrCat(token_type, " ", access_token)));
206
+ *token_value = grpc_core::Slice::FromCopiedString(
207
+ absl::StrCat(token_type, " ", access_token));
212
208
  status = GRPC_CREDENTIALS_OK;
213
209
  }
214
210
 
215
211
  end:
216
- if (status != GRPC_CREDENTIALS_OK && !GRPC_MDISNULL(*token_md)) {
217
- GRPC_MDELEM_UNREF(*token_md);
218
- *token_md = GRPC_MDNULL;
219
- }
212
+ if (status != GRPC_CREDENTIALS_OK) *token_value = absl::nullopt;
220
213
  gpr_free(null_terminated_body);
221
214
  return status;
222
215
  }
@@ -233,17 +226,21 @@ static void on_oauth2_token_fetcher_http_response(void* user_data,
233
226
 
234
227
  void grpc_oauth2_token_fetcher_credentials::on_http_response(
235
228
  grpc_credentials_metadata_request* r, grpc_error_handle error) {
236
- grpc_mdelem access_token_md = GRPC_MDNULL;
229
+ absl::optional<grpc_core::Slice> access_token_value;
237
230
  grpc_millis token_lifetime = 0;
238
231
  grpc_credentials_status status =
239
232
  error == GRPC_ERROR_NONE
240
233
  ? grpc_oauth2_token_fetcher_credentials_parse_server_response(
241
- &r->response, &access_token_md, &token_lifetime)
234
+ &r->response, &access_token_value, &token_lifetime)
242
235
  : GRPC_CREDENTIALS_ERROR;
243
236
  // Update cache and grab list of pending requests.
244
237
  gpr_mu_lock(&mu_);
245
238
  token_fetch_pending_ = false;
246
- access_token_md_ = GRPC_MDELEM_REF(access_token_md);
239
+ if (access_token_value.has_value()) {
240
+ access_token_value_ = access_token_value->Ref();
241
+ } else {
242
+ access_token_value_ = absl::nullopt;
243
+ }
247
244
  token_expiration_ =
248
245
  status == GRPC_CREDENTIALS_OK
249
246
  ? gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
@@ -256,8 +253,9 @@ void grpc_oauth2_token_fetcher_credentials::on_http_response(
256
253
  while (pending_request != nullptr) {
257
254
  grpc_error_handle new_error = GRPC_ERROR_NONE;
258
255
  if (status == GRPC_CREDENTIALS_OK) {
259
- grpc_credentials_mdelem_array_add(pending_request->md_array,
260
- access_token_md);
256
+ pending_request->md_array->emplace_back(
257
+ grpc_core::Slice::FromStaticString(GRPC_AUTHORIZATION_METADATA_KEY),
258
+ access_token_value->Ref());
261
259
  } else {
262
260
  new_error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
263
261
  "Error occurred when fetching oauth2 token.", &error, 1);
@@ -270,31 +268,31 @@ void grpc_oauth2_token_fetcher_credentials::on_http_response(
270
268
  pending_request = pending_request->next;
271
269
  gpr_free(prev);
272
270
  }
273
- GRPC_MDELEM_UNREF(access_token_md);
274
271
  Unref();
275
272
  grpc_credentials_metadata_request_destroy(r);
276
273
  }
277
274
 
278
275
  bool grpc_oauth2_token_fetcher_credentials::get_request_metadata(
279
276
  grpc_polling_entity* pollent, grpc_auth_metadata_context /*context*/,
280
- grpc_credentials_mdelem_array* md_array, grpc_closure* on_request_metadata,
281
- grpc_error_handle* /*error*/) {
277
+ grpc_core::CredentialsMetadataArray* md_array,
278
+ grpc_closure* on_request_metadata, grpc_error_handle* /*error*/) {
282
279
  // Check if we can use the cached token.
283
280
  grpc_millis refresh_threshold =
284
281
  GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS * GPR_MS_PER_SEC;
285
- grpc_mdelem cached_access_token_md = GRPC_MDNULL;
282
+ absl::optional<grpc_core::Slice> cached_access_token_value;
286
283
  gpr_mu_lock(&mu_);
287
- if (!GRPC_MDISNULL(access_token_md_) &&
284
+ if (access_token_value_.has_value() &&
288
285
  gpr_time_cmp(
289
286
  gpr_time_sub(token_expiration_, gpr_now(GPR_CLOCK_MONOTONIC)),
290
287
  gpr_time_from_seconds(GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS,
291
288
  GPR_TIMESPAN)) > 0) {
292
- cached_access_token_md = GRPC_MDELEM_REF(access_token_md_);
289
+ cached_access_token_value = access_token_value_->Ref();
293
290
  }
294
- if (!GRPC_MDISNULL(cached_access_token_md)) {
291
+ if (cached_access_token_value.has_value()) {
295
292
  gpr_mu_unlock(&mu_);
296
- grpc_credentials_mdelem_array_add(md_array, cached_access_token_md);
297
- GRPC_MDELEM_UNREF(cached_access_token_md);
293
+ md_array->emplace_back(
294
+ grpc_core::Slice::FromStaticString(GRPC_AUTHORIZATION_METADATA_KEY),
295
+ std::move(*cached_access_token_value));
298
296
  return true;
299
297
  }
300
298
  // Couldn't get the token from the cache.
@@ -318,15 +316,14 @@ bool grpc_oauth2_token_fetcher_credentials::get_request_metadata(
318
316
  if (start_fetch) {
319
317
  Ref().release();
320
318
  fetch_oauth2(grpc_credentials_metadata_request_create(this->Ref()),
321
- &httpcli_context_, &pollent_,
322
- on_oauth2_token_fetcher_http_response,
319
+ &pollent_, on_oauth2_token_fetcher_http_response,
323
320
  grpc_core::ExecCtx::Get()->Now() + refresh_threshold);
324
321
  }
325
322
  return false;
326
323
  }
327
324
 
328
325
  void grpc_oauth2_token_fetcher_credentials::cancel_get_request_metadata(
329
- grpc_credentials_mdelem_array* md_array, grpc_error_handle error) {
326
+ grpc_core::CredentialsMetadataArray* md_array, grpc_error_handle error) {
330
327
  gpr_mu_lock(&mu_);
331
328
  grpc_oauth2_pending_get_request_metadata* prev = nullptr;
332
329
  grpc_oauth2_pending_get_request_metadata* pending_request = pending_requests_;
@@ -358,7 +355,6 @@ grpc_oauth2_token_fetcher_credentials::grpc_oauth2_token_fetcher_credentials()
358
355
  pollent_(grpc_polling_entity_create_from_pollset_set(
359
356
  grpc_pollset_set_create())) {
360
357
  gpr_mu_init(&mu_);
361
- grpc_httpcli_context_init(&httpcli_context_);
362
358
  }
363
359
 
364
360
  std::string grpc_oauth2_token_fetcher_credentials::debug_string() {
@@ -379,7 +375,6 @@ class grpc_compute_engine_token_fetcher_credentials
379
375
 
380
376
  protected:
381
377
  void fetch_oauth2(grpc_credentials_metadata_request* metadata_req,
382
- grpc_httpcli_context* http_context,
383
378
  grpc_polling_entity* pollent,
384
379
  grpc_iomgr_cb_func response_cb,
385
380
  grpc_millis deadline) override {
@@ -395,8 +390,8 @@ class grpc_compute_engine_token_fetcher_credentials
395
390
  /* TODO(ctiller): Carry the memory quota in ctx and share it with the host
396
391
  channel. This would allow us to cancel an authentication query when under
397
392
  extreme memory pressure. */
398
- grpc_httpcli_get(http_context, pollent, grpc_core::ResourceQuota::Default(),
399
- &request, deadline,
393
+ grpc_httpcli_get(pollent, grpc_core::ResourceQuota::Default(), &request,
394
+ deadline,
400
395
  GRPC_CLOSURE_INIT(&http_get_cb_closure_, response_cb,
401
396
  metadata_req, grpc_schedule_on_exec_ctx),
402
397
  &metadata_req->response);
@@ -435,8 +430,8 @@ grpc_google_refresh_token_credentials::
435
430
 
436
431
  void grpc_google_refresh_token_credentials::fetch_oauth2(
437
432
  grpc_credentials_metadata_request* metadata_req,
438
- grpc_httpcli_context* httpcli_context, grpc_polling_entity* pollent,
439
- grpc_iomgr_cb_func response_cb, grpc_millis deadline) {
433
+ grpc_polling_entity* pollent, grpc_iomgr_cb_func response_cb,
434
+ grpc_millis deadline) {
440
435
  grpc_http_header header = {
441
436
  const_cast<char*>("Content-Type"),
442
437
  const_cast<char*>("application/x-www-form-urlencoded")};
@@ -453,9 +448,8 @@ void grpc_google_refresh_token_credentials::fetch_oauth2(
453
448
  /* TODO(ctiller): Carry the memory quota in ctx and share it with the host
454
449
  channel. This would allow us to cancel an authentication query when under
455
450
  extreme memory pressure. */
456
- grpc_httpcli_post(httpcli_context, pollent,
457
- grpc_core::ResourceQuota::Default(), &request, body.c_str(),
458
- body.size(), deadline,
451
+ grpc_httpcli_post(pollent, grpc_core::ResourceQuota::Default(), &request,
452
+ body.c_str(), body.size(), deadline,
459
453
  GRPC_CLOSURE_INIT(&http_post_cb_closure_, response_cb,
460
454
  metadata_req, grpc_schedule_on_exec_ctx),
461
455
  &metadata_req->response);
@@ -556,7 +550,6 @@ class StsTokenFetcherCredentials
556
550
 
557
551
  private:
558
552
  void fetch_oauth2(grpc_credentials_metadata_request* metadata_req,
559
- grpc_httpcli_context* http_context,
560
553
  grpc_polling_entity* pollent,
561
554
  grpc_iomgr_cb_func response_cb,
562
555
  grpc_millis deadline) override {
@@ -584,8 +577,8 @@ class StsTokenFetcherCredentials
584
577
  channel. This would allow us to cancel an authentication query when under
585
578
  extreme memory pressure. */
586
579
  grpc_httpcli_post(
587
- http_context, pollent, ResourceQuota::Default(), &request, body,
588
- body_length, deadline,
580
+ pollent, ResourceQuota::Default(), &request, body, body_length,
581
+ deadline,
589
582
  GRPC_CLOSURE_INIT(&http_post_cb_closure_, response_cb, metadata_req,
590
583
  grpc_schedule_on_exec_ctx),
591
584
  &metadata_req->response);
@@ -705,36 +698,30 @@ grpc_call_credentials* grpc_sts_credentials_create(
705
698
  // Oauth2 Access Token credentials.
706
699
  //
707
700
 
708
- grpc_access_token_credentials::~grpc_access_token_credentials() {
709
- GRPC_MDELEM_UNREF(access_token_md_);
710
- }
711
-
712
701
  bool grpc_access_token_credentials::get_request_metadata(
713
702
  grpc_polling_entity* /*pollent*/, grpc_auth_metadata_context /*context*/,
714
- grpc_credentials_mdelem_array* md_array,
703
+ grpc_core::CredentialsMetadataArray* md_array,
715
704
  grpc_closure* /*on_request_metadata*/, grpc_error_handle* /*error*/) {
716
- grpc_credentials_mdelem_array_add(md_array, access_token_md_);
705
+ md_array->emplace_back(
706
+ grpc_core::Slice::FromStaticString(GRPC_AUTHORIZATION_METADATA_KEY),
707
+ access_token_value_.Ref());
717
708
  return true;
718
709
  }
719
710
 
720
711
  void grpc_access_token_credentials::cancel_get_request_metadata(
721
- grpc_credentials_mdelem_array* /*md_array*/, grpc_error_handle error) {
712
+ grpc_core::CredentialsMetadataArray* /*md_array*/,
713
+ grpc_error_handle error) {
722
714
  GRPC_ERROR_UNREF(error);
723
715
  }
724
716
 
725
717
  grpc_access_token_credentials::grpc_access_token_credentials(
726
718
  const char* access_token)
727
- : grpc_call_credentials(GRPC_CALL_CREDENTIALS_TYPE_OAUTH2) {
728
- grpc_core::ExecCtx exec_ctx;
729
- access_token_md_ = grpc_mdelem_from_slices(
730
- grpc_core::ExternallyManagedSlice(GRPC_AUTHORIZATION_METADATA_KEY),
731
- grpc_slice_from_cpp_string(absl::StrCat("Bearer ", access_token)));
732
- }
719
+ : grpc_call_credentials(GRPC_CALL_CREDENTIALS_TYPE_OAUTH2),
720
+ access_token_value_(grpc_core::Slice::FromCopiedString(
721
+ absl::StrCat("Bearer ", access_token))) {}
733
722
 
734
723
  std::string grpc_access_token_credentials::debug_string() {
735
- bool access_token_present = !GRPC_MDISNULL(access_token_md_);
736
- return absl::StrFormat("AccessTokenCredentials{Token:%s}",
737
- access_token_present ? "present" : "absent");
724
+ return absl::StrFormat("AccessTokenCredentials{Token:present}");
738
725
  }
739
726
 
740
727
  grpc_call_credentials* grpc_access_token_credentials_create(
@@ -64,7 +64,7 @@ void grpc_auth_refresh_token_destruct(grpc_auth_refresh_token* refresh_token);
64
64
  // from an http service.
65
65
 
66
66
  struct grpc_oauth2_pending_get_request_metadata {
67
- grpc_credentials_mdelem_array* md_array;
67
+ grpc_core::CredentialsMetadataArray* md_array;
68
68
  grpc_closure* on_request_metadata;
69
69
  grpc_polling_entity* pollent;
70
70
  struct grpc_oauth2_pending_get_request_metadata* next;
@@ -77,12 +77,13 @@ class grpc_oauth2_token_fetcher_credentials : public grpc_call_credentials {
77
77
 
78
78
  bool get_request_metadata(grpc_polling_entity* pollent,
79
79
  grpc_auth_metadata_context context,
80
- grpc_credentials_mdelem_array* md_array,
80
+ grpc_core::CredentialsMetadataArray* md_array,
81
81
  grpc_closure* on_request_metadata,
82
82
  grpc_error_handle* error) override;
83
83
 
84
- void cancel_get_request_metadata(grpc_credentials_mdelem_array* md_array,
85
- grpc_error_handle error) override;
84
+ void cancel_get_request_metadata(
85
+ grpc_core::CredentialsMetadataArray* md_array,
86
+ grpc_error_handle error) override;
86
87
 
87
88
  void on_http_response(grpc_credentials_metadata_request* r,
88
89
  grpc_error_handle error);
@@ -90,17 +91,15 @@ class grpc_oauth2_token_fetcher_credentials : public grpc_call_credentials {
90
91
 
91
92
  protected:
92
93
  virtual void fetch_oauth2(grpc_credentials_metadata_request* req,
93
- grpc_httpcli_context* httpcli_context,
94
94
  grpc_polling_entity* pollent, grpc_iomgr_cb_func cb,
95
95
  grpc_millis deadline) = 0;
96
96
 
97
97
  private:
98
98
  gpr_mu mu_;
99
- grpc_mdelem access_token_md_ = GRPC_MDNULL;
99
+ absl::optional<grpc_core::Slice> access_token_value_;
100
100
  gpr_timespec token_expiration_;
101
101
  bool token_fetch_pending_ = false;
102
102
  grpc_oauth2_pending_get_request_metadata* pending_requests_ = nullptr;
103
- grpc_httpcli_context httpcli_context_;
104
103
  grpc_polling_entity pollent_;
105
104
  };
106
105
 
@@ -120,7 +119,6 @@ class grpc_google_refresh_token_credentials final
120
119
 
121
120
  protected:
122
121
  void fetch_oauth2(grpc_credentials_metadata_request* req,
123
- grpc_httpcli_context* httpcli_context,
124
122
  grpc_polling_entity* pollent, grpc_iomgr_cb_func cb,
125
123
  grpc_millis deadline) override;
126
124
 
@@ -133,21 +131,21 @@ class grpc_google_refresh_token_credentials final
133
131
  class grpc_access_token_credentials final : public grpc_call_credentials {
134
132
  public:
135
133
  explicit grpc_access_token_credentials(const char* access_token);
136
- ~grpc_access_token_credentials() override;
137
134
 
138
135
  bool get_request_metadata(grpc_polling_entity* pollent,
139
136
  grpc_auth_metadata_context context,
140
- grpc_credentials_mdelem_array* md_array,
137
+ grpc_core::CredentialsMetadataArray* md_array,
141
138
  grpc_closure* on_request_metadata,
142
139
  grpc_error_handle* error) override;
143
140
 
144
- void cancel_get_request_metadata(grpc_credentials_mdelem_array* md_array,
145
- grpc_error_handle error) override;
141
+ void cancel_get_request_metadata(
142
+ grpc_core::CredentialsMetadataArray* md_array,
143
+ grpc_error_handle error) override;
146
144
 
147
145
  std::string debug_string() override;
148
146
 
149
147
  private:
150
- grpc_mdelem access_token_md_;
148
+ const grpc_core::Slice access_token_value_;
151
149
  };
152
150
 
153
151
  // Private constructor for refresh token credentials from an already parsed
@@ -159,8 +157,8 @@ grpc_refresh_token_credentials_create_from_auth_refresh_token(
159
157
  // Exposed for testing only.
160
158
  grpc_credentials_status
161
159
  grpc_oauth2_token_fetcher_credentials_parse_server_response(
162
- const struct grpc_http_response* response, grpc_mdelem* token_md,
163
- grpc_millis* token_lifetime);
160
+ const struct grpc_http_response* response,
161
+ absl::optional<grpc_core::Slice>* token_value, grpc_millis* token_lifetime);
164
162
 
165
163
  namespace grpc_core {
166
164
  // Exposed for testing only. This function validates the options, ensuring that
@@ -110,10 +110,9 @@ static grpc_error_handle process_plugin_result(
110
110
  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal metadata");
111
111
  } else {
112
112
  for (size_t i = 0; i < num_md; ++i) {
113
- grpc_mdelem mdelem =
114
- grpc_mdelem_create(md[i].key, md[i].value, nullptr);
115
- grpc_credentials_mdelem_array_add(r->md_array, mdelem);
116
- GRPC_MDELEM_UNREF(mdelem);
113
+ r->md_array->emplace_back(
114
+ grpc_core::Slice(grpc_slice_ref_internal(md[i].key)),
115
+ grpc_core::Slice(grpc_slice_ref_internal(md[i].value)));
117
116
  }
118
117
  }
119
118
  }
@@ -155,8 +154,8 @@ static void plugin_md_request_metadata_ready(void* request,
155
154
 
156
155
  bool grpc_plugin_credentials::get_request_metadata(
157
156
  grpc_polling_entity* /*pollent*/, grpc_auth_metadata_context context,
158
- grpc_credentials_mdelem_array* md_array, grpc_closure* on_request_metadata,
159
- grpc_error_handle* error) {
157
+ grpc_core::CredentialsMetadataArray* md_array,
158
+ grpc_closure* on_request_metadata, grpc_error_handle* error) {
160
159
  bool retval = true; // Synchronous return.
161
160
  if (plugin_.get_metadata != nullptr) {
162
161
  // Create pending_request object.
@@ -229,7 +228,7 @@ bool grpc_plugin_credentials::get_request_metadata(
229
228
  }
230
229
 
231
230
  void grpc_plugin_credentials::cancel_get_request_metadata(
232
- grpc_credentials_mdelem_array* md_array, grpc_error_handle error) {
231
+ grpc_core::CredentialsMetadataArray* md_array, grpc_error_handle error) {
233
232
  gpr_mu_lock(&mu_);
234
233
  for (pending_request* pending_request = pending_requests_;
235
234
  pending_request != nullptr; pending_request = pending_request->next) {
@@ -33,7 +33,7 @@ struct grpc_plugin_credentials final : public grpc_call_credentials {
33
33
  struct pending_request {
34
34
  bool cancelled;
35
35
  struct grpc_plugin_credentials* creds;
36
- grpc_credentials_mdelem_array* md_array;
36
+ grpc_core::CredentialsMetadataArray* md_array;
37
37
  grpc_closure* on_request_metadata;
38
38
  struct pending_request* prev;
39
39
  struct pending_request* next;
@@ -45,12 +45,13 @@ struct grpc_plugin_credentials final : public grpc_call_credentials {
45
45
 
46
46
  bool get_request_metadata(grpc_polling_entity* pollent,
47
47
  grpc_auth_metadata_context context,
48
- grpc_credentials_mdelem_array* md_array,
48
+ grpc_core::CredentialsMetadataArray* md_array,
49
49
  grpc_closure* on_request_metadata,
50
50
  grpc_error_handle* error) override;
51
51
 
52
- void cancel_get_request_metadata(grpc_credentials_mdelem_array* md_array,
53
- grpc_error_handle error) override;
52
+ void cancel_get_request_metadata(
53
+ grpc_core::CredentialsMetadataArray* md_array,
54
+ grpc_error_handle error) override;
54
55
 
55
56
  // Checks if the request has been cancelled.
56
57
  // If not, removes it from the pending list, so that it cannot be
@@ -27,6 +27,7 @@
27
27
  #include <grpc/support/string_util.h>
28
28
 
29
29
  #include "src/core/lib/channel/channel_args.h"
30
+ #include "src/core/lib/security/security_connector/ssl_utils.h"
30
31
  #include "src/core/lib/surface/api_trace.h"
31
32
  #include "src/core/tsi/ssl_transport_security.h"
32
33
 
@@ -34,16 +35,6 @@
34
35
  // SSL Channel Credentials.
35
36
  //
36
37
 
37
- void grpc_tsi_ssl_pem_key_cert_pairs_destroy(tsi_ssl_pem_key_cert_pair* kp,
38
- size_t num_key_cert_pairs) {
39
- if (kp == nullptr) return;
40
- for (size_t i = 0; i < num_key_cert_pairs; i++) {
41
- gpr_free(const_cast<char*>(kp[i].private_key));
42
- gpr_free(const_cast<char*>(kp[i].cert_chain));
43
- }
44
- gpr_free(kp);
45
- }
46
-
47
38
  grpc_ssl_credentials::grpc_ssl_credentials(
48
39
  const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
49
40
  const grpc_ssl_verify_peer_options* verify_options)
@@ -91,6 +91,12 @@ void grpc_tls_credentials_options_set_certificate_verifier(
91
91
  options->set_certificate_verifier(verifier->Ref());
92
92
  }
93
93
 
94
+ void grpc_tls_credentials_options_set_crl_directory(
95
+ grpc_tls_credentials_options* options, const char* crl_directory) {
96
+ GPR_ASSERT(options != nullptr);
97
+ options->set_crl_directory(crl_directory);
98
+ }
99
+
94
100
  void grpc_tls_credentials_options_set_check_call_host(
95
101
  grpc_tls_credentials_options* options, int check_call_host) {
96
102
  GPR_ASSERT(options != nullptr);