grpc 1.28.0 → 1.42.0

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

Potentially problematic release.


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

Files changed (1954) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1824 -22390
  3. data/etc/roots.pem +592 -899
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/compression.h +1 -1
  7. data/include/grpc/event_engine/README.md +38 -0
  8. data/include/grpc/event_engine/endpoint_config.h +43 -0
  9. data/include/grpc/event_engine/event_engine.h +375 -0
  10. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  11. data/include/grpc/event_engine/memory_allocator.h +210 -0
  12. data/include/grpc/event_engine/port.h +39 -0
  13. data/include/grpc/fork.h +1 -1
  14. data/include/grpc/grpc.h +52 -13
  15. data/include/grpc/grpc_posix.h +5 -2
  16. data/include/grpc/grpc_security.h +324 -180
  17. data/include/grpc/grpc_security_constants.h +20 -0
  18. data/include/grpc/impl/codegen/README.md +22 -0
  19. data/include/grpc/impl/codegen/atm.h +5 -3
  20. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  21. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  22. data/include/grpc/impl/codegen/atm_windows.h +6 -0
  23. data/include/grpc/impl/codegen/byte_buffer.h +3 -1
  24. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  25. data/include/grpc/impl/codegen/compression_types.h +2 -0
  26. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  27. data/include/grpc/impl/codegen/fork.h +2 -0
  28. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  29. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  30. data/include/grpc/impl/codegen/grpc_types.h +80 -54
  31. data/include/grpc/impl/codegen/log.h +2 -2
  32. data/include/grpc/impl/codegen/port_platform.h +103 -100
  33. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  34. data/include/grpc/impl/codegen/slice.h +2 -0
  35. data/include/grpc/impl/codegen/status.h +2 -0
  36. data/include/grpc/impl/codegen/sync.h +8 -5
  37. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  38. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  39. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  40. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  41. data/include/grpc/impl/codegen/sync_windows.h +6 -0
  42. data/include/grpc/module.modulemap +31 -46
  43. data/include/grpc/slice.h +1 -1
  44. data/include/grpc/slice_buffer.h +3 -3
  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 +4 -4
  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 +9 -9
  59. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  60. data/src/core/ext/filters/client_channel/backend_metric.cc +30 -28
  61. data/src/core/ext/filters/client_channel/backup_poller.cc +8 -6
  62. data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
  63. data/src/core/ext/filters/client_channel/channel_connectivity.cc +158 -202
  64. data/src/core/ext/filters/client_channel/client_channel.cc +2207 -3176
  65. data/src/core/ext/filters/client_channel/client_channel.h +561 -62
  66. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
  67. data/src/core/ext/filters/client_channel/client_channel_channelz.h +2 -5
  68. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
  69. data/src/core/ext/filters/client_channel/client_channel_factory.h +18 -19
  70. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -13
  71. data/src/core/ext/filters/client_channel/config_selector.cc +59 -0
  72. data/src/core/ext/filters/client_channel/config_selector.h +145 -0
  73. data/src/core/ext/filters/client_channel/connector.h +19 -19
  74. data/src/core/ext/filters/client_channel/dynamic_filters.cc +190 -0
  75. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  76. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +26 -122
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -11
  78. data/src/core/ext/filters/client_channel/health/health_check_client.cc +71 -73
  79. data/src/core/ext/filters/client_channel/health/health_check_client.h +37 -35
  80. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +43 -40
  81. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
  82. data/src/core/ext/filters/client_channel/http_proxy.cc +59 -34
  83. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +96 -0
  84. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +101 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +26 -13
  86. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +12 -21
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +659 -608
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +8 -44
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +5 -3
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +5 -6
  97. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  98. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +57 -44
  99. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +918 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +757 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
  102. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  103. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -26
  104. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -47
  105. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +741 -0
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +512 -137
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -26
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +795 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +701 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1362 -0
  112. data/src/core/ext/filters/client_channel/lb_policy.cc +29 -35
  113. data/src/core/ext/filters/client_channel/lb_policy.h +130 -117
  114. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
  115. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +19 -12
  116. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  117. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  118. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +12 -10
  119. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +136 -131
  121. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -35
  122. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  123. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +20 -17
  124. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +98 -138
  125. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +651 -216
  126. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +32 -5
  127. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  128. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  129. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +79 -68
  130. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +124 -136
  131. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -10
  132. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +384 -0
  133. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +38 -31
  134. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +892 -47
  135. data/src/core/ext/filters/client_channel/{xds/xds_channel_args.h → resolver/xds/xds_resolver.h} +9 -7
  136. data/src/core/ext/filters/client_channel/resolver.cc +9 -10
  137. data/src/core/ext/filters/client_channel/resolver.h +13 -23
  138. data/src/core/ext/filters/client_channel/resolver_factory.h +10 -8
  139. data/src/core/ext/filters/client_channel/resolver_registry.cc +57 -56
  140. data/src/core/ext/filters/client_channel/resolver_registry.h +10 -10
  141. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +61 -315
  142. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +42 -67
  143. data/src/core/ext/filters/client_channel/retry_filter.cc +2573 -0
  144. data/src/core/ext/filters/{workarounds/workaround_cronet_compression_filter.h → client_channel/retry_filter.h} +9 -6
  145. data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
  146. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  147. data/src/core/ext/filters/client_channel/retry_throttle.cc +20 -49
  148. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  149. data/src/core/ext/filters/client_channel/server_address.cc +132 -13
  150. data/src/core/ext/filters/client_channel/server_address.h +80 -32
  151. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +156 -0
  152. data/src/core/ext/filters/client_channel/subchannel.cc +271 -347
  153. data/src/core/ext/filters/client_channel/subchannel.h +142 -163
  154. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  155. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +38 -9
  156. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +27 -12
  157. data/src/core/ext/filters/client_idle/client_idle_filter.cc +47 -223
  158. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  159. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  160. data/src/core/ext/filters/deadline/deadline_filter.cc +113 -108
  161. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  162. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +503 -0
  163. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  164. data/src/core/ext/filters/fault_injection/service_config_parser.cc +181 -0
  165. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  166. data/src/core/ext/filters/http/client/http_client_filter.cc +104 -101
  167. data/src/core/ext/filters/http/client_authority_filter.cc +21 -21
  168. data/src/core/ext/filters/http/http_filters_plugin.cc +54 -53
  169. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +274 -230
  170. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +398 -0
  171. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  172. data/src/core/ext/filters/http/server/http_server_filter.cc +107 -98
  173. data/src/core/ext/filters/max_age/max_age_filter.cc +74 -70
  174. data/src/core/ext/filters/message_size/message_size_filter.cc +89 -113
  175. data/src/core/ext/filters/message_size/message_size_filter.h +12 -5
  176. data/src/core/ext/service_config/service_config.cc +227 -0
  177. data/src/core/ext/service_config/service_config.h +127 -0
  178. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  179. data/src/core/ext/service_config/service_config_parser.cc +89 -0
  180. data/src/core/ext/service_config/service_config_parser.h +97 -0
  181. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  182. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +119 -49
  183. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +24 -5
  184. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +42 -35
  185. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +32 -16
  186. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +52 -88
  187. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +829 -357
  188. data/src/core/ext/transport/chttp2/server/chttp2_server.h +16 -2
  189. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +14 -6
  190. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +32 -24
  191. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +64 -25
  192. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +11 -9
  193. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  194. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +5 -6
  195. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +548 -542
  196. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +17 -2
  197. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  198. data/src/core/ext/transport/chttp2/transport/context_list.h +5 -6
  199. data/src/core/ext/transport/chttp2/transport/flow_control.cc +82 -60
  200. data/src/core/ext/transport/chttp2/transport/flow_control.h +47 -33
  201. data/src/core/ext/transport/chttp2/transport/frame_data.cc +30 -29
  202. data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -10
  203. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +25 -25
  204. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -9
  205. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +15 -16
  206. data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -9
  207. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +18 -22
  208. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +9 -9
  209. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +53 -22
  210. data/src/core/ext/transport/chttp2/transport/frame_settings.h +11 -10
  211. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +25 -25
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +7 -9
  213. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  214. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +311 -652
  215. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +241 -72
  216. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +107 -0
  217. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
  218. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +69 -0
  219. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +868 -1175
  220. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +102 -84
  221. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +146 -0
  222. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +137 -0
  223. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +46 -0
  224. data/src/core/ext/transport/chttp2/transport/hpack_utils.h +30 -0
  225. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  226. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  227. data/src/core/ext/transport/chttp2/transport/internal.h +77 -56
  228. data/src/core/ext/transport/chttp2/transport/parsing.cc +168 -320
  229. data/src/core/ext/transport/chttp2/transport/popularity_count.h +60 -0
  230. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
  231. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  232. data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
  233. data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
  234. data/src/core/ext/transport/chttp2/transport/writing.cc +97 -80
  235. data/src/core/ext/transport/inproc/inproc_transport.cc +263 -180
  236. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  237. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1591 -0
  238. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +1 -1
  239. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +2 -2
  240. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +3 -3
  241. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +18 -6
  242. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +243 -0
  243. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +955 -0
  244. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +371 -0
  245. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1554 -0
  246. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  247. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +271 -0
  248. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +494 -0
  249. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2116 -0
  250. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  251. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +83 -0
  252. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +56 -0
  253. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +370 -0
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +470 -0
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +94 -0
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +382 -0
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1295 -0
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +418 -0
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +84 -0
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +161 -0
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +917 -0
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +171 -0
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +830 -0
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +94 -0
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +244 -0
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1089 -0
  274. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +27 -0
  275. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +71 -0
  276. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  277. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +133 -0
  278. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
  279. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +101 -0
  280. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +43 -0
  281. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +132 -0
  282. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  283. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +96 -0
  284. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +90 -0
  285. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +261 -0
  286. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +125 -0
  287. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +462 -0
  288. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  289. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +397 -0
  290. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  291. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +79 -0
  292. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +138 -0
  293. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +640 -0
  294. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +161 -0
  295. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +680 -0
  296. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  297. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +177 -0
  298. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +42 -0
  299. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +127 -0
  300. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  301. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +536 -0
  302. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +153 -0
  303. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +550 -0
  304. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +185 -0
  305. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +738 -0
  306. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +82 -0
  307. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +312 -0
  308. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +960 -0
  309. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4213 -0
  310. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  311. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +177 -0
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +49 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +134 -0
  314. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  315. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -0
  316. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  317. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +298 -0
  318. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +79 -0
  319. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +303 -0
  320. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -0
  321. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +123 -0
  322. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +403 -0
  323. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1785 -0
  324. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +19 -0
  325. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +35 -0
  326. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +130 -0
  327. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +559 -0
  328. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +73 -0
  329. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +237 -0
  330. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +148 -0
  331. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +674 -0
  332. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +27 -0
  333. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +62 -0
  334. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
  335. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +62 -0
  336. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +146 -0
  337. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +535 -0
  338. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +27 -0
  339. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +62 -0
  340. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +27 -0
  341. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +62 -0
  342. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +54 -0
  343. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +163 -0
  344. data/src/core/ext/upb-generated/envoy/{api/v2/srds.upb.c → service/route/v3/rds.upb.c} +8 -8
  345. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +62 -0
  346. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +27 -0
  347. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +62 -0
  348. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +121 -0
  349. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +468 -0
  350. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  351. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +205 -0
  352. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +48 -0
  353. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +144 -0
  354. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  355. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +96 -0
  356. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  357. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +90 -0
  358. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  359. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +84 -0
  360. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +65 -0
  361. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +184 -0
  362. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  363. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +158 -0
  364. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  365. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +136 -0
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +225 -0
  368. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  369. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +343 -0
  370. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  371. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +313 -0
  372. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +4 -3
  373. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +10 -10
  374. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  375. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +111 -0
  376. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  377. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +148 -0
  378. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
  379. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +74 -0
  380. data/src/core/ext/upb-generated/google/api/annotations.upb.c +1 -1
  381. data/src/core/ext/upb-generated/google/api/annotations.upb.h +2 -2
  382. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  383. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +896 -0
  384. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +251 -0
  385. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +943 -0
  386. data/src/core/ext/upb-generated/google/api/http.upb.c +18 -18
  387. data/src/core/ext/upb-generated/google/api/http.upb.h +74 -36
  388. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +4 -4
  389. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +20 -8
  390. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +155 -154
  391. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +881 -524
  392. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +4 -4
  393. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +20 -8
  394. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +2 -2
  395. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +16 -4
  396. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  397. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +77 -61
  398. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +4 -4
  399. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +20 -8
  400. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +19 -19
  401. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +146 -38
  402. data/src/core/ext/upb-generated/google/rpc/status.upb.c +5 -5
  403. data/src/core/ext/upb-generated/google/rpc/status.upb.h +25 -12
  404. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  405. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +48 -47
  406. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +63 -63
  407. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +307 -195
  408. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -8
  409. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +44 -16
  410. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +5 -5
  411. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +34 -10
  412. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  413. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +186 -72
  414. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  415. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  416. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +8 -8
  417. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +52 -16
  418. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +29 -0
  419. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +70 -0
  420. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +1 -1
  421. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +2 -2
  422. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  423. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +77 -0
  424. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  425. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +66 -0
  426. data/src/core/ext/upb-generated/validate/validate.upb.c +243 -226
  427. data/src/core/ext/upb-generated/validate/validate.upb.h +1048 -668
  428. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  429. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  430. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  431. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +66 -0
  432. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  433. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +155 -0
  434. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  435. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +90 -0
  436. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  437. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +100 -0
  438. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  439. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +178 -0
  440. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  441. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +91 -0
  442. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  443. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  444. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +33 -0
  445. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  446. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  447. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  448. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +46 -0
  449. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  450. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  451. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  452. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +252 -0
  453. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  454. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +424 -0
  455. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  456. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  457. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  458. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +596 -0
  459. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +155 -0
  460. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  461. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  462. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  463. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  464. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  465. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  466. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  467. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  468. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +313 -0
  469. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +150 -0
  470. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +144 -0
  471. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  472. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  473. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  474. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  475. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  476. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  477. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  478. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +236 -0
  479. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  480. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  481. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  482. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +300 -0
  483. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +100 -0
  484. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  485. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  486. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  487. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  488. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  489. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  490. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +72 -0
  491. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  492. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  493. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  494. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  495. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  496. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +140 -0
  497. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +60 -0
  498. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  499. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  500. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  501. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  502. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +205 -0
  503. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +60 -0
  504. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +201 -0
  505. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  506. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  507. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  508. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +67 -0
  509. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  510. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  511. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  512. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +152 -0
  513. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
  514. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +115 -0
  515. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +45 -0
  516. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +982 -0
  517. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +295 -0
  518. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  519. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  520. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  521. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  522. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  523. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  524. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  525. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  526. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +123 -0
  527. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  528. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +79 -0
  529. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  530. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +567 -0
  531. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +125 -0
  532. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  533. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  534. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +196 -0
  535. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +60 -0
  536. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  537. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  538. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +251 -0
  539. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  540. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  541. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  542. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  543. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  544. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  545. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  546. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  547. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  548. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  549. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  550. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  551. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  552. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  553. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  554. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  555. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  556. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +163 -0
  557. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  558. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  559. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  560. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +65 -0
  561. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  562. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  563. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  564. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  565. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  566. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  567. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  568. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +76 -0
  569. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  570. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  571. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  572. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  573. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  574. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  575. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  576. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  577. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  578. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  579. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  580. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  581. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -10
  582. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  583. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  584. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  585. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  586. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  587. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  588. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  589. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  590. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  591. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  592. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  593. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  594. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  595. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  596. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  597. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  598. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  599. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  600. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  601. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  602. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  603. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  605. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  606. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  607. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  608. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +71 -0
  609. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  610. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +52 -0
  611. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  612. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +34 -0
  613. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  614. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +51 -0
  615. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  616. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +44 -0
  617. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  618. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +332 -0
  619. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  620. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  621. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  622. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +43 -0
  623. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  624. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +63 -0
  625. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  626. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +46 -0
  627. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  628. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +50 -0
  629. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  630. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +68 -0
  631. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  632. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +51 -0
  633. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  634. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  635. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  636. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  637. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  638. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  639. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  640. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  641. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  642. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  643. data/src/core/ext/xds/xds_api.cc +3965 -0
  644. data/src/core/ext/xds/xds_api.h +744 -0
  645. data/src/core/ext/xds/xds_bootstrap.cc +471 -0
  646. data/src/core/ext/xds/xds_bootstrap.h +125 -0
  647. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  648. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  649. data/src/core/ext/xds/xds_channel_args.h +32 -0
  650. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  651. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  652. data/src/core/ext/xds/xds_client.cc +2791 -0
  653. data/src/core/ext/xds/xds_client.h +380 -0
  654. data/src/core/ext/xds/xds_client_stats.cc +160 -0
  655. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +87 -46
  656. data/src/core/ext/xds/xds_http_fault_filter.cc +227 -0
  657. data/src/core/ext/xds/xds_http_fault_filter.h +64 -0
  658. data/src/core/ext/xds/xds_http_filters.cc +116 -0
  659. data/src/core/ext/xds/xds_http_filters.h +133 -0
  660. data/src/core/ext/xds/xds_server_config_fetcher.cc +544 -0
  661. data/src/core/lib/address_utils/parse_address.cc +320 -0
  662. data/src/core/lib/address_utils/parse_address.h +77 -0
  663. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +159 -46
  664. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +46 -20
  665. data/src/core/lib/avl/avl.cc +5 -5
  666. data/src/core/lib/backoff/backoff.cc +1 -1
  667. data/src/core/lib/channel/call_tracer.h +85 -0
  668. data/src/core/lib/channel/channel_args.cc +50 -29
  669. data/src/core/lib/channel/channel_args.h +12 -2
  670. data/src/core/lib/channel/channel_stack.cc +27 -12
  671. data/src/core/lib/channel/channel_stack.h +38 -23
  672. data/src/core/lib/channel/channel_stack_builder.cc +6 -16
  673. data/src/core/lib/channel/channel_stack_builder.h +1 -9
  674. data/src/core/lib/channel/channel_trace.cc +11 -12
  675. data/src/core/lib/channel/channel_trace.h +3 -2
  676. data/src/core/lib/channel/channelz.cc +194 -142
  677. data/src/core/lib/channel/channelz.h +79 -55
  678. data/src/core/lib/channel/channelz_registry.cc +42 -22
  679. data/src/core/lib/channel/channelz_registry.h +4 -2
  680. data/src/core/lib/channel/connected_channel.cc +13 -12
  681. data/src/core/lib/channel/connected_channel.h +1 -2
  682. data/src/core/lib/channel/context.h +4 -1
  683. data/src/core/lib/channel/handshaker.cc +23 -65
  684. data/src/core/lib/channel/handshaker.h +12 -28
  685. data/src/core/lib/channel/handshaker_factory.h +10 -2
  686. data/src/core/lib/channel/handshaker_registry.cc +15 -82
  687. data/src/core/lib/channel/handshaker_registry.h +29 -12
  688. data/src/core/lib/channel/status_util.cc +14 -5
  689. data/src/core/lib/channel/status_util.h +11 -2
  690. data/src/core/lib/compression/algorithm_metadata.h +1 -0
  691. data/src/core/lib/compression/compression.cc +10 -6
  692. data/src/core/lib/compression/compression_args.cc +11 -7
  693. data/src/core/lib/compression/compression_internal.cc +14 -11
  694. data/src/core/lib/compression/compression_internal.h +3 -2
  695. data/src/core/lib/compression/message_compress.cc +7 -3
  696. data/src/core/lib/compression/stream_compression.cc +2 -1
  697. data/src/core/lib/compression/stream_compression.h +3 -2
  698. data/src/core/lib/compression/stream_compression_gzip.cc +2 -1
  699. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  700. data/src/core/lib/compression/stream_compression_identity.cc +3 -4
  701. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  702. data/src/core/lib/config/core_configuration.cc +96 -0
  703. data/src/core/lib/config/core_configuration.h +146 -0
  704. data/src/core/lib/debug/stats.cc +22 -28
  705. data/src/core/lib/debug/stats.h +7 -4
  706. data/src/core/lib/debug/stats_data.cc +16 -14
  707. data/src/core/lib/debug/stats_data.h +14 -13
  708. data/src/core/lib/debug/trace.cc +1 -0
  709. data/src/core/lib/debug/trace.h +2 -1
  710. data/src/core/lib/event_engine/endpoint_config.cc +45 -0
  711. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  712. data/src/core/lib/event_engine/event_engine.cc +50 -0
  713. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  714. data/src/core/lib/event_engine/sockaddr.h +44 -0
  715. data/src/core/lib/gpr/alloc.cc +7 -5
  716. data/src/core/lib/gpr/atm.cc +1 -1
  717. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  718. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  719. data/src/core/lib/gpr/env_linux.cc +1 -2
  720. data/src/core/lib/gpr/env_posix.cc +2 -3
  721. data/src/core/lib/gpr/log.cc +61 -19
  722. data/src/core/lib/gpr/log_android.cc +3 -2
  723. data/src/core/lib/gpr/log_linux.cc +30 -13
  724. data/src/core/lib/gpr/log_posix.cc +25 -10
  725. data/src/core/lib/gpr/log_windows.cc +18 -4
  726. data/src/core/lib/gpr/murmur_hash.cc +5 -3
  727. data/src/core/lib/gpr/spinlock.h +12 -5
  728. data/src/core/lib/gpr/string.cc +35 -57
  729. data/src/core/lib/gpr/string.h +11 -26
  730. data/src/core/lib/gpr/sync.cc +6 -6
  731. data/src/core/lib/gpr/sync_abseil.cc +12 -12
  732. data/src/core/lib/gpr/sync_posix.cc +5 -11
  733. data/src/core/lib/gpr/sync_windows.cc +2 -2
  734. data/src/core/lib/gpr/time.cc +19 -14
  735. data/src/core/lib/gpr/time_posix.cc +1 -1
  736. data/src/core/lib/gpr/time_precise.cc +5 -2
  737. data/src/core/lib/gpr/time_precise.h +6 -2
  738. data/src/core/lib/gpr/time_windows.cc +3 -2
  739. data/src/core/lib/gpr/tls.h +119 -36
  740. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  741. data/src/core/lib/gpr/useful.h +79 -31
  742. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  743. data/src/core/lib/gprpp/arena.cc +2 -1
  744. data/src/core/lib/gprpp/arena.h +18 -7
  745. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  746. data/src/core/lib/gprpp/bitset.h +188 -0
  747. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  748. data/src/core/lib/gprpp/construct_destruct.h +39 -0
  749. data/src/core/lib/gprpp/dual_ref_counted.h +330 -0
  750. data/src/core/lib/gprpp/{optional.h → examine_stack.cc} +19 -9
  751. data/src/core/lib/gprpp/examine_stack.h +46 -0
  752. data/src/core/lib/gprpp/fork.cc +17 -15
  753. data/src/core/lib/gprpp/fork.h +4 -4
  754. data/src/core/lib/gprpp/global_config.h +1 -2
  755. data/src/core/lib/gprpp/global_config_env.cc +11 -9
  756. data/src/core/lib/gprpp/global_config_generic.h +2 -2
  757. data/src/core/lib/gprpp/host_port.cc +29 -35
  758. data/src/core/lib/gprpp/host_port.h +14 -17
  759. data/src/core/lib/gprpp/manual_constructor.h +10 -7
  760. data/src/core/lib/gprpp/match.h +73 -0
  761. data/src/core/lib/gprpp/memory.h +9 -3
  762. data/src/core/lib/gprpp/mpscq.cc +9 -9
  763. data/src/core/lib/gprpp/mpscq.h +6 -5
  764. data/src/core/lib/gprpp/orphanable.h +10 -14
  765. data/src/core/lib/gprpp/overload.h +59 -0
  766. data/src/core/lib/gprpp/ref_counted.h +123 -86
  767. data/src/core/lib/gprpp/ref_counted_ptr.h +173 -7
  768. data/src/core/lib/gprpp/stat.h +38 -0
  769. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  770. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  771. data/src/core/lib/gprpp/status_helper.cc +427 -0
  772. data/src/core/lib/gprpp/status_helper.h +194 -0
  773. data/src/core/lib/gprpp/sync.h +106 -43
  774. data/src/core/lib/gprpp/table.h +411 -0
  775. data/src/core/lib/gprpp/thd.h +3 -3
  776. data/src/core/lib/gprpp/thd_posix.cc +47 -42
  777. data/src/core/lib/gprpp/thd_windows.cc +7 -12
  778. data/src/core/lib/gprpp/time_util.cc +77 -0
  779. data/src/core/lib/gprpp/time_util.h +42 -0
  780. data/src/core/lib/http/format_request.cc +47 -65
  781. data/src/core/lib/http/format_request.h +1 -0
  782. data/src/core/lib/http/httpcli.cc +213 -193
  783. data/src/core/lib/http/httpcli.h +7 -6
  784. data/src/core/lib/http/httpcli_security_connector.cc +25 -24
  785. data/src/core/lib/http/parser.cc +65 -45
  786. data/src/core/lib/http/parser.h +7 -7
  787. data/src/core/lib/iomgr/buffer_list.cc +10 -11
  788. data/src/core/lib/iomgr/buffer_list.h +27 -28
  789. data/src/core/lib/iomgr/call_combiner.cc +46 -21
  790. data/src/core/lib/iomgr/call_combiner.h +15 -16
  791. data/src/core/lib/iomgr/cfstream_handle.cc +10 -8
  792. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  793. data/src/core/lib/iomgr/closure.h +9 -9
  794. data/src/core/lib/iomgr/combiner.cc +25 -36
  795. data/src/core/lib/iomgr/combiner.h +3 -2
  796. data/src/core/lib/iomgr/dualstack_socket_posix.cc +48 -0
  797. data/src/core/lib/iomgr/endpoint.cc +6 -6
  798. data/src/core/lib/iomgr/endpoint.h +10 -8
  799. data/src/core/lib/iomgr/endpoint_cfstream.cc +60 -48
  800. data/src/core/lib/iomgr/endpoint_cfstream.h +1 -1
  801. data/src/core/lib/iomgr/endpoint_pair.h +2 -2
  802. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +32 -0
  803. data/src/core/lib/iomgr/endpoint_pair_posix.cc +21 -17
  804. data/src/core/lib/iomgr/endpoint_pair_windows.cc +17 -9
  805. data/src/core/lib/iomgr/error.cc +285 -115
  806. data/src/core/lib/iomgr/error.h +280 -115
  807. data/src/core/lib/iomgr/error_cfstream.cc +17 -10
  808. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  809. data/src/core/lib/iomgr/error_internal.h +7 -2
  810. data/src/core/lib/iomgr/ev_apple.cc +359 -0
  811. data/src/core/lib/iomgr/ev_apple.h +43 -0
  812. data/src/core/lib/iomgr/ev_epoll1_linux.cc +76 -80
  813. data/src/core/lib/iomgr/ev_epollex_linux.cc +106 -109
  814. data/src/core/lib/iomgr/ev_poll_posix.cc +79 -76
  815. data/src/core/lib/iomgr/ev_posix.cc +15 -16
  816. data/src/core/lib/iomgr/ev_posix.h +9 -9
  817. data/src/core/lib/iomgr/event_engine/closure.cc +77 -0
  818. data/src/core/lib/iomgr/event_engine/closure.h +42 -0
  819. data/src/core/lib/iomgr/event_engine/endpoint.cc +173 -0
  820. data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
  821. data/src/core/lib/iomgr/event_engine/iomgr.cc +104 -0
  822. data/src/core/lib/iomgr/event_engine/iomgr.h +42 -0
  823. data/src/core/lib/iomgr/event_engine/pollset.cc +88 -0
  824. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  825. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  826. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  827. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  828. data/src/core/lib/iomgr/event_engine/resolver.cc +114 -0
  829. data/src/core/lib/iomgr/event_engine/tcp.cc +293 -0
  830. data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
  831. data/src/core/lib/iomgr/exec_ctx.cc +15 -12
  832. data/src/core/lib/iomgr/exec_ctx.h +37 -30
  833. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  834. data/src/core/lib/iomgr/executor/mpmcqueue.h +11 -15
  835. data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
  836. data/src/core/lib/iomgr/executor/threadpool.h +8 -7
  837. data/src/core/lib/iomgr/executor.cc +19 -33
  838. data/src/core/lib/iomgr/executor.h +3 -3
  839. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  840. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  841. data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
  842. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  843. data/src/core/lib/iomgr/iomgr.cc +6 -4
  844. data/src/core/lib/iomgr/iomgr.h +3 -3
  845. data/src/core/lib/iomgr/iomgr_custom.cc +3 -3
  846. data/src/core/lib/iomgr/iomgr_custom.h +2 -2
  847. data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
  848. data/src/core/lib/iomgr/iomgr_internal.h +6 -5
  849. data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
  850. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +115 -22
  851. data/src/core/lib/iomgr/iomgr_windows.cc +2 -3
  852. data/src/core/lib/iomgr/is_epollexclusive_available.cc +18 -4
  853. data/src/core/lib/iomgr/load_file.cc +6 -6
  854. data/src/core/lib/iomgr/load_file.h +2 -2
  855. data/src/core/lib/iomgr/lockfree_event.cc +38 -15
  856. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  857. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  858. data/src/core/lib/iomgr/pollset.cc +5 -5
  859. data/src/core/lib/iomgr/pollset.h +9 -9
  860. data/src/core/lib/iomgr/pollset_custom.cc +10 -11
  861. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  862. data/src/core/lib/iomgr/pollset_set_custom.cc +12 -13
  863. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  864. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  865. data/src/core/lib/iomgr/port.h +9 -31
  866. data/src/core/lib/iomgr/python_util.h +47 -0
  867. data/src/core/lib/iomgr/resolve_address.cc +14 -9
  868. data/src/core/lib/iomgr/resolve_address.h +15 -15
  869. data/src/core/lib/iomgr/resolve_address_custom.cc +48 -62
  870. data/src/core/lib/iomgr/resolve_address_custom.h +5 -4
  871. data/src/core/lib/iomgr/resolve_address_posix.cc +21 -30
  872. data/src/core/lib/iomgr/resolve_address_windows.cc +22 -33
  873. data/src/core/lib/iomgr/resource_quota.cc +185 -94
  874. data/src/core/lib/iomgr/resource_quota.h +66 -17
  875. data/src/core/lib/iomgr/sockaddr.h +2 -1
  876. data/src/core/lib/iomgr/socket_factory_posix.cc +8 -7
  877. data/src/core/lib/iomgr/socket_factory_posix.h +3 -3
  878. data/src/core/lib/iomgr/socket_mutator.cc +20 -6
  879. data/src/core/lib/iomgr/socket_mutator.h +28 -5
  880. data/src/core/lib/iomgr/socket_utils_common_posix.cc +128 -105
  881. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  882. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  883. data/src/core/lib/iomgr/socket_utils_posix.h +25 -22
  884. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  885. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  886. data/src/core/lib/iomgr/tcp_client.cc +5 -3
  887. data/src/core/lib/iomgr/tcp_client.h +4 -0
  888. data/src/core/lib/iomgr/tcp_client_cfstream.cc +31 -43
  889. data/src/core/lib/iomgr/tcp_client_custom.cc +23 -34
  890. data/src/core/lib/iomgr/tcp_client_posix.cc +72 -69
  891. data/src/core/lib/iomgr/tcp_client_posix.h +8 -6
  892. data/src/core/lib/iomgr/tcp_client_windows.cc +31 -23
  893. data/src/core/lib/iomgr/tcp_custom.cc +77 -71
  894. data/src/core/lib/iomgr/tcp_custom.h +16 -14
  895. data/src/core/lib/iomgr/tcp_posix.cc +149 -156
  896. data/src/core/lib/iomgr/tcp_posix.h +19 -12
  897. data/src/core/lib/iomgr/tcp_server.cc +12 -11
  898. data/src/core/lib/iomgr/tcp_server.h +23 -17
  899. data/src/core/lib/iomgr/tcp_server_custom.cc +72 -94
  900. data/src/core/lib/iomgr/tcp_server_posix.cc +84 -76
  901. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -16
  902. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +29 -28
  903. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +19 -28
  904. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  905. data/src/core/lib/iomgr/tcp_server_windows.cc +46 -42
  906. data/src/core/lib/iomgr/tcp_windows.cc +44 -47
  907. data/src/core/lib/iomgr/tcp_windows.h +4 -3
  908. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  909. data/src/core/lib/iomgr/timer.cc +1 -0
  910. data/src/core/lib/iomgr/timer.h +7 -3
  911. data/src/core/lib/iomgr/timer_custom.cc +9 -8
  912. data/src/core/lib/iomgr/timer_custom.h +1 -1
  913. data/src/core/lib/iomgr/timer_generic.cc +46 -76
  914. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +17 -14
  915. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  916. data/src/core/lib/iomgr/timer_heap.h +2 -3
  917. data/src/core/lib/iomgr/timer_manager.cc +4 -4
  918. data/src/core/lib/iomgr/unix_sockets_posix.cc +37 -33
  919. data/src/core/lib/iomgr/unix_sockets_posix.h +9 -3
  920. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +20 -7
  921. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  922. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -1
  923. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +8 -9
  924. data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
  925. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  926. data/src/core/lib/iomgr/work_serializer.cc +4 -4
  927. data/src/core/lib/iomgr/work_serializer.h +18 -2
  928. data/src/core/lib/json/json.h +15 -4
  929. data/src/core/lib/json/json_reader.cc +31 -37
  930. data/src/core/lib/json/json_util.cc +126 -0
  931. data/src/core/lib/json/json_util.h +154 -0
  932. data/src/core/lib/json/json_writer.cc +14 -15
  933. data/src/core/lib/matchers/matchers.cc +327 -0
  934. data/src/core/lib/matchers/matchers.h +160 -0
  935. data/src/core/lib/profiling/basic_timers.cc +8 -6
  936. data/src/core/lib/profiling/stap_timers.cc +2 -2
  937. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  938. data/src/core/lib/security/authorization/authorization_policy_provider.h +33 -0
  939. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  940. data/src/core/lib/security/authorization/evaluate_args.cc +213 -0
  941. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  942. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +171 -0
  943. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +67 -0
  944. data/src/core/lib/security/context/security_context.cc +15 -11
  945. data/src/core/lib/security/context/security_context.h +3 -1
  946. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  947. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  948. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  949. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  950. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  951. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  952. data/src/core/lib/security/credentials/composite/composite_credentials.cc +21 -8
  953. data/src/core/lib/security/credentials/composite/composite_credentials.h +8 -5
  954. data/src/core/lib/security/credentials/credentials.cc +17 -99
  955. data/src/core/lib/security/credentials/credentials.h +27 -70
  956. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -3
  957. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +404 -0
  958. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +81 -0
  959. data/src/core/lib/security/credentials/external/aws_request_signer.cc +214 -0
  960. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  961. data/src/core/lib/security/credentials/external/external_account_credentials.cc +527 -0
  962. data/src/core/lib/security/credentials/external/external_account_credentials.h +122 -0
  963. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  964. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  965. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  966. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +60 -0
  967. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  968. data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -2
  969. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -7
  970. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +154 -77
  971. data/src/core/lib/security/credentials/iam/iam_credentials.cc +10 -7
  972. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  973. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  974. data/src/core/lib/security/credentials/jwt/json_token.cc +7 -7
  975. data/src/core/lib/security/credentials/jwt/json_token.h +3 -5
  976. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +39 -19
  977. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +24 -3
  978. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +25 -35
  979. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -6
  980. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  981. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  982. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +128 -118
  983. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -12
  984. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +25 -14
  985. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -2
  986. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -10
  987. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -3
  988. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +348 -0
  989. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +217 -0
  990. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +455 -0
  991. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +147 -0
  992. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +82 -140
  993. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +74 -167
  994. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  995. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  996. data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
  997. data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
  998. data/src/core/lib/security/credentials/xds/xds_credentials.cc +244 -0
  999. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  1000. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +35 -10
  1001. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +40 -37
  1002. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  1003. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +97 -0
  1004. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  1005. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  1006. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -6
  1007. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  1008. data/src/core/lib/security/security_connector/local/local_security_connector.cc +26 -13
  1009. data/src/core/lib/security/security_connector/security_connector.cc +15 -7
  1010. data/src/core/lib/security/security_connector/security_connector.h +16 -9
  1011. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -46
  1012. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +9 -7
  1013. data/src/core/lib/security/security_connector/ssl_utils.cc +126 -31
  1014. data/src/core/lib/security/security_connector/ssl_utils.h +40 -34
  1015. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +393 -303
  1016. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +144 -62
  1017. data/src/core/lib/security/transport/auth_filters.h +1 -5
  1018. data/src/core/lib/security/transport/client_auth_filter.cc +34 -28
  1019. data/src/core/lib/security/transport/secure_endpoint.cc +16 -20
  1020. data/src/core/lib/security/transport/secure_endpoint.h +1 -0
  1021. data/src/core/lib/security/transport/security_handshaker.cc +159 -91
  1022. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  1023. data/src/core/lib/security/transport/server_auth_filter.cc +22 -17
  1024. data/src/core/lib/security/transport/tsi_error.cc +5 -6
  1025. data/src/core/lib/security/transport/tsi_error.h +2 -1
  1026. data/src/core/lib/security/util/json_util.cc +10 -13
  1027. data/src/core/lib/security/util/json_util.h +2 -1
  1028. data/src/core/lib/slice/percent_encoding.cc +73 -30
  1029. data/src/core/lib/slice/percent_encoding.h +29 -28
  1030. data/src/core/lib/slice/slice.cc +59 -26
  1031. data/src/core/lib/{gpr/tls_pthread.cc → slice/slice_api.cc} +15 -6
  1032. data/src/core/lib/slice/slice_buffer.cc +8 -8
  1033. data/src/core/lib/slice/slice_intern.cc +23 -32
  1034. data/src/core/lib/slice/slice_internal.h +19 -246
  1035. data/src/core/lib/slice/slice_refcount.cc +17 -0
  1036. data/src/core/lib/slice/slice_refcount.h +121 -0
  1037. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  1038. data/src/core/lib/slice/slice_split.cc +100 -0
  1039. data/src/core/lib/slice/slice_split.h +40 -0
  1040. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  1041. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  1042. data/src/core/lib/slice/slice_utils.h +9 -0
  1043. data/src/core/lib/slice/static_slice.cc +529 -0
  1044. data/src/core/lib/slice/static_slice.h +331 -0
  1045. data/src/core/lib/surface/api_trace.cc +2 -1
  1046. data/src/core/lib/surface/api_trace.h +1 -0
  1047. data/src/core/lib/surface/builtins.cc +49 -0
  1048. data/src/core/lib/surface/builtins.h +26 -0
  1049. data/src/core/lib/surface/byte_buffer_reader.cc +3 -48
  1050. data/src/core/lib/surface/call.cc +252 -241
  1051. data/src/core/lib/surface/call.h +12 -6
  1052. data/src/core/lib/surface/call_details.cc +10 -10
  1053. data/src/core/lib/surface/call_log_batch.cc +52 -60
  1054. data/src/core/lib/surface/channel.cc +99 -85
  1055. data/src/core/lib/surface/channel.h +60 -9
  1056. data/src/core/lib/surface/channel_init.cc +23 -76
  1057. data/src/core/lib/surface/channel_init.h +52 -44
  1058. data/src/core/lib/surface/channel_ping.cc +4 -6
  1059. data/src/core/lib/surface/channel_stack_type.cc +2 -1
  1060. data/src/core/lib/surface/completion_queue.cc +179 -188
  1061. data/src/core/lib/surface/completion_queue.h +18 -17
  1062. data/src/core/lib/surface/completion_queue_factory.cc +3 -3
  1063. data/src/core/lib/surface/completion_queue_factory.h +1 -0
  1064. data/src/core/lib/surface/event_string.cc +19 -25
  1065. data/src/core/lib/surface/event_string.h +3 -1
  1066. data/src/core/lib/surface/init.cc +44 -74
  1067. data/src/core/lib/surface/init.h +10 -2
  1068. data/src/core/lib/surface/init_secure.cc +36 -17
  1069. data/src/core/lib/surface/lame_client.cc +62 -61
  1070. data/src/core/lib/surface/lame_client.h +5 -0
  1071. data/src/core/lib/surface/metadata_array.cc +2 -2
  1072. data/src/core/lib/surface/server.cc +1314 -1305
  1073. data/src/core/lib/surface/server.h +475 -45
  1074. data/src/core/lib/surface/validate_metadata.cc +55 -24
  1075. data/src/core/lib/surface/validate_metadata.h +6 -2
  1076. data/src/core/lib/surface/version.cc +2 -2
  1077. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  1078. data/src/core/lib/transport/bdp_estimator.h +2 -1
  1079. data/src/core/lib/transport/byte_stream.cc +5 -5
  1080. data/src/core/lib/transport/byte_stream.h +19 -13
  1081. data/src/core/lib/transport/connectivity_state.cc +32 -23
  1082. data/src/core/lib/transport/connectivity_state.h +33 -17
  1083. data/src/core/lib/transport/error_utils.cc +71 -21
  1084. data/src/core/lib/transport/error_utils.h +16 -4
  1085. data/src/core/lib/transport/metadata.cc +60 -25
  1086. data/src/core/lib/transport/metadata.h +17 -14
  1087. data/src/core/lib/transport/metadata_batch.cc +41 -339
  1088. data/src/core/lib/transport/metadata_batch.h +932 -69
  1089. data/src/core/lib/transport/parsed_metadata.h +263 -0
  1090. data/src/core/lib/transport/pid_controller.cc +4 -4
  1091. data/src/core/lib/transport/static_metadata.cc +718 -831
  1092. data/src/core/lib/transport/static_metadata.h +115 -372
  1093. data/src/core/lib/transport/status_conversion.cc +6 -14
  1094. data/src/core/lib/transport/status_metadata.cc +5 -3
  1095. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  1096. data/src/core/lib/transport/transport.cc +15 -14
  1097. data/src/core/lib/transport/transport.h +29 -13
  1098. data/src/core/lib/transport/transport_op_string.cc +91 -112
  1099. data/src/core/lib/uri/uri_parser.cc +135 -258
  1100. data/src/core/lib/uri/uri_parser.h +60 -23
  1101. data/src/core/plugin_registry/grpc_plugin_registry.cc +136 -44
  1102. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -5
  1103. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  1104. data/src/core/tsi/alts/crypt/gsec.h +5 -0
  1105. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  1106. data/src/core/tsi/alts/frame_protector/frame_handler.cc +18 -17
  1107. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +56 -45
  1108. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -7
  1109. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +116 -55
  1110. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  1111. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  1112. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +3 -3
  1113. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  1114. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1115. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  1116. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  1117. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +6 -6
  1118. data/src/core/tsi/fake_transport_security.cc +41 -26
  1119. data/src/core/tsi/local_transport_security.cc +41 -74
  1120. data/src/core/tsi/local_transport_security.h +6 -7
  1121. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  1122. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  1123. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -55
  1124. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +7 -7
  1125. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
  1126. data/src/core/tsi/ssl_transport_security.cc +262 -113
  1127. data/src/core/tsi/ssl_transport_security.h +32 -19
  1128. data/src/core/tsi/ssl_types.h +0 -2
  1129. data/src/core/tsi/transport_security.cc +25 -11
  1130. data/src/core/tsi/transport_security.h +22 -10
  1131. data/src/core/tsi/transport_security_grpc.h +3 -3
  1132. data/src/core/tsi/transport_security_interface.h +35 -4
  1133. data/src/ruby/bin/math_services_pb.rb +5 -5
  1134. data/src/ruby/ext/grpc/extconf.rb +25 -9
  1135. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1136. data/src/ruby/ext/grpc/rb_call.c +17 -8
  1137. data/src/ruby/ext/grpc/rb_call.h +4 -0
  1138. data/src/ruby/ext/grpc/rb_call_credentials.c +62 -17
  1139. data/src/ruby/ext/grpc/rb_channel.c +19 -8
  1140. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1141. data/src/ruby/ext/grpc/rb_channel_credentials.c +24 -5
  1142. data/src/ruby/ext/grpc/rb_channel_credentials.h +5 -0
  1143. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1144. data/src/ruby/ext/grpc/rb_compression_options.c +6 -5
  1145. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  1146. data/src/ruby/ext/grpc/rb_event_thread.c +4 -2
  1147. data/src/ruby/ext/grpc/rb_grpc.c +9 -4
  1148. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1149. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +54 -18
  1150. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +99 -45
  1151. data/src/ruby/ext/grpc/rb_server.c +19 -6
  1152. data/src/ruby/ext/grpc/rb_server_credentials.c +22 -6
  1153. data/src/ruby/ext/grpc/rb_server_credentials.h +5 -0
  1154. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +218 -0
  1155. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +37 -0
  1156. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +170 -0
  1157. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
  1158. data/src/ruby/lib/grpc/errors.rb +103 -42
  1159. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  1160. data/src/ruby/lib/grpc/generic/client_stub.rb +5 -3
  1161. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  1162. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  1163. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  1164. data/src/ruby/lib/grpc/structs.rb +1 -1
  1165. data/src/ruby/lib/grpc/version.rb +1 -1
  1166. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  1167. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +3 -3
  1168. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +51 -0
  1169. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  1170. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +64 -14
  1171. data/src/ruby/spec/call_spec.rb +1 -1
  1172. data/src/ruby/spec/channel_credentials_spec.rb +42 -0
  1173. data/src/ruby/spec/channel_spec.rb +17 -6
  1174. data/src/ruby/spec/client_auth_spec.rb +27 -1
  1175. data/src/ruby/spec/client_server_spec.rb +1 -1
  1176. data/src/ruby/spec/debug_message_spec.rb +134 -0
  1177. data/src/ruby/spec/errors_spec.rb +1 -1
  1178. data/src/ruby/spec/generic/active_call_spec.rb +21 -10
  1179. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  1180. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  1181. data/src/ruby/spec/generic/service_spec.rb +2 -0
  1182. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  1183. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  1184. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  1185. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  1186. data/src/ruby/spec/pb/codegen/package_option_spec.rb +29 -7
  1187. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1188. data/src/ruby/spec/server_spec.rb +22 -0
  1189. data/src/ruby/spec/support/services.rb +10 -4
  1190. data/src/ruby/spec/testdata/ca.pem +18 -13
  1191. data/src/ruby/spec/testdata/client.key +26 -14
  1192. data/src/ruby/spec/testdata/client.pem +18 -12
  1193. data/src/ruby/spec/testdata/server1.key +26 -14
  1194. data/src/ruby/spec/testdata/server1.pem +20 -14
  1195. data/src/ruby/spec/user_agent_spec.rb +74 -0
  1196. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  1197. data/third_party/abseil-cpp/absl/base/attributes.h +122 -41
  1198. data/third_party/abseil-cpp/absl/base/call_once.h +3 -10
  1199. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  1200. data/third_party/abseil-cpp/absl/base/config.h +97 -26
  1201. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +442 -335
  1202. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +169 -0
  1203. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  1204. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1205. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  1206. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  1207. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  1208. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  1209. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  1210. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +31 -4
  1211. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +35 -33
  1212. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +17 -5
  1213. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +36 -40
  1214. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +33 -30
  1215. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1216. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +11 -3
  1217. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1218. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  1219. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1220. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  1221. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  1222. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -6
  1223. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +54 -48
  1224. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1225. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  1226. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1227. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  1228. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  1229. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1230. data/third_party/abseil-cpp/absl/base/macros.h +47 -109
  1231. data/third_party/abseil-cpp/absl/base/optimization.h +69 -6
  1232. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  1233. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  1234. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1235. data/third_party/abseil-cpp/absl/base/thread_annotations.h +95 -40
  1236. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  1237. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  1238. data/third_party/abseil-cpp/absl/container/inlined_vector.h +38 -39
  1239. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  1240. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +34 -9
  1241. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  1242. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  1243. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  1244. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  1245. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +274 -0
  1246. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +322 -0
  1247. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  1248. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  1249. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  1250. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  1251. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  1252. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +61 -0
  1253. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  1254. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  1255. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  1256. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1949 -0
  1257. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  1258. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  1259. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  1260. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +199 -0
  1261. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  1262. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +80 -0
  1263. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  1264. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +253 -0
  1265. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  1266. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  1267. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  1268. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +147 -0
  1269. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  1270. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  1271. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  1272. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  1273. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  1274. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  1275. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1276. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  1277. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  1278. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  1279. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  1280. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  1281. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1282. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  1283. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  1284. data/third_party/abseil-cpp/absl/hash/internal/city.cc +349 -0
  1285. data/third_party/abseil-cpp/absl/hash/internal/city.h +78 -0
  1286. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +70 -0
  1287. data/third_party/abseil-cpp/absl/hash/internal/hash.h +1045 -0
  1288. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  1289. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  1290. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  1291. data/third_party/abseil-cpp/absl/meta/type_traits.h +18 -10
  1292. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1293. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  1294. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  1295. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1296. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1297. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +69 -0
  1298. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
  1299. data/third_party/abseil-cpp/absl/status/status.cc +452 -0
  1300. data/third_party/abseil-cpp/absl/status/status.h +878 -0
  1301. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  1302. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  1303. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  1304. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  1305. data/third_party/abseil-cpp/absl/strings/charconv.cc +7 -7
  1306. data/third_party/abseil-cpp/absl/strings/cord.cc +1953 -0
  1307. data/third_party/abseil-cpp/absl/strings/cord.h +1394 -0
  1308. data/third_party/abseil-cpp/absl/strings/escaping.cc +13 -13
  1309. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  1310. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1311. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  1312. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +8 -8
  1313. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  1314. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +543 -0
  1315. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1316. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  1317. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  1318. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  1319. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +236 -136
  1320. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +150 -64
  1321. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +16 -2
  1322. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +29 -21
  1323. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +21 -14
  1324. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  1325. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  1326. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1017 -87
  1327. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +17 -3
  1328. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  1329. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +22 -6
  1330. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +27 -11
  1331. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  1332. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1333. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1334. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1335. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  1336. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  1337. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1338. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  1339. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  1340. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1341. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  1342. data/third_party/abseil-cpp/absl/strings/str_split.h +39 -4
  1343. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  1344. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  1345. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  1346. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  1347. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  1348. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  1349. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  1350. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  1351. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  1352. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1353. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +698 -0
  1354. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  1355. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +156 -0
  1356. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  1357. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  1358. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +428 -0
  1359. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +155 -0
  1360. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2751 -0
  1361. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1082 -0
  1362. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  1363. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  1364. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  1365. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  1366. data/third_party/abseil-cpp/absl/time/clock.cc +585 -0
  1367. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  1368. data/third_party/abseil-cpp/absl/time/duration.cc +954 -0
  1369. data/third_party/abseil-cpp/absl/time/format.cc +160 -0
  1370. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  1371. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +628 -0
  1372. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +386 -0
  1373. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  1374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  1375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  1376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  1377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1029 -0
  1378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  1379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  1380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +113 -0
  1381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  1382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +965 -0
  1383. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +137 -0
  1384. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +315 -0
  1385. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  1386. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  1387. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  1388. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  1389. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  1390. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +116 -0
  1391. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1392. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1393. data/third_party/abseil-cpp/absl/time/time.cc +500 -0
  1394. data/third_party/abseil-cpp/absl/time/time.h +1585 -0
  1395. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  1396. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  1397. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  1398. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  1399. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  1400. data/third_party/abseil-cpp/absl/types/variant.h +866 -0
  1401. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  1402. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1403. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  1404. data/third_party/boringssl-with-bazel/err_data.c +789 -707
  1405. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +57 -52
  1406. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
  1407. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1408. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +5 -5
  1409. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1410. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +6 -6
  1411. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1412. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +29 -27
  1413. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1414. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1415. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +269 -272
  1416. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1417. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +5 -5
  1418. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +23 -11
  1419. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +3 -42
  1420. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1421. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -22
  1422. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1423. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  1424. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1425. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  1426. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  1427. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  1428. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +196 -0
  1429. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +35 -86
  1430. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +326 -281
  1431. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +15 -26
  1432. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +20 -75
  1433. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  1434. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +3 -2
  1435. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1436. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  1437. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  1438. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1439. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1440. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1441. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1442. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1443. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1444. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1445. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
  1446. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1447. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  1448. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1449. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +68 -45
  1450. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1451. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
  1452. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  1453. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  1456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +120 -273
  1457. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1458. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1459. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +18 -7
  1460. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1461. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  1462. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  1463. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +19 -27
  1464. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  1465. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +15 -23
  1466. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  1467. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1468. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  1469. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +31 -3
  1470. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +19 -43
  1471. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  1472. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → dsa/internal.h} +16 -11
  1473. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1474. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1475. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1476. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  1477. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +120 -112
  1478. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +13 -0
  1479. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  1480. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  1481. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  1483. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  1484. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +6 -2
  1485. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1486. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +28 -12
  1487. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  1488. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1489. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +40 -16
  1490. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  1491. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  1492. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1493. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1494. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
  1495. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +208 -37
  1496. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1497. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1498. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1499. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +149 -211
  1500. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +11 -0
  1501. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +24 -0
  1502. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1503. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +305 -117
  1504. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +22 -29
  1505. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  1506. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  1507. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -165
  1508. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  1509. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
  1510. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  1511. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
  1512. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1513. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1514. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  1515. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  1516. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  1517. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  1518. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  1519. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  1520. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +117 -91
  1521. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1522. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
  1523. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
  1524. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1525. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1526. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1527. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1528. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +62 -5
  1535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +150 -56
  1536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +49 -129
  1537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  1538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +5 -0
  1539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +116 -66
  1540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +135 -63
  1541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +231 -11
  1543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
  1544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
  1545. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +86 -113
  1546. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +618 -0
  1547. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1548. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1549. data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
  1550. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1551. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1552. data/third_party/boringssl-with-bazel/src/crypto/mem.c +75 -25
  1553. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
  1554. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  1555. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1556. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1557. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1558. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1559. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1560. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1561. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  1562. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
  1563. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  1564. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +131 -53
  1565. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +11 -8
  1566. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1567. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1568. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +1 -0
  1569. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -6
  1570. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1571. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1572. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  1573. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +20 -0
  1574. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1575. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1576. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1577. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -28
  1578. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  1579. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +318 -0
  1580. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1399 -0
  1581. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +858 -0
  1582. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  1583. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1584. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +11 -1
  1585. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  1586. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1587. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1588. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +345 -13
  1589. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1590. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +20 -5
  1591. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +13 -8
  1592. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1593. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -180
  1594. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
  1595. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  1596. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
  1597. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +24 -39
  1598. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +29 -23
  1599. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1600. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +2 -1
  1601. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +52 -89
  1602. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +83 -12
  1603. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +9 -4
  1604. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  1605. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +29 -26
  1606. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +87 -113
  1607. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
  1608. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +99 -25
  1609. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +15 -15
  1610. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1611. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
  1612. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +13 -26
  1613. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  1614. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +52 -28
  1615. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1616. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +49 -59
  1617. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1618. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +21 -172
  1619. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1620. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +25 -0
  1621. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1622. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +75 -15
  1623. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  1624. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  1625. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +28 -0
  1626. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  1627. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +6 -4
  1628. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  1629. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  1630. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  1631. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +27 -8
  1632. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +42 -32
  1633. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +6 -3
  1634. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -28
  1635. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +10 -12
  1636. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1637. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +7 -1
  1638. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  1639. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1640. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  1641. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +27 -36
  1642. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1643. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1644. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +15 -14
  1645. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +128 -42
  1646. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +8 -7
  1647. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +86 -44
  1648. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +25 -4
  1649. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  1650. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +119 -0
  1651. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1035 -625
  1652. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -176
  1653. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +71 -14
  1654. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +7 -1
  1655. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1656. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1657. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +32 -7
  1658. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1659. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +29 -6
  1660. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1661. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1662. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +32 -7
  1663. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1664. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +82 -20
  1665. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +20 -2
  1666. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  1667. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  1668. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +39 -0
  1669. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +5 -2
  1670. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +110 -51
  1671. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  1672. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1673. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  1674. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1675. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1676. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1677. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  1678. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
  1679. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1680. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +194 -146
  1681. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +33 -8
  1682. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  1683. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +8 -19
  1684. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +135 -63
  1685. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  1686. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +39 -16
  1687. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +697 -194
  1688. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +54 -38
  1689. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +310 -0
  1690. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2071 -826
  1691. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -678
  1692. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +639 -450
  1693. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1694. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -22
  1695. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  1696. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1697. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  1698. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  1699. data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +1083 -634
  1700. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +478 -78
  1701. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +122 -56
  1702. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +340 -236
  1703. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +199 -40
  1704. data/third_party/boringssl-with-bazel/src/ssl/internal.h +607 -209
  1705. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +17 -11
  1706. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -4
  1707. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +35 -40
  1708. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +77 -8
  1709. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +11 -12
  1710. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +10 -11
  1711. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
  1712. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +169 -111
  1713. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +15 -2
  1714. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +179 -111
  1715. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +9 -0
  1716. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +12 -17
  1717. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +12 -8
  1718. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1719. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +53 -30
  1720. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +81 -37
  1721. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +411 -235
  1722. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +183 -166
  1723. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +434 -151
  1724. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +65 -25
  1725. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  1726. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  1727. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  1728. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  1729. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  1730. data/third_party/re2/re2/bitmap256.h +117 -0
  1731. data/third_party/re2/re2/bitstate.cc +385 -0
  1732. data/third_party/re2/re2/compile.cc +1261 -0
  1733. data/third_party/re2/re2/dfa.cc +2118 -0
  1734. data/third_party/re2/re2/filtered_re2.cc +137 -0
  1735. data/third_party/re2/re2/filtered_re2.h +114 -0
  1736. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1737. data/third_party/re2/re2/nfa.cc +713 -0
  1738. data/third_party/re2/re2/onepass.cc +623 -0
  1739. data/third_party/re2/re2/parse.cc +2483 -0
  1740. data/third_party/re2/re2/perl_groups.cc +119 -0
  1741. data/third_party/re2/re2/pod_array.h +55 -0
  1742. data/third_party/re2/re2/prefilter.cc +711 -0
  1743. data/third_party/re2/re2/prefilter.h +108 -0
  1744. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1745. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1746. data/third_party/re2/re2/prog.cc +1166 -0
  1747. data/third_party/re2/re2/prog.h +455 -0
  1748. data/third_party/re2/re2/re2.cc +1331 -0
  1749. data/third_party/re2/re2/re2.h +1017 -0
  1750. data/third_party/re2/re2/regexp.cc +987 -0
  1751. data/third_party/re2/re2/regexp.h +665 -0
  1752. data/third_party/re2/re2/set.cc +176 -0
  1753. data/third_party/re2/re2/set.h +85 -0
  1754. data/third_party/re2/re2/simplify.cc +665 -0
  1755. data/third_party/re2/re2/sparse_array.h +392 -0
  1756. data/third_party/re2/re2/sparse_set.h +264 -0
  1757. data/third_party/re2/re2/stringpiece.cc +65 -0
  1758. data/third_party/re2/re2/stringpiece.h +210 -0
  1759. data/third_party/re2/re2/tostring.cc +351 -0
  1760. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1761. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1762. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1763. data/third_party/re2/re2/unicode_groups.h +67 -0
  1764. data/third_party/re2/re2/walker-inl.h +246 -0
  1765. data/third_party/re2/util/benchmark.h +156 -0
  1766. data/third_party/re2/util/flags.h +26 -0
  1767. data/third_party/re2/util/logging.h +109 -0
  1768. data/third_party/re2/util/malloc_counter.h +19 -0
  1769. data/third_party/re2/util/mix.h +41 -0
  1770. data/third_party/re2/util/mutex.h +148 -0
  1771. data/third_party/re2/util/pcre.cc +1025 -0
  1772. data/third_party/re2/util/pcre.h +681 -0
  1773. data/third_party/re2/util/rune.cc +260 -0
  1774. data/third_party/re2/util/strutil.cc +149 -0
  1775. data/third_party/re2/util/strutil.h +21 -0
  1776. data/third_party/re2/util/test.h +50 -0
  1777. data/third_party/re2/util/utf.h +44 -0
  1778. data/third_party/re2/util/util.h +42 -0
  1779. data/third_party/upb/upb/decode.c +668 -506
  1780. data/third_party/upb/upb/decode.h +50 -3
  1781. data/third_party/upb/upb/decode_fast.c +1053 -0
  1782. data/third_party/upb/upb/decode_fast.h +153 -0
  1783. data/third_party/upb/upb/decode_internal.h +193 -0
  1784. data/third_party/upb/upb/def.c +2168 -0
  1785. data/third_party/upb/upb/def.h +337 -0
  1786. data/third_party/upb/upb/def.hpp +468 -0
  1787. data/third_party/upb/upb/encode.c +346 -213
  1788. data/third_party/upb/upb/encode.h +56 -4
  1789. data/third_party/upb/upb/msg.c +356 -70
  1790. data/third_party/upb/upb/msg.h +84 -45
  1791. data/third_party/upb/upb/msg_internal.h +687 -0
  1792. data/third_party/upb/upb/port_def.inc +187 -84
  1793. data/third_party/upb/upb/port_undef.inc +47 -7
  1794. data/third_party/upb/upb/reflection.c +400 -0
  1795. data/third_party/upb/upb/reflection.h +196 -0
  1796. data/third_party/upb/upb/reflection.hpp +37 -0
  1797. data/third_party/upb/upb/table.c +265 -336
  1798. data/third_party/upb/upb/{table.int.h → table_internal.h} +73 -229
  1799. data/third_party/upb/upb/text_encode.c +449 -0
  1800. data/third_party/upb/upb/text_encode.h +64 -0
  1801. data/third_party/upb/upb/upb.c +189 -135
  1802. data/third_party/upb/upb/upb.h +153 -150
  1803. data/third_party/upb/upb/upb.hpp +112 -0
  1804. data/third_party/upb/upb/upb_internal.h +58 -0
  1805. data/third_party/xxhash/xxhash.h +5325 -0
  1806. metadata +810 -204
  1807. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  1808. data/src/core/ext/filters/client_channel/parse_address.cc +0 -237
  1809. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1810. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -484
  1811. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -181
  1812. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -65
  1813. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  1814. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -359
  1815. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -122
  1816. data/src/core/ext/filters/client_channel/service_config.cc +0 -261
  1817. data/src/core/ext/filters/client_channel/service_config.h +0 -193
  1818. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1779
  1819. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -280
  1820. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +0 -347
  1821. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +0 -87
  1822. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  1823. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -104
  1824. data/src/core/ext/filters/client_channel/xds/xds_client.cc +0 -2174
  1825. data/src/core/ext/filters/client_channel/xds/xds_client.h +0 -274
  1826. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +0 -116
  1827. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
  1828. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1829. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1830. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1831. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1832. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -246
  1833. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  1834. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1835. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1836. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -246
  1837. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -905
  1838. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +0 -27
  1839. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  1840. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -73
  1841. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  1842. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +0 -34
  1843. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  1844. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +0 -54
  1845. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  1846. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -390
  1847. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1411
  1848. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -111
  1849. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  1850. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -292
  1851. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -847
  1852. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -95
  1853. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  1854. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -196
  1855. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  1856. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -168
  1857. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -658
  1858. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +0 -35
  1859. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  1860. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -132
  1861. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -436
  1862. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -128
  1863. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  1864. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +0 -30
  1865. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  1866. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -17
  1867. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  1868. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -88
  1869. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -258
  1870. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -111
  1871. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  1872. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -91
  1873. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  1874. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +0 -30
  1875. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  1876. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -17
  1877. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  1878. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -144
  1879. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  1880. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -42
  1881. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  1882. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -104
  1883. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -383
  1884. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +0 -29
  1885. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  1886. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -17
  1887. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  1888. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -793
  1889. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2936
  1890. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -62
  1891. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  1892. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -58
  1893. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  1894. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  1895. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -227
  1896. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  1897. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -296
  1898. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1072
  1899. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +0 -32
  1900. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  1901. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +0 -23
  1902. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  1903. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -52
  1904. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -130
  1905. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -47
  1906. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -108
  1907. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -52
  1908. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  1909. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -87
  1910. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  1911. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +0 -38
  1912. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  1913. data/src/core/ext/upb-generated/envoy/type/range.upb.c +0 -49
  1914. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  1915. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +0 -28
  1916. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  1917. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -88
  1918. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  1919. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  1920. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1921. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -144
  1922. data/src/core/lib/gpr/arena.h +0 -47
  1923. data/src/core/lib/gpr/tls_gcc.h +0 -52
  1924. data/src/core/lib/gpr/tls_msvc.h +0 -52
  1925. data/src/core/lib/gpr/tls_pthread.h +0 -56
  1926. data/src/core/lib/gprpp/atomic.h +0 -104
  1927. data/src/core/lib/gprpp/map.h +0 -59
  1928. data/src/core/lib/gprpp/string_view.h +0 -60
  1929. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  1930. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1931. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  1932. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -87
  1933. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  1934. data/src/core/lib/iomgr/pollset_uv.cc +0 -93
  1935. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  1936. data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
  1937. data/src/core/lib/iomgr/tcp_uv.cc +0 -418
  1938. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  1939. data/src/core/lib/iomgr/udp_server.cc +0 -752
  1940. data/src/core/lib/iomgr/udp_server.h +0 -101
  1941. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1942. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1943. data/src/core/lib/slice/slice_hash_table.h +0 -199
  1944. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  1945. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  1946. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1947. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -218
  1948. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +0 -104
  1949. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  1950. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  1951. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  1952. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
  1953. data/third_party/upb/upb/generated_util.h +0 -105
  1954. data/third_party/upb/upb/port.c +0 -26
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2018 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
@@ -26,13 +24,13 @@
26
24
  #include <stdio.h>
27
25
  #include <string.h>
28
26
 
27
+ #include "absl/strings/str_format.h"
28
+
29
29
  #include <grpc/slice_buffer.h>
30
30
  #include <grpc/support/alloc.h>
31
31
  #include <grpc/support/log.h>
32
32
  #include <grpc/support/string_util.h>
33
33
 
34
- #include "absl/strings/str_format.h"
35
-
36
34
  #include "src/core/ext/transport/chttp2/transport/context_list.h"
37
35
  #include "src/core/ext/transport/chttp2/transport/frame_data.h"
38
36
  #include "src/core/ext/transport/chttp2/transport/internal.h"
@@ -71,7 +69,6 @@
71
69
  #define DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS false
72
70
  #define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
73
71
 
74
- #define DEFAULT_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS 300000 /* 5 minutes */
75
72
  #define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 /* 5 minutes */
76
73
  #define DEFAULT_MAX_PINGS_BETWEEN_DATA 2
77
74
  #define DEFAULT_MAX_PING_STRIKES 2
@@ -91,8 +88,6 @@ static bool g_default_client_keepalive_permit_without_calls =
91
88
  static bool g_default_server_keepalive_permit_without_calls =
92
89
  DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS;
93
90
 
94
- static int g_default_min_sent_ping_interval_without_data_ms =
95
- DEFAULT_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS;
96
91
  static int g_default_min_recv_ping_interval_without_data_ms =
97
92
  DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS;
98
93
  static int g_default_max_pings_without_data = DEFAULT_MAX_PINGS_BETWEEN_DATA;
@@ -100,79 +95,102 @@ static int g_default_max_ping_strikes = DEFAULT_MAX_PING_STRIKES;
100
95
 
101
96
  #define MAX_CLIENT_STREAM_ID 0x7fffffffu
102
97
  grpc_core::TraceFlag grpc_http_trace(false, "http");
98
+ grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
103
99
  grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
104
100
  "chttp2_refcount");
105
101
 
106
- /* forward declarations of various callbacks that we'll build closures around */
107
- static void write_action_begin_locked(void* t, grpc_error* error);
108
- static void write_action(void* t, grpc_error* error);
109
- static void write_action_end(void* t, grpc_error* error);
110
- static void write_action_end_locked(void* t, grpc_error* error);
102
+ // forward declarations of various callbacks that we'll build closures around
103
+ static void write_action_begin_locked(void* t, grpc_error_handle error);
104
+ static void write_action(void* t, grpc_error_handle error);
105
+ static void write_action_end(void* t, grpc_error_handle error);
106
+ static void write_action_end_locked(void* t, grpc_error_handle error);
111
107
 
112
- static void read_action(void* t, grpc_error* error);
113
- static void read_action_locked(void* t, grpc_error* error);
108
+ static void read_action(void* t, grpc_error_handle error);
109
+ static void read_action_locked(void* t, grpc_error_handle error);
114
110
  static void continue_read_action_locked(grpc_chttp2_transport* t);
115
111
 
116
- static void complete_fetch(void* gs, grpc_error* error);
117
- static void complete_fetch_locked(void* gs, grpc_error* error);
118
- /** Set a transport level setting, and push it to our peer */
112
+ static void complete_fetch(void* gs, grpc_error_handle error);
113
+ static void complete_fetch_locked(void* gs, grpc_error_handle error);
114
+ // Set a transport level setting, and push it to our peer
119
115
  static void queue_setting_update(grpc_chttp2_transport* t,
120
116
  grpc_chttp2_setting_id id, uint32_t value);
121
117
 
122
118
  static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
123
- grpc_error* error);
119
+ grpc_error_handle error);
124
120
 
125
- /** Start new streams that have been created if we can */
121
+ // Start new streams that have been created if we can
126
122
  static void maybe_start_some_streams(grpc_chttp2_transport* t);
127
123
 
128
124
  static void connectivity_state_set(grpc_chttp2_transport* t,
129
125
  grpc_connectivity_state state,
126
+ const absl::Status& status,
130
127
  const char* reason);
131
128
 
132
- static void benign_reclaimer(void* t, grpc_error* error);
133
- static void destructive_reclaimer(void* t, grpc_error* error);
134
- static void benign_reclaimer_locked(void* t, grpc_error* error);
135
- static void destructive_reclaimer_locked(void* t, grpc_error* error);
129
+ static void benign_reclaimer(void* arg, grpc_error_handle error);
130
+ static void destructive_reclaimer(void* arg, grpc_error_handle error);
131
+ static void benign_reclaimer_locked(void* arg, grpc_error_handle error);
132
+ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error);
136
133
 
137
134
  static void post_benign_reclaimer(grpc_chttp2_transport* t);
138
135
  static void post_destructive_reclaimer(grpc_chttp2_transport* t);
139
136
 
140
- static void close_transport_locked(grpc_chttp2_transport* t, grpc_error* error);
141
- static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error);
137
+ static void close_transport_locked(grpc_chttp2_transport* t,
138
+ grpc_error_handle error);
139
+ static void end_all_the_calls(grpc_chttp2_transport* t,
140
+ grpc_error_handle error);
141
+
142
+ static void start_bdp_ping(void* tp, grpc_error_handle error);
143
+ static void finish_bdp_ping(void* tp, grpc_error_handle error);
144
+ static void start_bdp_ping_locked(void* tp, grpc_error_handle error);
145
+ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error);
146
+ static void next_bdp_ping_timer_expired(void* tp, grpc_error_handle error);
147
+ static void next_bdp_ping_timer_expired_locked(void* tp,
148
+ grpc_error_handle error);
149
+
150
+ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error);
151
+ static void send_ping_locked(grpc_chttp2_transport* t,
152
+ grpc_closure* on_initiate, grpc_closure* on_ack);
153
+ static void retry_initiate_ping_locked(void* tp, grpc_error_handle error);
142
154
 
143
- static void schedule_bdp_ping_locked(grpc_chttp2_transport* t);
144
- static void start_bdp_ping(void* tp, grpc_error* error);
145
- static void finish_bdp_ping(void* tp, grpc_error* error);
146
- static void start_bdp_ping_locked(void* tp, grpc_error* error);
147
- static void finish_bdp_ping_locked(void* tp, grpc_error* error);
148
- static void next_bdp_ping_timer_expired(void* tp, grpc_error* error);
149
- static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error);
155
+ // keepalive-relevant functions
156
+ static void init_keepalive_ping(void* arg, grpc_error_handle error);
157
+ static void init_keepalive_ping_locked(void* arg, grpc_error_handle error);
158
+ static void start_keepalive_ping(void* arg, grpc_error_handle error);
159
+ static void finish_keepalive_ping(void* arg, grpc_error_handle error);
160
+ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error);
161
+ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
162
+ static void keepalive_watchdog_fired(void* arg, grpc_error_handle error);
163
+ static void keepalive_watchdog_fired_locked(void* arg, grpc_error_handle error);
150
164
 
151
- static void cancel_pings(grpc_chttp2_transport* t, grpc_error* error);
152
- static void send_ping_locked(grpc_chttp2_transport* t,
153
- grpc_closure* on_initiate,
154
- grpc_closure* on_complete);
155
- static void retry_initiate_ping_locked(void* tp, grpc_error* error);
156
-
157
- /** keepalive-relevant functions */
158
- static void init_keepalive_ping(void* arg, grpc_error* error);
159
- static void init_keepalive_ping_locked(void* arg, grpc_error* error);
160
- static void start_keepalive_ping(void* arg, grpc_error* error);
161
- static void finish_keepalive_ping(void* arg, grpc_error* error);
162
- static void start_keepalive_ping_locked(void* arg, grpc_error* error);
163
- static void finish_keepalive_ping_locked(void* arg, grpc_error* error);
164
- static void keepalive_watchdog_fired(void* arg, grpc_error* error);
165
- static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error);
166
-
167
- static void reset_byte_stream(void* arg, grpc_error* error);
165
+ static void reset_byte_stream(void* arg, grpc_error_handle error);
168
166
 
169
167
  // Flow control default enabled. Can be disabled by setting
170
168
  // GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL
171
169
  bool g_flow_control_enabled = true;
172
170
 
173
- /*******************************************************************************
174
- * CONSTRUCTION/DESTRUCTION/REFCOUNTING
175
- */
171
+ namespace grpc_core {
172
+
173
+ namespace {
174
+ TestOnlyGlobalHttp2TransportInitCallback test_only_init_callback = nullptr;
175
+ TestOnlyGlobalHttp2TransportDestructCallback test_only_destruct_callback =
176
+ nullptr;
177
+ } // namespace
178
+
179
+ void TestOnlySetGlobalHttp2TransportInitCallback(
180
+ TestOnlyGlobalHttp2TransportInitCallback callback) {
181
+ test_only_init_callback = callback;
182
+ }
183
+
184
+ void TestOnlySetGlobalHttp2TransportDestructCallback(
185
+ TestOnlyGlobalHttp2TransportDestructCallback callback) {
186
+ test_only_destruct_callback = callback;
187
+ }
188
+
189
+ } // namespace grpc_core
190
+
191
+ //
192
+ // CONSTRUCTION/DESTRUCTION/REFCOUNTING
193
+ //
176
194
 
177
195
  grpc_chttp2_transport::~grpc_chttp2_transport() {
178
196
  size_t i;
@@ -186,9 +204,8 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
186
204
  grpc_slice_buffer_destroy_internal(&qbuf);
187
205
 
188
206
  grpc_slice_buffer_destroy_internal(&outbuf);
189
- grpc_chttp2_hpack_compressor_destroy(&hpack_compressor);
190
207
 
191
- grpc_error* error =
208
+ grpc_error_handle error =
192
209
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed");
193
210
  // ContextList::Execute follows semantics of a callback function and does not
194
211
  // take a ref on error
@@ -197,7 +214,6 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
197
214
  cl = nullptr;
198
215
 
199
216
  grpc_slice_buffer_destroy_internal(&read_buffer);
200
- grpc_chttp2_hpack_parser_destroy(&hpack_parser);
201
217
  grpc_chttp2_goaway_parser_destroy(&goaway_parser);
202
218
 
203
219
  for (i = 0; i < STREAM_LIST_COUNT; i++) {
@@ -226,12 +242,14 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
226
242
 
227
243
  GRPC_ERROR_UNREF(closed_with_error);
228
244
  gpr_free(ping_acks);
229
- gpr_free(peer_string);
245
+ if (grpc_core::test_only_destruct_callback != nullptr) {
246
+ grpc_core::test_only_destruct_callback();
247
+ }
230
248
  }
231
249
 
232
250
  static const grpc_transport_vtable* get_vtable(void);
233
251
 
234
- /* Returns whether bdp is enabled */
252
+ // Returns whether bdp is enabled
235
253
  static bool read_channel_args(grpc_chttp2_transport* t,
236
254
  const grpc_channel_args* channel_args,
237
255
  bool is_client) {
@@ -261,8 +279,7 @@ static bool read_channel_args(grpc_chttp2_transport* t,
261
279
  const int value =
262
280
  grpc_channel_arg_get_integer(&channel_args->args[i], options);
263
281
  if (value >= 0) {
264
- grpc_chttp2_hpack_compressor_set_max_usable_size(
265
- &t->hpack_compressor, static_cast<uint32_t>(value));
282
+ t->hpack_compressor.SetMaxUsableSize(value);
266
283
  }
267
284
  } else if (0 == strcmp(channel_args->args[i].key,
268
285
  GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
@@ -273,15 +290,6 @@ static bool read_channel_args(grpc_chttp2_transport* t,
273
290
  GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
274
291
  t->ping_policy.max_ping_strikes = grpc_channel_arg_get_integer(
275
292
  &channel_args->args[i], {g_default_max_ping_strikes, 0, INT_MAX});
276
- } else if (0 ==
277
- strcmp(channel_args->args[i].key,
278
- GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS)) {
279
- t->ping_policy.min_sent_ping_interval_without_data =
280
- grpc_channel_arg_get_integer(
281
- &channel_args->args[i],
282
- grpc_integer_options{
283
- g_default_min_sent_ping_interval_without_data_ms, 0,
284
- INT_MAX});
285
293
  } else if (0 ==
286
294
  strcmp(channel_args->args[i].key,
287
295
  GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
@@ -378,12 +386,12 @@ static bool read_channel_args(grpc_chttp2_transport* t,
378
386
  }
379
387
  }
380
388
  if (channelz_enabled) {
381
- // TODO(ncteisen): add an API to endpoint to query for local addr, and pass
382
- // it in here, so SocketNode knows its own address.
383
389
  t->channelz_socket =
384
390
  grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
385
- "", t->peer_string,
386
- absl::StrFormat("%s %s", get_vtable()->name, t->peer_string));
391
+ std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
392
+ absl::StrFormat("%s %s", get_vtable()->name, t->peer_string),
393
+ grpc_core::channelz::SocketNode::Security::GetFromChannelArgs(
394
+ channel_args));
387
395
  }
388
396
  return enable_bdp;
389
397
  }
@@ -412,8 +420,6 @@ static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
412
420
 
413
421
  static void configure_transport_ping_policy(grpc_chttp2_transport* t) {
414
422
  t->ping_policy.max_pings_without_data = g_default_max_pings_without_data;
415
- t->ping_policy.min_sent_ping_interval_without_data =
416
- g_default_min_sent_ping_interval_without_data_ms;
417
423
  t->ping_policy.max_ping_strikes = g_default_max_ping_strikes;
418
424
  t->ping_policy.min_recv_ping_interval_without_data =
419
425
  g_default_min_recv_ping_interval_without_data_ms;
@@ -429,8 +435,8 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
429
435
  grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
430
436
  &t->init_keepalive_ping_locked);
431
437
  } else {
432
- /* Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
433
- inflight keeaplive timers */
438
+ // Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
439
+ // inflight keeaplive timers
434
440
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED;
435
441
  }
436
442
  }
@@ -438,7 +444,9 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
438
444
  grpc_chttp2_transport::grpc_chttp2_transport(
439
445
  const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client,
440
446
  grpc_resource_user* resource_user)
441
- : refs(1, &grpc_trace_chttp2_refcount),
447
+ : refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
448
+ ? "chttp2_refcount"
449
+ : nullptr),
442
450
  ep(ep),
443
451
  peer_string(grpc_endpoint_get_peer(ep)),
444
452
  resource_user(resource_user),
@@ -451,11 +459,11 @@ grpc_chttp2_transport::grpc_chttp2_transport(
451
459
  GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
452
460
  GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
453
461
  base.vtable = get_vtable();
454
- /* 8 is a random stab in the dark as to a good initial size: it's small enough
455
- that it shouldn't waste memory for infrequently used connections, yet
456
- large enough that the exponential growth should happen nicely when it's
457
- needed.
458
- TODO(ctiller): tune this */
462
+ // 8 is a random stab in the dark as to a good initial size: it's small enough
463
+ // that it shouldn't waste memory for infrequently used connections, yet
464
+ // large enough that the exponential growth should happen nicely when it's
465
+ // needed.
466
+ // TODO(ctiller): tune this
459
467
  grpc_chttp2_stream_map_init(&stream_map, 8);
460
468
 
461
469
  grpc_slice_buffer_init(&read_buffer);
@@ -464,9 +472,8 @@ grpc_chttp2_transport::grpc_chttp2_transport(
464
472
  grpc_slice_buffer_add(&outbuf, grpc_slice_from_copied_string(
465
473
  GRPC_CHTTP2_CLIENT_CONNECT_STRING));
466
474
  }
467
- grpc_chttp2_hpack_compressor_init(&hpack_compressor);
468
475
  grpc_slice_buffer_init(&qbuf);
469
- /* copy in initial settings to all setting sets */
476
+ // copy in initial settings to all setting sets
470
477
  size_t i;
471
478
  int j;
472
479
  for (i = 0; i < GRPC_CHTTP2_NUM_SETTINGS; i++) {
@@ -474,10 +481,9 @@ grpc_chttp2_transport::grpc_chttp2_transport(
474
481
  settings[j][i] = grpc_chttp2_settings_parameters[i].default_value;
475
482
  }
476
483
  }
477
- grpc_chttp2_hpack_parser_init(&hpack_parser);
478
484
  grpc_chttp2_goaway_parser_init(&goaway_parser);
479
485
 
480
- /* configure http2 the way we like it */
486
+ // configure http2 the way we like it
481
487
  if (is_client) {
482
488
  queue_setting_update(this, GRPC_CHTTP2_SETTINGS_ENABLE_PUSH, 0);
483
489
  queue_setting_update(this, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 0);
@@ -503,7 +509,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
503
509
  enable_bdp = false;
504
510
  }
505
511
 
506
- /* No pings allowed before receiving a header or data frame. */
512
+ // No pings allowed before receiving a header or data frame.
507
513
  ping_state.pings_before_data_required = 0;
508
514
  ping_state.is_delayed_ping_timer_set = false;
509
515
  ping_state.last_ping_sent_time = GRPC_MILLIS_INF_PAST;
@@ -514,19 +520,23 @@ grpc_chttp2_transport::grpc_chttp2_transport(
514
520
  init_keepalive_pings_if_enabled(this);
515
521
 
516
522
  if (enable_bdp) {
517
- GRPC_CHTTP2_REF_TRANSPORT(this, "bdp_ping");
518
- schedule_bdp_ping_locked(this);
523
+ bdp_ping_blocked = true;
519
524
  grpc_chttp2_act_on_flowctl_action(flow_control->PeriodicUpdate(), this,
520
525
  nullptr);
521
526
  }
522
527
 
523
528
  grpc_chttp2_initiate_write(this, GRPC_CHTTP2_INITIATE_WRITE_INITIAL_WRITE);
524
529
  post_benign_reclaimer(this);
530
+ if (grpc_core::test_only_init_callback != nullptr) {
531
+ grpc_core::test_only_init_callback();
532
+ }
525
533
  }
526
534
 
527
- static void destroy_transport_locked(void* tp, grpc_error* /*error*/) {
535
+ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
528
536
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
529
537
  t->destroying = 1;
538
+ grpc_resource_user_shutdown(t->resource_user);
539
+ grpc_resource_user_unref(t->resource_user);
530
540
  close_transport_locked(
531
541
  t, grpc_error_set_int(
532
542
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed"),
@@ -542,7 +552,7 @@ static void destroy_transport(grpc_transport* gt) {
542
552
  }
543
553
 
544
554
  static void close_transport_locked(grpc_chttp2_transport* t,
545
- grpc_error* error) {
555
+ grpc_error_handle error) {
546
556
  end_all_the_calls(t, GRPC_ERROR_REF(error));
547
557
  cancel_pings(t, GRPC_ERROR_REF(error));
548
558
  if (t->closed_with_error == GRPC_ERROR_NONE) {
@@ -551,7 +561,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
551
561
  GRPC_STATUS_UNAVAILABLE);
552
562
  }
553
563
  if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
554
- if (t->close_transport_on_writes_finished == nullptr) {
564
+ if (t->close_transport_on_writes_finished == GRPC_ERROR_NONE) {
555
565
  t->close_transport_on_writes_finished =
556
566
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
557
567
  "Delayed close due to in-progress write");
@@ -562,7 +572,8 @@ static void close_transport_locked(grpc_chttp2_transport* t,
562
572
  }
563
573
  GPR_ASSERT(error != GRPC_ERROR_NONE);
564
574
  t->closed_with_error = GRPC_ERROR_REF(error);
565
- connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, "close_transport");
575
+ connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
576
+ "close_transport");
566
577
  if (t->ping_state.is_delayed_ping_timer_set) {
567
578
  grpc_timer_cancel(&t->ping_state.delayed_ping_timer);
568
579
  }
@@ -579,11 +590,11 @@ static void close_transport_locked(grpc_chttp2_transport* t,
579
590
  break;
580
591
  case GRPC_CHTTP2_KEEPALIVE_STATE_DYING:
581
592
  case GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED:
582
- /* keepalive timers are not set in these two states */
593
+ // keepalive timers are not set in these two states
583
594
  break;
584
595
  }
585
596
 
586
- /* flush writable stream list to avoid dangling references */
597
+ // flush writable stream list to avoid dangling references
587
598
  grpc_chttp2_stream* s;
588
599
  while (grpc_chttp2_list_pop_writable_stream(t, &s)) {
589
600
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
@@ -593,9 +604,14 @@ static void close_transport_locked(grpc_chttp2_transport* t,
593
604
  }
594
605
  if (t->notify_on_receive_settings != nullptr) {
595
606
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_receive_settings,
596
- GRPC_ERROR_CANCELLED);
607
+ GRPC_ERROR_REF(error));
597
608
  t->notify_on_receive_settings = nullptr;
598
609
  }
610
+ if (t->notify_on_close != nullptr) {
611
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_close,
612
+ GRPC_ERROR_REF(error));
613
+ t->notify_on_close = nullptr;
614
+ }
599
615
  GRPC_ERROR_UNREF(error);
600
616
  }
601
617
 
@@ -616,9 +632,9 @@ void grpc_chttp2_stream_unref(grpc_chttp2_stream* s) {
616
632
  #endif
617
633
 
618
634
  grpc_chttp2_stream::Reffer::Reffer(grpc_chttp2_stream* s) {
619
- /* We reserve one 'active stream' that's dropped when the stream is
620
- read-closed. The others are for Chttp2IncomingByteStreams that are
621
- actively reading */
635
+ // We reserve one 'active stream' that's dropped when the stream is
636
+ // read-closed. The others are for Chttp2IncomingByteStreams that are
637
+ // actively reading
622
638
  GRPC_CHTTP2_STREAM_REF(s, "chttp2");
623
639
  GRPC_CHTTP2_REF_TRANSPORT(s->t, "stream");
624
640
  }
@@ -630,10 +646,10 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
630
646
  : t(t),
631
647
  refcount(refcount),
632
648
  reffer(this),
633
- metadata_buffer{grpc_chttp2_incoming_metadata_buffer(arena),
634
- grpc_chttp2_incoming_metadata_buffer(arena)} {
649
+ initial_metadata_buffer(arena),
650
+ trailing_metadata_buffer(arena) {
635
651
  if (server_data) {
636
- id = static_cast<uint32_t>((uintptr_t)server_data);
652
+ id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
637
653
  *t->accepting_stream = this;
638
654
  grpc_chttp2_stream_map_add(&t->stream_map, id, this);
639
655
  post_destructive_reclaimer(t);
@@ -677,9 +693,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
677
693
  grpc_slice_buffer_destroy_internal(&decompressed_data_buffer);
678
694
  }
679
695
 
680
- grpc_chttp2_list_remove_stalled_by_transport(t, this);
681
- grpc_chttp2_list_remove_stalled_by_stream(t, this);
682
-
683
696
  for (int i = 0; i < STREAM_LIST_COUNT; i++) {
684
697
  if (GPR_UNLIKELY(included[i])) {
685
698
  gpr_log(GPR_ERROR, "%s stream %d still included in list %d",
@@ -698,13 +711,10 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
698
711
  GRPC_ERROR_UNREF(read_closed_error);
699
712
  GRPC_ERROR_UNREF(write_closed_error);
700
713
  GRPC_ERROR_UNREF(byte_stream_error);
701
-
702
714
  flow_control.Destroy();
703
-
704
- if (t->resource_user != nullptr) {
715
+ if (!t->is_client) {
705
716
  grpc_resource_user_free(t->resource_user, GRPC_RESOURCE_QUOTA_CALL_SIZE);
706
717
  }
707
-
708
718
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "stream");
709
719
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, destroy_stream_arg, GRPC_ERROR_NONE);
710
720
  }
@@ -718,7 +728,7 @@ static int init_stream(grpc_transport* gt, grpc_stream* gs,
718
728
  return 0;
719
729
  }
720
730
 
721
- static void destroy_stream_locked(void* sp, grpc_error* /*error*/) {
731
+ static void destroy_stream_locked(void* sp, grpc_error_handle /*error*/) {
722
732
  GPR_TIMER_SCOPE("destroy_stream", 0);
723
733
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
724
734
  s->~grpc_chttp2_stream();
@@ -756,10 +766,10 @@ grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
756
766
  // Don't accept the stream if memory quota doesn't allow. Note that we should
757
767
  // simply refuse the stream here instead of canceling the stream after it's
758
768
  // accepted since the latter will create the call which costs much memory.
759
- if (t->resource_user != nullptr &&
760
- !grpc_resource_user_safe_alloc(t->resource_user,
769
+ GPR_ASSERT(t->resource_user != nullptr);
770
+ if (!grpc_resource_user_safe_alloc(t->resource_user,
761
771
  GRPC_RESOURCE_QUOTA_CALL_SIZE)) {
762
- gpr_log(GPR_ERROR, "Memory exhausted, rejecting the stream.");
772
+ gpr_log(GPR_INFO, "Memory exhausted, rejecting the stream.");
763
773
  grpc_chttp2_add_rst_stream_to_next_write(t, id, GRPC_HTTP2_REFUSED_STREAM,
764
774
  nullptr);
765
775
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
@@ -769,14 +779,14 @@ grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
769
779
  GPR_ASSERT(t->accepting_stream == nullptr);
770
780
  t->accepting_stream = &accepting;
771
781
  t->accept_stream_cb(t->accept_stream_cb_user_data, &t->base,
772
- (void*)static_cast<uintptr_t>(id));
782
+ reinterpret_cast<void*>(id));
773
783
  t->accepting_stream = nullptr;
774
784
  return accepting;
775
785
  }
776
786
 
777
- /*******************************************************************************
778
- * OUTPUT PROCESSING
779
- */
787
+ //
788
+ // OUTPUT PROCESSING
789
+ //
780
790
 
781
791
  static const char* write_state_name(grpc_chttp2_write_state st) {
782
792
  switch (st) {
@@ -794,20 +804,20 @@ static void set_write_state(grpc_chttp2_transport* t,
794
804
  grpc_chttp2_write_state st, const char* reason) {
795
805
  GRPC_CHTTP2_IF_TRACING(
796
806
  gpr_log(GPR_INFO, "W:%p %s [%s] state %s -> %s [%s]", t,
797
- t->is_client ? "CLIENT" : "SERVER", t->peer_string,
807
+ t->is_client ? "CLIENT" : "SERVER", t->peer_string.c_str(),
798
808
  write_state_name(t->write_state), write_state_name(st), reason));
799
809
  t->write_state = st;
800
- /* If the state is being reset back to idle, it means a write was just
801
- * finished. Make sure all the run_after_write closures are scheduled.
802
- *
803
- * This is also our chance to close the transport if the transport was marked
804
- * to be closed after all writes finish (for example, if we received a go-away
805
- * from peer while we had some pending writes) */
810
+ // If the state is being reset back to idle, it means a write was just
811
+ // finished. Make sure all the run_after_write closures are scheduled.
812
+ //
813
+ // This is also our chance to close the transport if the transport was marked
814
+ // to be closed after all writes finish (for example, if we received a go-away
815
+ // from peer while we had some pending writes)
806
816
  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
807
817
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
808
- if (t->close_transport_on_writes_finished != nullptr) {
809
- grpc_error* err = t->close_transport_on_writes_finished;
810
- t->close_transport_on_writes_finished = nullptr;
818
+ if (t->close_transport_on_writes_finished != GRPC_ERROR_NONE) {
819
+ grpc_error_handle err = t->close_transport_on_writes_finished;
820
+ t->close_transport_on_writes_finished = GRPC_ERROR_NONE;
811
821
  close_transport_locked(t, err);
812
822
  }
813
823
  }
@@ -864,6 +874,9 @@ static void inc_initiate_write_reason(
864
874
  case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
865
875
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_APPLICATION_PING();
866
876
  break;
877
+ case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
878
+ GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING();
879
+ break;
867
880
  case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
868
881
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_KEEPALIVE_PING();
869
882
  break;
@@ -889,22 +902,22 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
889
902
  set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING,
890
903
  grpc_chttp2_initiate_write_reason_string(reason));
891
904
  GRPC_CHTTP2_REF_TRANSPORT(t, "writing");
892
- /* Note that the 'write_action_begin_locked' closure is being scheduled
893
- * on the 'finally_scheduler' of t->combiner. This means that
894
- * 'write_action_begin_locked' is called only *after* all the other
895
- * closures (some of which are potentially initiating more writes on the
896
- * transport) are executed on the t->combiner.
897
- *
898
- * The reason for scheduling on finally_scheduler is to make sure we batch
899
- * as many writes as possible. 'write_action_begin_locked' is the function
900
- * that gathers all the relevant bytes (which are at various places in the
901
- * grpc_chttp2_transport structure) and append them to 'outbuf' field in
902
- * grpc_chttp2_transport thereby batching what would have been potentially
903
- * multiple write operations.
904
- *
905
- * Also, 'write_action_begin_locked' only gathers the bytes into outbuf.
906
- * It does not call the endpoint to write the bytes. That is done by the
907
- * 'write_action' (which is scheduled by 'write_action_begin_locked') */
905
+ // Note that the 'write_action_begin_locked' closure is being scheduled
906
+ // on the 'finally_scheduler' of t->combiner. This means that
907
+ // 'write_action_begin_locked' is called only *after* all the other
908
+ // closures (some of which are potentially initiating more writes on the
909
+ // transport) are executed on the t->combiner.
910
+ //
911
+ // The reason for scheduling on finally_scheduler is to make sure we batch
912
+ // as many writes as possible. 'write_action_begin_locked' is the function
913
+ // that gathers all the relevant bytes (which are at various places in the
914
+ // grpc_chttp2_transport structure) and append them to 'outbuf' field in
915
+ // grpc_chttp2_transport thereby batching what would have been potentially
916
+ // multiple write operations.
917
+ //
918
+ // Also, 'write_action_begin_locked' only gathers the bytes into outbuf.
919
+ // It does not call the endpoint to write the bytes. That is done by the
920
+ // 'write_action' (which is scheduled by 'write_action_begin_locked')
908
921
  t->combiner->FinallyRun(
909
922
  GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
910
923
  write_action_begin_locked, t, nullptr),
@@ -935,7 +948,8 @@ static const char* begin_writing_desc(bool partial) {
935
948
  }
936
949
  }
937
950
 
938
- static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
951
+ static void write_action_begin_locked(void* gt,
952
+ grpc_error_handle /*error_ignored*/) {
939
953
  GPR_TIMER_SCOPE("write_action_begin_locked", 0);
940
954
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
941
955
  GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
@@ -956,9 +970,9 @@ static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
956
970
  write_action(t, GRPC_ERROR_NONE);
957
971
  if (t->reading_paused_on_pending_induced_frames) {
958
972
  GPR_ASSERT(t->num_pending_induced_frames == 0);
959
- /* We had paused reading, because we had many induced frames (SETTINGS
960
- * ACK, PINGS ACK and RST_STREAMS) pending in t->qbuf. Now that we have
961
- * been able to flush qbuf, we can resume reading. */
973
+ // We had paused reading, because we had many induced frames (SETTINGS
974
+ // ACK, PINGS ACK and RST_STREAMS) pending in t->qbuf. Now that we have
975
+ // been able to flush qbuf, we can resume reading.
962
976
  GRPC_CHTTP2_IF_TRACING(gpr_log(
963
977
  GPR_INFO,
964
978
  "transport %p : Resuming reading after being paused due to too "
@@ -974,7 +988,7 @@ static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
974
988
  }
975
989
  }
976
990
 
977
- static void write_action(void* gt, grpc_error* /*error*/) {
991
+ static void write_action(void* gt, grpc_error_handle /*error*/) {
978
992
  GPR_TIMER_SCOPE("write_action", 0);
979
993
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
980
994
  void* cl = t->cl;
@@ -986,16 +1000,16 @@ static void write_action(void* gt, grpc_error* /*error*/) {
986
1000
  cl);
987
1001
  }
988
1002
 
989
- static void write_action_end(void* tp, grpc_error* error) {
1003
+ static void write_action_end(void* tp, grpc_error_handle error) {
990
1004
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
991
1005
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->write_action_end_locked,
992
1006
  write_action_end_locked, t, nullptr),
993
1007
  GRPC_ERROR_REF(error));
994
1008
  }
995
1009
 
996
- /* Callback from the grpc_endpoint after bytes have been written by calling
997
- * sendmsg */
998
- static void write_action_end_locked(void* tp, grpc_error* error) {
1010
+ // Callback from the grpc_endpoint after bytes have been written by calling
1011
+ // sendmsg
1012
+ static void write_action_end_locked(void* tp, grpc_error_handle error) {
999
1013
  GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
1000
1014
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1001
1015
 
@@ -1050,21 +1064,21 @@ static void queue_setting_update(grpc_chttp2_transport* t,
1050
1064
  grpc_chttp2_setting_id id, uint32_t value) {
1051
1065
  const grpc_chttp2_setting_parameters* sp =
1052
1066
  &grpc_chttp2_settings_parameters[id];
1053
- uint32_t use_value = GPR_CLAMP(value, sp->min_value, sp->max_value);
1067
+ uint32_t use_value = grpc_core::Clamp(value, sp->min_value, sp->max_value);
1054
1068
  if (use_value != value) {
1055
1069
  gpr_log(GPR_INFO, "Requested parameter %s clamped from %d to %d", sp->name,
1056
1070
  value, use_value);
1057
1071
  }
1058
1072
  if (use_value != t->settings[GRPC_LOCAL_SETTINGS][id]) {
1059
1073
  t->settings[GRPC_LOCAL_SETTINGS][id] = use_value;
1060
- t->dirtied_local_settings = 1;
1074
+ t->dirtied_local_settings = true;
1061
1075
  }
1062
1076
  }
1063
1077
 
1064
1078
  void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1065
1079
  uint32_t goaway_error,
1066
1080
  uint32_t last_stream_id,
1067
- const grpc_slice& goaway_text) {
1081
+ absl::string_view goaway_text) {
1068
1082
  // Discard the error from a previous goaway frame (if any)
1069
1083
  if (t->goaway_error != GRPC_ERROR_NONE) {
1070
1084
  GRPC_ERROR_UNREF(t->goaway_error);
@@ -1080,38 +1094,43 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1080
1094
  GRPC_CHTTP2_IF_TRACING(
1081
1095
  gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
1082
1096
  last_stream_id));
1083
- /* We want to log this irrespective of whether http tracing is enabled if we
1084
- * received a GOAWAY with a non NO_ERROR code. */
1097
+ // We want to log this irrespective of whether http tracing is enabled if we
1098
+ // received a GOAWAY with a non NO_ERROR code.
1085
1099
  if (goaway_error != GRPC_HTTP2_NO_ERROR) {
1086
- gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string,
1087
- goaway_error, grpc_error_string(t->goaway_error));
1088
- }
1089
- /* When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
1090
- * data equal to "too_many_pings", it should log the occurrence at a log level
1091
- * that is enabled by default and double the configured KEEPALIVE_TIME used
1092
- * for new connections on that channel. */
1100
+ gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
1101
+ goaway_error, grpc_error_std_string(t->goaway_error).c_str());
1102
+ }
1103
+ absl::Status status = grpc_error_to_absl_status(t->goaway_error);
1104
+ // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
1105
+ // data equal to "too_many_pings", it should log the occurrence at a log level
1106
+ // that is enabled by default and double the configured KEEPALIVE_TIME used
1107
+ // for new connections on that channel.
1093
1108
  if (GPR_UNLIKELY(t->is_client &&
1094
1109
  goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
1095
- grpc_slice_str_cmp(goaway_text, "too_many_pings") == 0)) {
1110
+ goaway_text == "too_many_pings")) {
1096
1111
  gpr_log(GPR_ERROR,
1097
1112
  "Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
1098
1113
  "data equal to \"too_many_pings\"");
1099
1114
  double current_keepalive_time_ms = static_cast<double>(t->keepalive_time);
1115
+ constexpr int max_keepalive_time_ms =
1116
+ INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1100
1117
  t->keepalive_time =
1101
- current_keepalive_time_ms > INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER
1118
+ current_keepalive_time_ms > static_cast<double>(max_keepalive_time_ms)
1102
1119
  ? GRPC_MILLIS_INF_FUTURE
1103
1120
  : static_cast<grpc_millis>(current_keepalive_time_ms *
1104
1121
  KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
1122
+ status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
1123
+ absl::Cord(std::to_string(t->keepalive_time)));
1105
1124
  }
1106
-
1107
- /* lie: use transient failure from the transport to indicate goaway has been
1108
- * received */
1109
- connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, "got_goaway");
1125
+ // lie: use transient failure from the transport to indicate goaway has been
1126
+ // received.
1127
+ connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1128
+ "got_goaway");
1110
1129
  }
1111
1130
 
1112
1131
  static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1113
1132
  grpc_chttp2_stream* s;
1114
- /* cancel out streams that haven't yet started if we have received a GOAWAY */
1133
+ // cancel out streams that haven't yet started if we have received a GOAWAY
1115
1134
  if (t->goaway_error != GRPC_ERROR_NONE) {
1116
1135
  while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1117
1136
  grpc_chttp2_cancel_stream(
@@ -1122,14 +1141,14 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1122
1141
  }
1123
1142
  return;
1124
1143
  }
1125
- /* start streams where we have free grpc_chttp2_stream ids and free
1126
- * concurrency */
1144
+ // start streams where we have free grpc_chttp2_stream ids and free
1145
+ // * concurrency
1127
1146
  while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
1128
1147
  grpc_chttp2_stream_map_size(&t->stream_map) <
1129
1148
  t->settings[GRPC_PEER_SETTINGS]
1130
1149
  [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
1131
1150
  grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1132
- /* safe since we can't (legally) be parsing this stream yet */
1151
+ // safe since we can't (legally) be parsing this stream yet
1133
1152
  GRPC_CHTTP2_IF_TRACING(gpr_log(
1134
1153
  GPR_INFO,
1135
1154
  "HTTP:%s: Transport %p allocating new grpc_chttp2_stream %p to id %d",
@@ -1141,6 +1160,8 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1141
1160
 
1142
1161
  if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
1143
1162
  connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE,
1163
+ absl::Status(absl::StatusCode::kUnavailable,
1164
+ "Transport Stream IDs exhausted"),
1144
1165
  "no_more_stream_ids");
1145
1166
  }
1146
1167
 
@@ -1149,7 +1170,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1149
1170
  grpc_chttp2_mark_stream_writable(t, s);
1150
1171
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM);
1151
1172
  }
1152
- /* cancel out streams that will never be started */
1173
+ // cancel out streams that will never be started
1153
1174
  if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
1154
1175
  while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1155
1176
  grpc_chttp2_cancel_stream(
@@ -1161,12 +1182,12 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1161
1182
  }
1162
1183
  }
1163
1184
 
1164
- /* Flag that this closure barrier may be covering a write in a pollset, and so
1165
- we should not complete this closure until we can prove that the write got
1166
- scheduled */
1185
+ // Flag that this closure barrier may be covering a write in a pollset, and so
1186
+ // we should not complete this closure until we can prove that the write got
1187
+ // scheduled
1167
1188
  #define CLOSURE_BARRIER_MAY_COVER_WRITE (1 << 0)
1168
- /* First bit of the reference count, stored in the high order bits (with the low
1169
- bits being used for flags defined above) */
1189
+ // First bit of the reference count, stored in the high order bits (with the low
1190
+ // bits being used for flags defined above)
1170
1191
  #define CLOSURE_BARRIER_FIRST_REF_BIT (1 << 16)
1171
1192
 
1172
1193
  static grpc_closure* add_closure_barrier(grpc_closure* closure) {
@@ -1183,7 +1204,8 @@ static void null_then_sched_closure(grpc_closure** closure) {
1183
1204
  void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1184
1205
  grpc_chttp2_stream* /*s*/,
1185
1206
  grpc_closure** pclosure,
1186
- grpc_error* error, const char* desc) {
1207
+ grpc_error_handle error,
1208
+ const char* desc) {
1187
1209
  grpc_closure* closure = *pclosure;
1188
1210
  *pclosure = nullptr;
1189
1211
  if (closure == nullptr) {
@@ -1192,7 +1214,6 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1192
1214
  }
1193
1215
  closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
1194
1216
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1195
- const char* errstr = grpc_error_string(error);
1196
1217
  gpr_log(
1197
1218
  GPR_INFO,
1198
1219
  "complete_closure_step: t=%p %p refs=%d flags=0x%04x desc=%s err=%s "
@@ -1202,15 +1223,16 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1202
1223
  CLOSURE_BARRIER_FIRST_REF_BIT),
1203
1224
  static_cast<int>(closure->next_data.scratch %
1204
1225
  CLOSURE_BARRIER_FIRST_REF_BIT),
1205
- desc, errstr, write_state_name(t->write_state));
1226
+ desc, grpc_error_std_string(error).c_str(),
1227
+ write_state_name(t->write_state));
1206
1228
  }
1207
1229
  if (error != GRPC_ERROR_NONE) {
1208
1230
  if (closure->error_data.error == GRPC_ERROR_NONE) {
1209
1231
  closure->error_data.error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1210
1232
  "Error in HTTP transport completing operation");
1211
- closure->error_data.error = grpc_error_set_str(
1212
- closure->error_data.error, GRPC_ERROR_STR_TARGET_ADDRESS,
1213
- grpc_slice_from_copied_string(t->peer_string));
1233
+ closure->error_data.error =
1234
+ grpc_error_set_str(closure->error_data.error,
1235
+ GRPC_ERROR_STR_TARGET_ADDRESS, t->peer_string);
1214
1236
  }
1215
1237
  closure->error_data.error =
1216
1238
  grpc_error_add_child(closure->error_data.error, error);
@@ -1230,9 +1252,10 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1230
1252
  }
1231
1253
 
1232
1254
  static bool contains_non_ok_status(grpc_metadata_batch* batch) {
1233
- if (batch->idx.named.grpc_status != nullptr) {
1234
- return !grpc_mdelem_static_value_eq(batch->idx.named.grpc_status->md,
1235
- GRPC_MDELEM_GRPC_STATUS_0);
1255
+ if (batch->legacy_index()->named.grpc_status != nullptr) {
1256
+ return !grpc_mdelem_static_value_eq(
1257
+ batch->legacy_index()->named.grpc_status->md,
1258
+ GRPC_MDELEM_GRPC_STATUS_0);
1236
1259
  }
1237
1260
  return false;
1238
1261
  }
@@ -1258,9 +1281,8 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1258
1281
  grpc_chttp2_stream* s) {
1259
1282
  for (;;) {
1260
1283
  if (s->fetching_send_message == nullptr) {
1261
- /* Stream was cancelled before message fetch completed */
1284
+ // Stream was cancelled before message fetch completed
1262
1285
  abort(); /* TODO(ctiller): what cleanup here? */
1263
- return; /* early out */
1264
1286
  }
1265
1287
  if (s->fetched_send_message_length == s->fetching_send_message->length()) {
1266
1288
  int64_t notify_offset = s->next_message_end_offset;
@@ -1291,7 +1313,8 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1291
1313
  UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1292
1314
  ::complete_fetch, s,
1293
1315
  grpc_schedule_on_exec_ctx))) {
1294
- grpc_error* error = s->fetching_send_message->Pull(&s->fetching_slice);
1316
+ grpc_error_handle error =
1317
+ s->fetching_send_message->Pull(&s->fetching_slice);
1295
1318
  if (error != GRPC_ERROR_NONE) {
1296
1319
  s->fetching_send_message.reset();
1297
1320
  grpc_chttp2_cancel_stream(t, s, error);
@@ -1302,14 +1325,14 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1302
1325
  }
1303
1326
  }
1304
1327
 
1305
- static void complete_fetch(void* gs, grpc_error* error) {
1328
+ static void complete_fetch(void* gs, grpc_error_handle error) {
1306
1329
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1307
1330
  s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1308
1331
  ::complete_fetch_locked, s, nullptr),
1309
1332
  GRPC_ERROR_REF(error));
1310
1333
  }
1311
1334
 
1312
- static void complete_fetch_locked(void* gs, grpc_error* error) {
1335
+ static void complete_fetch_locked(void* gs, grpc_error_handle error) {
1313
1336
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1314
1337
  grpc_chttp2_transport* t = s->t;
1315
1338
  if (error == GRPC_ERROR_NONE) {
@@ -1327,19 +1350,18 @@ static void complete_fetch_locked(void* gs, grpc_error* error) {
1327
1350
 
1328
1351
  static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
1329
1352
  bool is_client, bool is_initial) {
1330
- for (grpc_linked_mdelem* md = md_batch->list.head; md != nullptr;
1331
- md = md->next) {
1332
- char* key = grpc_slice_to_c_string(GRPC_MDKEY(md->md));
1333
- char* value = grpc_slice_to_c_string(GRPC_MDVALUE(md->md));
1353
+ md_batch->ForEach([=](grpc_mdelem md) {
1354
+ char* key = grpc_slice_to_c_string(GRPC_MDKEY(md));
1355
+ char* value = grpc_slice_to_c_string(GRPC_MDVALUE(md));
1334
1356
  gpr_log(GPR_INFO, "HTTP:%d:%s:%s: %s: %s", id, is_initial ? "HDR" : "TRL",
1335
1357
  is_client ? "CLI" : "SVR", key, value);
1336
1358
  gpr_free(key);
1337
1359
  gpr_free(value);
1338
- }
1360
+ });
1339
1361
  }
1340
1362
 
1341
1363
  static void perform_stream_op_locked(void* stream_op,
1342
- grpc_error* /*error_ignored*/) {
1364
+ grpc_error_handle /*error_ignored*/) {
1343
1365
  GPR_TIMER_SCOPE("perform_stream_op_locked", 0);
1344
1366
 
1345
1367
  grpc_transport_stream_op_batch* op =
@@ -1354,10 +1376,8 @@ static void perform_stream_op_locked(void* stream_op,
1354
1376
  s->context = op->payload->context;
1355
1377
  s->traced = op->is_traced;
1356
1378
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1357
- char* str = grpc_transport_stream_op_batch_string(op);
1358
- gpr_log(GPR_INFO, "perform_stream_op_locked: %s; on_complete = %p", str,
1359
- op->on_complete);
1360
- gpr_free(str);
1379
+ gpr_log(GPR_INFO, "perform_stream_op_locked: %s; on_complete = %p",
1380
+ grpc_transport_stream_op_batch_string(op).c_str(), op->on_complete);
1361
1381
  if (op->send_initial_metadata) {
1362
1382
  log_metadata(op_payload->send_initial_metadata.send_initial_metadata,
1363
1383
  s->id, t->is_client, true);
@@ -1390,13 +1410,14 @@ static void perform_stream_op_locked(void* stream_op,
1390
1410
  GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
1391
1411
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1392
1412
 
1393
- /* Identify stream compression */
1394
- if (op_payload->send_initial_metadata.send_initial_metadata->idx.named
1395
- .content_encoding == nullptr ||
1413
+ // Identify stream compression
1414
+ if (op_payload->send_initial_metadata.send_initial_metadata->legacy_index()
1415
+ ->named.content_encoding == nullptr ||
1396
1416
  grpc_stream_compression_method_parse(
1397
1417
  GRPC_MDVALUE(
1398
- op_payload->send_initial_metadata.send_initial_metadata->idx
1399
- .named.content_encoding->md),
1418
+ op_payload->send_initial_metadata.send_initial_metadata
1419
+ ->legacy_index()
1420
+ ->named.content_encoding->md),
1400
1421
  true, &s->stream_compression_method) == 0) {
1401
1422
  s->stream_compression_method = GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS;
1402
1423
  }
@@ -1409,68 +1430,51 @@ static void perform_stream_op_locked(void* stream_op,
1409
1430
  s->send_initial_metadata_finished = add_closure_barrier(on_complete);
1410
1431
  s->send_initial_metadata =
1411
1432
  op_payload->send_initial_metadata.send_initial_metadata;
1412
- const size_t metadata_size =
1413
- grpc_metadata_batch_size(s->send_initial_metadata);
1414
- const size_t metadata_peer_limit =
1415
- t->settings[GRPC_PEER_SETTINGS]
1416
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
1417
1433
  if (t->is_client) {
1418
- s->deadline = GPR_MIN(s->deadline, s->send_initial_metadata->deadline);
1419
- }
1420
- if (metadata_size > metadata_peer_limit) {
1421
- grpc_chttp2_cancel_stream(
1422
- t, s,
1423
- grpc_error_set_int(
1424
- grpc_error_set_int(
1425
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1426
- "to-be-sent initial metadata size "
1427
- "exceeds peer limit"),
1428
- GRPC_ERROR_INT_SIZE,
1429
- static_cast<intptr_t>(metadata_size)),
1430
- GRPC_ERROR_INT_LIMIT,
1431
- static_cast<intptr_t>(metadata_peer_limit)),
1432
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
1433
- } else {
1434
- if (contains_non_ok_status(s->send_initial_metadata)) {
1435
- s->seen_error = true;
1436
- }
1437
- if (!s->write_closed) {
1438
- if (t->is_client) {
1439
- if (t->closed_with_error == GRPC_ERROR_NONE) {
1440
- GPR_ASSERT(s->id == 0);
1441
- grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1442
- maybe_start_some_streams(t);
1443
- } else {
1444
- grpc_chttp2_cancel_stream(
1445
- t, s,
1446
- grpc_error_set_int(
1447
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1448
- "Transport closed", &t->closed_with_error, 1),
1449
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1450
- }
1434
+ s->deadline = std::min(
1435
+ s->deadline,
1436
+ s->send_initial_metadata->get(grpc_core::GrpcTimeoutMetadata())
1437
+ .value_or(GRPC_MILLIS_INF_FUTURE));
1438
+ }
1439
+ if (contains_non_ok_status(s->send_initial_metadata)) {
1440
+ s->seen_error = true;
1441
+ }
1442
+ if (!s->write_closed) {
1443
+ if (t->is_client) {
1444
+ if (t->closed_with_error == GRPC_ERROR_NONE) {
1445
+ GPR_ASSERT(s->id == 0);
1446
+ grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1447
+ maybe_start_some_streams(t);
1451
1448
  } else {
1452
- GPR_ASSERT(s->id != 0);
1453
- grpc_chttp2_mark_stream_writable(t, s);
1454
- if (!(op->send_message &&
1455
- (op->payload->send_message.send_message->flags() &
1456
- GRPC_WRITE_BUFFER_HINT))) {
1457
- grpc_chttp2_initiate_write(
1458
- t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1459
- }
1449
+ grpc_chttp2_cancel_stream(
1450
+ t, s,
1451
+ grpc_error_set_int(
1452
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1453
+ "Transport closed", &t->closed_with_error, 1),
1454
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1460
1455
  }
1461
1456
  } else {
1462
- s->send_initial_metadata = nullptr;
1463
- grpc_chttp2_complete_closure_step(
1464
- t, s, &s->send_initial_metadata_finished,
1465
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1466
- "Attempt to send initial metadata after stream was closed",
1467
- &s->write_closed_error, 1),
1468
- "send_initial_metadata_finished");
1457
+ GPR_ASSERT(s->id != 0);
1458
+ grpc_chttp2_mark_stream_writable(t, s);
1459
+ if (!(op->send_message &&
1460
+ (op->payload->send_message.send_message->flags() &
1461
+ GRPC_WRITE_BUFFER_HINT))) {
1462
+ grpc_chttp2_initiate_write(
1463
+ t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1464
+ }
1469
1465
  }
1466
+ } else {
1467
+ s->send_initial_metadata = nullptr;
1468
+ grpc_chttp2_complete_closure_step(
1469
+ t, s, &s->send_initial_metadata_finished,
1470
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1471
+ "Attempt to send initial metadata after stream was closed",
1472
+ &s->write_closed_error, 1),
1473
+ "send_initial_metadata_finished");
1470
1474
  }
1471
1475
  if (op_payload->send_initial_metadata.peer_string != nullptr) {
1472
1476
  gpr_atm_rel_store(op_payload->send_initial_metadata.peer_string,
1473
- (gpr_atm)t->peer_string);
1477
+ (gpr_atm)t->peer_string.c_str());
1474
1478
  }
1475
1479
  }
1476
1480
 
@@ -1526,47 +1530,28 @@ static void perform_stream_op_locked(void* stream_op,
1526
1530
  s->send_trailing_metadata_finished = add_closure_barrier(on_complete);
1527
1531
  s->send_trailing_metadata =
1528
1532
  op_payload->send_trailing_metadata.send_trailing_metadata;
1533
+ s->sent_trailing_metadata_op = op_payload->send_trailing_metadata.sent;
1529
1534
  s->write_buffering = false;
1530
- const size_t metadata_size =
1531
- grpc_metadata_batch_size(s->send_trailing_metadata);
1532
- const size_t metadata_peer_limit =
1533
- t->settings[GRPC_PEER_SETTINGS]
1534
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
1535
- if (metadata_size > metadata_peer_limit) {
1536
- grpc_chttp2_cancel_stream(
1537
- t, s,
1538
- grpc_error_set_int(
1539
- grpc_error_set_int(
1540
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1541
- "to-be-sent trailing metadata size "
1542
- "exceeds peer limit"),
1543
- GRPC_ERROR_INT_SIZE,
1544
- static_cast<intptr_t>(metadata_size)),
1545
- GRPC_ERROR_INT_LIMIT,
1546
- static_cast<intptr_t>(metadata_peer_limit)),
1547
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
1548
- } else {
1549
- if (contains_non_ok_status(s->send_trailing_metadata)) {
1550
- s->seen_error = true;
1551
- }
1552
- if (s->write_closed) {
1553
- s->send_trailing_metadata = nullptr;
1554
- grpc_chttp2_complete_closure_step(
1555
- t, s, &s->send_trailing_metadata_finished,
1556
- grpc_metadata_batch_is_empty(
1557
- op->payload->send_trailing_metadata.send_trailing_metadata)
1558
- ? GRPC_ERROR_NONE
1559
- : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1560
- "Attempt to send trailing metadata after "
1561
- "stream was closed"),
1562
- "send_trailing_metadata_finished");
1563
- } else if (s->id != 0) {
1564
- /* TODO(ctiller): check if there's flow control for any outstanding
1565
- bytes before going writable */
1566
- grpc_chttp2_mark_stream_writable(t, s);
1567
- grpc_chttp2_initiate_write(
1568
- t, GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA);
1569
- }
1535
+ if (contains_non_ok_status(s->send_trailing_metadata)) {
1536
+ s->seen_error = true;
1537
+ }
1538
+ if (s->write_closed) {
1539
+ s->send_trailing_metadata = nullptr;
1540
+ s->sent_trailing_metadata_op = nullptr;
1541
+ grpc_chttp2_complete_closure_step(
1542
+ t, s, &s->send_trailing_metadata_finished,
1543
+ op->payload->send_trailing_metadata.send_trailing_metadata->empty()
1544
+ ? GRPC_ERROR_NONE
1545
+ : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1546
+ "Attempt to send trailing metadata after "
1547
+ "stream was closed"),
1548
+ "send_trailing_metadata_finished");
1549
+ } else if (s->id != 0) {
1550
+ // TODO(ctiller): check if there's flow control for any outstanding
1551
+ // bytes before going writable
1552
+ grpc_chttp2_mark_stream_writable(t, s);
1553
+ grpc_chttp2_initiate_write(
1554
+ t, GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA);
1570
1555
  }
1571
1556
  }
1572
1557
 
@@ -1581,7 +1566,7 @@ static void perform_stream_op_locked(void* stream_op,
1581
1566
  op_payload->recv_initial_metadata.trailing_metadata_available;
1582
1567
  if (op_payload->recv_initial_metadata.peer_string != nullptr) {
1583
1568
  gpr_atm_rel_store(op_payload->recv_initial_metadata.peer_string,
1584
- (gpr_atm)t->peer_string);
1569
+ (gpr_atm)t->peer_string.c_str());
1585
1570
  }
1586
1571
  grpc_chttp2_maybe_complete_recv_initial_metadata(t, s);
1587
1572
  }
@@ -1593,6 +1578,8 @@ static void perform_stream_op_locked(void* stream_op,
1593
1578
  GPR_ASSERT(!s->pending_byte_stream);
1594
1579
  s->recv_message_ready = op_payload->recv_message.recv_message_ready;
1595
1580
  s->recv_message = op_payload->recv_message.recv_message;
1581
+ s->call_failed_before_recv_message =
1582
+ op_payload->recv_message.call_failed_before_recv_message;
1596
1583
  if (s->id != 0) {
1597
1584
  if (!s->read_closed) {
1598
1585
  before = s->frame_storage.length +
@@ -1602,8 +1589,7 @@ static void perform_stream_op_locked(void* stream_op,
1602
1589
  grpc_chttp2_maybe_complete_recv_message(t, s);
1603
1590
  if (s->id != 0) {
1604
1591
  if (!s->read_closed && s->frame_storage.length == 0) {
1605
- size_t after = s->frame_storage.length +
1606
- s->unprocessed_incoming_frames_buffer_cached_length;
1592
+ size_t after = s->unprocessed_incoming_frames_buffer_cached_length;
1607
1593
  s->flow_control->IncomingByteStreamUpdate(GRPC_HEADER_SIZE_IN_BYTES,
1608
1594
  before - after);
1609
1595
  grpc_chttp2_act_on_flowctl_action(s->flow_control->MakeAction(), t, s);
@@ -1640,21 +1626,20 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1640
1626
 
1641
1627
  if (!t->is_client) {
1642
1628
  if (op->send_initial_metadata) {
1643
- grpc_millis deadline =
1644
- op->payload->send_initial_metadata.send_initial_metadata->deadline;
1645
- GPR_ASSERT(deadline == GRPC_MILLIS_INF_FUTURE);
1629
+ GPR_ASSERT(!op->payload->send_initial_metadata.send_initial_metadata
1630
+ ->get(grpc_core::GrpcTimeoutMetadata())
1631
+ .has_value());
1646
1632
  }
1647
1633
  if (op->send_trailing_metadata) {
1648
- grpc_millis deadline =
1649
- op->payload->send_trailing_metadata.send_trailing_metadata->deadline;
1650
- GPR_ASSERT(deadline == GRPC_MILLIS_INF_FUTURE);
1634
+ GPR_ASSERT(!op->payload->send_trailing_metadata.send_trailing_metadata
1635
+ ->get(grpc_core::GrpcTimeoutMetadata())
1636
+ .has_value());
1651
1637
  }
1652
1638
  }
1653
1639
 
1654
1640
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1655
- char* str = grpc_transport_stream_op_batch_string(op);
1656
- gpr_log(GPR_INFO, "perform_stream_op[s=%p]: %s", s, str);
1657
- gpr_free(str);
1641
+ gpr_log(GPR_INFO, "perform_stream_op[s=%p]: %s", s,
1642
+ grpc_transport_stream_op_batch_string(op).c_str());
1658
1643
  }
1659
1644
 
1660
1645
  GRPC_CHTTP2_STREAM_REF(s, "perform_stream_op");
@@ -1664,9 +1649,9 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1664
1649
  GRPC_ERROR_NONE);
1665
1650
  }
1666
1651
 
1667
- static void cancel_pings(grpc_chttp2_transport* t, grpc_error* error) {
1668
- /* callback remaining pings: they're not allowed to call into the transport,
1669
- and maybe they hold resources that need to be freed */
1652
+ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
1653
+ // callback remaining pings: they're not allowed to call into the transport,
1654
+ // and maybe they hold resources that need to be freed
1670
1655
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1671
1656
  GPR_ASSERT(error != GRPC_ERROR_NONE);
1672
1657
  for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
@@ -1692,11 +1677,9 @@ static void send_ping_locked(grpc_chttp2_transport* t,
1692
1677
  GRPC_ERROR_NONE);
1693
1678
  }
1694
1679
 
1695
- /*
1696
- * Specialized form of send_ping_locked for keepalive ping. If there is already
1697
- * a ping in progress, the keepalive ping would piggyback onto that ping,
1698
- * instead of waiting for that ping to complete and then starting a new ping.
1699
- */
1680
+ // Specialized form of send_ping_locked for keepalive ping. If there is already
1681
+ // a ping in progress, the keepalive ping would piggyback onto that ping,
1682
+ // instead of waiting for that ping to complete and then starting a new ping.
1700
1683
  static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1701
1684
  if (t->closed_with_error != GRPC_ERROR_NONE) {
1702
1685
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
@@ -1710,7 +1693,7 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1710
1693
  }
1711
1694
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1712
1695
  if (!grpc_closure_list_empty(pq->lists[GRPC_CHTTP2_PCL_INFLIGHT])) {
1713
- /* There is a ping in flight. Add yourself to the inflight closure list. */
1696
+ // There is a ping in flight. Add yourself to the inflight closure list.
1714
1697
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
1715
1698
  start_keepalive_ping_locked, t, nullptr),
1716
1699
  GRPC_ERROR_REF(t->closed_with_error));
@@ -1733,14 +1716,14 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1733
1716
  GRPC_ERROR_NONE);
1734
1717
  }
1735
1718
 
1736
- void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error* error) {
1719
+ void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error_handle error) {
1737
1720
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1738
1721
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->retry_initiate_ping_locked,
1739
1722
  retry_initiate_ping_locked, t, nullptr),
1740
1723
  GRPC_ERROR_REF(error));
1741
1724
  }
1742
1725
 
1743
- static void retry_initiate_ping_locked(void* tp, grpc_error* error) {
1726
+ static void retry_initiate_ping_locked(void* tp, grpc_error_handle error) {
1744
1727
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1745
1728
  t->ping_state.is_delayed_ping_timer_set = false;
1746
1729
  if (error == GRPC_ERROR_NONE) {
@@ -1752,9 +1735,8 @@ static void retry_initiate_ping_locked(void* tp, grpc_error* error) {
1752
1735
  void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1753
1736
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1754
1737
  if (pq->inflight_id != id) {
1755
- char* from = grpc_endpoint_get_peer(t->ep);
1756
- gpr_log(GPR_DEBUG, "Unknown ping response from %s: %" PRIx64, from, id);
1757
- gpr_free(from);
1738
+ gpr_log(GPR_DEBUG, "Unknown ping response from %s: %" PRIx64,
1739
+ t->peer_string.c_str(), id);
1758
1740
  return;
1759
1741
  }
1760
1742
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION,
@@ -1764,18 +1746,18 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1764
1746
  }
1765
1747
  }
1766
1748
 
1767
- static void send_goaway(grpc_chttp2_transport* t, grpc_error* error) {
1768
- /* We want to log this irrespective of whether http tracing is enabled */
1769
- gpr_log(GPR_INFO, "%s: Sending goaway err=%s", t->peer_string,
1770
- grpc_error_string(error));
1749
+ static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error) {
1750
+ // We want to log this irrespective of whether http tracing is enabled
1751
+ gpr_log(GPR_DEBUG, "%s: Sending goaway err=%s", t->peer_string.c_str(),
1752
+ grpc_error_std_string(error).c_str());
1771
1753
  t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED;
1772
1754
  grpc_http2_error_code http_error;
1773
- grpc_slice slice;
1774
- grpc_error_get_status(error, GRPC_MILLIS_INF_FUTURE, nullptr, &slice,
1755
+ std::string message;
1756
+ grpc_error_get_status(error, GRPC_MILLIS_INF_FUTURE, nullptr, &message,
1775
1757
  &http_error, nullptr);
1776
- grpc_chttp2_goaway_append(t->last_new_stream_id,
1777
- static_cast<uint32_t>(http_error),
1778
- grpc_slice_ref_internal(slice), &t->qbuf);
1758
+ grpc_chttp2_goaway_append(
1759
+ t->last_new_stream_id, static_cast<uint32_t>(http_error),
1760
+ grpc_slice_from_cpp_string(std::move(message)), &t->qbuf);
1779
1761
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT);
1780
1762
  GRPC_ERROR_UNREF(error);
1781
1763
  }
@@ -1787,7 +1769,7 @@ void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
1787
1769
  grpc_error_set_int(
1788
1770
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("too_many_pings"),
1789
1771
  GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM));
1790
- /*The transport will be closed after the write is done */
1772
+ // The transport will be closed after the write is done
1791
1773
  close_transport_locked(
1792
1774
  t, grpc_error_set_int(
1793
1775
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many pings"),
@@ -1795,13 +1777,22 @@ void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
1795
1777
  }
1796
1778
  }
1797
1779
 
1780
+ void grpc_chttp2_reset_ping_clock(grpc_chttp2_transport* t) {
1781
+ if (!t->is_client) {
1782
+ t->ping_recv_state.last_ping_recv_time = GRPC_MILLIS_INF_PAST;
1783
+ t->ping_recv_state.ping_strikes = 0;
1784
+ }
1785
+ t->ping_state.pings_before_data_required =
1786
+ t->ping_policy.max_pings_without_data;
1787
+ }
1788
+
1798
1789
  static void perform_transport_op_locked(void* stream_op,
1799
- grpc_error* /*error_ignored*/) {
1790
+ grpc_error_handle /*error_ignored*/) {
1800
1791
  grpc_transport_op* op = static_cast<grpc_transport_op*>(stream_op);
1801
1792
  grpc_chttp2_transport* t =
1802
1793
  static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
1803
1794
 
1804
- if (op->goaway_error) {
1795
+ if (op->goaway_error != GRPC_ERROR_NONE) {
1805
1796
  send_goaway(t, op->goaway_error);
1806
1797
  }
1807
1798
 
@@ -1843,9 +1834,8 @@ static void perform_transport_op_locked(void* stream_op,
1843
1834
  static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
1844
1835
  grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
1845
1836
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1846
- char* msg = grpc_transport_op_string(op);
1847
- gpr_log(GPR_INFO, "perform_transport_op[t=%p]: %s", t, msg);
1848
- gpr_free(msg);
1837
+ gpr_log(GPR_INFO, "perform_transport_op[t=%p]: %s", t,
1838
+ grpc_transport_op_string(op).c_str());
1849
1839
  }
1850
1840
  op->handler_private.extra_arg = gt;
1851
1841
  GRPC_CHTTP2_REF_TRANSPORT(t, "transport_op");
@@ -1854,9 +1844,9 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
1854
1844
  GRPC_ERROR_NONE);
1855
1845
  }
1856
1846
 
1857
- /*******************************************************************************
1858
- * INPUT PROCESSING - GENERAL
1859
- */
1847
+ //
1848
+ // INPUT PROCESSING - GENERAL
1849
+ //
1860
1850
 
1861
1851
  void grpc_chttp2_maybe_complete_recv_initial_metadata(
1862
1852
  grpc_chttp2_transport* /*t*/, grpc_chttp2_stream* s) {
@@ -1869,15 +1859,14 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(
1869
1859
  &s->unprocessed_incoming_frames_buffer);
1870
1860
  }
1871
1861
  }
1872
- grpc_chttp2_incoming_metadata_buffer_publish(&s->metadata_buffer[0],
1873
- s->recv_initial_metadata);
1862
+ *s->recv_initial_metadata = std::move(s->initial_metadata_buffer);
1874
1863
  null_then_sched_closure(&s->recv_initial_metadata_ready);
1875
1864
  }
1876
1865
  }
1877
1866
 
1878
1867
  void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1879
1868
  grpc_chttp2_stream* s) {
1880
- grpc_error* error = GRPC_ERROR_NONE;
1869
+ grpc_error_handle error = GRPC_ERROR_NONE;
1881
1870
  if (s->recv_message_ready != nullptr) {
1882
1871
  *s->recv_message = nullptr;
1883
1872
  if (s->final_metadata_requested && s->seen_error) {
@@ -1954,6 +1943,10 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1954
1943
  null_then_sched_closure(&s->recv_message_ready);
1955
1944
  } else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
1956
1945
  *s->recv_message = nullptr;
1946
+ if (s->call_failed_before_recv_message != nullptr) {
1947
+ *s->call_failed_before_recv_message =
1948
+ (s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
1949
+ }
1957
1950
  null_then_sched_closure(&s->recv_message_ready);
1958
1951
  }
1959
1952
  GRPC_ERROR_UNREF(error);
@@ -1976,13 +1969,14 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
1976
1969
  s->unprocessed_incoming_frames_buffer.length > 0;
1977
1970
  if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
1978
1971
  !s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
1979
- /* Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
1980
- * maybe decompress the next 5 bytes in the stream. */
1972
+ // Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
1973
+ // maybe decompress the next 5 bytes in the stream.
1981
1974
  if (s->stream_decompression_method ==
1982
1975
  GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
1983
1976
  grpc_slice_buffer_move_first(
1984
1977
  &s->frame_storage,
1985
- GPR_MIN(s->frame_storage.length, GRPC_HEADER_SIZE_IN_BYTES),
1978
+ std::min(s->frame_storage.length,
1979
+ size_t(GRPC_HEADER_SIZE_IN_BYTES)),
1986
1980
  &s->unprocessed_incoming_frames_buffer);
1987
1981
  if (s->unprocessed_incoming_frames_buffer.length > 0) {
1988
1982
  s->unprocessed_incoming_frames_decompressed = true;
@@ -2019,15 +2013,14 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
2019
2013
  s->recv_trailing_metadata_finished != nullptr) {
2020
2014
  grpc_transport_move_stats(&s->stats, s->collecting_stats);
2021
2015
  s->collecting_stats = nullptr;
2022
- grpc_chttp2_incoming_metadata_buffer_publish(&s->metadata_buffer[1],
2023
- s->recv_trailing_metadata);
2016
+ *s->recv_trailing_metadata = std::move(s->trailing_metadata_buffer);
2024
2017
  null_then_sched_closure(&s->recv_trailing_metadata_finished);
2025
2018
  }
2026
2019
  }
2027
2020
  }
2028
2021
 
2029
2022
  static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2030
- grpc_error* error) {
2023
+ grpc_error_handle error) {
2031
2024
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
2032
2025
  grpc_chttp2_stream_map_delete(&t->stream_map, id));
2033
2026
  GPR_DEBUG_ASSERT(s);
@@ -2061,6 +2054,8 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2061
2054
  if (grpc_chttp2_list_remove_writable_stream(t, s)) {
2062
2055
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:remove_stream");
2063
2056
  }
2057
+ grpc_chttp2_list_remove_stalled_by_stream(t, s);
2058
+ grpc_chttp2_list_remove_stalled_by_transport(t, s);
2064
2059
 
2065
2060
  GRPC_ERROR_UNREF(error);
2066
2061
 
@@ -2068,7 +2063,7 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2068
2063
  }
2069
2064
 
2070
2065
  void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2071
- grpc_error* due_to_error) {
2066
+ grpc_error_handle due_to_error) {
2072
2067
  if (!t->is_client && !s->sent_trailing_metadata &&
2073
2068
  grpc_error_has_clear_grpc_status(due_to_error)) {
2074
2069
  close_from_api(t, s, due_to_error);
@@ -2092,35 +2087,33 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2092
2087
  }
2093
2088
 
2094
2089
  void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2095
- grpc_error* error) {
2090
+ grpc_error_handle error) {
2096
2091
  grpc_status_code status;
2097
- grpc_slice slice;
2098
- grpc_error_get_status(error, s->deadline, &status, &slice, nullptr, nullptr);
2092
+ std::string message;
2093
+ grpc_error_get_status(error, s->deadline, &status, &message, nullptr,
2094
+ nullptr);
2099
2095
  if (status != GRPC_STATUS_OK) {
2100
2096
  s->seen_error = true;
2101
2097
  }
2102
- /* stream_global->recv_trailing_metadata_finished gives us a
2103
- last chance replacement: we've received trailing metadata,
2104
- but something more important has become available to signal
2105
- to the upper layers - drop what we've got, and then publish
2106
- what we want - which is safe because we haven't told anyone
2107
- about the metadata yet */
2098
+ // stream_global->recv_trailing_metadata_finished gives us a
2099
+ // last chance replacement: we've received trailing metadata,
2100
+ // but something more important has become available to signal
2101
+ // to the upper layers - drop what we've got, and then publish
2102
+ // what we want - which is safe because we haven't told anyone
2103
+ // about the metadata yet
2108
2104
  if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
2109
2105
  s->recv_trailing_metadata_finished != nullptr) {
2110
2106
  char status_string[GPR_LTOA_MIN_BUFSIZE];
2111
2107
  gpr_ltoa(status, status_string);
2112
2108
  GRPC_LOG_IF_ERROR("add_status",
2113
- grpc_chttp2_incoming_metadata_buffer_replace_or_add(
2114
- &s->metadata_buffer[1],
2115
- grpc_mdelem_from_slices(
2116
- GRPC_MDSTR_GRPC_STATUS,
2117
- grpc_core::UnmanagedMemorySlice(status_string))));
2118
- if (!GRPC_SLICE_IS_EMPTY(slice)) {
2119
- GRPC_LOG_IF_ERROR(
2120
- "add_status_message",
2121
- grpc_chttp2_incoming_metadata_buffer_replace_or_add(
2122
- &s->metadata_buffer[1],
2123
- grpc_mdelem_create(GRPC_MDSTR_GRPC_MESSAGE, slice, nullptr)));
2109
+ s->trailing_metadata_buffer.ReplaceOrAppend(
2110
+ GRPC_MDSTR_GRPC_STATUS,
2111
+ grpc_core::UnmanagedMemorySlice(status_string)));
2112
+ if (!message.empty()) {
2113
+ grpc_slice message_slice = grpc_slice_from_cpp_string(std::move(message));
2114
+ GRPC_LOG_IF_ERROR("add_status_message",
2115
+ s->trailing_metadata_buffer.ReplaceOrAppend(
2116
+ GRPC_MDSTR_GRPC_MESSAGE, message_slice));
2124
2117
  }
2125
2118
  s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE;
2126
2119
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
@@ -2129,7 +2122,8 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2129
2122
  GRPC_ERROR_UNREF(error);
2130
2123
  }
2131
2124
 
2132
- static void add_error(grpc_error* error, grpc_error** refs, size_t* nrefs) {
2125
+ static void add_error(grpc_error_handle error, grpc_error_handle* refs,
2126
+ size_t* nrefs) {
2133
2127
  if (error == GRPC_ERROR_NONE) return;
2134
2128
  for (size_t i = 0; i < *nrefs; i++) {
2135
2129
  if (error == refs[i]) {
@@ -2140,16 +2134,17 @@ static void add_error(grpc_error* error, grpc_error** refs, size_t* nrefs) {
2140
2134
  ++*nrefs;
2141
2135
  }
2142
2136
 
2143
- static grpc_error* removal_error(grpc_error* extra_error, grpc_chttp2_stream* s,
2144
- const char* master_error_msg) {
2145
- grpc_error* refs[3];
2137
+ static grpc_error_handle removal_error(grpc_error_handle extra_error,
2138
+ grpc_chttp2_stream* s,
2139
+ const char* main_error_msg) {
2140
+ grpc_error_handle refs[3];
2146
2141
  size_t nrefs = 0;
2147
2142
  add_error(s->read_closed_error, refs, &nrefs);
2148
2143
  add_error(s->write_closed_error, refs, &nrefs);
2149
2144
  add_error(extra_error, refs, &nrefs);
2150
- grpc_error* error = GRPC_ERROR_NONE;
2145
+ grpc_error_handle error = GRPC_ERROR_NONE;
2151
2146
  if (nrefs > 0) {
2152
- error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(master_error_msg,
2147
+ error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(main_error_msg,
2153
2148
  refs, nrefs);
2154
2149
  }
2155
2150
  GRPC_ERROR_UNREF(extra_error);
@@ -2157,7 +2152,8 @@ static grpc_error* removal_error(grpc_error* extra_error, grpc_chttp2_stream* s,
2157
2152
  }
2158
2153
 
2159
2154
  static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2160
- grpc_chttp2_write_cb** list, grpc_error* error) {
2155
+ grpc_chttp2_write_cb** list,
2156
+ grpc_error_handle error) {
2161
2157
  while (*list) {
2162
2158
  grpc_chttp2_write_cb* cb = *list;
2163
2159
  *list = cb->next;
@@ -2170,7 +2166,8 @@ static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2170
2166
  }
2171
2167
 
2172
2168
  void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2173
- grpc_chttp2_stream* s, grpc_error* error) {
2169
+ grpc_chttp2_stream* s,
2170
+ grpc_error_handle error) {
2174
2171
  error =
2175
2172
  removal_error(error, s, "Pending writes failed due to stream closure");
2176
2173
  s->send_initial_metadata = nullptr;
@@ -2179,6 +2176,7 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2179
2176
  "send_initial_metadata_finished");
2180
2177
 
2181
2178
  s->send_trailing_metadata = nullptr;
2179
+ s->sent_trailing_metadata_op = nullptr;
2182
2180
  grpc_chttp2_complete_closure_step(t, s, &s->send_trailing_metadata_finished,
2183
2181
  GRPC_ERROR_REF(error),
2184
2182
  "send_trailing_metadata_finished");
@@ -2193,11 +2191,14 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2193
2191
 
2194
2192
  void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2195
2193
  grpc_chttp2_stream* s, int close_reads,
2196
- int close_writes, grpc_error* error) {
2194
+ int close_writes, grpc_error_handle error) {
2197
2195
  if (s->read_closed && s->write_closed) {
2198
- /* already closed */
2196
+ // already closed, but we should still fake the status if needed.
2197
+ grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
2198
+ if (overall_error != GRPC_ERROR_NONE) {
2199
+ grpc_chttp2_fake_status(t, s, overall_error);
2200
+ }
2199
2201
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
2200
- GRPC_ERROR_UNREF(error);
2201
2202
  return;
2202
2203
  }
2203
2204
  bool closed_read = false;
@@ -2214,12 +2215,12 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2214
2215
  }
2215
2216
  if (s->read_closed && s->write_closed) {
2216
2217
  became_closed = true;
2217
- grpc_error* overall_error =
2218
+ grpc_error_handle overall_error =
2218
2219
  removal_error(GRPC_ERROR_REF(error), s, "Stream removed");
2219
2220
  if (s->id != 0) {
2220
2221
  remove_stream(t, s->id, GRPC_ERROR_REF(overall_error));
2221
2222
  } else {
2222
- /* Purge streams waiting on concurrency still waiting for id assignment */
2223
+ // Purge streams waiting on concurrency still waiting for id assignment
2223
2224
  grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
2224
2225
  }
2225
2226
  if (overall_error != GRPC_ERROR_NONE) {
@@ -2243,7 +2244,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2243
2244
  }
2244
2245
 
2245
2246
  static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2246
- grpc_error* error) {
2247
+ grpc_error_handle error) {
2247
2248
  grpc_slice hdr;
2248
2249
  grpc_slice status_hdr;
2249
2250
  grpc_slice http_status_hdr;
@@ -2252,18 +2253,18 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2252
2253
  uint8_t* p;
2253
2254
  uint32_t len = 0;
2254
2255
  grpc_status_code grpc_status;
2255
- grpc_slice slice;
2256
- grpc_error_get_status(error, s->deadline, &grpc_status, &slice, nullptr,
2256
+ std::string message;
2257
+ grpc_error_get_status(error, s->deadline, &grpc_status, &message, nullptr,
2257
2258
  nullptr);
2258
2259
 
2259
2260
  GPR_ASSERT(grpc_status >= 0 && (int)grpc_status < 100);
2260
2261
 
2261
- /* Hand roll a header block.
2262
- This is unnecessarily ugly - at some point we should find a more
2263
- elegant solution.
2264
- It's complicated by the fact that our send machinery would be dead by
2265
- the time we got around to sending this, so instead we ignore HPACK
2266
- compression and just write the uncompressed bytes onto the wire. */
2262
+ // Hand roll a header block.
2263
+ // This is unnecessarily ugly - at some point we should find a more
2264
+ // elegant solution.
2265
+ // It's complicated by the fact that our send machinery would be dead by
2266
+ // the time we got around to sending this, so instead we ignore HPACK
2267
+ // compression and just write the uncompressed bytes onto the wire.
2267
2268
  if (!s->sent_initial_metadata) {
2268
2269
  http_status_hdr = GRPC_SLICE_MALLOC(13);
2269
2270
  p = GRPC_SLICE_START_PTR(http_status_hdr);
@@ -2346,10 +2347,10 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2346
2347
  GPR_ASSERT(p == GRPC_SLICE_END_PTR(status_hdr));
2347
2348
  len += static_cast<uint32_t> GRPC_SLICE_LENGTH(status_hdr);
2348
2349
 
2349
- size_t msg_len = GRPC_SLICE_LENGTH(slice);
2350
+ size_t msg_len = message.length();
2350
2351
  GPR_ASSERT(msg_len <= UINT32_MAX);
2351
- uint32_t msg_len_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)msg_len, 1);
2352
- message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_len);
2352
+ grpc_core::VarintWriter<1> msg_len_writer(msg_len);
2353
+ message_pfx = GRPC_SLICE_MALLOC(14 + msg_len_writer.length());
2353
2354
  p = GRPC_SLICE_START_PTR(message_pfx);
2354
2355
  *p++ = 0x00; /* literal header, not indexed */
2355
2356
  *p++ = 12; /* len(grpc-message) */
@@ -2365,8 +2366,8 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2365
2366
  *p++ = 'a';
2366
2367
  *p++ = 'g';
2367
2368
  *p++ = 'e';
2368
- GRPC_CHTTP2_WRITE_VARINT((uint32_t)msg_len, 1, 0, p, (uint32_t)msg_len_len);
2369
- p += msg_len_len;
2369
+ msg_len_writer.Write(0, p);
2370
+ p += msg_len_writer.length();
2370
2371
  GPR_ASSERT(p == GRPC_SLICE_END_PTR(message_pfx));
2371
2372
  len += static_cast<uint32_t> GRPC_SLICE_LENGTH(message_pfx);
2372
2373
  len += static_cast<uint32_t>(msg_len);
@@ -2391,7 +2392,9 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2391
2392
  }
2392
2393
  grpc_slice_buffer_add(&t->qbuf, status_hdr);
2393
2394
  grpc_slice_buffer_add(&t->qbuf, message_pfx);
2394
- grpc_slice_buffer_add(&t->qbuf, grpc_slice_ref_internal(slice));
2395
+ grpc_slice_buffer_add(&t->qbuf,
2396
+ grpc_slice_from_cpp_string(std::move(message)));
2397
+ grpc_chttp2_reset_ping_clock(t);
2395
2398
  grpc_chttp2_add_rst_stream_to_next_write(t, s->id, GRPC_HTTP2_NO_ERROR,
2396
2399
  &s->stats.outgoing);
2397
2400
 
@@ -2399,10 +2402,10 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2399
2402
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API);
2400
2403
  }
2401
2404
 
2402
- typedef struct {
2403
- grpc_error* error;
2405
+ struct cancel_stream_cb_args {
2406
+ grpc_error_handle error;
2404
2407
  grpc_chttp2_transport* t;
2405
- } cancel_stream_cb_args;
2408
+ };
2406
2409
 
2407
2410
  static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
2408
2411
  cancel_stream_cb_args* args = static_cast<cancel_stream_cb_args*>(user_data);
@@ -2410,7 +2413,8 @@ static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
2410
2413
  grpc_chttp2_cancel_stream(args->t, s, GRPC_ERROR_REF(args->error));
2411
2414
  }
2412
2415
 
2413
- static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error) {
2416
+ static void end_all_the_calls(grpc_chttp2_transport* t,
2417
+ grpc_error_handle error) {
2414
2418
  intptr_t http2_error;
2415
2419
  // If there is no explicit grpc or HTTP/2 error, set to UNAVAILABLE on server.
2416
2420
  if (!t->is_client && !grpc_error_has_clear_grpc_status(error) &&
@@ -2423,9 +2427,9 @@ static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error) {
2423
2427
  GRPC_ERROR_UNREF(error);
2424
2428
  }
2425
2429
 
2426
- /*******************************************************************************
2427
- * INPUT PROCESSING - PARSING
2428
- */
2430
+ //
2431
+ // INPUT PROCESSING - PARSING
2432
+ //
2429
2433
 
2430
2434
  template <class F>
2431
2435
  static void WithUrgency(grpc_chttp2_transport* t,
@@ -2436,7 +2440,7 @@ static void WithUrgency(grpc_chttp2_transport* t,
2436
2440
  break;
2437
2441
  case grpc_core::chttp2::FlowControlAction::Urgency::UPDATE_IMMEDIATELY:
2438
2442
  grpc_chttp2_initiate_write(t, reason);
2439
- // fallthrough
2443
+ ABSL_FALLTHROUGH_INTENDED;
2440
2444
  case grpc_core::chttp2::FlowControlAction::Urgency::QUEUE_UPDATE:
2441
2445
  action();
2442
2446
  break;
@@ -2464,15 +2468,15 @@ void grpc_chttp2_act_on_flowctl_action(
2464
2468
  });
2465
2469
  }
2466
2470
 
2467
- static grpc_error* try_http_parsing(grpc_chttp2_transport* t) {
2471
+ static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
2468
2472
  grpc_http_parser parser;
2469
2473
  size_t i = 0;
2470
- grpc_error* error = GRPC_ERROR_NONE;
2474
+ grpc_error_handle error = GRPC_ERROR_NONE;
2471
2475
  grpc_http_response response;
2472
2476
 
2473
2477
  grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
2474
2478
 
2475
- grpc_error* parse_error = GRPC_ERROR_NONE;
2479
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
2476
2480
  for (; i < t->read_buffer.count && parse_error == GRPC_ERROR_NONE; i++) {
2477
2481
  parse_error =
2478
2482
  grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
@@ -2483,7 +2487,8 @@ static grpc_error* try_http_parsing(grpc_chttp2_transport* t) {
2483
2487
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2484
2488
  "Trying to connect an http1.x server"),
2485
2489
  GRPC_ERROR_INT_HTTP_STATUS, response.status),
2486
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
2490
+ GRPC_ERROR_INT_GRPC_STATUS,
2491
+ grpc_http2_status_to_grpc_status(response.status));
2487
2492
  }
2488
2493
  GRPC_ERROR_UNREF(parse_error);
2489
2494
 
@@ -2492,40 +2497,35 @@ static grpc_error* try_http_parsing(grpc_chttp2_transport* t) {
2492
2497
  return error;
2493
2498
  }
2494
2499
 
2495
- static void read_action(void* tp, grpc_error* error) {
2500
+ static void read_action(void* tp, grpc_error_handle error) {
2496
2501
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2497
2502
  t->combiner->Run(
2498
2503
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
2499
2504
  GRPC_ERROR_REF(error));
2500
2505
  }
2501
2506
 
2502
- static void read_action_locked(void* tp, grpc_error* error) {
2507
+ static void read_action_locked(void* tp, grpc_error_handle error) {
2503
2508
  GPR_TIMER_SCOPE("reading_action_locked", 0);
2504
2509
 
2505
2510
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2506
2511
 
2507
- GRPC_ERROR_REF(error);
2512
+ (void)GRPC_ERROR_REF(error);
2508
2513
 
2509
- grpc_error* err = error;
2514
+ grpc_error_handle err = error;
2510
2515
  if (err != GRPC_ERROR_NONE) {
2511
2516
  err = grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2512
2517
  "Endpoint read failed", &err, 1),
2513
2518
  GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
2514
2519
  t->write_state);
2515
2520
  }
2516
- GPR_SWAP(grpc_error*, err, error);
2521
+ std::swap(err, error);
2517
2522
  GRPC_ERROR_UNREF(err);
2518
2523
  if (t->closed_with_error == GRPC_ERROR_NONE) {
2519
2524
  GPR_TIMER_SCOPE("reading_action.parse", 0);
2520
2525
  size_t i = 0;
2521
- grpc_error* errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2522
- GRPC_ERROR_NONE};
2526
+ grpc_error_handle errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2527
+ GRPC_ERROR_NONE};
2523
2528
  for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
2524
- grpc_core::BdpEstimator* bdp_est = t->flow_control->bdp_estimator();
2525
- if (bdp_est) {
2526
- bdp_est->AddIncomingBytes(
2527
- static_cast<int64_t> GRPC_SLICE_LENGTH(t->read_buffer.slices[i]));
2528
- }
2529
2529
  errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
2530
2530
  }
2531
2531
  if (errors[1] != GRPC_ERROR_NONE) {
@@ -2559,8 +2559,8 @@ static void read_action_locked(void* tp, grpc_error* error) {
2559
2559
  "Transport closed", &t->closed_with_error, 1);
2560
2560
  }
2561
2561
  if (error != GRPC_ERROR_NONE) {
2562
- /* If a goaway frame was received, this might be the reason why the read
2563
- * failed. Add this info to the error */
2562
+ // If a goaway frame was received, this might be the reason why the read
2563
+ // failed. Add this info to the error
2564
2564
  if (t->goaway_error != GRPC_ERROR_NONE) {
2565
2565
  error = grpc_error_add_child(error, GRPC_ERROR_REF(t->goaway_error));
2566
2566
  }
@@ -2569,7 +2569,7 @@ static void read_action_locked(void* tp, grpc_error* error) {
2569
2569
  t->endpoint_reading = 0;
2570
2570
  } else if (t->closed_with_error == GRPC_ERROR_NONE) {
2571
2571
  keep_reading = true;
2572
- /* Since we have read a byte, reset the keepalive timer */
2572
+ // Since we have read a byte, reset the keepalive timer
2573
2573
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2574
2574
  grpc_timer_cancel(&t->keepalive_ping_timer);
2575
2575
  }
@@ -2604,7 +2604,7 @@ static void continue_read_action_locked(grpc_chttp2_transport* t) {
2604
2604
 
2605
2605
  // t is reffed prior to calling the first time, and once the callback chain
2606
2606
  // that kicks off finishes, it's unreffed
2607
- static void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2607
+ void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2608
2608
  t->flow_control->bdp_estimator()->SchedulePing();
2609
2609
  send_ping_locked(
2610
2610
  t,
@@ -2612,25 +2612,26 @@ static void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2612
2612
  grpc_schedule_on_exec_ctx),
2613
2613
  GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked, finish_bdp_ping, t,
2614
2614
  grpc_schedule_on_exec_ctx));
2615
+ grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_BDP_PING);
2615
2616
  }
2616
2617
 
2617
- static void start_bdp_ping(void* tp, grpc_error* error) {
2618
+ static void start_bdp_ping(void* tp, grpc_error_handle error) {
2618
2619
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2619
2620
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked,
2620
2621
  start_bdp_ping_locked, t, nullptr),
2621
2622
  GRPC_ERROR_REF(error));
2622
2623
  }
2623
2624
 
2624
- static void start_bdp_ping_locked(void* tp, grpc_error* error) {
2625
+ static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
2625
2626
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2626
2627
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2627
- gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string,
2628
- grpc_error_string(error));
2628
+ gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
2629
+ grpc_error_std_string(error).c_str());
2629
2630
  }
2630
2631
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2631
2632
  return;
2632
2633
  }
2633
- /* Reset the keepalive ping timer */
2634
+ // Reset the keepalive ping timer
2634
2635
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2635
2636
  grpc_timer_cancel(&t->keepalive_ping_timer);
2636
2637
  }
@@ -2638,26 +2639,26 @@ static void start_bdp_ping_locked(void* tp, grpc_error* error) {
2638
2639
  t->bdp_ping_started = true;
2639
2640
  }
2640
2641
 
2641
- static void finish_bdp_ping(void* tp, grpc_error* error) {
2642
+ static void finish_bdp_ping(void* tp, grpc_error_handle error) {
2642
2643
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2643
2644
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
2644
2645
  finish_bdp_ping_locked, t, nullptr),
2645
2646
  GRPC_ERROR_REF(error));
2646
2647
  }
2647
2648
 
2648
- static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2649
+ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
2649
2650
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2650
2651
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2651
- gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string,
2652
- grpc_error_string(error));
2652
+ gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
2653
+ grpc_error_std_string(error).c_str());
2653
2654
  }
2654
2655
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2655
2656
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2656
2657
  return;
2657
2658
  }
2658
2659
  if (!t->bdp_ping_started) {
2659
- /* start_bdp_ping_locked has not been run yet. Schedule
2660
- * finish_bdp_ping_locked to be run later. */
2660
+ // start_bdp_ping_locked has not been run yet. Schedule
2661
+ // finish_bdp_ping_locked to be run later.
2661
2662
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
2662
2663
  finish_bdp_ping_locked, t, nullptr),
2663
2664
  GRPC_ERROR_REF(error));
@@ -2675,7 +2676,7 @@ static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2675
2676
  &t->next_bdp_ping_timer_expired_locked);
2676
2677
  }
2677
2678
 
2678
- static void next_bdp_ping_timer_expired(void* tp, grpc_error* error) {
2679
+ static void next_bdp_ping_timer_expired(void* tp, grpc_error_handle error) {
2679
2680
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2680
2681
  t->combiner->Run(
2681
2682
  GRPC_CLOSURE_INIT(&t->next_bdp_ping_timer_expired_locked,
@@ -2683,7 +2684,8 @@ static void next_bdp_ping_timer_expired(void* tp, grpc_error* error) {
2683
2684
  GRPC_ERROR_REF(error));
2684
2685
  }
2685
2686
 
2686
- static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error) {
2687
+ static void next_bdp_ping_timer_expired_locked(void* tp,
2688
+ grpc_error_handle error) {
2687
2689
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2688
2690
  GPR_ASSERT(t->have_next_bdp_ping_timer);
2689
2691
  t->have_next_bdp_ping_timer = false;
@@ -2691,7 +2693,13 @@ static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error) {
2691
2693
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2692
2694
  return;
2693
2695
  }
2694
- schedule_bdp_ping_locked(t);
2696
+ if (t->flow_control->bdp_estimator()->accumulator() == 0) {
2697
+ // Block the bdp ping till we receive more data.
2698
+ t->bdp_ping_blocked = true;
2699
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2700
+ } else {
2701
+ schedule_bdp_ping_locked(t);
2702
+ }
2695
2703
  }
2696
2704
 
2697
2705
  void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
@@ -2740,14 +2748,6 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
2740
2748
  GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
2741
2749
  g_default_max_pings_without_data = grpc_channel_arg_get_integer(
2742
2750
  &args->args[i], {g_default_max_pings_without_data, 0, INT_MAX});
2743
- } else if (0 ==
2744
- strcmp(
2745
- args->args[i].key,
2746
- GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS)) {
2747
- g_default_min_sent_ping_interval_without_data_ms =
2748
- grpc_channel_arg_get_integer(
2749
- &args->args[i],
2750
- {g_default_min_sent_ping_interval_without_data_ms, 0, INT_MAX});
2751
2751
  } else if (0 ==
2752
2752
  strcmp(
2753
2753
  args->args[i].key,
@@ -2761,14 +2761,14 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
2761
2761
  }
2762
2762
  }
2763
2763
 
2764
- static void init_keepalive_ping(void* arg, grpc_error* error) {
2764
+ static void init_keepalive_ping(void* arg, grpc_error_handle error) {
2765
2765
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2766
2766
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked,
2767
2767
  init_keepalive_ping_locked, t, nullptr),
2768
2768
  GRPC_ERROR_REF(error));
2769
2769
  }
2770
2770
 
2771
- static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2771
+ static void init_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2772
2772
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2773
2773
  GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
2774
2774
  if (t->destroying || t->closed_with_error != GRPC_ERROR_NONE) {
@@ -2790,7 +2790,7 @@ static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2790
2790
  &t->init_keepalive_ping_locked);
2791
2791
  }
2792
2792
  } else if (error == GRPC_ERROR_CANCELLED) {
2793
- /* The keepalive ping timer may be cancelled by bdp */
2793
+ // The keepalive ping timer may be cancelled by bdp
2794
2794
  GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
2795
2795
  GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
2796
2796
  grpc_schedule_on_exec_ctx);
@@ -2801,14 +2801,14 @@ static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2801
2801
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
2802
2802
  }
2803
2803
 
2804
- static void start_keepalive_ping(void* arg, grpc_error* error) {
2804
+ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
2805
2805
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2806
2806
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
2807
2807
  start_keepalive_ping_locked, t, nullptr),
2808
2808
  GRPC_ERROR_REF(error));
2809
2809
  }
2810
2810
 
2811
- static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2811
+ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2812
2812
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2813
2813
  if (error != GRPC_ERROR_NONE) {
2814
2814
  return;
@@ -2816,8 +2816,9 @@ static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2816
2816
  if (t->channelz_socket != nullptr) {
2817
2817
  t->channelz_socket->RecordKeepaliveSent();
2818
2818
  }
2819
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2820
- gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string);
2819
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2820
+ GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2821
+ gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string.c_str());
2821
2822
  }
2822
2823
  GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive watchdog");
2823
2824
  GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
@@ -2828,23 +2829,24 @@ static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2828
2829
  t->keepalive_ping_started = true;
2829
2830
  }
2830
2831
 
2831
- static void finish_keepalive_ping(void* arg, grpc_error* error) {
2832
+ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
2832
2833
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2833
2834
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
2834
2835
  finish_keepalive_ping_locked, t, nullptr),
2835
2836
  GRPC_ERROR_REF(error));
2836
2837
  }
2837
2838
 
2838
- static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
2839
+ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2839
2840
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2840
2841
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2841
2842
  if (error == GRPC_ERROR_NONE) {
2842
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2843
- gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string);
2843
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2844
+ GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2845
+ gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
2844
2846
  }
2845
2847
  if (!t->keepalive_ping_started) {
2846
- /* start_keepalive_ping_locked has not run yet. Reschedule
2847
- * finish_keepalive_ping_locked for it to be run later. */
2848
+ // start_keepalive_ping_locked has not run yet. Reschedule
2849
+ // finish_keepalive_ping_locked for it to be run later.
2848
2850
  t->combiner->Run(
2849
2851
  GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
2850
2852
  finish_keepalive_ping_locked, t, nullptr),
@@ -2865,7 +2867,7 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
2865
2867
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive ping end");
2866
2868
  }
2867
2869
 
2868
- static void keepalive_watchdog_fired(void* arg, grpc_error* error) {
2870
+ static void keepalive_watchdog_fired(void* arg, grpc_error_handle error) {
2869
2871
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2870
2872
  t->combiner->Run(
2871
2873
  GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
@@ -2873,12 +2875,13 @@ static void keepalive_watchdog_fired(void* arg, grpc_error* error) {
2873
2875
  GRPC_ERROR_REF(error));
2874
2876
  }
2875
2877
 
2876
- static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2878
+ static void keepalive_watchdog_fired_locked(void* arg,
2879
+ grpc_error_handle error) {
2877
2880
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2878
2881
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2879
2882
  if (error == GRPC_ERROR_NONE) {
2880
- gpr_log(GPR_ERROR, "%s: Keepalive watchdog fired. Closing transport.",
2881
- t->peer_string);
2883
+ gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
2884
+ t->peer_string.c_str());
2882
2885
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2883
2886
  close_transport_locked(
2884
2887
  t, grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -2887,8 +2890,8 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2887
2890
  GRPC_STATUS_UNAVAILABLE));
2888
2891
  }
2889
2892
  } else {
2890
- /* The watchdog timer should have been cancelled by
2891
- * finish_keepalive_ping_locked. */
2893
+ // The watchdog timer should have been cancelled by
2894
+ // finish_keepalive_ping_locked.
2892
2895
  if (GPR_UNLIKELY(error != GRPC_ERROR_CANCELLED)) {
2893
2896
  gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
2894
2897
  t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
@@ -2897,21 +2900,22 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2897
2900
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
2898
2901
  }
2899
2902
 
2900
- /*******************************************************************************
2901
- * CALLBACK LOOP
2902
- */
2903
+ //
2904
+ // CALLBACK LOOP
2905
+ //
2903
2906
 
2904
2907
  static void connectivity_state_set(grpc_chttp2_transport* t,
2905
2908
  grpc_connectivity_state state,
2909
+ const absl::Status& status,
2906
2910
  const char* reason) {
2907
2911
  GRPC_CHTTP2_IF_TRACING(
2908
2912
  gpr_log(GPR_INFO, "transport %p set connectivity_state=%d", t, state));
2909
- t->state_tracker.SetState(state, reason);
2913
+ t->state_tracker.SetState(state, status, reason);
2910
2914
  }
2911
2915
 
2912
- /*******************************************************************************
2913
- * POLLSET STUFF
2914
- */
2916
+ //
2917
+ // POLLSET STUFF
2918
+ //
2915
2919
 
2916
2920
  static void set_pollset(grpc_transport* gt, grpc_stream* /*gs*/,
2917
2921
  grpc_pollset* pollset) {
@@ -2925,11 +2929,11 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
2925
2929
  grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
2926
2930
  }
2927
2931
 
2928
- /*******************************************************************************
2929
- * BYTE STREAM
2930
- */
2932
+ //
2933
+ // BYTE STREAM
2934
+ //
2931
2935
 
2932
- static void reset_byte_stream(void* arg, grpc_error* error) {
2936
+ static void reset_byte_stream(void* arg, grpc_error_handle error) {
2933
2937
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
2934
2938
  s->pending_byte_stream = false;
2935
2939
  if (error == GRPC_ERROR_NONE) {
@@ -2960,8 +2964,8 @@ Chttp2IncomingByteStream::Chttp2IncomingByteStream(
2960
2964
  stream->byte_stream_error = GRPC_ERROR_NONE;
2961
2965
  }
2962
2966
 
2963
- void Chttp2IncomingByteStream::OrphanLocked(void* arg,
2964
- grpc_error* /*error_ignored*/) {
2967
+ void Chttp2IncomingByteStream::OrphanLocked(
2968
+ void* arg, grpc_error_handle /*error_ignored*/) {
2965
2969
  Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
2966
2970
  grpc_chttp2_stream* s = bs->stream_;
2967
2971
  grpc_chttp2_transport* t = s->t;
@@ -2980,7 +2984,7 @@ void Chttp2IncomingByteStream::Orphan() {
2980
2984
  }
2981
2985
 
2982
2986
  void Chttp2IncomingByteStream::NextLocked(void* arg,
2983
- grpc_error* /*error_ignored*/) {
2987
+ grpc_error_handle /*error_ignored*/) {
2984
2988
  Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
2985
2989
  grpc_chttp2_transport* t = bs->transport_;
2986
2990
  grpc_chttp2_stream* s = bs->stream_;
@@ -3015,7 +3019,7 @@ void Chttp2IncomingByteStream::NextLocked(void* arg,
3015
3019
  s->data_parser.parsing_frame = nullptr;
3016
3020
  }
3017
3021
  } else {
3018
- /* Should never reach here. */
3022
+ // Should never reach here.
3019
3023
  GPR_ASSERT(false);
3020
3024
  }
3021
3025
  } else {
@@ -3050,9 +3054,9 @@ void Chttp2IncomingByteStream::MaybeCreateStreamDecompressionCtx() {
3050
3054
  }
3051
3055
  }
3052
3056
 
3053
- grpc_error* Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3057
+ grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3054
3058
  GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
3055
- grpc_error* error;
3059
+ grpc_error_handle error;
3056
3060
  if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
3057
3061
  if (!stream_->unprocessed_incoming_frames_decompressed &&
3058
3062
  stream_->stream_decompression_method !=
@@ -3095,7 +3099,7 @@ grpc_error* Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3095
3099
  return GRPC_ERROR_NONE;
3096
3100
  }
3097
3101
 
3098
- void Chttp2IncomingByteStream::PublishError(grpc_error* error) {
3102
+ void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
3099
3103
  GPR_ASSERT(error != GRPC_ERROR_NONE);
3100
3104
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, stream_->on_next,
3101
3105
  GRPC_ERROR_REF(error));
@@ -3105,10 +3109,10 @@ void Chttp2IncomingByteStream::PublishError(grpc_error* error) {
3105
3109
  grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
3106
3110
  }
3107
3111
 
3108
- grpc_error* Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3109
- grpc_slice* slice_out) {
3112
+ grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3113
+ grpc_slice* slice_out) {
3110
3114
  if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
3111
- grpc_error* error =
3115
+ grpc_error_handle error =
3112
3116
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
3113
3117
  transport_->combiner->Run(&stream_->reset_byte_stream,
3114
3118
  GRPC_ERROR_REF(error));
@@ -3123,8 +3127,8 @@ grpc_error* Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3123
3127
  }
3124
3128
  }
3125
3129
 
3126
- grpc_error* Chttp2IncomingByteStream::Finished(grpc_error* error,
3127
- bool reset_on_error) {
3130
+ grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
3131
+ bool reset_on_error) {
3128
3132
  if (error == GRPC_ERROR_NONE) {
3129
3133
  if (remaining_bytes_ != 0) {
3130
3134
  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
@@ -3138,15 +3142,15 @@ grpc_error* Chttp2IncomingByteStream::Finished(grpc_error* error,
3138
3142
  return error;
3139
3143
  }
3140
3144
 
3141
- void Chttp2IncomingByteStream::Shutdown(grpc_error* error) {
3145
+ void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
3142
3146
  GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
3143
3147
  }
3144
3148
 
3145
3149
  } // namespace grpc_core
3146
3150
 
3147
- /*******************************************************************************
3148
- * RESOURCE QUOTAS
3149
- */
3151
+ //
3152
+ // RESOURCE QUOTAS
3153
+ //
3150
3154
 
3151
3155
  static void post_benign_reclaimer(grpc_chttp2_transport* t) {
3152
3156
  if (!t->benign_reclaimer_registered) {
@@ -3154,8 +3158,8 @@ static void post_benign_reclaimer(grpc_chttp2_transport* t) {
3154
3158
  GRPC_CHTTP2_REF_TRANSPORT(t, "benign_reclaimer");
3155
3159
  GRPC_CLOSURE_INIT(&t->benign_reclaimer_locked, benign_reclaimer, t,
3156
3160
  grpc_schedule_on_exec_ctx);
3157
- grpc_resource_user_post_reclaimer(grpc_endpoint_get_resource_user(t->ep),
3158
- false, &t->benign_reclaimer_locked);
3161
+ grpc_resource_user_post_reclaimer(t->resource_user, false,
3162
+ &t->benign_reclaimer_locked);
3159
3163
  }
3160
3164
  }
3161
3165
 
@@ -3165,27 +3169,27 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
3165
3169
  GRPC_CHTTP2_REF_TRANSPORT(t, "destructive_reclaimer");
3166
3170
  GRPC_CLOSURE_INIT(&t->destructive_reclaimer_locked, destructive_reclaimer,
3167
3171
  t, grpc_schedule_on_exec_ctx);
3168
- grpc_resource_user_post_reclaimer(grpc_endpoint_get_resource_user(t->ep),
3169
- true, &t->destructive_reclaimer_locked);
3172
+ grpc_resource_user_post_reclaimer(t->resource_user, true,
3173
+ &t->destructive_reclaimer_locked);
3170
3174
  }
3171
3175
  }
3172
3176
 
3173
- static void benign_reclaimer(void* arg, grpc_error* error) {
3177
+ static void benign_reclaimer(void* arg, grpc_error_handle error) {
3174
3178
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3175
3179
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->benign_reclaimer_locked,
3176
3180
  benign_reclaimer_locked, t, nullptr),
3177
3181
  GRPC_ERROR_REF(error));
3178
3182
  }
3179
3183
 
3180
- static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3184
+ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3181
3185
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3182
3186
  if (error == GRPC_ERROR_NONE &&
3183
3187
  grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
3184
- /* Channel with no active streams: send a goaway to try and make it
3185
- * disconnect cleanly */
3188
+ // Channel with no active streams: send a goaway to try and make it
3189
+ // disconnect cleanly
3186
3190
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3187
3191
  gpr_log(GPR_INFO, "HTTP2: %s - send goaway to free memory",
3188
- t->peer_string);
3192
+ t->peer_string.c_str());
3189
3193
  }
3190
3194
  send_goaway(t,
3191
3195
  grpc_error_set_int(
@@ -3196,24 +3200,24 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3196
3200
  gpr_log(GPR_INFO,
3197
3201
  "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
3198
3202
  " streams",
3199
- t->peer_string, grpc_chttp2_stream_map_size(&t->stream_map));
3203
+ t->peer_string.c_str(),
3204
+ grpc_chttp2_stream_map_size(&t->stream_map));
3200
3205
  }
3201
3206
  t->benign_reclaimer_registered = false;
3202
3207
  if (error != GRPC_ERROR_CANCELLED) {
3203
- grpc_resource_user_finish_reclamation(
3204
- grpc_endpoint_get_resource_user(t->ep));
3208
+ grpc_resource_user_finish_reclamation(t->resource_user);
3205
3209
  }
3206
3210
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
3207
3211
  }
3208
3212
 
3209
- static void destructive_reclaimer(void* arg, grpc_error* error) {
3213
+ static void destructive_reclaimer(void* arg, grpc_error_handle error) {
3210
3214
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3211
3215
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->destructive_reclaimer_locked,
3212
3216
  destructive_reclaimer_locked, t, nullptr),
3213
3217
  GRPC_ERROR_REF(error));
3214
3218
  }
3215
3219
 
3216
- static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3220
+ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3217
3221
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3218
3222
  size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
3219
3223
  t->destructive_reclaimer_registered = false;
@@ -3221,8 +3225,8 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3221
3225
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
3222
3226
  grpc_chttp2_stream_map_rand(&t->stream_map));
3223
3227
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3224
- gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d", t->peer_string,
3225
- s->id);
3228
+ gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d",
3229
+ t->peer_string.c_str(), s->id);
3226
3230
  }
3227
3231
  grpc_chttp2_cancel_stream(
3228
3232
  t, s,
@@ -3230,23 +3234,22 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3230
3234
  GRPC_ERROR_INT_HTTP2_ERROR,
3231
3235
  GRPC_HTTP2_ENHANCE_YOUR_CALM));
3232
3236
  if (n > 1) {
3233
- /* Since we cancel one stream per destructive reclamation, if
3234
- there are more streams left, we can immediately post a new
3235
- reclaimer in case the resource quota needs to free more
3236
- memory */
3237
+ // Since we cancel one stream per destructive reclamation, if
3238
+ // there are more streams left, we can immediately post a new
3239
+ // reclaimer in case the resource quota needs to free more
3240
+ // memory
3237
3241
  post_destructive_reclaimer(t);
3238
3242
  }
3239
3243
  }
3240
3244
  if (error != GRPC_ERROR_CANCELLED) {
3241
- grpc_resource_user_finish_reclamation(
3242
- grpc_endpoint_get_resource_user(t->ep));
3245
+ grpc_resource_user_finish_reclamation(t->resource_user);
3243
3246
  }
3244
3247
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
3245
3248
  }
3246
3249
 
3247
- /*******************************************************************************
3248
- * MONITORING
3249
- */
3250
+ //
3251
+ // MONITORING
3252
+ //
3250
3253
 
3251
3254
  const char* grpc_chttp2_initiate_write_reason_string(
3252
3255
  grpc_chttp2_initiate_write_reason reason) {
@@ -3283,6 +3286,8 @@ const char* grpc_chttp2_initiate_write_reason_string(
3283
3286
  return "FLOW_CONTROL_UNSTALLED_BY_UPDATE";
3284
3287
  case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
3285
3288
  return "APPLICATION_PING";
3289
+ case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
3290
+ return "BDP_PING";
3286
3291
  case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
3287
3292
  return "KEEPALIVE_PING";
3288
3293
  case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED:
@@ -3329,7 +3334,7 @@ grpc_transport* grpc_create_chttp2_transport(
3329
3334
 
3330
3335
  void grpc_chttp2_transport_start_reading(
3331
3336
  grpc_transport* transport, grpc_slice_buffer* read_buffer,
3332
- grpc_closure* notify_on_receive_settings) {
3337
+ grpc_closure* notify_on_receive_settings, grpc_closure* notify_on_close) {
3333
3338
  grpc_chttp2_transport* t =
3334
3339
  reinterpret_cast<grpc_chttp2_transport*>(transport);
3335
3340
  GRPC_CHTTP2_REF_TRANSPORT(
@@ -3339,6 +3344,7 @@ void grpc_chttp2_transport_start_reading(
3339
3344
  gpr_free(read_buffer);
3340
3345
  }
3341
3346
  t->notify_on_receive_settings = notify_on_receive_settings;
3347
+ t->notify_on_close = notify_on_close;
3342
3348
  t->combiner->Run(
3343
3349
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
3344
3350
  GRPC_ERROR_NONE);