grpc 1.41.0.pre2 → 1.42.0

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 +81 -68
  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
@@ -42,7 +42,7 @@ typedef enum { GRPC_SECURITY_OK = 0, GRPC_SECURITY_ERROR } grpc_security_status;
42
42
  A security connector object represents away to configure the underlying
43
43
  transport security mechanism and check the resulting trusted peer. */
44
44
 
45
- #define GRPC_ARG_SECURITY_CONNECTOR "grpc.security_connector"
45
+ #define GRPC_ARG_SECURITY_CONNECTOR "grpc.internal.security_connector"
46
46
 
47
47
  class grpc_security_connector
48
48
  : public grpc_core::RefCounted<grpc_security_connector> {
@@ -523,7 +523,7 @@ static void grpc_ssl_session_cache_arg_destroy(void* p) {
523
523
  }
524
524
 
525
525
  static int grpc_ssl_session_cache_arg_cmp(void* p, void* q) {
526
- return GPR_ICMP(p, q);
526
+ return grpc_core::QsortCompare(p, q);
527
527
  }
528
528
 
529
529
  grpc_arg grpc_ssl_session_cache_create_channel_arg(
@@ -27,6 +27,7 @@
27
27
  #include "absl/strings/string_view.h"
28
28
 
29
29
  #include <grpc/grpc.h>
30
+ #include <grpc/grpc_security_constants.h>
30
31
  #include <grpc/support/alloc.h>
31
32
  #include <grpc/support/log.h>
32
33
  #include <grpc/support/string_util.h>
@@ -26,8 +26,6 @@
26
26
  #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
27
27
  #include "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h"
28
28
 
29
- #define GRPC_TLS_TRANSPORT_SECURITY_TYPE "tls"
30
-
31
29
  namespace grpc_core {
32
30
 
33
31
  // Channel security connector using TLS as transport security protocol.
@@ -372,13 +372,13 @@ static void client_auth_start_transport_stream_op_batch(
372
372
  if (batch->send_initial_metadata) {
373
373
  grpc_metadata_batch* metadata =
374
374
  batch->payload->send_initial_metadata.send_initial_metadata;
375
- if (metadata->idx.named.path != nullptr) {
376
- calld->method =
377
- grpc_slice_ref_internal(GRPC_MDVALUE(metadata->idx.named.path->md));
375
+ if (metadata->legacy_index()->named.path != nullptr) {
376
+ calld->method = grpc_slice_ref_internal(
377
+ GRPC_MDVALUE(metadata->legacy_index()->named.path->md));
378
378
  }
379
- if (metadata->idx.named.authority != nullptr) {
379
+ if (metadata->legacy_index()->named.authority != nullptr) {
380
380
  calld->host = grpc_slice_ref_internal(
381
- GRPC_MDVALUE(metadata->idx.named.authority->md));
381
+ GRPC_MDVALUE(metadata->legacy_index()->named.authority->md));
382
382
  batch->handler_private.extra_arg = elem;
383
383
  GRPC_CALL_STACK_REF(calld->owning_call, "check_call_host");
384
384
  GRPC_CLOSURE_INIT(&calld->async_result_closure, on_host_checked, batch,
@@ -116,13 +116,10 @@ SecurityHandshaker::SecurityHandshaker(tsi_handshaker* handshaker,
116
116
  connector_(connector->Ref(DEBUG_LOCATION, "handshake")),
117
117
  handshake_buffer_size_(GRPC_INITIAL_HANDSHAKE_BUFFER_SIZE),
118
118
  handshake_buffer_(
119
- static_cast<uint8_t*>(gpr_malloc(handshake_buffer_size_))) {
120
- const grpc_arg* arg =
121
- grpc_channel_args_find(args, GRPC_ARG_TSI_MAX_FRAME_SIZE);
122
- if (arg != nullptr && arg->type == GRPC_ARG_INTEGER) {
123
- max_frame_size_ = grpc_channel_arg_get_integer(
124
- arg, {0, 0, std::numeric_limits<int>::max()});
125
- }
119
+ static_cast<uint8_t*>(gpr_malloc(handshake_buffer_size_))),
120
+ max_frame_size_(grpc_channel_args_find_integer(
121
+ args, GRPC_ARG_TSI_MAX_FRAME_SIZE,
122
+ {0, 0, std::numeric_limits<int>::max()})) {
126
123
  grpc_slice_buffer_init(&outgoing_);
127
124
  GRPC_CLOSURE_INIT(&on_peer_checked_, &SecurityHandshaker::OnPeerCheckedFn,
128
125
  this, grpc_schedule_on_exec_ctx);
@@ -232,49 +229,83 @@ void SecurityHandshaker::OnPeerCheckedInner(grpc_error_handle error) {
232
229
  HandshakeFailedLocked(error);
233
230
  return;
234
231
  }
235
- // Create zero-copy frame protector, if implemented.
236
- tsi_zero_copy_grpc_protector* zero_copy_protector = nullptr;
237
- tsi_result result = tsi_handshaker_result_create_zero_copy_grpc_protector(
238
- handshaker_result_, max_frame_size_ == 0 ? nullptr : &max_frame_size_,
239
- &zero_copy_protector);
240
- if (result != TSI_OK && result != TSI_UNIMPLEMENTED) {
241
- error = grpc_set_tsi_error_result(
232
+ // Get unused bytes.
233
+ const unsigned char* unused_bytes = nullptr;
234
+ size_t unused_bytes_size = 0;
235
+ tsi_result result = tsi_handshaker_result_get_unused_bytes(
236
+ handshaker_result_, &unused_bytes, &unused_bytes_size);
237
+ if (result != TSI_OK) {
238
+ HandshakeFailedLocked(grpc_set_tsi_error_result(
242
239
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
243
- "Zero-copy frame protector creation failed"),
244
- result);
245
- HandshakeFailedLocked(error);
240
+ "TSI handshaker result does not provide unused bytes"),
241
+ result));
242
+ return;
243
+ }
244
+ // Check whether we need to wrap the endpoint.
245
+ tsi_frame_protector_type frame_protector_type;
246
+ result = tsi_handshaker_result_get_frame_protector_type(
247
+ handshaker_result_, &frame_protector_type);
248
+ if (result != TSI_OK) {
249
+ HandshakeFailedLocked(grpc_set_tsi_error_result(
250
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
251
+ "TSI handshaker result does not implement "
252
+ "get_frame_protector_type"),
253
+ result));
246
254
  return;
247
255
  }
248
- // Create frame protector if zero-copy frame protector is NULL.
256
+ tsi_zero_copy_grpc_protector* zero_copy_protector = nullptr;
249
257
  tsi_frame_protector* protector = nullptr;
250
- if (zero_copy_protector == nullptr) {
251
- result = tsi_handshaker_result_create_frame_protector(
252
- handshaker_result_, max_frame_size_ == 0 ? nullptr : &max_frame_size_,
253
- &protector);
254
- if (result != TSI_OK) {
255
- error = grpc_set_tsi_error_result(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
256
- "Frame protector creation failed"),
257
- result);
258
- HandshakeFailedLocked(error);
259
- return;
260
- }
258
+ switch (frame_protector_type) {
259
+ case TSI_FRAME_PROTECTOR_ZERO_COPY:
260
+ ABSL_FALLTHROUGH_INTENDED;
261
+ case TSI_FRAME_PROTECTOR_NORMAL_OR_ZERO_COPY:
262
+ // Create zero-copy frame protector.
263
+ result = tsi_handshaker_result_create_zero_copy_grpc_protector(
264
+ handshaker_result_, max_frame_size_ == 0 ? nullptr : &max_frame_size_,
265
+ &zero_copy_protector);
266
+ if (result != TSI_OK) {
267
+ HandshakeFailedLocked(grpc_set_tsi_error_result(
268
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
269
+ "Zero-copy frame protector creation failed"),
270
+ result));
271
+ return;
272
+ }
273
+ break;
274
+ case TSI_FRAME_PROTECTOR_NORMAL:
275
+ // Create normal frame protector.
276
+ result = tsi_handshaker_result_create_frame_protector(
277
+ handshaker_result_, max_frame_size_ == 0 ? nullptr : &max_frame_size_,
278
+ &protector);
279
+ if (result != TSI_OK) {
280
+ HandshakeFailedLocked(
281
+ grpc_set_tsi_error_result(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
282
+ "Frame protector creation failed"),
283
+ result));
284
+ return;
285
+ }
286
+ break;
287
+ case TSI_FRAME_PROTECTOR_NONE:
288
+ break;
261
289
  }
262
- // Get unused bytes.
263
- const unsigned char* unused_bytes = nullptr;
264
- size_t unused_bytes_size = 0;
265
- result = tsi_handshaker_result_get_unused_bytes(
266
- handshaker_result_, &unused_bytes, &unused_bytes_size);
267
- // Create secure endpoint.
268
- if (unused_bytes_size > 0) {
290
+ // If we have a frame protector, create a secure endpoint.
291
+ if (zero_copy_protector != nullptr || protector != nullptr) {
292
+ if (unused_bytes_size > 0) {
293
+ grpc_slice slice = grpc_slice_from_copied_buffer(
294
+ reinterpret_cast<const char*>(unused_bytes), unused_bytes_size);
295
+ args_->endpoint = grpc_secure_endpoint_create(
296
+ protector, zero_copy_protector, args_->endpoint, &slice, 1);
297
+ grpc_slice_unref_internal(slice);
298
+ } else {
299
+ args_->endpoint = grpc_secure_endpoint_create(
300
+ protector, zero_copy_protector, args_->endpoint, nullptr, 0);
301
+ }
302
+ } else if (unused_bytes_size > 0) {
303
+ // Not wrapping the endpoint, so just pass along unused bytes.
269
304
  grpc_slice slice = grpc_slice_from_copied_buffer(
270
305
  reinterpret_cast<const char*>(unused_bytes), unused_bytes_size);
271
- args_->endpoint = grpc_secure_endpoint_create(
272
- protector, zero_copy_protector, args_->endpoint, &slice, 1);
273
- grpc_slice_unref_internal(slice);
274
- } else {
275
- args_->endpoint = grpc_secure_endpoint_create(
276
- protector, zero_copy_protector, args_->endpoint, nullptr, 0);
306
+ grpc_slice_buffer_add(args_->read_buffer, slice);
277
307
  }
308
+ // Done with handshaker result.
278
309
  tsi_handshaker_result_destroy(handshaker_result_);
279
310
  handshaker_result_ = nullptr;
280
311
  // Add auth context to channel args.
@@ -430,7 +461,6 @@ void SecurityHandshaker::OnHandshakeDataReceivedFromPeerFn(
430
461
  size_t bytes_received_size = h->MoveReadBufferIntoHandshakeBuffer();
431
462
  // Call TSI handshaker.
432
463
  error = h->DoHandshakerNextLocked(h->handshake_buffer_, bytes_received_size);
433
-
434
464
  if (error != GRPC_ERROR_NONE) {
435
465
  h->HandshakeFailedLocked(error);
436
466
  } else {
@@ -96,23 +96,21 @@ struct call_data {
96
96
 
97
97
  static grpc_metadata_array metadata_batch_to_md_array(
98
98
  const grpc_metadata_batch* batch) {
99
- grpc_linked_mdelem* l;
100
99
  grpc_metadata_array result;
101
100
  grpc_metadata_array_init(&result);
102
- for (l = batch->list.head; l != nullptr; l = l->next) {
101
+ batch->ForEach([&](grpc_mdelem md) {
103
102
  grpc_metadata* usr_md = nullptr;
104
- grpc_mdelem md = l->md;
105
103
  grpc_slice key = GRPC_MDKEY(md);
106
104
  grpc_slice value = GRPC_MDVALUE(md);
107
105
  if (result.count == result.capacity) {
108
- result.capacity = GPR_MAX(result.capacity + 8, result.capacity * 2);
106
+ result.capacity = std::max(result.capacity + 8, result.capacity * 2);
109
107
  result.metadata = static_cast<grpc_metadata*>(gpr_realloc(
110
108
  result.metadata, result.capacity * sizeof(grpc_metadata)));
111
109
  }
112
110
  usr_md = &result.metadata[result.count++];
113
111
  usr_md->key = grpc_slice_ref_internal(key);
114
112
  usr_md->value = grpc_slice_ref_internal(value);
115
- }
113
+ });
116
114
  return result;
117
115
  }
118
116
 
@@ -22,9 +22,7 @@
22
22
 
23
23
  grpc_error_handle grpc_set_tsi_error_result(grpc_error_handle error,
24
24
  tsi_result result) {
25
- return grpc_error_set_int(
26
- grpc_error_set_str(
27
- error, GRPC_ERROR_STR_TSI_ERROR,
28
- grpc_slice_from_static_string(tsi_result_to_string(result))),
29
- GRPC_ERROR_INT_TSI_CODE, result);
25
+ return grpc_error_set_int(grpc_error_set_str(error, GRPC_ERROR_STR_TSI_ERROR,
26
+ tsi_result_to_string(result)),
27
+ GRPC_ERROR_INT_TSI_CODE, result);
30
28
  }
@@ -26,7 +26,6 @@
26
26
 
27
27
  #include "src/core/lib/gprpp/memory.h"
28
28
  #include "src/core/lib/gprpp/ref_counted.h"
29
- #include "src/core/lib/iomgr/exec_ctx.h"
30
29
  #include "src/core/lib/slice/slice_internal.h"
31
30
 
32
31
  char* grpc_slice_to_c_string(grpc_slice slice) {
@@ -45,21 +44,6 @@ grpc_slice grpc_slice_copy(grpc_slice s) {
45
44
  return out;
46
45
  }
47
46
 
48
- /* Public API */
49
- grpc_slice grpc_slice_ref(grpc_slice slice) {
50
- return grpc_slice_ref_internal(slice);
51
- }
52
-
53
- /* Public API */
54
- void grpc_slice_unref(grpc_slice slice) {
55
- if (grpc_core::ExecCtx::Get() == nullptr) {
56
- grpc_core::ExecCtx exec_ctx;
57
- grpc_slice_unref_internal(slice);
58
- } else {
59
- grpc_slice_unref_internal(slice);
60
- }
61
- }
62
-
63
47
  namespace grpc_core {
64
48
 
65
49
  /* grpc_slice_from_static_string support structure - a refcount that does
@@ -0,0 +1,39 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include <grpc/slice.h>
22
+
23
+ #include "src/core/lib/iomgr/exec_ctx.h"
24
+ #include "src/core/lib/slice/slice_internal.h"
25
+
26
+ /* Public API */
27
+ grpc_slice grpc_slice_ref(grpc_slice slice) {
28
+ return grpc_slice_ref_internal(slice);
29
+ }
30
+
31
+ /* Public API */
32
+ void grpc_slice_unref(grpc_slice slice) {
33
+ if (grpc_core::ExecCtx::Get() == nullptr) {
34
+ grpc_core::ExecCtx exec_ctx;
35
+ grpc_slice_unref_internal(slice);
36
+ } else {
37
+ grpc_slice_unref_internal(slice);
38
+ }
39
+ }
@@ -231,19 +231,19 @@ void grpc_slice_buffer_swap(grpc_slice_buffer* a, grpc_slice_buffer* b) {
231
231
  memcpy(a->base_slices, b->inlined, b_count * sizeof(grpc_slice));
232
232
  } else {
233
233
  /* no inlining: easy swap */
234
- GPR_SWAP(grpc_slice*, a->base_slices, b->base_slices);
234
+ std::swap(a->base_slices, b->base_slices);
235
235
  }
236
236
 
237
- /* Update the slices pointers (cannot do a GPR_SWAP on slices fields here).
237
+ /* Update the slices pointers (cannot do a std::swap on slices fields here).
238
238
  * Also note that since the base_slices pointers are already swapped we need
239
239
  * use 'b_offset' for 'a->base_slices' and vice versa */
240
240
  a->slices = a->base_slices + b_offset;
241
241
  b->slices = b->base_slices + a_offset;
242
242
 
243
243
  /* base_slices and slices fields are correctly set. Swap all other fields */
244
- GPR_SWAP(size_t, a->count, b->count);
245
- GPR_SWAP(size_t, a->capacity, b->capacity);
246
- GPR_SWAP(size_t, a->length, b->length);
244
+ std::swap(a->count, b->count);
245
+ std::swap(a->capacity, b->capacity);
246
+ std::swap(a->length, b->length);
247
247
  }
248
248
 
249
249
  void grpc_slice_buffer_move_into(grpc_slice_buffer* src,
@@ -136,12 +136,11 @@ grpc_slice grpc_slice_maybe_static_intern(grpc_slice slice,
136
136
  for (uint32_t i = 0; i <= max_static_metadata_hash_probe; i++) {
137
137
  static_metadata_hash_ent ent =
138
138
  static_metadata_hash[(hash + i) % GPR_ARRAY_SIZE(static_metadata_hash)];
139
- const grpc_core::StaticMetadataSlice* static_slice_table =
140
- grpc_static_slice_table();
141
139
  if (ent.hash == hash && ent.idx < GRPC_STATIC_MDSTR_COUNT &&
142
- grpc_slice_eq_static_interned(slice, static_slice_table[ent.idx])) {
140
+ grpc_slice_eq_static_interned(
141
+ slice, grpc_core::g_static_metadata_slice_table[ent.idx])) {
143
142
  *returned_slice_is_different = true;
144
- return static_slice_table[ent.idx];
143
+ return grpc_core::g_static_metadata_slice_table[ent.idx];
145
144
  }
146
145
  }
147
146
 
@@ -167,11 +166,9 @@ static const grpc_core::StaticMetadataSlice* MatchStaticSlice(
167
166
  for (uint32_t i = 0; i <= max_static_metadata_hash_probe; i++) {
168
167
  static_metadata_hash_ent ent =
169
168
  static_metadata_hash[(hash + i) % GPR_ARRAY_SIZE(static_metadata_hash)];
170
- const grpc_core::StaticMetadataSlice* static_slice_table =
171
- grpc_static_slice_table();
172
169
  if (ent.hash == hash && ent.idx < GRPC_STATIC_MDSTR_COUNT &&
173
- static_slice_table[ent.idx] == args) {
174
- return &static_slice_table[ent.idx];
170
+ grpc_core::g_static_metadata_slice_table[ent.idx] == args) {
171
+ return &grpc_core::g_static_metadata_slice_table[ent.idx];
175
172
  }
176
173
  }
177
174
  return nullptr;
@@ -323,11 +320,9 @@ void grpc_slice_intern_init(void) {
323
320
  static_metadata_hash[i].idx = GRPC_STATIC_MDSTR_COUNT;
324
321
  }
325
322
  max_static_metadata_hash_probe = 0;
326
- const grpc_core::StaticMetadataSlice* static_slice_table =
327
- grpc_static_slice_table();
328
323
  for (size_t i = 0; i < GRPC_STATIC_MDSTR_COUNT; i++) {
329
- grpc_static_metadata_hash_values[i] =
330
- grpc_slice_default_hash_internal(static_slice_table[i]);
324
+ grpc_static_metadata_hash_values[i] = grpc_slice_default_hash_internal(
325
+ grpc_core::g_static_metadata_slice_table[i]);
331
326
  for (size_t j = 0; j < GPR_ARRAY_SIZE(static_metadata_hash); j++) {
332
327
  size_t slot = (grpc_static_metadata_hash_values[i] + j) %
333
328
  GPR_ARRAY_SIZE(static_metadata_hash);
@@ -343,7 +338,7 @@ void grpc_slice_intern_init(void) {
343
338
  }
344
339
  // Handle KV hash for all static mdelems.
345
340
  for (size_t i = 0; i < GRPC_STATIC_MDELEM_COUNT; ++i) {
346
- grpc_static_mdelem_table()[i].HashInit();
341
+ grpc_core::g_static_mdelem_table[i].HashInit();
347
342
  }
348
343
  }
349
344
 
@@ -30,251 +30,8 @@
30
30
  #include "src/core/lib/gpr/murmur_hash.h"
31
31
  #include "src/core/lib/gprpp/memory.h"
32
32
  #include "src/core/lib/gprpp/ref_counted.h"
33
+ #include "src/core/lib/slice/slice_refcount.h"
33
34
  #include "src/core/lib/slice/slice_utils.h"
34
- #include "src/core/lib/transport/static_metadata.h"
35
-
36
- // Interned slices have specific fast-path operations for hashing. To inline
37
- // these operations, we need to forward declare them here.
38
- extern uint32_t grpc_static_metadata_hash_values[GRPC_STATIC_MDSTR_COUNT];
39
-
40
- // grpc_slice_refcount : A reference count for grpc_slice.
41
- //
42
- // Non-inlined grpc_slice objects are refcounted. Historically this was
43
- // implemented via grpc_slice_refcount, a C-style polymorphic class using a
44
- // manually managed vtable of operations. Subclasses would define their own
45
- // vtable; the 'virtual' methods (ref, unref, equals and hash) would simply call
46
- // the function pointers in the vtable as necessary.
47
- //
48
- // Unfortunately, this leads to some inefficiencies in the generated code that
49
- // can be improved upon. For example, equality checking for interned slices is a
50
- // simple equality check on the refcount pointer. With the vtable approach, this
51
- // would translate to roughly the following (high-level) instructions:
52
- //
53
- // grpc_slice_equals(slice1, slice2):
54
- // load vtable->eq -> eq_func
55
- // call eq_func(slice1, slice2)
56
- //
57
- // interned_slice_equals(slice1, slice2)
58
- // load slice1.ref -> r1
59
- // load slice2.ref -> r2
60
- // cmp r1, r2 -> retval
61
- // ret retval
62
- //
63
- // This leads to a function call for a function defined in another translation
64
- // unit, which imposes memory barriers, which reduces the compiler's ability to
65
- // optimize (in addition to the added overhead of call/ret). Additionally, it
66
- // may be harder to reason about branch prediction when we're jumping to
67
- // essentially arbitrarily provided function pointers.
68
- //
69
- // In addition, it is arguable that while virtualization was helpful for
70
- // Equals()/Hash() methods, that it was fundamentally unnecessary for
71
- // Ref()/Unref().
72
- //
73
- // Instead, grpc_slice_refcount provides the same functionality as the C-style
74
- // virtual class, but in a de-virtualized manner - Eq(), Hash(), Ref() and
75
- // Unref() are provided within this header file. Fastpaths for Eq()/Hash()
76
- // (interned and static metadata slices), as well as the Ref() operation, can
77
- // all be inlined without any memory barriers.
78
- //
79
- // It does this by:
80
- // 1. Using grpc_core::RefCount<> (header-only) for Ref/Unref. Two special cases
81
- // need support: No-op ref/unref (eg. static metadata slices) and stream
82
- // slice references (where all the slices share the streamref). This is in
83
- // addition to the normal case of '1 slice, 1 ref'.
84
- // To support these cases, we explicitly track a nullable pointer to the
85
- // underlying RefCount<>. No-op ref/unref is used by checking the pointer for
86
- // null, and doing nothing if it is. Both stream slice refs and 'normal'
87
- // slices use the same path for Ref/Unref (by targeting the non-null
88
- // pointer).
89
- //
90
- // 2. introducing the notion of grpc_slice_refcount::Type. This describes if a
91
- // slice ref is used by a static metadata slice, an interned slice, or other
92
- // slices. We switch on the slice ref type in order to provide fastpaths for
93
- // Equals() and Hash().
94
- //
95
- // In total, this saves us roughly 1-2% latency for unary calls, with smaller
96
- // calls benefitting. The effect is present, but not as useful, for larger calls
97
- // where the cost of sending the data dominates.
98
- // TODO(arjunroy): Investigate if this can be removed with strongly typed
99
- // grpc_slices.
100
- struct grpc_slice_refcount {
101
- public:
102
- enum class Type {
103
- STATIC, // Refcount for a static metadata slice.
104
- INTERNED, // Refcount for an interned slice.
105
- NOP, // No-Op
106
- REGULAR // Refcount for non-static-metadata, non-interned slices.
107
- };
108
- typedef void (*DestroyerFn)(void*);
109
-
110
- grpc_slice_refcount() = default;
111
-
112
- explicit grpc_slice_refcount(Type t) : ref_type_(t) {}
113
-
114
- explicit grpc_slice_refcount(grpc_slice_refcount* sub) : sub_refcount_(sub) {}
115
- // Regular constructor for grpc_slice_refcount.
116
- //
117
- // Parameters:
118
- // 1. grpc_slice_refcount::Type type
119
- // Whether we are the refcount for a static
120
- // metadata slice, an interned slice, or any other kind of slice.
121
- //
122
- // 2. RefCount* ref
123
- // The pointer to the actual underlying grpc_core::RefCount. Rather than
124
- // performing struct offset computations as in the original implementation to
125
- // get to the refcount, which requires a virtual method, we devirtualize by
126
- // using a nullable pointer to allow a single pair of Ref/Unref methods.
127
- //
128
- // 3. DestroyerFn destroyer_fn
129
- // Called when the refcount goes to 0, with destroyer_arg as parameter.
130
- //
131
- // 4. void* destroyer_arg
132
- // Argument for the virtualized destructor.
133
- //
134
- // 5. grpc_slice_refcount* sub
135
- // Argument used for interned slices.
136
- grpc_slice_refcount(grpc_slice_refcount::Type type, grpc_core::RefCount* ref,
137
- DestroyerFn destroyer_fn, void* destroyer_arg,
138
- grpc_slice_refcount* sub)
139
- : ref_(ref),
140
- ref_type_(type),
141
- sub_refcount_(sub),
142
- dest_fn_(destroyer_fn),
143
- destroy_fn_arg_(destroyer_arg) {}
144
- // Initializer for static refcounts.
145
- grpc_slice_refcount(grpc_slice_refcount* sub, Type type)
146
- : ref_type_(type), sub_refcount_(sub) {}
147
-
148
- Type GetType() const { return ref_type_; }
149
-
150
- int Eq(const grpc_slice& a, const grpc_slice& b);
151
-
152
- uint32_t Hash(const grpc_slice& slice);
153
- void Ref() {
154
- if (ref_ == nullptr) return;
155
- ref_->RefNonZero();
156
- }
157
- void Unref() {
158
- if (ref_ == nullptr) return;
159
- if (ref_->Unref()) {
160
- dest_fn_(destroy_fn_arg_);
161
- }
162
- }
163
-
164
- grpc_slice_refcount* sub_refcount() const { return sub_refcount_; }
165
-
166
- private:
167
- grpc_core::RefCount* ref_ = nullptr;
168
- const Type ref_type_ = Type::REGULAR;
169
- grpc_slice_refcount* sub_refcount_ = this;
170
- DestroyerFn dest_fn_ = nullptr;
171
- void* destroy_fn_arg_ = nullptr;
172
- };
173
-
174
- namespace grpc_core {
175
-
176
- struct StaticSliceRefcount {
177
- static grpc_slice_refcount kStaticSubRefcount;
178
-
179
- explicit StaticSliceRefcount(uint32_t index)
180
- : base(&kStaticSubRefcount, grpc_slice_refcount::Type::STATIC),
181
- index(index) {}
182
-
183
- grpc_slice_refcount base;
184
- const uint32_t index;
185
- };
186
-
187
- extern grpc_slice_refcount kNoopRefcount;
188
-
189
- struct InternedSliceRefcount {
190
- static void Destroy(void* arg) {
191
- auto* rc = static_cast<InternedSliceRefcount*>(arg);
192
- rc->~InternedSliceRefcount();
193
- gpr_free(rc);
194
- }
195
-
196
- InternedSliceRefcount(size_t length, uint32_t hash,
197
- InternedSliceRefcount* bucket_next)
198
- : base(grpc_slice_refcount::Type::INTERNED, &refcnt, Destroy, this, &sub),
199
- sub(grpc_slice_refcount::Type::REGULAR, &refcnt, Destroy, this, &sub),
200
- length(length),
201
- hash(hash),
202
- bucket_next(bucket_next) {}
203
-
204
- ~InternedSliceRefcount();
205
-
206
- grpc_slice_refcount base;
207
- grpc_slice_refcount sub;
208
- const size_t length;
209
- RefCount refcnt;
210
- const uint32_t hash;
211
- InternedSliceRefcount* bucket_next;
212
- };
213
-
214
- } // namespace grpc_core
215
-
216
- inline size_t grpc_refcounted_slice_length(const grpc_slice& slice) {
217
- GPR_DEBUG_ASSERT(slice.refcount != nullptr);
218
- return slice.data.refcounted.length;
219
- }
220
-
221
- inline const uint8_t* grpc_refcounted_slice_data(const grpc_slice& slice) {
222
- GPR_DEBUG_ASSERT(slice.refcount != nullptr);
223
- return slice.data.refcounted.bytes;
224
- }
225
-
226
- inline int grpc_slice_refcount::Eq(const grpc_slice& a, const grpc_slice& b) {
227
- GPR_DEBUG_ASSERT(a.refcount != nullptr);
228
- GPR_DEBUG_ASSERT(a.refcount == this);
229
- switch (ref_type_) {
230
- case Type::STATIC:
231
- GPR_DEBUG_ASSERT(
232
- (GRPC_STATIC_METADATA_INDEX(a) == GRPC_STATIC_METADATA_INDEX(b)) ==
233
- (a.refcount == b.refcount));
234
- ABSL_FALLTHROUGH_INTENDED;
235
- case Type::INTERNED:
236
- return a.refcount == b.refcount;
237
- case Type::NOP:
238
- case Type::REGULAR:
239
- break;
240
- }
241
- if (grpc_refcounted_slice_length(a) != GRPC_SLICE_LENGTH(b)) return false;
242
- if (grpc_refcounted_slice_length(a) == 0) return true;
243
- return 0 == memcmp(grpc_refcounted_slice_data(a), GRPC_SLICE_START_PTR(b),
244
- grpc_refcounted_slice_length(a));
245
- }
246
-
247
- inline uint32_t grpc_slice_refcount::Hash(const grpc_slice& slice) {
248
- GPR_DEBUG_ASSERT(slice.refcount != nullptr);
249
- GPR_DEBUG_ASSERT(slice.refcount == this);
250
- switch (ref_type_) {
251
- case Type::STATIC:
252
- return ::grpc_static_metadata_hash_values[GRPC_STATIC_METADATA_INDEX(
253
- slice)];
254
- case Type::INTERNED:
255
- return reinterpret_cast<grpc_core::InternedSliceRefcount*>(slice.refcount)
256
- ->hash;
257
- case Type::NOP:
258
- case Type::REGULAR:
259
- break;
260
- }
261
- return gpr_murmur_hash3(grpc_refcounted_slice_data(slice),
262
- grpc_refcounted_slice_length(slice),
263
- grpc_core::g_hash_seed);
264
- }
265
-
266
- inline const grpc_slice& grpc_slice_ref_internal(const grpc_slice& slice) {
267
- if (slice.refcount) {
268
- slice.refcount->Ref();
269
- }
270
- return slice;
271
- }
272
-
273
- inline void grpc_slice_unref_internal(const grpc_slice& slice) {
274
- if (slice.refcount) {
275
- slice.refcount->Unref();
276
- }
277
- }
278
35
 
279
36
  void grpc_slice_buffer_reset_and_unref_internal(grpc_slice_buffer* sb);
280
37
  void grpc_slice_buffer_partial_unref_internal(grpc_slice_buffer* sb,
@@ -0,0 +1,17 @@
1
+ // Copyright 2021 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include <grpc/support/port_platform.h>
16
+
17
+ #include "src/core/lib/slice/slice_refcount.h"