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
@@ -23,7 +23,6 @@
23
23
  #include "absl/strings/str_cat.h"
24
24
  #include "absl/strings/string_view.h"
25
25
 
26
- #include "src/core/ext/filters/client_channel/service_config.h"
27
26
  #include "src/core/ext/filters/fault_injection/fault_injection_filter.h"
28
27
  #include "src/core/lib/channel/channel_args.h"
29
28
  #include "src/core/lib/channel/status_util.h"
@@ -21,7 +21,7 @@
21
21
 
22
22
  #include <vector>
23
23
 
24
- #include "src/core/ext/filters/client_channel/service_config.h"
24
+ #include "src/core/ext/service_config/service_config_parser.h"
25
25
  #include "src/core/lib/iomgr/exec_ctx.h"
26
26
 
27
27
  namespace grpc_core {
@@ -78,8 +78,6 @@ struct call_data {
78
78
  // State for handling send_initial_metadata ops.
79
79
  grpc_linked_mdelem method;
80
80
  grpc_linked_mdelem scheme;
81
- grpc_linked_mdelem authority;
82
- grpc_linked_mdelem te_trailers;
83
81
  grpc_linked_mdelem content_type;
84
82
  grpc_linked_mdelem user_agent;
85
83
  // State for handling recv_initial_metadata ops.
@@ -113,18 +111,18 @@ struct channel_data {
113
111
 
114
112
  static grpc_error_handle client_filter_incoming_metadata(
115
113
  grpc_metadata_batch* b) {
116
- if (b->idx.named.status != nullptr) {
114
+ if (b->legacy_index()->named.status != nullptr) {
117
115
  /* If both gRPC status and HTTP status are provided in the response, we
118
116
  * should prefer the gRPC status code, as mentioned in
119
117
  * https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md.
120
118
  */
121
- if (b->idx.named.grpc_status != nullptr ||
122
- grpc_mdelem_static_value_eq(b->idx.named.status->md,
119
+ if (b->legacy_index()->named.grpc_status != nullptr ||
120
+ grpc_mdelem_static_value_eq(b->legacy_index()->named.status->md,
123
121
  GRPC_MDELEM_STATUS_200)) {
124
- grpc_metadata_batch_remove(b, GRPC_BATCH_STATUS);
122
+ b->Remove(GRPC_BATCH_STATUS);
125
123
  } else {
126
- char* val = grpc_dump_slice(GRPC_MDVALUE(b->idx.named.status->md),
127
- GPR_DUMP_ASCII);
124
+ char* val = grpc_dump_slice(
125
+ GRPC_MDVALUE(b->legacy_index()->named.status->md), GPR_DUMP_ASCII);
128
126
  std::string msg =
129
127
  absl::StrCat("Received http2 header with status: ", val);
130
128
  grpc_error_handle e = grpc_error_set_str(
@@ -132,39 +130,42 @@ static grpc_error_handle client_filter_incoming_metadata(
132
130
  grpc_error_set_str(
133
131
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
134
132
  "Received http2 :status header with non-200 OK status"),
135
- GRPC_ERROR_STR_VALUE, grpc_slice_from_copied_string(val)),
133
+ GRPC_ERROR_STR_VALUE, val),
136
134
  GRPC_ERROR_INT_GRPC_STATUS,
137
135
  grpc_http2_status_to_grpc_status(atoi(val))),
138
- GRPC_ERROR_STR_GRPC_MESSAGE,
139
- grpc_slice_from_cpp_string(std::move(msg)));
136
+ GRPC_ERROR_STR_GRPC_MESSAGE, msg);
140
137
  gpr_free(val);
141
138
  return e;
142
139
  }
143
140
  }
144
141
 
145
- if (b->idx.named.grpc_message != nullptr) {
142
+ if (b->legacy_index()->named.grpc_message != nullptr) {
146
143
  grpc_slice pct_decoded_msg = grpc_core::PermissivePercentDecodeSlice(
147
- GRPC_MDVALUE(b->idx.named.grpc_message->md));
148
- if (grpc_slice_is_equivalent(pct_decoded_msg,
149
- GRPC_MDVALUE(b->idx.named.grpc_message->md))) {
144
+ GRPC_MDVALUE(b->legacy_index()->named.grpc_message->md));
145
+ if (grpc_slice_is_equivalent(
146
+ pct_decoded_msg,
147
+ GRPC_MDVALUE(b->legacy_index()->named.grpc_message->md))) {
150
148
  grpc_slice_unref_internal(pct_decoded_msg);
151
149
  } else {
152
- grpc_metadata_batch_set_value(b->idx.named.grpc_message, pct_decoded_msg);
150
+ grpc_metadata_batch_set_value(b->legacy_index()->named.grpc_message,
151
+ pct_decoded_msg);
153
152
  }
154
153
  }
155
154
 
156
- if (b->idx.named.content_type != nullptr) {
155
+ if (b->legacy_index()->named.content_type != nullptr) {
157
156
  if (!grpc_mdelem_static_value_eq(
158
- b->idx.named.content_type->md,
157
+ b->legacy_index()->named.content_type->md,
159
158
  GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC)) {
160
- if (grpc_slice_buf_start_eq(GRPC_MDVALUE(b->idx.named.content_type->md),
161
- EXPECTED_CONTENT_TYPE,
162
- EXPECTED_CONTENT_TYPE_LENGTH) &&
159
+ if (grpc_slice_buf_start_eq(
160
+ GRPC_MDVALUE(b->legacy_index()->named.content_type->md),
161
+ EXPECTED_CONTENT_TYPE, EXPECTED_CONTENT_TYPE_LENGTH) &&
163
162
  (GRPC_SLICE_START_PTR(GRPC_MDVALUE(
164
- b->idx.named.content_type->md))[EXPECTED_CONTENT_TYPE_LENGTH] ==
163
+ b->legacy_index()
164
+ ->named.content_type->md))[EXPECTED_CONTENT_TYPE_LENGTH] ==
165
165
  '+' ||
166
166
  GRPC_SLICE_START_PTR(GRPC_MDVALUE(
167
- b->idx.named.content_type->md))[EXPECTED_CONTENT_TYPE_LENGTH] ==
167
+ b->legacy_index()
168
+ ->named.content_type->md))[EXPECTED_CONTENT_TYPE_LENGTH] ==
168
169
  ';')) {
169
170
  /* Although the C implementation doesn't (currently) generate them,
170
171
  any custom +-suffix is explicitly valid. */
@@ -174,13 +175,14 @@ static grpc_error_handle client_filter_incoming_metadata(
174
175
  } else {
175
176
  /* TODO(klempner): We're currently allowing this, but we shouldn't
176
177
  see it without a proxy so log for now. */
177
- char* val = grpc_dump_slice(GRPC_MDVALUE(b->idx.named.content_type->md),
178
- GPR_DUMP_ASCII);
178
+ char* val = grpc_dump_slice(
179
+ GRPC_MDVALUE(b->legacy_index()->named.content_type->md),
180
+ GPR_DUMP_ASCII);
179
181
  gpr_log(GPR_INFO, "Unexpected content-type '%s'", val);
180
182
  gpr_free(val);
181
183
  }
182
184
  }
183
- grpc_metadata_batch_remove(b, GRPC_BATCH_CONTENT_TYPE);
185
+ b->Remove(GRPC_BATCH_CONTENT_TYPE);
184
186
  }
185
187
 
186
188
  return GRPC_ERROR_NONE;
@@ -194,7 +196,7 @@ static void recv_initial_metadata_ready(void* user_data,
194
196
  error = client_filter_incoming_metadata(calld->recv_initial_metadata);
195
197
  calld->recv_initial_metadata_error = GRPC_ERROR_REF(error);
196
198
  } else {
197
- GRPC_ERROR_REF(error);
199
+ (void)GRPC_ERROR_REF(error);
198
200
  }
199
201
  grpc_closure* closure = calld->original_recv_initial_metadata_ready;
200
202
  calld->original_recv_initial_metadata_ready = nullptr;
@@ -221,7 +223,7 @@ static void recv_trailing_metadata_ready(void* user_data,
221
223
  if (error == GRPC_ERROR_NONE) {
222
224
  error = client_filter_incoming_metadata(calld->recv_trailing_metadata);
223
225
  } else {
224
- GRPC_ERROR_REF(error);
226
+ (void)GRPC_ERROR_REF(error);
225
227
  }
226
228
  error = grpc_error_add_child(
227
229
  error, GRPC_ERROR_REF(calld->recv_initial_metadata_error));
@@ -317,7 +319,8 @@ static grpc_error_handle update_path_for_get(
317
319
  call_data* calld = static_cast<call_data*>(elem->call_data);
318
320
  grpc_slice path_slice =
319
321
  GRPC_MDVALUE(batch->payload->send_initial_metadata.send_initial_metadata
320
- ->idx.named.path->md);
322
+ ->legacy_index()
323
+ ->named.path->md);
321
324
  /* sum up individual component's lengths and allocate enough memory to
322
325
  * hold combined path+query */
323
326
  size_t estimated_len = GRPC_SLICE_LENGTH(path_slice);
@@ -341,24 +344,23 @@ static grpc_error_handle update_path_for_get(
341
344
  true /* url_safe */, false /* multi_line */);
342
345
  gpr_free(payload_bytes);
343
346
  /* remove trailing unused memory and add trailing 0 to terminate string */
344
- char* t = reinterpret_cast<char*> GRPC_SLICE_START_PTR(path_with_query_slice);
347
+ char* t =
348
+ reinterpret_cast<char*> GRPC_SLICE_START_PTR(path_with_query_slice) +
349
+ GRPC_SLICE_LENGTH(path_slice);
345
350
  /* safe to use strlen since base64_encode will always add '\0' */
346
- path_with_query_slice =
347
- grpc_slice_sub_no_ref(path_with_query_slice, 0, strlen(t));
351
+ path_with_query_slice = grpc_slice_sub_no_ref(
352
+ path_with_query_slice, 0, GRPC_SLICE_LENGTH(path_slice) + strlen(t));
348
353
  /* substitute previous path with the new path+query */
349
354
  grpc_mdelem mdelem_path_and_query =
350
355
  grpc_mdelem_from_slices(GRPC_MDSTR_PATH, path_with_query_slice);
351
356
  grpc_metadata_batch* b =
352
357
  batch->payload->send_initial_metadata.send_initial_metadata;
353
- return grpc_metadata_batch_substitute(b, b->idx.named.path,
354
- mdelem_path_and_query);
358
+ return b->Substitute(b->legacy_index()->named.path, mdelem_path_and_query);
355
359
  }
356
360
 
357
361
  static void remove_if_present(grpc_metadata_batch* batch,
358
362
  grpc_metadata_batch_callouts_index idx) {
359
- if (batch->idx.array[idx] != nullptr) {
360
- grpc_metadata_batch_remove(batch, idx);
361
- }
363
+ batch->Remove(idx);
362
364
  }
363
365
 
364
366
  static void http_client_start_transport_stream_op_batch(
@@ -440,9 +442,6 @@ static void http_client_start_transport_stream_op_batch(
440
442
  remove_if_present(
441
443
  batch->payload->send_initial_metadata.send_initial_metadata,
442
444
  GRPC_BATCH_SCHEME);
443
- remove_if_present(
444
- batch->payload->send_initial_metadata.send_initial_metadata,
445
- GRPC_BATCH_TE);
446
445
  remove_if_present(
447
446
  batch->payload->send_initial_metadata.send_initial_metadata,
448
447
  GRPC_BATCH_CONTENT_TYPE);
@@ -460,10 +459,8 @@ static void http_client_start_transport_stream_op_batch(
460
459
  batch->payload->send_initial_metadata.send_initial_metadata,
461
460
  &calld->scheme, channeld->static_scheme, GRPC_BATCH_SCHEME);
462
461
  if (error != GRPC_ERROR_NONE) goto done;
463
- error = grpc_metadata_batch_add_tail(
464
- batch->payload->send_initial_metadata.send_initial_metadata,
465
- &calld->te_trailers, GRPC_MDELEM_TE_TRAILERS, GRPC_BATCH_TE);
466
- if (error != GRPC_ERROR_NONE) goto done;
462
+ batch->payload->send_initial_metadata.send_initial_metadata->Set(
463
+ grpc_core::TeMetadata(), grpc_core::TeMetadata::kTrailers);
467
464
  error = grpc_metadata_batch_add_tail(
468
465
  batch->payload->send_initial_metadata.send_initial_metadata,
469
466
  &calld->content_type, GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC,
@@ -29,11 +29,12 @@
29
29
  #include <grpc/support/string_util.h>
30
30
 
31
31
  #include "src/core/lib/channel/channel_args.h"
32
+ #include "src/core/lib/channel/channel_stack_builder.h"
33
+ #include "src/core/lib/config/core_configuration.h"
32
34
  #include "src/core/lib/gpr/string.h"
33
35
  #include "src/core/lib/slice/slice_internal.h"
34
36
  #include "src/core/lib/slice/slice_string_helpers.h"
35
37
  #include "src/core/lib/surface/call.h"
36
- #include "src/core/lib/surface/channel_init.h"
37
38
  #include "src/core/lib/surface/channel_stack_type.h"
38
39
  #include "src/core/lib/transport/static_metadata.h"
39
40
 
@@ -56,8 +57,9 @@ void client_authority_start_transport_stream_op_batch(
56
57
  // Handle send_initial_metadata.
57
58
  // If the initial metadata doesn't already contain :authority, add it.
58
59
  if (batch->send_initial_metadata &&
59
- batch->payload->send_initial_metadata.send_initial_metadata->idx.named
60
- .authority == nullptr) {
60
+ batch->payload->send_initial_metadata.send_initial_metadata
61
+ ->legacy_index()
62
+ ->named.authority == nullptr) {
61
63
  grpc_error_handle error = grpc_metadata_batch_add_head(
62
64
  batch->payload->send_initial_metadata.send_initial_metadata,
63
65
  &calld->authority_storage,
@@ -131,8 +133,7 @@ const grpc_channel_filter grpc_client_authority_filter = {
131
133
  grpc_channel_next_get_info,
132
134
  "authority"};
133
135
 
134
- static bool add_client_authority_filter(grpc_channel_stack_builder* builder,
135
- void* arg) {
136
+ static bool add_client_authority_filter(grpc_channel_stack_builder* builder) {
136
137
  const grpc_channel_args* channel_args =
137
138
  grpc_channel_stack_builder_get_channel_arguments(builder);
138
139
  const grpc_arg* disable_client_authority_filter_arg = grpc_channel_args_find(
@@ -145,16 +146,14 @@ static bool add_client_authority_filter(grpc_channel_stack_builder* builder,
145
146
  }
146
147
  }
147
148
  return grpc_channel_stack_builder_prepend_filter(
148
- builder, static_cast<const grpc_channel_filter*>(arg), nullptr, nullptr);
149
+ builder, &grpc_client_authority_filter, nullptr, nullptr);
149
150
  }
150
151
 
151
- void grpc_client_authority_filter_init(void) {
152
- grpc_channel_init_register_stage(
153
- GRPC_CLIENT_SUBCHANNEL, INT_MAX, add_client_authority_filter,
154
- const_cast<grpc_channel_filter*>(&grpc_client_authority_filter));
155
- grpc_channel_init_register_stage(
156
- GRPC_CLIENT_DIRECT_CHANNEL, INT_MAX, add_client_authority_filter,
157
- const_cast<grpc_channel_filter*>(&grpc_client_authority_filter));
152
+ namespace grpc_core {
153
+ void RegisterClientAuthorityFilter(CoreConfiguration::Builder* builder) {
154
+ builder->channel_init()->RegisterStage(GRPC_CLIENT_SUBCHANNEL, INT_MAX,
155
+ add_client_authority_filter);
156
+ builder->channel_init()->RegisterStage(GRPC_CLIENT_DIRECT_CHANNEL, INT_MAX,
157
+ add_client_authority_filter);
158
158
  }
159
-
160
- void grpc_client_authority_filter_shutdown(void) {}
159
+ } // namespace grpc_core
@@ -25,84 +25,66 @@
25
25
  #include "src/core/ext/filters/http/message_compress/message_decompress_filter.h"
26
26
  #include "src/core/ext/filters/http/server/http_server_filter.h"
27
27
  #include "src/core/lib/channel/channel_stack_builder.h"
28
+ #include "src/core/lib/config/core_configuration.h"
28
29
  #include "src/core/lib/surface/call.h"
29
- #include "src/core/lib/surface/channel_init.h"
30
30
  #include "src/core/lib/transport/transport_impl.h"
31
31
 
32
- struct optional_filter {
33
- const grpc_channel_filter* filter;
34
- const char* control_channel_arg;
35
- };
36
-
37
- static optional_filter compress_filter = {
38
- &grpc_message_compress_filter, GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION};
39
-
40
- static optional_filter decompress_filter = {
41
- &grpc_core::MessageDecompressFilter,
42
- GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION};
43
-
44
32
  static bool is_building_http_like_transport(
45
33
  grpc_channel_stack_builder* builder) {
46
34
  grpc_transport* t = grpc_channel_stack_builder_get_transport(builder);
47
35
  return t != nullptr && strstr(t->vtable->name, "http");
48
36
  }
49
37
 
50
- template <bool enable_in_minimal_stack>
51
- static bool maybe_add_optional_filter(grpc_channel_stack_builder* builder,
52
- void* arg) {
53
- if (!is_building_http_like_transport(builder)) return true;
54
- optional_filter* filtarg = static_cast<optional_filter*>(arg);
55
- const grpc_channel_args* channel_args =
56
- grpc_channel_stack_builder_get_channel_arguments(builder);
57
- bool enable = grpc_channel_arg_get_bool(
58
- grpc_channel_args_find(channel_args, filtarg->control_channel_arg),
59
- enable_in_minimal_stack ||
60
- !grpc_channel_args_want_minimal_stack(channel_args));
61
- return enable ? grpc_channel_stack_builder_prepend_filter(
62
- builder, filtarg->filter, nullptr, nullptr)
63
- : true;
64
- }
65
-
66
- static bool maybe_add_required_filter(grpc_channel_stack_builder* builder,
67
- void* arg) {
68
- return is_building_http_like_transport(builder)
69
- ? grpc_channel_stack_builder_prepend_filter(
70
- builder, static_cast<const grpc_channel_filter*>(arg),
71
- nullptr, nullptr)
72
- : true;
73
- }
74
-
75
- void grpc_http_filters_init(void) {
76
- grpc_channel_init_register_stage(
77
- GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
78
- maybe_add_optional_filter<false>, &compress_filter);
79
- grpc_channel_init_register_stage(
80
- GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
81
- maybe_add_optional_filter<false>, &compress_filter);
82
- grpc_channel_init_register_stage(
83
- GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
84
- maybe_add_optional_filter<false>, &compress_filter);
85
- grpc_channel_init_register_stage(
86
- GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
87
- maybe_add_optional_filter<true>, &decompress_filter);
88
- grpc_channel_init_register_stage(
89
- GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
90
- maybe_add_optional_filter<true>, &decompress_filter);
91
- grpc_channel_init_register_stage(
92
- GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
93
- maybe_add_optional_filter<true>, &decompress_filter);
94
- grpc_channel_init_register_stage(
95
- GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
96
- maybe_add_required_filter,
97
- const_cast<grpc_channel_filter*>(&grpc_http_client_filter));
98
- grpc_channel_init_register_stage(
99
- GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
100
- maybe_add_required_filter,
101
- const_cast<grpc_channel_filter*>(&grpc_http_client_filter));
102
- grpc_channel_init_register_stage(
103
- GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
104
- maybe_add_required_filter,
105
- const_cast<grpc_channel_filter*>(&grpc_http_server_filter));
38
+ namespace grpc_core {
39
+ void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
40
+ auto optional = [builder](grpc_channel_stack_type channel_type,
41
+ bool enable_in_minimal_stack,
42
+ const char* control_channel_arg,
43
+ const grpc_channel_filter* filter) {
44
+ builder->channel_init()->RegisterStage(
45
+ channel_type, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
46
+ [enable_in_minimal_stack, control_channel_arg,
47
+ filter](grpc_channel_stack_builder* builder) {
48
+ if (!is_building_http_like_transport(builder)) return true;
49
+ const grpc_channel_args* channel_args =
50
+ grpc_channel_stack_builder_get_channel_arguments(builder);
51
+ bool enable = grpc_channel_arg_get_bool(
52
+ grpc_channel_args_find(channel_args, control_channel_arg),
53
+ enable_in_minimal_stack ||
54
+ !grpc_channel_args_want_minimal_stack(channel_args));
55
+ if (!enable) return true;
56
+ return grpc_channel_stack_builder_prepend_filter(builder, filter,
57
+ nullptr, nullptr);
58
+ });
59
+ };
60
+ auto required = [builder](grpc_channel_stack_type channel_type,
61
+ const grpc_channel_filter* filter) {
62
+ builder->channel_init()->RegisterStage(
63
+ channel_type, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
64
+ [filter](grpc_channel_stack_builder* builder) {
65
+ if (!is_building_http_like_transport(builder)) return true;
66
+ return grpc_channel_stack_builder_prepend_filter(builder, filter,
67
+ nullptr, nullptr);
68
+ });
69
+ };
70
+ optional(GRPC_CLIENT_SUBCHANNEL, false,
71
+ GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION,
72
+ &grpc_message_compress_filter);
73
+ optional(GRPC_CLIENT_DIRECT_CHANNEL, false,
74
+ GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION,
75
+ &grpc_message_compress_filter);
76
+ optional(GRPC_SERVER_CHANNEL, false, GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION,
77
+ &grpc_message_compress_filter);
78
+ optional(GRPC_CLIENT_SUBCHANNEL, true,
79
+ GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION,
80
+ &grpc_core::MessageDecompressFilter);
81
+ optional(GRPC_CLIENT_DIRECT_CHANNEL, true,
82
+ GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION,
83
+ &grpc_core::MessageDecompressFilter);
84
+ optional(GRPC_SERVER_CHANNEL, true, GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION,
85
+ &grpc_core::MessageDecompressFilter);
86
+ required(GRPC_CLIENT_SUBCHANNEL, &grpc_http_client_filter);
87
+ required(GRPC_CLIENT_DIRECT_CHANNEL, &grpc_http_client_filter);
88
+ required(GRPC_SERVER_CHANNEL, &grpc_http_server_filter);
106
89
  }
107
-
108
- void grpc_http_filters_shutdown(void) {}
90
+ } // namespace grpc_core
@@ -55,11 +55,14 @@ class ChannelData {
55
55
  grpc_channel_args_get_channel_default_compression_algorithm(
56
56
  args->channel_args);
57
57
  // Make sure the default is enabled.
58
- if (!GPR_BITGET(enabled_compression_algorithms_bitset_,
59
- default_compression_algorithm_)) {
58
+ if (size_t(default_compression_algorithm_) >= 32 ||
59
+ !grpc_core::GetBit(enabled_compression_algorithms_bitset_,
60
+ default_compression_algorithm_)) {
60
61
  const char* name;
61
- GPR_ASSERT(grpc_compression_algorithm_name(default_compression_algorithm_,
62
- &name) == 1);
62
+ if (!grpc_compression_algorithm_name(default_compression_algorithm_,
63
+ &name)) {
64
+ name = "<unknown>";
65
+ }
63
66
  gpr_log(GPR_ERROR,
64
67
  "default compression algorithm %s not enabled: switching to none",
65
68
  name);
@@ -108,7 +111,8 @@ class CallData {
108
111
  ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
109
112
  // The call's message compression algorithm is set to channel's default
110
113
  // setting. It can be overridden later by initial metadata.
111
- if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset(),
114
+ if (GPR_LIKELY(
115
+ grpc_core::GetBit(channeld->enabled_compression_algorithms_bitset(),
112
116
  channeld->default_compression_algorithm()))) {
113
117
  message_compression_algorithm_ =
114
118
  grpc_compression_algorithm_to_message_compression_algorithm(
@@ -191,24 +195,25 @@ bool CallData::SkipMessageCompression() {
191
195
  // channel's default setting.
192
196
  grpc_compression_algorithm FindCompressionAlgorithm(
193
197
  grpc_metadata_batch* initial_metadata, ChannelData* channeld) {
194
- if (initial_metadata->idx.named.grpc_internal_encoding_request == nullptr) {
198
+ if (initial_metadata->legacy_index()->named.grpc_internal_encoding_request ==
199
+ nullptr) {
195
200
  return channeld->default_compression_algorithm();
196
201
  }
197
202
  grpc_compression_algorithm compression_algorithm;
198
203
  // Parse the compression algorithm from the initial metadata.
199
- grpc_mdelem md =
200
- initial_metadata->idx.named.grpc_internal_encoding_request->md;
204
+ grpc_mdelem md = initial_metadata->legacy_index()
205
+ ->named.grpc_internal_encoding_request->md;
201
206
  GPR_ASSERT(grpc_compression_algorithm_parse(GRPC_MDVALUE(md),
202
207
  &compression_algorithm));
203
208
  // Remove this metadata since it's an internal one (i.e., it won't be
204
209
  // transmitted out).
205
- grpc_metadata_batch_remove(initial_metadata,
206
- GRPC_BATCH_GRPC_INTERNAL_ENCODING_REQUEST);
210
+ initial_metadata->Remove(GRPC_BATCH_GRPC_INTERNAL_ENCODING_REQUEST);
207
211
  // Check if that algorithm is enabled. Note that GRPC_COMPRESS_NONE is always
208
212
  // enabled.
209
213
  // TODO(juanlishen): Maybe use channel default or abort() if the algorithm
210
214
  // from the initial metadata is disabled.
211
- if (GPR_LIKELY(GPR_BITGET(channeld->enabled_compression_algorithms_bitset(),
215
+ if (GPR_LIKELY(
216
+ grpc_core::GetBit(channeld->enabled_compression_algorithms_bitset(),
212
217
  compression_algorithm))) {
213
218
  return compression_algorithm;
214
219
  }
@@ -272,7 +277,7 @@ grpc_error_handle CallData::ProcessSendInitialMetadata(
272
277
  if (error != GRPC_ERROR_NONE) return error;
273
278
  // Do not overwrite accept-encoding header if it already presents (e.g., added
274
279
  // by some proxy).
275
- if (!initial_metadata->idx.named.accept_encoding) {
280
+ if (!initial_metadata->legacy_index()->named.accept_encoding) {
276
281
  error = grpc_metadata_batch_add_tail(
277
282
  initial_metadata, &accept_stream_encoding_storage_,
278
283
  GRPC_MDELEM_ACCEPT_STREAM_ENCODING_FOR_ALGORITHMS(
@@ -153,7 +153,7 @@ void CallData::OnRecvInitialMetadataReady(void* arg, grpc_error_handle error) {
153
153
  CallData* calld = static_cast<CallData*>(arg);
154
154
  if (error == GRPC_ERROR_NONE) {
155
155
  grpc_linked_mdelem* grpc_encoding =
156
- calld->recv_initial_metadata_->idx.named.grpc_encoding;
156
+ calld->recv_initial_metadata_->legacy_index()->named.grpc_encoding;
157
157
  if (grpc_encoding != nullptr) {
158
158
  calld->algorithm_ = DecodeMessageCompressionAlgorithm(grpc_encoding->md);
159
159
  }