grpc 1.28.0 → 1.37.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 (1541) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1734 -22357
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +31 -9
  6. data/include/grpc/grpc_security.h +274 -180
  7. data/include/grpc/grpc_security_constants.h +4 -0
  8. data/include/grpc/impl/codegen/README.md +22 -0
  9. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  10. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  11. data/include/grpc/impl/codegen/grpc_types.h +32 -30
  12. data/include/grpc/impl/codegen/log.h +0 -2
  13. data/include/grpc/impl/codegen/port_platform.h +36 -90
  14. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  15. data/include/grpc/module.modulemap +24 -39
  16. data/include/grpc/slice_buffer.h +3 -3
  17. data/include/grpc/support/sync.h +3 -3
  18. data/include/grpc/support/time.h +7 -7
  19. data/src/core/ext/filters/client_channel/backend_metric.cc +16 -12
  20. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  21. data/src/core/ext/filters/client_channel/client_channel.cc +3845 -2414
  22. data/src/core/ext/filters/client_channel/client_channel.h +1 -7
  23. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  24. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
  25. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -3
  26. data/src/core/ext/filters/client_channel/config_selector.cc +58 -0
  27. data/src/core/ext/filters/client_channel/config_selector.h +133 -0
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +191 -0
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +26 -122
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +25 -30
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +7 -7
  34. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +15 -16
  35. data/src/core/ext/filters/client_channel/http_proxy.cc +44 -34
  36. data/src/core/ext/filters/client_channel/lb_policy.cc +28 -20
  37. data/src/core/ext/filters/client_channel/lb_policy.h +50 -38
  38. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +96 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +101 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +20 -11
  41. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +481 -510
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +6 -41
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +24 -18
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +922 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +11 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +18 -46
  57. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +744 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +520 -134
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -26
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +795 -0
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1384 -0
  64. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +18 -8
  65. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
  66. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +12 -10
  67. data/src/core/ext/filters/client_channel/resolver.cc +9 -10
  68. data/src/core/ext/filters/client_channel/resolver.h +10 -20
  69. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +111 -110
  70. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +4 -34
  71. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +22 -24
  72. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +15 -13
  73. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +82 -123
  74. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +642 -184
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +10 -3
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  78. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +61 -61
  79. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +102 -108
  80. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -5
  81. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
  82. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +38 -31
  83. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +829 -46
  84. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  85. data/src/core/ext/filters/client_channel/resolver_factory.h +8 -8
  86. data/src/core/ext/filters/client_channel/resolver_registry.cc +55 -52
  87. data/src/core/ext/filters/client_channel/resolver_registry.h +10 -10
  88. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +47 -93
  89. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +30 -26
  90. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  91. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  92. data/src/core/ext/filters/client_channel/server_address.cc +132 -13
  93. data/src/core/ext/filters/client_channel/server_address.h +80 -32
  94. data/src/core/ext/filters/client_channel/service_config.cc +114 -149
  95. data/src/core/ext/filters/client_channel/service_config.h +33 -100
  96. data/src/core/ext/filters/client_channel/service_config_call_data.h +86 -0
  97. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  98. data/src/core/ext/filters/client_channel/service_config_parser.cc +89 -0
  99. data/src/core/ext/filters/client_channel/service_config_parser.h +92 -0
  100. data/src/core/ext/filters/client_channel/subchannel.cc +211 -230
  101. data/src/core/ext/filters/client_channel/subchannel.h +116 -118
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  103. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -10
  105. data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
  106. data/src/core/ext/filters/deadline/deadline_filter.cc +87 -79
  107. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  108. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +495 -0
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
  110. data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
  111. data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
  112. data/src/core/ext/filters/http/client/http_client_filter.cc +29 -34
  113. data/src/core/ext/filters/http/client_authority_filter.cc +10 -10
  114. data/src/core/ext/filters/http/http_filters_plugin.cc +34 -15
  115. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  116. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  117. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  118. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  119. data/src/core/ext/filters/max_age/max_age_filter.cc +38 -34
  120. data/src/core/ext/filters/message_size/message_size_filter.cc +64 -90
  121. data/src/core/ext/filters/message_size/message_size_filter.h +12 -5
  122. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
  123. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  124. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  125. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  126. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +19 -2
  127. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -10
  128. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  129. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +37 -49
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +803 -355
  131. data/src/core/ext/transport/chttp2/server/chttp2_server.h +16 -2
  132. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +13 -3
  133. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +19 -18
  134. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +65 -21
  135. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  136. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  137. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +343 -347
  138. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +13 -1
  139. data/src/core/ext/transport/chttp2/transport/flow_control.cc +36 -33
  140. data/src/core/ext/transport/chttp2/transport/flow_control.h +27 -19
  141. data/src/core/ext/transport/chttp2/transport/frame_data.cc +14 -13
  142. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -7
  143. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  145. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  146. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  147. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  148. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -9
  149. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -4
  150. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +15 -18
  151. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  152. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +30 -17
  153. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +37 -37
  155. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  156. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  157. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  158. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  159. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  160. data/src/core/ext/transport/chttp2/transport/internal.h +38 -23
  161. data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -74
  162. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  163. data/src/core/ext/transport/chttp2/transport/writing.cc +30 -28
  164. data/src/core/ext/transport/inproc/inproc_transport.cc +106 -33
  165. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
  166. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
  167. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -1
  168. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  169. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +10 -4
  170. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +243 -0
  171. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +865 -0
  172. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
  173. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
  174. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  175. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +253 -0
  176. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +453 -0
  177. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1801 -0
  178. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  179. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +77 -0
  180. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +56 -0
  181. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +364 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +428 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +88 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +334 -0
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1066 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +388 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +78 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +149 -0
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +839 -0
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +767 -0
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +88 -0
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +182 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +755 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +27 -0
  203. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +65 -0
  204. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
  205. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +95 -0
  206. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +42 -0
  207. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +126 -0
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +90 -0
  209. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +243 -0
  210. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  211. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +305 -0
  212. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  213. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +367 -0
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +73 -0
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +130 -0
  217. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +557 -0
  218. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +159 -0
  219. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +623 -0
  220. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +40 -0
  221. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +107 -0
  222. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
  223. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
  224. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
  225. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
  226. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
  227. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +662 -0
  228. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +65 -0
  229. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +237 -0
  230. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +941 -0
  231. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3790 -0
  232. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  233. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +159 -0
  234. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +49 -0
  235. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +122 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  237. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  238. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
  239. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
  240. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
  241. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
  242. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
  243. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
  244. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +362 -0
  245. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1488 -0
  246. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +19 -0
  247. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +35 -0
  248. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +113 -0
  249. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +458 -0
  250. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +73 -0
  251. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +219 -0
  252. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +146 -0
  253. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +621 -0
  254. data/src/core/ext/upb-generated/envoy/{api/v2/rds.upb.c → service/cluster/v3/cds.upb.c} +7 -9
  255. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +56 -0
  256. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
  257. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +56 -0
  258. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +146 -0
  259. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +499 -0
  260. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +27 -0
  261. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +56 -0
  262. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +27 -0
  263. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +56 -0
  264. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +54 -0
  265. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +151 -0
  266. data/src/core/ext/upb-generated/envoy/{api/v2/srds.upb.c → service/route/v3/rds.upb.c} +7 -7
  267. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +56 -0
  268. data/src/core/ext/upb-generated/envoy/{api/v2/cds.upb.c → service/route/v3/srds.upb.c} +7 -7
  269. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +56 -0
  270. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
  271. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  273. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +128 -0
  274. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
  275. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
  276. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  277. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +84 -0
  278. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +78 -0
  280. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  281. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +166 -0
  282. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  283. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +146 -0
  284. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
  285. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
  286. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  287. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +207 -0
  288. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  289. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +301 -0
  290. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  291. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +283 -0
  292. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +3 -2
  293. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +9 -9
  294. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  295. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +99 -0
  296. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  297. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +130 -0
  298. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
  299. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +68 -0
  300. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  301. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  302. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +830 -0
  303. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +251 -0
  304. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +871 -0
  305. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  306. data/src/core/ext/upb-generated/google/api/http.upb.h +52 -32
  307. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  308. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -6
  309. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +107 -106
  310. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +691 -496
  311. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  312. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +12 -6
  313. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  314. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +8 -2
  315. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +5 -5
  316. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +55 -57
  317. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  318. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +12 -6
  319. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  320. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +82 -28
  321. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  322. data/src/core/ext/upb-generated/google/rpc/status.upb.h +17 -10
  323. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +5 -5
  324. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +40 -45
  325. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +43 -43
  326. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +236 -184
  327. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  328. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +29 -13
  329. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  330. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +19 -7
  331. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  332. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +122 -62
  333. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +30 -12
  335. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  336. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +64 -0
  337. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -1
  338. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  339. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +71 -0
  340. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  341. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +60 -0
  342. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +9 -9
  343. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +48 -68
  344. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
  345. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
  346. data/src/core/ext/upb-generated/validate/validate.upb.c +71 -70
  347. data/src/core/ext/upb-generated/validate/validate.upb.h +732 -586
  348. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  349. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  350. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  351. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  352. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  353. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  360. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
  361. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  362. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  363. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  364. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  365. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  366. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +251 -0
  367. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  368. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
  369. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
  370. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  371. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  372. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +543 -0
  373. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  374. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  375. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  376. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  377. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  378. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  382. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +272 -0
  383. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +135 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  385. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  386. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  388. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  389. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  390. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  392. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  396. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +231 -0
  397. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +85 -0
  398. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  399. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  400. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  402. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +68 -0
  403. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  404. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  405. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  406. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  407. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  408. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  409. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  410. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  411. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  412. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +195 -0
  413. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  414. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +193 -0
  415. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  416. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +59 -0
  417. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  418. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
  419. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  420. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
  421. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
  422. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +101 -0
  423. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  424. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +944 -0
  425. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +290 -0
  426. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  427. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  428. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  429. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  430. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  431. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  432. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
  433. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  434. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
  435. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  436. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
  437. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  438. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +505 -0
  439. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  440. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  441. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  442. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +170 -0
  443. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  444. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  445. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  446. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
  447. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  448. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  449. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  450. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  451. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  452. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  453. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  454. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  455. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  456. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  457. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  458. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  459. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  460. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  461. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  462. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  463. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  464. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
  465. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
  466. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  467. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  468. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
  469. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  470. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  471. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  472. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  473. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  474. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  475. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  476. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  477. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  478. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
  479. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  480. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  481. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  482. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  483. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  484. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  485. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  486. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  487. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -10
  488. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  489. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  490. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  491. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  492. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  493. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  494. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  495. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  496. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  497. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  498. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  499. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  500. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  501. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  502. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  503. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  504. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  505. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  506. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  507. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  508. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  509. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  510. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  511. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  512. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  513. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  514. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  515. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  516. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  517. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  518. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  519. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  520. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  521. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  522. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  523. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  524. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
  525. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
  526. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +310 -0
  527. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  528. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  529. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  530. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  531. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  532. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  533. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  534. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  535. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  536. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  537. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  538. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  539. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  540. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  541. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  542. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  543. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  544. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  545. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  546. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  547. data/src/core/ext/xds/xds_api.cc +3791 -0
  548. data/src/core/ext/xds/xds_api.h +671 -0
  549. data/src/core/ext/xds/xds_bootstrap.cc +555 -0
  550. data/src/core/ext/xds/xds_bootstrap.h +120 -0
  551. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  552. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  553. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
  554. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +983 -773
  555. data/src/core/ext/xds/xds_client.h +365 -0
  556. data/src/core/ext/xds/xds_client_stats.cc +159 -0
  557. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +80 -40
  558. data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
  559. data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
  560. data/src/core/ext/xds/xds_http_filters.cc +114 -0
  561. data/src/core/ext/xds/xds_http_filters.h +130 -0
  562. data/src/core/ext/xds/xds_server_config_fetcher.cc +532 -0
  563. data/src/core/lib/channel/channel_args.cc +24 -22
  564. data/src/core/lib/channel/channel_args.h +3 -2
  565. data/src/core/lib/channel/channel_stack.cc +12 -0
  566. data/src/core/lib/channel/channel_stack.h +27 -13
  567. data/src/core/lib/channel/channel_trace.cc +6 -8
  568. data/src/core/lib/channel/channel_trace.h +1 -1
  569. data/src/core/lib/channel/channelz.cc +137 -97
  570. data/src/core/lib/channel/channelz.h +47 -26
  571. data/src/core/lib/channel/channelz_registry.cc +34 -15
  572. data/src/core/lib/channel/channelz_registry.h +3 -1
  573. data/src/core/lib/channel/connected_channel.cc +7 -5
  574. data/src/core/lib/channel/context.h +1 -1
  575. data/src/core/lib/channel/handshaker.cc +15 -59
  576. data/src/core/lib/channel/handshaker.h +7 -22
  577. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  578. data/src/core/lib/channel/status_util.cc +14 -5
  579. data/src/core/lib/channel/status_util.h +5 -0
  580. data/src/core/lib/compression/compression.cc +8 -4
  581. data/src/core/lib/compression/compression_args.cc +3 -2
  582. data/src/core/lib/compression/compression_internal.cc +10 -5
  583. data/src/core/lib/compression/compression_internal.h +2 -1
  584. data/src/core/lib/compression/message_compress.cc +5 -1
  585. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  586. data/src/core/lib/debug/stats.cc +21 -27
  587. data/src/core/lib/debug/stats.h +5 -3
  588. data/src/core/lib/debug/stats_data.cc +1 -0
  589. data/src/core/lib/debug/stats_data.h +13 -13
  590. data/src/core/lib/gpr/alloc.cc +3 -2
  591. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  592. data/src/core/lib/gpr/log.cc +59 -17
  593. data/src/core/lib/gpr/log_linux.cc +23 -9
  594. data/src/core/lib/gpr/log_posix.cc +19 -7
  595. data/src/core/lib/gpr/log_windows.cc +18 -4
  596. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  597. data/src/core/lib/gpr/spinlock.h +12 -5
  598. data/src/core/lib/gpr/string.cc +33 -55
  599. data/src/core/lib/gpr/string.h +9 -24
  600. data/src/core/lib/gpr/sync.cc +4 -4
  601. data/src/core/lib/gpr/sync_abseil.cc +5 -6
  602. data/src/core/lib/gpr/sync_posix.cc +2 -8
  603. data/src/core/lib/gpr/sync_windows.cc +2 -2
  604. data/src/core/lib/gpr/time.cc +16 -12
  605. data/src/core/lib/gpr/time_posix.cc +1 -1
  606. data/src/core/lib/gpr/time_precise.cc +5 -2
  607. data/src/core/lib/gpr/time_precise.h +6 -2
  608. data/src/core/lib/gpr/tls.h +4 -0
  609. data/src/core/lib/gpr/tls_msvc.h +2 -0
  610. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  611. data/src/core/lib/gpr/useful.h +5 -4
  612. data/src/core/lib/gprpp/arena.h +3 -2
  613. data/src/core/lib/gprpp/atomic.h +9 -9
  614. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  615. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  616. data/src/core/lib/gprpp/examine_stack.h +46 -0
  617. data/src/core/lib/gprpp/fork.cc +3 -3
  618. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  619. data/src/core/lib/gprpp/host_port.cc +29 -35
  620. data/src/core/lib/gprpp/host_port.h +14 -17
  621. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  622. data/src/core/lib/gprpp/mpscq.cc +2 -2
  623. data/src/core/lib/gprpp/orphanable.h +4 -8
  624. data/src/core/lib/gprpp/ref_counted.h +91 -68
  625. data/src/core/lib/gprpp/ref_counted_ptr.h +173 -7
  626. data/src/core/lib/gprpp/stat.h +38 -0
  627. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  628. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  629. data/src/core/lib/gprpp/sync.h +129 -40
  630. data/src/core/lib/gprpp/thd.h +3 -3
  631. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  632. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  633. data/src/core/lib/gprpp/time_util.cc +77 -0
  634. data/src/core/lib/gprpp/time_util.h +42 -0
  635. data/src/core/lib/http/format_request.cc +46 -65
  636. data/src/core/lib/http/httpcli.cc +16 -14
  637. data/src/core/lib/http/httpcli.h +4 -6
  638. data/src/core/lib/http/httpcli_security_connector.cc +13 -13
  639. data/src/core/lib/http/parser.cc +47 -27
  640. data/src/core/lib/http/parser.h +2 -3
  641. data/src/core/lib/iomgr/buffer_list.h +23 -22
  642. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  643. data/src/core/lib/iomgr/call_combiner.h +3 -2
  644. data/src/core/lib/iomgr/cfstream_handle.cc +6 -4
  645. data/src/core/lib/iomgr/closure.h +2 -3
  646. data/src/core/lib/iomgr/combiner.cc +2 -1
  647. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  648. data/src/core/lib/iomgr/endpoint.cc +5 -1
  649. data/src/core/lib/iomgr/endpoint.h +8 -4
  650. data/src/core/lib/iomgr/endpoint_cfstream.cc +38 -14
  651. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  652. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  653. data/src/core/lib/iomgr/error.cc +23 -21
  654. data/src/core/lib/iomgr/error.h +1 -2
  655. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  656. data/src/core/lib/iomgr/error_internal.h +1 -1
  657. data/src/core/lib/iomgr/ev_apple.cc +359 -0
  658. data/src/core/lib/iomgr/ev_apple.h +43 -0
  659. data/src/core/lib/iomgr/ev_epoll1_linux.cc +46 -43
  660. data/src/core/lib/iomgr/ev_epollex_linux.cc +46 -45
  661. data/src/core/lib/iomgr/ev_poll_posix.cc +18 -15
  662. data/src/core/lib/iomgr/ev_posix.cc +5 -6
  663. data/src/core/lib/iomgr/exec_ctx.cc +7 -3
  664. data/src/core/lib/iomgr/exec_ctx.h +26 -10
  665. data/src/core/lib/iomgr/executor.cc +2 -1
  666. data/src/core/lib/iomgr/executor.h +1 -1
  667. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  668. data/src/core/lib/iomgr/executor/threadpool.h +4 -4
  669. data/src/core/lib/iomgr/iomgr.cc +1 -1
  670. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  671. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -21
  672. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  673. data/src/core/lib/iomgr/load_file.h +1 -1
  674. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  675. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  676. data/src/core/lib/iomgr/parse_address.cc +322 -0
  677. data/src/core/lib/iomgr/parse_address.h +77 -0
  678. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  679. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  680. data/src/core/lib/iomgr/pollset_set_custom.cc +11 -11
  681. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  682. data/src/core/lib/iomgr/port.h +2 -21
  683. data/src/core/lib/iomgr/python_util.h +46 -0
  684. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  685. data/src/core/lib/iomgr/resolve_address.h +4 -6
  686. data/src/core/lib/iomgr/resolve_address_custom.cc +42 -57
  687. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  688. data/src/core/lib/iomgr/resolve_address_posix.cc +11 -16
  689. data/src/core/lib/iomgr/resolve_address_windows.cc +16 -25
  690. data/src/core/lib/iomgr/resource_quota.cc +39 -38
  691. data/src/core/lib/iomgr/sockaddr_utils.cc +161 -44
  692. data/src/core/lib/iomgr/sockaddr_utils.h +40 -19
  693. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  694. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  695. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  696. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  697. data/src/core/lib/iomgr/socket_utils_common_posix.cc +103 -81
  698. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  699. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  700. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  701. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -18
  702. data/src/core/lib/iomgr/tcp_client_custom.cc +13 -15
  703. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -37
  704. data/src/core/lib/iomgr/tcp_client_windows.cc +10 -11
  705. data/src/core/lib/iomgr/tcp_custom.cc +56 -36
  706. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  707. data/src/core/lib/iomgr/tcp_posix.cc +48 -29
  708. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  709. data/src/core/lib/iomgr/tcp_server.h +7 -5
  710. data/src/core/lib/iomgr/tcp_server_custom.cc +39 -45
  711. data/src/core/lib/iomgr/tcp_server_posix.cc +38 -44
  712. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  713. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -8
  714. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  715. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  716. data/src/core/lib/iomgr/tcp_uv.cc +5 -4
  717. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  718. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  719. data/src/core/lib/iomgr/timer_custom.cc +5 -5
  720. data/src/core/lib/iomgr/timer_generic.cc +20 -20
  721. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  722. data/src/core/lib/iomgr/timer_heap.h +2 -3
  723. data/src/core/lib/iomgr/timer_manager.cc +3 -3
  724. data/src/core/lib/iomgr/udp_server.cc +33 -38
  725. data/src/core/lib/iomgr/udp_server.h +6 -4
  726. data/src/core/lib/iomgr/unix_sockets_posix.cc +36 -30
  727. data/src/core/lib/iomgr/unix_sockets_posix.h +8 -1
  728. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +12 -2
  729. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  730. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  731. data/src/core/lib/json/json.h +15 -4
  732. data/src/core/lib/json/json_reader.cc +33 -30
  733. data/src/core/lib/json/json_util.cc +58 -0
  734. data/src/core/lib/json/json_util.h +204 -0
  735. data/src/core/lib/json/json_writer.cc +15 -13
  736. data/src/core/lib/matchers/matchers.cc +339 -0
  737. data/src/core/lib/matchers/matchers.h +160 -0
  738. data/src/core/lib/security/context/security_context.cc +4 -3
  739. data/src/core/lib/security/context/security_context.h +3 -1
  740. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  741. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  742. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  743. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  744. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  745. data/src/core/lib/security/credentials/credentials.cc +7 -91
  746. data/src/core/lib/security/credentials/credentials.h +18 -66
  747. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  748. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  749. data/src/core/lib/security/credentials/external/aws_request_signer.cc +213 -0
  750. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  751. data/src/core/lib/security/credentials/external/external_account_credentials.cc +497 -0
  752. data/src/core/lib/security/credentials/external/external_account_credentials.h +120 -0
  753. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
  754. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +48 -0
  755. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  756. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +58 -0
  757. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -2
  758. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  759. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  760. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +90 -67
  761. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  762. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  763. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  764. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -4
  765. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  766. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  767. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +13 -0
  768. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +13 -19
  769. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  770. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  771. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  772. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +109 -97
  773. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -7
  774. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +20 -7
  775. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  776. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +27 -6
  777. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  778. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +346 -0
  779. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +213 -0
  780. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +399 -0
  781. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +138 -0
  782. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +78 -140
  783. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +74 -167
  784. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  785. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  786. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  787. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  788. data/src/core/lib/security/credentials/xds/xds_credentials.cc +244 -0
  789. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  790. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -7
  791. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +27 -32
  792. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  793. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +87 -0
  794. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  795. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  796. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  797. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  798. data/src/core/lib/security/security_connector/security_connector.cc +6 -3
  799. data/src/core/lib/security/security_connector/security_connector.h +6 -4
  800. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +42 -40
  801. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  802. data/src/core/lib/security/security_connector/ssl_utils.cc +100 -27
  803. data/src/core/lib/security/security_connector/ssl_utils.h +37 -31
  804. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +394 -284
  805. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +108 -42
  806. data/src/core/lib/security/transport/auth_filters.h +0 -5
  807. data/src/core/lib/security/transport/client_auth_filter.cc +11 -11
  808. data/src/core/lib/security/transport/secure_endpoint.cc +9 -3
  809. data/src/core/lib/security/transport/security_handshaker.cc +36 -8
  810. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  811. data/src/core/lib/security/util/json_util.cc +12 -13
  812. data/src/core/lib/security/util/json_util.h +1 -0
  813. data/src/core/lib/slice/slice.cc +45 -5
  814. data/src/core/lib/slice/slice_buffer.cc +2 -1
  815. data/src/core/lib/slice/slice_intern.cc +13 -16
  816. data/src/core/lib/slice/slice_internal.h +17 -2
  817. data/src/core/lib/slice/slice_utils.h +9 -0
  818. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  819. data/src/core/lib/surface/call.cc +95 -88
  820. data/src/core/lib/surface/call.h +2 -1
  821. data/src/core/lib/surface/call_details.cc +8 -8
  822. data/src/core/lib/surface/call_log_batch.cc +50 -58
  823. data/src/core/lib/surface/channel.cc +86 -72
  824. data/src/core/lib/surface/channel.h +54 -7
  825. data/src/core/lib/surface/channel_init.cc +1 -1
  826. data/src/core/lib/surface/channel_ping.cc +2 -3
  827. data/src/core/lib/surface/completion_queue.cc +64 -63
  828. data/src/core/lib/surface/completion_queue.h +16 -16
  829. data/src/core/lib/surface/event_string.cc +18 -25
  830. data/src/core/lib/surface/event_string.h +3 -1
  831. data/src/core/lib/surface/init.cc +45 -29
  832. data/src/core/lib/surface/init_secure.cc +1 -4
  833. data/src/core/lib/surface/lame_client.cc +47 -54
  834. data/src/core/lib/surface/lame_client.h +5 -0
  835. data/src/core/lib/surface/server.cc +1309 -1300
  836. data/src/core/lib/surface/server.h +469 -45
  837. data/src/core/lib/surface/validate_metadata.h +3 -0
  838. data/src/core/lib/surface/version.cc +2 -2
  839. data/src/core/lib/transport/authority_override.cc +40 -0
  840. data/src/core/lib/transport/authority_override.h +37 -0
  841. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  842. data/src/core/lib/transport/bdp_estimator.h +2 -1
  843. data/src/core/lib/transport/byte_stream.h +10 -5
  844. data/src/core/lib/transport/connectivity_state.cc +23 -17
  845. data/src/core/lib/transport/connectivity_state.h +31 -15
  846. data/src/core/lib/transport/error_utils.cc +13 -0
  847. data/src/core/lib/transport/error_utils.h +7 -1
  848. data/src/core/lib/transport/metadata.cc +19 -5
  849. data/src/core/lib/transport/metadata.h +2 -2
  850. data/src/core/lib/transport/metadata_batch.cc +27 -0
  851. data/src/core/lib/transport/metadata_batch.h +20 -7
  852. data/src/core/lib/transport/static_metadata.cc +296 -277
  853. data/src/core/lib/transport/static_metadata.h +81 -74
  854. data/src/core/lib/transport/status_conversion.cc +6 -14
  855. data/src/core/lib/transport/status_metadata.cc +4 -3
  856. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  857. data/src/core/lib/transport/transport.cc +7 -6
  858. data/src/core/lib/transport/transport.h +24 -10
  859. data/src/core/lib/transport/transport_op_string.cc +61 -102
  860. data/src/core/lib/uri/uri_parser.cc +135 -258
  861. data/src/core/lib/uri/uri_parser.h +60 -23
  862. data/src/core/plugin_registry/grpc_plugin_registry.cc +65 -12
  863. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  864. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  865. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  866. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +49 -38
  867. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  868. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +98 -48
  869. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  870. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +3 -3
  871. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  872. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  873. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  874. data/src/core/tsi/fake_transport_security.cc +27 -20
  875. data/src/core/tsi/local_transport_security.cc +5 -1
  876. data/src/core/tsi/local_transport_security.h +6 -7
  877. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  878. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  879. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  880. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -4
  881. data/src/core/tsi/ssl_transport_security.cc +226 -105
  882. data/src/core/tsi/ssl_transport_security.h +28 -16
  883. data/src/core/tsi/ssl_types.h +0 -2
  884. data/src/core/tsi/transport_security.cc +10 -8
  885. data/src/core/tsi/transport_security.h +6 -9
  886. data/src/core/tsi/transport_security_grpc.h +2 -3
  887. data/src/core/tsi/transport_security_interface.h +9 -4
  888. data/src/ruby/bin/math_services_pb.rb +4 -4
  889. data/src/ruby/ext/grpc/extconf.rb +15 -4
  890. data/src/ruby/ext/grpc/rb_call.c +12 -3
  891. data/src/ruby/ext/grpc/rb_call.h +4 -0
  892. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  893. data/src/ruby/ext/grpc/rb_channel.c +10 -1
  894. data/src/ruby/ext/grpc/rb_channel_credentials.c +20 -1
  895. data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
  896. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  897. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  898. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  899. data/src/ruby/ext/grpc/rb_grpc.c +4 -0
  900. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +44 -18
  901. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +83 -44
  902. data/src/ruby/ext/grpc/rb_server.c +13 -1
  903. data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
  904. data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
  905. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
  906. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
  907. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  908. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
  909. data/src/ruby/lib/grpc/errors.rb +103 -42
  910. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  911. data/src/ruby/lib/grpc/generic/client_stub.rb +5 -3
  912. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  913. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  914. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  915. data/src/ruby/lib/grpc/structs.rb +1 -1
  916. data/src/ruby/lib/grpc/version.rb +1 -1
  917. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  918. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  919. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +51 -0
  920. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +61 -11
  921. data/src/ruby/spec/call_spec.rb +1 -1
  922. data/src/ruby/spec/channel_credentials_spec.rb +42 -0
  923. data/src/ruby/spec/channel_spec.rb +17 -6
  924. data/src/ruby/spec/client_auth_spec.rb +27 -1
  925. data/src/ruby/spec/debug_message_spec.rb +134 -0
  926. data/src/ruby/spec/errors_spec.rb +1 -1
  927. data/src/ruby/spec/generic/active_call_spec.rb +21 -10
  928. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  929. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  930. data/src/ruby/spec/generic/service_spec.rb +2 -0
  931. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  932. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +7 -0
  933. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  934. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  935. data/src/ruby/spec/pb/codegen/package_option_spec.rb +29 -7
  936. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  937. data/src/ruby/spec/server_spec.rb +22 -0
  938. data/src/ruby/spec/support/services.rb +10 -4
  939. data/src/ruby/spec/testdata/ca.pem +18 -13
  940. data/src/ruby/spec/testdata/client.key +26 -14
  941. data/src/ruby/spec/testdata/client.pem +18 -12
  942. data/src/ruby/spec/testdata/server1.key +26 -14
  943. data/src/ruby/spec/testdata/server1.pem +20 -14
  944. data/src/ruby/spec/user_agent_spec.rb +74 -0
  945. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  946. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  947. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  948. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  949. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  950. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  951. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  952. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +166 -0
  953. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  954. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  955. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  956. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  957. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  958. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  959. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  960. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  961. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  962. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  963. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  964. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  965. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  966. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  967. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  968. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  969. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  970. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  971. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  972. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  973. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  974. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  975. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  976. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  977. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  978. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  979. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  980. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  981. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  982. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  983. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  984. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +270 -0
  985. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +321 -0
  986. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  987. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  988. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  989. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  990. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  991. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  992. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  993. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  994. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1945 -0
  995. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  996. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  997. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  998. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +196 -0
  999. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  1000. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +89 -0
  1001. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  1002. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  1003. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  1004. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  1005. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  1006. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +149 -0
  1007. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  1008. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  1009. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  1010. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  1011. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  1012. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  1013. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1014. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  1015. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  1016. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  1017. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  1018. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  1019. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1020. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  1021. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  1022. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  1023. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  1024. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  1025. data/third_party/abseil-cpp/absl/hash/internal/hash.h +996 -0
  1026. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  1027. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  1028. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  1029. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  1030. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  1031. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  1032. data/third_party/abseil-cpp/absl/status/status.cc +445 -0
  1033. data/third_party/abseil-cpp/absl/status/status.h +817 -0
  1034. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  1035. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  1036. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  1037. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  1038. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  1039. data/third_party/abseil-cpp/absl/strings/cord.cc +1998 -0
  1040. data/third_party/abseil-cpp/absl/strings/cord.h +1276 -0
  1041. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  1042. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  1043. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1044. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  1045. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1046. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +173 -0
  1047. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  1048. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  1049. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  1050. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  1051. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  1052. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  1053. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  1054. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  1055. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  1056. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  1057. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  1058. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  1059. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  1060. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1061. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  1062. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  1063. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  1064. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  1065. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  1066. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  1067. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  1068. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  1069. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  1070. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  1071. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  1072. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  1073. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  1074. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +698 -0
  1075. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  1076. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  1077. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +249 -0
  1078. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  1079. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  1080. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +492 -0
  1081. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  1082. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2739 -0
  1083. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1065 -0
  1084. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  1085. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  1086. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  1087. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  1088. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  1089. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  1090. data/third_party/abseil-cpp/absl/time/duration.cc +953 -0
  1091. data/third_party/abseil-cpp/absl/time/format.cc +160 -0
  1092. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  1093. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +632 -0
  1094. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +386 -0
  1095. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  1096. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  1097. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  1098. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  1099. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1029 -0
  1100. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  1101. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  1102. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +113 -0
  1103. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  1104. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +965 -0
  1105. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +137 -0
  1106. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +309 -0
  1107. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  1108. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  1109. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  1110. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  1111. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  1112. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +116 -0
  1113. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  1114. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  1115. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  1116. data/third_party/abseil-cpp/absl/time/time.h +1583 -0
  1117. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  1118. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  1119. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  1120. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  1121. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  1122. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  1123. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  1124. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  1125. data/third_party/boringssl-with-bazel/err_data.c +759 -707
  1126. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +6 -6
  1127. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +5 -5
  1128. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +6 -6
  1129. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +6 -13
  1130. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1131. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  1132. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +5 -3
  1133. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  1134. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -20
  1135. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  1136. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  1137. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  1138. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  1139. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  1140. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  1141. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  1142. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  1143. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  1144. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  1145. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  1146. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  1147. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1148. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  1149. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1150. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  1151. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  1152. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  1153. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1154. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  1155. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  1156. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1157. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +18 -7
  1158. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1159. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  1160. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  1161. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  1162. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  1163. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  1164. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  1165. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1166. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  1167. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +19 -43
  1169. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  1170. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  1171. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1172. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1173. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1174. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  1175. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  1176. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  1179. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  1180. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  1181. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -2
  1182. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1183. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  1184. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  1185. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +34 -13
  1186. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  1187. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  1188. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
  1189. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  1190. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +149 -211
  1192. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +301 -117
  1195. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +22 -28
  1196. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  1197. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  1198. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +434 -161
  1199. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  1200. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +18 -25
  1201. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  1202. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +104 -122
  1203. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  1206. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  1207. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  1208. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  1209. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  1210. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  1211. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  1212. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1213. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1214. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +69 -5
  1216. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +162 -55
  1217. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -121
  1218. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +5 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +73 -40
  1221. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +122 -55
  1222. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +217 -2
  1223. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  1224. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +532 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +246 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/mem.c +47 -16
  1227. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  1228. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  1229. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  1230. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  1231. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1232. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1233. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  1234. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1235. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1238. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +318 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1399 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +858 -0
  1243. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +7 -7
  1245. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  1247. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  1248. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  1249. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  1250. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  1251. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +21 -37
  1252. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +27 -21
  1253. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  1254. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  1255. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  1256. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +89 -11
  1257. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +7 -4
  1258. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  1259. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +4 -4
  1260. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +62 -44
  1261. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +67 -25
  1262. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +13 -11
  1263. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  1264. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
  1265. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +38 -17
  1266. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  1267. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1268. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  1269. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  1270. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +68 -9
  1271. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  1272. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  1273. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  1275. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  1276. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +25 -24
  1277. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  1278. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +32 -28
  1279. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  1280. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  1281. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  1282. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1283. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  1284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  1285. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +2 -2
  1286. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +126 -40
  1287. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -7
  1288. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  1289. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  1290. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  1291. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +54 -0
  1292. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +662 -556
  1293. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  1294. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -7
  1295. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  1296. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1297. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  1298. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +25 -0
  1299. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1300. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +10 -5
  1301. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  1302. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +82 -20
  1303. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +11 -0
  1304. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  1305. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  1306. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  1307. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  1308. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +85 -3
  1309. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  1310. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  1311. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  1312. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +6 -17
  1313. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  1314. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  1315. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  1316. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +359 -120
  1317. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +33 -10
  1318. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +310 -0
  1319. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1140 -755
  1320. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  1321. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +593 -440
  1322. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  1323. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  1324. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  1325. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  1326. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +181 -57
  1327. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +45 -26
  1328. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +43 -45
  1329. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +32 -10
  1330. data/third_party/boringssl-with-bazel/src/ssl/internal.h +160 -80
  1331. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  1332. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -3
  1333. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  1334. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +77 -8
  1335. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +7 -6
  1336. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  1337. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +131 -15
  1338. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  1339. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +50 -15
  1340. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  1341. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  1342. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  1343. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +53 -30
  1344. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +636 -100
  1345. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +2 -3
  1346. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +187 -68
  1347. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +71 -90
  1348. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +247 -73
  1349. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  1350. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  1351. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  1352. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  1353. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  1354. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  1355. data/third_party/re2/re2/bitmap256.h +117 -0
  1356. data/third_party/re2/re2/bitstate.cc +385 -0
  1357. data/third_party/re2/re2/compile.cc +1279 -0
  1358. data/third_party/re2/re2/dfa.cc +2130 -0
  1359. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1360. data/third_party/re2/re2/filtered_re2.h +109 -0
  1361. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1362. data/third_party/re2/re2/nfa.cc +713 -0
  1363. data/third_party/re2/re2/onepass.cc +623 -0
  1364. data/third_party/re2/re2/parse.cc +2464 -0
  1365. data/third_party/re2/re2/perl_groups.cc +119 -0
  1366. data/third_party/re2/re2/pod_array.h +55 -0
  1367. data/third_party/re2/re2/prefilter.cc +710 -0
  1368. data/third_party/re2/re2/prefilter.h +108 -0
  1369. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1370. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1371. data/third_party/re2/re2/prog.cc +988 -0
  1372. data/third_party/re2/re2/prog.h +436 -0
  1373. data/third_party/re2/re2/re2.cc +1362 -0
  1374. data/third_party/re2/re2/re2.h +1002 -0
  1375. data/third_party/re2/re2/regexp.cc +980 -0
  1376. data/third_party/re2/re2/regexp.h +659 -0
  1377. data/third_party/re2/re2/set.cc +154 -0
  1378. data/third_party/re2/re2/set.h +80 -0
  1379. data/third_party/re2/re2/simplify.cc +657 -0
  1380. data/third_party/re2/re2/sparse_array.h +392 -0
  1381. data/third_party/re2/re2/sparse_set.h +264 -0
  1382. data/third_party/re2/re2/stringpiece.cc +65 -0
  1383. data/third_party/re2/re2/stringpiece.h +210 -0
  1384. data/third_party/re2/re2/tostring.cc +351 -0
  1385. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1386. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1387. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1388. data/third_party/re2/re2/unicode_groups.h +67 -0
  1389. data/third_party/re2/re2/walker-inl.h +246 -0
  1390. data/third_party/re2/util/benchmark.h +156 -0
  1391. data/third_party/re2/util/flags.h +26 -0
  1392. data/third_party/re2/util/logging.h +109 -0
  1393. data/third_party/re2/util/malloc_counter.h +19 -0
  1394. data/third_party/re2/util/mix.h +41 -0
  1395. data/third_party/re2/util/mutex.h +148 -0
  1396. data/third_party/re2/util/pcre.cc +1025 -0
  1397. data/third_party/re2/util/pcre.h +681 -0
  1398. data/third_party/re2/util/rune.cc +260 -0
  1399. data/third_party/re2/util/strutil.cc +149 -0
  1400. data/third_party/re2/util/strutil.h +21 -0
  1401. data/third_party/re2/util/test.h +50 -0
  1402. data/third_party/re2/util/utf.h +44 -0
  1403. data/third_party/re2/util/util.h +42 -0
  1404. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  1405. data/third_party/upb/upb/decode.c +604 -511
  1406. data/third_party/upb/upb/decode.h +20 -1
  1407. data/third_party/upb/upb/decode.int.h +163 -0
  1408. data/third_party/upb/upb/decode_fast.c +1040 -0
  1409. data/third_party/upb/upb/decode_fast.h +126 -0
  1410. data/third_party/upb/upb/def.c +2178 -0
  1411. data/third_party/upb/upb/def.h +315 -0
  1412. data/third_party/upb/upb/def.hpp +439 -0
  1413. data/third_party/upb/upb/encode.c +311 -211
  1414. data/third_party/upb/upb/encode.h +27 -2
  1415. data/third_party/upb/upb/msg.c +215 -70
  1416. data/third_party/upb/upb/msg.h +558 -14
  1417. data/third_party/upb/upb/port_def.inc +105 -63
  1418. data/third_party/upb/upb/port_undef.inc +10 -7
  1419. data/third_party/upb/upb/reflection.c +408 -0
  1420. data/third_party/upb/upb/reflection.h +168 -0
  1421. data/third_party/upb/upb/table.c +73 -269
  1422. data/third_party/upb/upb/table.int.h +25 -57
  1423. data/third_party/upb/upb/text_encode.c +421 -0
  1424. data/third_party/upb/upb/text_encode.h +38 -0
  1425. data/third_party/upb/upb/upb.c +138 -135
  1426. data/third_party/upb/upb/upb.h +119 -146
  1427. data/third_party/upb/upb/upb.hpp +88 -0
  1428. data/third_party/upb/upb/upb.int.h +29 -0
  1429. data/third_party/xxhash/xxhash.h +5443 -0
  1430. metadata +686 -160
  1431. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  1432. data/src/core/ext/filters/client_channel/parse_address.cc +0 -237
  1433. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1434. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -484
  1435. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -65
  1436. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -359
  1437. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -122
  1438. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1779
  1439. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -280
  1440. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +0 -347
  1441. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +0 -87
  1442. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  1443. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -104
  1444. data/src/core/ext/filters/client_channel/xds/xds_client.h +0 -274
  1445. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +0 -116
  1446. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -246
  1447. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -905
  1448. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  1449. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -390
  1450. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1411
  1451. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -73
  1452. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  1453. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +0 -34
  1454. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  1455. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +0 -54
  1456. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  1457. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -111
  1458. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  1459. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -292
  1460. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -847
  1461. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -95
  1462. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  1463. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -196
  1464. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  1465. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -168
  1466. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -658
  1467. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +0 -35
  1468. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  1469. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -132
  1470. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -436
  1471. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -128
  1472. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  1473. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +0 -30
  1474. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  1475. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -91
  1476. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  1477. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -17
  1478. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  1479. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -88
  1480. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -258
  1481. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -111
  1482. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  1483. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +0 -30
  1484. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  1485. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -104
  1486. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -383
  1487. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -17
  1488. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  1489. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -144
  1490. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  1491. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -42
  1492. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  1493. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  1494. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -62
  1495. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  1496. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -17
  1497. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  1498. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -793
  1499. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2936
  1500. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -58
  1501. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  1502. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  1503. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -227
  1504. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  1505. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -296
  1506. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1072
  1507. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +0 -32
  1508. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  1509. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +0 -23
  1510. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  1511. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -52
  1512. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -130
  1513. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -47
  1514. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -108
  1515. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -52
  1516. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  1517. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -87
  1518. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  1519. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +0 -38
  1520. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  1521. data/src/core/ext/upb-generated/envoy/type/range.upb.c +0 -49
  1522. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  1523. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +0 -28
  1524. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  1525. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -88
  1526. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  1527. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  1528. data/src/core/lib/gprpp/map.h +0 -59
  1529. data/src/core/lib/gprpp/string_view.h +0 -60
  1530. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1531. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1532. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1533. data/src/core/lib/slice/slice_hash_table.h +0 -199
  1534. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  1535. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  1536. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1537. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  1538. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  1539. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
  1540. data/third_party/upb/upb/generated_util.h +0 -105
  1541. data/third_party/upb/upb/port.c +0 -26
@@ -24,10 +24,24 @@
24
24
  #include <grpc/impl/codegen/grpc_types.h>
25
25
 
26
26
  #include "src/core/lib/iomgr/error.h"
27
+ #include "src/core/lib/surface/server.h"
28
+
29
+ namespace grpc_core {
30
+
31
+ // A function to modify channel args for a listening addr:port. Note that this
32
+ // is used to create a security connector for listeners when the servers are
33
+ // configured with a config fetcher. Not invoked if there is no config fetcher
34
+ // added to the server. Takes ownership of the args. Caller takes ownership of
35
+ // returned args. On failure, the error parameter will be set.
36
+ using Chttp2ServerArgsModifier =
37
+ std::function<grpc_channel_args*(grpc_channel_args*, grpc_error**)>;
27
38
 
28
39
  /// Adds a port to \a server. Sets \a port_num to the port number.
29
40
  /// Takes ownership of \a args.
30
- grpc_error* grpc_chttp2_server_add_port(grpc_server* server, const char* addr,
31
- grpc_channel_args* args, int* port_num);
41
+ grpc_error* Chttp2ServerAddPort(
42
+ Server* server, const char* addr, grpc_channel_args* args,
43
+ Chttp2ServerArgsModifier connection_args_modifier, int* port_num);
44
+
45
+ } // namespace grpc_core
32
46
 
33
47
  #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_SERVER_CHTTP2_SERVER_H */
@@ -27,14 +27,24 @@
27
27
  #include "src/core/lib/surface/api_trace.h"
28
28
  #include "src/core/lib/surface/server.h"
29
29
 
30
+ namespace {
31
+
32
+ grpc_channel_args* ModifyArgsForConnection(grpc_channel_args* args,
33
+ grpc_error** /*error*/) {
34
+ return args;
35
+ }
36
+
37
+ } // namespace
38
+
30
39
  int grpc_server_add_insecure_http2_port(grpc_server* server, const char* addr) {
31
40
  grpc_core::ExecCtx exec_ctx;
32
41
  int port_num = 0;
33
42
  GRPC_API_TRACE("grpc_server_add_insecure_http2_port(server=%p, addr=%s)", 2,
34
43
  (server, addr));
35
- grpc_error* err = grpc_chttp2_server_add_port(
36
- server, addr,
37
- grpc_channel_args_copy(grpc_server_get_channel_args(server)), &port_num);
44
+ grpc_error* err = grpc_core::Chttp2ServerAddPort(
45
+ server->core_server.get(), addr,
46
+ grpc_channel_args_copy(server->core_server->channel_args()),
47
+ ModifyArgsForConnection, &port_num);
38
48
  if (err != GRPC_ERROR_NONE) {
39
49
  const char* msg = grpc_error_string(err);
40
50
  gpr_log(GPR_ERROR, "%s", msg);
@@ -24,8 +24,9 @@
24
24
 
25
25
  #ifdef GPR_SUPPORT_CHANNELS_FROM_FD
26
26
 
27
+ #include "absl/strings/str_cat.h"
28
+
27
29
  #include <grpc/support/alloc.h>
28
- #include <grpc/support/string_util.h>
29
30
 
30
31
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
31
32
  #include "src/core/lib/channel/channel_args.h"
@@ -40,29 +41,29 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
40
41
  GPR_ASSERT(reserved == nullptr);
41
42
 
42
43
  grpc_core::ExecCtx exec_ctx;
43
- char* name;
44
- gpr_asprintf(&name, "fd:%d", fd);
45
-
46
- grpc_endpoint* server_endpoint =
47
- grpc_tcp_create(grpc_fd_create(fd, name, true),
48
- grpc_server_get_channel_args(server), name);
44
+ grpc_core::Server* core_server = server->core_server.get();
49
45
 
50
- gpr_free(name);
46
+ const grpc_channel_args* server_args = core_server->channel_args();
47
+ std::string name = absl::StrCat("fd:", fd);
48
+ grpc_endpoint* server_endpoint = grpc_tcp_create(
49
+ grpc_fd_create(fd, name.c_str(), true), server_args, name.c_str());
51
50
 
52
- const grpc_channel_args* server_args = grpc_server_get_channel_args(server);
53
51
  grpc_transport* transport = grpc_create_chttp2_transport(
54
52
  server_args, server_endpoint, false /* is_client */);
55
53
 
56
- grpc_pollset** pollsets;
57
- size_t num_pollsets = 0;
58
- grpc_server_get_pollsets(server, &pollsets, &num_pollsets);
59
-
60
- for (size_t i = 0; i < num_pollsets; i++) {
61
- grpc_endpoint_add_to_pollset(server_endpoint, pollsets[i]);
54
+ grpc_error* error =
55
+ core_server->SetupTransport(transport, nullptr, server_args, nullptr);
56
+ if (error == GRPC_ERROR_NONE) {
57
+ for (grpc_pollset* pollset : core_server->pollsets()) {
58
+ grpc_endpoint_add_to_pollset(server_endpoint, pollset);
59
+ }
60
+ grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
61
+ } else {
62
+ gpr_log(GPR_ERROR, "Failed to create channel: %s",
63
+ grpc_error_string(error));
64
+ GRPC_ERROR_UNREF(error);
65
+ grpc_transport_destroy(transport);
62
66
  }
63
-
64
- grpc_server_setup_transport(server, transport, nullptr, server_args, nullptr);
65
- grpc_chttp2_transport_start_reading(transport, nullptr, nullptr);
66
67
  }
67
68
 
68
69
  #else // !GPR_SUPPORT_CHANNELS_FROM_FD
@@ -18,13 +18,13 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include <grpc/grpc.h>
22
-
23
21
  #include <string.h>
24
22
 
23
+ #include "absl/strings/str_cat.h"
24
+
25
+ #include <grpc/grpc.h>
25
26
  #include <grpc/support/alloc.h>
26
27
  #include <grpc/support/log.h>
27
- #include <grpc/support/string_util.h>
28
28
 
29
29
  #include "src/core/ext/transport/chttp2/server/chttp2_server.h"
30
30
 
@@ -37,6 +37,35 @@
37
37
  #include "src/core/lib/surface/api_trace.h"
38
38
  #include "src/core/lib/surface/server.h"
39
39
 
40
+ namespace {
41
+
42
+ grpc_channel_args* ModifyArgsForConnection(grpc_channel_args* args,
43
+ grpc_error** error) {
44
+ grpc_server_credentials* server_credentials =
45
+ grpc_find_server_credentials_in_args(args);
46
+ if (server_credentials == nullptr) {
47
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
48
+ "Could not find server credentials");
49
+ return args;
50
+ }
51
+ auto security_connector = server_credentials->create_security_connector(args);
52
+ if (security_connector == nullptr) {
53
+ *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
54
+ absl::StrCat("Unable to create secure server with credentials of type ",
55
+ server_credentials->type())
56
+ .c_str());
57
+ return args;
58
+ }
59
+ grpc_arg arg_to_add =
60
+ grpc_security_connector_to_arg(security_connector.get());
61
+ grpc_channel_args* new_args =
62
+ grpc_channel_args_copy_and_add(args, &arg_to_add, 1);
63
+ grpc_channel_args_destroy(args);
64
+ return new_args;
65
+ }
66
+
67
+ } // namespace
68
+
40
69
  int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr,
41
70
  grpc_server_credentials* creds) {
42
71
  grpc_core::ExecCtx exec_ctx;
@@ -54,28 +83,43 @@ int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr,
54
83
  "No credentials specified for secure server port (creds==NULL)");
55
84
  goto done;
56
85
  }
57
- sc = creds->create_security_connector();
58
- if (sc == nullptr) {
59
- char* msg;
60
- gpr_asprintf(&msg,
61
- "Unable to create secure server with credentials of type %s.",
62
- creds->type());
63
- err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
64
- gpr_free(msg);
65
- goto done;
86
+ // TODO(yashykt): Ideally, we would not want to have different behavior here
87
+ // based on whether a config fetcher is configured or not. Currently, we have
88
+ // a feature for SSL credentials reloading with an application callback that
89
+ // assumes that there is a single security connector. If we delay the creation
90
+ // of the security connector to after the creation of the listener(s), we
91
+ // would have potentially multiple security connectors which breaks the
92
+ // assumption for SSL creds reloading. When the API for SSL creds reloading is
93
+ // rewritten, we would be able to make this workaround go away by removing
94
+ // that assumption. As an immediate drawback of this workaround, config
95
+ // fetchers need to be registered before adding ports to the server.
96
+ if (server->core_server->config_fetcher() != nullptr) {
97
+ // Create channel args.
98
+ grpc_arg arg_to_add = grpc_server_credentials_to_arg(creds);
99
+ args = grpc_channel_args_copy_and_add(server->core_server->channel_args(),
100
+ &arg_to_add, 1);
101
+ } else {
102
+ sc = creds->create_security_connector(nullptr);
103
+ if (sc == nullptr) {
104
+ err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
105
+ absl::StrCat(
106
+ "Unable to create secure server with credentials of type ",
107
+ creds->type())
108
+ .c_str());
109
+ goto done;
110
+ }
111
+ grpc_arg args_to_add[2];
112
+ args_to_add[0] = grpc_server_credentials_to_arg(creds);
113
+ args_to_add[1] = grpc_security_connector_to_arg(sc.get());
114
+ args = grpc_channel_args_copy_and_add(server->core_server->channel_args(),
115
+ args_to_add,
116
+ GPR_ARRAY_SIZE(args_to_add));
66
117
  }
67
- // Create channel args.
68
- grpc_arg args_to_add[2];
69
- args_to_add[0] = grpc_server_credentials_to_arg(creds);
70
- args_to_add[1] = grpc_security_connector_to_arg(sc.get());
71
- args =
72
- grpc_channel_args_copy_and_add(grpc_server_get_channel_args(server),
73
- args_to_add, GPR_ARRAY_SIZE(args_to_add));
74
118
  // Add server port.
75
- err = grpc_chttp2_server_add_port(server, addr, args, &port_num);
119
+ err = grpc_core::Chttp2ServerAddPort(server->core_server.get(), addr, args,
120
+ ModifyArgsForConnection, &port_num);
76
121
  done:
77
122
  sc.reset(DEBUG_LOCATION, "server");
78
-
79
123
  if (err != GRPC_ERROR_NONE) {
80
124
  const char* msg = grpc_error_string(err);
81
125
  gpr_log(GPR_ERROR, "%s", msg);
@@ -66,16 +66,16 @@ static bool input_is_valid(const uint8_t* input_ptr, size_t length) {
66
66
  return true;
67
67
  }
68
68
 
69
- #define COMPOSE_OUTPUT_BYTE_0(input_ptr) \
70
- (uint8_t)((decode_table[input_ptr[0]] << 2) | \
71
- (decode_table[input_ptr[1]] >> 4))
69
+ #define COMPOSE_OUTPUT_BYTE_0(input_ptr) \
70
+ (uint8_t)((decode_table[(input_ptr)[0]] << 2) | \
71
+ (decode_table[(input_ptr)[1]] >> 4))
72
72
 
73
- #define COMPOSE_OUTPUT_BYTE_1(input_ptr) \
74
- (uint8_t)((decode_table[input_ptr[1]] << 4) | \
75
- (decode_table[input_ptr[2]] >> 2))
73
+ #define COMPOSE_OUTPUT_BYTE_1(input_ptr) \
74
+ (uint8_t)((decode_table[(input_ptr)[1]] << 4) | \
75
+ (decode_table[(input_ptr)[2]] >> 2))
76
76
 
77
77
  #define COMPOSE_OUTPUT_BYTE_2(input_ptr) \
78
- (uint8_t)((decode_table[input_ptr[2]] << 6) | decode_table[input_ptr[3]])
78
+ (uint8_t)((decode_table[(input_ptr)[2]] << 6) | decode_table[(input_ptr)[3]])
79
79
 
80
80
  // By RFC 4648, if the length of the encoded string without padding is 4n+r,
81
81
  // the length of decoded string is: 1) 3n if r = 0, 2) 3n + 1 if r = 2, 3, or
@@ -28,11 +28,10 @@
28
28
  static const char alphabet[] =
29
29
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
30
30
 
31
- typedef struct {
31
+ struct b64_huff_sym {
32
32
  uint16_t bits;
33
33
  uint8_t length;
34
- } b64_huff_sym;
35
-
34
+ };
36
35
  static const b64_huff_sym huff_alphabet[64] = {
37
36
  {0x21, 6}, {0x5d, 7}, {0x5e, 7}, {0x5f, 7}, {0x60, 7}, {0x61, 7},
38
37
  {0x62, 7}, {0x63, 7}, {0x64, 7}, {0x65, 7}, {0x66, 7}, {0x67, 7},
@@ -136,12 +135,11 @@ grpc_slice grpc_chttp2_huffman_compress(const grpc_slice& input) {
136
135
  return output;
137
136
  }
138
137
 
139
- typedef struct {
138
+ struct huff_out {
140
139
  uint32_t temp;
141
140
  uint32_t temp_length;
142
141
  uint8_t* out;
143
- } huff_out;
144
-
142
+ };
145
143
  static void enc_flush_some(huff_out* out) {
146
144
  while (out->temp_length > 8) {
147
145
  out->temp_length -= 8;
@@ -1,37 +1,35 @@
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
 
21
19
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
22
20
 
23
- #include <inttypes.h>
24
- #include <limits.h>
25
- #include <math.h>
26
- #include <stdio.h>
27
- #include <string.h>
21
+ #include "absl/strings/str_format.h"
28
22
 
29
23
  #include <grpc/slice_buffer.h>
30
24
  #include <grpc/support/alloc.h>
31
25
  #include <grpc/support/log.h>
26
+ #include <grpc/support/port_platform.h>
32
27
  #include <grpc/support/string_util.h>
33
-
34
- #include "absl/strings/str_format.h"
28
+ #include <inttypes.h>
29
+ #include <limits.h>
30
+ #include <math.h>
31
+ #include <stdio.h>
32
+ #include <string.h>
35
33
 
36
34
  #include "src/core/ext/transport/chttp2/transport/context_list.h"
37
35
  #include "src/core/ext/transport/chttp2/transport/frame_data.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,10 +95,11 @@ 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 */
102
+ // forward declarations of various callbacks that we'll build closures around
107
103
  static void write_action_begin_locked(void* t, grpc_error* error);
108
104
  static void write_action(void* t, grpc_error* error);
109
105
  static void write_action_end(void* t, grpc_error* error);
@@ -115,24 +111,25 @@ static void continue_read_action_locked(grpc_chttp2_transport* t);
115
111
 
116
112
  static void complete_fetch(void* gs, grpc_error* error);
117
113
  static void complete_fetch_locked(void* gs, grpc_error* error);
118
- /** Set a transport level setting, and push it to our peer */
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
119
  grpc_error* 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* error);
130
+ static void destructive_reclaimer(void* arg, grpc_error* error);
131
+ static void benign_reclaimer_locked(void* arg, grpc_error* error);
132
+ static void destructive_reclaimer_locked(void* arg, grpc_error* 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);
@@ -140,7 +137,6 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t);
140
137
  static void close_transport_locked(grpc_chttp2_transport* t, grpc_error* error);
141
138
  static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error);
142
139
 
143
- static void schedule_bdp_ping_locked(grpc_chttp2_transport* t);
144
140
  static void start_bdp_ping(void* tp, grpc_error* error);
145
141
  static void finish_bdp_ping(void* tp, grpc_error* error);
146
142
  static void start_bdp_ping_locked(void* tp, grpc_error* error);
@@ -150,11 +146,10 @@ static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error);
150
146
 
151
147
  static void cancel_pings(grpc_chttp2_transport* t, grpc_error* error);
152
148
  static void send_ping_locked(grpc_chttp2_transport* t,
153
- grpc_closure* on_initiate,
154
- grpc_closure* on_complete);
149
+ grpc_closure* on_initiate, grpc_closure* on_ack);
155
150
  static void retry_initiate_ping_locked(void* tp, grpc_error* error);
156
151
 
157
- /** keepalive-relevant functions */
152
+ // keepalive-relevant functions
158
153
  static void init_keepalive_ping(void* arg, grpc_error* error);
159
154
  static void init_keepalive_ping_locked(void* arg, grpc_error* error);
160
155
  static void start_keepalive_ping(void* arg, grpc_error* error);
@@ -170,9 +165,29 @@ static void reset_byte_stream(void* arg, grpc_error* error);
170
165
  // GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL
171
166
  bool g_flow_control_enabled = true;
172
167
 
173
- /*******************************************************************************
174
- * CONSTRUCTION/DESTRUCTION/REFCOUNTING
175
- */
168
+ namespace grpc_core {
169
+
170
+ namespace {
171
+ TestOnlyGlobalHttp2TransportInitCallback test_only_init_callback = nullptr;
172
+ TestOnlyGlobalHttp2TransportDestructCallback test_only_destruct_callback =
173
+ nullptr;
174
+ } // namespace
175
+
176
+ void TestOnlySetGlobalHttp2TransportInitCallback(
177
+ TestOnlyGlobalHttp2TransportInitCallback callback) {
178
+ test_only_init_callback = callback;
179
+ }
180
+
181
+ void TestOnlySetGlobalHttp2TransportDestructCallback(
182
+ TestOnlyGlobalHttp2TransportDestructCallback callback) {
183
+ test_only_destruct_callback = callback;
184
+ }
185
+
186
+ } // namespace grpc_core
187
+
188
+ //
189
+ // CONSTRUCTION/DESTRUCTION/REFCOUNTING
190
+ //
176
191
 
177
192
  grpc_chttp2_transport::~grpc_chttp2_transport() {
178
193
  size_t i;
@@ -226,12 +241,14 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
226
241
 
227
242
  GRPC_ERROR_UNREF(closed_with_error);
228
243
  gpr_free(ping_acks);
229
- gpr_free(peer_string);
244
+ if (grpc_core::test_only_destruct_callback != nullptr) {
245
+ grpc_core::test_only_destruct_callback();
246
+ }
230
247
  }
231
248
 
232
249
  static const grpc_transport_vtable* get_vtable(void);
233
250
 
234
- /* Returns whether bdp is enabled */
251
+ // Returns whether bdp is enabled
235
252
  static bool read_channel_args(grpc_chttp2_transport* t,
236
253
  const grpc_channel_args* channel_args,
237
254
  bool is_client) {
@@ -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);
@@ -466,7 +474,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
466
474
  }
467
475
  grpc_chttp2_hpack_compressor_init(&hpack_compressor);
468
476
  grpc_slice_buffer_init(&qbuf);
469
- /* copy in initial settings to all setting sets */
477
+ // copy in initial settings to all setting sets
470
478
  size_t i;
471
479
  int j;
472
480
  for (i = 0; i < GRPC_CHTTP2_NUM_SETTINGS; i++) {
@@ -477,7 +485,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
477
485
  grpc_chttp2_hpack_parser_init(&hpack_parser);
478
486
  grpc_chttp2_goaway_parser_init(&goaway_parser);
479
487
 
480
- /* configure http2 the way we like it */
488
+ // configure http2 the way we like it
481
489
  if (is_client) {
482
490
  queue_setting_update(this, GRPC_CHTTP2_SETTINGS_ENABLE_PUSH, 0);
483
491
  queue_setting_update(this, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 0);
@@ -503,7 +511,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
503
511
  enable_bdp = false;
504
512
  }
505
513
 
506
- /* No pings allowed before receiving a header or data frame. */
514
+ // No pings allowed before receiving a header or data frame.
507
515
  ping_state.pings_before_data_required = 0;
508
516
  ping_state.is_delayed_ping_timer_set = false;
509
517
  ping_state.last_ping_sent_time = GRPC_MILLIS_INF_PAST;
@@ -514,14 +522,16 @@ grpc_chttp2_transport::grpc_chttp2_transport(
514
522
  init_keepalive_pings_if_enabled(this);
515
523
 
516
524
  if (enable_bdp) {
517
- GRPC_CHTTP2_REF_TRANSPORT(this, "bdp_ping");
518
- schedule_bdp_ping_locked(this);
525
+ bdp_ping_blocked = true;
519
526
  grpc_chttp2_act_on_flowctl_action(flow_control->PeriodicUpdate(), this,
520
527
  nullptr);
521
528
  }
522
529
 
523
530
  grpc_chttp2_initiate_write(this, GRPC_CHTTP2_INITIATE_WRITE_INITIAL_WRITE);
524
531
  post_benign_reclaimer(this);
532
+ if (grpc_core::test_only_init_callback != nullptr) {
533
+ grpc_core::test_only_init_callback();
534
+ }
525
535
  }
526
536
 
527
537
  static void destroy_transport_locked(void* tp, grpc_error* /*error*/) {
@@ -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
  }
@@ -633,7 +649,7 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
633
649
  metadata_buffer{grpc_chttp2_incoming_metadata_buffer(arena),
634
650
  grpc_chttp2_incoming_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",
@@ -769,14 +782,14 @@ grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
769
782
  GPR_ASSERT(t->accepting_stream == nullptr);
770
783
  t->accepting_stream = &accepting;
771
784
  t->accept_stream_cb(t->accept_stream_cb_user_data, &t->base,
772
- (void*)static_cast<uintptr_t>(id));
785
+ reinterpret_cast<void*>(id));
773
786
  t->accepting_stream = nullptr;
774
787
  return accepting;
775
788
  }
776
789
 
777
- /*******************************************************************************
778
- * OUTPUT PROCESSING
779
- */
790
+ //
791
+ // OUTPUT PROCESSING
792
+ //
780
793
 
781
794
  static const char* write_state_name(grpc_chttp2_write_state st) {
782
795
  switch (st) {
@@ -794,15 +807,15 @@ static void set_write_state(grpc_chttp2_transport* t,
794
807
  grpc_chttp2_write_state st, const char* reason) {
795
808
  GRPC_CHTTP2_IF_TRACING(
796
809
  gpr_log(GPR_INFO, "W:%p %s [%s] state %s -> %s [%s]", t,
797
- t->is_client ? "CLIENT" : "SERVER", t->peer_string,
810
+ t->is_client ? "CLIENT" : "SERVER", t->peer_string.c_str(),
798
811
  write_state_name(t->write_state), write_state_name(st), reason));
799
812
  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) */
813
+ // If the state is being reset back to idle, it means a write was just
814
+ // finished. Make sure all the run_after_write closures are scheduled.
815
+ //
816
+ // This is also our chance to close the transport if the transport was marked
817
+ // to be closed after all writes finish (for example, if we received a go-away
818
+ // from peer while we had some pending writes)
806
819
  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
807
820
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
808
821
  if (t->close_transport_on_writes_finished != nullptr) {
@@ -864,6 +877,9 @@ static void inc_initiate_write_reason(
864
877
  case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
865
878
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_APPLICATION_PING();
866
879
  break;
880
+ case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
881
+ GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING();
882
+ break;
867
883
  case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
868
884
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_KEEPALIVE_PING();
869
885
  break;
@@ -889,22 +905,22 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
889
905
  set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING,
890
906
  grpc_chttp2_initiate_write_reason_string(reason));
891
907
  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') */
908
+ // Note that the 'write_action_begin_locked' closure is being scheduled
909
+ // on the 'finally_scheduler' of t->combiner. This means that
910
+ // 'write_action_begin_locked' is called only *after* all the other
911
+ // closures (some of which are potentially initiating more writes on the
912
+ // transport) are executed on the t->combiner.
913
+ //
914
+ // The reason for scheduling on finally_scheduler is to make sure we batch
915
+ // as many writes as possible. 'write_action_begin_locked' is the function
916
+ // that gathers all the relevant bytes (which are at various places in the
917
+ // grpc_chttp2_transport structure) and append them to 'outbuf' field in
918
+ // grpc_chttp2_transport thereby batching what would have been potentially
919
+ // multiple write operations.
920
+ //
921
+ // Also, 'write_action_begin_locked' only gathers the bytes into outbuf.
922
+ // It does not call the endpoint to write the bytes. That is done by the
923
+ // 'write_action' (which is scheduled by 'write_action_begin_locked')
908
924
  t->combiner->FinallyRun(
909
925
  GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
910
926
  write_action_begin_locked, t, nullptr),
@@ -956,9 +972,9 @@ static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
956
972
  write_action(t, GRPC_ERROR_NONE);
957
973
  if (t->reading_paused_on_pending_induced_frames) {
958
974
  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. */
975
+ // We had paused reading, because we had many induced frames (SETTINGS
976
+ // ACK, PINGS ACK and RST_STREAMS) pending in t->qbuf. Now that we have
977
+ // been able to flush qbuf, we can resume reading.
962
978
  GRPC_CHTTP2_IF_TRACING(gpr_log(
963
979
  GPR_INFO,
964
980
  "transport %p : Resuming reading after being paused due to too "
@@ -993,8 +1009,8 @@ static void write_action_end(void* tp, grpc_error* error) {
993
1009
  GRPC_ERROR_REF(error));
994
1010
  }
995
1011
 
996
- /* Callback from the grpc_endpoint after bytes have been written by calling
997
- * sendmsg */
1012
+ // Callback from the grpc_endpoint after bytes have been written by calling
1013
+ // sendmsg
998
1014
  static void write_action_end_locked(void* tp, grpc_error* error) {
999
1015
  GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
1000
1016
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
@@ -1057,7 +1073,7 @@ static void queue_setting_update(grpc_chttp2_transport* t,
1057
1073
  }
1058
1074
  if (use_value != t->settings[GRPC_LOCAL_SETTINGS][id]) {
1059
1075
  t->settings[GRPC_LOCAL_SETTINGS][id] = use_value;
1060
- t->dirtied_local_settings = 1;
1076
+ t->dirtied_local_settings = true;
1061
1077
  }
1062
1078
  }
1063
1079
 
@@ -1080,16 +1096,17 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1080
1096
  GRPC_CHTTP2_IF_TRACING(
1081
1097
  gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
1082
1098
  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. */
1099
+ // We want to log this irrespective of whether http tracing is enabled if we
1100
+ // received a GOAWAY with a non NO_ERROR code.
1085
1101
  if (goaway_error != GRPC_HTTP2_NO_ERROR) {
1086
- gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string,
1102
+ gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
1087
1103
  goaway_error, grpc_error_string(t->goaway_error));
1088
1104
  }
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. */
1105
+ absl::Status status = grpc_error_to_absl_status(t->goaway_error);
1106
+ // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
1107
+ // data equal to "too_many_pings", it should log the occurrence at a log level
1108
+ // that is enabled by default and double the configured KEEPALIVE_TIME used
1109
+ // for new connections on that channel.
1093
1110
  if (GPR_UNLIKELY(t->is_client &&
1094
1111
  goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
1095
1112
  grpc_slice_str_cmp(goaway_text, "too_many_pings") == 0)) {
@@ -1097,21 +1114,25 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1097
1114
  "Received a GOAWAY with error code ENHANCE_YOUR_CALM and debug "
1098
1115
  "data equal to \"too_many_pings\"");
1099
1116
  double current_keepalive_time_ms = static_cast<double>(t->keepalive_time);
1117
+ constexpr int max_keepalive_time_ms =
1118
+ INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
1100
1119
  t->keepalive_time =
1101
- current_keepalive_time_ms > INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER
1120
+ current_keepalive_time_ms > static_cast<double>(max_keepalive_time_ms)
1102
1121
  ? GRPC_MILLIS_INF_FUTURE
1103
1122
  : static_cast<grpc_millis>(current_keepalive_time_ms *
1104
1123
  KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
1124
+ status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
1125
+ absl::Cord(std::to_string(t->keepalive_time)));
1105
1126
  }
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");
1127
+ // lie: use transient failure from the transport to indicate goaway has been
1128
+ // received.
1129
+ connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1130
+ "got_goaway");
1110
1131
  }
1111
1132
 
1112
1133
  static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1113
1134
  grpc_chttp2_stream* s;
1114
- /* cancel out streams that haven't yet started if we have received a GOAWAY */
1135
+ // cancel out streams that haven't yet started if we have received a GOAWAY
1115
1136
  if (t->goaway_error != GRPC_ERROR_NONE) {
1116
1137
  while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1117
1138
  grpc_chttp2_cancel_stream(
@@ -1122,14 +1143,14 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1122
1143
  }
1123
1144
  return;
1124
1145
  }
1125
- /* start streams where we have free grpc_chttp2_stream ids and free
1126
- * concurrency */
1146
+ // start streams where we have free grpc_chttp2_stream ids and free
1147
+ // * concurrency
1127
1148
  while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
1128
1149
  grpc_chttp2_stream_map_size(&t->stream_map) <
1129
1150
  t->settings[GRPC_PEER_SETTINGS]
1130
1151
  [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
1131
1152
  grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1132
- /* safe since we can't (legally) be parsing this stream yet */
1153
+ // safe since we can't (legally) be parsing this stream yet
1133
1154
  GRPC_CHTTP2_IF_TRACING(gpr_log(
1134
1155
  GPR_INFO,
1135
1156
  "HTTP:%s: Transport %p allocating new grpc_chttp2_stream %p to id %d",
@@ -1141,6 +1162,8 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1141
1162
 
1142
1163
  if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
1143
1164
  connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE,
1165
+ absl::Status(absl::StatusCode::kUnavailable,
1166
+ "Transport Stream IDs exhausted"),
1144
1167
  "no_more_stream_ids");
1145
1168
  }
1146
1169
 
@@ -1149,7 +1172,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1149
1172
  grpc_chttp2_mark_stream_writable(t, s);
1150
1173
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM);
1151
1174
  }
1152
- /* cancel out streams that will never be started */
1175
+ // cancel out streams that will never be started
1153
1176
  if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
1154
1177
  while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1155
1178
  grpc_chttp2_cancel_stream(
@@ -1161,12 +1184,12 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1161
1184
  }
1162
1185
  }
1163
1186
 
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 */
1187
+ // Flag that this closure barrier may be covering a write in a pollset, and so
1188
+ // we should not complete this closure until we can prove that the write got
1189
+ // scheduled
1167
1190
  #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) */
1191
+ // First bit of the reference count, stored in the high order bits (with the low
1192
+ // bits being used for flags defined above)
1170
1193
  #define CLOSURE_BARRIER_FIRST_REF_BIT (1 << 16)
1171
1194
 
1172
1195
  static grpc_closure* add_closure_barrier(grpc_closure* closure) {
@@ -1210,7 +1233,7 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1210
1233
  "Error in HTTP transport completing operation");
1211
1234
  closure->error_data.error = grpc_error_set_str(
1212
1235
  closure->error_data.error, GRPC_ERROR_STR_TARGET_ADDRESS,
1213
- grpc_slice_from_copied_string(t->peer_string));
1236
+ grpc_slice_from_copied_string(t->peer_string.c_str()));
1214
1237
  }
1215
1238
  closure->error_data.error =
1216
1239
  grpc_error_add_child(closure->error_data.error, error);
@@ -1258,7 +1281,7 @@ 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
1286
  return; /* early out */
1264
1287
  }
@@ -1354,10 +1377,8 @@ static void perform_stream_op_locked(void* stream_op,
1354
1377
  s->context = op->payload->context;
1355
1378
  s->traced = op->is_traced;
1356
1379
  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);
1380
+ gpr_log(GPR_INFO, "perform_stream_op_locked: %s; on_complete = %p",
1381
+ grpc_transport_stream_op_batch_string(op).c_str(), op->on_complete);
1361
1382
  if (op->send_initial_metadata) {
1362
1383
  log_metadata(op_payload->send_initial_metadata.send_initial_metadata,
1363
1384
  s->id, t->is_client, true);
@@ -1390,7 +1411,7 @@ static void perform_stream_op_locked(void* stream_op,
1390
1411
  GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
1391
1412
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1392
1413
 
1393
- /* Identify stream compression */
1414
+ // Identify stream compression
1394
1415
  if (op_payload->send_initial_metadata.send_initial_metadata->idx.named
1395
1416
  .content_encoding == nullptr ||
1396
1417
  grpc_stream_compression_method_parse(
@@ -1409,68 +1430,48 @@ 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
1434
  s->deadline = GPR_MIN(s->deadline, s->send_initial_metadata->deadline);
1419
1435
  }
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
- }
1436
+ if (contains_non_ok_status(s->send_initial_metadata)) {
1437
+ s->seen_error = true;
1438
+ }
1439
+ if (!s->write_closed) {
1440
+ if (t->is_client) {
1441
+ if (t->closed_with_error == GRPC_ERROR_NONE) {
1442
+ GPR_ASSERT(s->id == 0);
1443
+ grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1444
+ maybe_start_some_streams(t);
1451
1445
  } 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
- }
1446
+ grpc_chttp2_cancel_stream(
1447
+ t, s,
1448
+ grpc_error_set_int(
1449
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1450
+ "Transport closed", &t->closed_with_error, 1),
1451
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1460
1452
  }
1461
1453
  } 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");
1454
+ GPR_ASSERT(s->id != 0);
1455
+ grpc_chttp2_mark_stream_writable(t, s);
1456
+ if (!(op->send_message &&
1457
+ (op->payload->send_message.send_message->flags() &
1458
+ GRPC_WRITE_BUFFER_HINT))) {
1459
+ grpc_chttp2_initiate_write(
1460
+ t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1461
+ }
1469
1462
  }
1463
+ } else {
1464
+ s->send_initial_metadata = nullptr;
1465
+ grpc_chttp2_complete_closure_step(
1466
+ t, s, &s->send_initial_metadata_finished,
1467
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1468
+ "Attempt to send initial metadata after stream was closed",
1469
+ &s->write_closed_error, 1),
1470
+ "send_initial_metadata_finished");
1470
1471
  }
1471
1472
  if (op_payload->send_initial_metadata.peer_string != nullptr) {
1472
1473
  gpr_atm_rel_store(op_payload->send_initial_metadata.peer_string,
1473
- (gpr_atm)t->peer_string);
1474
+ (gpr_atm)t->peer_string.c_str());
1474
1475
  }
1475
1476
  }
1476
1477
 
@@ -1526,47 +1527,29 @@ static void perform_stream_op_locked(void* stream_op,
1526
1527
  s->send_trailing_metadata_finished = add_closure_barrier(on_complete);
1527
1528
  s->send_trailing_metadata =
1528
1529
  op_payload->send_trailing_metadata.send_trailing_metadata;
1530
+ s->sent_trailing_metadata_op = op_payload->send_trailing_metadata.sent;
1529
1531
  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
- }
1532
+ if (contains_non_ok_status(s->send_trailing_metadata)) {
1533
+ s->seen_error = true;
1534
+ }
1535
+ if (s->write_closed) {
1536
+ s->send_trailing_metadata = nullptr;
1537
+ s->sent_trailing_metadata_op = nullptr;
1538
+ grpc_chttp2_complete_closure_step(
1539
+ t, s, &s->send_trailing_metadata_finished,
1540
+ grpc_metadata_batch_is_empty(
1541
+ op->payload->send_trailing_metadata.send_trailing_metadata)
1542
+ ? GRPC_ERROR_NONE
1543
+ : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1544
+ "Attempt to send trailing metadata after "
1545
+ "stream was closed"),
1546
+ "send_trailing_metadata_finished");
1547
+ } else if (s->id != 0) {
1548
+ // TODO(ctiller): check if there's flow control for any outstanding
1549
+ // bytes before going writable
1550
+ grpc_chttp2_mark_stream_writable(t, s);
1551
+ grpc_chttp2_initiate_write(
1552
+ t, GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA);
1570
1553
  }
1571
1554
  }
1572
1555
 
@@ -1581,7 +1564,7 @@ static void perform_stream_op_locked(void* stream_op,
1581
1564
  op_payload->recv_initial_metadata.trailing_metadata_available;
1582
1565
  if (op_payload->recv_initial_metadata.peer_string != nullptr) {
1583
1566
  gpr_atm_rel_store(op_payload->recv_initial_metadata.peer_string,
1584
- (gpr_atm)t->peer_string);
1567
+ (gpr_atm)t->peer_string.c_str());
1585
1568
  }
1586
1569
  grpc_chttp2_maybe_complete_recv_initial_metadata(t, s);
1587
1570
  }
@@ -1652,9 +1635,8 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1652
1635
  }
1653
1636
 
1654
1637
  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);
1638
+ gpr_log(GPR_INFO, "perform_stream_op[s=%p]: %s", s,
1639
+ grpc_transport_stream_op_batch_string(op).c_str());
1658
1640
  }
1659
1641
 
1660
1642
  GRPC_CHTTP2_STREAM_REF(s, "perform_stream_op");
@@ -1665,8 +1647,8 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1665
1647
  }
1666
1648
 
1667
1649
  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 */
1650
+ // callback remaining pings: they're not allowed to call into the transport,
1651
+ // and maybe they hold resources that need to be freed
1670
1652
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1671
1653
  GPR_ASSERT(error != GRPC_ERROR_NONE);
1672
1654
  for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
@@ -1692,11 +1674,9 @@ static void send_ping_locked(grpc_chttp2_transport* t,
1692
1674
  GRPC_ERROR_NONE);
1693
1675
  }
1694
1676
 
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
- */
1677
+ // Specialized form of send_ping_locked for keepalive ping. If there is already
1678
+ // a ping in progress, the keepalive ping would piggyback onto that ping,
1679
+ // instead of waiting for that ping to complete and then starting a new ping.
1700
1680
  static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1701
1681
  if (t->closed_with_error != GRPC_ERROR_NONE) {
1702
1682
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
@@ -1710,7 +1690,7 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1710
1690
  }
1711
1691
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1712
1692
  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. */
1693
+ // There is a ping in flight. Add yourself to the inflight closure list.
1714
1694
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
1715
1695
  start_keepalive_ping_locked, t, nullptr),
1716
1696
  GRPC_ERROR_REF(t->closed_with_error));
@@ -1752,9 +1732,8 @@ static void retry_initiate_ping_locked(void* tp, grpc_error* error) {
1752
1732
  void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1753
1733
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1754
1734
  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);
1735
+ gpr_log(GPR_DEBUG, "Unknown ping response from %s: %" PRIx64,
1736
+ t->peer_string.c_str(), id);
1758
1737
  return;
1759
1738
  }
1760
1739
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION,
@@ -1765,8 +1744,8 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1765
1744
  }
1766
1745
 
1767
1746
  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,
1747
+ // We want to log this irrespective of whether http tracing is enabled
1748
+ gpr_log(GPR_INFO, "%s: Sending goaway err=%s", t->peer_string.c_str(),
1770
1749
  grpc_error_string(error));
1771
1750
  t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED;
1772
1751
  grpc_http2_error_code http_error;
@@ -1787,7 +1766,7 @@ void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
1787
1766
  grpc_error_set_int(
1788
1767
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("too_many_pings"),
1789
1768
  GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM));
1790
- /*The transport will be closed after the write is done */
1769
+ // The transport will be closed after the write is done
1791
1770
  close_transport_locked(
1792
1771
  t, grpc_error_set_int(
1793
1772
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many pings"),
@@ -1795,6 +1774,15 @@ void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
1795
1774
  }
1796
1775
  }
1797
1776
 
1777
+ void grpc_chttp2_reset_ping_clock(grpc_chttp2_transport* t) {
1778
+ if (!t->is_client) {
1779
+ t->ping_recv_state.last_ping_recv_time = GRPC_MILLIS_INF_PAST;
1780
+ t->ping_recv_state.ping_strikes = 0;
1781
+ }
1782
+ t->ping_state.pings_before_data_required =
1783
+ t->ping_policy.max_pings_without_data;
1784
+ }
1785
+
1798
1786
  static void perform_transport_op_locked(void* stream_op,
1799
1787
  grpc_error* /*error_ignored*/) {
1800
1788
  grpc_transport_op* op = static_cast<grpc_transport_op*>(stream_op);
@@ -1843,9 +1831,8 @@ static void perform_transport_op_locked(void* stream_op,
1843
1831
  static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
1844
1832
  grpc_chttp2_transport* t = reinterpret_cast<grpc_chttp2_transport*>(gt);
1845
1833
  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);
1834
+ gpr_log(GPR_INFO, "perform_transport_op[t=%p]: %s", t,
1835
+ grpc_transport_op_string(op).c_str());
1849
1836
  }
1850
1837
  op->handler_private.extra_arg = gt;
1851
1838
  GRPC_CHTTP2_REF_TRANSPORT(t, "transport_op");
@@ -1854,9 +1841,9 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
1854
1841
  GRPC_ERROR_NONE);
1855
1842
  }
1856
1843
 
1857
- /*******************************************************************************
1858
- * INPUT PROCESSING - GENERAL
1859
- */
1844
+ //
1845
+ // INPUT PROCESSING - GENERAL
1846
+ //
1860
1847
 
1861
1848
  void grpc_chttp2_maybe_complete_recv_initial_metadata(
1862
1849
  grpc_chttp2_transport* /*t*/, grpc_chttp2_stream* s) {
@@ -1976,8 +1963,8 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
1976
1963
  s->unprocessed_incoming_frames_buffer.length > 0;
1977
1964
  if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
1978
1965
  !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. */
1966
+ // Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
1967
+ // maybe decompress the next 5 bytes in the stream.
1981
1968
  if (s->stream_decompression_method ==
1982
1969
  GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
1983
1970
  grpc_slice_buffer_move_first(
@@ -2061,6 +2048,8 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2061
2048
  if (grpc_chttp2_list_remove_writable_stream(t, s)) {
2062
2049
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:remove_stream");
2063
2050
  }
2051
+ grpc_chttp2_list_remove_stalled_by_stream(t, s);
2052
+ grpc_chttp2_list_remove_stalled_by_transport(t, s);
2064
2053
 
2065
2054
  GRPC_ERROR_UNREF(error);
2066
2055
 
@@ -2099,12 +2088,12 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2099
2088
  if (status != GRPC_STATUS_OK) {
2100
2089
  s->seen_error = true;
2101
2090
  }
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 */
2091
+ // stream_global->recv_trailing_metadata_finished gives us a
2092
+ // last chance replacement: we've received trailing metadata,
2093
+ // but something more important has become available to signal
2094
+ // to the upper layers - drop what we've got, and then publish
2095
+ // what we want - which is safe because we haven't told anyone
2096
+ // about the metadata yet
2108
2097
  if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
2109
2098
  s->recv_trailing_metadata_finished != nullptr) {
2110
2099
  char status_string[GPR_LTOA_MIN_BUFSIZE];
@@ -2141,7 +2130,7 @@ static void add_error(grpc_error* error, grpc_error** refs, size_t* nrefs) {
2141
2130
  }
2142
2131
 
2143
2132
  static grpc_error* removal_error(grpc_error* extra_error, grpc_chttp2_stream* s,
2144
- const char* master_error_msg) {
2133
+ const char* main_error_msg) {
2145
2134
  grpc_error* refs[3];
2146
2135
  size_t nrefs = 0;
2147
2136
  add_error(s->read_closed_error, refs, &nrefs);
@@ -2149,7 +2138,7 @@ static grpc_error* removal_error(grpc_error* extra_error, grpc_chttp2_stream* s,
2149
2138
  add_error(extra_error, refs, &nrefs);
2150
2139
  grpc_error* error = GRPC_ERROR_NONE;
2151
2140
  if (nrefs > 0) {
2152
- error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(master_error_msg,
2141
+ error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(main_error_msg,
2153
2142
  refs, nrefs);
2154
2143
  }
2155
2144
  GRPC_ERROR_UNREF(extra_error);
@@ -2179,6 +2168,7 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2179
2168
  "send_initial_metadata_finished");
2180
2169
 
2181
2170
  s->send_trailing_metadata = nullptr;
2171
+ s->sent_trailing_metadata_op = nullptr;
2182
2172
  grpc_chttp2_complete_closure_step(t, s, &s->send_trailing_metadata_finished,
2183
2173
  GRPC_ERROR_REF(error),
2184
2174
  "send_trailing_metadata_finished");
@@ -2195,9 +2185,12 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2195
2185
  grpc_chttp2_stream* s, int close_reads,
2196
2186
  int close_writes, grpc_error* error) {
2197
2187
  if (s->read_closed && s->write_closed) {
2198
- /* already closed */
2188
+ // already closed, but we should still fake the status if needed.
2189
+ grpc_error* overall_error = removal_error(error, s, "Stream removed");
2190
+ if (overall_error != GRPC_ERROR_NONE) {
2191
+ grpc_chttp2_fake_status(t, s, overall_error);
2192
+ }
2199
2193
  grpc_chttp2_maybe_complete_recv_trailing_metadata(t, s);
2200
- GRPC_ERROR_UNREF(error);
2201
2194
  return;
2202
2195
  }
2203
2196
  bool closed_read = false;
@@ -2219,7 +2212,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2219
2212
  if (s->id != 0) {
2220
2213
  remove_stream(t, s->id, GRPC_ERROR_REF(overall_error));
2221
2214
  } else {
2222
- /* Purge streams waiting on concurrency still waiting for id assignment */
2215
+ // Purge streams waiting on concurrency still waiting for id assignment
2223
2216
  grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
2224
2217
  }
2225
2218
  if (overall_error != GRPC_ERROR_NONE) {
@@ -2258,12 +2251,12 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2258
2251
 
2259
2252
  GPR_ASSERT(grpc_status >= 0 && (int)grpc_status < 100);
2260
2253
 
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. */
2254
+ // Hand roll a header block.
2255
+ // This is unnecessarily ugly - at some point we should find a more
2256
+ // elegant solution.
2257
+ // It's complicated by the fact that our send machinery would be dead by
2258
+ // the time we got around to sending this, so instead we ignore HPACK
2259
+ // compression and just write the uncompressed bytes onto the wire.
2267
2260
  if (!s->sent_initial_metadata) {
2268
2261
  http_status_hdr = GRPC_SLICE_MALLOC(13);
2269
2262
  p = GRPC_SLICE_START_PTR(http_status_hdr);
@@ -2392,6 +2385,7 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2392
2385
  grpc_slice_buffer_add(&t->qbuf, status_hdr);
2393
2386
  grpc_slice_buffer_add(&t->qbuf, message_pfx);
2394
2387
  grpc_slice_buffer_add(&t->qbuf, grpc_slice_ref_internal(slice));
2388
+ grpc_chttp2_reset_ping_clock(t);
2395
2389
  grpc_chttp2_add_rst_stream_to_next_write(t, s->id, GRPC_HTTP2_NO_ERROR,
2396
2390
  &s->stats.outgoing);
2397
2391
 
@@ -2399,10 +2393,10 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2399
2393
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API);
2400
2394
  }
2401
2395
 
2402
- typedef struct {
2396
+ struct cancel_stream_cb_args {
2403
2397
  grpc_error* error;
2404
2398
  grpc_chttp2_transport* t;
2405
- } cancel_stream_cb_args;
2399
+ };
2406
2400
 
2407
2401
  static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
2408
2402
  cancel_stream_cb_args* args = static_cast<cancel_stream_cb_args*>(user_data);
@@ -2423,9 +2417,9 @@ static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error) {
2423
2417
  GRPC_ERROR_UNREF(error);
2424
2418
  }
2425
2419
 
2426
- /*******************************************************************************
2427
- * INPUT PROCESSING - PARSING
2428
- */
2420
+ //
2421
+ // INPUT PROCESSING - PARSING
2422
+ //
2429
2423
 
2430
2424
  template <class F>
2431
2425
  static void WithUrgency(grpc_chttp2_transport* t,
@@ -2483,7 +2477,8 @@ static grpc_error* try_http_parsing(grpc_chttp2_transport* t) {
2483
2477
  grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2484
2478
  "Trying to connect an http1.x server"),
2485
2479
  GRPC_ERROR_INT_HTTP_STATUS, response.status),
2486
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
2480
+ GRPC_ERROR_INT_GRPC_STATUS,
2481
+ grpc_http2_status_to_grpc_status(response.status));
2487
2482
  }
2488
2483
  GRPC_ERROR_UNREF(parse_error);
2489
2484
 
@@ -2521,11 +2516,6 @@ static void read_action_locked(void* tp, grpc_error* error) {
2521
2516
  grpc_error* errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2522
2517
  GRPC_ERROR_NONE};
2523
2518
  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
2519
  errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
2530
2520
  }
2531
2521
  if (errors[1] != GRPC_ERROR_NONE) {
@@ -2559,8 +2549,8 @@ static void read_action_locked(void* tp, grpc_error* error) {
2559
2549
  "Transport closed", &t->closed_with_error, 1);
2560
2550
  }
2561
2551
  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 */
2552
+ // If a goaway frame was received, this might be the reason why the read
2553
+ // failed. Add this info to the error
2564
2554
  if (t->goaway_error != GRPC_ERROR_NONE) {
2565
2555
  error = grpc_error_add_child(error, GRPC_ERROR_REF(t->goaway_error));
2566
2556
  }
@@ -2569,7 +2559,7 @@ static void read_action_locked(void* tp, grpc_error* error) {
2569
2559
  t->endpoint_reading = 0;
2570
2560
  } else if (t->closed_with_error == GRPC_ERROR_NONE) {
2571
2561
  keep_reading = true;
2572
- /* Since we have read a byte, reset the keepalive timer */
2562
+ // Since we have read a byte, reset the keepalive timer
2573
2563
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2574
2564
  grpc_timer_cancel(&t->keepalive_ping_timer);
2575
2565
  }
@@ -2604,7 +2594,7 @@ static void continue_read_action_locked(grpc_chttp2_transport* t) {
2604
2594
 
2605
2595
  // t is reffed prior to calling the first time, and once the callback chain
2606
2596
  // that kicks off finishes, it's unreffed
2607
- static void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2597
+ void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2608
2598
  t->flow_control->bdp_estimator()->SchedulePing();
2609
2599
  send_ping_locked(
2610
2600
  t,
@@ -2612,6 +2602,7 @@ static void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2612
2602
  grpc_schedule_on_exec_ctx),
2613
2603
  GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked, finish_bdp_ping, t,
2614
2604
  grpc_schedule_on_exec_ctx));
2605
+ grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_BDP_PING);
2615
2606
  }
2616
2607
 
2617
2608
  static void start_bdp_ping(void* tp, grpc_error* error) {
@@ -2624,13 +2615,13 @@ static void start_bdp_ping(void* tp, grpc_error* error) {
2624
2615
  static void start_bdp_ping_locked(void* tp, grpc_error* error) {
2625
2616
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2626
2617
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2627
- gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string,
2618
+ gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
2628
2619
  grpc_error_string(error));
2629
2620
  }
2630
2621
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2631
2622
  return;
2632
2623
  }
2633
- /* Reset the keepalive ping timer */
2624
+ // Reset the keepalive ping timer
2634
2625
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2635
2626
  grpc_timer_cancel(&t->keepalive_ping_timer);
2636
2627
  }
@@ -2648,7 +2639,7 @@ static void finish_bdp_ping(void* tp, grpc_error* error) {
2648
2639
  static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2649
2640
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2650
2641
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2651
- gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string,
2642
+ gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
2652
2643
  grpc_error_string(error));
2653
2644
  }
2654
2645
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
@@ -2656,8 +2647,8 @@ static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2656
2647
  return;
2657
2648
  }
2658
2649
  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. */
2650
+ // start_bdp_ping_locked has not been run yet. Schedule
2651
+ // finish_bdp_ping_locked to be run later.
2661
2652
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
2662
2653
  finish_bdp_ping_locked, t, nullptr),
2663
2654
  GRPC_ERROR_REF(error));
@@ -2691,7 +2682,13 @@ static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error) {
2691
2682
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2692
2683
  return;
2693
2684
  }
2694
- schedule_bdp_ping_locked(t);
2685
+ if (t->flow_control->bdp_estimator()->accumulator() == 0) {
2686
+ // Block the bdp ping till we receive more data.
2687
+ t->bdp_ping_blocked = true;
2688
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2689
+ } else {
2690
+ schedule_bdp_ping_locked(t);
2691
+ }
2695
2692
  }
2696
2693
 
2697
2694
  void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
@@ -2740,14 +2737,6 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
2740
2737
  GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
2741
2738
  g_default_max_pings_without_data = grpc_channel_arg_get_integer(
2742
2739
  &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
2740
  } else if (0 ==
2752
2741
  strcmp(
2753
2742
  args->args[i].key,
@@ -2790,7 +2779,7 @@ static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2790
2779
  &t->init_keepalive_ping_locked);
2791
2780
  }
2792
2781
  } else if (error == GRPC_ERROR_CANCELLED) {
2793
- /* The keepalive ping timer may be cancelled by bdp */
2782
+ // The keepalive ping timer may be cancelled by bdp
2794
2783
  GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
2795
2784
  GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
2796
2785
  grpc_schedule_on_exec_ctx);
@@ -2816,8 +2805,9 @@ static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2816
2805
  if (t->channelz_socket != nullptr) {
2817
2806
  t->channelz_socket->RecordKeepaliveSent();
2818
2807
  }
2819
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2820
- gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string);
2808
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2809
+ GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2810
+ gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string.c_str());
2821
2811
  }
2822
2812
  GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive watchdog");
2823
2813
  GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
@@ -2839,12 +2829,13 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
2839
2829
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2840
2830
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2841
2831
  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);
2832
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2833
+ GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2834
+ gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
2844
2835
  }
2845
2836
  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. */
2837
+ // start_keepalive_ping_locked has not run yet. Reschedule
2838
+ // finish_keepalive_ping_locked for it to be run later.
2848
2839
  t->combiner->Run(
2849
2840
  GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
2850
2841
  finish_keepalive_ping_locked, t, nullptr),
@@ -2877,8 +2868,8 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2877
2868
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2878
2869
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2879
2870
  if (error == GRPC_ERROR_NONE) {
2880
- gpr_log(GPR_ERROR, "%s: Keepalive watchdog fired. Closing transport.",
2881
- t->peer_string);
2871
+ gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
2872
+ t->peer_string.c_str());
2882
2873
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2883
2874
  close_transport_locked(
2884
2875
  t, grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -2887,8 +2878,8 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2887
2878
  GRPC_STATUS_UNAVAILABLE));
2888
2879
  }
2889
2880
  } else {
2890
- /* The watchdog timer should have been cancelled by
2891
- * finish_keepalive_ping_locked. */
2881
+ // The watchdog timer should have been cancelled by
2882
+ // finish_keepalive_ping_locked.
2892
2883
  if (GPR_UNLIKELY(error != GRPC_ERROR_CANCELLED)) {
2893
2884
  gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
2894
2885
  t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
@@ -2897,21 +2888,22 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2897
2888
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
2898
2889
  }
2899
2890
 
2900
- /*******************************************************************************
2901
- * CALLBACK LOOP
2902
- */
2891
+ //
2892
+ // CALLBACK LOOP
2893
+ //
2903
2894
 
2904
2895
  static void connectivity_state_set(grpc_chttp2_transport* t,
2905
2896
  grpc_connectivity_state state,
2897
+ const absl::Status& status,
2906
2898
  const char* reason) {
2907
2899
  GRPC_CHTTP2_IF_TRACING(
2908
2900
  gpr_log(GPR_INFO, "transport %p set connectivity_state=%d", t, state));
2909
- t->state_tracker.SetState(state, reason);
2901
+ t->state_tracker.SetState(state, status, reason);
2910
2902
  }
2911
2903
 
2912
- /*******************************************************************************
2913
- * POLLSET STUFF
2914
- */
2904
+ //
2905
+ // POLLSET STUFF
2906
+ //
2915
2907
 
2916
2908
  static void set_pollset(grpc_transport* gt, grpc_stream* /*gs*/,
2917
2909
  grpc_pollset* pollset) {
@@ -2925,9 +2917,9 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
2925
2917
  grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
2926
2918
  }
2927
2919
 
2928
- /*******************************************************************************
2929
- * BYTE STREAM
2930
- */
2920
+ //
2921
+ // BYTE STREAM
2922
+ //
2931
2923
 
2932
2924
  static void reset_byte_stream(void* arg, grpc_error* error) {
2933
2925
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
@@ -3015,7 +3007,7 @@ void Chttp2IncomingByteStream::NextLocked(void* arg,
3015
3007
  s->data_parser.parsing_frame = nullptr;
3016
3008
  }
3017
3009
  } else {
3018
- /* Should never reach here. */
3010
+ // Should never reach here.
3019
3011
  GPR_ASSERT(false);
3020
3012
  }
3021
3013
  } else {
@@ -3144,9 +3136,9 @@ void Chttp2IncomingByteStream::Shutdown(grpc_error* error) {
3144
3136
 
3145
3137
  } // namespace grpc_core
3146
3138
 
3147
- /*******************************************************************************
3148
- * RESOURCE QUOTAS
3149
- */
3139
+ //
3140
+ // RESOURCE QUOTAS
3141
+ //
3150
3142
 
3151
3143
  static void post_benign_reclaimer(grpc_chttp2_transport* t) {
3152
3144
  if (!t->benign_reclaimer_registered) {
@@ -3181,11 +3173,11 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3181
3173
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3182
3174
  if (error == GRPC_ERROR_NONE &&
3183
3175
  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 */
3176
+ // Channel with no active streams: send a goaway to try and make it
3177
+ // disconnect cleanly
3186
3178
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3187
3179
  gpr_log(GPR_INFO, "HTTP2: %s - send goaway to free memory",
3188
- t->peer_string);
3180
+ t->peer_string.c_str());
3189
3181
  }
3190
3182
  send_goaway(t,
3191
3183
  grpc_error_set_int(
@@ -3196,7 +3188,8 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3196
3188
  gpr_log(GPR_INFO,
3197
3189
  "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
3198
3190
  " streams",
3199
- t->peer_string, grpc_chttp2_stream_map_size(&t->stream_map));
3191
+ t->peer_string.c_str(),
3192
+ grpc_chttp2_stream_map_size(&t->stream_map));
3200
3193
  }
3201
3194
  t->benign_reclaimer_registered = false;
3202
3195
  if (error != GRPC_ERROR_CANCELLED) {
@@ -3221,8 +3214,8 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3221
3214
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
3222
3215
  grpc_chttp2_stream_map_rand(&t->stream_map));
3223
3216
  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);
3217
+ gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d",
3218
+ t->peer_string.c_str(), s->id);
3226
3219
  }
3227
3220
  grpc_chttp2_cancel_stream(
3228
3221
  t, s,
@@ -3230,10 +3223,10 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3230
3223
  GRPC_ERROR_INT_HTTP2_ERROR,
3231
3224
  GRPC_HTTP2_ENHANCE_YOUR_CALM));
3232
3225
  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 */
3226
+ // Since we cancel one stream per destructive reclamation, if
3227
+ // there are more streams left, we can immediately post a new
3228
+ // reclaimer in case the resource quota needs to free more
3229
+ // memory
3237
3230
  post_destructive_reclaimer(t);
3238
3231
  }
3239
3232
  }
@@ -3244,9 +3237,9 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3244
3237
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
3245
3238
  }
3246
3239
 
3247
- /*******************************************************************************
3248
- * MONITORING
3249
- */
3240
+ //
3241
+ // MONITORING
3242
+ //
3250
3243
 
3251
3244
  const char* grpc_chttp2_initiate_write_reason_string(
3252
3245
  grpc_chttp2_initiate_write_reason reason) {
@@ -3283,6 +3276,8 @@ const char* grpc_chttp2_initiate_write_reason_string(
3283
3276
  return "FLOW_CONTROL_UNSTALLED_BY_UPDATE";
3284
3277
  case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
3285
3278
  return "APPLICATION_PING";
3279
+ case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
3280
+ return "BDP_PING";
3286
3281
  case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
3287
3282
  return "KEEPALIVE_PING";
3288
3283
  case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED:
@@ -3329,7 +3324,7 @@ grpc_transport* grpc_create_chttp2_transport(
3329
3324
 
3330
3325
  void grpc_chttp2_transport_start_reading(
3331
3326
  grpc_transport* transport, grpc_slice_buffer* read_buffer,
3332
- grpc_closure* notify_on_receive_settings) {
3327
+ grpc_closure* notify_on_receive_settings, grpc_closure* notify_on_close) {
3333
3328
  grpc_chttp2_transport* t =
3334
3329
  reinterpret_cast<grpc_chttp2_transport*>(transport);
3335
3330
  GRPC_CHTTP2_REF_TRANSPORT(
@@ -3339,6 +3334,7 @@ void grpc_chttp2_transport_start_reading(
3339
3334
  gpr_free(read_buffer);
3340
3335
  }
3341
3336
  t->notify_on_receive_settings = notify_on_receive_settings;
3337
+ t->notify_on_close = notify_on_close;
3342
3338
  t->combiner->Run(
3343
3339
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
3344
3340
  GRPC_ERROR_NONE);