grpc 1.40.0 → 1.46.3

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 (1941) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +462 -267
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/event_engine/endpoint_config.h +6 -11
  7. data/include/grpc/event_engine/event_engine.h +164 -95
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  9. data/include/grpc/event_engine/memory_allocator.h +226 -0
  10. data/include/grpc/event_engine/memory_request.h +57 -0
  11. data/include/grpc/event_engine/port.h +1 -3
  12. data/include/grpc/fork.h +1 -1
  13. data/include/grpc/grpc.h +54 -18
  14. data/include/grpc/grpc_posix.h +22 -18
  15. data/include/grpc/grpc_security.h +328 -193
  16. data/include/grpc/grpc_security_constants.h +2 -14
  17. data/include/grpc/impl/codegen/atm.h +5 -3
  18. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  19. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  20. data/include/grpc/impl/codegen/atm_windows.h +2 -0
  21. data/include/grpc/impl/codegen/byte_buffer.h +2 -0
  22. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  23. data/include/grpc/impl/codegen/compression_types.h +2 -2
  24. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  25. data/include/grpc/impl/codegen/fork.h +2 -0
  26. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  27. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  28. data/include/grpc/impl/codegen/grpc_types.h +28 -26
  29. data/include/grpc/impl/codegen/log.h +2 -0
  30. data/include/grpc/impl/codegen/port_platform.h +37 -22
  31. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  32. data/include/grpc/impl/codegen/slice.h +6 -1
  33. data/include/grpc/impl/codegen/status.h +2 -0
  34. data/include/grpc/impl/codegen/sync.h +8 -5
  35. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  36. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  37. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  38. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  39. data/include/grpc/impl/codegen/sync_windows.h +2 -0
  40. data/include/grpc/slice.h +1 -12
  41. data/include/grpc/status.h +1 -1
  42. data/include/grpc/support/atm.h +1 -1
  43. data/include/grpc/support/atm_gcc_atomic.h +1 -1
  44. data/include/grpc/support/atm_gcc_sync.h +1 -1
  45. data/include/grpc/support/atm_windows.h +1 -1
  46. data/include/grpc/support/log.h +1 -1
  47. data/include/grpc/support/port_platform.h +1 -1
  48. data/include/grpc/support/sync.h +1 -1
  49. data/include/grpc/support/sync_abseil.h +1 -1
  50. data/include/grpc/support/sync_custom.h +1 -1
  51. data/include/grpc/support/sync_generic.h +1 -1
  52. data/include/grpc/support/sync_posix.h +1 -1
  53. data/include/grpc/support/sync_windows.h +1 -1
  54. data/include/grpc/support/time.h +2 -2
  55. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  56. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  57. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  58. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  59. data/src/core/ext/filters/channel_idle/idle_filter_state.h +66 -0
  60. data/src/core/ext/filters/client_channel/backend_metric.cc +24 -27
  61. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  62. data/src/core/ext/filters/client_channel/backup_poller.cc +14 -9
  63. data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
  64. data/src/core/ext/filters/client_channel/channel_connectivity.cc +75 -94
  65. data/src/core/ext/filters/client_channel/client_channel.cc +532 -501
  66. data/src/core/ext/filters/client_channel/client_channel.h +115 -64
  67. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
  68. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  69. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
  70. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  71. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -24
  72. data/src/core/ext/filters/client_channel/config_selector.cc +2 -1
  73. data/src/core/ext/filters/client_channel/config_selector.h +5 -6
  74. data/src/core/ext/filters/client_channel/connector.h +19 -19
  75. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -7
  76. data/src/core/ext/filters/client_channel/dynamic_filters.h +2 -2
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -22
  78. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -16
  79. data/src/core/ext/filters/client_channel/health/health_check_client.cc +128 -582
  80. data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -159
  81. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +30 -34
  82. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
  83. data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
  84. data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  86. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  87. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -2
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -18
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +247 -150
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -4
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +4 -4
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +17 -18
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -4
  97. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +73 -39
  98. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +226 -181
  99. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +126 -79
  100. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2542 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +68 -62
  102. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +18 -13
  103. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +106 -71
  104. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +119 -159
  105. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +162 -77
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +29 -19
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +331 -488
  110. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  111. data/src/core/ext/filters/client_channel/lb_policy.h +115 -106
  112. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  113. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -7
  114. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +133 -0
  115. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +296 -324
  116. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +23 -12
  117. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +23 -18
  118. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +37 -55
  119. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +153 -275
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +38 -25
  121. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  122. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +96 -254
  123. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +23 -20
  124. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  125. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +85 -69
  126. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  127. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  128. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +40 -39
  129. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +509 -439
  130. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -15
  131. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +13 -7
  132. data/src/core/ext/filters/client_channel/retry_filter.cc +282 -238
  133. data/src/core/ext/filters/client_channel/retry_service_config.cc +16 -18
  134. data/src/core/ext/filters/client_channel/retry_service_config.h +18 -12
  135. data/src/core/ext/filters/client_channel/retry_throttle.cc +14 -59
  136. data/src/core/ext/filters/client_channel/retry_throttle.h +11 -5
  137. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +51 -37
  138. data/src/core/ext/filters/client_channel/subchannel.cc +132 -197
  139. data/src/core/ext/filters/client_channel/subchannel.h +36 -56
  140. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  141. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  142. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  143. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  144. data/src/core/ext/filters/deadline/deadline_filter.cc +31 -33
  145. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  146. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +158 -401
  147. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
  148. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -27
  149. data/src/core/ext/filters/fault_injection/service_config_parser.h +10 -4
  150. data/src/core/ext/filters/http/client/http_client_filter.cc +83 -548
  151. data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
  152. data/src/core/ext/filters/http/client_authority_filter.cc +39 -103
  153. data/src/core/ext/filters/http/client_authority_filter.h +24 -5
  154. data/src/core/ext/filters/http/http_filters_plugin.cc +55 -73
  155. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +49 -140
  156. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +22 -35
  157. data/src/core/ext/filters/http/server/http_server_filter.cc +64 -274
  158. data/src/core/ext/filters/message_size/message_size_filter.cc +49 -58
  159. data/src/core/ext/filters/message_size/message_size_filter.h +10 -3
  160. data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
  161. data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
  162. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
  163. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
  164. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +61 -0
  165. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  166. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +143 -0
  167. data/src/core/ext/filters/{workarounds/workaround_cronet_compression_filter.h → server_config_selector/server_config_selector_filter.h} +11 -6
  168. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  169. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +245 -12
  170. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +294 -95
  171. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -1
  172. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  173. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  174. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +368 -349
  175. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -4
  176. data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
  177. data/src/core/ext/transport/chttp2/transport/context_list.h +3 -5
  178. data/src/core/ext/transport/chttp2/transport/flow_control.cc +63 -44
  179. data/src/core/ext/transport/chttp2/transport/flow_control.h +18 -12
  180. data/src/core/ext/transport/chttp2/transport/frame_data.cc +11 -12
  181. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -0
  182. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -4
  183. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -0
  184. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +10 -9
  185. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -0
  186. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -8
  187. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -0
  188. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +40 -7
  189. data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -0
  190. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +12 -7
  191. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -0
  192. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  193. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +516 -749
  194. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +183 -71
  195. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
  196. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +71 -0
  197. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +764 -1062
  198. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +75 -178
  199. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +239 -0
  200. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +115 -0
  201. data/src/core/ext/transport/chttp2/transport/internal.h +22 -48
  202. data/src/core/ext/transport/chttp2/transport/parsing.cc +61 -212
  203. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
  204. data/src/core/ext/transport/chttp2/transport/varint.cc +7 -3
  205. data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
  206. data/src/core/ext/transport/chttp2/transport/writing.cc +125 -169
  207. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  208. data/src/core/ext/transport/inproc/inproc_transport.cc +132 -173
  209. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  210. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  211. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +482 -0
  212. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +553 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +248 -210
  215. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1382 -685
  216. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  217. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +151 -0
  218. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
  219. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -0
  220. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  221. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +124 -0
  222. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  223. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +102 -0
  224. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  225. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +97 -0
  226. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  227. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +605 -0
  228. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  229. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +103 -0
  230. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +44 -1
  231. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +52 -1
  232. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +31 -5
  233. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +57 -18
  234. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +144 -117
  235. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +761 -386
  236. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +240 -200
  237. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1376 -667
  238. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +50 -29
  239. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +224 -95
  240. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +337 -255
  241. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1901 -790
  242. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -8
  243. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +50 -24
  244. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +61 -28
  245. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +280 -99
  246. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  247. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1381 -0
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +75 -54
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +398 -190
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -8
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +53 -25
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +220 -171
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1224 -567
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +106 -46
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +561 -171
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +20 -7
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +46 -24
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +17 -23
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +49 -95
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +151 -0
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +146 -118
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +853 -415
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +142 -92
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +797 -345
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -9
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +65 -31
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +205 -122
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1097 -393
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +18 -5
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +36 -17
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +28 -14
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +97 -49
  274. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +23 -10
  275. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +83 -34
  276. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +27 -14
  277. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +101 -49
  278. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -9
  279. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +54 -26
  280. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +52 -36
  281. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +214 -109
  282. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +92 -39
  283. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +449 -131
  284. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +71 -54
  285. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +389 -188
  286. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +20 -7
  287. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +42 -21
  288. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +99 -72
  289. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +541 -259
  290. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +105 -80
  291. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +610 -307
  292. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +32 -17
  293. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +112 -49
  294. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +25 -11
  295. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +79 -40
  296. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  297. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +136 -0
  298. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +83 -62
  299. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +463 -235
  300. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +93 -60
  301. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +483 -214
  302. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +130 -100
  303. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +628 -282
  304. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +54 -35
  305. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +291 -142
  306. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +665 -567
  307. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3977 -1883
  308. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +39 -20
  309. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +168 -72
  310. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +222 -0
  311. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1052 -0
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +88 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +103 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +28 -14
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +91 -46
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +134 -0
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  321. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +250 -0
  322. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  323. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +94 -0
  324. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  325. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +213 -0
  326. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
  327. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
  328. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  329. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +218 -0
  330. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  331. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +146 -0
  332. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +18 -5
  333. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +42 -24
  334. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +46 -29
  335. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +219 -112
  336. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +52 -37
  337. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +282 -134
  338. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +64 -0
  339. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +183 -0
  340. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +27 -14
  341. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +94 -43
  342. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +284 -225
  343. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1673 -738
  344. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +10 -1
  345. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +7 -4
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +113 -54
  347. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +621 -216
  348. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +42 -27
  349. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +176 -87
  350. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +128 -83
  351. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +673 -259
  352. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  353. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +160 -0
  354. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +16 -3
  355. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +29 -15
  356. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +92 -73
  357. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +516 -260
  358. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +32 -18
  359. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +121 -62
  360. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
  361. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +379 -186
  362. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  363. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +112 -0
  364. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +35 -19
  365. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +149 -81
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +214 -0
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +29 -14
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +116 -56
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -9
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +58 -31
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -8
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +56 -27
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +20 -7
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +46 -24
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +36 -21
  377. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +137 -69
  378. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +32 -18
  379. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +137 -65
  380. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +27 -13
  381. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +99 -53
  382. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +38 -23
  383. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +170 -83
  384. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +51 -32
  385. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +273 -145
  386. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +54 -37
  387. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +268 -132
  388. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  389. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +201 -0
  390. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +10 -1
  391. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +4 -1
  392. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  393. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +139 -0
  394. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +24 -10
  395. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +76 -36
  396. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +31 -16
  397. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +118 -52
  398. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  399. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  400. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -7
  401. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -19
  402. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  403. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +127 -0
  404. data/src/core/ext/upb-generated/google/api/annotations.upb.c +23 -1
  405. data/src/core/ext/upb-generated/google/api/annotations.upb.h +24 -1
  406. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +155 -126
  407. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +791 -385
  408. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +159 -127
  409. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +869 -402
  410. data/src/core/ext/upb-generated/google/api/http.upb.c +44 -29
  411. data/src/core/ext/upb-generated/google/api/http.upb.h +236 -115
  412. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  413. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +111 -0
  414. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -6
  415. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +46 -22
  416. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -283
  417. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2263 -1053
  418. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -6
  419. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +44 -20
  420. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +16 -3
  421. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +29 -15
  422. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +48 -32
  423. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +197 -93
  424. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -6
  425. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +44 -20
  426. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +58 -37
  427. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +296 -149
  428. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -9
  429. data/src/core/ext/upb-generated/google/rpc/status.upb.h +60 -30
  430. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  431. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +319 -0
  432. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +33 -19
  433. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +111 -48
  434. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +136 -108
  435. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +753 -365
  436. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +28 -13
  437. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +90 -41
  438. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +23 -9
  439. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +70 -35
  440. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +82 -62
  441. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +448 -232
  442. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
  443. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +208 -0
  444. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  445. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  446. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +76 -14
  447. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +213 -57
  448. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +32 -8
  449. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +62 -18
  450. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +22 -1
  451. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +17 -1
  452. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +32 -6
  453. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -20
  454. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +31 -5
  455. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +57 -18
  456. data/src/core/ext/upb-generated/validate/validate.upb.c +407 -311
  457. data/src/core/ext/upb-generated/validate/validate.upb.h +2904 -1200
  458. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  459. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +278 -0
  460. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  461. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +108 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  463. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  464. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
  465. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +290 -0
  466. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  467. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +99 -0
  468. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +19 -6
  469. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +38 -19
  470. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +32 -18
  471. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +112 -55
  472. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +27 -13
  473. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +61 -30
  474. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  475. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +103 -0
  476. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +24 -11
  477. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +63 -30
  478. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +35 -21
  479. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +144 -70
  480. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +24 -11
  481. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +66 -30
  482. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +73 -0
  483. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +187 -0
  484. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  485. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +878 -0
  486. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  487. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +143 -0
  488. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  489. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +218 -0
  490. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +46 -0
  491. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +103 -0
  492. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  493. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  494. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  495. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +16 -61
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +67 -67
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  511. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  512. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  513. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  514. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  515. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  516. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +22 -52
  517. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  518. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +250 -281
  519. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  520. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  521. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  522. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +445 -458
  523. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +80 -70
  524. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  525. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
  527. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  528. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  529. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  530. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  531. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  532. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  533. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  534. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +121 -154
  535. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +75 -70
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -184
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +263 -252
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +20 -22
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  562. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  563. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  564. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +98 -83
  565. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +23 -13
  566. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  567. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  568. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  569. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  570. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +54 -62
  571. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +19 -19
  572. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
  573. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +17 -21
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  578. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  579. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  580. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  581. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  582. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +40 -47
  583. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +30 -25
  584. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +38 -38
  587. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +10 -10
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +845 -913
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +160 -160
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  591. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
  593. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  599. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  614. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  615. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  616. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  617. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  618. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  619. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  620. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +291 -311
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +173 -141
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +26 -16
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -211
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  636. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  637. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  638. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +19 -33
  639. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +22 -22
  640. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  641. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  642. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +22 -32
  643. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  644. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  645. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  646. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  647. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  648. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  649. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  650. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +24 -27
  651. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  652. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  653. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  654. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  655. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +17 -23
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  666. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  667. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  668. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  669. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  670. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  671. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  672. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  673. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  674. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  675. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  677. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  686. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  687. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  688. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  689. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  690. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  691. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  692. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  693. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  694. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  695. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  696. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  697. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  698. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +107 -164
  699. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  700. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  701. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  702. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  703. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  704. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  705. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  706. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  707. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  708. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  709. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  710. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  711. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  712. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  713. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  714. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  715. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  716. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +10 -18
  717. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  718. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +24 -33
  719. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  720. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +9 -8
  721. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  722. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +10 -13
  723. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  724. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +10 -14
  725. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  726. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  727. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  728. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  729. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  730. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  731. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  732. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  733. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  734. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  735. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  736. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  737. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  738. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +18 -22
  739. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  740. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +32 -38
  741. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  742. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +20 -26
  743. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  744. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  745. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  746. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +23 -27
  747. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +39 -45
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  750. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +25 -29
  751. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  752. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  753. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  754. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  755. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  756. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  757. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  758. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  759. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  760. data/src/core/ext/xds/certificate_provider_registry.cc +3 -3
  761. data/src/core/ext/xds/certificate_provider_store.cc +8 -0
  762. data/src/core/ext/xds/certificate_provider_store.h +10 -1
  763. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -4
  764. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  765. data/src/core/ext/xds/upb_utils.h +67 -0
  766. data/src/core/ext/xds/xds_api.cc +214 -3608
  767. data/src/core/ext/xds/xds_api.h +62 -580
  768. data/src/core/ext/xds/xds_bootstrap.cc +241 -167
  769. data/src/core/ext/xds/xds_bootstrap.h +43 -15
  770. data/src/core/ext/xds/xds_certificate_provider.cc +5 -3
  771. data/src/core/ext/xds/xds_certificate_provider.h +10 -2
  772. data/src/core/ext/xds/xds_channel_stack_modifier.cc +109 -0
  773. data/src/core/ext/xds/xds_channel_stack_modifier.h +53 -0
  774. data/src/core/ext/xds/xds_client.cc +872 -899
  775. data/src/core/ext/xds/xds_client.h +132 -159
  776. data/src/core/ext/xds/xds_client_stats.cc +31 -30
  777. data/src/core/ext/xds/xds_client_stats.h +12 -11
  778. data/src/core/ext/xds/xds_cluster.cc +453 -0
  779. data/src/core/ext/xds/xds_cluster.h +108 -0
  780. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  781. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  782. data/src/core/ext/xds/xds_common_types.cc +388 -0
  783. data/src/core/ext/xds/xds_common_types.h +95 -0
  784. data/src/core/ext/xds/xds_endpoint.cc +371 -0
  785. data/src/core/ext/xds/xds_endpoint.h +135 -0
  786. data/src/core/ext/xds/xds_http_fault_filter.cc +11 -10
  787. data/src/core/ext/xds/xds_http_fault_filter.h +6 -5
  788. data/src/core/ext/xds/xds_http_filters.cc +12 -5
  789. data/src/core/ext/xds/xds_http_filters.h +4 -4
  790. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  791. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  792. data/src/core/ext/xds/xds_listener.cc +1039 -0
  793. data/src/core/ext/xds/xds_listener.h +220 -0
  794. data/src/core/{lib/transport/authority_override.h → ext/xds/xds_resource_type.cc} +11 -15
  795. data/src/core/ext/xds/xds_resource_type.h +98 -0
  796. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  797. data/src/core/ext/xds/xds_route_config.cc +1122 -0
  798. data/src/core/ext/xds/xds_route_config.h +218 -0
  799. data/src/core/ext/xds/xds_routing.cc +250 -0
  800. data/src/core/ext/xds/xds_routing.h +101 -0
  801. data/src/core/ext/xds/xds_server_config_fetcher.cc +1057 -289
  802. data/src/core/lib/address_utils/parse_address.cc +26 -8
  803. data/src/core/lib/address_utils/parse_address.h +5 -0
  804. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  805. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  806. data/src/core/lib/avl/avl.h +452 -88
  807. data/src/core/lib/backoff/backoff.cc +9 -38
  808. data/src/core/lib/backoff/backoff.h +11 -11
  809. data/src/core/lib/channel/call_finalization.h +86 -0
  810. data/src/core/lib/channel/call_tracer.h +4 -1
  811. data/src/core/lib/channel/channel_args.cc +173 -16
  812. data/src/core/lib/channel/channel_args.h +214 -1
  813. data/src/core/lib/channel/channel_args_preconditioning.cc +42 -0
  814. data/src/core/lib/channel/channel_args_preconditioning.h +61 -0
  815. data/src/core/lib/channel/channel_stack.cc +15 -6
  816. data/src/core/lib/channel/channel_stack.h +39 -6
  817. data/src/core/lib/channel/channel_stack_builder.cc +24 -283
  818. data/src/core/lib/channel/channel_stack_builder.h +118 -157
  819. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  820. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  821. data/src/core/lib/channel/channel_trace.cc +8 -10
  822. data/src/core/lib/channel/channel_trace.h +2 -1
  823. data/src/core/lib/channel/channelz.cc +44 -39
  824. data/src/core/lib/channel/channelz.h +29 -29
  825. data/src/core/lib/channel/channelz_registry.cc +8 -7
  826. data/src/core/lib/channel/channelz_registry.h +1 -1
  827. data/src/core/lib/channel/connected_channel.cc +10 -6
  828. data/src/core/lib/channel/connected_channel.h +2 -2
  829. data/src/core/lib/channel/context.h +11 -0
  830. data/src/core/lib/channel/handshaker.cc +3 -2
  831. data/src/core/lib/channel/handshaker.h +2 -3
  832. data/src/core/lib/channel/handshaker_factory.h +10 -2
  833. data/src/core/lib/channel/handshaker_registry.cc +15 -70
  834. data/src/core/lib/channel/handshaker_registry.h +29 -12
  835. data/src/core/lib/channel/promise_based_filter.cc +1002 -0
  836. data/src/core/lib/channel/promise_based_filter.h +437 -0
  837. data/src/core/lib/channel/status_util.h +2 -2
  838. data/src/core/lib/compression/compression.cc +22 -114
  839. data/src/core/lib/compression/compression_internal.cc +139 -207
  840. data/src/core/lib/compression/compression_internal.h +64 -69
  841. data/src/core/lib/compression/message_compress.cc +13 -13
  842. data/src/core/lib/compression/message_compress.h +2 -2
  843. data/src/core/lib/config/core_configuration.cc +104 -0
  844. data/src/core/lib/config/core_configuration.h +196 -0
  845. data/src/core/lib/debug/stats.cc +1 -1
  846. data/src/core/lib/debug/stats.h +1 -0
  847. data/src/core/lib/debug/stats_data.cc +17 -20
  848. data/src/core/lib/debug/stats_data.h +19 -21
  849. data/src/core/lib/debug/trace.cc +1 -0
  850. data/src/core/lib/debug/trace.h +4 -3
  851. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -2
  852. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
  853. data/src/core/lib/{iomgr/event_engine/iomgr.h → event_engine/default_event_engine_factory.cc} +11 -8
  854. data/src/core/lib/event_engine/event_engine.cc +21 -19
  855. data/src/core/lib/event_engine/event_engine_factory.h +36 -0
  856. data/src/core/lib/event_engine/memory_allocator.cc +66 -0
  857. data/src/core/lib/event_engine/resolved_address.cc +39 -0
  858. data/src/core/lib/event_engine/sockaddr.cc +3 -3
  859. data/src/core/lib/gpr/alloc.cc +4 -3
  860. data/src/core/lib/gpr/atm.cc +1 -1
  861. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  862. data/src/core/lib/gpr/env_linux.cc +1 -2
  863. data/src/core/lib/gpr/env_posix.cc +2 -3
  864. data/src/core/lib/gpr/log.cc +3 -3
  865. data/src/core/lib/gpr/log_android.cc +3 -2
  866. data/src/core/lib/gpr/log_linux.cc +7 -4
  867. data/src/core/lib/gpr/log_posix.cc +6 -3
  868. data/src/core/lib/gpr/string.cc +2 -2
  869. data/src/core/lib/gpr/string.h +2 -2
  870. data/src/core/lib/gpr/sync.cc +2 -2
  871. data/src/core/lib/gpr/sync_abseil.cc +7 -6
  872. data/src/core/lib/gpr/sync_posix.cc +4 -3
  873. data/src/core/lib/gpr/time.cc +5 -3
  874. data/src/core/lib/gpr/time_windows.cc +3 -2
  875. data/src/core/lib/gpr/tls.h +126 -40
  876. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  877. data/src/core/lib/gpr/useful.h +97 -32
  878. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  879. data/src/core/lib/gprpp/bitset.h +207 -0
  880. data/src/core/lib/gprpp/capture.h +76 -0
  881. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  882. data/src/core/lib/{transport/authority_override.cc → gprpp/construct_destruct.h} +16 -17
  883. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  884. data/src/core/lib/gprpp/debug_location.h +2 -0
  885. data/src/core/lib/gprpp/dual_ref_counted.h +25 -26
  886. data/src/core/lib/gprpp/fork.cc +14 -12
  887. data/src/core/lib/gprpp/fork.h +4 -4
  888. data/src/core/lib/gprpp/global_config.h +1 -2
  889. data/src/core/lib/gprpp/global_config_env.cc +14 -14
  890. data/src/core/lib/gprpp/global_config_env.h +2 -2
  891. data/src/core/lib/gprpp/global_config_generic.h +2 -2
  892. data/src/core/lib/gprpp/manual_constructor.h +10 -8
  893. data/src/core/lib/gprpp/match.h +73 -0
  894. data/src/core/lib/gprpp/memory.h +9 -3
  895. data/src/core/lib/gprpp/mpscq.cc +7 -7
  896. data/src/core/lib/gprpp/mpscq.h +6 -5
  897. data/src/core/lib/gprpp/orphanable.h +4 -4
  898. data/src/core/lib/gprpp/overload.h +59 -0
  899. data/src/core/lib/gprpp/ref_counted.h +21 -19
  900. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  901. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  902. data/src/core/lib/gprpp/status_helper.cc +65 -37
  903. data/src/core/lib/gprpp/status_helper.h +14 -16
  904. data/src/core/lib/gprpp/sync.h +3 -1
  905. data/src/core/lib/gprpp/table.h +434 -0
  906. data/src/core/lib/gprpp/thd_posix.cc +5 -5
  907. data/src/core/lib/gprpp/thd_windows.cc +4 -11
  908. data/src/core/lib/gprpp/time.cc +198 -0
  909. data/src/core/lib/gprpp/time.h +292 -0
  910. data/src/core/lib/gprpp/time_util.cc +2 -2
  911. data/src/core/lib/gprpp/time_util.h +2 -2
  912. data/src/core/lib/http/format_request.cc +29 -25
  913. data/src/core/lib/http/format_request.h +8 -6
  914. data/src/core/lib/http/httpcli.cc +298 -208
  915. data/src/core/lib/http/httpcli.h +183 -85
  916. data/src/core/lib/http/httpcli_security_connector.cc +67 -81
  917. data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
  918. data/src/core/lib/http/parser.cc +82 -11
  919. data/src/core/lib/http/parser.h +16 -2
  920. data/src/core/lib/iomgr/buffer_list.cc +11 -10
  921. data/src/core/lib/iomgr/buffer_list.h +19 -20
  922. data/src/core/lib/iomgr/call_combiner.cc +45 -16
  923. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  924. data/src/core/lib/iomgr/closure.h +29 -9
  925. data/src/core/lib/iomgr/combiner.cc +34 -26
  926. data/src/core/lib/iomgr/combiner.h +1 -0
  927. data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
  928. data/src/core/lib/iomgr/endpoint.cc +0 -4
  929. data/src/core/lib/iomgr/endpoint.h +1 -4
  930. data/src/core/lib/iomgr/endpoint_cfstream.cc +15 -42
  931. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  932. data/src/core/lib/iomgr/endpoint_pair.h +1 -0
  933. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +1 -2
  934. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -9
  935. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  936. data/src/core/lib/iomgr/error.cc +123 -59
  937. data/src/core/lib/iomgr/error.h +73 -20
  938. data/src/core/lib/iomgr/error_cfstream.cc +7 -2
  939. data/src/core/lib/iomgr/error_internal.h +1 -0
  940. data/src/core/lib/iomgr/ev_apple.cc +6 -5
  941. data/src/core/lib/iomgr/ev_epoll1_linux.cc +25 -31
  942. data/src/core/lib/iomgr/ev_poll_posix.cc +49 -52
  943. data/src/core/lib/iomgr/ev_posix.cc +10 -12
  944. data/src/core/lib/iomgr/ev_posix.h +1 -1
  945. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  946. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  947. data/src/core/lib/iomgr/event_engine/endpoint.cc +7 -27
  948. data/src/core/lib/iomgr/event_engine/endpoint.h +1 -2
  949. data/src/core/lib/iomgr/event_engine/iomgr.cc +10 -30
  950. data/src/core/lib/iomgr/event_engine/pollset.cc +6 -6
  951. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  952. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  953. data/src/core/lib/iomgr/event_engine/resolver.cc +70 -47
  954. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  955. data/src/core/lib/iomgr/event_engine/tcp.cc +70 -37
  956. data/src/core/lib/iomgr/event_engine/timer.cc +13 -8
  957. data/src/core/lib/iomgr/exec_ctx.cc +28 -109
  958. data/src/core/lib/iomgr/exec_ctx.h +28 -52
  959. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  960. data/src/core/lib/iomgr/executor/mpmcqueue.h +7 -11
  961. data/src/core/lib/iomgr/executor/threadpool.cc +2 -2
  962. data/src/core/lib/iomgr/executor/threadpool.h +2 -1
  963. data/src/core/lib/iomgr/executor.cc +30 -39
  964. data/src/core/lib/iomgr/executor.h +1 -1
  965. data/src/core/lib/iomgr/fork_posix.cc +2 -1
  966. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  967. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  968. data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
  969. data/src/core/lib/iomgr/iocp_windows.cc +10 -9
  970. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  971. data/src/core/lib/iomgr/iomgr.cc +3 -1
  972. data/src/core/lib/iomgr/iomgr.h +2 -2
  973. data/src/core/lib/iomgr/iomgr_internal.cc +6 -10
  974. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  975. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  976. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  977. data/src/core/lib/iomgr/iomgr_windows.cc +3 -4
  978. data/src/core/lib/iomgr/load_file.cc +2 -2
  979. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  980. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  981. data/src/core/lib/iomgr/polling_entity.h +6 -0
  982. data/src/core/lib/iomgr/pollset.cc +1 -1
  983. data/src/core/lib/iomgr/pollset.h +4 -4
  984. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  985. data/src/core/lib/iomgr/pollset_windows.cc +2 -2
  986. data/src/core/lib/iomgr/port.h +6 -16
  987. data/src/core/lib/iomgr/python_util.h +1 -0
  988. data/src/core/lib/iomgr/resolve_address.cc +7 -25
  989. data/src/core/lib/iomgr/resolve_address.h +47 -48
  990. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  991. data/src/core/lib/iomgr/resolve_address_posix.cc +90 -78
  992. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  993. data/src/core/lib/iomgr/resolve_address_windows.cc +99 -82
  994. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  995. data/src/core/lib/iomgr/resolved_address.h +39 -0
  996. data/src/core/lib/iomgr/sockaddr.h +1 -1
  997. data/src/core/lib/iomgr/{socket_utils_uv.cc → sockaddr_utils_posix.cc} +21 -8
  998. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  999. data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
  1000. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  1001. data/src/core/lib/iomgr/socket_mutator.h +2 -2
  1002. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -22
  1003. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  1004. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  1005. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  1006. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  1007. data/src/core/lib/iomgr/tcp_client.cc +1 -1
  1008. data/src/core/lib/iomgr/tcp_client.h +5 -2
  1009. data/src/core/lib/iomgr/tcp_client_cfstream.cc +8 -24
  1010. data/src/core/lib/iomgr/tcp_client_posix.cc +17 -27
  1011. data/src/core/lib/iomgr/tcp_client_posix.h +4 -2
  1012. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -10
  1013. data/src/core/lib/iomgr/tcp_posix.cc +143 -120
  1014. data/src/core/lib/iomgr/tcp_posix.h +9 -12
  1015. data/src/core/lib/iomgr/tcp_server.h +4 -3
  1016. data/src/core/lib/iomgr/tcp_server_posix.cc +40 -29
  1017. data/src/core/lib/iomgr/tcp_server_utils_posix.h +21 -17
  1018. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -2
  1019. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
  1020. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  1021. data/src/core/lib/iomgr/tcp_server_windows.cc +6 -10
  1022. data/src/core/lib/iomgr/tcp_windows.cc +22 -39
  1023. data/src/core/lib/iomgr/tcp_windows.h +1 -1
  1024. data/src/core/lib/iomgr/timer.cc +3 -2
  1025. data/src/core/lib/iomgr/timer.h +11 -7
  1026. data/src/core/lib/iomgr/timer_generic.cc +113 -124
  1027. data/src/core/lib/iomgr/timer_generic.h +1 -0
  1028. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  1029. data/src/core/lib/iomgr/timer_manager.cc +15 -14
  1030. data/src/core/lib/iomgr/unix_sockets_posix.cc +25 -39
  1031. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -10
  1032. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  1033. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -0
  1034. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -3
  1035. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -0
  1036. data/src/core/lib/iomgr/work_serializer.cc +120 -44
  1037. data/src/core/lib/iomgr/work_serializer.h +17 -5
  1038. data/src/core/lib/json/json_reader.cc +92 -52
  1039. data/src/core/lib/json/json_util.cc +71 -3
  1040. data/src/core/lib/json/json_util.h +67 -117
  1041. data/src/core/lib/json/json_writer.cc +0 -3
  1042. data/src/core/lib/matchers/matchers.cc +1 -1
  1043. data/src/core/lib/matchers/matchers.h +0 -1
  1044. data/src/core/lib/profiling/basic_timers.cc +8 -6
  1045. data/src/core/lib/profiling/stap_timers.cc +2 -2
  1046. data/src/core/lib/promise/activity.cc +121 -0
  1047. data/src/core/lib/promise/activity.h +540 -0
  1048. data/src/core/lib/promise/arena_promise.h +188 -0
  1049. data/src/core/lib/promise/call_push_pull.h +144 -0
  1050. data/src/core/lib/promise/context.h +86 -0
  1051. data/src/core/lib/promise/detail/basic_seq.h +496 -0
  1052. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  1053. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1054. data/src/core/lib/promise/detail/status.h +50 -0
  1055. data/src/core/lib/promise/detail/switch.h +1455 -0
  1056. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1057. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1058. data/src/core/lib/promise/latch.h +104 -0
  1059. data/src/core/lib/promise/loop.h +134 -0
  1060. data/src/core/lib/promise/map.h +88 -0
  1061. data/src/core/lib/promise/poll.h +66 -0
  1062. data/src/core/lib/promise/promise.h +95 -0
  1063. data/src/core/lib/promise/race.h +84 -0
  1064. data/src/core/lib/promise/seq.h +89 -0
  1065. data/src/core/lib/promise/sleep.cc +74 -0
  1066. data/src/core/lib/promise/sleep.h +66 -0
  1067. data/src/core/lib/promise/try_seq.h +157 -0
  1068. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  1069. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  1070. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +32 -29
  1071. data/src/core/lib/resolver/resolver_registry.cc +156 -0
  1072. data/src/core/lib/resolver/resolver_registry.h +113 -0
  1073. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  1074. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
  1075. data/src/core/lib/resource_quota/api.cc +83 -0
  1076. data/src/core/lib/resource_quota/api.h +40 -0
  1077. data/src/core/lib/{gprpp → resource_quota}/arena.cc +18 -14
  1078. data/src/core/lib/{gprpp → resource_quota}/arena.h +37 -16
  1079. data/src/core/lib/resource_quota/memory_quota.cc +478 -0
  1080. data/src/core/lib/resource_quota/memory_quota.h +457 -0
  1081. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1082. data/src/core/lib/resource_quota/resource_quota.h +66 -0
  1083. data/src/core/lib/resource_quota/thread_quota.cc +43 -0
  1084. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  1085. data/src/core/lib/resource_quota/trace.cc +19 -0
  1086. data/src/core/{ext/filters/max_age/max_age_filter.h → lib/resource_quota/trace.h} +6 -8
  1087. data/src/core/lib/security/authorization/authorization_policy_provider.h +12 -4
  1088. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  1089. data/src/core/lib/security/authorization/evaluate_args.cc +39 -36
  1090. data/src/core/lib/security/authorization/evaluate_args.h +3 -2
  1091. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  1092. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  1093. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +106 -0
  1094. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +50 -0
  1095. data/src/core/lib/security/authorization/matchers.cc +227 -0
  1096. data/src/core/lib/security/authorization/matchers.h +211 -0
  1097. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  1098. data/src/core/lib/security/authorization/rbac_policy.h +171 -0
  1099. data/src/core/lib/security/context/security_context.cc +15 -10
  1100. data/src/core/lib/security/context/security_context.h +9 -2
  1101. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  1102. data/src/core/lib/security/credentials/alts/alts_credentials.h +10 -0
  1103. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  1104. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  1105. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  1106. data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
  1107. data/src/core/lib/security/credentials/call_creds_util.h +42 -0
  1108. data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
  1109. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
  1110. data/src/core/lib/security/credentials/composite/composite_credentials.cc +28 -86
  1111. data/src/core/lib/security/credentials/composite/composite_credentials.h +23 -10
  1112. data/src/core/lib/security/credentials/credentials.cc +11 -10
  1113. data/src/core/lib/security/credentials/credentials.h +81 -82
  1114. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +61 -59
  1115. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
  1116. data/src/core/lib/security/credentials/external/aws_request_signer.cc +3 -3
  1117. data/src/core/lib/security/credentials/external/external_account_credentials.cc +112 -68
  1118. data/src/core/lib/security/credentials/external/external_account_credentials.h +6 -9
  1119. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +0 -1
  1120. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +35 -18
  1121. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -0
  1122. data/src/core/lib/security/credentials/fake/fake_credentials.cc +23 -27
  1123. data/src/core/lib/security/credentials/fake/fake_credentials.h +22 -21
  1124. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
  1125. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +77 -20
  1126. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -3
  1127. data/src/core/lib/security/credentials/iam/iam_credentials.cc +23 -29
  1128. data/src/core/lib/security/credentials/iam/iam_credentials.h +15 -9
  1129. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +25 -26
  1130. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  1131. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -7
  1132. data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
  1133. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +56 -51
  1134. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +27 -15
  1135. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +59 -54
  1136. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -4
  1137. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  1138. data/src/core/lib/security/credentials/local/local_credentials.h +10 -0
  1139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +160 -181
  1140. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +61 -33
  1141. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +98 -156
  1142. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +56 -27
  1143. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +11 -18
  1144. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +14 -4
  1145. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +3 -2
  1146. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +10 -6
  1147. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -13
  1148. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +62 -12
  1149. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +209 -0
  1150. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +145 -0
  1151. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +33 -87
  1152. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +75 -151
  1153. data/src/core/lib/security/credentials/tls/tls_credentials.cc +30 -16
  1154. data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
  1155. data/src/core/lib/security/credentials/xds/xds_credentials.cc +51 -58
  1156. data/src/core/lib/security/credentials/xds/xds_credentials.h +37 -6
  1157. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +11 -17
  1158. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  1159. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -24
  1160. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +0 -2
  1161. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +8 -18
  1162. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +11 -16
  1163. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  1164. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +4 -5
  1165. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -19
  1166. data/src/core/lib/security/security_connector/security_connector.cc +8 -15
  1167. data/src/core/lib/security/security_connector/security_connector.h +26 -22
  1168. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +14 -20
  1169. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
  1170. data/src/core/lib/security/security_connector/ssl_utils.cc +41 -36
  1171. data/src/core/lib/security/security_connector/ssl_utils.h +14 -18
  1172. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +366 -211
  1173. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +69 -48
  1174. data/src/core/lib/security/transport/auth_filters.h +39 -5
  1175. data/src/core/lib/security/transport/client_auth_filter.cc +98 -363
  1176. data/src/core/lib/security/transport/secure_endpoint.cc +202 -143
  1177. data/src/core/lib/security/transport/secure_endpoint.h +2 -1
  1178. data/src/core/lib/security/transport/security_handshaker.cc +95 -54
  1179. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  1180. data/src/core/lib/security/transport/server_auth_filter.cc +41 -37
  1181. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  1182. data/src/core/lib/security/util/json_util.cc +6 -8
  1183. data/src/core/lib/service_config/service_config.h +82 -0
  1184. data/src/core/lib/service_config/service_config_call_data.h +72 -0
  1185. data/src/core/{ext/filters/client_channel/service_config.cc → lib/service_config/service_config_impl.cc} +20 -17
  1186. data/src/core/{ext/filters/client_channel/service_config.h → lib/service_config/service_config_impl.h} +16 -18
  1187. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +31 -27
  1188. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.h +39 -28
  1189. data/src/core/lib/slice/percent_encoding.cc +84 -97
  1190. data/src/core/lib/slice/percent_encoding.h +23 -28
  1191. data/src/core/lib/slice/slice.cc +80 -200
  1192. data/src/core/lib/slice/slice.h +384 -0
  1193. data/src/core/lib/{iomgr/is_epollexclusive_available.h → slice/slice_api.cc} +15 -12
  1194. data/src/core/lib/slice/slice_buffer.cc +10 -7
  1195. data/src/core/lib/slice/slice_internal.h +15 -277
  1196. data/src/core/lib/slice/slice_refcount.cc +35 -0
  1197. data/src/core/lib/slice/slice_refcount.h +46 -0
  1198. data/src/core/lib/slice/slice_refcount_base.h +61 -0
  1199. data/src/core/lib/slice/slice_split.cc +100 -0
  1200. data/src/core/lib/slice/slice_split.h +40 -0
  1201. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  1202. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  1203. data/src/core/lib/surface/api_trace.cc +2 -1
  1204. data/src/core/lib/surface/api_trace.h +1 -0
  1205. data/src/core/lib/surface/builtins.cc +49 -0
  1206. data/src/core/lib/surface/builtins.h +26 -0
  1207. data/src/core/lib/surface/byte_buffer_reader.cc +1 -1
  1208. data/src/core/lib/surface/call.cc +1142 -1247
  1209. data/src/core/lib/surface/call.h +8 -28
  1210. data/src/core/lib/surface/call_details.cc +2 -2
  1211. data/src/core/lib/surface/call_log_batch.cc +2 -2
  1212. data/src/core/lib/surface/channel.cc +72 -103
  1213. data/src/core/lib/surface/channel.h +15 -23
  1214. data/src/core/lib/surface/channel_init.cc +22 -76
  1215. data/src/core/lib/surface/channel_init.h +44 -40
  1216. data/src/core/lib/surface/channel_ping.cc +1 -2
  1217. data/src/core/lib/surface/channel_stack_type.cc +2 -1
  1218. data/src/core/lib/surface/completion_queue.cc +70 -78
  1219. data/src/core/lib/surface/completion_queue_factory.cc +2 -1
  1220. data/src/core/lib/surface/completion_queue_factory.h +1 -0
  1221. data/src/core/lib/surface/event_string.cc +1 -0
  1222. data/src/core/lib/surface/init.cc +81 -57
  1223. data/src/core/lib/surface/init.h +0 -3
  1224. data/src/core/lib/surface/lame_client.cc +47 -32
  1225. data/src/core/lib/surface/lame_client.h +1 -1
  1226. data/src/core/lib/surface/metadata_array.cc +2 -2
  1227. data/src/core/lib/surface/server.cc +71 -118
  1228. data/src/core/lib/surface/server.h +40 -37
  1229. data/src/core/lib/surface/validate_metadata.cc +49 -18
  1230. data/src/core/lib/surface/version.cc +2 -2
  1231. data/src/core/lib/transport/bdp_estimator.cc +11 -12
  1232. data/src/core/lib/transport/bdp_estimator.h +2 -2
  1233. data/src/core/lib/transport/byte_stream.cc +6 -0
  1234. data/src/core/lib/transport/byte_stream.h +1 -0
  1235. data/src/core/lib/transport/connectivity_state.cc +8 -5
  1236. data/src/core/lib/transport/connectivity_state.h +2 -2
  1237. data/src/core/lib/transport/error_utils.cc +48 -20
  1238. data/src/core/lib/transport/error_utils.h +3 -2
  1239. data/src/core/lib/transport/metadata_batch.h +1352 -171
  1240. data/src/core/lib/transport/parsed_metadata.cc +37 -0
  1241. data/src/core/lib/transport/parsed_metadata.h +401 -0
  1242. data/src/core/lib/transport/pid_controller.cc +4 -4
  1243. data/src/core/lib/transport/status_conversion.cc +2 -2
  1244. data/src/core/lib/transport/status_conversion.h +1 -1
  1245. data/src/core/lib/transport/timeout_encoding.cc +204 -67
  1246. data/src/core/lib/transport/timeout_encoding.h +40 -10
  1247. data/src/core/lib/transport/transport.cc +11 -32
  1248. data/src/core/lib/transport/transport.h +103 -4
  1249. data/src/core/lib/transport/transport_impl.h +14 -0
  1250. data/src/core/lib/transport/transport_op_string.cc +7 -29
  1251. data/src/core/lib/uri/uri_parser.cc +237 -63
  1252. data/src/core/lib/uri/uri_parser.h +39 -23
  1253. data/src/core/plugin_registry/grpc_plugin_registry.cc +69 -102
  1254. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1255. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
  1256. data/src/core/tsi/alts/crypt/gsec.h +2 -3
  1257. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  1258. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  1259. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +31 -27
  1260. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
  1261. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1262. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +33 -15
  1263. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1264. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1265. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1266. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1267. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  1268. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1269. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  1270. data/src/core/tsi/fake_transport_security.cc +15 -7
  1271. data/src/core/tsi/local_transport_security.cc +42 -87
  1272. data/src/core/tsi/local_transport_security.h +1 -4
  1273. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1274. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1275. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  1276. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -53
  1277. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
  1278. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
  1279. data/src/core/tsi/ssl_transport_security.cc +229 -62
  1280. data/src/core/tsi/ssl_transport_security.h +50 -9
  1281. data/src/core/tsi/transport_security.cc +15 -3
  1282. data/src/core/tsi/transport_security.h +16 -1
  1283. data/src/core/tsi/transport_security_grpc.h +1 -0
  1284. data/src/core/tsi/transport_security_interface.h +28 -0
  1285. data/src/ruby/ext/grpc/extconf.rb +21 -11
  1286. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1287. data/src/ruby/ext/grpc/rb_call.c +5 -5
  1288. data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
  1289. data/src/ruby/ext/grpc/rb_channel.c +15 -10
  1290. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1291. data/src/ruby/ext/grpc/rb_channel_credentials.c +4 -4
  1292. data/src/ruby/ext/grpc/rb_channel_credentials.h +1 -0
  1293. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1294. data/src/ruby/ext/grpc/rb_compression_options.c +5 -4
  1295. data/src/ruby/ext/grpc/rb_event_thread.c +4 -4
  1296. data/src/ruby/ext/grpc/rb_grpc.c +5 -4
  1297. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1298. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +30 -34
  1299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +45 -51
  1300. data/src/ruby/ext/grpc/rb_server.c +13 -9
  1301. data/src/ruby/ext/grpc/rb_server_credentials.c +3 -3
  1302. data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
  1303. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +8 -5
  1304. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +3 -1
  1305. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +6 -5
  1306. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +3 -1
  1307. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1308. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1309. data/src/ruby/lib/grpc/version.rb +1 -1
  1310. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1311. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  1312. data/src/ruby/pb/test/client.rb +769 -0
  1313. data/src/ruby/pb/test/server.rb +252 -0
  1314. data/src/ruby/pb/test/xds_client.rb +415 -0
  1315. data/src/ruby/spec/client_server_spec.rb +1 -1
  1316. data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
  1317. data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
  1318. data/third_party/abseil-cpp/absl/base/config.h +67 -37
  1319. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1320. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  1321. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
  1322. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1323. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
  1324. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  1325. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +15 -10
  1326. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
  1327. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  1328. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1329. data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
  1330. data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
  1331. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1332. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
  1333. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
  1334. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
  1335. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1336. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
  1337. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
  1338. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1339. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  1340. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  1341. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
  1342. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1343. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  1344. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  1345. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1346. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  1347. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1348. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  1349. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
  1350. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1351. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  1352. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  1353. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1354. data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
  1355. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  1356. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  1357. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1358. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1359. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
  1360. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  1361. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1362. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1363. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  1364. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  1365. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  1366. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1367. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1368. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1369. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1370. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1371. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1372. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1373. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1374. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  1375. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  1376. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1377. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1378. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1379. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  1380. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1381. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1382. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1383. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1384. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1385. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  1386. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  1387. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1388. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  1389. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1390. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1391. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1392. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1393. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1394. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1395. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  1396. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1397. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1398. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  1399. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1400. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  1401. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  1402. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  1403. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1404. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1405. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1406. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1407. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  1408. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1409. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1410. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  1411. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
  1412. data/third_party/abseil-cpp/absl/status/status.cc +9 -17
  1413. data/third_party/abseil-cpp/absl/status/status.h +19 -15
  1414. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1415. data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
  1416. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1417. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1418. data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
  1419. data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
  1420. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1421. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
  1422. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
  1423. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  1424. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  1425. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  1426. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  1427. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  1428. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  1429. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  1430. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1431. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
  1432. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
  1433. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1434. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1435. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1436. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1437. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1438. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1439. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  1440. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1441. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  1442. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1443. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  1444. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1445. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
  1446. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1447. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
  1448. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1449. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  1450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1451. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
  1452. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1453. data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
  1454. data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
  1455. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1456. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1457. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  1458. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  1459. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1460. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  1461. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1462. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1463. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
  1464. data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
  1465. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1466. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1467. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1468. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1469. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1470. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1471. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1472. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1473. data/third_party/abseil-cpp/absl/time/time.h +67 -36
  1474. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1475. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1476. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  1477. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1478. data/third_party/boringssl-with-bazel/err_data.c +685 -673
  1479. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +67 -54
  1480. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  1481. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1482. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1483. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1484. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +55 -37
  1485. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1486. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +269 -272
  1487. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1488. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +4 -4
  1489. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  1490. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +1 -40
  1491. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1492. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1493. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1494. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1495. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1496. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1497. data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_locl.h → internal.h} +86 -1
  1498. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +57 -281
  1499. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +291 -199
  1500. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +9 -9
  1501. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -14
  1502. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1503. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -1
  1504. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1505. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +24 -8
  1506. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1507. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1508. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1509. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1510. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1511. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1512. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  1513. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1514. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1515. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  1516. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1517. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  1518. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1519. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +6 -3
  1520. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1521. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1522. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1523. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +26 -9
  1524. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1525. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  1526. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1527. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1528. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  1529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  1532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  1534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  1535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +5 -9
  1537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +2 -2
  1538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +4 -6
  1539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  1540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  1541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  1543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  1544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  1545. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +36 -2
  1546. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1547. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1548. data/third_party/boringssl-with-bazel/src/crypto/internal.h +62 -2
  1549. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1550. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1551. data/third_party/boringssl-with-bazel/src/crypto/mem.c +32 -9
  1552. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +7 -3
  1553. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1554. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1555. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1556. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1557. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1558. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1559. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +38 -4
  1560. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  1561. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1562. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1563. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +2 -2
  1564. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +1 -1
  1565. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1566. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -22
  1567. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
  1568. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1569. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
  1570. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1571. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1572. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
  1573. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1574. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1575. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1576. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +233 -4
  1577. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1578. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +15 -4
  1579. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -5
  1580. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  1581. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  1582. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +6 -23
  1583. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +2 -2
  1584. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1585. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  1586. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +25 -22
  1587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -54
  1588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  1589. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +1 -0
  1590. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  1591. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +1 -3
  1592. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  1593. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +9 -11
  1594. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1595. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +23 -21
  1596. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +12 -11
  1597. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +232 -11
  1598. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
  1599. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +2 -2
  1600. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1601. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +2 -1
  1602. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1603. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +5 -4
  1604. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  1605. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +18 -8
  1606. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  1607. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +1 -0
  1608. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -7
  1609. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1610. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  1611. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +23 -4
  1612. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1613. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1614. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -13
  1615. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  1616. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +76 -31
  1617. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1504 -561
  1618. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -12
  1619. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -6
  1620. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1621. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  1622. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1623. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  1624. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -3
  1625. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1626. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1627. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +3 -0
  1628. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1629. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1630. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1631. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +35 -55
  1632. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1633. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +26 -1
  1634. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1635. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1636. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1637. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +5 -4
  1638. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  1639. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +24 -18
  1640. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1641. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1642. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +29 -28
  1643. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  1644. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +110 -26
  1645. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  1646. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +725 -189
  1647. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  1648. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +52 -16
  1649. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +9 -16
  1650. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +310 -359
  1651. data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +110 -159
  1652. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +24 -13
  1653. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +145 -142
  1654. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +106 -99
  1655. data/third_party/boringssl-with-bazel/src/ssl/internal.h +90 -51
  1656. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +1 -2
  1657. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  1658. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +11 -5
  1659. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -51
  1660. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +121 -65
  1661. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  1662. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1663. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1664. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  1665. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +210 -212
  1666. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  1667. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +48 -34
  1668. data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
  1669. data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
  1670. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1671. data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
  1672. data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
  1673. data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
  1674. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1675. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1676. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1677. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1678. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1679. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1680. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1681. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1682. data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
  1683. data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
  1684. data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
  1685. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1686. data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
  1687. data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
  1688. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1689. data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
  1690. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1691. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1692. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1693. data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
  1694. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1695. data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
  1696. data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
  1697. data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
  1698. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1699. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1700. data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
  1701. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1702. data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
  1703. data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
  1704. data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
  1705. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1706. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1707. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1708. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1709. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1710. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1711. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1712. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1713. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1714. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1715. data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
  1716. data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
  1717. data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
  1718. data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
  1719. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1720. data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
  1721. data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
  1722. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1723. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1724. data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
  1725. data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
  1726. data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
  1727. data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
  1728. data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
  1729. data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
  1730. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1731. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1732. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1733. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1734. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1735. data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
  1736. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1737. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1738. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1739. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1740. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1741. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1742. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1743. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1744. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1745. data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
  1746. data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
  1747. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1748. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1749. data/third_party/re2/re2/compile.cc +91 -109
  1750. data/third_party/re2/re2/dfa.cc +27 -39
  1751. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1752. data/third_party/re2/re2/filtered_re2.h +10 -5
  1753. data/third_party/re2/re2/nfa.cc +1 -1
  1754. data/third_party/re2/re2/parse.cc +42 -23
  1755. data/third_party/re2/re2/perl_groups.cc +34 -34
  1756. data/third_party/re2/re2/prefilter.cc +3 -2
  1757. data/third_party/re2/re2/prog.cc +182 -4
  1758. data/third_party/re2/re2/prog.h +28 -9
  1759. data/third_party/re2/re2/re2.cc +87 -118
  1760. data/third_party/re2/re2/re2.h +156 -141
  1761. data/third_party/re2/re2/regexp.cc +12 -5
  1762. data/third_party/re2/re2/regexp.h +8 -2
  1763. data/third_party/re2/re2/set.cc +31 -9
  1764. data/third_party/re2/re2/set.h +9 -4
  1765. data/third_party/re2/re2/simplify.cc +11 -3
  1766. data/third_party/re2/re2/tostring.cc +1 -1
  1767. data/third_party/re2/re2/walker-inl.h +1 -1
  1768. data/third_party/re2/util/mutex.h +2 -2
  1769. data/third_party/re2/util/pcre.h +3 -3
  1770. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1771. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1772. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1773. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1774. data/third_party/upb/upb/decode.c +774 -351
  1775. data/third_party/upb/upb/decode.h +66 -12
  1776. data/third_party/upb/upb/decode_fast.c +596 -581
  1777. data/third_party/upb/upb/decode_fast.h +40 -13
  1778. data/third_party/upb/upb/decode_internal.h +211 -0
  1779. data/third_party/upb/upb/def.c +2151 -1068
  1780. data/third_party/upb/upb/def.h +352 -258
  1781. data/third_party/upb/upb/def.hpp +160 -161
  1782. data/third_party/upb/upb/encode.c +291 -165
  1783. data/third_party/upb/upb/encode.h +38 -13
  1784. data/third_party/upb/upb/json_encode.c +776 -0
  1785. data/third_party/upb/upb/json_encode.h +62 -0
  1786. data/third_party/upb/upb/msg.c +274 -102
  1787. data/third_party/upb/upb/msg.h +83 -582
  1788. data/third_party/upb/upb/msg_internal.h +831 -0
  1789. data/third_party/upb/upb/port_def.inc +93 -24
  1790. data/third_party/upb/upb/port_undef.inc +39 -1
  1791. data/third_party/upb/upb/reflection.c +312 -240
  1792. data/third_party/upb/upb/reflection.h +119 -67
  1793. data/third_party/upb/upb/reflection.hpp +37 -0
  1794. data/third_party/upb/upb/table.c +406 -197
  1795. data/third_party/upb/upb/table_internal.h +385 -0
  1796. data/third_party/upb/upb/text_encode.c +141 -90
  1797. data/third_party/upb/upb/text_encode.h +31 -5
  1798. data/third_party/upb/upb/upb.c +164 -66
  1799. data/third_party/upb/upb/upb.h +182 -146
  1800. data/third_party/upb/upb/upb.hpp +50 -23
  1801. data/third_party/upb/upb/upb_internal.h +68 -0
  1802. data/third_party/xxhash/xxhash.h +607 -352
  1803. data/third_party/zlib/crc32.c +966 -292
  1804. data/third_party/zlib/crc32.h +9441 -436
  1805. data/third_party/zlib/deflate.c +78 -30
  1806. data/third_party/zlib/deflate.h +12 -15
  1807. data/third_party/zlib/gzguts.h +3 -2
  1808. data/third_party/zlib/gzlib.c +5 -3
  1809. data/third_party/zlib/gzread.c +5 -7
  1810. data/third_party/zlib/gzwrite.c +25 -13
  1811. data/third_party/zlib/infback.c +2 -1
  1812. data/third_party/zlib/inffast.c +14 -14
  1813. data/third_party/zlib/inflate.c +39 -8
  1814. data/third_party/zlib/inflate.h +3 -2
  1815. data/third_party/zlib/inftrees.c +3 -3
  1816. data/third_party/zlib/trees.c +27 -48
  1817. data/third_party/zlib/zlib.h +123 -100
  1818. data/third_party/zlib/zutil.c +2 -2
  1819. data/third_party/zlib/zutil.h +12 -9
  1820. metadata +559 -260
  1821. data/include/grpc/event_engine/slice_allocator.h +0 -66
  1822. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1823. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -84
  1824. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
  1825. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  1826. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -197
  1827. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1828. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  1829. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -441
  1830. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -562
  1831. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  1832. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1833. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1834. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1835. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1836. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -125
  1837. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -91
  1838. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -213
  1839. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -54
  1840. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -77
  1841. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -129
  1842. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1843. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -66
  1844. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  1845. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -243
  1846. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  1847. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1848. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1849. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1850. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -56
  1851. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1852. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -56
  1853. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1854. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -56
  1855. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1856. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -56
  1857. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1858. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -56
  1859. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1860. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -124
  1861. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
  1862. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -77
  1863. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1864. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1865. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1866. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1867. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1868. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1869. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1870. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1871. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1872. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1873. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  1874. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  1875. data/src/core/lib/avl/avl.cc +0 -306
  1876. data/src/core/lib/compression/algorithm_metadata.h +0 -61
  1877. data/src/core/lib/compression/compression_args.cc +0 -135
  1878. data/src/core/lib/compression/compression_args.h +0 -56
  1879. data/src/core/lib/compression/stream_compression.cc +0 -80
  1880. data/src/core/lib/compression/stream_compression.h +0 -116
  1881. data/src/core/lib/compression/stream_compression_gzip.cc +0 -230
  1882. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1883. data/src/core/lib/compression/stream_compression_identity.cc +0 -90
  1884. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1885. data/src/core/lib/gpr/tls_gcc.h +0 -52
  1886. data/src/core/lib/gpr/tls_msvc.h +0 -54
  1887. data/src/core/lib/gpr/tls_pthread.cc +0 -30
  1888. data/src/core/lib/gpr/tls_pthread.h +0 -56
  1889. data/src/core/lib/gpr/tls_stdcpp.h +0 -48
  1890. data/src/core/lib/gprpp/atomic.h +0 -104
  1891. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  1892. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1661
  1893. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  1894. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1895. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1896. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  1897. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1898. data/src/core/lib/iomgr/pollset_custom.cc +0 -106
  1899. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1900. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -48
  1901. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1902. data/src/core/lib/iomgr/pollset_uv.cc +0 -95
  1903. data/src/core/lib/iomgr/pollset_uv.h +0 -36
  1904. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1905. data/src/core/lib/iomgr/resolve_address_custom.h +0 -45
  1906. data/src/core/lib/iomgr/resource_quota.cc +0 -1019
  1907. data/src/core/lib/iomgr/resource_quota.h +0 -177
  1908. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  1909. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1910. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -160
  1911. data/src/core/lib/iomgr/tcp_custom.cc +0 -389
  1912. data/src/core/lib/iomgr/tcp_custom.h +0 -85
  1913. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -484
  1914. data/src/core/lib/iomgr/tcp_uv.cc +0 -421
  1915. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  1916. data/src/core/lib/iomgr/timer_custom.h +0 -43
  1917. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  1918. data/src/core/lib/iomgr/udp_server.cc +0 -748
  1919. data/src/core/lib/iomgr/udp_server.h +0 -103
  1920. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -62
  1921. data/src/core/lib/slice/slice_intern.cc +0 -373
  1922. data/src/core/lib/slice/slice_utils.h +0 -200
  1923. data/src/core/lib/surface/init_secure.cc +0 -81
  1924. data/src/core/lib/transport/metadata.cc +0 -693
  1925. data/src/core/lib/transport/metadata.h +0 -446
  1926. data/src/core/lib/transport/metadata_batch.cc +0 -430
  1927. data/src/core/lib/transport/static_metadata.cc +0 -1249
  1928. data/src/core/lib/transport/static_metadata.h +0 -604
  1929. data/src/core/lib/transport/status_metadata.cc +0 -62
  1930. data/src/core/lib/transport/status_metadata.h +0 -48
  1931. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1932. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  1933. data/third_party/cares/cares/ares_getopt.c +0 -122
  1934. data/third_party/cares/cares/ares_getopt.h +0 -53
  1935. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  1936. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  1937. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  1938. data/third_party/upb/third_party/wyhash/wyhash.h +0 -145
  1939. data/third_party/upb/upb/decode.int.h +0 -163
  1940. data/third_party/upb/upb/table.int.h +0 -475
  1941. data/third_party/upb/upb/upb.int.h +0 -29
@@ -19,7 +19,6 @@
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
21
  #include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
22
- #include "src/core/ext/transport/chttp2/transport/internal.h"
23
22
 
24
23
  #include <assert.h>
25
24
  #include <stddef.h>
@@ -32,6 +31,7 @@
32
31
  #include <grpc/support/log.h>
33
32
 
34
33
  #include "src/core/ext/transport/chttp2/transport/bin_encoder.h"
34
+ #include "src/core/ext/transport/chttp2/transport/internal.h"
35
35
  #include "src/core/lib/debug/stats.h"
36
36
  #include "src/core/lib/gpr/string.h"
37
37
  #include "src/core/lib/profiling/timers.h"
@@ -50,21 +50,7 @@
50
50
 
51
51
  namespace grpc_core {
52
52
 
53
- DebugOnlyTraceFlag grpc_trace_chttp2_hpack_parser(false, "chttp2_hpack_parser");
54
-
55
- /* How parsing works:
56
-
57
- The parser object keeps track of a function pointer which represents the
58
- current parse state.
59
-
60
- Each time new bytes are presented, we call into the current state, which
61
- recursively parses until all bytes in the given chunk are exhausted.
62
-
63
- The parse state that terminates then saves its function pointer to be the
64
- current state so that it can resume when more bytes are available.
65
-
66
- It's expected that most optimizing compilers will turn this code into
67
- a set of indirect jumps, and so not waste stack space. */
53
+ TraceFlag grpc_trace_chttp2_hpack_parser(false, "chttp2_hpack_parser");
68
54
 
69
55
  /* state table for huffman decoding: given a state, gives an index/16 into
70
56
  next_sub_tbl. Taking that index and adding the value of the nibble being
@@ -441,7 +427,7 @@ static const int16_t emit_sub_tbl[249 * 16] = {
441
427
 
442
428
  namespace {
443
429
  // The alphabet used for base64 encoding binary metadata.
444
- static constexpr char kBase64Alphabet[] =
430
+ constexpr char kBase64Alphabet[] =
445
431
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
446
432
 
447
433
  // An inverted table: for each value in kBase64Alphabet, table contains the
@@ -461,1124 +447,867 @@ struct Base64InverseTable {
461
447
  }
462
448
  };
463
449
 
464
- static GRPC_HPACK_CONSTEXPR_VALUE Base64InverseTable kBase64InverseTable;
450
+ GRPC_HPACK_CONSTEXPR_VALUE Base64InverseTable kBase64InverseTable;
465
451
  } // namespace
466
452
 
467
- void HPackParser::FinishFrame() {
468
- sink_ = Sink();
469
- dynamic_table_updates_allowed_ = 2;
470
- }
471
-
472
- void GPR_ATTRIBUTE_NOINLINE HPackParser::LogHeader(grpc_mdelem md) {
473
- char* k = grpc_slice_to_c_string(GRPC_MDKEY(md));
474
- char* v = nullptr;
475
- if (grpc_is_binary_header_internal(GRPC_MDKEY(md))) {
476
- v = grpc_dump_slice(GRPC_MDVALUE(md), GPR_DUMP_HEX);
477
- } else {
478
- v = grpc_slice_to_c_string(GRPC_MDVALUE(md));
453
+ // Input tracks the current byte through the input data and provides it
454
+ // via a simple stream interface.
455
+ class HPackParser::Input {
456
+ public:
457
+ Input(grpc_slice_refcount* current_slice_refcount, const uint8_t* begin,
458
+ const uint8_t* end)
459
+ : current_slice_refcount_(current_slice_refcount),
460
+ begin_(begin),
461
+ end_(end),
462
+ frontier_(begin) {}
463
+
464
+ // If input is backed by a slice, retrieve its refcount. If not, return
465
+ // nullptr.
466
+ grpc_slice_refcount* slice_refcount() { return current_slice_refcount_; }
467
+
468
+ // Have we reached the end of input?
469
+ bool end_of_stream() const { return begin_ == end_; }
470
+ // How many bytes until end of input
471
+ size_t remaining() const { return end_ - begin_; }
472
+ // Current position, as a pointer
473
+ const uint8_t* cur_ptr() const { return begin_; }
474
+ // End position, as a pointer
475
+ const uint8_t* end_ptr() const { return end_; }
476
+ // Move read position forward by n, unchecked
477
+ void Advance(size_t n) { begin_ += n; }
478
+
479
+ // Retrieve the current character, or nullopt if end of stream
480
+ // Do not advance
481
+ absl::optional<uint8_t> peek() const {
482
+ if (end_of_stream()) {
483
+ return {};
484
+ }
485
+ return *begin_;
479
486
  }
480
- gpr_log(
481
- GPR_INFO,
482
- "Decode: '%s: %s', elem_interned=%d [%d], k_interned=%d, v_interned=%d",
483
- k, v, GRPC_MDELEM_IS_INTERNED(md), GRPC_MDELEM_STORAGE(md),
484
- grpc_slice_is_interned(GRPC_MDKEY(md)),
485
- grpc_slice_is_interned(GRPC_MDVALUE(md)));
486
- gpr_free(k);
487
- gpr_free(v);
488
- }
489
487
 
490
- /* emission helpers */
491
- template <HPackParser::TableAction action>
492
- grpc_error_handle HPackParser::FinishHeader(grpc_mdelem md) {
493
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
494
- LogHeader(md);
495
- }
496
- if (action == TableAction::kAddToTable) {
497
- GPR_DEBUG_ASSERT(GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_INTERNED ||
498
- GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_STATIC);
499
- grpc_error_handle err = grpc_chttp2_hptbl_add(&table_, md);
500
- if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) return err;
488
+ // Retrieve and advance past the current character, or return nullopt if end
489
+ // of stream
490
+ absl::optional<uint8_t> Next() {
491
+ if (end_of_stream()) {
492
+ return UnexpectedEOF(absl::optional<uint8_t>());
493
+ }
494
+ return *begin_++;
501
495
  }
502
- return sink_(md);
503
- }
504
496
 
505
- UnmanagedMemorySlice HPackParser::String::TakeExtern() {
506
- UnmanagedMemorySlice s;
507
- if (!copied_) {
508
- GPR_DEBUG_ASSERT(!grpc_slice_is_interned(data_.referenced));
509
- s = static_cast<UnmanagedMemorySlice&>(data_.referenced);
510
- copied_ = true;
511
- data_.referenced = UnmanagedMemorySlice();
512
- } else {
513
- s = UnmanagedMemorySlice(data_.copied.str, data_.copied.length);
497
+ // Helper to parse a varint delta on top of value, return nullopt on failure
498
+ // (setting error)
499
+ absl::optional<uint32_t> ParseVarint(uint32_t value) {
500
+ // TODO(ctiller): break out a variant of this when we know there are at
501
+ // least 5 bytes in input_
502
+ auto cur = Next();
503
+ if (!cur) return {};
504
+ value += *cur & 0x7f;
505
+ if ((*cur & 0x80) == 0) return value;
506
+
507
+ cur = Next();
508
+ if (!cur) return {};
509
+ value += (*cur & 0x7f) << 7;
510
+ if ((*cur & 0x80) == 0) return value;
511
+
512
+ cur = Next();
513
+ if (!cur) return {};
514
+ value += (*cur & 0x7f) << 14;
515
+ if ((*cur & 0x80) == 0) return value;
516
+
517
+ cur = Next();
518
+ if (!cur) return {};
519
+ value += (*cur & 0x7f) << 21;
520
+ if ((*cur & 0x80) == 0) return value;
521
+
522
+ cur = Next();
523
+ if (!cur) return {};
524
+ uint32_t c = (*cur) & 0x7f;
525
+ // We might overflow here, so we need to be a little careful about the
526
+ // addition
527
+ if (c > 0xf) return ParseVarintOutOfRange(value, *cur);
528
+ const uint32_t add = c << 28;
529
+ if (add > 0xffffffffu - value) {
530
+ return ParseVarintOutOfRange(value, *cur);
531
+ }
532
+ value += add;
533
+ if ((*cur & 0x80) == 0) return value;
534
+
535
+ // Spec weirdness: we can add an infinite stream of 0x80 at the end of a
536
+ // varint and still end up with a correctly encoded varint.
537
+ do {
538
+ cur = Next();
539
+ if (!cur.has_value()) return {};
540
+ } while (*cur == 0x80);
541
+
542
+ // BUT... the last byte needs to be 0x00 or we'll overflow dramatically!
543
+ if (*cur == 0) return value;
544
+ return ParseVarintOutOfRange(value, *cur);
514
545
  }
515
- data_.copied.length = 0;
516
- return s;
517
- }
518
546
 
519
- ManagedMemorySlice HPackParser::String::TakeIntern() {
520
- ManagedMemorySlice s;
521
- if (!copied_) {
522
- s = ManagedMemorySlice(&data_.referenced);
523
- grpc_slice_unref_internal(data_.referenced);
524
- copied_ = true;
525
- data_.referenced = grpc_empty_slice();
526
- } else {
527
- s = ManagedMemorySlice(data_.copied.str, data_.copied.length);
547
+ // Prefix for a string
548
+ struct StringPrefix {
549
+ // Number of bytes in input for string
550
+ uint32_t length;
551
+ // Is it huffman compressed
552
+ bool huff;
553
+ };
554
+
555
+ // Parse a string prefix
556
+ absl::optional<StringPrefix> ParseStringPrefix() {
557
+ auto cur = Next();
558
+ if (!cur.has_value()) return {};
559
+ // Huffman if the top bit is 1
560
+ const bool huff = (*cur & 0x80) != 0;
561
+ // String length
562
+ uint32_t strlen = (*cur & 0x7f);
563
+ if (strlen == 0x7f) {
564
+ // all ones ==> varint string length
565
+ auto v = ParseVarint(0x7f);
566
+ if (!v.has_value()) return {};
567
+ strlen = *v;
568
+ }
569
+ return StringPrefix{strlen, huff};
528
570
  }
529
- data_.copied.length = 0;
530
- return s;
531
- }
532
571
 
533
- grpc_error_handle HPackParser::parse_next(const uint8_t* cur,
534
- const uint8_t* end) {
535
- state_ = *next_state_++;
536
- return (this->*state_)(cur, end);
537
- }
572
+ // Check if we saw an EOF.. must be verified before looking at TakeError
573
+ bool eof_error() const { return eof_error_; }
538
574
 
539
- /* begin parsing a header: all functionality is encoded into lookup tables
540
- above */
541
- grpc_error_handle HPackParser::parse_begin(const uint8_t* cur,
542
- const uint8_t* end) {
543
- if (cur == end) {
544
- state_ = &HPackParser::parse_begin;
545
- return GRPC_ERROR_NONE;
575
+ // Extract the parse error, leaving the current error as NONE.
576
+ grpc_error_handle TakeError() {
577
+ grpc_error_handle out = error_;
578
+ error_ = GRPC_ERROR_NONE;
579
+ return out;
546
580
  }
547
581
 
548
- switch (*cur >> 4) {
549
- // Literal header not indexed.
550
- // First byte format: 0000xxxx
551
- // Where xxxx:
552
- // 0000 - literal key
553
- // 1111 - indexed key, varint encoded index
554
- // other - indexed key, inline encoded index
555
- case 0:
556
- switch (*cur & 0xf) {
557
- case 0: // literal key
558
- return parse_lithdr_notidx_v(cur, end);
559
- case 0xf: // varint encoded key index
560
- return parse_lithdr_notidx_x(cur, end);
561
- default: // inline encoded key index
562
- return parse_lithdr_notidx(cur, end);
563
- }
564
- // Literal header never indexed.
565
- // First byte format: 0001xxxx
566
- // Where xxxx:
567
- // 0000 - literal key
568
- // 1111 - indexed key, varint encoded index
569
- // other - indexed key, inline encoded index
570
- case 1:
571
- switch (*cur & 0xf) {
572
- case 0: // literal key
573
- return parse_lithdr_nvridx_v(cur, end);
574
- case 0xf: // varint encoded key index
575
- return parse_lithdr_nvridx_x(cur, end);
576
- default: // inline encoded key index
577
- return parse_lithdr_nvridx(cur, end);
578
- }
579
- // Update max table size.
580
- // First byte format: 001xxxxx
581
- // Where xxxxx:
582
- // 11111 - max size is varint encoded
583
- // other - max size is stored inline
584
- case 2:
585
- // inline encoded max table size
586
- return parse_max_tbl_size(cur, end);
587
- case 3:
588
- if (*cur == 0x3f) {
589
- // varint encoded max table size
590
- return parse_max_tbl_size_x(cur, end);
591
- } else {
592
- // inline encoded max table size
593
- return parse_max_tbl_size(cur, end);
594
- }
595
- // Literal header with incremental indexing.
596
- // First byte format: 01xxxxxx
597
- // Where xxxxxx:
598
- // 000000 - literal key
599
- // 111111 - indexed key, varint encoded index
600
- // other - indexed key, inline encoded index
601
- case 4:
602
- if (*cur == 0x40) {
603
- // literal key
604
- return parse_lithdr_incidx_v(cur, end);
605
- }
606
- ABSL_FALLTHROUGH_INTENDED;
607
- case 5:
608
- case 6:
609
- // inline encoded key index
610
- return parse_lithdr_incidx(cur, end);
611
- case 7:
612
- if (*cur == 0x7f) {
613
- // varint encoded key index
614
- return parse_lithdr_incidx_x(cur, end);
615
- } else {
616
- // inline encoded key index
617
- return parse_lithdr_incidx(cur, end);
618
- }
619
- // Indexed Header Field Representation
620
- // First byte format: 1xxxxxxx
621
- // Where xxxxxxx:
622
- // 0000000 - illegal
623
- // 1111111 - varint encoded field index
624
- // other - inline encoded field index
625
- case 8:
626
- if (*cur == 0x80) {
627
- // illegal value.
628
- return parse_illegal_op(cur, end);
629
- }
630
- ABSL_FALLTHROUGH_INTENDED;
631
- case 9:
632
- case 10:
633
- case 11:
634
- case 12:
635
- case 13:
636
- case 14:
637
- // inline encoded field index
638
- return parse_indexed_field(cur, end);
639
- case 15:
640
- if (*cur == 0xff) {
641
- // varint encoded field index
642
- return parse_indexed_field_x(cur, end);
643
- } else {
644
- // inline encoded field index
645
- return parse_indexed_field(cur, end);
646
- }
582
+ // Set the current error - allows the rest of the code not to need to pass
583
+ // around StatusOr<> which would be prohibitive here.
584
+ GPR_ATTRIBUTE_NOINLINE void SetError(grpc_error_handle error) {
585
+ if (error_ != GRPC_ERROR_NONE || eof_error_) {
586
+ GRPC_ERROR_UNREF(error);
587
+ return;
588
+ }
589
+ error_ = error;
590
+ begin_ = end_;
647
591
  }
648
- GPR_UNREACHABLE_CODE(abort());
649
- }
650
592
 
651
- /* stream dependency and prioritization data: we just skip it */
652
- grpc_error_handle HPackParser::parse_stream_weight(const uint8_t* cur,
653
- const uint8_t* end) {
654
- if (cur == end) {
655
- state_ = &HPackParser::parse_stream_weight;
656
- return GRPC_ERROR_NONE;
593
+ // If no error is set, set it to the value produced by error_factory.
594
+ // Return return_value unchanged.
595
+ template <typename F, typename T>
596
+ GPR_ATTRIBUTE_NOINLINE T MaybeSetErrorAndReturn(F error_factory,
597
+ T return_value) {
598
+ if (error_ != GRPC_ERROR_NONE || eof_error_) return return_value;
599
+ error_ = error_factory();
600
+ begin_ = end_;
601
+ return return_value;
657
602
  }
658
603
 
659
- return (this->*after_prioritization_)(cur + 1, end);
660
- }
661
-
662
- grpc_error_handle HPackParser::parse_stream_dep3(const uint8_t* cur,
663
- const uint8_t* end) {
664
- if (cur == end) {
665
- state_ = &HPackParser::parse_stream_dep3;
666
- return GRPC_ERROR_NONE;
604
+ // Set the error to an unexpected eof, and return result (code golfed as this
605
+ // is a common case)
606
+ template <typename T>
607
+ T UnexpectedEOF(T return_value) {
608
+ if (error_ != GRPC_ERROR_NONE) return return_value;
609
+ eof_error_ = true;
610
+ return return_value;
667
611
  }
668
612
 
669
- return parse_stream_weight(cur + 1, end);
670
- }
671
-
672
- grpc_error_handle HPackParser::parse_stream_dep2(const uint8_t* cur,
673
- const uint8_t* end) {
674
- if (cur == end) {
675
- state_ = &HPackParser::parse_stream_dep2;
676
- return GRPC_ERROR_NONE;
613
+ // Update the frontier - signifies we've successfully parsed another element
614
+ void UpdateFrontier() { frontier_ = begin_; }
615
+
616
+ // Get the frontier - for buffering should we fail due to eof
617
+ const uint8_t* frontier() const { return frontier_; }
618
+
619
+ private:
620
+ // Helper to set the error to out of range for ParseVarint
621
+ absl::optional<uint32_t> ParseVarintOutOfRange(uint32_t value,
622
+ uint8_t last_byte) {
623
+ return MaybeSetErrorAndReturn(
624
+ [value, last_byte] {
625
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
626
+ "integer overflow in hpack integer decoding: have 0x%08x, "
627
+ "got byte 0x%02x on byte 5",
628
+ value, last_byte));
629
+ },
630
+ absl::optional<uint32_t>());
677
631
  }
678
632
 
679
- return parse_stream_dep3(cur + 1, end);
680
- }
633
+ // Refcount if we are backed by a slice
634
+ grpc_slice_refcount* current_slice_refcount_;
635
+ // Current input point
636
+ const uint8_t* begin_;
637
+ // End of stream point
638
+ const uint8_t* const end_;
639
+ // Frontier denotes the first byte past successfully processed input
640
+ const uint8_t* frontier_;
641
+ // Current error
642
+ grpc_error_handle error_ = GRPC_ERROR_NONE;
643
+ // If the error was EOF, we flag it here..
644
+ bool eof_error_ = false;
645
+ };
681
646
 
682
- grpc_error_handle HPackParser::parse_stream_dep1(const uint8_t* cur,
683
- const uint8_t* end) {
684
- if (cur == end) {
685
- state_ = &HPackParser::parse_stream_dep1;
686
- return GRPC_ERROR_NONE;
647
+ // Helper to parse a string and turn it into a slice with appropriate memory
648
+ // management characteristics
649
+ class HPackParser::String {
650
+ public:
651
+ String(const String&) = delete;
652
+ String& operator=(const String&) = delete;
653
+ String(String&& other) noexcept : value_(std::move(other.value_)) {
654
+ other.value_ = absl::Span<const uint8_t>();
687
655
  }
688
-
689
- return parse_stream_dep2(cur + 1, end);
690
- }
691
-
692
- grpc_error_handle HPackParser::parse_stream_dep0(const uint8_t* cur,
693
- const uint8_t* end) {
694
- if (cur == end) {
695
- state_ = &HPackParser::parse_stream_dep0;
696
- return GRPC_ERROR_NONE;
656
+ String& operator=(String&& other) noexcept {
657
+ value_ = std::move(other.value_);
658
+ other.value_ = absl::Span<const uint8_t>();
659
+ return *this;
697
660
  }
698
661
 
699
- return parse_stream_dep1(cur + 1, end);
700
- }
701
-
702
- grpc_error_handle HPackParser::InvalidHPackIndexError() {
703
- return grpc_error_set_int(
704
- grpc_error_set_int(
705
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid HPACK index received"),
706
- GRPC_ERROR_INT_INDEX, static_cast<intptr_t>(index_)),
707
- GRPC_ERROR_INT_SIZE, static_cast<intptr_t>(table_.num_ents));
708
- }
709
-
710
- /* emit an indexed field; jumps to begin the next field on completion */
711
- grpc_error_handle HPackParser::finish_indexed_field(const uint8_t* cur,
712
- const uint8_t* end) {
713
- grpc_mdelem md = grpc_chttp2_hptbl_lookup<true>(&table_, index_);
714
- if (GPR_UNLIKELY(GRPC_MDISNULL(md))) {
715
- return InvalidHPackIndexError();
662
+ // Take the value and leave this empty
663
+ Slice Take();
664
+
665
+ // Return a reference to the value as a string view
666
+ absl::string_view string_view() const {
667
+ if (auto* p = absl::get_if<Slice>(&value_)) {
668
+ return p->as_string_view();
669
+ } else if (auto* p = absl::get_if<absl::Span<const uint8_t>>(&value_)) {
670
+ return absl::string_view(reinterpret_cast<const char*>(p->data()),
671
+ p->size());
672
+ } else if (auto* p = absl::get_if<std::vector<uint8_t>>(&value_)) {
673
+ return absl::string_view(reinterpret_cast<const char*>(p->data()),
674
+ p->size());
675
+ }
676
+ GPR_UNREACHABLE_CODE(return absl::string_view());
716
677
  }
717
- GRPC_STATS_INC_HPACK_RECV_INDEXED();
718
- grpc_error_handle err = FinishHeader<TableAction::kOmitFromTable>(md);
719
- if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) return err;
720
- return parse_begin(cur, end);
721
- }
722
-
723
- /* parse an indexed field with index < 127 */
724
- grpc_error_handle HPackParser::parse_indexed_field(const uint8_t* cur,
725
- const uint8_t* end) {
726
- dynamic_table_updates_allowed_ = 0;
727
- index_ = (*cur) & 0x7f;
728
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
729
- return finish_indexed_field(cur + 1, end);
730
- }
731
-
732
- /* parse an indexed field with index >= 127 */
733
- grpc_error_handle HPackParser::parse_indexed_field_x(const uint8_t* cur,
734
- const uint8_t* end) {
735
- static const State and_then[] = {&HPackParser::finish_indexed_field};
736
- dynamic_table_updates_allowed_ = 0;
737
- next_state_ = and_then;
738
- index_ = 0x7f;
739
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
740
- parsing_.value = &index_;
741
- return parse_value0(cur + 1, end);
742
- }
743
-
744
- /* When finishing with a header, get the cached md element for this index.
745
- This is set in parse_value_string(). We ensure (in debug mode) that the
746
- cached metadata corresponds with the index we are examining. */
747
- grpc_mdelem HPackParser::GetPrecomputedMDForIndex() {
748
- GPR_DEBUG_ASSERT(md_for_index_.payload != 0);
749
- GPR_DEBUG_ASSERT(static_cast<int64_t>(index_) == precomputed_md_index_);
750
- grpc_mdelem md = md_for_index_;
751
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(md)); /* handled in string parsing */
752
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
753
- #ifndef NDEBUG
754
- precomputed_md_index_ = -1;
755
- #endif
756
- return md;
757
- }
758
-
759
- static const grpc_core::ManagedMemorySlice& get_indexed_key(grpc_mdelem md) {
760
- GPR_DEBUG_ASSERT(GRPC_MDELEM_IS_INTERNED(md));
761
- return static_cast<const grpc_core::ManagedMemorySlice&>(
762
- grpc_slice_ref_internal(GRPC_MDKEY(md)));
763
- }
764
-
765
- /* finish a literal header with incremental indexing */
766
- grpc_error_handle HPackParser::finish_lithdr_incidx(const uint8_t* cur,
767
- const uint8_t* end) {
768
- GRPC_STATS_INC_HPACK_RECV_LITHDR_INCIDX();
769
- grpc_mdelem md = GetPrecomputedMDForIndex();
770
- grpc_error_handle err = FinishHeader<TableAction::kAddToTable>(
771
- grpc_mdelem_from_slices(get_indexed_key(md), value_.TakeIntern()));
772
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
773
- return parse_begin(cur, end);
774
- }
775
-
776
- /* finish a literal header with incremental indexing with no index */
777
- grpc_error_handle HPackParser::finish_lithdr_incidx_v(const uint8_t* cur,
778
- const uint8_t* end) {
779
- GRPC_STATS_INC_HPACK_RECV_LITHDR_INCIDX_V();
780
- grpc_error_handle err = FinishHeader<TableAction::kAddToTable>(
781
- grpc_mdelem_from_slices(key_.TakeIntern(), value_.TakeIntern()));
782
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
783
- return parse_begin(cur, end);
784
- }
785
678
 
786
- /* parse a literal header with incremental indexing; index < 63 */
787
- grpc_error_handle HPackParser::parse_lithdr_incidx(const uint8_t* cur,
788
- const uint8_t* end) {
789
- static const State and_then[] = {
790
- &HPackParser::parse_value_string_with_indexed_key,
791
- &HPackParser::finish_lithdr_incidx};
792
- dynamic_table_updates_allowed_ = 0;
793
- next_state_ = and_then;
794
- index_ = (*cur) & 0x3f;
795
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
796
- return parse_string_prefix(cur + 1, end);
797
- }
798
-
799
- /* parse a literal header with incremental indexing; index >= 63 */
800
- grpc_error_handle HPackParser::parse_lithdr_incidx_x(const uint8_t* cur,
801
- const uint8_t* end) {
802
- static const State and_then[] = {
803
- &HPackParser::parse_string_prefix,
804
- &HPackParser::parse_value_string_with_indexed_key,
805
- &HPackParser::finish_lithdr_incidx};
806
- dynamic_table_updates_allowed_ = 0;
807
- next_state_ = and_then;
808
- index_ = 0x3f;
809
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
810
- parsing_.value = &index_;
811
- return parse_value0(cur + 1, end);
812
- }
813
-
814
- /* parse a literal header with incremental indexing; index = 0 */
815
- grpc_error_handle HPackParser::parse_lithdr_incidx_v(const uint8_t* cur,
816
- const uint8_t* end) {
817
- static const State and_then[] = {
818
- &HPackParser::parse_key_string, &HPackParser::parse_string_prefix,
819
- &HPackParser::parse_value_string_with_literal_key,
820
- &HPackParser::finish_lithdr_incidx_v};
821
- dynamic_table_updates_allowed_ = 0;
822
- next_state_ = and_then;
823
- return parse_string_prefix(cur + 1, end);
824
- }
825
-
826
- /* finish a literal header without incremental indexing */
827
- grpc_error_handle HPackParser::finish_lithdr_notidx(const uint8_t* cur,
828
- const uint8_t* end) {
829
- GRPC_STATS_INC_HPACK_RECV_LITHDR_NOTIDX();
830
- grpc_mdelem md = GetPrecomputedMDForIndex();
831
- grpc_error_handle err = FinishHeader<TableAction::kOmitFromTable>(
832
- grpc_mdelem_from_slices(get_indexed_key(md), value_.TakeExtern()));
833
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
834
- return parse_begin(cur, end);
835
- }
836
-
837
- /* finish a literal header without incremental indexing with index = 0 */
838
- grpc_error_handle HPackParser::finish_lithdr_notidx_v(const uint8_t* cur,
839
- const uint8_t* end) {
840
- GRPC_STATS_INC_HPACK_RECV_LITHDR_NOTIDX_V();
841
- grpc_error_handle err = FinishHeader<TableAction::kOmitFromTable>(
842
- grpc_mdelem_from_slices(key_.TakeIntern(), value_.TakeExtern()));
843
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
844
- return parse_begin(cur, end);
845
- }
846
-
847
- /* parse a literal header without incremental indexing; index < 15 */
848
- grpc_error_handle HPackParser::parse_lithdr_notidx(const uint8_t* cur,
849
- const uint8_t* end) {
850
- static const State and_then[] = {
851
- &HPackParser::parse_value_string_with_indexed_key,
852
- &HPackParser::finish_lithdr_notidx};
853
- dynamic_table_updates_allowed_ = 0;
854
- next_state_ = and_then;
855
- index_ = (*cur) & 0xf;
856
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
857
- return parse_string_prefix(cur + 1, end);
858
- }
859
-
860
- /* parse a literal header without incremental indexing; index >= 15 */
861
- grpc_error_handle HPackParser::parse_lithdr_notidx_x(const uint8_t* cur,
862
- const uint8_t* end) {
863
- static const State and_then[] = {
864
- &HPackParser::parse_string_prefix,
865
- &HPackParser::parse_value_string_with_indexed_key,
866
- &HPackParser::finish_lithdr_notidx};
867
- dynamic_table_updates_allowed_ = 0;
868
- next_state_ = and_then;
869
- index_ = 0xf;
870
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
871
- parsing_.value = &index_;
872
- return parse_value0(cur + 1, end);
873
- }
874
-
875
- /* parse a literal header without incremental indexing; index == 0 */
876
- grpc_error_handle HPackParser::parse_lithdr_notidx_v(const uint8_t* cur,
877
- const uint8_t* end) {
878
- static const State and_then[] = {
879
- &HPackParser::parse_key_string, &HPackParser::parse_string_prefix,
880
- &HPackParser::parse_value_string_with_literal_key,
881
- &HPackParser::finish_lithdr_notidx_v};
882
- dynamic_table_updates_allowed_ = 0;
883
- next_state_ = and_then;
884
- return parse_string_prefix(cur + 1, end);
885
- }
886
-
887
- /* finish a literal header that is never indexed */
888
- grpc_error_handle HPackParser::finish_lithdr_nvridx(const uint8_t* cur,
889
- const uint8_t* end) {
890
- GRPC_STATS_INC_HPACK_RECV_LITHDR_NVRIDX();
891
- grpc_mdelem md = GetPrecomputedMDForIndex();
892
- grpc_error_handle err = FinishHeader<TableAction::kOmitFromTable>(
893
- grpc_mdelem_from_slices(get_indexed_key(md), value_.TakeExtern()));
894
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
895
- return parse_begin(cur, end);
896
- }
897
-
898
- /* finish a literal header that is never indexed with an extra value */
899
- grpc_error_handle HPackParser::finish_lithdr_nvridx_v(const uint8_t* cur,
900
- const uint8_t* end) {
901
- GRPC_STATS_INC_HPACK_RECV_LITHDR_NVRIDX_V();
902
- grpc_error_handle err = FinishHeader<TableAction::kOmitFromTable>(
903
- grpc_mdelem_from_slices(key_.TakeIntern(), value_.TakeExtern()));
904
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
905
- return parse_begin(cur, end);
906
- }
907
-
908
- /* parse a literal header that is never indexed; index < 15 */
909
- grpc_error_handle HPackParser::parse_lithdr_nvridx(const uint8_t* cur,
910
- const uint8_t* end) {
911
- static const State and_then[] = {
912
- &HPackParser::parse_value_string_with_indexed_key,
913
- &HPackParser::finish_lithdr_nvridx};
914
- dynamic_table_updates_allowed_ = 0;
915
- next_state_ = and_then;
916
- index_ = (*cur) & 0xf;
917
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
918
- return parse_string_prefix(cur + 1, end);
919
- }
920
-
921
- /* parse a literal header that is never indexed; index >= 15 */
922
- grpc_error_handle HPackParser::parse_lithdr_nvridx_x(const uint8_t* cur,
923
- const uint8_t* end) {
924
- static const State and_then[] = {
925
- &HPackParser::parse_string_prefix,
926
- &HPackParser::parse_value_string_with_indexed_key,
927
- &HPackParser::finish_lithdr_nvridx};
928
- dynamic_table_updates_allowed_ = 0;
929
- next_state_ = and_then;
930
- index_ = 0xf;
931
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
932
- parsing_.value = &index_;
933
- return parse_value0(cur + 1, end);
934
- }
935
-
936
- /* parse a literal header that is never indexed; index == 0 */
937
- grpc_error_handle HPackParser::parse_lithdr_nvridx_v(const uint8_t* cur,
938
- const uint8_t* end) {
939
- static const State and_then[] = {
940
- &HPackParser::parse_key_string, &HPackParser::parse_string_prefix,
941
- &HPackParser::parse_value_string_with_literal_key,
942
- &HPackParser::finish_lithdr_nvridx_v};
943
- dynamic_table_updates_allowed_ = 0;
944
- next_state_ = and_then;
945
- return parse_string_prefix(cur + 1, end);
946
- }
947
-
948
- /* finish parsing a max table size change */
949
- grpc_error_handle HPackParser::finish_max_tbl_size(const uint8_t* cur,
950
- const uint8_t* end) {
951
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
952
- gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", index_);
679
+ // Parse a non-binary string
680
+ static absl::optional<String> Parse(Input* input) {
681
+ auto pfx = input->ParseStringPrefix();
682
+ if (!pfx.has_value()) return {};
683
+ if (pfx->huff) {
684
+ // Huffman coded
685
+ std::vector<uint8_t> output;
686
+ auto v = ParseHuff(input, pfx->length,
687
+ [&output](uint8_t c) { output.push_back(c); });
688
+ if (!v) return {};
689
+ return String(std::move(output));
690
+ }
691
+ return ParseUncompressed(input, pfx->length);
953
692
  }
954
- grpc_error_handle err =
955
- grpc_chttp2_hptbl_set_current_table_size(&table_, index_);
956
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
957
- return parse_begin(cur, end);
958
- }
959
693
 
960
- /* parse a max table size change, max size < 15 */
961
- grpc_error_handle HPackParser::parse_max_tbl_size(const uint8_t* cur,
962
- const uint8_t* end) {
963
- if (dynamic_table_updates_allowed_ == 0) {
964
- return parse_error(
965
- cur, end,
966
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
967
- "More than two max table size changes in a single frame"));
694
+ // Parse a binary string
695
+ static absl::optional<String> ParseBinary(Input* input) {
696
+ auto pfx = input->ParseStringPrefix();
697
+ if (!pfx.has_value()) return {};
698
+ if (!pfx->huff) {
699
+ if (pfx->length > 0 && input->peek() == 0) {
700
+ // 'true-binary'
701
+ input->Advance(1);
702
+ return ParseUncompressed(input, pfx->length - 1);
703
+ }
704
+ // Base64 encoded... pull out the string, then unbase64 it
705
+ auto base64 = ParseUncompressed(input, pfx->length);
706
+ if (!base64.has_value()) return {};
707
+ return Unbase64(input, std::move(*base64));
708
+ } else {
709
+ // Huffman encoded...
710
+ std::vector<uint8_t> decompressed;
711
+ // State here says either we don't know if it's base64 or binary, or we do
712
+ // and what is it.
713
+ enum class State { kUnsure, kBinary, kBase64 };
714
+ State state = State::kUnsure;
715
+ auto decompressed_ok =
716
+ ParseHuff(input, pfx->length, [&state, &decompressed](uint8_t c) {
717
+ if (state == State::kUnsure) {
718
+ // First byte... if it's zero it's binary
719
+ if (c == 0) {
720
+ // Save the type, and skip the zero
721
+ state = State::kBinary;
722
+ return;
723
+ } else {
724
+ // Flag base64, store this value
725
+ state = State::kBase64;
726
+ }
727
+ }
728
+ // Non-first byte, or base64 first byte
729
+ decompressed.push_back(c);
730
+ });
731
+ if (!decompressed_ok) return {};
732
+ switch (state) {
733
+ case State::kUnsure:
734
+ // No bytes, empty span
735
+ return String(absl::Span<const uint8_t>());
736
+ case State::kBinary:
737
+ // Binary, we're done
738
+ return String(std::move(decompressed));
739
+ case State::kBase64:
740
+ // Base64 - unpack it
741
+ return Unbase64(input, String(std::move(decompressed)));
742
+ }
743
+ GPR_UNREACHABLE_CODE(abort(););
744
+ }
968
745
  }
969
- dynamic_table_updates_allowed_--;
970
- index_ = (*cur) & 0x1f;
971
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
972
- return finish_max_tbl_size(cur + 1, end);
973
- }
974
746
 
975
- /* parse a max table size change, max size >= 15 */
976
- grpc_error_handle HPackParser::parse_max_tbl_size_x(const uint8_t* cur,
977
- const uint8_t* end) {
978
- static const State and_then[] = {&HPackParser::finish_max_tbl_size};
979
- if (dynamic_table_updates_allowed_ == 0) {
980
- return parse_error(
981
- cur, end,
982
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
983
- "More than two max table size changes in a single frame"));
747
+ private:
748
+ void AppendBytes(const uint8_t* data, size_t length);
749
+ explicit String(std::vector<uint8_t> v) : value_(std::move(v)) {}
750
+ explicit String(absl::Span<const uint8_t> v) : value_(v) {}
751
+ String(grpc_slice_refcount* r, const uint8_t* begin, const uint8_t* end)
752
+ : value_(Slice::FromRefcountAndBytes(r, begin, end)) {}
753
+
754
+ // Parse some huffman encoded bytes, using output(uint8_t b) to emit each
755
+ // decoded byte.
756
+ template <typename Out>
757
+ static bool ParseHuff(Input* input, uint32_t length, Out output) {
758
+ GRPC_STATS_INC_HPACK_RECV_HUFFMAN();
759
+ int16_t state = 0;
760
+ // Parse one half byte... we leverage some lookup tables to keep the logic
761
+ // here really simple.
762
+ auto nibble = [&output, &state](uint8_t nibble) {
763
+ int16_t emit = emit_sub_tbl[16 * emit_tbl[state] + nibble];
764
+ int16_t next = next_sub_tbl[16 * next_tbl[state] + nibble];
765
+ if (emit != -1) {
766
+ if (emit >= 0 && emit < 256) {
767
+ output(static_cast<uint8_t>(emit));
768
+ } else {
769
+ assert(emit == 256);
770
+ }
771
+ }
772
+ state = next;
773
+ };
774
+ // If there's insufficient bytes remaining, return now.
775
+ if (input->remaining() < length) {
776
+ return input->UnexpectedEOF(false);
777
+ }
778
+ // Grab the byte range, and iterate through it.
779
+ const uint8_t* p = input->cur_ptr();
780
+ input->Advance(length);
781
+ for (uint32_t i = 0; i < length; i++) {
782
+ nibble(p[i] >> 4);
783
+ nibble(p[i] & 0xf);
784
+ }
785
+ return true;
984
786
  }
985
- dynamic_table_updates_allowed_--;
986
- next_state_ = and_then;
987
- index_ = 0x1f;
988
- md_for_index_.payload = 0; /* Invalidate cached md when index changes. */
989
- parsing_.value = &index_;
990
- return parse_value0(cur + 1, end);
991
- }
992
787
 
993
- /* a parse error: jam the parse state into parse_error, and return error */
994
- grpc_error_handle HPackParser::parse_error(const uint8_t* /*cur*/,
995
- const uint8_t* /*end*/,
996
- grpc_error_handle err) {
997
- GPR_ASSERT(err != GRPC_ERROR_NONE);
998
- if (last_error_ == GRPC_ERROR_NONE) {
999
- last_error_ = GRPC_ERROR_REF(err);
788
+ // Parse some uncompressed string bytes.
789
+ static absl::optional<String> ParseUncompressed(Input* input,
790
+ uint32_t length) {
791
+ GRPC_STATS_INC_HPACK_RECV_UNCOMPRESSED();
792
+ // Check there's enough bytes
793
+ if (input->remaining() < length) {
794
+ return input->UnexpectedEOF(absl::optional<String>());
795
+ }
796
+ auto* refcount = input->slice_refcount();
797
+ auto* p = input->cur_ptr();
798
+ input->Advance(length);
799
+ if (refcount != nullptr) {
800
+ return String(refcount, p, p + length);
801
+ } else {
802
+ return String(absl::Span<const uint8_t>(p, length));
803
+ }
1000
804
  }
1001
- state_ = &HPackParser::still_parse_error;
1002
- return err;
1003
- }
1004
805
 
1005
- grpc_error_handle HPackParser::still_parse_error(const uint8_t* /*cur*/,
1006
- const uint8_t* /*end*/) {
1007
- return GRPC_ERROR_REF(last_error_);
1008
- }
806
+ // Turn base64 encoded bytes into not base64 encoded bytes.
807
+ // Only takes input to set an error on failure.
808
+ static absl::optional<String> Unbase64(Input* input, String s) {
809
+ absl::optional<std::vector<uint8_t>> result;
810
+ if (auto* p = absl::get_if<Slice>(&s.value_)) {
811
+ result = Unbase64Loop(p->begin(), p->end());
812
+ }
813
+ if (auto* p = absl::get_if<absl::Span<const uint8_t>>(&s.value_)) {
814
+ result = Unbase64Loop(p->begin(), p->end());
815
+ }
816
+ if (auto* p = absl::get_if<std::vector<uint8_t>>(&s.value_)) {
817
+ result = Unbase64Loop(p->data(), p->data() + p->size());
818
+ }
819
+ if (!result.has_value()) {
820
+ return input->MaybeSetErrorAndReturn(
821
+ [] {
822
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
823
+ "illegal base64 encoding");
824
+ },
825
+ absl::optional<String>());
826
+ }
827
+ return String(std::move(*result));
828
+ }
1009
829
 
1010
- grpc_error_handle HPackParser::parse_illegal_op(const uint8_t* cur,
1011
- const uint8_t* end) {
1012
- GPR_ASSERT(cur != end);
1013
- grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1014
- absl::StrCat("Illegal hpack op code ", *cur).c_str());
1015
- return parse_error(cur, end, err);
1016
- }
830
+ // Main loop for Unbase64
831
+ static absl::optional<std::vector<uint8_t>> Unbase64Loop(const uint8_t* cur,
832
+ const uint8_t* end) {
833
+ while (cur != end && end[-1] == '=') {
834
+ --end;
835
+ }
1017
836
 
1018
- /* parse the 1st byte of a varint into parsing_.value
1019
- no overflow is possible */
1020
- grpc_error_handle HPackParser::parse_value0(const uint8_t* cur,
1021
- const uint8_t* end) {
1022
- if (cur == end) {
1023
- state_ = &HPackParser::parse_value0;
1024
- return GRPC_ERROR_NONE;
1025
- }
837
+ std::vector<uint8_t> out;
838
+ out.reserve(3 * (end - cur) / 4 + 3);
1026
839
 
1027
- *parsing_.value += (*cur) & 0x7f;
840
+ // Decode 4 bytes at a time while we can
841
+ while (end - cur >= 4) {
842
+ uint32_t bits = kBase64InverseTable.table[*cur];
843
+ if (bits > 63) return {};
844
+ uint32_t buffer = bits << 18;
845
+ ++cur;
1028
846
 
1029
- if ((*cur) & 0x80) {
1030
- return parse_value1(cur + 1, end);
1031
- } else {
1032
- return parse_next(cur + 1, end);
1033
- }
1034
- }
847
+ bits = kBase64InverseTable.table[*cur];
848
+ if (bits > 63) return {};
849
+ buffer |= bits << 12;
850
+ ++cur;
1035
851
 
1036
- /* parse the 2nd byte of a varint into parsing_.value
1037
- no overflow is possible */
1038
- grpc_error_handle HPackParser::parse_value1(const uint8_t* cur,
1039
- const uint8_t* end) {
1040
- if (cur == end) {
1041
- state_ = &HPackParser::parse_value1;
1042
- return GRPC_ERROR_NONE;
1043
- }
852
+ bits = kBase64InverseTable.table[*cur];
853
+ if (bits > 63) return {};
854
+ buffer |= bits << 6;
855
+ ++cur;
1044
856
 
1045
- *parsing_.value += ((static_cast<uint32_t>(*cur)) & 0x7f) << 7;
857
+ bits = kBase64InverseTable.table[*cur];
858
+ if (bits > 63) return {};
859
+ buffer |= bits;
860
+ ++cur;
1046
861
 
1047
- if ((*cur) & 0x80) {
1048
- return parse_value2(cur + 1, end);
1049
- } else {
1050
- return parse_next(cur + 1, end);
1051
- }
1052
- }
862
+ out.insert(out.end(), {static_cast<uint8_t>(buffer >> 16),
863
+ static_cast<uint8_t>(buffer >> 8),
864
+ static_cast<uint8_t>(buffer)});
865
+ }
866
+ // Deal with the last 0, 1, 2, or 3 bytes.
867
+ switch (end - cur) {
868
+ case 0:
869
+ return out;
870
+ case 1:
871
+ return {};
872
+ case 2: {
873
+ uint32_t bits = kBase64InverseTable.table[*cur];
874
+ if (bits > 63) return {};
875
+ uint32_t buffer = bits << 18;
1053
876
 
1054
- /* parse the 3rd byte of a varint into parsing_.value
1055
- no overflow is possible */
1056
- grpc_error_handle HPackParser::parse_value2(const uint8_t* cur,
1057
- const uint8_t* end) {
1058
- if (cur == end) {
1059
- state_ = &HPackParser::parse_value2;
1060
- return GRPC_ERROR_NONE;
1061
- }
877
+ ++cur;
878
+ bits = kBase64InverseTable.table[*cur];
879
+ if (bits > 63) return {};
880
+ buffer |= bits << 12;
1062
881
 
1063
- *parsing_.value += ((static_cast<uint32_t>(*cur)) & 0x7f) << 14;
882
+ if (buffer & 0xffff) return {};
883
+ out.push_back(static_cast<uint8_t>(buffer >> 16));
884
+ return out;
885
+ }
886
+ case 3: {
887
+ uint32_t bits = kBase64InverseTable.table[*cur];
888
+ if (bits > 63) return {};
889
+ uint32_t buffer = bits << 18;
1064
890
 
1065
- if ((*cur) & 0x80) {
1066
- return parse_value3(cur + 1, end);
1067
- } else {
1068
- return parse_next(cur + 1, end);
1069
- }
1070
- }
891
+ ++cur;
892
+ bits = kBase64InverseTable.table[*cur];
893
+ if (bits > 63) return {};
894
+ buffer |= bits << 12;
1071
895
 
1072
- /* parse the 4th byte of a varint into parsing_.value
1073
- no overflow is possible */
1074
- grpc_error_handle HPackParser::parse_value3(const uint8_t* cur,
1075
- const uint8_t* end) {
1076
- if (cur == end) {
1077
- state_ = &HPackParser::parse_value3;
1078
- return GRPC_ERROR_NONE;
1079
- }
896
+ ++cur;
897
+ bits = kBase64InverseTable.table[*cur];
898
+ if (bits > 63) return {};
899
+ buffer |= bits << 6;
1080
900
 
1081
- *parsing_.value += ((static_cast<uint32_t>(*cur)) & 0x7f) << 21;
901
+ ++cur;
902
+ if (buffer & 0xff) return {};
903
+ out.push_back(static_cast<uint8_t>(buffer >> 16));
904
+ out.push_back(static_cast<uint8_t>(buffer >> 8));
905
+ return out;
906
+ }
907
+ }
1082
908
 
1083
- if ((*cur) & 0x80) {
1084
- return parse_value4(cur + 1, end);
1085
- } else {
1086
- return parse_next(cur + 1, end);
909
+ GPR_UNREACHABLE_CODE(return out;);
1087
910
  }
1088
- }
1089
911
 
1090
- /* parse the 5th byte of a varint into parsing_.value
1091
- depending on the byte, we may overflow, and care must be taken */
1092
- grpc_error_handle HPackParser::parse_value4(const uint8_t* cur,
1093
- const uint8_t* end) {
1094
- uint8_t c;
1095
- uint32_t cur_value;
1096
- uint32_t add_value;
912
+ absl::variant<Slice, absl::Span<const uint8_t>, std::vector<uint8_t>> value_;
913
+ };
1097
914
 
1098
- if (cur == end) {
1099
- state_ = &HPackParser::parse_value4;
1100
- return GRPC_ERROR_NONE;
915
+ // Parser parses one key/value pair from a byte stream.
916
+ class HPackParser::Parser {
917
+ public:
918
+ Parser(Input* input, grpc_metadata_batch* metadata_buffer,
919
+ uint32_t metadata_size_limit, HPackTable* table,
920
+ uint8_t* dynamic_table_updates_allowed, uint32_t* frame_length,
921
+ LogInfo log_info)
922
+ : input_(input),
923
+ metadata_buffer_(metadata_buffer),
924
+ table_(table),
925
+ dynamic_table_updates_allowed_(dynamic_table_updates_allowed),
926
+ frame_length_(frame_length),
927
+ metadata_size_limit_(metadata_size_limit),
928
+ log_info_(log_info) {}
929
+
930
+ // Skip any priority bits, or return false on failure
931
+ bool SkipPriority() {
932
+ if (input_->remaining() < 5) return input_->UnexpectedEOF(false);
933
+ input_->Advance(5);
934
+ return true;
1101
935
  }
1102
936
 
1103
- c = (*cur) & 0x7f;
1104
- if (c > 0xf) {
1105
- goto error;
937
+ bool Parse() {
938
+ auto cur = *input_->Next();
939
+ switch (cur >> 4) {
940
+ // Literal header not indexed - First byte format: 0000xxxx
941
+ // Literal header never indexed - First byte format: 0001xxxx
942
+ // Where xxxx:
943
+ // 0000 - literal key
944
+ // 1111 - indexed key, varint encoded index
945
+ // other - indexed key, inline encoded index
946
+ case 0:
947
+ case 1:
948
+ switch (cur & 0xf) {
949
+ case 0: // literal key
950
+ return FinishHeaderOmitFromTable(ParseLiteralKey());
951
+ case 0xf: // varint encoded key index
952
+ return FinishHeaderOmitFromTable(ParseVarIdxKey(0xf));
953
+ default: // inline encoded key index
954
+ return FinishHeaderOmitFromTable(ParseIdxKey(cur & 0xf));
955
+ }
956
+ // Update max table size.
957
+ // First byte format: 001xxxxx
958
+ // Where xxxxx:
959
+ // 11111 - max size is varint encoded
960
+ // other - max size is stored inline
961
+ case 2:
962
+ // inline encoded max table size
963
+ return FinishMaxTableSize(cur & 0x1f);
964
+ case 3:
965
+ if (cur == 0x3f) {
966
+ // varint encoded max table size
967
+ return FinishMaxTableSize(input_->ParseVarint(0x1f));
968
+ } else {
969
+ // inline encoded max table size
970
+ return FinishMaxTableSize(cur & 0x1f);
971
+ }
972
+ // Literal header with incremental indexing.
973
+ // First byte format: 01xxxxxx
974
+ // Where xxxxxx:
975
+ // 000000 - literal key
976
+ // 111111 - indexed key, varint encoded index
977
+ // other - indexed key, inline encoded index
978
+ case 4:
979
+ if (cur == 0x40) {
980
+ // literal key
981
+ return FinishHeaderAndAddToTable(ParseLiteralKey());
982
+ }
983
+ ABSL_FALLTHROUGH_INTENDED;
984
+ case 5:
985
+ case 6:
986
+ // inline encoded key index
987
+ return FinishHeaderAndAddToTable(ParseIdxKey(cur & 0x3f));
988
+ case 7:
989
+ if (cur == 0x7f) {
990
+ // varint encoded key index
991
+ return FinishHeaderAndAddToTable(ParseVarIdxKey(0x3f));
992
+ } else {
993
+ // inline encoded key index
994
+ return FinishHeaderAndAddToTable(ParseIdxKey(cur & 0x3f));
995
+ }
996
+ // Indexed Header Field Representation
997
+ // First byte format: 1xxxxxxx
998
+ // Where xxxxxxx:
999
+ // 0000000 - illegal
1000
+ // 1111111 - varint encoded field index
1001
+ // other - inline encoded field index
1002
+ case 8:
1003
+ if (cur == 0x80) {
1004
+ // illegal value.
1005
+ return input_->MaybeSetErrorAndReturn(
1006
+ [] {
1007
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1008
+ "Illegal hpack op code");
1009
+ },
1010
+ false);
1011
+ }
1012
+ ABSL_FALLTHROUGH_INTENDED;
1013
+ case 9:
1014
+ case 10:
1015
+ case 11:
1016
+ case 12:
1017
+ case 13:
1018
+ case 14:
1019
+ // inline encoded field index
1020
+ return FinishIndexed(cur & 0x7f);
1021
+ case 15:
1022
+ if (cur == 0xff) {
1023
+ // varint encoded field index
1024
+ return FinishIndexed(input_->ParseVarint(0x7f));
1025
+ } else {
1026
+ // inline encoded field index
1027
+ return FinishIndexed(cur & 0x7f);
1028
+ }
1029
+ }
1030
+ GPR_UNREACHABLE_CODE(abort());
1106
1031
  }
1107
1032
 
1108
- cur_value = *parsing_.value;
1109
- add_value = (static_cast<uint32_t>(c)) << 28;
1110
- if (add_value > 0xffffffffu - cur_value) {
1111
- goto error;
1033
+ private:
1034
+ void GPR_ATTRIBUTE_NOINLINE LogHeader(const HPackTable::Memento& memento) {
1035
+ const char* type;
1036
+ switch (log_info_.type) {
1037
+ case LogInfo::kHeaders:
1038
+ type = "HDR";
1039
+ break;
1040
+ case LogInfo::kTrailers:
1041
+ type = "TRL";
1042
+ break;
1043
+ case LogInfo::kDontKnow:
1044
+ type = "???";
1045
+ break;
1046
+ }
1047
+ gpr_log(GPR_DEBUG, "HTTP:%d:%s:%s: %s", log_info_.stream_id, type,
1048
+ log_info_.is_client ? "CLI" : "SVR", memento.DebugString().c_str());
1112
1049
  }
1113
1050
 
1114
- *parsing_.value = cur_value + add_value;
1051
+ bool EmitHeader(const HPackTable::Memento& md) {
1052
+ // Pass up to the transport
1053
+ if (GPR_UNLIKELY(metadata_buffer_ == nullptr)) return true;
1054
+ *frame_length_ += md.transport_size();
1055
+ if (GPR_UNLIKELY(*frame_length_ > metadata_size_limit_)) {
1056
+ return HandleMetadataSizeLimitExceeded(md);
1057
+ }
1115
1058
 
1116
- if ((*cur) & 0x80) {
1117
- return parse_value5up(cur + 1, end);
1118
- } else {
1119
- return parse_next(cur + 1, end);
1059
+ metadata_buffer_->Set(md);
1060
+ return true;
1120
1061
  }
1121
1062
 
1122
- error:
1123
- grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1124
- absl::StrFormat(
1125
- "integer overflow in hpack integer decoding: have 0x%08x, "
1126
- "got byte 0x%02x on byte 5",
1127
- *parsing_.value, *cur)
1128
- .c_str());
1129
- return parse_error(cur, end, err);
1130
- }
1131
-
1132
- /* parse any trailing bytes in a varint: it's possible to append an arbitrary
1133
- number of 0x80's and not affect the value - a zero will terminate - and
1134
- anything else will overflow */
1135
- grpc_error_handle HPackParser::parse_value5up(const uint8_t* cur,
1136
- const uint8_t* end) {
1137
- while (cur != end && *cur == 0x80) {
1138
- ++cur;
1063
+ bool FinishHeaderAndAddToTable(absl::optional<HPackTable::Memento> md) {
1064
+ // Allow higher code to just pass in failures ... simplifies things a bit.
1065
+ if (!md.has_value()) return false;
1066
+ // Log if desired
1067
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
1068
+ LogHeader(*md);
1069
+ }
1070
+ // Emit whilst we own the metadata.
1071
+ auto r = EmitHeader(*md);
1072
+ // Add to the hpack table
1073
+ grpc_error_handle err = table_->Add(std::move(*md));
1074
+ if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
1075
+ input_->SetError(err);
1076
+ return false;
1077
+ };
1078
+ return r;
1139
1079
  }
1140
1080
 
1141
- if (cur == end) {
1142
- state_ = &HPackParser::parse_value5up;
1143
- return GRPC_ERROR_NONE;
1081
+ bool FinishHeaderOmitFromTable(absl::optional<HPackTable::Memento> md) {
1082
+ // Allow higher code to just pass in failures ... simplifies things a bit.
1083
+ if (!md.has_value()) return false;
1084
+ return FinishHeaderOmitFromTable(*md);
1144
1085
  }
1145
1086
 
1146
- if (*cur == 0) {
1147
- return parse_next(cur + 1, end);
1087
+ bool FinishHeaderOmitFromTable(const HPackTable::Memento& md) {
1088
+ // Log if desired
1089
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
1090
+ LogHeader(md);
1091
+ }
1092
+ return EmitHeader(md);
1148
1093
  }
1149
1094
 
1150
- grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1151
- absl::StrFormat(
1152
- "integer overflow in hpack integer decoding: have 0x%08x, "
1153
- "got byte 0x%02x sometime after byte 5",
1154
- *parsing_.value, *cur)
1155
- .c_str());
1156
- return parse_error(cur, end, err);
1157
- }
1158
-
1159
- /* parse a string prefix */
1160
- grpc_error_handle HPackParser::parse_string_prefix(const uint8_t* cur,
1161
- const uint8_t* end) {
1162
- if (cur == end) {
1163
- state_ = &HPackParser::parse_string_prefix;
1164
- return GRPC_ERROR_NONE;
1095
+ // Parse a string encoded key and a string encoded value
1096
+ absl::optional<HPackTable::Memento> ParseLiteralKey() {
1097
+ auto key = String::Parse(input_);
1098
+ if (!key.has_value()) return {};
1099
+ auto value = ParseValueString(absl::EndsWith(key->string_view(), "-bin"));
1100
+ if (GPR_UNLIKELY(!value.has_value())) {
1101
+ return {};
1102
+ }
1103
+ auto key_string = key->string_view();
1104
+ auto value_slice = value->Take();
1105
+ const auto transport_size = key_string.size() + value_slice.size() +
1106
+ hpack_constants::kEntryOverhead;
1107
+ return grpc_metadata_batch::Parse(
1108
+ key->string_view(), std::move(value_slice), transport_size,
1109
+ [key_string](absl::string_view error, const Slice& value) {
1110
+ ReportMetadataParseError(key_string, error, value.as_string_view());
1111
+ });
1165
1112
  }
1166
1113
 
1167
- strlen_ = (*cur) & 0x7f;
1168
- huff_ = (*cur) >> 7;
1169
- if (strlen_ == 0x7f) {
1170
- parsing_.value = &strlen_;
1171
- return parse_value0(cur + 1, end);
1172
- } else {
1173
- return parse_next(cur + 1, end);
1114
+ // Parse an index encoded key and a string encoded value
1115
+ absl::optional<HPackTable::Memento> ParseIdxKey(uint32_t index) {
1116
+ const auto* elem = table_->Lookup(index);
1117
+ if (GPR_UNLIKELY(elem == nullptr)) {
1118
+ return InvalidHPackIndexError(index,
1119
+ absl::optional<HPackTable::Memento>());
1120
+ }
1121
+ auto value = ParseValueString(elem->is_binary_header());
1122
+ if (GPR_UNLIKELY(!value.has_value())) return {};
1123
+ return elem->WithNewValue(
1124
+ value->Take(), [=](absl::string_view error, const Slice& value) {
1125
+ ReportMetadataParseError(elem->key(), error, value.as_string_view());
1126
+ });
1174
1127
  }
1175
- }
1176
1128
 
1177
- /* append some bytes to a string */
1178
- void HPackParser::String::AppendBytes(const uint8_t* data, size_t length) {
1179
- if (length == 0) return;
1180
- if (length + data_.copied.length > data_.copied.capacity) {
1181
- GPR_ASSERT(data_.copied.length + length <= UINT32_MAX);
1182
- data_.copied.capacity = static_cast<uint32_t>(data_.copied.length + length);
1183
- data_.copied.str = static_cast<char*>(
1184
- gpr_realloc(data_.copied.str, data_.copied.capacity));
1129
+ // Parse a varint index encoded key and a string encoded value
1130
+ absl::optional<HPackTable::Memento> ParseVarIdxKey(uint32_t offset) {
1131
+ auto index = input_->ParseVarint(offset);
1132
+ if (GPR_UNLIKELY(!index.has_value())) return {};
1133
+ return ParseIdxKey(*index);
1185
1134
  }
1186
- memcpy(data_.copied.str + data_.copied.length, data, length);
1187
- GPR_ASSERT(length <= UINT32_MAX - data_.copied.length);
1188
- data_.copied.length += static_cast<uint32_t>(length);
1189
- }
1190
1135
 
1191
- grpc_error_handle HPackParser::AppendString(const uint8_t* cur,
1192
- const uint8_t* end) {
1193
- String* str = parsing_.str;
1194
- uint32_t bits;
1195
- uint8_t decoded[3];
1196
- switch (binary_) {
1197
- case BinaryState::kNotBinary:
1198
- str->AppendBytes(cur, static_cast<size_t>(end - cur));
1199
- return GRPC_ERROR_NONE;
1200
- case BinaryState::kBinaryBegin:
1201
- if (cur == end) {
1202
- binary_ = BinaryState::kBinaryBegin;
1203
- return GRPC_ERROR_NONE;
1204
- }
1205
- if (*cur == 0) {
1206
- /* 'true-binary' case */
1207
- ++cur;
1208
- binary_ = BinaryState::kNotBinary;
1209
- GRPC_STATS_INC_HPACK_RECV_BINARY();
1210
- str->AppendBytes(cur, static_cast<size_t>(end - cur));
1211
- return GRPC_ERROR_NONE;
1212
- }
1213
- GRPC_STATS_INC_HPACK_RECV_BINARY_BASE64();
1214
- b64_byte0:
1215
- ABSL_FALLTHROUGH_INTENDED;
1216
- case BinaryState::kBase64Byte0:
1217
- if (cur == end) {
1218
- binary_ = BinaryState::kBase64Byte0;
1219
- return GRPC_ERROR_NONE;
1220
- }
1221
- bits = kBase64InverseTable.table[*cur];
1222
- ++cur;
1223
- if (bits == 255) {
1224
- return parse_error(
1225
- cur, end,
1226
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character"));
1227
- } else if (bits == 64) {
1228
- goto b64_byte0;
1229
- }
1230
- base64_buffer_ = bits << 18;
1231
- b64_byte1:
1232
- ABSL_FALLTHROUGH_INTENDED;
1233
- case BinaryState::kBase64Byte1:
1234
- if (cur == end) {
1235
- binary_ = BinaryState::kBase64Byte1;
1236
- return GRPC_ERROR_NONE;
1237
- }
1238
- bits = kBase64InverseTable.table[*cur];
1239
- ++cur;
1240
- if (bits == 255) {
1241
- return parse_error(
1242
- cur, end,
1243
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character"));
1244
- } else if (bits == 64) {
1245
- goto b64_byte1;
1246
- }
1247
- base64_buffer_ |= bits << 12;
1248
- b64_byte2:
1249
- ABSL_FALLTHROUGH_INTENDED;
1250
- case BinaryState::kBase64Byte2:
1251
- if (cur == end) {
1252
- binary_ = BinaryState::kBase64Byte2;
1253
- return GRPC_ERROR_NONE;
1254
- }
1255
- bits = kBase64InverseTable.table[*cur];
1256
- ++cur;
1257
- if (bits == 255) {
1258
- return parse_error(
1259
- cur, end,
1260
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character"));
1261
- } else if (bits == 64) {
1262
- goto b64_byte2;
1263
- }
1264
- base64_buffer_ |= bits << 6;
1265
- b64_byte3:
1266
- ABSL_FALLTHROUGH_INTENDED;
1267
- case BinaryState::kBase64Byte3:
1268
- if (cur == end) {
1269
- binary_ = BinaryState::kBase64Byte3;
1270
- return GRPC_ERROR_NONE;
1271
- }
1272
- bits = kBase64InverseTable.table[*cur];
1273
- ++cur;
1274
- if (bits == 255) {
1275
- return parse_error(
1276
- cur, end,
1277
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character"));
1278
- } else if (bits == 64) {
1279
- goto b64_byte3;
1280
- }
1281
- base64_buffer_ |= bits;
1282
- bits = base64_buffer_;
1283
- decoded[0] = static_cast<uint8_t>(bits >> 16);
1284
- decoded[1] = static_cast<uint8_t>(bits >> 8);
1285
- decoded[2] = static_cast<uint8_t>(bits);
1286
- str->AppendBytes(decoded, 3);
1287
- goto b64_byte0;
1136
+ // Parse a string, figuring out if it's binary or not by the key name.
1137
+ absl::optional<String> ParseValueString(bool is_binary) {
1138
+ if (is_binary) {
1139
+ return String::ParseBinary(input_);
1140
+ } else {
1141
+ return String::Parse(input_);
1142
+ }
1288
1143
  }
1289
- GPR_UNREACHABLE_CODE(return parse_error(
1290
- cur, end,
1291
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here")));
1292
- }
1293
1144
 
1294
- grpc_error_handle HPackParser::finish_str(const uint8_t* cur,
1295
- const uint8_t* end) {
1296
- uint8_t decoded[2];
1297
- uint32_t bits;
1298
- String* str = parsing_.str;
1299
- switch (binary_) {
1300
- case BinaryState::kNotBinary:
1301
- break;
1302
- case BinaryState::kBinaryBegin:
1303
- break;
1304
- case BinaryState::kBase64Byte0:
1305
- break;
1306
- case BinaryState::kBase64Byte1:
1307
- return parse_error(cur, end,
1308
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1309
- "illegal base64 encoding")); /* illegal encoding */
1310
- case BinaryState::kBase64Byte2:
1311
- bits = base64_buffer_;
1312
- if (bits & 0xffff) {
1313
- grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1314
- absl::StrFormat("trailing bits in base64 encoding: 0x%04x",
1315
- bits & 0xffff)
1316
- .c_str());
1317
- return parse_error(cur, end, err);
1318
- }
1319
- decoded[0] = static_cast<uint8_t>(bits >> 16);
1320
- str->AppendBytes(decoded, 1);
1321
- break;
1322
- case BinaryState::kBase64Byte3:
1323
- bits = base64_buffer_;
1324
- if (bits & 0xff) {
1325
- grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1326
- absl::StrFormat("trailing bits in base64 encoding: 0x%02x",
1327
- bits & 0xff)
1328
- .c_str());
1329
- return parse_error(cur, end, err);
1330
- }
1331
- decoded[0] = static_cast<uint8_t>(bits >> 16);
1332
- decoded[1] = static_cast<uint8_t>(bits >> 8);
1333
- str->AppendBytes(decoded, 2);
1334
- break;
1145
+ // Emit an indexed field
1146
+ bool FinishIndexed(absl::optional<uint32_t> index) {
1147
+ *dynamic_table_updates_allowed_ = 0;
1148
+ if (!index.has_value()) return false;
1149
+ const auto* elem = table_->Lookup(*index);
1150
+ if (GPR_UNLIKELY(elem == nullptr)) {
1151
+ return InvalidHPackIndexError(*index, false);
1152
+ }
1153
+ GRPC_STATS_INC_HPACK_RECV_INDEXED();
1154
+ return FinishHeaderOmitFromTable(*elem);
1335
1155
  }
1336
- return GRPC_ERROR_NONE;
1337
- }
1338
1156
 
1339
- /* decode a nibble from a huffman encoded stream */
1340
- grpc_error_handle HPackParser::AppendHuffNibble(uint8_t nibble) {
1341
- int16_t emit = emit_sub_tbl[16 * emit_tbl[huff_state_] + nibble];
1342
- int16_t next = next_sub_tbl[16 * next_tbl[huff_state_] + nibble];
1343
- if (emit != -1) {
1344
- if (emit >= 0 && emit < 256) {
1345
- uint8_t c = static_cast<uint8_t>(emit);
1346
- grpc_error_handle err = AppendString(&c, (&c) + 1);
1347
- if (err != GRPC_ERROR_NONE) return err;
1348
- } else {
1349
- assert(emit == 256);
1157
+ // finish parsing a max table size change
1158
+ bool FinishMaxTableSize(absl::optional<uint32_t> size) {
1159
+ if (!size.has_value()) return false;
1160
+ if (*dynamic_table_updates_allowed_ == 0) {
1161
+ return input_->MaybeSetErrorAndReturn(
1162
+ [] {
1163
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1164
+ "More than two max table size changes in a single frame");
1165
+ },
1166
+ false);
1350
1167
  }
1168
+ (*dynamic_table_updates_allowed_)--;
1169
+ grpc_error_handle err = table_->SetCurrentTableSize(*size);
1170
+ if (err != GRPC_ERROR_NONE) {
1171
+ input_->SetError(err);
1172
+ return false;
1173
+ }
1174
+ return true;
1351
1175
  }
1352
- huff_state_ = next;
1353
- return GRPC_ERROR_NONE;
1354
- }
1355
1176
 
1356
- /* decode full bytes from a huffman encoded stream */
1357
- grpc_error_handle HPackParser::AppendHuffBytes(const uint8_t* cur,
1358
- const uint8_t* end) {
1359
- for (; cur != end; ++cur) {
1360
- grpc_error_handle err = AppendHuffNibble(*cur >> 4);
1361
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
1362
- err = AppendHuffNibble(*cur & 0xf);
1363
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
1177
+ // Set an invalid hpack index error if no error has been set. Returns result
1178
+ // unmodified.
1179
+ template <typename R>
1180
+ R InvalidHPackIndexError(uint32_t index, R result) {
1181
+ return input_->MaybeSetErrorAndReturn(
1182
+ [this, index] {
1183
+ return grpc_error_set_int(
1184
+ grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1185
+ "Invalid HPACK index received"),
1186
+ GRPC_ERROR_INT_INDEX,
1187
+ static_cast<intptr_t>(index)),
1188
+ GRPC_ERROR_INT_SIZE,
1189
+ static_cast<intptr_t>(this->table_->num_entries()));
1190
+ },
1191
+ std::move(result));
1364
1192
  }
1365
- return GRPC_ERROR_NONE;
1366
- }
1367
1193
 
1368
- /* decode some string bytes based on the current decoding mode
1369
- (huffman or not) */
1370
- grpc_error_handle HPackParser::AppendStrBytes(const uint8_t* cur,
1371
- const uint8_t* end) {
1372
- if (huff_) {
1373
- return AppendHuffBytes(cur, end);
1374
- } else {
1375
- return AppendString(cur, end);
1194
+ GPR_ATTRIBUTE_NOINLINE
1195
+ bool HandleMetadataSizeLimitExceeded(const HPackTable::Memento&) {
1196
+ gpr_log(GPR_DEBUG,
1197
+ "received initial metadata size exceeds limit (%" PRIu32
1198
+ " vs. %" PRIu32
1199
+ "). GRPC_ARG_MAX_METADATA_SIZE can be set to increase this limit.",
1200
+ *frame_length_, metadata_size_limit_);
1201
+ if (metadata_buffer_ != nullptr) metadata_buffer_->Clear();
1202
+ return input_->MaybeSetErrorAndReturn(
1203
+ [] {
1204
+ return grpc_error_set_int(
1205
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1206
+ "received initial metadata size exceeds limit"),
1207
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
1208
+ },
1209
+ false);
1376
1210
  }
1377
- }
1378
1211
 
1379
- /* parse a string - tries to do large chunks at a time */
1380
- grpc_error_handle HPackParser::parse_string(const uint8_t* cur,
1381
- const uint8_t* end) {
1382
- size_t remaining = strlen_ - strgot_;
1383
- size_t given = static_cast<size_t>(end - cur);
1384
- if (remaining <= given) {
1385
- grpc_error_handle err = AppendStrBytes(cur, cur + remaining);
1386
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
1387
- err = finish_str(cur + remaining, end);
1388
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
1389
- return parse_next(cur + remaining, end);
1390
- } else {
1391
- grpc_error_handle err = AppendStrBytes(cur, cur + given);
1392
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
1393
- GPR_ASSERT(given <= UINT32_MAX - strgot_);
1394
- strgot_ += static_cast<uint32_t>(given);
1395
- state_ = &HPackParser::parse_string;
1396
- return GRPC_ERROR_NONE;
1212
+ static void ReportMetadataParseError(absl::string_view key,
1213
+ absl::string_view error,
1214
+ absl::string_view value) {
1215
+ gpr_log(
1216
+ GPR_ERROR, "Error parsing metadata: %s",
1217
+ absl::StrCat("error=", error, " key=", key, " value=", value).c_str());
1397
1218
  }
1398
- }
1399
1219
 
1400
- /* begin parsing a string - performs setup, calls parse_string */
1401
- grpc_error_handle HPackParser::begin_parse_string(const uint8_t* cur,
1402
- const uint8_t* end,
1403
- BinaryState binary,
1404
- HPackParser::String* str) {
1405
- if (!huff_ && binary == BinaryState::kNotBinary &&
1406
- static_cast<uint32_t>(end - cur) >= strlen_ &&
1407
- current_slice_refcount_ != nullptr) {
1408
- GRPC_STATS_INC_HPACK_RECV_UNCOMPRESSED();
1409
- str->copied_ = false;
1410
- str->data_.referenced.refcount = current_slice_refcount_;
1411
- str->data_.referenced.data.refcounted.bytes = const_cast<uint8_t*>(cur);
1412
- str->data_.referenced.data.refcounted.length = strlen_;
1413
- grpc_slice_ref_internal(str->data_.referenced);
1414
- return parse_next(cur + strlen_, end);
1415
- }
1416
- strgot_ = 0;
1417
- str->copied_ = true;
1418
- str->data_.copied.length = 0;
1419
- parsing_.str = str;
1420
- huff_state_ = 0;
1421
- binary_ = binary;
1422
- switch (binary_) {
1423
- case BinaryState::kNotBinary:
1424
- if (huff_) {
1425
- GRPC_STATS_INC_HPACK_RECV_HUFFMAN();
1426
- } else {
1427
- GRPC_STATS_INC_HPACK_RECV_UNCOMPRESSED();
1428
- }
1429
- break;
1430
- case BinaryState::kBinaryBegin:
1431
- /* stats incremented later: don't know true binary or not */
1432
- break;
1433
- default:
1434
- abort();
1220
+ Input* const input_;
1221
+ grpc_metadata_batch* const metadata_buffer_;
1222
+ HPackTable* const table_;
1223
+ uint8_t* const dynamic_table_updates_allowed_;
1224
+ uint32_t* const frame_length_;
1225
+ const uint32_t metadata_size_limit_;
1226
+ const LogInfo log_info_;
1227
+ };
1228
+
1229
+ Slice HPackParser::String::Take() {
1230
+ if (auto* p = absl::get_if<Slice>(&value_)) {
1231
+ return p->Copy();
1232
+ } else if (auto* p = absl::get_if<absl::Span<const uint8_t>>(&value_)) {
1233
+ return Slice::FromCopiedBuffer(*p);
1234
+ } else if (auto* p = absl::get_if<std::vector<uint8_t>>(&value_)) {
1235
+ return Slice::FromCopiedBuffer(*p);
1435
1236
  }
1436
- return parse_string(cur, end);
1237
+ GPR_UNREACHABLE_CODE(return Slice());
1437
1238
  }
1438
1239
 
1439
- /* parse the key string */
1440
- grpc_error_handle HPackParser::parse_key_string(const uint8_t* cur,
1441
- const uint8_t* end) {
1442
- return begin_parse_string(cur, end, BinaryState::kNotBinary, &key_);
1443
- }
1240
+ /* PUBLIC INTERFACE */
1444
1241
 
1445
- /* check if a key represents a binary header or not */
1446
-
1447
- bool HPackParser::IsBinaryLiteralHeader() {
1448
- /* We know that either argument here is a reference counter slice.
1449
- * 1. If it is a grpc_core::StaticSlice, the refcount is set to kNoopRefcount.
1450
- * 2. If it's key_.data.referenced, then key_.copied was set to false,
1451
- * which occurs in begin_parse_string() - where the refcount is set to
1452
- * current_slice_refcount_, which is not null. */
1453
- return grpc_is_refcounted_slice_binary_header(
1454
- key_.copied_ ? grpc_core::ExternallyManagedSlice(key_.data_.copied.str,
1455
- key_.data_.copied.length)
1456
- : key_.data_.referenced);
1457
- }
1242
+ HPackParser::HPackParser() = default;
1458
1243
 
1459
- /* Cache the metadata for the given index during initial parsing. This avoids a
1460
- pointless recomputation of the metadata when finishing a header. We read the
1461
- cached value in get_precomputed_md_for_idx(). */
1462
- void HPackParser::SetPrecomputedMDIndex(grpc_mdelem md) {
1463
- GPR_DEBUG_ASSERT(md_for_index_.payload == 0);
1464
- GPR_DEBUG_ASSERT(precomputed_md_index_ == -1);
1465
- md_for_index_ = md;
1466
- #ifndef NDEBUG
1467
- precomputed_md_index_ = index_;
1468
- #endif
1469
- }
1244
+ HPackParser::~HPackParser() = default;
1470
1245
 
1471
- /* Determines if a metadata element key associated with the current parser index
1472
- is a binary indexed header during string parsing. We'll need to revisit this
1473
- metadata when we're done parsing, so we cache the metadata for this index
1474
- here using set_precomputed_md_idx(). */
1475
- grpc_error_handle HPackParser::IsBinaryIndexedHeader(bool* is) {
1476
- grpc_mdelem elem = grpc_chttp2_hptbl_lookup(&table_, index_);
1477
- if (GPR_UNLIKELY(GRPC_MDISNULL(elem))) {
1478
- return InvalidHPackIndexError();
1246
+ void HPackParser::BeginFrame(grpc_metadata_batch* metadata_buffer,
1247
+ uint32_t metadata_size_limit, Boundary boundary,
1248
+ Priority priority, LogInfo log_info) {
1249
+ metadata_buffer_ = metadata_buffer;
1250
+ boundary_ = boundary;
1251
+ priority_ = priority;
1252
+ dynamic_table_updates_allowed_ = 2;
1253
+ frame_length_ = 0;
1254
+ metadata_size_limit_ = metadata_size_limit;
1255
+ log_info_ = log_info;
1256
+ }
1257
+
1258
+ grpc_error_handle HPackParser::Parse(const grpc_slice& slice, bool is_last) {
1259
+ if (GPR_UNLIKELY(!unparsed_bytes_.empty())) {
1260
+ std::vector<uint8_t> buffer = std::move(unparsed_bytes_);
1261
+ buffer.insert(buffer.end(), GRPC_SLICE_START_PTR(slice),
1262
+ GRPC_SLICE_END_PTR(slice));
1263
+ return ParseInput(
1264
+ Input(nullptr, buffer.data(), buffer.data() + buffer.size()), is_last);
1479
1265
  }
1480
- /* We know that GRPC_MDKEY(elem) points to a reference counted slice since:
1481
- * 1. elem was a result of grpc_chttp2_hptbl_lookup
1482
- * 2. An item in this table is either static (see entries with
1483
- * index < GRPC_CHTTP2_LAST_STATIC_ENTRY or added via
1484
- * grpc_chttp2_hptbl_add).
1485
- * 3. If added via grpc_chttp2_hptbl_add, the entry is either static or
1486
- * interned.
1487
- * 4. Both static and interned element slices have non-null refcounts. */
1488
- *is = grpc_is_refcounted_slice_binary_header(GRPC_MDKEY(elem));
1489
- SetPrecomputedMDIndex(elem);
1490
- return GRPC_ERROR_NONE;
1266
+ return ParseInput(Input(slice.refcount, GRPC_SLICE_START_PTR(slice),
1267
+ GRPC_SLICE_END_PTR(slice)),
1268
+ is_last);
1491
1269
  }
1492
1270
 
1493
- /* parse the value string */
1494
- grpc_error_handle HPackParser::parse_value_string(const uint8_t* cur,
1495
- const uint8_t* end,
1496
- bool is_binary) {
1497
- return begin_parse_string(
1498
- cur, end, is_binary ? BinaryState::kBinaryBegin : BinaryState::kNotBinary,
1499
- &value_);
1500
- }
1501
-
1502
- grpc_error_handle HPackParser::parse_value_string_with_indexed_key(
1503
- const uint8_t* cur, const uint8_t* end) {
1504
- bool is_binary = false;
1505
- grpc_error_handle err = IsBinaryIndexedHeader(&is_binary);
1506
- if (err != GRPC_ERROR_NONE) return parse_error(cur, end, err);
1507
- return parse_value_string(cur, end, is_binary);
1508
- }
1509
-
1510
- grpc_error_handle HPackParser::parse_value_string_with_literal_key(
1511
- const uint8_t* cur, const uint8_t* end) {
1512
- return parse_value_string(cur, end, IsBinaryLiteralHeader());
1513
- }
1514
-
1515
- /* PUBLIC INTERFACE */
1516
-
1517
- HPackParser::HPackParser() {
1518
- state_ = &HPackParser::parse_begin;
1519
- key_.data_.referenced = grpc_empty_slice();
1520
- key_.data_.copied.str = nullptr;
1521
- key_.data_.copied.capacity = 0;
1522
- key_.data_.copied.length = 0;
1523
- value_.data_.referenced = grpc_empty_slice();
1524
- value_.data_.copied.str = nullptr;
1525
- value_.data_.copied.capacity = 0;
1526
- value_.data_.copied.length = 0;
1527
- /* Cached metadata for the current index the parser is handling. This is set
1528
- to 0 initially, invalidated when the index changes, and invalidated when it
1529
- is read (by get_precomputed_md_for_idx()). It is set during string parsing,
1530
- by set_precomputed_md_idx() - which is called by parse_value_string().
1531
- The goal here is to avoid recomputing the metadata for the index when
1532
- finishing with a header as well as the initial parse. */
1533
- md_for_index_.payload = 0;
1534
- #ifndef NDEBUG
1535
- /* In debug mode, this ensures that the cached metadata we're reading is in
1536
- * fact correct for the index we are examining. */
1537
- precomputed_md_index_ = -1;
1538
- #endif
1539
- dynamic_table_updates_allowed_ = 2;
1540
- last_error_ = GRPC_ERROR_NONE;
1271
+ grpc_error_handle HPackParser::ParseInput(Input input, bool is_last) {
1272
+ if (ParseInputInner(&input)) {
1273
+ return GRPC_ERROR_NONE;
1274
+ }
1275
+ if (input.eof_error()) {
1276
+ if (GPR_UNLIKELY(is_last && is_boundary())) {
1277
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1278
+ "Incomplete header at the end of a header/continuation sequence");
1279
+ }
1280
+ unparsed_bytes_ = std::vector<uint8_t>(input.frontier(), input.end_ptr());
1281
+ return GRPC_ERROR_NONE;
1282
+ }
1283
+ return input.TakeError();
1541
1284
  }
1542
1285
 
1543
- void HPackParser::BeginFrame(Sink sink, Boundary boundary, Priority priority) {
1544
- sink_ = std::move(sink);
1545
- boundary_ = boundary;
1546
- switch (priority) {
1547
- case Priority::Included:
1548
- after_prioritization_ = state_;
1549
- state_ = &HPackParser::parse_stream_dep0;
1550
- break;
1286
+ bool HPackParser::ParseInputInner(Input* input) {
1287
+ switch (priority_) {
1551
1288
  case Priority::None:
1552
1289
  break;
1290
+ case Priority::Included: {
1291
+ if (input->remaining() < 5) return input->UnexpectedEOF(false);
1292
+ input->Advance(5);
1293
+ input->UpdateFrontier();
1294
+ priority_ = Priority::None;
1295
+ }
1553
1296
  }
1554
- }
1555
-
1556
- HPackParser::~HPackParser() {
1557
- grpc_chttp2_hptbl_destroy(&table_);
1558
- GRPC_ERROR_UNREF(last_error_);
1559
- grpc_slice_unref_internal(key_.data_.referenced);
1560
- grpc_slice_unref_internal(value_.data_.referenced);
1561
- gpr_free(key_.data_.copied.str);
1562
- gpr_free(value_.data_.copied.str);
1563
- }
1564
-
1565
- grpc_error_handle HPackParser::Parse(const grpc_slice& slice) {
1566
- /* max number of bytes to parse at a time... limits call stack depth on
1567
- * compilers without TCO */
1568
- #define MAX_PARSE_LENGTH 1024
1569
- current_slice_refcount_ = slice.refcount;
1570
- const uint8_t* start = GRPC_SLICE_START_PTR(slice);
1571
- const uint8_t* end = GRPC_SLICE_END_PTR(slice);
1572
- grpc_error_handle error = GRPC_ERROR_NONE;
1573
- while (start != end && error == GRPC_ERROR_NONE) {
1574
- const uint8_t* target = start + GPR_MIN(MAX_PARSE_LENGTH, end - start);
1575
- error = (this->*state_)(start, target);
1576
- start = target;
1297
+ while (!input->end_of_stream()) {
1298
+ if (GPR_UNLIKELY(!Parser(input, metadata_buffer_, metadata_size_limit_,
1299
+ &table_, &dynamic_table_updates_allowed_,
1300
+ &frame_length_, log_info_)
1301
+ .Parse())) {
1302
+ return false;
1303
+ }
1304
+ input->UpdateFrontier();
1577
1305
  }
1578
- current_slice_refcount_ = nullptr;
1579
- return error;
1306
+ return true;
1580
1307
  }
1581
1308
 
1309
+ void HPackParser::FinishFrame() { metadata_buffer_ = nullptr; }
1310
+
1582
1311
  } // namespace grpc_core
1583
1312
 
1584
1313
  // TODO(ctiller): this serves as an eviction notice for the remainder of this
@@ -1602,24 +1331,6 @@ static void force_client_rst_stream(void* sp, grpc_error_handle /*error*/) {
1602
1331
  GRPC_CHTTP2_STREAM_UNREF(s, "final_rst");
1603
1332
  }
1604
1333
 
1605
- static void parse_stream_compression_md(grpc_chttp2_transport* /*t*/,
1606
- grpc_chttp2_stream* s,
1607
- grpc_metadata_batch* initial_metadata) {
1608
- if (initial_metadata->idx.named.content_encoding == nullptr ||
1609
- grpc_stream_compression_method_parse(
1610
- GRPC_MDVALUE(initial_metadata->idx.named.content_encoding->md), false,
1611
- &s->stream_decompression_method) == 0) {
1612
- s->stream_decompression_method =
1613
- GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS;
1614
- }
1615
-
1616
- if (s->stream_decompression_method !=
1617
- GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
1618
- s->stream_decompression_ctx = nullptr;
1619
- grpc_slice_buffer_init(&s->decompressed_data_buffer);
1620
- }
1621
- }
1622
-
1623
1334
  grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
1624
1335
  grpc_chttp2_transport* t,
1625
1336
  grpc_chttp2_stream* s,
@@ -1630,28 +1341,19 @@ grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
1630
1341
  if (s != nullptr) {
1631
1342
  s->stats.incoming.header_bytes += GRPC_SLICE_LENGTH(slice);
1632
1343
  }
1633
- grpc_error_handle error = parser->Parse(slice);
1344
+ grpc_error_handle error = parser->Parse(slice, is_last != 0);
1634
1345
  if (error != GRPC_ERROR_NONE) {
1635
1346
  return error;
1636
1347
  }
1637
1348
  if (is_last) {
1638
- if (parser->is_boundary() && !parser->is_in_begin_state()) {
1639
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1640
- "end of header frame not aligned with a hpack record boundary");
1641
- }
1642
1349
  /* need to check for null stream: this can occur if we receive an invalid
1643
1350
  stream id on a header */
1644
1351
  if (s != nullptr) {
1645
1352
  if (parser->is_boundary()) {
1646
- if (s->header_frames_received == GPR_ARRAY_SIZE(s->metadata_buffer)) {
1353
+ if (s->header_frames_received == 2) {
1647
1354
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1648
1355
  "Too many trailer frames");
1649
1356
  }
1650
- /* Process stream compression md element if it exists */
1651
- if (s->header_frames_received ==
1652
- 0) { /* Only acts on initial metadata */
1653
- parse_stream_compression_md(t, s, &s->metadata_buffer[0].batch);
1654
- }
1655
1357
  s->published_metadata[s->header_frames_received] =
1656
1358
  GRPC_METADATA_PUBLISHED_FROM_WIRE;
1657
1359
  maybe_complete_funcs[s->header_frames_received](t, s);