grpc 1.41.0 → 1.42.0.pre1

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 (519) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -44
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/event_engine/event_engine.h +82 -42
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  6. data/include/grpc/event_engine/memory_allocator.h +210 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +18 -0
  9. data/include/grpc/grpc_security_constants.h +1 -0
  10. data/include/grpc/impl/codegen/port_platform.h +7 -0
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  13. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  14. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  15. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  16. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  17. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  19. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  21. data/src/core/ext/filters/client_channel/connector.h +18 -18
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  43. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  45. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  53. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  54. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  55. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  59. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  60. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  61. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  63. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  64. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  66. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  67. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  68. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  69. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  72. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  73. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  74. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  75. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  76. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  77. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  78. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  79. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  80. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  81. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  82. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  84. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  85. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  87. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  89. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  90. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  93. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  94. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  96. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  100. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  108. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  109. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  110. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  114. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  123. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  125. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  127. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  128. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  130. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  131. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  138. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  139. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  140. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  142. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  146. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  147. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  148. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  153. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  155. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  161. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  163. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  164. data/src/core/ext/xds/xds_api.cc +325 -362
  165. data/src/core/ext/xds/xds_api.h +134 -82
  166. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  167. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  168. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  169. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  170. data/src/core/ext/xds/xds_client.cc +527 -314
  171. data/src/core/ext/xds/xds_client.h +42 -37
  172. data/src/core/ext/xds/xds_client_stats.h +1 -1
  173. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  174. data/src/core/lib/address_utils/parse_address.cc +2 -0
  175. data/src/core/lib/avl/avl.cc +5 -5
  176. data/src/core/lib/backoff/backoff.cc +1 -1
  177. data/src/core/lib/channel/channel_args.cc +24 -6
  178. data/src/core/lib/channel/channel_args.h +9 -0
  179. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  180. data/src/core/lib/channel/channel_trace.cc +1 -1
  181. data/src/core/lib/channel/channel_trace.h +1 -1
  182. data/src/core/lib/channel/channelz.cc +3 -3
  183. data/src/core/lib/channel/channelz.h +2 -2
  184. data/src/core/lib/channel/channelz_registry.cc +1 -1
  185. data/src/core/lib/channel/channelz_registry.h +1 -1
  186. data/src/core/lib/channel/connected_channel.cc +1 -3
  187. data/src/core/lib/channel/connected_channel.h +1 -2
  188. data/src/core/lib/compression/compression.cc +2 -2
  189. data/src/core/lib/compression/compression_args.cc +6 -4
  190. data/src/core/lib/compression/compression_internal.cc +2 -2
  191. data/src/core/lib/compression/compression_internal.h +1 -1
  192. data/src/core/lib/config/core_configuration.cc +44 -2
  193. data/src/core/lib/config/core_configuration.h +39 -1
  194. data/src/core/lib/debug/stats.cc +1 -1
  195. data/src/core/lib/debug/stats_data.cc +13 -13
  196. data/src/core/lib/gpr/atm.cc +1 -1
  197. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  198. data/src/core/lib/gpr/string.cc +2 -2
  199. data/src/core/lib/gpr/tls.h +1 -1
  200. data/src/core/lib/gpr/useful.h +79 -32
  201. data/src/core/lib/gprpp/arena.h +10 -0
  202. data/src/core/lib/gprpp/bitset.h +38 -16
  203. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  204. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  205. data/src/core/lib/gprpp/match.h +1 -1
  206. data/src/core/lib/gprpp/memory.h +6 -0
  207. data/src/core/lib/gprpp/overload.h +1 -1
  208. data/src/core/lib/gprpp/status_helper.cc +23 -3
  209. data/src/core/lib/gprpp/status_helper.h +12 -1
  210. data/src/core/lib/gprpp/table.h +411 -0
  211. data/src/core/lib/http/httpcli.cc +200 -182
  212. data/src/core/lib/http/parser.cc +2 -2
  213. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  214. data/src/core/lib/iomgr/combiner.cc +6 -21
  215. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  216. data/src/core/lib/iomgr/error.cc +113 -52
  217. data/src/core/lib/iomgr/error.h +50 -9
  218. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  222. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  223. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  224. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  225. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  226. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  227. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  228. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  229. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  230. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  231. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  232. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  233. data/src/core/lib/iomgr/executor.cc +6 -20
  234. data/src/core/lib/iomgr/iomgr.cc +3 -1
  235. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  236. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  237. data/src/core/lib/iomgr/load_file.cc +2 -2
  238. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  239. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  240. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  242. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  243. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  244. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  246. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  247. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  248. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  249. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  250. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  251. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  252. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  254. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  255. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  256. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  257. data/src/core/lib/json/json_util.cc +68 -0
  258. data/src/core/lib/json/json_util.h +57 -99
  259. data/src/core/lib/json/json_writer.cc +0 -3
  260. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  261. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  262. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  263. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  264. data/src/core/lib/security/context/security_context.cc +4 -2
  265. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  266. data/src/core/lib/security/credentials/credentials.cc +4 -2
  267. data/src/core/lib/security/credentials/credentials.h +6 -1
  268. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  269. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  270. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  272. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  273. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  274. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  275. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  276. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  278. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  279. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  280. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  281. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  282. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  283. data/src/core/lib/slice/slice.cc +0 -16
  284. data/src/core/lib/slice/slice_api.cc +39 -0
  285. data/src/core/lib/slice/slice_buffer.cc +5 -5
  286. data/src/core/lib/slice/slice_intern.cc +8 -13
  287. data/src/core/lib/slice/slice_internal.h +1 -244
  288. data/src/core/lib/slice/slice_refcount.cc +17 -0
  289. data/src/core/lib/slice/slice_refcount.h +121 -0
  290. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  291. data/src/core/lib/slice/slice_split.cc +100 -0
  292. data/src/core/lib/slice/slice_split.h +40 -0
  293. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  294. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  295. data/src/core/lib/slice/static_slice.cc +529 -0
  296. data/src/core/lib/slice/static_slice.h +331 -0
  297. data/src/core/lib/surface/builtins.cc +49 -0
  298. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  299. data/src/core/lib/surface/call.cc +103 -120
  300. data/src/core/lib/surface/call.h +0 -6
  301. data/src/core/lib/surface/channel.cc +19 -32
  302. data/src/core/lib/surface/channel.h +0 -9
  303. data/src/core/lib/surface/channel_init.cc +23 -76
  304. data/src/core/lib/surface/channel_init.h +52 -44
  305. data/src/core/lib/surface/completion_queue.cc +6 -5
  306. data/src/core/lib/surface/init.cc +0 -39
  307. data/src/core/lib/surface/init_secure.cc +17 -14
  308. data/src/core/lib/surface/lame_client.cc +18 -11
  309. data/src/core/lib/surface/lame_client.h +1 -1
  310. data/src/core/lib/surface/server.cc +25 -17
  311. data/src/core/lib/surface/server.h +17 -10
  312. data/src/core/lib/surface/validate_metadata.cc +5 -2
  313. data/src/core/lib/surface/version.cc +2 -2
  314. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  315. data/src/core/lib/transport/error_utils.cc +42 -17
  316. data/src/core/lib/transport/error_utils.h +1 -1
  317. data/src/core/lib/transport/metadata.cc +31 -10
  318. data/src/core/lib/transport/metadata.h +2 -1
  319. data/src/core/lib/transport/metadata_batch.cc +35 -371
  320. data/src/core/lib/transport/metadata_batch.h +905 -71
  321. data/src/core/lib/transport/parsed_metadata.h +263 -0
  322. data/src/core/lib/transport/pid_controller.cc +4 -4
  323. data/src/core/lib/transport/static_metadata.cc +714 -846
  324. data/src/core/lib/transport/static_metadata.h +115 -379
  325. data/src/core/lib/transport/status_metadata.cc +1 -0
  326. data/src/core/lib/transport/transport.cc +4 -5
  327. data/src/core/lib/transport/transport_op_string.cc +40 -20
  328. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  329. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  330. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  331. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  332. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  336. data/src/core/tsi/fake_transport_security.cc +15 -7
  337. data/src/core/tsi/local_transport_security.cc +36 -73
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  339. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  340. data/src/core/tsi/ssl_transport_security.cc +10 -2
  341. data/src/core/tsi/transport_security.cc +12 -0
  342. data/src/core/tsi/transport_security.h +16 -1
  343. data/src/core/tsi/transport_security_interface.h +26 -0
  344. data/src/ruby/ext/grpc/extconf.rb +12 -9
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  346. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  349. data/src/ruby/spec/client_server_spec.rb +1 -1
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  352. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  353. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  355. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  356. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  357. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  358. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  360. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  365. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  373. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  374. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  375. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  377. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  378. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  379. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  381. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  382. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  383. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  384. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  402. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  404. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  405. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  406. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  409. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  410. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  411. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  439. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  442. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  444. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  446. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
  447. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  448. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
  449. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  451. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  453. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  456. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  459. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
  460. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  461. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
  462. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  464. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  465. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  466. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  467. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  468. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  469. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  470. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  471. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  472. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  473. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
  474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  478. data/third_party/re2/re2/compile.cc +91 -109
  479. data/third_party/re2/re2/dfa.cc +27 -39
  480. data/third_party/re2/re2/filtered_re2.cc +18 -2
  481. data/third_party/re2/re2/filtered_re2.h +10 -5
  482. data/third_party/re2/re2/nfa.cc +1 -1
  483. data/third_party/re2/re2/parse.cc +42 -23
  484. data/third_party/re2/re2/perl_groups.cc +34 -34
  485. data/third_party/re2/re2/prefilter.cc +3 -2
  486. data/third_party/re2/re2/prog.cc +182 -4
  487. data/third_party/re2/re2/prog.h +28 -9
  488. data/third_party/re2/re2/re2.cc +87 -118
  489. data/third_party/re2/re2/re2.h +156 -141
  490. data/third_party/re2/re2/regexp.cc +12 -5
  491. data/third_party/re2/re2/regexp.h +8 -2
  492. data/third_party/re2/re2/set.cc +31 -9
  493. data/third_party/re2/re2/set.h +9 -4
  494. data/third_party/re2/re2/simplify.cc +11 -3
  495. data/third_party/re2/re2/tostring.cc +1 -1
  496. data/third_party/re2/re2/walker-inl.h +1 -1
  497. data/third_party/re2/util/mutex.h +2 -2
  498. data/third_party/re2/util/pcre.h +3 -3
  499. metadata +83 -70
  500. data/include/grpc/event_engine/slice_allocator.h +0 -71
  501. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  502. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  503. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  504. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  505. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  506. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  507. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  508. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  509. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  510. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  511. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  512. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  513. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  514. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  515. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  516. data/src/core/lib/iomgr/udp_server.cc +0 -747
  517. data/src/core/lib/iomgr/udp_server.h +0 -103
  518. data/src/core/lib/transport/authority_override.cc +0 -40
  519. data/src/core/lib/transport/authority_override.h +0 -37
@@ -40,10 +40,10 @@ bool ParseDurationFromJson(const Json& field, grpc_millis* duration);
40
40
  // Return true on success, false otherwise. If an error is encountered during
41
41
  // parsing, a descriptive error is appended to \a error_list.
42
42
  //
43
- template <typename NumericType, typename ErrorVectorType>
44
- inline bool ExtractJsonNumber(const Json& json, const std::string& field_name,
45
- NumericType* output,
46
- ErrorVectorType* error_list) {
43
+ template <typename NumericType>
44
+ bool ExtractJsonNumber(const Json& json, absl::string_view field_name,
45
+ NumericType* output,
46
+ std::vector<grpc_error_handle>* error_list) {
47
47
  static_assert(std::is_integral<NumericType>::value, "Integral required");
48
48
  if (json.type() != Json::Type::NUMBER) {
49
49
  error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
@@ -58,27 +58,14 @@ inline bool ExtractJsonNumber(const Json& json, const std::string& field_name,
58
58
  return true;
59
59
  }
60
60
 
61
- template <typename ErrorVectorType>
62
- inline bool ExtractJsonBool(const Json& json, const std::string& field_name,
63
- bool* output, ErrorVectorType* error_list) {
64
- switch (json.type()) {
65
- case Json::Type::JSON_TRUE:
66
- *output = true;
67
- return true;
68
- case Json::Type::JSON_FALSE:
69
- *output = false;
70
- return true;
71
- default:
72
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
73
- absl::StrCat("field:", field_name, " error:type should be BOOLEAN")));
74
- return false;
75
- }
76
- }
61
+ bool ExtractJsonBool(const Json& json, absl::string_view field_name,
62
+ bool* output, std::vector<grpc_error_handle>* error_list);
77
63
 
78
- template <typename ErrorVectorType>
79
- inline bool ExtractJsonString(const Json& json, const std::string& field_name,
80
- std::string* output,
81
- ErrorVectorType* error_list) {
64
+ // OutputType can be std::string or absl::string_view.
65
+ template <typename OutputType>
66
+ bool ExtractJsonString(const Json& json, absl::string_view field_name,
67
+ OutputType* output,
68
+ std::vector<grpc_error_handle>* error_list) {
82
69
  if (json.type() != Json::Type::STRING) {
83
70
  *output = "";
84
71
  error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
@@ -89,72 +76,61 @@ inline bool ExtractJsonString(const Json& json, const std::string& field_name,
89
76
  return true;
90
77
  }
91
78
 
92
- template <typename ErrorVectorType>
93
- inline bool ExtractJsonArray(const Json& json, const std::string& field_name,
94
- const Json::Array** output,
95
- ErrorVectorType* error_list) {
96
- if (json.type() != Json::Type::ARRAY) {
97
- *output = nullptr;
98
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
99
- absl::StrCat("field:", field_name, " error:type should be ARRAY")));
100
- return false;
101
- }
102
- *output = &json.array_value();
103
- return true;
104
- }
79
+ bool ExtractJsonArray(const Json& json, absl::string_view field_name,
80
+ const Json::Array** output,
81
+ std::vector<grpc_error_handle>* error_list);
105
82
 
106
- template <typename ErrorVectorType>
107
- inline bool ExtractJsonObject(const Json& json, const std::string& field_name,
108
- const Json::Object** output,
109
- ErrorVectorType* error_list) {
110
- if (json.type() != Json::Type::OBJECT) {
111
- *output = nullptr;
112
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
113
- absl::StrCat("field:", field_name, " error:type should be OBJECT")));
114
- return false;
115
- }
116
- *output = &json.object_value();
117
- return true;
118
- }
83
+ bool ExtractJsonObject(const Json& json, absl::string_view field_name,
84
+ const Json::Object** output,
85
+ std::vector<grpc_error_handle>* error_list);
119
86
 
120
- template <typename NumericType, typename ErrorVectorType>
121
- inline bool ExtractJsonType(const Json& json, const std::string& field_name,
122
- NumericType* output, ErrorVectorType* error_list) {
87
+ // Wrappers for automatically choosing one of the above functions based
88
+ // on output parameter type.
89
+ template <typename NumericType>
90
+ inline bool ExtractJsonType(const Json& json, absl::string_view field_name,
91
+ NumericType* output,
92
+ std::vector<grpc_error_handle>* error_list) {
123
93
  return ExtractJsonNumber(json, field_name, output, error_list);
124
94
  }
125
-
126
- template <typename ErrorVectorType>
127
- inline bool ExtractJsonType(const Json& json, const std::string& field_name,
128
- bool* output, ErrorVectorType* error_list) {
95
+ inline bool ExtractJsonType(const Json& json, absl::string_view field_name,
96
+ bool* output,
97
+ std::vector<grpc_error_handle>* error_list) {
129
98
  return ExtractJsonBool(json, field_name, output, error_list);
130
99
  }
131
-
132
- template <typename ErrorVectorType>
133
- inline bool ExtractJsonType(const Json& json, const std::string& field_name,
134
- std::string* output, ErrorVectorType* error_list) {
100
+ inline bool ExtractJsonType(const Json& json, absl::string_view field_name,
101
+ std::string* output,
102
+ std::vector<grpc_error_handle>* error_list) {
135
103
  return ExtractJsonString(json, field_name, output, error_list);
136
104
  }
137
-
138
- template <typename ErrorVectorType>
139
- inline bool ExtractJsonType(const Json& json, const std::string& field_name,
105
+ inline bool ExtractJsonType(const Json& json, absl::string_view field_name,
106
+ absl::string_view* output,
107
+ std::vector<grpc_error_handle>* error_list) {
108
+ return ExtractJsonString(json, field_name, output, error_list);
109
+ }
110
+ inline bool ExtractJsonType(const Json& json, absl::string_view field_name,
140
111
  const Json::Array** output,
141
- ErrorVectorType* error_list) {
112
+ std::vector<grpc_error_handle>* error_list) {
142
113
  return ExtractJsonArray(json, field_name, output, error_list);
143
114
  }
144
-
145
- template <typename ErrorVectorType>
146
- inline bool ExtractJsonType(const Json& json, const std::string& field_name,
115
+ inline bool ExtractJsonType(const Json& json, absl::string_view field_name,
147
116
  const Json::Object** output,
148
- ErrorVectorType* error_list) {
117
+ std::vector<grpc_error_handle>* error_list) {
149
118
  return ExtractJsonObject(json, field_name, output, error_list);
150
119
  }
151
120
 
152
- template <typename T, typename ErrorVectorType>
153
- inline bool ParseJsonObjectField(const Json::Object& object,
154
- const std::string& field_name, T* output,
155
- ErrorVectorType* error_list,
156
- bool required = true) {
157
- auto it = object.find(field_name);
121
+ // Extracts a field from a JSON object, automatically selecting the type
122
+ // of parsing based on the output parameter type.
123
+ // If the field is not present, returns false, and if required is true,
124
+ // adds an error to error_list.
125
+ // Upon any other error, adds an error to error_list and returns false.
126
+ template <typename T>
127
+ bool ParseJsonObjectField(const Json::Object& object,
128
+ absl::string_view field_name, T* output,
129
+ std::vector<grpc_error_handle>* error_list,
130
+ bool required = true) {
131
+ // TODO(roth): Once we can use C++14 heterogenous lookups, stop
132
+ // creating a std::string here.
133
+ auto it = object.find(std::string(field_name));
158
134
  if (it == object.end()) {
159
135
  if (required) {
160
136
  error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
@@ -166,30 +142,12 @@ inline bool ParseJsonObjectField(const Json::Object& object,
166
142
  return ExtractJsonType(child_object_json, field_name, output, error_list);
167
143
  }
168
144
 
169
- template <typename ErrorVectorType>
170
- inline bool ParseJsonObjectFieldAsDuration(const Json::Object& object,
171
- const std::string& field_name,
172
- grpc_millis* output,
173
- ErrorVectorType* error_list,
174
- bool required = true) {
175
- auto it = object.find(field_name);
176
- if (it == object.end()) {
177
- if (required) {
178
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
179
- absl::StrCat("field:", field_name, " error:does not exist.")));
180
- }
181
- return false;
182
- }
183
- if (!ParseDurationFromJson(it->second, output)) {
184
- *output = GRPC_MILLIS_INF_PAST;
185
- error_list->push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
186
- absl::StrCat("field:", field_name,
187
- " error:type should be STRING of the form given by "
188
- "google.proto.Duration.")));
189
- return false;
190
- }
191
- return true;
192
- }
145
+ // Alternative to ParseJsonObjectField() for duration-value fields.
146
+ bool ParseJsonObjectFieldAsDuration(const Json::Object& object,
147
+ absl::string_view field_name,
148
+ grpc_millis* output,
149
+ std::vector<grpc_error_handle>* error_list,
150
+ bool required = true);
193
151
 
194
152
  } // namespace grpc_core
195
153
 
@@ -23,9 +23,6 @@
23
23
 
24
24
  #include "absl/strings/string_view.h"
25
25
 
26
- #include <grpc/support/alloc.h>
27
- #include <grpc/support/log.h>
28
-
29
26
  #include "src/core/lib/json/json.h"
30
27
 
31
28
  namespace grpc_core {
@@ -27,7 +27,7 @@ struct grpc_authorization_policy_provider
27
27
  grpc_core::RefCountedPtr<grpc_core::AuthorizationEngine> allow_engine;
28
28
  grpc_core::RefCountedPtr<grpc_core::AuthorizationEngine> deny_engine;
29
29
  };
30
- virtual AuthorizationEngines engines() const = 0;
30
+ virtual AuthorizationEngines engines() = 0;
31
31
  };
32
32
 
33
33
  #endif // GRPC_CORE_LIB_SECURITY_AUTHORIZATION_AUTHORIZATION_POLICY_PROVIDER_H
@@ -33,7 +33,7 @@ void ProviderArgDestroy(void* p) {
33
33
  provider->Unref();
34
34
  }
35
35
 
36
- int ProviderArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
36
+ int ProviderArgCmp(void* p, void* q) { return grpc_core::QsortCompare(p, q); }
37
37
 
38
38
  } // namespace
39
39
 
@@ -80,8 +80,9 @@ EvaluateArgs::PerChannelArgs::PerChannelArgs(grpc_auth_context* auth_context,
80
80
 
81
81
  absl::string_view EvaluateArgs::GetPath() const {
82
82
  absl::string_view path;
83
- if (metadata_ != nullptr && metadata_->idx.named.path != nullptr) {
84
- grpc_linked_mdelem* elem = metadata_->idx.named.path;
83
+ if (metadata_ != nullptr &&
84
+ metadata_->legacy_index()->named.path != nullptr) {
85
+ grpc_linked_mdelem* elem = metadata_->legacy_index()->named.path;
85
86
  const grpc_slice& val = GRPC_MDVALUE(elem->md);
86
87
  path = StringViewFromSlice(val);
87
88
  }
@@ -90,8 +91,9 @@ absl::string_view EvaluateArgs::GetPath() const {
90
91
 
91
92
  absl::string_view EvaluateArgs::GetHost() const {
92
93
  absl::string_view host;
93
- if (metadata_ != nullptr && metadata_->idx.named.host != nullptr) {
94
- grpc_linked_mdelem* elem = metadata_->idx.named.host;
94
+ if (metadata_ != nullptr &&
95
+ metadata_->legacy_index()->named.host != nullptr) {
96
+ grpc_linked_mdelem* elem = metadata_->legacy_index()->named.host;
95
97
  const grpc_slice& val = GRPC_MDVALUE(elem->md);
96
98
  host = StringViewFromSlice(val);
97
99
  }
@@ -100,8 +102,9 @@ absl::string_view EvaluateArgs::GetHost() const {
100
102
 
101
103
  absl::string_view EvaluateArgs::GetMethod() const {
102
104
  absl::string_view method;
103
- if (metadata_ != nullptr && metadata_->idx.named.method != nullptr) {
104
- grpc_linked_mdelem* elem = metadata_->idx.named.method;
105
+ if (metadata_ != nullptr &&
106
+ metadata_->legacy_index()->named.method != nullptr) {
107
+ grpc_linked_mdelem* elem = metadata_->legacy_index()->named.method;
105
108
  const grpc_slice& val = GRPC_MDVALUE(elem->md);
106
109
  method = StringViewFromSlice(val);
107
110
  }
@@ -114,12 +117,11 @@ std::multimap<absl::string_view, absl::string_view> EvaluateArgs::GetHeaders()
114
117
  if (metadata_ == nullptr) {
115
118
  return headers;
116
119
  }
117
- for (grpc_linked_mdelem* elem = metadata_->list.head; elem != nullptr;
118
- elem = elem->next) {
119
- const grpc_slice& key = GRPC_MDKEY(elem->md);
120
- const grpc_slice& val = GRPC_MDVALUE(elem->md);
120
+ metadata_->ForEach([&](grpc_mdelem md) {
121
+ const grpc_slice& key = GRPC_MDKEY(md);
122
+ const grpc_slice& val = GRPC_MDVALUE(md);
121
123
  headers.emplace(StringViewFromSlice(key), StringViewFromSlice(val));
122
- }
124
+ });
123
125
  return headers;
124
126
  }
125
127
 
@@ -128,7 +130,7 @@ absl::optional<absl::string_view> EvaluateArgs::GetHeaderValue(
128
130
  if (metadata_ == nullptr) {
129
131
  return absl::nullopt;
130
132
  }
131
- return grpc_metadata_batch_get_value(metadata_, key, concatenated_value);
133
+ return metadata_->GetValue(key, concatenated_value);
132
134
  }
133
135
 
134
136
  grpc_resolved_address EvaluateArgs::GetLocalAddress() const {
@@ -92,6 +92,18 @@ void SdkServerAuthzFilter::CallData::Destroy(
92
92
  bool SdkServerAuthzFilter::CallData::IsAuthorized(SdkServerAuthzFilter* chand) {
93
93
  EvaluateArgs args(recv_initial_metadata_batch_,
94
94
  &chand->per_channel_evaluate_args_);
95
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_sdk_authz_trace)) {
96
+ gpr_log(
97
+ GPR_DEBUG,
98
+ "checking request: url_path=%s, transport_security_type=%s, "
99
+ "uri_sans=[%s], dns_sans=[%s], local_address=%s:%d, peer_address=%s:%d",
100
+ std::string(args.GetPath()).c_str(),
101
+ std::string(args.GetTransportSecurityType()).c_str(),
102
+ absl::StrJoin(args.GetUriSans(), ",").c_str(),
103
+ absl::StrJoin(args.GetDnsSans(), ",").c_str(),
104
+ std::string(args.GetLocalAddressString()).c_str(), args.GetLocalPort(),
105
+ std::string(args.GetPeerAddressString()).c_str(), args.GetPeerPort());
106
+ }
95
107
  grpc_authorization_policy_provider::AuthorizationEngines engines =
96
108
  chand->provider_->engines();
97
109
  if (engines.deny_engine != nullptr) {
@@ -137,7 +149,7 @@ void SdkServerAuthzFilter::CallData::RecvInitialMetadataReady(
137
149
  GRPC_STATUS_PERMISSION_DENIED);
138
150
  }
139
151
  } else {
140
- GRPC_ERROR_REF(error);
152
+ (void)GRPC_ERROR_REF(error);
141
153
  }
142
154
  Closure::Run(DEBUG_LOCATION, calld->original_recv_initial_metadata_ready_,
143
155
  error);
@@ -223,7 +223,7 @@ grpc_auth_property_iterator grpc_auth_context_peer_identity(
223
223
  void grpc_auth_context::ensure_capacity() {
224
224
  if (properties_.count == properties_.capacity) {
225
225
  properties_.capacity =
226
- GPR_MAX(properties_.capacity + 8, properties_.capacity * 2);
226
+ std::max(properties_.capacity + 8, properties_.capacity * 2);
227
227
  properties_.array = static_cast<grpc_auth_property*>(gpr_realloc(
228
228
  properties_.array, properties_.capacity * sizeof(grpc_auth_property)));
229
229
  }
@@ -289,7 +289,9 @@ static void* auth_context_pointer_arg_copy(void* p) {
289
289
  : ctx->Ref(DEBUG_LOCATION, "auth_context_pointer_arg").release();
290
290
  }
291
291
 
292
- static int auth_context_pointer_cmp(void* a, void* b) { return GPR_ICMP(a, b); }
292
+ static int auth_context_pointer_cmp(void* a, void* b) {
293
+ return grpc_core::QsortCompare(a, b);
294
+ }
293
295
 
294
296
  static const grpc_arg_pointer_vtable auth_context_pointer_vtable = {
295
297
  auth_context_pointer_arg_copy, auth_context_pointer_arg_destroy,
@@ -147,7 +147,7 @@ void grpc_composite_call_credentials::push_to_inner(
147
147
  auto composite_creds =
148
148
  static_cast<grpc_composite_call_credentials*>(creds.get());
149
149
  for (size_t i = 0; i < composite_creds->inner().size(); ++i) {
150
- inner_.push_back(std::move(composite_creds->inner_[i]));
150
+ inner_.push_back(composite_creds->inner_[i]);
151
151
  }
152
152
  }
153
153
 
@@ -59,7 +59,9 @@ static void* credentials_pointer_arg_copy(void* p) {
59
59
  return static_cast<grpc_channel_credentials*>(p)->Ref().release();
60
60
  }
61
61
 
62
- static int credentials_pointer_cmp(void* a, void* b) { return GPR_ICMP(a, b); }
62
+ static int credentials_pointer_cmp(void* a, void* b) {
63
+ return grpc_core::QsortCompare(a, b);
64
+ }
63
65
 
64
66
  static const grpc_arg_pointer_vtable credentials_pointer_vtable = {
65
67
  credentials_pointer_arg_copy, credentials_pointer_arg_destroy,
@@ -127,7 +129,7 @@ static void* server_credentials_pointer_arg_copy(void* p) {
127
129
  }
128
130
 
129
131
  static int server_credentials_pointer_cmp(void* a, void* b) {
130
- return GPR_ICMP(a, b);
132
+ return grpc_core::QsortCompare(a, b);
131
133
  }
132
134
 
133
135
  static const grpc_arg_pointer_vtable cred_ptr_vtable = {
@@ -93,7 +93,7 @@ void grpc_override_well_known_credentials_path_getter(
93
93
 
94
94
  /* --- grpc_channel_credentials. --- */
95
95
 
96
- #define GRPC_ARG_CHANNEL_CREDENTIALS "grpc.channel_credentials"
96
+ #define GRPC_ARG_CHANNEL_CREDENTIALS "grpc.internal.channel_credentials"
97
97
 
98
98
  // This type is forward declared as a C struct and we cannot define it as a
99
99
  // class. Otherwise, compiler will complain about type mismatch due to
@@ -137,6 +137,11 @@ struct grpc_channel_credentials
137
137
  const char* type_;
138
138
  };
139
139
 
140
+ // TODO(roth): Once we eliminate insecure builds, find a better way to
141
+ // plumb credentials so that it doesn't need to flow through channel
142
+ // args. For example, we'll want to expose it to LB policies by adding
143
+ // methods on the helper API.
144
+
140
145
  /* Util to encapsulate the channel credentials in a channel arg. */
141
146
  grpc_arg grpc_channel_credentials_to_arg(grpc_channel_credentials* credentials);
142
147
 
@@ -17,9 +17,11 @@
17
17
 
18
18
  #include "src/core/lib/security/credentials/external/external_account_credentials.h"
19
19
 
20
+ #include "absl/strings/match.h"
20
21
  #include "absl/strings/str_format.h"
21
22
  #include "absl/strings/str_join.h"
22
23
  #include "absl/strings/str_split.h"
24
+ #include "absl/strings/strip.h"
23
25
  #include "absl/time/clock.h"
24
26
  #include "absl/time/time.h"
25
27
 
@@ -59,6 +61,23 @@ std::string UrlEncode(const absl::string_view& s) {
59
61
  return result;
60
62
  }
61
63
 
64
+ // Expression to match:
65
+ // //iam.googleapis.com/locations/[^/]+/workforcePools/[^/]+/providers/.+
66
+ bool MatchWorkforcePoolAudience(absl::string_view audience) {
67
+ // Match "//iam.googleapis.com/locations/"
68
+ if (!absl::ConsumePrefix(&audience, "//iam.googleapis.com")) return false;
69
+ if (!absl::ConsumePrefix(&audience, "/locations/")) return false;
70
+ // Match "[^/]+/workforcePools/"
71
+ std::pair<absl::string_view, absl::string_view> workforce_pools_split_result =
72
+ absl::StrSplit(audience, absl::MaxSplits("/workforcePools/", 1));
73
+ if (absl::StrContains(workforce_pools_split_result.first, '/')) return false;
74
+ // Match "[^/]+/providers/.+"
75
+ std::pair<absl::string_view, absl::string_view> providers_split_result =
76
+ absl::StrSplit(workforce_pools_split_result.second,
77
+ absl::MaxSplits("/providers/", 1));
78
+ return !absl::StrContains(providers_split_result.first, '/');
79
+ }
80
+
62
81
  } // namespace
63
82
 
64
83
  RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
@@ -151,6 +170,17 @@ RefCountedPtr<ExternalAccountCredentials> ExternalAccountCredentials::Create(
151
170
  if (it != json.object_value().end()) {
152
171
  options.client_secret = it->second.string_value();
153
172
  }
173
+ it = json.object_value().find("workforce_pool_user_project");
174
+ if (it != json.object_value().end()) {
175
+ if (MatchWorkforcePoolAudience(options.audience)) {
176
+ options.workforce_pool_user_project = it->second.string_value();
177
+ } else {
178
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
179
+ "workforce_pool_user_project should not be set for non-workforce "
180
+ "pool credentials");
181
+ return nullptr;
182
+ }
183
+ }
154
184
  RefCountedPtr<ExternalAccountCredentials> creds;
155
185
  if (options.credential_source.object_value().find("environment_id") !=
156
186
  options.credential_source.object_value().end()) {
@@ -267,25 +297,31 @@ void ExternalAccountCredentials::ExchangeToken(
267
297
  request.handshaker =
268
298
  uri->scheme() == "https" ? &grpc_httpcli_ssl : &grpc_httpcli_plaintext;
269
299
  std::vector<std::string> body_parts;
270
- body_parts.push_back(absl::StrFormat("%s=%s", "audience",
271
- UrlEncode(options_.audience).c_str()));
300
+ body_parts.push_back(
301
+ absl::StrFormat("audience=%s", UrlEncode(options_.audience).c_str()));
272
302
  body_parts.push_back(absl::StrFormat(
273
- "%s=%s", "grant_type",
303
+ "grant_type=%s",
274
304
  UrlEncode(EXTERNAL_ACCOUNT_CREDENTIALS_GRANT_TYPE).c_str()));
275
305
  body_parts.push_back(absl::StrFormat(
276
- "%s=%s", "requested_token_type",
306
+ "requested_token_type=%s",
277
307
  UrlEncode(EXTERNAL_ACCOUNT_CREDENTIALS_REQUESTED_TOKEN_TYPE).c_str()));
308
+ body_parts.push_back(absl::StrFormat(
309
+ "subject_token_type=%s", UrlEncode(options_.subject_token_type).c_str()));
278
310
  body_parts.push_back(
279
- absl::StrFormat("%s=%s", "subject_token_type",
280
- UrlEncode(options_.subject_token_type).c_str()));
281
- body_parts.push_back(absl::StrFormat("%s=%s", "subject_token",
282
- UrlEncode(subject_token).c_str()));
311
+ absl::StrFormat("subject_token=%s", UrlEncode(subject_token).c_str()));
283
312
  std::string scope = GOOGLE_CLOUD_PLATFORM_DEFAULT_SCOPE;
284
313
  if (options_.service_account_impersonation_url.empty()) {
285
314
  scope = absl::StrJoin(scopes_, " ");
286
315
  }
287
- body_parts.push_back(
288
- absl::StrFormat("%s=%s", "scope", UrlEncode(scope).c_str()));
316
+ body_parts.push_back(absl::StrFormat("scope=%s", UrlEncode(scope).c_str()));
317
+ Json::Object addtional_options_json_object;
318
+ if (options_.client_id.empty() && options_.client_secret.empty()) {
319
+ addtional_options_json_object["userProject"] =
320
+ options_.workforce_pool_user_project;
321
+ }
322
+ Json addtional_options_json(std::move(addtional_options_json_object));
323
+ body_parts.push_back(absl::StrFormat(
324
+ "options=%s", UrlEncode(addtional_options_json.Dump()).c_str()));
289
325
  std::string body = absl::StrJoin(body_parts, "&");
290
326
  grpc_resource_quota* resource_quota =
291
327
  grpc_resource_quota_create("external_account_credentials");
@@ -372,7 +408,7 @@ void ExternalAccountCredentials::ImpersenateServiceAccount() {
372
408
  request.handshaker =
373
409
  uri->scheme() == "https" ? &grpc_httpcli_ssl : &grpc_httpcli_plaintext;
374
410
  std::string scope = absl::StrJoin(scopes_, " ");
375
- std::string body = absl::StrFormat("%s=%s", "scope", scope);
411
+ std::string body = absl::StrFormat("scope=%s", scope);
376
412
  grpc_resource_quota* resource_quota =
377
413
  grpc_resource_quota_create("external_account_credentials");
378
414
  grpc_http_response_destroy(&ctx_->response);
@@ -46,6 +46,7 @@ class ExternalAccountCredentials
46
46
  std::string quota_project_id;
47
47
  std::string client_id;
48
48
  std::string client_secret;
49
+ std::string workforce_pool_user_project;
49
50
  };
50
51
 
51
52
  static RefCountedPtr<ExternalAccountCredentials> Create(
@@ -290,7 +290,7 @@ static grpc_error_handle create_default_creds_from_path(
290
290
  if (json.type() != Json::Type::OBJECT) {
291
291
  error = grpc_error_set_str(
292
292
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to parse JSON"),
293
- GRPC_ERROR_STR_RAW_BYTES, grpc_slice_ref_internal(creds_data));
293
+ GRPC_ERROR_STR_RAW_BYTES, grpc_core::StringViewFromSlice(creds_data));
294
294
  goto end;
295
295
  }
296
296
 
@@ -134,7 +134,7 @@ static void jose_header_destroy(jose_header* h) {
134
134
  static jose_header* jose_header_from_json(Json json) {
135
135
  const char* alg_value;
136
136
  Json::Object::const_iterator it;
137
- jose_header* h = static_cast<jose_header*>(gpr_zalloc(sizeof(jose_header)));
137
+ jose_header* h = grpc_core::Zalloc<jose_header>();
138
138
  if (json.type() != Json::Type::OBJECT) {
139
139
  gpr_log(GPR_ERROR, "JSON value is not an object");
140
140
  goto error;
@@ -238,8 +238,7 @@ gpr_timespec grpc_jwt_claims_not_before(const grpc_jwt_claims* claims) {
238
238
  }
239
239
 
240
240
  grpc_jwt_claims* grpc_jwt_claims_from_json(Json json) {
241
- grpc_jwt_claims* claims =
242
- static_cast<grpc_jwt_claims*>(gpr_zalloc(sizeof(grpc_jwt_claims)));
241
+ grpc_jwt_claims* claims = grpc_core::Zalloc<grpc_jwt_claims>();
243
242
  claims->json.Init(std::move(json));
244
243
  claims->iat = gpr_inf_past(GPR_CLOCK_REALTIME);
245
244
  claims->nbf = gpr_inf_past(GPR_CLOCK_REALTIME);
@@ -356,8 +355,7 @@ static verifier_cb_ctx* verifier_cb_ctx_create(
356
355
  grpc_jwt_verification_done_cb cb) {
357
356
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
358
357
  grpc_core::ExecCtx exec_ctx;
359
- verifier_cb_ctx* ctx =
360
- static_cast<verifier_cb_ctx*>(gpr_zalloc(sizeof(verifier_cb_ctx)));
358
+ verifier_cb_ctx* ctx = new verifier_cb_ctx();
361
359
  ctx->verifier = verifier;
362
360
  ctx->pollent = grpc_polling_entity_create_from_pollset(pollset);
363
361
  ctx->header = header;
@@ -367,7 +365,6 @@ static verifier_cb_ctx* verifier_cb_ctx_create(
367
365
  ctx->signed_data = grpc_slice_from_copied_buffer(signed_jwt, signed_jwt_len);
368
366
  ctx->user_data = user_data;
369
367
  ctx->user_cb = cb;
370
-
371
368
  return ctx;
372
369
  }
373
370
 
@@ -381,7 +378,7 @@ void verifier_cb_ctx_destroy(verifier_cb_ctx* ctx) {
381
378
  grpc_http_response_destroy(&ctx->responses[i]);
382
379
  }
383
380
  /* TODO: see what to do with claims... */
384
- gpr_free(ctx);
381
+ delete ctx;
385
382
  }
386
383
 
387
384
  /* --- grpc_jwt_verifier object. --- */
@@ -890,8 +887,7 @@ error:
890
887
  grpc_jwt_verifier* grpc_jwt_verifier_create(
891
888
  const grpc_jwt_verifier_email_domain_key_url_mapping* mappings,
892
889
  size_t num_mappings) {
893
- grpc_jwt_verifier* v =
894
- static_cast<grpc_jwt_verifier*>(gpr_zalloc(sizeof(grpc_jwt_verifier)));
890
+ grpc_jwt_verifier* v = grpc_core::Zalloc<grpc_jwt_verifier>();
895
891
  grpc_httpcli_context_init(&v->http_ctx);
896
892
 
897
893
  /* We know at least of one mapping. */
@@ -29,6 +29,7 @@
29
29
  #include <grpc/support/log.h>
30
30
  #include <grpc/support/sync.h>
31
31
 
32
+ #include "src/core/lib/gprpp/memory.h"
32
33
  #include "src/core/lib/slice/slice_internal.h"
33
34
  #include "src/core/lib/slice/slice_string_helpers.h"
34
35
  #include "src/core/lib/surface/api_trace.h"
@@ -159,8 +160,7 @@ bool grpc_plugin_credentials::get_request_metadata(
159
160
  bool retval = true; // Synchronous return.
160
161
  if (plugin_.get_metadata != nullptr) {
161
162
  // Create pending_request object.
162
- pending_request* request =
163
- static_cast<pending_request*>(gpr_zalloc(sizeof(*request)));
163
+ pending_request* request = grpc_core::Zalloc<pending_request>();
164
164
  request->creds = this;
165
165
  request->md_array = md_array;
166
166
  request->on_request_metadata = on_request_metadata;
@@ -92,12 +92,12 @@ class grpc_fake_channel_security_connector final
92
92
  c = strcmp(target_, other->target_);
93
93
  if (c != 0) return c;
94
94
  if (expected_targets_ == nullptr || other->expected_targets_ == nullptr) {
95
- c = GPR_ICMP(expected_targets_, other->expected_targets_);
95
+ c = grpc_core::QsortCompare(expected_targets_, other->expected_targets_);
96
96
  } else {
97
97
  c = strcmp(expected_targets_, other->expected_targets_);
98
98
  }
99
99
  if (c != 0) return c;
100
- return GPR_ICMP(is_lb_channel_, other->is_lb_channel_);
100
+ return grpc_core::QsortCompare(is_lb_channel_, other->is_lb_channel_);
101
101
  }
102
102
 
103
103
  void add_handshakers(const grpc_channel_args* args,
@@ -60,7 +60,9 @@ grpc_channel_security_connector::~grpc_channel_security_connector() {}
60
60
 
61
61
  int grpc_security_connector_cmp(const grpc_security_connector* sc,
62
62
  const grpc_security_connector* other) {
63
- if (sc == nullptr || other == nullptr) return GPR_ICMP(sc, other);
63
+ if (sc == nullptr || other == nullptr) {
64
+ return grpc_core::QsortCompare(sc, other);
65
+ }
64
66
  return sc->cmp(other);
65
67
  }
66
68
 
@@ -70,9 +72,10 @@ int grpc_channel_security_connector::channel_security_connector_cmp(
70
72
  static_cast<const grpc_channel_security_connector*>(other);
71
73
  GPR_ASSERT(channel_creds() != nullptr);
72
74
  GPR_ASSERT(other_sc->channel_creds() != nullptr);
73
- int c = GPR_ICMP(channel_creds(), other_sc->channel_creds());
75
+ int c = grpc_core::QsortCompare(channel_creds(), other_sc->channel_creds());
74
76
  if (c != 0) return c;
75
- return GPR_ICMP(request_metadata_creds(), other_sc->request_metadata_creds());
77
+ return grpc_core::QsortCompare(request_metadata_creds(),
78
+ other_sc->request_metadata_creds());
76
79
  }
77
80
 
78
81
  int grpc_server_security_connector::server_security_connector_cmp(
@@ -81,15 +84,17 @@ int grpc_server_security_connector::server_security_connector_cmp(
81
84
  static_cast<const grpc_server_security_connector*>(other);
82
85
  GPR_ASSERT(server_creds() != nullptr);
83
86
  GPR_ASSERT(other_sc->server_creds() != nullptr);
84
- return GPR_ICMP(server_creds(), other_sc->server_creds());
87
+ return grpc_core::QsortCompare(server_creds(), other_sc->server_creds());
85
88
  }
86
89
 
87
90
  static void connector_arg_destroy(void* p) {
91
+ if (p == nullptr) return;
88
92
  static_cast<grpc_security_connector*>(p)->Unref(DEBUG_LOCATION,
89
93
  "connector_arg_destroy");
90
94
  }
91
95
 
92
96
  static void* connector_arg_copy(void* p) {
97
+ if (p == nullptr) return nullptr;
93
98
  return static_cast<grpc_security_connector*>(p)
94
99
  ->Ref(DEBUG_LOCATION, "connector_arg_copy")
95
100
  .release();