grpc 1.41.1 → 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 (416) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +55 -43
  3. data/include/grpc/event_engine/event_engine.h +82 -42
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  5. data/include/grpc/event_engine/memory_allocator.h +210 -0
  6. data/include/grpc/grpc.h +4 -0
  7. data/include/grpc/grpc_security.h +18 -0
  8. data/include/grpc/grpc_security_constants.h +1 -0
  9. data/include/grpc/impl/codegen/port_platform.h +7 -0
  10. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  11. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  12. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  13. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  14. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  15. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  17. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  18. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  20. data/src/core/ext/filters/client_channel/connector.h +18 -18
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  42. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  44. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  49. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  52. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  59. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  60. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  62. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  63. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  66. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  67. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  68. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  69. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  74. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  75. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  76. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  77. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  78. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  79. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  80. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  81. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  82. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  84. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  85. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  87. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  88. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  89. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  90. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  91. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  92. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  93. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  94. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  96. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  98. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  99. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  103. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  107. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  109. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  110. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  112. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  121. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  123. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  125. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  127. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  128. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  130. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  131. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  138. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  139. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  140. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  142. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  146. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  147. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  148. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  153. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  155. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  161. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  163. data/src/core/ext/xds/xds_api.cc +325 -362
  164. data/src/core/ext/xds/xds_api.h +134 -82
  165. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  166. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  167. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  168. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  169. data/src/core/ext/xds/xds_client.cc +527 -314
  170. data/src/core/ext/xds/xds_client.h +42 -37
  171. data/src/core/ext/xds/xds_client_stats.h +1 -1
  172. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  173. data/src/core/lib/address_utils/parse_address.cc +2 -0
  174. data/src/core/lib/avl/avl.cc +5 -5
  175. data/src/core/lib/backoff/backoff.cc +1 -1
  176. data/src/core/lib/channel/channel_args.cc +24 -6
  177. data/src/core/lib/channel/channel_args.h +9 -0
  178. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  179. data/src/core/lib/channel/channel_trace.cc +1 -1
  180. data/src/core/lib/channel/channel_trace.h +1 -1
  181. data/src/core/lib/channel/channelz.cc +3 -3
  182. data/src/core/lib/channel/channelz.h +2 -2
  183. data/src/core/lib/channel/channelz_registry.cc +1 -1
  184. data/src/core/lib/channel/channelz_registry.h +1 -1
  185. data/src/core/lib/channel/connected_channel.cc +1 -3
  186. data/src/core/lib/channel/connected_channel.h +1 -2
  187. data/src/core/lib/compression/compression.cc +2 -2
  188. data/src/core/lib/compression/compression_args.cc +6 -4
  189. data/src/core/lib/compression/compression_internal.cc +2 -2
  190. data/src/core/lib/compression/compression_internal.h +1 -1
  191. data/src/core/lib/config/core_configuration.cc +44 -2
  192. data/src/core/lib/config/core_configuration.h +39 -1
  193. data/src/core/lib/debug/stats.cc +1 -1
  194. data/src/core/lib/debug/stats_data.cc +13 -13
  195. data/src/core/lib/gpr/atm.cc +1 -1
  196. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  197. data/src/core/lib/gpr/string.cc +2 -2
  198. data/src/core/lib/gpr/tls.h +1 -1
  199. data/src/core/lib/gpr/useful.h +79 -32
  200. data/src/core/lib/gprpp/arena.h +10 -0
  201. data/src/core/lib/gprpp/bitset.h +38 -16
  202. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  203. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  204. data/src/core/lib/gprpp/match.h +1 -1
  205. data/src/core/lib/gprpp/memory.h +6 -0
  206. data/src/core/lib/gprpp/overload.h +1 -1
  207. data/src/core/lib/gprpp/status_helper.cc +23 -3
  208. data/src/core/lib/gprpp/status_helper.h +12 -1
  209. data/src/core/lib/gprpp/table.h +411 -0
  210. data/src/core/lib/http/httpcli.cc +200 -182
  211. data/src/core/lib/http/parser.cc +2 -2
  212. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  213. data/src/core/lib/iomgr/combiner.cc +6 -21
  214. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  215. data/src/core/lib/iomgr/error.cc +113 -52
  216. data/src/core/lib/iomgr/error.h +50 -9
  217. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  218. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  219. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  220. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  221. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  222. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  223. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  224. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  225. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  226. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  227. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  228. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  229. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  230. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  231. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  232. data/src/core/lib/iomgr/executor.cc +6 -20
  233. data/src/core/lib/iomgr/iomgr.cc +3 -1
  234. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  235. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  236. data/src/core/lib/iomgr/load_file.cc +2 -2
  237. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  238. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  239. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  240. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  241. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  242. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  243. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  244. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  246. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  247. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  250. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  251. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  252. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  253. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  254. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  255. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  256. data/src/core/lib/json/json_util.cc +68 -0
  257. data/src/core/lib/json/json_util.h +57 -99
  258. data/src/core/lib/json/json_writer.cc +0 -3
  259. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  260. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  261. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  262. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  263. data/src/core/lib/security/context/security_context.cc +4 -2
  264. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  265. data/src/core/lib/security/credentials/credentials.cc +4 -2
  266. data/src/core/lib/security/credentials/credentials.h +6 -1
  267. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  268. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  269. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  270. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  271. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  272. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  273. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  274. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  275. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  276. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  278. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  279. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  280. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  281. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  282. data/src/core/lib/slice/slice.cc +0 -16
  283. data/src/core/lib/slice/slice_api.cc +39 -0
  284. data/src/core/lib/slice/slice_buffer.cc +5 -5
  285. data/src/core/lib/slice/slice_intern.cc +8 -13
  286. data/src/core/lib/slice/slice_internal.h +1 -244
  287. data/src/core/lib/slice/slice_refcount.cc +17 -0
  288. data/src/core/lib/slice/slice_refcount.h +121 -0
  289. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  290. data/src/core/lib/slice/slice_split.cc +100 -0
  291. data/src/core/lib/slice/slice_split.h +40 -0
  292. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  293. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  294. data/src/core/lib/slice/static_slice.cc +529 -0
  295. data/src/core/lib/slice/static_slice.h +331 -0
  296. data/src/core/lib/surface/builtins.cc +49 -0
  297. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  298. data/src/core/lib/surface/call.cc +103 -120
  299. data/src/core/lib/surface/call.h +0 -6
  300. data/src/core/lib/surface/channel.cc +19 -32
  301. data/src/core/lib/surface/channel.h +0 -9
  302. data/src/core/lib/surface/channel_init.cc +23 -76
  303. data/src/core/lib/surface/channel_init.h +52 -44
  304. data/src/core/lib/surface/completion_queue.cc +6 -5
  305. data/src/core/lib/surface/init.cc +0 -39
  306. data/src/core/lib/surface/init_secure.cc +17 -14
  307. data/src/core/lib/surface/lame_client.cc +18 -11
  308. data/src/core/lib/surface/lame_client.h +1 -1
  309. data/src/core/lib/surface/server.cc +25 -17
  310. data/src/core/lib/surface/server.h +17 -10
  311. data/src/core/lib/surface/validate_metadata.cc +5 -2
  312. data/src/core/lib/surface/version.cc +2 -2
  313. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  314. data/src/core/lib/transport/error_utils.cc +42 -17
  315. data/src/core/lib/transport/error_utils.h +1 -1
  316. data/src/core/lib/transport/metadata.cc +31 -10
  317. data/src/core/lib/transport/metadata.h +2 -1
  318. data/src/core/lib/transport/metadata_batch.cc +35 -371
  319. data/src/core/lib/transport/metadata_batch.h +905 -71
  320. data/src/core/lib/transport/parsed_metadata.h +263 -0
  321. data/src/core/lib/transport/pid_controller.cc +4 -4
  322. data/src/core/lib/transport/static_metadata.cc +714 -846
  323. data/src/core/lib/transport/static_metadata.h +115 -379
  324. data/src/core/lib/transport/status_metadata.cc +1 -0
  325. data/src/core/lib/transport/transport.cc +4 -5
  326. data/src/core/lib/transport/transport_op_string.cc +40 -20
  327. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  328. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  329. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  330. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  331. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  332. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  333. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  335. data/src/core/tsi/fake_transport_security.cc +15 -7
  336. data/src/core/tsi/local_transport_security.cc +36 -73
  337. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  339. data/src/core/tsi/ssl_transport_security.cc +10 -2
  340. data/src/core/tsi/transport_security.cc +12 -0
  341. data/src/core/tsi/transport_security.h +16 -1
  342. data/src/core/tsi/transport_security_interface.h +26 -0
  343. data/src/ruby/ext/grpc/extconf.rb +12 -9
  344. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  346. data/src/ruby/lib/grpc/version.rb +1 -1
  347. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  348. data/src/ruby/spec/client_server_spec.rb +1 -1
  349. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  351. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  352. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
  353. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
  355. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  356. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  358. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  359. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  360. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  361. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
  362. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  363. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  364. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  365. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  366. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  368. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
  369. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
  370. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  371. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
  372. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
  373. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
  374. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  375. data/third_party/re2/re2/compile.cc +91 -109
  376. data/third_party/re2/re2/dfa.cc +27 -39
  377. data/third_party/re2/re2/filtered_re2.cc +18 -2
  378. data/third_party/re2/re2/filtered_re2.h +10 -5
  379. data/third_party/re2/re2/nfa.cc +1 -1
  380. data/third_party/re2/re2/parse.cc +42 -23
  381. data/third_party/re2/re2/perl_groups.cc +34 -34
  382. data/third_party/re2/re2/prefilter.cc +3 -2
  383. data/third_party/re2/re2/prog.cc +182 -4
  384. data/third_party/re2/re2/prog.h +28 -9
  385. data/third_party/re2/re2/re2.cc +87 -118
  386. data/third_party/re2/re2/re2.h +156 -141
  387. data/third_party/re2/re2/regexp.cc +12 -5
  388. data/third_party/re2/re2/regexp.h +8 -2
  389. data/third_party/re2/re2/set.cc +31 -9
  390. data/third_party/re2/re2/set.h +9 -4
  391. data/third_party/re2/re2/simplify.cc +11 -3
  392. data/third_party/re2/re2/tostring.cc +1 -1
  393. data/third_party/re2/re2/walker-inl.h +1 -1
  394. data/third_party/re2/util/mutex.h +2 -2
  395. data/third_party/re2/util/pcre.h +3 -3
  396. metadata +78 -66
  397. data/include/grpc/event_engine/slice_allocator.h +0 -71
  398. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  399. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  400. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  401. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  402. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  403. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  404. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  405. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  406. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  407. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  408. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  409. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  410. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  411. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  412. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  413. data/src/core/lib/iomgr/udp_server.cc +0 -747
  414. data/src/core/lib/iomgr/udp_server.h +0 -103
  415. data/src/core/lib/transport/authority_override.cc +0 -40
  416. data/src/core/lib/transport/authority_override.h +0 -37
@@ -24,7 +24,6 @@
24
24
  #include <string.h>
25
25
 
26
26
  #include "absl/container/inlined_vector.h"
27
- #include "absl/strings/str_join.h"
28
27
 
29
28
  #include <grpc/support/alloc.h>
30
29
  #include <grpc/support/log.h>
@@ -33,264 +32,6 @@
33
32
  #include "src/core/lib/slice/slice_internal.h"
34
33
  #include "src/core/lib/slice/slice_string_helpers.h"
35
34
 
36
- static void assert_valid_list(grpc_mdelem_list* list) {
37
- #ifndef NDEBUG
38
- grpc_linked_mdelem* l;
39
-
40
- GPR_ASSERT((list->head == nullptr) == (list->tail == nullptr));
41
- if (!list->head) return;
42
- GPR_ASSERT(list->head->prev == nullptr);
43
- GPR_ASSERT(list->tail->next == nullptr);
44
- GPR_ASSERT((list->head == list->tail) == (list->head->next == nullptr));
45
-
46
- size_t verified_count = 0;
47
- for (l = list->head; l; l = l->next) {
48
- GPR_ASSERT(!GRPC_MDISNULL(l->md));
49
- GPR_ASSERT((l->prev == nullptr) == (l == list->head));
50
- GPR_ASSERT((l->next == nullptr) == (l == list->tail));
51
- if (l->next) GPR_ASSERT(l->next->prev == l);
52
- if (l->prev) GPR_ASSERT(l->prev->next == l);
53
- verified_count++;
54
- }
55
- GPR_ASSERT(list->count == verified_count);
56
- #else
57
- // Avoid unused-parameter warning for debug-only parameter
58
- (void)list;
59
- #endif /* NDEBUG */
60
- }
61
-
62
- static void assert_valid_callouts(grpc_metadata_batch* batch) {
63
- #ifndef NDEBUG
64
- for (grpc_linked_mdelem* l = batch->list.head; l != nullptr; l = l->next) {
65
- grpc_slice key_interned = grpc_slice_intern(GRPC_MDKEY(l->md));
66
- grpc_metadata_batch_callouts_index callout_idx =
67
- GRPC_BATCH_INDEX_OF(key_interned);
68
- if (callout_idx != GRPC_BATCH_CALLOUTS_COUNT) {
69
- GPR_ASSERT(batch->idx.array[callout_idx] == l);
70
- }
71
- grpc_slice_unref_internal(key_interned);
72
- }
73
- #else
74
- // Avoid unused-parameter warning for debug-only parameter
75
- (void)batch;
76
- #endif
77
- }
78
-
79
- #ifndef NDEBUG
80
- void grpc_metadata_batch_assert_ok(grpc_metadata_batch* batch) {
81
- assert_valid_list(&batch->list);
82
- }
83
- #endif /* NDEBUG */
84
-
85
- void grpc_metadata_batch_init(grpc_metadata_batch* batch) {
86
- memset(batch, 0, sizeof(*batch));
87
- batch->deadline = GRPC_MILLIS_INF_FUTURE;
88
- }
89
-
90
- void grpc_metadata_batch_destroy(grpc_metadata_batch* batch) {
91
- grpc_linked_mdelem* l;
92
- for (l = batch->list.head; l; l = l->next) {
93
- GRPC_MDELEM_UNREF(l->md);
94
- }
95
- }
96
-
97
- grpc_error_handle grpc_attach_md_to_error(grpc_error_handle src,
98
- grpc_mdelem md) {
99
- grpc_error_handle out = grpc_error_set_str(
100
- grpc_error_set_str(src, GRPC_ERROR_STR_KEY,
101
- grpc_slice_ref_internal(GRPC_MDKEY(md))),
102
- GRPC_ERROR_STR_VALUE, grpc_slice_ref_internal(GRPC_MDVALUE(md)));
103
- return out;
104
- }
105
-
106
- static grpc_error_handle GPR_ATTRIBUTE_NOINLINE error_with_md(grpc_mdelem md) {
107
- return grpc_attach_md_to_error(
108
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unallowed duplicate metadata"), md);
109
- }
110
-
111
- static grpc_error_handle link_callout(grpc_metadata_batch* batch,
112
- grpc_linked_mdelem* storage,
113
- grpc_metadata_batch_callouts_index idx) {
114
- GPR_DEBUG_ASSERT(idx >= 0 && idx < GRPC_BATCH_CALLOUTS_COUNT);
115
- if (GPR_LIKELY(batch->idx.array[idx] == nullptr)) {
116
- ++batch->list.default_count;
117
- batch->idx.array[idx] = storage;
118
- return GRPC_ERROR_NONE;
119
- }
120
- return error_with_md(storage->md);
121
- }
122
-
123
- static grpc_error_handle maybe_link_callout(grpc_metadata_batch* batch,
124
- grpc_linked_mdelem* storage)
125
- GRPC_MUST_USE_RESULT;
126
-
127
- static grpc_error_handle maybe_link_callout(grpc_metadata_batch* batch,
128
- grpc_linked_mdelem* storage) {
129
- grpc_metadata_batch_callouts_index idx =
130
- GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md));
131
- if (idx == GRPC_BATCH_CALLOUTS_COUNT) {
132
- return GRPC_ERROR_NONE;
133
- }
134
- return link_callout(batch, storage, idx);
135
- }
136
-
137
- static void maybe_unlink_callout(grpc_metadata_batch* batch,
138
- grpc_linked_mdelem* storage) {
139
- grpc_metadata_batch_callouts_index idx =
140
- GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md));
141
- if (idx == GRPC_BATCH_CALLOUTS_COUNT) {
142
- return;
143
- }
144
- --batch->list.default_count;
145
- GPR_DEBUG_ASSERT(batch->idx.array[idx] != nullptr);
146
- batch->idx.array[idx] = nullptr;
147
- }
148
-
149
- grpc_error_handle grpc_metadata_batch_add_head(grpc_metadata_batch* batch,
150
- grpc_linked_mdelem* storage,
151
- grpc_mdelem elem_to_add) {
152
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
153
- storage->md = elem_to_add;
154
- return grpc_metadata_batch_link_head(batch, storage);
155
- }
156
-
157
- static void link_head(grpc_mdelem_list* list, grpc_linked_mdelem* storage) {
158
- assert_valid_list(list);
159
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(storage->md));
160
- storage->prev = nullptr;
161
- storage->next = list->head;
162
- storage->reserved = nullptr;
163
- if (list->head != nullptr) {
164
- list->head->prev = storage;
165
- } else {
166
- list->tail = storage;
167
- }
168
- list->head = storage;
169
- list->count++;
170
- assert_valid_list(list);
171
- }
172
-
173
- grpc_error_handle grpc_metadata_batch_link_head(grpc_metadata_batch* batch,
174
- grpc_linked_mdelem* storage) {
175
- assert_valid_callouts(batch);
176
- grpc_error_handle err = maybe_link_callout(batch, storage);
177
- if (err != GRPC_ERROR_NONE) {
178
- assert_valid_callouts(batch);
179
- return err;
180
- }
181
- link_head(&batch->list, storage);
182
- assert_valid_callouts(batch);
183
- return GRPC_ERROR_NONE;
184
- }
185
-
186
- // TODO(arjunroy): Need to revisit this and see what guarantees exist between
187
- // C-core and the internal-metadata subsystem. E.g. can we ensure a particular
188
- // metadata is never added twice, even in the presence of user supplied data?
189
- grpc_error_handle grpc_metadata_batch_link_head(
190
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
191
- grpc_metadata_batch_callouts_index idx) {
192
- GPR_DEBUG_ASSERT(GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md)) == idx);
193
- assert_valid_callouts(batch);
194
- grpc_error_handle err = link_callout(batch, storage, idx);
195
- if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
196
- assert_valid_callouts(batch);
197
- return err;
198
- }
199
- link_head(&batch->list, storage);
200
- assert_valid_callouts(batch);
201
- return GRPC_ERROR_NONE;
202
- }
203
-
204
- grpc_error_handle grpc_metadata_batch_add_tail(grpc_metadata_batch* batch,
205
- grpc_linked_mdelem* storage,
206
- grpc_mdelem elem_to_add) {
207
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
208
- storage->md = elem_to_add;
209
- return grpc_metadata_batch_link_tail(batch, storage);
210
- }
211
-
212
- static void link_tail(grpc_mdelem_list* list, grpc_linked_mdelem* storage) {
213
- assert_valid_list(list);
214
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(storage->md));
215
- storage->prev = list->tail;
216
- storage->next = nullptr;
217
- storage->reserved = nullptr;
218
- if (list->tail != nullptr) {
219
- list->tail->next = storage;
220
- } else {
221
- list->head = storage;
222
- }
223
- list->tail = storage;
224
- list->count++;
225
- assert_valid_list(list);
226
- }
227
-
228
- grpc_error_handle grpc_metadata_batch_link_tail(grpc_metadata_batch* batch,
229
- grpc_linked_mdelem* storage) {
230
- assert_valid_callouts(batch);
231
- grpc_error_handle err = maybe_link_callout(batch, storage);
232
- if (err != GRPC_ERROR_NONE) {
233
- assert_valid_callouts(batch);
234
- return err;
235
- }
236
- link_tail(&batch->list, storage);
237
- assert_valid_callouts(batch);
238
- return GRPC_ERROR_NONE;
239
- }
240
-
241
- grpc_error_handle grpc_metadata_batch_link_tail(
242
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
243
- grpc_metadata_batch_callouts_index idx) {
244
- GPR_DEBUG_ASSERT(GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md)) == idx);
245
- assert_valid_callouts(batch);
246
- grpc_error_handle err = link_callout(batch, storage, idx);
247
- if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
248
- assert_valid_callouts(batch);
249
- return err;
250
- }
251
- link_tail(&batch->list, storage);
252
- assert_valid_callouts(batch);
253
- return GRPC_ERROR_NONE;
254
- }
255
-
256
- static void unlink_storage(grpc_mdelem_list* list,
257
- grpc_linked_mdelem* storage) {
258
- assert_valid_list(list);
259
- if (storage->prev != nullptr) {
260
- storage->prev->next = storage->next;
261
- } else {
262
- list->head = storage->next;
263
- }
264
- if (storage->next != nullptr) {
265
- storage->next->prev = storage->prev;
266
- } else {
267
- list->tail = storage->prev;
268
- }
269
- list->count--;
270
- assert_valid_list(list);
271
- }
272
-
273
- void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
274
- grpc_linked_mdelem* storage) {
275
- assert_valid_callouts(batch);
276
- maybe_unlink_callout(batch, storage);
277
- unlink_storage(&batch->list, storage);
278
- GRPC_MDELEM_UNREF(storage->md);
279
- assert_valid_callouts(batch);
280
- }
281
-
282
- void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
283
- grpc_metadata_batch_callouts_index idx) {
284
- assert_valid_callouts(batch);
285
- grpc_linked_mdelem* storage = batch->idx.array[idx];
286
- GPR_DEBUG_ASSERT(storage != nullptr);
287
- --batch->list.default_count;
288
- batch->idx.array[idx] = nullptr;
289
- unlink_storage(&batch->list, storage);
290
- GRPC_MDELEM_UNREF(storage->md);
291
- assert_valid_callouts(batch);
292
- }
293
-
294
35
  void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
295
36
  const grpc_slice& value) {
296
37
  grpc_mdelem old_mdelem = storage->md;
@@ -300,131 +41,54 @@ void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
300
41
  GRPC_MDELEM_UNREF(old_mdelem);
301
42
  }
302
43
 
303
- absl::optional<absl::string_view> grpc_metadata_batch_get_value(
304
- grpc_metadata_batch* batch, absl::string_view target_key,
305
- std::string* concatenated_value) {
306
- // Find all values for the specified key.
307
- GPR_DEBUG_ASSERT(batch != nullptr);
308
- absl::InlinedVector<absl::string_view, 1> values;
309
- for (grpc_linked_mdelem* md = batch->list.head; md != nullptr;
310
- md = md->next) {
311
- absl::string_view key = grpc_core::StringViewFromSlice(GRPC_MDKEY(md->md));
312
- absl::string_view value =
313
- grpc_core::StringViewFromSlice(GRPC_MDVALUE(md->md));
314
- if (target_key == key) values.push_back(value);
315
- }
316
- // If none found, no match.
317
- if (values.empty()) return absl::nullopt;
318
- // If exactly one found, return it as-is.
319
- if (values.size() == 1) return values.front();
320
- // If more than one found, concatenate the values, using
321
- // *concatenated_values as a temporary holding place for the
322
- // concatenated string.
323
- *concatenated_value = absl::StrJoin(values, ",");
324
- return *concatenated_value;
325
- }
326
-
327
- grpc_error_handle grpc_metadata_batch_substitute(grpc_metadata_batch* batch,
328
- grpc_linked_mdelem* storage,
329
- grpc_mdelem new_mdelem) {
330
- assert_valid_callouts(batch);
331
- grpc_error_handle error = GRPC_ERROR_NONE;
332
- grpc_mdelem old_mdelem = storage->md;
333
- if (!grpc_slice_eq(GRPC_MDKEY(new_mdelem), GRPC_MDKEY(old_mdelem))) {
334
- maybe_unlink_callout(batch, storage);
335
- storage->md = new_mdelem;
336
- error = maybe_link_callout(batch, storage);
337
- if (error != GRPC_ERROR_NONE) {
338
- unlink_storage(&batch->list, storage);
339
- GRPC_MDELEM_UNREF(storage->md);
340
- }
341
- } else {
342
- storage->md = new_mdelem;
343
- }
344
- GRPC_MDELEM_UNREF(old_mdelem);
345
- assert_valid_callouts(batch);
346
- return error;
347
- }
44
+ namespace {
348
45
 
349
- void grpc_metadata_batch_clear(grpc_metadata_batch* batch) {
350
- grpc_metadata_batch_destroy(batch);
351
- grpc_metadata_batch_init(batch);
352
- }
46
+ class CopySink {
47
+ public:
48
+ explicit CopySink(grpc_metadata_batch* dst) : dst_(dst) {}
353
49
 
354
- bool grpc_metadata_batch_is_empty(grpc_metadata_batch* batch) {
355
- return batch->list.head == nullptr &&
356
- batch->deadline == GRPC_MILLIS_INF_FUTURE;
357
- }
358
-
359
- size_t grpc_metadata_batch_size(grpc_metadata_batch* batch) {
360
- size_t size = 0;
361
- for (grpc_linked_mdelem* elem = batch->list.head; elem != nullptr;
362
- elem = elem->next) {
363
- size += GRPC_MDELEM_LENGTH(elem->md);
364
- }
365
- return size;
366
- }
367
-
368
- static void add_error(grpc_error_handle* composite, grpc_error_handle error,
369
- const char* composite_error_string) {
370
- if (error == GRPC_ERROR_NONE) return;
371
- if (*composite == GRPC_ERROR_NONE) {
372
- *composite = GRPC_ERROR_CREATE_FROM_COPIED_STRING(composite_error_string);
373
- }
374
- *composite = grpc_error_add_child(*composite, error);
375
- }
376
-
377
- grpc_error_handle grpc_metadata_batch_filter(
378
- grpc_metadata_batch* batch, grpc_metadata_batch_filter_func func,
379
- void* user_data, const char* composite_error_string) {
380
- grpc_linked_mdelem* l = batch->list.head;
381
- grpc_error_handle error = GRPC_ERROR_NONE;
382
- while (l) {
383
- grpc_linked_mdelem* next = l->next;
384
- grpc_filtered_mdelem new_mdelem = func(user_data, l->md);
385
- add_error(&error, new_mdelem.error, composite_error_string);
386
- if (GRPC_MDISNULL(new_mdelem.md)) {
387
- grpc_metadata_batch_remove(batch, l);
388
- } else if (new_mdelem.md.payload != l->md.payload) {
389
- grpc_metadata_batch_substitute(batch, l, new_mdelem.md);
390
- }
391
- l = next;
392
- }
393
- return error;
394
- }
395
-
396
- void grpc_metadata_batch_copy(grpc_metadata_batch* src,
397
- grpc_metadata_batch* dst,
398
- grpc_linked_mdelem* storage) {
399
- grpc_metadata_batch_init(dst);
400
- dst->deadline = src->deadline;
401
- size_t i = 0;
402
- for (grpc_linked_mdelem* elem = src->list.head; elem != nullptr;
403
- elem = elem->next) {
50
+ void Encode(grpc_mdelem md) {
404
51
  // If the mdelem is not external, take a ref.
405
52
  // Otherwise, create a new copy, holding its own refs to the
406
53
  // underlying slices.
407
- grpc_mdelem md;
408
- if (GRPC_MDELEM_STORAGE(elem->md) != GRPC_MDELEM_STORAGE_EXTERNAL) {
409
- md = GRPC_MDELEM_REF(elem->md);
54
+ if (GRPC_MDELEM_STORAGE(md) != GRPC_MDELEM_STORAGE_EXTERNAL) {
55
+ md = GRPC_MDELEM_REF(md);
410
56
  } else {
411
- md = grpc_mdelem_from_slices(
412
- grpc_slice_ref_internal(GRPC_MDKEY(elem->md)),
413
- grpc_slice_ref_internal(GRPC_MDVALUE(elem->md)));
57
+ md = grpc_mdelem_from_slices(grpc_slice_copy(GRPC_MDKEY(md)),
58
+ grpc_slice_copy(GRPC_MDVALUE(md)));
414
59
  }
415
60
  // Error unused in non-debug builds.
416
- grpc_error_handle GRPC_UNUSED error =
417
- grpc_metadata_batch_add_tail(dst, &storage[i++], md);
418
- // The only way that grpc_metadata_batch_add_tail() can fail is if
61
+ grpc_error_handle GRPC_UNUSED error = dst_->Append(md);
62
+ // The only way that Append() can fail is if
419
63
  // there's a duplicate entry for a callout. However, that can't be
420
64
  // the case here, because we would not have been allowed to create
421
65
  // a source batch that had that kind of conflict.
422
66
  GPR_DEBUG_ASSERT(error == GRPC_ERROR_NONE);
423
67
  }
424
- }
425
68
 
426
- void grpc_metadata_batch_move(grpc_metadata_batch* src,
69
+ template <class T, class V>
70
+ void Encode(T trait, V value) {
71
+ dst_->Set(trait, value);
72
+ }
73
+
74
+ private:
75
+ grpc_metadata_batch* dst_;
76
+ };
77
+
78
+ } // namespace
79
+
80
+ void grpc_metadata_batch_copy(const grpc_metadata_batch* src,
427
81
  grpc_metadata_batch* dst) {
428
- *dst = *src;
429
- grpc_metadata_batch_init(src);
82
+ dst->Clear();
83
+ CopySink sink(dst);
84
+ src->Encode(&sink);
85
+ }
86
+
87
+ grpc_error_handle grpc_attach_md_to_error(grpc_error_handle src,
88
+ grpc_mdelem md) {
89
+ grpc_error_handle out = grpc_error_set_str(
90
+ grpc_error_set_str(src, GRPC_ERROR_STR_KEY,
91
+ grpc_core::StringViewFromSlice(GRPC_MDKEY(md))),
92
+ GRPC_ERROR_STR_VALUE, grpc_core::StringViewFromSlice(GRPC_MDVALUE(md)));
93
+ return out;
430
94
  }