grpc 1.35.0 → 1.47.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

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