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
@@ -34,7 +34,6 @@
34
34
  #include "src/core/ext/transport/chttp2/transport/frame_window_update.h"
35
35
  #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
36
36
  #include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
37
- #include "src/core/ext/transport/chttp2/transport/incoming_metadata.h"
38
37
  #include "src/core/ext/transport/chttp2/transport/stream_map.h"
39
38
  #include "src/core/lib/channel/channelz.h"
40
39
  #include "src/core/lib/compression/stream_compression.h"
@@ -43,6 +42,7 @@
43
42
  #include "src/core/lib/iomgr/endpoint.h"
44
43
  #include "src/core/lib/iomgr/timer.h"
45
44
  #include "src/core/lib/transport/connectivity_state.h"
45
+ #include "src/core/lib/transport/metadata_batch.h"
46
46
  #include "src/core/lib/transport/transport_impl.h"
47
47
 
48
48
  namespace grpc_core {
@@ -589,7 +589,8 @@ struct grpc_chttp2_stream {
589
589
  grpc_published_metadata_method published_metadata[2] = {};
590
590
  bool final_metadata_requested = false;
591
591
 
592
- grpc_chttp2_incoming_metadata_buffer metadata_buffer[2];
592
+ grpc_metadata_batch initial_metadata_buffer;
593
+ grpc_metadata_batch trailing_metadata_buffer;
593
594
 
594
595
  grpc_slice_buffer frame_storage; /* protected by t combiner */
595
596
 
@@ -766,7 +767,7 @@ grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
766
767
  void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
767
768
  uint32_t goaway_error,
768
769
  uint32_t last_stream_id,
769
- const grpc_slice& goaway_text);
770
+ absl::string_view goaway_text);
770
771
 
771
772
  void grpc_chttp2_parsing_become_skip_parser(grpc_chttp2_transport* t);
772
773
 
@@ -324,13 +324,26 @@ static HPackParser::Boundary hpack_boundary_type(grpc_chttp2_transport* t,
324
324
  }
325
325
  }
326
326
 
327
+ static HPackParser::LogInfo hpack_parser_log_info(
328
+ grpc_chttp2_transport* t, HPackParser::LogInfo::Type type) {
329
+ return HPackParser::LogInfo{
330
+ t->incoming_stream_id,
331
+ type,
332
+ t->is_client,
333
+ };
334
+ }
335
+
327
336
  static grpc_error_handle init_header_skip_frame_parser(
328
337
  grpc_chttp2_transport* t, HPackParser::Priority priority_type) {
329
338
  bool is_eoh = t->expect_continuation_stream_id != 0;
330
339
  t->parser = grpc_chttp2_header_parser_parse;
331
340
  t->parser_data = &t->hpack_parser;
332
- t->hpack_parser.BeginFrame(skip_header, hpack_boundary_type(t, is_eoh),
333
- priority_type);
341
+ t->hpack_parser.BeginFrame(
342
+ nullptr,
343
+ t->settings[GRPC_ACKED_SETTINGS]
344
+ [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE],
345
+ hpack_boundary_type(t, is_eoh), priority_type,
346
+ hpack_parser_log_info(t, HPackParser::LogInfo::kDontKnow));
334
347
  return GRPC_ERROR_NONE;
335
348
  }
336
349
 
@@ -342,7 +355,7 @@ static grpc_error_handle init_non_header_skip_frame_parser(
342
355
 
343
356
  void grpc_chttp2_parsing_become_skip_parser(grpc_chttp2_transport* t) {
344
357
  if (t->parser == grpc_chttp2_header_parser_parse) {
345
- t->hpack_parser.ResetSink(skip_header);
358
+ t->hpack_parser.StopBufferingFrame();
346
359
  } else {
347
360
  t->parser = skip_parser;
348
361
  }
@@ -409,170 +422,6 @@ error_handler:
409
422
  }
410
423
  }
411
424
 
412
- static void free_timeout(void* p) { gpr_free(p); }
413
-
414
- static bool md_key_cmp(grpc_mdelem md, const grpc_slice& reference) {
415
- GPR_DEBUG_ASSERT(grpc_slice_is_interned(GRPC_MDKEY(md)));
416
- return GRPC_MDKEY(md).refcount == reference.refcount;
417
- }
418
-
419
- static void GPR_ATTRIBUTE_NOINLINE on_initial_header_log(
420
- grpc_chttp2_transport* t, grpc_chttp2_stream* s, grpc_mdelem md) {
421
- char* key = grpc_slice_to_c_string(GRPC_MDKEY(md));
422
- char* value =
423
- grpc_dump_slice(GRPC_MDVALUE(md), GPR_DUMP_HEX | GPR_DUMP_ASCII);
424
- gpr_log(GPR_INFO, "HTTP:%d:HDR:%s: %s: %s", s->id,
425
- t->is_client ? "CLI" : "SVR", key, value);
426
- gpr_free(key);
427
- gpr_free(value);
428
- }
429
-
430
- static grpc_error_handle GPR_ATTRIBUTE_NOINLINE
431
- handle_timeout(grpc_chttp2_stream* s, grpc_mdelem md) {
432
- grpc_millis* cached_timeout =
433
- static_cast<grpc_millis*>(grpc_mdelem_get_user_data(md, free_timeout));
434
- grpc_millis timeout;
435
- if (cached_timeout != nullptr) {
436
- timeout = *cached_timeout;
437
- } else {
438
- if (GPR_UNLIKELY(!grpc_http2_decode_timeout(GRPC_MDVALUE(md), &timeout))) {
439
- char* val = grpc_slice_to_c_string(GRPC_MDVALUE(md));
440
- gpr_log(GPR_ERROR, "Ignoring bad timeout value '%s'", val);
441
- gpr_free(val);
442
- timeout = GRPC_MILLIS_INF_FUTURE;
443
- }
444
- if (GRPC_MDELEM_IS_INTERNED(md)) {
445
- /* store the result */
446
- cached_timeout =
447
- static_cast<grpc_millis*>(gpr_malloc(sizeof(grpc_millis)));
448
- *cached_timeout = timeout;
449
- grpc_mdelem_set_user_data(md, free_timeout, cached_timeout);
450
- }
451
- }
452
- if (timeout != GRPC_MILLIS_INF_FUTURE) {
453
- grpc_chttp2_incoming_metadata_buffer_set_deadline(
454
- &s->metadata_buffer[0], grpc_core::ExecCtx::Get()->Now() + timeout);
455
- }
456
- GRPC_MDELEM_UNREF(md);
457
- return GRPC_ERROR_NONE;
458
- }
459
-
460
- static grpc_error_handle GPR_ATTRIBUTE_NOINLINE
461
- handle_metadata_size_limit_exceeded(grpc_chttp2_transport* t,
462
- grpc_chttp2_stream* s, grpc_mdelem md,
463
- size_t new_size,
464
- size_t metadata_size_limit) {
465
- gpr_log(GPR_DEBUG,
466
- "received initial metadata size exceeds limit (%" PRIuPTR
467
- " vs. %" PRIuPTR
468
- "). GRPC_ARG_MAX_METADATA_SIZE can be set to increase this limit.",
469
- new_size, metadata_size_limit);
470
- grpc_chttp2_cancel_stream(
471
- t, s,
472
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
473
- "received initial metadata size exceeds limit"),
474
- GRPC_ERROR_INT_GRPC_STATUS,
475
- GRPC_STATUS_RESOURCE_EXHAUSTED));
476
- grpc_chttp2_parsing_become_skip_parser(t);
477
- s->seen_error = true;
478
- GRPC_MDELEM_UNREF(md);
479
- return GRPC_ERROR_NONE;
480
- }
481
-
482
- static grpc_error_handle GPR_ATTRIBUTE_NOINLINE
483
- handle_metadata_add_failure(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
484
- grpc_mdelem md, grpc_error_handle error) {
485
- grpc_chttp2_cancel_stream(t, s, error);
486
- grpc_chttp2_parsing_become_skip_parser(t);
487
- s->seen_error = true;
488
- GRPC_MDELEM_UNREF(md);
489
- return GRPC_ERROR_NONE;
490
- }
491
-
492
- static grpc_error_handle on_initial_header(void* tp, grpc_mdelem md) {
493
- GPR_TIMER_SCOPE("on_initial_header", 0);
494
-
495
- grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
496
- grpc_chttp2_stream* s = t->incoming_stream;
497
- GPR_DEBUG_ASSERT(s != nullptr);
498
-
499
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
500
- on_initial_header_log(t, s, md);
501
- }
502
-
503
- if (md_key_cmp(md, GRPC_MDSTR_GRPC_TIMEOUT)) {
504
- return handle_timeout(s, md);
505
- }
506
-
507
- const size_t new_size = s->metadata_buffer[0].size + GRPC_MDELEM_LENGTH(md);
508
- const size_t metadata_size_limit =
509
- t->settings[GRPC_ACKED_SETTINGS]
510
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
511
- if (GPR_UNLIKELY(new_size > metadata_size_limit)) {
512
- return handle_metadata_size_limit_exceeded(t, s, md, new_size,
513
- metadata_size_limit);
514
- } else {
515
- grpc_error_handle error =
516
- grpc_chttp2_incoming_metadata_buffer_add(&s->metadata_buffer[0], md);
517
- if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
518
- return handle_metadata_add_failure(t, s, md, error);
519
- }
520
- }
521
- // Not timeout-related metadata, and no error occurred.
522
- return GRPC_ERROR_NONE;
523
- }
524
-
525
- static grpc_error_handle on_trailing_header(void* tp, grpc_mdelem md) {
526
- GPR_TIMER_SCOPE("on_trailing_header", 0);
527
-
528
- grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
529
- grpc_chttp2_stream* s = t->incoming_stream;
530
- GPR_DEBUG_ASSERT(s != nullptr);
531
-
532
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
533
- char* key = grpc_slice_to_c_string(GRPC_MDKEY(md));
534
- char* value =
535
- grpc_dump_slice(GRPC_MDVALUE(md), GPR_DUMP_HEX | GPR_DUMP_ASCII);
536
- gpr_log(GPR_INFO, "HTTP:%d:TRL:%s: %s: %s", s->id,
537
- t->is_client ? "CLI" : "SVR", key, value);
538
- gpr_free(key);
539
- gpr_free(value);
540
- }
541
-
542
- const size_t new_size = s->metadata_buffer[1].size + GRPC_MDELEM_LENGTH(md);
543
- const size_t metadata_size_limit =
544
- t->settings[GRPC_ACKED_SETTINGS]
545
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
546
- if (new_size > metadata_size_limit) {
547
- gpr_log(GPR_DEBUG,
548
- "received trailing metadata size exceeds limit (%" PRIuPTR
549
- " vs. %" PRIuPTR
550
- "). Please note that the status is also included in the trailing "
551
- "metadata and a large status message can also trigger this. "
552
- "GRPC_ARG_MAX_METADATA_SIZE can be set to increase this limit.",
553
- new_size, metadata_size_limit);
554
- grpc_chttp2_cancel_stream(
555
- t, s,
556
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
557
- "received trailing metadata size exceeds limit"),
558
- GRPC_ERROR_INT_GRPC_STATUS,
559
- GRPC_STATUS_RESOURCE_EXHAUSTED));
560
- grpc_chttp2_parsing_become_skip_parser(t);
561
- s->seen_error = true;
562
- GRPC_MDELEM_UNREF(md);
563
- } else {
564
- grpc_error_handle error =
565
- grpc_chttp2_incoming_metadata_buffer_add(&s->metadata_buffer[1], md);
566
- if (error != GRPC_ERROR_NONE) {
567
- grpc_chttp2_cancel_stream(t, s, error);
568
- grpc_chttp2_parsing_become_skip_parser(t);
569
- s->seen_error = true;
570
- GRPC_MDELEM_UNREF(md);
571
- }
572
- }
573
- return GRPC_ERROR_NONE;
574
- }
575
-
576
425
  static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
577
426
  int is_continuation) {
578
427
  const bool is_eoh =
@@ -664,7 +513,8 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
664
513
  if (t->header_eof) {
665
514
  s->eos_received = true;
666
515
  }
667
- HPackParser::Sink on_header;
516
+ grpc_metadata_batch* incoming_metadata_buffer = nullptr;
517
+ HPackParser::LogInfo::Type frame_type = HPackParser::LogInfo::kDontKnow;
668
518
  switch (s->header_frames_received) {
669
519
  case 0:
670
520
  if (t->is_client && t->header_eof) {
@@ -672,22 +522,29 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
672
522
  if (s->trailing_metadata_available != nullptr) {
673
523
  *s->trailing_metadata_available = true;
674
524
  }
675
- on_header = [t](grpc_mdelem md) { return on_trailing_header(t, md); };
525
+ incoming_metadata_buffer = &s->trailing_metadata_buffer;
526
+ frame_type = HPackParser::LogInfo::kTrailers;
676
527
  } else {
677
528
  GRPC_CHTTP2_IF_TRACING(gpr_log(GPR_INFO, "parsing initial_metadata"));
678
- on_header = [t](grpc_mdelem md) { return on_initial_header(t, md); };
529
+ incoming_metadata_buffer = &s->initial_metadata_buffer;
530
+ frame_type = HPackParser::LogInfo::kHeaders;
679
531
  }
680
532
  break;
681
533
  case 1:
682
534
  GRPC_CHTTP2_IF_TRACING(gpr_log(GPR_INFO, "parsing trailing_metadata"));
683
- on_header = [t](grpc_mdelem md) { return on_trailing_header(t, md); };
535
+ incoming_metadata_buffer = &s->trailing_metadata_buffer;
536
+ frame_type = HPackParser::LogInfo::kTrailers;
684
537
  break;
685
538
  case 2:
686
539
  gpr_log(GPR_ERROR, "too many header frames received");
687
540
  return init_header_skip_frame_parser(t, priority_type);
688
541
  }
689
- t->hpack_parser.BeginFrame(std::move(on_header),
690
- hpack_boundary_type(t, is_eoh), priority_type);
542
+ t->hpack_parser.BeginFrame(
543
+ incoming_metadata_buffer,
544
+ t->settings[GRPC_ACKED_SETTINGS]
545
+ [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE],
546
+ hpack_boundary_type(t, is_eoh), priority_type,
547
+ hpack_parser_log_info(t, frame_type));
691
548
  return GRPC_ERROR_NONE;
692
549
  }
693
550
 
@@ -15,7 +15,7 @@
15
15
  #ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_POPULARITY_COUNT_H
16
16
  #define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_POPULARITY_COUNT_H
17
17
 
18
- #include <grpc/impl/codegen/port_platform.h>
18
+ #include <grpc/support/port_platform.h>
19
19
 
20
20
  namespace grpc_core {
21
21
 
@@ -177,11 +177,12 @@ static void report_stall(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
177
177
  t->settings[GRPC_ACKED_SETTINGS]
178
178
  [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE],
179
179
  t->flow_control->remote_window(),
180
- static_cast<uint32_t> GPR_MAX(
181
- 0,
180
+ static_cast<uint32_t>(std::max(
181
+ int64_t(0),
182
182
  s->flow_control->remote_window_delta() +
183
- (int64_t)t->settings[GRPC_PEER_SETTINGS]
184
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]),
183
+ static_cast<int64_t>(
184
+ t->settings[GRPC_PEER_SETTINGS]
185
+ [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]))),
185
186
  s->flow_control->remote_window_delta());
186
187
  }
187
188
  }
@@ -193,7 +194,8 @@ static uint32_t target_write_size(grpc_chttp2_transport* /*t*/) {
193
194
 
194
195
  // Returns true if initial_metadata contains only default headers.
195
196
  static bool is_default_initial_metadata(grpc_metadata_batch* initial_metadata) {
196
- return initial_metadata->list.default_count == initial_metadata->list.count;
197
+ return initial_metadata->default_count() ==
198
+ initial_metadata->non_deadline_count();
197
199
  }
198
200
 
199
201
  namespace {
@@ -325,27 +327,30 @@ class DataSendContext {
325
327
  sending_bytes_before_(s_->sending_bytes) {}
326
328
 
327
329
  uint32_t stream_remote_window() const {
328
- return static_cast<uint32_t> GPR_MAX(
329
- 0, s_->flow_control->remote_window_delta() +
330
- (int64_t)t_->settings[GRPC_PEER_SETTINGS]
331
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]);
330
+ return static_cast<uint32_t>(std::max(
331
+ int64_t(0),
332
+ s_->flow_control->remote_window_delta() +
333
+ static_cast<int64_t>(
334
+ t_->settings[GRPC_PEER_SETTINGS]
335
+ [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE])));
332
336
  }
333
337
 
334
338
  uint32_t max_outgoing() const {
335
- return static_cast<uint32_t> GPR_MIN(
339
+ return static_cast<uint32_t>(std::min(
336
340
  t_->settings[GRPC_PEER_SETTINGS][GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
337
- GPR_MIN(stream_remote_window(), t_->flow_control->remote_window()));
341
+ static_cast<uint32_t>(std::min(int64_t(stream_remote_window()),
342
+ t_->flow_control->remote_window()))));
338
343
  }
339
344
 
340
345
  bool AnyOutgoing() const { return max_outgoing() > 0; }
341
346
 
342
347
  void FlushUncompressedBytes() {
343
- uint32_t send_bytes = static_cast<uint32_t> GPR_MIN(
344
- max_outgoing(), s_->flow_controlled_buffer.length);
348
+ uint32_t send_bytes = static_cast<uint32_t>(
349
+ std::min(size_t(max_outgoing()), s_->flow_controlled_buffer.length));
345
350
  is_last_frame_ = send_bytes == s_->flow_controlled_buffer.length &&
346
351
  s_->fetching_send_message == nullptr &&
347
352
  s_->send_trailing_metadata != nullptr &&
348
- grpc_metadata_batch_is_empty(s_->send_trailing_metadata);
353
+ s_->send_trailing_metadata->empty();
349
354
  grpc_chttp2_encode_data(s_->id, &s_->flow_controlled_buffer, send_bytes,
350
355
  is_last_frame_, &s_->stats.outgoing, &t_->outbuf);
351
356
  s_->flow_control->SentData(send_bytes);
@@ -356,8 +361,8 @@ class DataSendContext {
356
361
  GPR_DEBUG_ASSERT(s_->stream_compression_method !=
357
362
  GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS);
358
363
 
359
- uint32_t send_bytes = static_cast<uint32_t> GPR_MIN(
360
- max_outgoing(), s_->compressed_data_buffer.length);
364
+ uint32_t send_bytes = static_cast<uint32_t>(
365
+ std::min(size_t(max_outgoing()), s_->compressed_data_buffer.length));
361
366
  bool is_last_data_frame =
362
367
  (send_bytes == s_->compressed_data_buffer.length &&
363
368
  s_->flow_controlled_buffer.length == 0 &&
@@ -380,7 +385,7 @@ class DataSendContext {
380
385
  }
381
386
  is_last_frame_ = is_last_data_frame &&
382
387
  s_->send_trailing_metadata != nullptr &&
383
- grpc_metadata_batch_is_empty(s_->send_trailing_metadata);
388
+ s_->send_trailing_metadata->empty();
384
389
  grpc_chttp2_encode_data(s_->id, &s_->compressed_data_buffer, send_bytes,
385
390
  is_last_frame_, &s_->stats.outgoing, &t_->outbuf);
386
391
  s_->flow_control->SentData(send_bytes);
@@ -561,7 +566,7 @@ class StreamWriteContext {
561
566
  if (compressed_data_buffer_len() != 0) return;
562
567
 
563
568
  GRPC_CHTTP2_IF_TRACING(gpr_log(GPR_INFO, "sending trailing_metadata"));
564
- if (grpc_metadata_batch_is_empty(s_->send_trailing_metadata)) {
569
+ if (s_->send_trailing_metadata->empty()) {
565
570
  grpc_chttp2_encode_data(s_->id, &s_->flow_controlled_buffer, 0, true,
566
571
  &s_->stats.outgoing, &t_->outbuf);
567
572
  } else {
@@ -600,15 +605,17 @@ class StreamWriteContext {
600
605
  gpr_log(GPR_INFO, "not sending initial_metadata (Trailers-Only)"));
601
606
  // When sending Trailers-Only, we need to move the :status and
602
607
  // content-type headers to the trailers.
603
- if (s_->send_initial_metadata->idx.named.status != nullptr) {
608
+ if (s_->send_initial_metadata->legacy_index()->named.status != nullptr) {
604
609
  extra_headers_for_trailing_metadata_
605
610
  [num_extra_headers_for_trailing_metadata_++] =
606
- &s_->send_initial_metadata->idx.named.status->md;
611
+ &s_->send_initial_metadata->legacy_index()->named.status->md;
607
612
  }
608
- if (s_->send_initial_metadata->idx.named.content_type != nullptr) {
613
+ if (s_->send_initial_metadata->legacy_index()->named.content_type !=
614
+ nullptr) {
609
615
  extra_headers_for_trailing_metadata_
610
616
  [num_extra_headers_for_trailing_metadata_++] =
611
- &s_->send_initial_metadata->idx.named.content_type->md;
617
+ &s_->send_initial_metadata->legacy_index()
618
+ ->named.content_type->md;
612
619
  }
613
620
  }
614
621