grpc 1.31.0.pre2 → 1.34.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 (944) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1030 -16151
  3. data/include/grpc/grpc.h +1 -7
  4. data/include/grpc/grpc_security.h +196 -186
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +9 -7
  7. data/include/grpc/impl/codegen/port_platform.h +28 -56
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  9. data/src/core/ext/filters/client_channel/client_channel.cc +243 -188
  10. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  12. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  13. data/src/core/ext/filters/client_channel/config_selector.h +36 -8
  14. data/src/core/ext/filters/client_channel/health/health_check_client.cc +10 -2
  15. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  16. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +3 -4
  17. data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
  18. data/src/core/ext/filters/client_channel/lb_policy.h +6 -4
  19. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  20. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  21. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -7
  22. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +178 -162
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -17
  29. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +79 -30
  30. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -9
  31. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +14 -34
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +26 -15
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +208 -130
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +299 -328
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
  38. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  39. data/src/core/ext/filters/client_channel/resolver.cc +3 -1
  40. data/src/core/ext/filters/client_channel/resolver.h +4 -1
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -2
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +661 -58
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  52. data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
  53. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +18 -61
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -3
  55. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +50 -48
  56. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +7 -11
  57. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
  58. data/src/core/ext/filters/client_channel/server_address.cc +120 -7
  59. data/src/core/ext/filters/client_channel/server_address.h +44 -21
  60. data/src/core/ext/filters/client_channel/service_config.cc +18 -13
  61. data/src/core/ext/filters/client_channel/service_config.h +8 -5
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  63. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  64. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  65. data/src/core/ext/filters/client_channel/subchannel.cc +82 -38
  66. data/src/core/ext/filters/client_channel/subchannel.h +18 -6
  67. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  68. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  69. data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
  70. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  71. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  72. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  73. data/src/core/ext/filters/max_age/max_age_filter.cc +3 -2
  74. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  75. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  76. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  77. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +19 -2
  78. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  79. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +36 -28
  80. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
  81. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
  83. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
  84. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  85. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -311
  86. data/src/core/ext/transport/chttp2/transport/flow_control.cc +11 -3
  87. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -2
  88. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  89. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  90. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  91. data/src/core/ext/transport/chttp2/transport/internal.h +10 -2
  92. data/src/core/ext/transport/chttp2/transport/parsing.cc +19 -31
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -7
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
  95. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +244 -0
  96. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +766 -0
  97. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  98. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  99. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +458 -0
  100. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1635 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  103. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  104. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +379 -0
  107. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +310 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +351 -0
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +752 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  121. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  122. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  123. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +176 -0
  124. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +645 -0
  125. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  126. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  127. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  128. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  129. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
  130. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
  131. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  132. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  133. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  134. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  135. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  136. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  137. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  138. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  139. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +128 -0
  140. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +467 -0
  141. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +155 -0
  142. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +539 -0
  143. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  144. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  145. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
  146. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +616 -0
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  149. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +900 -0
  150. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3290 -0
  151. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
  152. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +139 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  155. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +364 -0
  156. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1336 -0
  157. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  158. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  159. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +110 -0
  160. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +387 -0
  161. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +76 -0
  162. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +214 -0
  163. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +147 -0
  164. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +570 -0
  165. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  166. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  167. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  168. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  169. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +139 -0
  170. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +449 -0
  171. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  172. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  173. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  174. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  175. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  176. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  177. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  178. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  179. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  180. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  181. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  182. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  183. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  184. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  185. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  186. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  187. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  188. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  189. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +54 -0
  190. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +133 -0
  191. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  192. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  193. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  194. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  195. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  196. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  197. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  198. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  200. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  201. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  202. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  203. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  204. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  205. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  206. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
  207. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  208. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  209. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
  210. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
  211. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  212. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
  213. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  214. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  215. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
  216. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
  217. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
  218. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
  219. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
  220. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
  221. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
  222. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
  223. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
  224. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
  225. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
  226. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
  227. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  228. data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
  229. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  230. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  231. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  232. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  233. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
  234. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  235. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  236. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  237. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
  238. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  239. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  240. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  241. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
  242. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  243. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  244. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  245. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  246. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  247. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
  248. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
  249. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  250. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  251. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  252. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  253. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  254. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  255. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  256. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  257. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  258. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  259. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  260. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  261. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  262. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  263. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
  264. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  265. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  266. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  267. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
  268. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  269. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
  270. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  271. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  272. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  273. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  274. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  275. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  276. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  277. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
  278. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  279. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
  280. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  281. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
  282. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  283. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
  284. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  285. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
  286. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
  287. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  288. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  289. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
  290. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  291. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
  292. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  293. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  294. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  295. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
  296. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  297. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
  298. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  299. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
  300. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  301. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  302. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  303. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  304. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  305. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
  306. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
  307. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
  308. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  309. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
  310. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  311. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
  312. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  313. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
  314. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  315. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  316. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  317. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  318. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  319. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  320. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  321. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  322. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  323. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  324. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  325. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
  326. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  327. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  328. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  329. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  330. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  331. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  332. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  333. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  334. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -9
  335. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  336. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  337. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  338. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  339. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  340. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  341. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  342. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  343. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  344. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  345. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
  346. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  347. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  348. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  349. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
  350. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  351. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  352. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  353. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  354. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  355. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
  356. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  357. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  358. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  359. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  360. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  361. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  362. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  363. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  364. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  365. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  366. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  367. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  368. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  369. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  370. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  371. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
  372. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
  373. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
  374. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
  375. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
  376. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
  377. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
  378. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
  379. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
  380. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
  381. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
  382. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
  383. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
  384. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  385. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  386. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  387. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  388. data/src/core/ext/xds/certificate_provider_store.cc +84 -0
  389. data/src/core/ext/xds/certificate_provider_store.h +107 -0
  390. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
  391. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
  392. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +265 -0
  393. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +104 -0
  394. data/src/core/ext/xds/xds_api.cc +2119 -0
  395. data/src/core/ext/xds/xds_api.h +438 -0
  396. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +208 -19
  397. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +31 -10
  398. data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
  399. data/src/core/ext/xds/xds_certificate_provider.h +74 -0
  400. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
  401. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +636 -847
  402. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +120 -98
  403. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +61 -18
  404. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +38 -10
  405. data/src/core/lib/channel/channel_args.cc +2 -1
  406. data/src/core/lib/channel/channel_args.h +0 -1
  407. data/src/core/lib/channel/channel_trace.cc +4 -2
  408. data/src/core/lib/channel/channelz.cc +24 -60
  409. data/src/core/lib/channel/channelz.h +14 -22
  410. data/src/core/lib/channel/channelz_registry.cc +15 -12
  411. data/src/core/lib/channel/channelz_registry.h +3 -0
  412. data/src/core/lib/channel/handshaker.h +2 -2
  413. data/src/core/lib/compression/compression.cc +8 -4
  414. data/src/core/lib/compression/compression_internal.cc +10 -5
  415. data/src/core/lib/compression/compression_internal.h +2 -1
  416. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  417. data/src/core/lib/debug/stats_data.cc +1 -0
  418. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  419. data/src/core/lib/gpr/log_linux.cc +17 -3
  420. data/src/core/lib/gpr/log_posix.cc +13 -1
  421. data/src/core/lib/gpr/log_windows.cc +16 -4
  422. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  423. data/src/core/lib/gpr/string.cc +1 -1
  424. data/src/core/lib/gpr/sync_posix.cc +2 -8
  425. data/src/core/lib/gpr/time_precise.cc +5 -2
  426. data/src/core/lib/gpr/time_precise.h +6 -2
  427. data/src/core/lib/gpr/tls.h +4 -0
  428. data/src/core/lib/gpr/tls_msvc.h +2 -0
  429. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  430. data/src/core/lib/gpr/useful.h +5 -4
  431. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  432. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  433. data/src/core/lib/gprpp/examine_stack.h +46 -0
  434. data/src/core/lib/gprpp/fork.cc +2 -2
  435. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  436. data/src/core/lib/gprpp/orphanable.h +4 -8
  437. data/src/core/lib/gprpp/ref_counted.h +91 -68
  438. data/src/core/lib/gprpp/ref_counted_ptr.h +158 -7
  439. data/src/core/lib/gprpp/stat.h +38 -0
  440. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  441. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  442. data/src/core/lib/gprpp/thd.h +2 -2
  443. data/src/core/lib/gprpp/thd_posix.cc +36 -36
  444. data/src/core/lib/http/parser.cc +46 -25
  445. data/src/core/lib/iomgr/endpoint.cc +5 -1
  446. data/src/core/lib/iomgr/endpoint.h +7 -3
  447. data/src/core/lib/iomgr/endpoint_cfstream.cc +36 -11
  448. data/src/core/lib/iomgr/error.cc +2 -1
  449. data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
  450. data/src/core/lib/iomgr/ev_posix.cc +0 -2
  451. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  452. data/src/core/lib/iomgr/exec_ctx.h +10 -8
  453. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  454. data/src/core/lib/iomgr/executor/threadpool.h +3 -3
  455. data/src/core/lib/iomgr/iomgr.cc +0 -10
  456. data/src/core/lib/iomgr/iomgr.h +0 -10
  457. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +85 -7
  458. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +23 -3
  459. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  460. data/src/core/lib/iomgr/python_util.h +3 -3
  461. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  462. data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
  463. data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
  464. data/src/core/lib/iomgr/tcp_custom.cc +32 -16
  465. data/src/core/lib/iomgr/tcp_posix.cc +34 -15
  466. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  467. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  468. data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
  469. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  470. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  471. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  472. data/src/core/lib/json/json.h +2 -2
  473. data/src/core/lib/json/json_reader.cc +8 -4
  474. data/src/core/lib/json/json_util.cc +58 -0
  475. data/src/core/lib/json/json_util.h +204 -0
  476. data/src/core/lib/json/json_writer.cc +2 -1
  477. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  478. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  479. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  480. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  481. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  482. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +44 -0
  483. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +69 -0
  484. data/src/core/lib/security/authorization/mock_cel/cel_value.h +97 -0
  485. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  486. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +57 -0
  487. data/src/core/lib/security/context/security_context.h +3 -1
  488. data/src/core/lib/security/credentials/credentials.cc +1 -1
  489. data/src/core/lib/security/credentials/credentials.h +3 -3
  490. data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
  491. data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
  492. data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
  493. data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
  494. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
  495. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
  496. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
  497. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
  498. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
  499. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
  500. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  501. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  502. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
  503. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
  504. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +351 -0
  505. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +218 -0
  506. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
  507. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +74 -0
  508. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
  509. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
  510. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
  511. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  512. data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
  513. data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
  514. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -14
  515. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
  516. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
  517. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  518. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  519. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  520. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  521. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  522. data/src/core/lib/security/security_connector/ssl_utils.h +9 -2
  523. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
  524. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
  525. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  526. data/src/core/lib/security/transport/security_handshaker.cc +1 -1
  527. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  528. data/src/core/lib/security/util/json_util.h +1 -0
  529. data/src/core/lib/slice/slice.cc +7 -4
  530. data/src/core/lib/slice/slice_buffer.cc +2 -1
  531. data/src/core/lib/slice/slice_intern.cc +2 -2
  532. data/src/core/lib/surface/call.cc +21 -20
  533. data/src/core/lib/surface/call.h +2 -1
  534. data/src/core/lib/surface/channel.cc +37 -51
  535. data/src/core/lib/surface/channel.h +18 -3
  536. data/src/core/lib/surface/completion_queue.cc +17 -278
  537. data/src/core/lib/surface/completion_queue.h +0 -8
  538. data/src/core/lib/surface/init.cc +27 -12
  539. data/src/core/lib/surface/server.cc +1069 -1245
  540. data/src/core/lib/surface/server.h +363 -87
  541. data/src/core/lib/surface/validate_metadata.h +3 -0
  542. data/src/core/lib/surface/version.cc +2 -2
  543. data/src/core/lib/transport/authority_override.cc +38 -0
  544. data/src/core/lib/transport/authority_override.h +34 -0
  545. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  546. data/src/core/lib/transport/bdp_estimator.h +2 -1
  547. data/src/core/lib/transport/byte_stream.h +3 -3
  548. data/src/core/lib/transport/connectivity_state.cc +18 -13
  549. data/src/core/lib/transport/connectivity_state.h +22 -10
  550. data/src/core/lib/transport/error_utils.cc +13 -0
  551. data/src/core/lib/transport/error_utils.h +6 -0
  552. data/src/core/lib/transport/metadata.cc +11 -1
  553. data/src/core/lib/transport/metadata.h +2 -2
  554. data/src/core/lib/transport/static_metadata.cc +295 -276
  555. data/src/core/lib/transport/static_metadata.h +80 -73
  556. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  557. data/src/core/lib/transport/transport.cc +5 -3
  558. data/src/core/lib/transport/transport.h +8 -1
  559. data/src/core/lib/uri/uri_parser.cc +23 -21
  560. data/src/core/lib/uri/uri_parser.h +3 -1
  561. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
  562. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +26 -3
  563. data/src/core/tsi/fake_transport_security.cc +1 -0
  564. data/src/core/tsi/local_transport_security.cc +5 -1
  565. data/src/core/tsi/local_transport_security.h +6 -7
  566. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
  567. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
  568. data/src/core/tsi/ssl_transport_security.cc +16 -9
  569. data/src/core/tsi/ssl_transport_security.h +3 -0
  570. data/src/core/tsi/transport_security.cc +4 -2
  571. data/src/ruby/bin/math_services_pb.rb +4 -4
  572. data/src/ruby/ext/grpc/extconf.rb +1 -1
  573. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  574. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -18
  575. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +43 -31
  576. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  577. data/src/ruby/lib/grpc/version.rb +1 -1
  578. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  579. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  580. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  581. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  582. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  583. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  584. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  585. data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
  586. data/src/ruby/spec/user_agent_spec.rb +74 -0
  587. data/third_party/abseil-cpp/absl/algorithm/container.h +1764 -0
  588. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  589. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  590. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  591. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  592. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  593. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  594. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +166 -0
  595. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  596. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  597. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  598. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  599. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  600. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  601. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  602. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  603. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  604. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  605. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  606. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  607. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  608. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  609. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  610. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  611. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  612. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  613. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  614. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  615. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  616. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  617. data/third_party/abseil-cpp/absl/container/fixed_array.h +532 -0
  618. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  619. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  620. data/third_party/abseil-cpp/absl/container/internal/common.h +206 -0
  621. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  622. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +460 -0
  623. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +161 -0
  624. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +208 -0
  625. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  626. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +270 -0
  627. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +321 -0
  628. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  629. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +50 -0
  630. data/third_party/abseil-cpp/absl/container/internal/layout.h +743 -0
  631. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  632. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1903 -0
  633. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +139 -0
  634. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  635. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1945 -0
  636. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  637. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  638. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  639. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +196 -0
  640. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +134 -0
  641. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +89 -0
  642. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +108 -0
  643. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  644. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  645. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +93 -0
  646. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  647. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +149 -0
  648. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +173 -0
  649. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  650. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  651. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  652. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +36 -0
  653. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  654. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  655. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1560 -0
  656. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  657. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  658. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  659. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  660. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  661. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  662. data/third_party/abseil-cpp/absl/hash/hash.h +325 -0
  663. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  664. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  665. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  666. data/third_party/abseil-cpp/absl/hash/internal/hash.h +996 -0
  667. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  668. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  669. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  670. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  671. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  672. data/third_party/abseil-cpp/absl/status/status.cc +445 -0
  673. data/third_party/abseil-cpp/absl/status/status.h +817 -0
  674. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +38 -0
  675. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  676. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  677. data/third_party/abseil-cpp/absl/strings/cord.cc +1998 -0
  678. data/third_party/abseil-cpp/absl/strings/cord.h +1276 -0
  679. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  680. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  681. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  682. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  683. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  684. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +173 -0
  685. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  686. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  687. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  688. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  689. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  690. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  691. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  692. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  693. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  694. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  695. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  696. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  697. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  698. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  699. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  700. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  701. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  702. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  703. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  704. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  705. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  706. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  707. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  708. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  709. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  710. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  711. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  712. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  713. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  714. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  715. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +249 -0
  716. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  717. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  718. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +492 -0
  719. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  720. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2739 -0
  721. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1065 -0
  722. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  723. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  724. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  725. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  726. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  727. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  728. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  729. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  730. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  731. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  732. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  733. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  734. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  735. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  736. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  737. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  738. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  739. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  740. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  741. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  742. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  743. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  744. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  745. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  746. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  747. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  748. data/third_party/boringssl-with-bazel/err_data.c +479 -467
  749. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
  750. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  751. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  752. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  753. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  754. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  755. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
  756. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  757. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  758. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  759. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  760. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  761. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +56 -22
  762. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
  763. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +543 -0
  764. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +237 -0
  765. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +118 -49
  766. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +267 -95
  767. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +210 -34
  768. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  769. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  770. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +6 -4
  771. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  772. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  773. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
  774. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
  775. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  776. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
  777. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  778. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  779. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
  780. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  781. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
  782. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  783. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  784. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
  785. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  786. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  787. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
  788. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  789. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  790. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
  791. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
  792. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
  793. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  794. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  795. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  796. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
  797. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  798. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +54 -0
  799. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
  800. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +6 -3
  801. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  802. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
  803. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  804. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  805. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
  806. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
  807. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
  808. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  809. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  810. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +103 -10
  811. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +5 -2
  812. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +42 -14
  813. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +199 -78
  814. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +482 -432
  815. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  816. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  817. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
  818. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
  819. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  820. data/third_party/boringssl-with-bazel/src/ssl/internal.h +49 -10
  821. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
  822. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  823. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  824. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +77 -0
  825. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
  826. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +250 -20
  827. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  828. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +57 -19
  829. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +140 -41
  830. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  831. data/third_party/upb/upb/decode.c +64 -15
  832. data/third_party/upb/upb/def.c +2169 -0
  833. data/third_party/upb/upb/def.h +330 -0
  834. data/third_party/upb/upb/def.hpp +525 -0
  835. data/third_party/upb/upb/encode.c +2 -2
  836. data/third_party/upb/upb/msg.h +2 -2
  837. data/third_party/upb/upb/port_def.inc +1 -1
  838. data/third_party/upb/upb/reflection.c +391 -0
  839. data/third_party/upb/upb/reflection.h +168 -0
  840. data/third_party/upb/upb/table.c +0 -11
  841. data/third_party/upb/upb/table.int.h +0 -9
  842. data/third_party/upb/upb/text_encode.c +398 -0
  843. data/third_party/upb/upb/text_encode.h +35 -0
  844. data/third_party/upb/upb/upb.c +16 -14
  845. data/third_party/upb/upb/upb.h +26 -0
  846. data/third_party/upb/upb/upb.hpp +2 -0
  847. metadata +489 -161
  848. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
  849. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1143
  850. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -2110
  851. data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -345
  852. data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
  853. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
  854. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  855. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
  856. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  857. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
  858. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  859. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
  860. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  861. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
  862. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
  863. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  864. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
  865. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  866. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
  867. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  868. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
  869. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  870. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
  871. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
  872. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  873. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
  874. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  875. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
  876. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  877. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
  878. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  879. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
  880. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  881. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
  882. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  883. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  884. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
  885. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
  886. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  887. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
  888. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
  889. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  890. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
  891. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  892. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
  893. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  894. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
  895. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  896. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
  897. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
  898. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  899. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
  900. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  901. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
  902. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  903. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
  904. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  905. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
  906. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
  907. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  908. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
  909. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  910. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
  911. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  912. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
  913. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  914. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
  915. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
  916. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  917. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
  918. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  919. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
  920. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  921. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  922. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  923. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
  924. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  925. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
  926. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  927. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
  928. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  929. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  930. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  931. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  932. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
  933. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
  934. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
  935. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  936. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
  937. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  938. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  939. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  940. data/src/core/lib/slice/slice_hash_table.h +0 -199
  941. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  942. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  943. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  944. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
@@ -24,12 +24,13 @@
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"
27
28
 
28
29
  namespace grpc_core {
29
30
 
30
31
  /// Adds a port to \a server. Sets \a port_num to the port number.
31
32
  /// Takes ownership of \a args.
32
- grpc_error* Chttp2ServerAddPort(grpc_server* server, const char* addr,
33
+ grpc_error* Chttp2ServerAddPort(Server* server, const char* addr,
33
34
  grpc_channel_args* args, int* port_num);
34
35
 
35
36
  } // namespace grpc_core
@@ -33,8 +33,8 @@ int grpc_server_add_insecure_http2_port(grpc_server* server, const char* addr) {
33
33
  GRPC_API_TRACE("grpc_server_add_insecure_http2_port(server=%p, addr=%s)", 2,
34
34
  (server, addr));
35
35
  grpc_error* err = grpc_core::Chttp2ServerAddPort(
36
- server, addr,
37
- grpc_channel_args_copy(grpc_server_get_channel_args(server)), &port_num);
36
+ server->core_server.get(), addr,
37
+ grpc_channel_args_copy(server->core_server->channel_args()), &port_num);
38
38
  if (err != GRPC_ERROR_NONE) {
39
39
  const char* msg = grpc_error_string(err);
40
40
  gpr_log(GPR_ERROR, "%s", msg);
@@ -41,21 +41,21 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
41
41
  GPR_ASSERT(reserved == nullptr);
42
42
 
43
43
  grpc_core::ExecCtx exec_ctx;
44
+ grpc_core::Server* core_server = server->core_server.get();
44
45
 
46
+ const grpc_channel_args* server_args = core_server->channel_args();
45
47
  std::string name = absl::StrCat("fd:", fd);
46
- grpc_endpoint* server_endpoint =
47
- grpc_tcp_create(grpc_fd_create(fd, name.c_str(), true),
48
- grpc_server_get_channel_args(server), name.c_str());
48
+ grpc_endpoint* server_endpoint = grpc_tcp_create(
49
+ grpc_fd_create(fd, name.c_str(), true), server_args, name.c_str());
49
50
 
50
- const grpc_channel_args* server_args = grpc_server_get_channel_args(server);
51
51
  grpc_transport* transport = grpc_create_chttp2_transport(
52
52
  server_args, server_endpoint, false /* is_client */);
53
53
 
54
- for (grpc_pollset* pollset : grpc_server_get_pollsets(server)) {
54
+ for (grpc_pollset* pollset : core_server->pollsets()) {
55
55
  grpc_endpoint_add_to_pollset(server_endpoint, pollset);
56
56
  }
57
57
 
58
- grpc_server_setup_transport(server, transport, nullptr, server_args, nullptr);
58
+ core_server->SetupTransport(transport, nullptr, server_args, nullptr);
59
59
  grpc_chttp2_transport_start_reading(transport, nullptr, nullptr);
60
60
  }
61
61
 
@@ -68,10 +68,11 @@ int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr,
68
68
  args_to_add[0] = grpc_server_credentials_to_arg(creds);
69
69
  args_to_add[1] = grpc_security_connector_to_arg(sc.get());
70
70
  args =
71
- grpc_channel_args_copy_and_add(grpc_server_get_channel_args(server),
71
+ grpc_channel_args_copy_and_add(server->core_server->channel_args(),
72
72
  args_to_add, GPR_ARRAY_SIZE(args_to_add));
73
73
  // Add server port.
74
- err = grpc_core::Chttp2ServerAddPort(server, addr, args, &port_num);
74
+ err = grpc_core::Chttp2ServerAddPort(server->core_server.get(), addr, args,
75
+ &port_num);
75
76
  done:
76
77
  sc.reset(DEBUG_LOCATION, "server");
77
78
 
@@ -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
@@ -1,25 +1,25 @@
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
 
21
+ #include "absl/strings/str_format.h"
22
+
23
23
  #include <grpc/slice_buffer.h>
24
24
  #include <grpc/support/alloc.h>
25
25
  #include <grpc/support/log.h>
@@ -31,7 +31,6 @@
31
31
  #include <stdio.h>
32
32
  #include <string.h>
33
33
 
34
- #include "absl/strings/str_format.h"
35
34
  #include "src/core/ext/transport/chttp2/transport/context_list.h"
36
35
  #include "src/core/ext/transport/chttp2/transport/frame_data.h"
37
36
  #include "src/core/ext/transport/chttp2/transport/internal.h"
@@ -70,7 +69,6 @@
70
69
  #define DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS false
71
70
  #define KEEPALIVE_TIME_BACKOFF_MULTIPLIER 2
72
71
 
73
- #define DEFAULT_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS 300000 /* 5 minutes */
74
72
  #define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 /* 5 minutes */
75
73
  #define DEFAULT_MAX_PINGS_BETWEEN_DATA 2
76
74
  #define DEFAULT_MAX_PING_STRIKES 2
@@ -90,8 +88,6 @@ static bool g_default_client_keepalive_permit_without_calls =
90
88
  static bool g_default_server_keepalive_permit_without_calls =
91
89
  DEFAULT_KEEPALIVE_PERMIT_WITHOUT_CALLS;
92
90
 
93
- static int g_default_min_sent_ping_interval_without_data_ms =
94
- DEFAULT_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS;
95
91
  static int g_default_min_recv_ping_interval_without_data_ms =
96
92
  DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS;
97
93
  static int g_default_max_pings_without_data = DEFAULT_MAX_PINGS_BETWEEN_DATA;
@@ -103,7 +99,7 @@ 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,18 +111,19 @@ 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
129
  static void benign_reclaimer(void* t, grpc_error* error);
@@ -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);
@@ -154,7 +150,7 @@ static void send_ping_locked(grpc_chttp2_transport* t,
154
150
  grpc_closure* on_complete);
155
151
  static void retry_initiate_ping_locked(void* tp, grpc_error* error);
156
152
 
157
- /** keepalive-relevant functions */
153
+ // keepalive-relevant functions
158
154
  static void init_keepalive_ping(void* arg, grpc_error* error);
159
155
  static void init_keepalive_ping_locked(void* arg, grpc_error* error);
160
156
  static void start_keepalive_ping(void* arg, grpc_error* error);
@@ -170,9 +166,9 @@ static void reset_byte_stream(void* arg, grpc_error* error);
170
166
  // GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL
171
167
  bool g_flow_control_enabled = true;
172
168
 
173
- /*******************************************************************************
174
- * CONSTRUCTION/DESTRUCTION/REFCOUNTING
175
- */
169
+ //
170
+ // CONSTRUCTION/DESTRUCTION/REFCOUNTING
171
+ //
176
172
 
177
173
  grpc_chttp2_transport::~grpc_chttp2_transport() {
178
174
  size_t i;
@@ -226,12 +222,11 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
226
222
 
227
223
  GRPC_ERROR_UNREF(closed_with_error);
228
224
  gpr_free(ping_acks);
229
- gpr_free(peer_string);
230
225
  }
231
226
 
232
227
  static const grpc_transport_vtable* get_vtable(void);
233
228
 
234
- /* Returns whether bdp is enabled */
229
+ // Returns whether bdp is enabled
235
230
  static bool read_channel_args(grpc_chttp2_transport* t,
236
231
  const grpc_channel_args* channel_args,
237
232
  bool is_client) {
@@ -273,15 +268,6 @@ static bool read_channel_args(grpc_chttp2_transport* t,
273
268
  GRPC_ARG_HTTP2_MAX_PING_STRIKES)) {
274
269
  t->ping_policy.max_ping_strikes = grpc_channel_arg_get_integer(
275
270
  &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
271
  } else if (0 ==
286
272
  strcmp(channel_args->args[i].key,
287
273
  GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS)) {
@@ -378,11 +364,9 @@ static bool read_channel_args(grpc_chttp2_transport* t,
378
364
  }
379
365
  }
380
366
  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
367
  t->channelz_socket =
384
368
  grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
385
- "", t->peer_string,
369
+ std::string(grpc_endpoint_get_local_address(t->ep)), t->peer_string,
386
370
  absl::StrFormat("%s %s", get_vtable()->name, t->peer_string));
387
371
  }
388
372
  return enable_bdp;
@@ -412,8 +396,6 @@ static void init_transport_keepalive_settings(grpc_chttp2_transport* t) {
412
396
 
413
397
  static void configure_transport_ping_policy(grpc_chttp2_transport* t) {
414
398
  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
399
  t->ping_policy.max_ping_strikes = g_default_max_ping_strikes;
418
400
  t->ping_policy.min_recv_ping_interval_without_data =
419
401
  g_default_min_recv_ping_interval_without_data_ms;
@@ -429,8 +411,8 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
429
411
  grpc_core::ExecCtx::Get()->Now() + t->keepalive_time,
430
412
  &t->init_keepalive_ping_locked);
431
413
  } else {
432
- /* Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
433
- inflight keeaplive timers */
414
+ // Use GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED to indicate there are no
415
+ // inflight keeaplive timers
434
416
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED;
435
417
  }
436
418
  }
@@ -438,7 +420,9 @@ static void init_keepalive_pings_if_enabled(grpc_chttp2_transport* t) {
438
420
  grpc_chttp2_transport::grpc_chttp2_transport(
439
421
  const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client,
440
422
  grpc_resource_user* resource_user)
441
- : refs(1, &grpc_trace_chttp2_refcount),
423
+ : refs(1, GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
424
+ ? "chttp2_refcount"
425
+ : nullptr),
442
426
  ep(ep),
443
427
  peer_string(grpc_endpoint_get_peer(ep)),
444
428
  resource_user(resource_user),
@@ -451,11 +435,11 @@ grpc_chttp2_transport::grpc_chttp2_transport(
451
435
  GPR_ASSERT(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
452
436
  GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
453
437
  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 */
438
+ // 8 is a random stab in the dark as to a good initial size: it's small enough
439
+ // that it shouldn't waste memory for infrequently used connections, yet
440
+ // large enough that the exponential growth should happen nicely when it's
441
+ // needed.
442
+ // TODO(ctiller): tune this
459
443
  grpc_chttp2_stream_map_init(&stream_map, 8);
460
444
 
461
445
  grpc_slice_buffer_init(&read_buffer);
@@ -466,7 +450,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
466
450
  }
467
451
  grpc_chttp2_hpack_compressor_init(&hpack_compressor);
468
452
  grpc_slice_buffer_init(&qbuf);
469
- /* copy in initial settings to all setting sets */
453
+ // copy in initial settings to all setting sets
470
454
  size_t i;
471
455
  int j;
472
456
  for (i = 0; i < GRPC_CHTTP2_NUM_SETTINGS; i++) {
@@ -477,7 +461,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
477
461
  grpc_chttp2_hpack_parser_init(&hpack_parser);
478
462
  grpc_chttp2_goaway_parser_init(&goaway_parser);
479
463
 
480
- /* configure http2 the way we like it */
464
+ // configure http2 the way we like it
481
465
  if (is_client) {
482
466
  queue_setting_update(this, GRPC_CHTTP2_SETTINGS_ENABLE_PUSH, 0);
483
467
  queue_setting_update(this, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 0);
@@ -503,7 +487,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
503
487
  enable_bdp = false;
504
488
  }
505
489
 
506
- /* No pings allowed before receiving a header or data frame. */
490
+ // No pings allowed before receiving a header or data frame.
507
491
  ping_state.pings_before_data_required = 0;
508
492
  ping_state.is_delayed_ping_timer_set = false;
509
493
  ping_state.last_ping_sent_time = GRPC_MILLIS_INF_PAST;
@@ -514,8 +498,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
514
498
  init_keepalive_pings_if_enabled(this);
515
499
 
516
500
  if (enable_bdp) {
517
- GRPC_CHTTP2_REF_TRANSPORT(this, "bdp_ping");
518
- schedule_bdp_ping_locked(this);
501
+ bdp_ping_blocked = true;
519
502
  grpc_chttp2_act_on_flowctl_action(flow_control->PeriodicUpdate(), this,
520
503
  nullptr);
521
504
  }
@@ -562,7 +545,8 @@ static void close_transport_locked(grpc_chttp2_transport* t,
562
545
  }
563
546
  GPR_ASSERT(error != GRPC_ERROR_NONE);
564
547
  t->closed_with_error = GRPC_ERROR_REF(error);
565
- connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, "close_transport");
548
+ connectivity_state_set(t, GRPC_CHANNEL_SHUTDOWN, absl::Status(),
549
+ "close_transport");
566
550
  if (t->ping_state.is_delayed_ping_timer_set) {
567
551
  grpc_timer_cancel(&t->ping_state.delayed_ping_timer);
568
552
  }
@@ -579,11 +563,11 @@ static void close_transport_locked(grpc_chttp2_transport* t,
579
563
  break;
580
564
  case GRPC_CHTTP2_KEEPALIVE_STATE_DYING:
581
565
  case GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED:
582
- /* keepalive timers are not set in these two states */
566
+ // keepalive timers are not set in these two states
583
567
  break;
584
568
  }
585
569
 
586
- /* flush writable stream list to avoid dangling references */
570
+ // flush writable stream list to avoid dangling references
587
571
  grpc_chttp2_stream* s;
588
572
  while (grpc_chttp2_list_pop_writable_stream(t, &s)) {
589
573
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
@@ -593,7 +577,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
593
577
  }
594
578
  if (t->notify_on_receive_settings != nullptr) {
595
579
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_receive_settings,
596
- GRPC_ERROR_CANCELLED);
580
+ GRPC_ERROR_REF(error));
597
581
  t->notify_on_receive_settings = nullptr;
598
582
  }
599
583
  GRPC_ERROR_UNREF(error);
@@ -616,9 +600,9 @@ void grpc_chttp2_stream_unref(grpc_chttp2_stream* s) {
616
600
  #endif
617
601
 
618
602
  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 */
603
+ // We reserve one 'active stream' that's dropped when the stream is
604
+ // read-closed. The others are for Chttp2IncomingByteStreams that are
605
+ // actively reading
622
606
  GRPC_CHTTP2_STREAM_REF(s, "chttp2");
623
607
  GRPC_CHTTP2_REF_TRANSPORT(s->t, "stream");
624
608
  }
@@ -677,9 +661,6 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
677
661
  grpc_slice_buffer_destroy_internal(&decompressed_data_buffer);
678
662
  }
679
663
 
680
- grpc_chttp2_list_remove_stalled_by_transport(t, this);
681
- grpc_chttp2_list_remove_stalled_by_stream(t, this);
682
-
683
664
  for (int i = 0; i < STREAM_LIST_COUNT; i++) {
684
665
  if (GPR_UNLIKELY(included[i])) {
685
666
  gpr_log(GPR_ERROR, "%s stream %d still included in list %d",
@@ -774,9 +755,9 @@ grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream(grpc_chttp2_transport* t,
774
755
  return accepting;
775
756
  }
776
757
 
777
- /*******************************************************************************
778
- * OUTPUT PROCESSING
779
- */
758
+ //
759
+ // OUTPUT PROCESSING
760
+ //
780
761
 
781
762
  static const char* write_state_name(grpc_chttp2_write_state st) {
782
763
  switch (st) {
@@ -794,15 +775,15 @@ static void set_write_state(grpc_chttp2_transport* t,
794
775
  grpc_chttp2_write_state st, const char* reason) {
795
776
  GRPC_CHTTP2_IF_TRACING(
796
777
  gpr_log(GPR_INFO, "W:%p %s [%s] state %s -> %s [%s]", t,
797
- t->is_client ? "CLIENT" : "SERVER", t->peer_string,
778
+ t->is_client ? "CLIENT" : "SERVER", t->peer_string.c_str(),
798
779
  write_state_name(t->write_state), write_state_name(st), reason));
799
780
  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) */
781
+ // If the state is being reset back to idle, it means a write was just
782
+ // finished. Make sure all the run_after_write closures are scheduled.
783
+ //
784
+ // This is also our chance to close the transport if the transport was marked
785
+ // to be closed after all writes finish (for example, if we received a go-away
786
+ // from peer while we had some pending writes)
806
787
  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
807
788
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
808
789
  if (t->close_transport_on_writes_finished != nullptr) {
@@ -864,6 +845,9 @@ static void inc_initiate_write_reason(
864
845
  case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
865
846
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_APPLICATION_PING();
866
847
  break;
848
+ case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
849
+ GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_BDP_ESTIMATOR_PING();
850
+ break;
867
851
  case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
868
852
  GRPC_STATS_INC_HTTP2_INITIATE_WRITE_DUE_TO_KEEPALIVE_PING();
869
853
  break;
@@ -889,22 +873,22 @@ void grpc_chttp2_initiate_write(grpc_chttp2_transport* t,
889
873
  set_write_state(t, GRPC_CHTTP2_WRITE_STATE_WRITING,
890
874
  grpc_chttp2_initiate_write_reason_string(reason));
891
875
  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') */
876
+ // Note that the 'write_action_begin_locked' closure is being scheduled
877
+ // on the 'finally_scheduler' of t->combiner. This means that
878
+ // 'write_action_begin_locked' is called only *after* all the other
879
+ // closures (some of which are potentially initiating more writes on the
880
+ // transport) are executed on the t->combiner.
881
+ //
882
+ // The reason for scheduling on finally_scheduler is to make sure we batch
883
+ // as many writes as possible. 'write_action_begin_locked' is the function
884
+ // that gathers all the relevant bytes (which are at various places in the
885
+ // grpc_chttp2_transport structure) and append them to 'outbuf' field in
886
+ // grpc_chttp2_transport thereby batching what would have been potentially
887
+ // multiple write operations.
888
+ //
889
+ // Also, 'write_action_begin_locked' only gathers the bytes into outbuf.
890
+ // It does not call the endpoint to write the bytes. That is done by the
891
+ // 'write_action' (which is scheduled by 'write_action_begin_locked')
908
892
  t->combiner->FinallyRun(
909
893
  GRPC_CLOSURE_INIT(&t->write_action_begin_locked,
910
894
  write_action_begin_locked, t, nullptr),
@@ -956,9 +940,9 @@ static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
956
940
  write_action(t, GRPC_ERROR_NONE);
957
941
  if (t->reading_paused_on_pending_induced_frames) {
958
942
  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. */
943
+ // We had paused reading, because we had many induced frames (SETTINGS
944
+ // ACK, PINGS ACK and RST_STREAMS) pending in t->qbuf. Now that we have
945
+ // been able to flush qbuf, we can resume reading.
962
946
  GRPC_CHTTP2_IF_TRACING(gpr_log(
963
947
  GPR_INFO,
964
948
  "transport %p : Resuming reading after being paused due to too "
@@ -993,8 +977,8 @@ static void write_action_end(void* tp, grpc_error* error) {
993
977
  GRPC_ERROR_REF(error));
994
978
  }
995
979
 
996
- /* Callback from the grpc_endpoint after bytes have been written by calling
997
- * sendmsg */
980
+ // Callback from the grpc_endpoint after bytes have been written by calling
981
+ // sendmsg
998
982
  static void write_action_end_locked(void* tp, grpc_error* error) {
999
983
  GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
1000
984
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
@@ -1057,7 +1041,7 @@ static void queue_setting_update(grpc_chttp2_transport* t,
1057
1041
  }
1058
1042
  if (use_value != t->settings[GRPC_LOCAL_SETTINGS][id]) {
1059
1043
  t->settings[GRPC_LOCAL_SETTINGS][id] = use_value;
1060
- t->dirtied_local_settings = 1;
1044
+ t->dirtied_local_settings = true;
1061
1045
  }
1062
1046
  }
1063
1047
 
@@ -1080,16 +1064,17 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1080
1064
  GRPC_CHTTP2_IF_TRACING(
1081
1065
  gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
1082
1066
  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. */
1067
+ // We want to log this irrespective of whether http tracing is enabled if we
1068
+ // received a GOAWAY with a non NO_ERROR code.
1085
1069
  if (goaway_error != GRPC_HTTP2_NO_ERROR) {
1086
- gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string,
1070
+ gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
1087
1071
  goaway_error, grpc_error_string(t->goaway_error));
1088
1072
  }
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. */
1073
+ absl::Status status = grpc_error_to_absl_status(t->goaway_error);
1074
+ // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
1075
+ // data equal to "too_many_pings", it should log the occurrence at a log level
1076
+ // that is enabled by default and double the configured KEEPALIVE_TIME used
1077
+ // for new connections on that channel.
1093
1078
  if (GPR_UNLIKELY(t->is_client &&
1094
1079
  goaway_error == GRPC_HTTP2_ENHANCE_YOUR_CALM &&
1095
1080
  grpc_slice_str_cmp(goaway_text, "too_many_pings") == 0)) {
@@ -1104,15 +1089,18 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1104
1089
  ? GRPC_MILLIS_INF_FUTURE
1105
1090
  : static_cast<grpc_millis>(current_keepalive_time_ms *
1106
1091
  KEEPALIVE_TIME_BACKOFF_MULTIPLIER);
1092
+ status.SetPayload(grpc_core::kKeepaliveThrottlingKey,
1093
+ absl::Cord(std::to_string(t->keepalive_time)));
1107
1094
  }
1108
- /* lie: use transient failure from the transport to indicate goaway has been
1109
- * received */
1110
- connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, "got_goaway");
1095
+ // lie: use transient failure from the transport to indicate goaway has been
1096
+ // received.
1097
+ connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1098
+ "got_goaway");
1111
1099
  }
1112
1100
 
1113
1101
  static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1114
1102
  grpc_chttp2_stream* s;
1115
- /* cancel out streams that haven't yet started if we have received a GOAWAY */
1103
+ // cancel out streams that haven't yet started if we have received a GOAWAY
1116
1104
  if (t->goaway_error != GRPC_ERROR_NONE) {
1117
1105
  while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1118
1106
  grpc_chttp2_cancel_stream(
@@ -1123,14 +1111,14 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1123
1111
  }
1124
1112
  return;
1125
1113
  }
1126
- /* start streams where we have free grpc_chttp2_stream ids and free
1127
- * concurrency */
1114
+ // start streams where we have free grpc_chttp2_stream ids and free
1115
+ // * concurrency
1128
1116
  while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
1129
1117
  grpc_chttp2_stream_map_size(&t->stream_map) <
1130
1118
  t->settings[GRPC_PEER_SETTINGS]
1131
1119
  [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
1132
1120
  grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1133
- /* safe since we can't (legally) be parsing this stream yet */
1121
+ // safe since we can't (legally) be parsing this stream yet
1134
1122
  GRPC_CHTTP2_IF_TRACING(gpr_log(
1135
1123
  GPR_INFO,
1136
1124
  "HTTP:%s: Transport %p allocating new grpc_chttp2_stream %p to id %d",
@@ -1142,6 +1130,8 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1142
1130
 
1143
1131
  if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
1144
1132
  connectivity_state_set(t, GRPC_CHANNEL_TRANSIENT_FAILURE,
1133
+ absl::Status(absl::StatusCode::kUnavailable,
1134
+ "Transport Stream IDs exhausted"),
1145
1135
  "no_more_stream_ids");
1146
1136
  }
1147
1137
 
@@ -1150,7 +1140,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1150
1140
  grpc_chttp2_mark_stream_writable(t, s);
1151
1141
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM);
1152
1142
  }
1153
- /* cancel out streams that will never be started */
1143
+ // cancel out streams that will never be started
1154
1144
  if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) {
1155
1145
  while (grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
1156
1146
  grpc_chttp2_cancel_stream(
@@ -1162,12 +1152,12 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
1162
1152
  }
1163
1153
  }
1164
1154
 
1165
- /* Flag that this closure barrier may be covering a write in a pollset, and so
1166
- we should not complete this closure until we can prove that the write got
1167
- scheduled */
1155
+ // Flag that this closure barrier may be covering a write in a pollset, and so
1156
+ // we should not complete this closure until we can prove that the write got
1157
+ // scheduled
1168
1158
  #define CLOSURE_BARRIER_MAY_COVER_WRITE (1 << 0)
1169
- /* First bit of the reference count, stored in the high order bits (with the low
1170
- bits being used for flags defined above) */
1159
+ // First bit of the reference count, stored in the high order bits (with the low
1160
+ // bits being used for flags defined above)
1171
1161
  #define CLOSURE_BARRIER_FIRST_REF_BIT (1 << 16)
1172
1162
 
1173
1163
  static grpc_closure* add_closure_barrier(grpc_closure* closure) {
@@ -1211,7 +1201,7 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1211
1201
  "Error in HTTP transport completing operation");
1212
1202
  closure->error_data.error = grpc_error_set_str(
1213
1203
  closure->error_data.error, GRPC_ERROR_STR_TARGET_ADDRESS,
1214
- grpc_slice_from_copied_string(t->peer_string));
1204
+ grpc_slice_from_copied_string(t->peer_string.c_str()));
1215
1205
  }
1216
1206
  closure->error_data.error =
1217
1207
  grpc_error_add_child(closure->error_data.error, error);
@@ -1259,7 +1249,7 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1259
1249
  grpc_chttp2_stream* s) {
1260
1250
  for (;;) {
1261
1251
  if (s->fetching_send_message == nullptr) {
1262
- /* Stream was cancelled before message fetch completed */
1252
+ // Stream was cancelled before message fetch completed
1263
1253
  abort(); /* TODO(ctiller): what cleanup here? */
1264
1254
  return; /* early out */
1265
1255
  }
@@ -1389,7 +1379,7 @@ static void perform_stream_op_locked(void* stream_op,
1389
1379
  GPR_ASSERT(s->send_initial_metadata_finished == nullptr);
1390
1380
  on_complete->next_data.scratch |= CLOSURE_BARRIER_MAY_COVER_WRITE;
1391
1381
 
1392
- /* Identify stream compression */
1382
+ // Identify stream compression
1393
1383
  if (op_payload->send_initial_metadata.send_initial_metadata->idx.named
1394
1384
  .content_encoding == nullptr ||
1395
1385
  grpc_stream_compression_method_parse(
@@ -1408,68 +1398,48 @@ static void perform_stream_op_locked(void* stream_op,
1408
1398
  s->send_initial_metadata_finished = add_closure_barrier(on_complete);
1409
1399
  s->send_initial_metadata =
1410
1400
  op_payload->send_initial_metadata.send_initial_metadata;
1411
- const size_t metadata_size =
1412
- grpc_metadata_batch_size(s->send_initial_metadata);
1413
- const size_t metadata_peer_limit =
1414
- t->settings[GRPC_PEER_SETTINGS]
1415
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE];
1416
1401
  if (t->is_client) {
1417
1402
  s->deadline = GPR_MIN(s->deadline, s->send_initial_metadata->deadline);
1418
1403
  }
1419
- if (metadata_size > metadata_peer_limit) {
1420
- grpc_chttp2_cancel_stream(
1421
- t, s,
1422
- grpc_error_set_int(
1423
- grpc_error_set_int(
1424
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1425
- "to-be-sent initial metadata size "
1426
- "exceeds peer limit"),
1427
- GRPC_ERROR_INT_SIZE,
1428
- static_cast<intptr_t>(metadata_size)),
1429
- GRPC_ERROR_INT_LIMIT,
1430
- static_cast<intptr_t>(metadata_peer_limit)),
1431
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED));
1432
- } else {
1433
- if (contains_non_ok_status(s->send_initial_metadata)) {
1434
- s->seen_error = true;
1435
- }
1436
- if (!s->write_closed) {
1437
- if (t->is_client) {
1438
- if (t->closed_with_error == GRPC_ERROR_NONE) {
1439
- GPR_ASSERT(s->id == 0);
1440
- grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1441
- maybe_start_some_streams(t);
1442
- } else {
1443
- grpc_chttp2_cancel_stream(
1444
- t, s,
1445
- grpc_error_set_int(
1446
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1447
- "Transport closed", &t->closed_with_error, 1),
1448
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1449
- }
1404
+ if (contains_non_ok_status(s->send_initial_metadata)) {
1405
+ s->seen_error = true;
1406
+ }
1407
+ if (!s->write_closed) {
1408
+ if (t->is_client) {
1409
+ if (t->closed_with_error == GRPC_ERROR_NONE) {
1410
+ GPR_ASSERT(s->id == 0);
1411
+ grpc_chttp2_list_add_waiting_for_concurrency(t, s);
1412
+ maybe_start_some_streams(t);
1450
1413
  } else {
1451
- GPR_ASSERT(s->id != 0);
1452
- grpc_chttp2_mark_stream_writable(t, s);
1453
- if (!(op->send_message &&
1454
- (op->payload->send_message.send_message->flags() &
1455
- GRPC_WRITE_BUFFER_HINT))) {
1456
- grpc_chttp2_initiate_write(
1457
- t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1458
- }
1414
+ grpc_chttp2_cancel_stream(
1415
+ t, s,
1416
+ grpc_error_set_int(
1417
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1418
+ "Transport closed", &t->closed_with_error, 1),
1419
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
1459
1420
  }
1460
1421
  } else {
1461
- s->send_initial_metadata = nullptr;
1462
- grpc_chttp2_complete_closure_step(
1463
- t, s, &s->send_initial_metadata_finished,
1464
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1465
- "Attempt to send initial metadata after stream was closed",
1466
- &s->write_closed_error, 1),
1467
- "send_initial_metadata_finished");
1422
+ GPR_ASSERT(s->id != 0);
1423
+ grpc_chttp2_mark_stream_writable(t, s);
1424
+ if (!(op->send_message &&
1425
+ (op->payload->send_message.send_message->flags() &
1426
+ GRPC_WRITE_BUFFER_HINT))) {
1427
+ grpc_chttp2_initiate_write(
1428
+ t, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA);
1429
+ }
1468
1430
  }
1431
+ } else {
1432
+ s->send_initial_metadata = nullptr;
1433
+ grpc_chttp2_complete_closure_step(
1434
+ t, s, &s->send_initial_metadata_finished,
1435
+ GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1436
+ "Attempt to send initial metadata after stream was closed",
1437
+ &s->write_closed_error, 1),
1438
+ "send_initial_metadata_finished");
1469
1439
  }
1470
1440
  if (op_payload->send_initial_metadata.peer_string != nullptr) {
1471
1441
  gpr_atm_rel_store(op_payload->send_initial_metadata.peer_string,
1472
- (gpr_atm)t->peer_string);
1442
+ (gpr_atm)t->peer_string.c_str());
1473
1443
  }
1474
1444
  }
1475
1445
 
@@ -1527,47 +1497,27 @@ static void perform_stream_op_locked(void* stream_op,
1527
1497
  op_payload->send_trailing_metadata.send_trailing_metadata;
1528
1498
  s->sent_trailing_metadata_op = op_payload->send_trailing_metadata.sent;
1529
1499
  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
- s->sent_trailing_metadata_op = nullptr;
1555
- grpc_chttp2_complete_closure_step(
1556
- t, s, &s->send_trailing_metadata_finished,
1557
- grpc_metadata_batch_is_empty(
1558
- op->payload->send_trailing_metadata.send_trailing_metadata)
1559
- ? GRPC_ERROR_NONE
1560
- : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1561
- "Attempt to send trailing metadata after "
1562
- "stream was closed"),
1563
- "send_trailing_metadata_finished");
1564
- } else if (s->id != 0) {
1565
- /* TODO(ctiller): check if there's flow control for any outstanding
1566
- bytes before going writable */
1567
- grpc_chttp2_mark_stream_writable(t, s);
1568
- grpc_chttp2_initiate_write(
1569
- t, GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA);
1570
- }
1500
+ if (contains_non_ok_status(s->send_trailing_metadata)) {
1501
+ s->seen_error = true;
1502
+ }
1503
+ if (s->write_closed) {
1504
+ s->send_trailing_metadata = nullptr;
1505
+ s->sent_trailing_metadata_op = nullptr;
1506
+ grpc_chttp2_complete_closure_step(
1507
+ t, s, &s->send_trailing_metadata_finished,
1508
+ grpc_metadata_batch_is_empty(
1509
+ op->payload->send_trailing_metadata.send_trailing_metadata)
1510
+ ? GRPC_ERROR_NONE
1511
+ : GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1512
+ "Attempt to send trailing metadata after "
1513
+ "stream was closed"),
1514
+ "send_trailing_metadata_finished");
1515
+ } else if (s->id != 0) {
1516
+ // TODO(ctiller): check if there's flow control for any outstanding
1517
+ // bytes before going writable
1518
+ grpc_chttp2_mark_stream_writable(t, s);
1519
+ grpc_chttp2_initiate_write(
1520
+ t, GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA);
1571
1521
  }
1572
1522
  }
1573
1523
 
@@ -1582,7 +1532,7 @@ static void perform_stream_op_locked(void* stream_op,
1582
1532
  op_payload->recv_initial_metadata.trailing_metadata_available;
1583
1533
  if (op_payload->recv_initial_metadata.peer_string != nullptr) {
1584
1534
  gpr_atm_rel_store(op_payload->recv_initial_metadata.peer_string,
1585
- (gpr_atm)t->peer_string);
1535
+ (gpr_atm)t->peer_string.c_str());
1586
1536
  }
1587
1537
  grpc_chttp2_maybe_complete_recv_initial_metadata(t, s);
1588
1538
  }
@@ -1665,8 +1615,8 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1665
1615
  }
1666
1616
 
1667
1617
  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 */
1618
+ // callback remaining pings: they're not allowed to call into the transport,
1619
+ // and maybe they hold resources that need to be freed
1670
1620
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1671
1621
  GPR_ASSERT(error != GRPC_ERROR_NONE);
1672
1622
  for (size_t j = 0; j < GRPC_CHTTP2_PCL_COUNT; j++) {
@@ -1692,11 +1642,9 @@ static void send_ping_locked(grpc_chttp2_transport* t,
1692
1642
  GRPC_ERROR_NONE);
1693
1643
  }
1694
1644
 
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
- */
1645
+ // Specialized form of send_ping_locked for keepalive ping. If there is already
1646
+ // a ping in progress, the keepalive ping would piggyback onto that ping,
1647
+ // instead of waiting for that ping to complete and then starting a new ping.
1700
1648
  static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1701
1649
  if (t->closed_with_error != GRPC_ERROR_NONE) {
1702
1650
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
@@ -1710,7 +1658,7 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1710
1658
  }
1711
1659
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1712
1660
  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. */
1661
+ // There is a ping in flight. Add yourself to the inflight closure list.
1714
1662
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
1715
1663
  start_keepalive_ping_locked, t, nullptr),
1716
1664
  GRPC_ERROR_REF(t->closed_with_error));
@@ -1752,9 +1700,8 @@ static void retry_initiate_ping_locked(void* tp, grpc_error* error) {
1752
1700
  void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1753
1701
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
1754
1702
  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);
1703
+ gpr_log(GPR_DEBUG, "Unknown ping response from %s: %" PRIx64,
1704
+ t->peer_string.c_str(), id);
1758
1705
  return;
1759
1706
  }
1760
1707
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION,
@@ -1765,8 +1712,8 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1765
1712
  }
1766
1713
 
1767
1714
  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,
1715
+ // We want to log this irrespective of whether http tracing is enabled
1716
+ gpr_log(GPR_INFO, "%s: Sending goaway err=%s", t->peer_string.c_str(),
1770
1717
  grpc_error_string(error));
1771
1718
  t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED;
1772
1719
  grpc_http2_error_code http_error;
@@ -1787,7 +1734,7 @@ void grpc_chttp2_add_ping_strike(grpc_chttp2_transport* t) {
1787
1734
  grpc_error_set_int(
1788
1735
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("too_many_pings"),
1789
1736
  GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM));
1790
- /*The transport will be closed after the write is done */
1737
+ // The transport will be closed after the write is done
1791
1738
  close_transport_locked(
1792
1739
  t, grpc_error_set_int(
1793
1740
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many pings"),
@@ -1862,9 +1809,9 @@ static void perform_transport_op(grpc_transport* gt, grpc_transport_op* op) {
1862
1809
  GRPC_ERROR_NONE);
1863
1810
  }
1864
1811
 
1865
- /*******************************************************************************
1866
- * INPUT PROCESSING - GENERAL
1867
- */
1812
+ //
1813
+ // INPUT PROCESSING - GENERAL
1814
+ //
1868
1815
 
1869
1816
  void grpc_chttp2_maybe_complete_recv_initial_metadata(
1870
1817
  grpc_chttp2_transport* /*t*/, grpc_chttp2_stream* s) {
@@ -1984,8 +1931,8 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
1984
1931
  s->unprocessed_incoming_frames_buffer.length > 0;
1985
1932
  if (s->read_closed && s->frame_storage.length > 0 && !pending_data &&
1986
1933
  !s->seen_error && s->recv_trailing_metadata_finished != nullptr) {
1987
- /* Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
1988
- * maybe decompress the next 5 bytes in the stream. */
1934
+ // Maybe some SYNC_FLUSH data is left in frame_storage. Consume them and
1935
+ // maybe decompress the next 5 bytes in the stream.
1989
1936
  if (s->stream_decompression_method ==
1990
1937
  GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS) {
1991
1938
  grpc_slice_buffer_move_first(
@@ -2069,6 +2016,8 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2069
2016
  if (grpc_chttp2_list_remove_writable_stream(t, s)) {
2070
2017
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:remove_stream");
2071
2018
  }
2019
+ grpc_chttp2_list_remove_stalled_by_stream(t, s);
2020
+ grpc_chttp2_list_remove_stalled_by_transport(t, s);
2072
2021
 
2073
2022
  GRPC_ERROR_UNREF(error);
2074
2023
 
@@ -2107,12 +2056,12 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2107
2056
  if (status != GRPC_STATUS_OK) {
2108
2057
  s->seen_error = true;
2109
2058
  }
2110
- /* stream_global->recv_trailing_metadata_finished gives us a
2111
- last chance replacement: we've received trailing metadata,
2112
- but something more important has become available to signal
2113
- to the upper layers - drop what we've got, and then publish
2114
- what we want - which is safe because we haven't told anyone
2115
- about the metadata yet */
2059
+ // stream_global->recv_trailing_metadata_finished gives us a
2060
+ // last chance replacement: we've received trailing metadata,
2061
+ // but something more important has become available to signal
2062
+ // to the upper layers - drop what we've got, and then publish
2063
+ // what we want - which is safe because we haven't told anyone
2064
+ // about the metadata yet
2116
2065
  if (s->published_metadata[1] == GRPC_METADATA_NOT_PUBLISHED ||
2117
2066
  s->recv_trailing_metadata_finished != nullptr) {
2118
2067
  char status_string[GPR_LTOA_MIN_BUFSIZE];
@@ -2204,7 +2153,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2204
2153
  grpc_chttp2_stream* s, int close_reads,
2205
2154
  int close_writes, grpc_error* error) {
2206
2155
  if (s->read_closed && s->write_closed) {
2207
- /* already closed, but we should still fake the status if needed. */
2156
+ // already closed, but we should still fake the status if needed.
2208
2157
  grpc_error* overall_error = removal_error(error, s, "Stream removed");
2209
2158
  if (overall_error != GRPC_ERROR_NONE) {
2210
2159
  grpc_chttp2_fake_status(t, s, overall_error);
@@ -2231,7 +2180,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2231
2180
  if (s->id != 0) {
2232
2181
  remove_stream(t, s->id, GRPC_ERROR_REF(overall_error));
2233
2182
  } else {
2234
- /* Purge streams waiting on concurrency still waiting for id assignment */
2183
+ // Purge streams waiting on concurrency still waiting for id assignment
2235
2184
  grpc_chttp2_list_remove_waiting_for_concurrency(t, s);
2236
2185
  }
2237
2186
  if (overall_error != GRPC_ERROR_NONE) {
@@ -2270,12 +2219,12 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2270
2219
 
2271
2220
  GPR_ASSERT(grpc_status >= 0 && (int)grpc_status < 100);
2272
2221
 
2273
- /* Hand roll a header block.
2274
- This is unnecessarily ugly - at some point we should find a more
2275
- elegant solution.
2276
- It's complicated by the fact that our send machinery would be dead by
2277
- the time we got around to sending this, so instead we ignore HPACK
2278
- compression and just write the uncompressed bytes onto the wire. */
2222
+ // Hand roll a header block.
2223
+ // This is unnecessarily ugly - at some point we should find a more
2224
+ // elegant solution.
2225
+ // It's complicated by the fact that our send machinery would be dead by
2226
+ // the time we got around to sending this, so instead we ignore HPACK
2227
+ // compression and just write the uncompressed bytes onto the wire.
2279
2228
  if (!s->sent_initial_metadata) {
2280
2229
  http_status_hdr = GRPC_SLICE_MALLOC(13);
2281
2230
  p = GRPC_SLICE_START_PTR(http_status_hdr);
@@ -2436,9 +2385,9 @@ static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error) {
2436
2385
  GRPC_ERROR_UNREF(error);
2437
2386
  }
2438
2387
 
2439
- /*******************************************************************************
2440
- * INPUT PROCESSING - PARSING
2441
- */
2388
+ //
2389
+ // INPUT PROCESSING - PARSING
2390
+ //
2442
2391
 
2443
2392
  template <class F>
2444
2393
  static void WithUrgency(grpc_chttp2_transport* t,
@@ -2535,11 +2484,6 @@ static void read_action_locked(void* tp, grpc_error* error) {
2535
2484
  grpc_error* errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2536
2485
  GRPC_ERROR_NONE};
2537
2486
  for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
2538
- grpc_core::BdpEstimator* bdp_est = t->flow_control->bdp_estimator();
2539
- if (bdp_est) {
2540
- bdp_est->AddIncomingBytes(
2541
- static_cast<int64_t> GRPC_SLICE_LENGTH(t->read_buffer.slices[i]));
2542
- }
2543
2487
  errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
2544
2488
  }
2545
2489
  if (errors[1] != GRPC_ERROR_NONE) {
@@ -2573,8 +2517,8 @@ static void read_action_locked(void* tp, grpc_error* error) {
2573
2517
  "Transport closed", &t->closed_with_error, 1);
2574
2518
  }
2575
2519
  if (error != GRPC_ERROR_NONE) {
2576
- /* If a goaway frame was received, this might be the reason why the read
2577
- * failed. Add this info to the error */
2520
+ // If a goaway frame was received, this might be the reason why the read
2521
+ // failed. Add this info to the error
2578
2522
  if (t->goaway_error != GRPC_ERROR_NONE) {
2579
2523
  error = grpc_error_add_child(error, GRPC_ERROR_REF(t->goaway_error));
2580
2524
  }
@@ -2583,7 +2527,7 @@ static void read_action_locked(void* tp, grpc_error* error) {
2583
2527
  t->endpoint_reading = 0;
2584
2528
  } else if (t->closed_with_error == GRPC_ERROR_NONE) {
2585
2529
  keep_reading = true;
2586
- /* Since we have read a byte, reset the keepalive timer */
2530
+ // Since we have read a byte, reset the keepalive timer
2587
2531
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2588
2532
  grpc_timer_cancel(&t->keepalive_ping_timer);
2589
2533
  }
@@ -2618,7 +2562,7 @@ static void continue_read_action_locked(grpc_chttp2_transport* t) {
2618
2562
 
2619
2563
  // t is reffed prior to calling the first time, and once the callback chain
2620
2564
  // that kicks off finishes, it's unreffed
2621
- static void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2565
+ void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2622
2566
  t->flow_control->bdp_estimator()->SchedulePing();
2623
2567
  send_ping_locked(
2624
2568
  t,
@@ -2626,6 +2570,9 @@ static void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2626
2570
  grpc_schedule_on_exec_ctx),
2627
2571
  GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked, finish_bdp_ping, t,
2628
2572
  grpc_schedule_on_exec_ctx));
2573
+ // TODO(yashykt): Enabling this causes internal b/168345569. Re-enable once
2574
+ // fixed.
2575
+ // grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_BDP_PING);
2629
2576
  }
2630
2577
 
2631
2578
  static void start_bdp_ping(void* tp, grpc_error* error) {
@@ -2638,13 +2585,13 @@ static void start_bdp_ping(void* tp, grpc_error* error) {
2638
2585
  static void start_bdp_ping_locked(void* tp, grpc_error* error) {
2639
2586
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2640
2587
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2641
- gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string,
2588
+ gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
2642
2589
  grpc_error_string(error));
2643
2590
  }
2644
2591
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2645
2592
  return;
2646
2593
  }
2647
- /* Reset the keepalive ping timer */
2594
+ // Reset the keepalive ping timer
2648
2595
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING) {
2649
2596
  grpc_timer_cancel(&t->keepalive_ping_timer);
2650
2597
  }
@@ -2662,7 +2609,7 @@ static void finish_bdp_ping(void* tp, grpc_error* error) {
2662
2609
  static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2663
2610
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2664
2611
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2665
- gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string,
2612
+ gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
2666
2613
  grpc_error_string(error));
2667
2614
  }
2668
2615
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
@@ -2670,8 +2617,8 @@ static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2670
2617
  return;
2671
2618
  }
2672
2619
  if (!t->bdp_ping_started) {
2673
- /* start_bdp_ping_locked has not been run yet. Schedule
2674
- * finish_bdp_ping_locked to be run later. */
2620
+ // start_bdp_ping_locked has not been run yet. Schedule
2621
+ // finish_bdp_ping_locked to be run later.
2675
2622
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
2676
2623
  finish_bdp_ping_locked, t, nullptr),
2677
2624
  GRPC_ERROR_REF(error));
@@ -2705,7 +2652,13 @@ static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error) {
2705
2652
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2706
2653
  return;
2707
2654
  }
2708
- schedule_bdp_ping_locked(t);
2655
+ if (t->flow_control->bdp_estimator()->accumulator() == 0) {
2656
+ // Block the bdp ping till we receive more data.
2657
+ t->bdp_ping_blocked = true;
2658
+ GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
2659
+ } else {
2660
+ schedule_bdp_ping_locked(t);
2661
+ }
2709
2662
  }
2710
2663
 
2711
2664
  void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
@@ -2754,14 +2707,6 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
2754
2707
  GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA)) {
2755
2708
  g_default_max_pings_without_data = grpc_channel_arg_get_integer(
2756
2709
  &args->args[i], {g_default_max_pings_without_data, 0, INT_MAX});
2757
- } else if (0 ==
2758
- strcmp(
2759
- args->args[i].key,
2760
- GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS)) {
2761
- g_default_min_sent_ping_interval_without_data_ms =
2762
- grpc_channel_arg_get_integer(
2763
- &args->args[i],
2764
- {g_default_min_sent_ping_interval_without_data_ms, 0, INT_MAX});
2765
2710
  } else if (0 ==
2766
2711
  strcmp(
2767
2712
  args->args[i].key,
@@ -2804,7 +2749,7 @@ static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2804
2749
  &t->init_keepalive_ping_locked);
2805
2750
  }
2806
2751
  } else if (error == GRPC_ERROR_CANCELLED) {
2807
- /* The keepalive ping timer may be cancelled by bdp */
2752
+ // The keepalive ping timer may be cancelled by bdp
2808
2753
  GRPC_CHTTP2_REF_TRANSPORT(t, "init keepalive ping");
2809
2754
  GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked, init_keepalive_ping, t,
2810
2755
  grpc_schedule_on_exec_ctx);
@@ -2832,7 +2777,7 @@ static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2832
2777
  }
2833
2778
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2834
2779
  GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2835
- gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string);
2780
+ gpr_log(GPR_INFO, "%s: Start keepalive ping", t->peer_string.c_str());
2836
2781
  }
2837
2782
  GRPC_CHTTP2_REF_TRANSPORT(t, "keepalive watchdog");
2838
2783
  GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
@@ -2856,11 +2801,11 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
2856
2801
  if (error == GRPC_ERROR_NONE) {
2857
2802
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2858
2803
  GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2859
- gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string);
2804
+ gpr_log(GPR_INFO, "%s: Finish keepalive ping", t->peer_string.c_str());
2860
2805
  }
2861
2806
  if (!t->keepalive_ping_started) {
2862
- /* start_keepalive_ping_locked has not run yet. Reschedule
2863
- * finish_keepalive_ping_locked for it to be run later. */
2807
+ // start_keepalive_ping_locked has not run yet. Reschedule
2808
+ // finish_keepalive_ping_locked for it to be run later.
2864
2809
  t->combiner->Run(
2865
2810
  GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
2866
2811
  finish_keepalive_ping_locked, t, nullptr),
@@ -2894,7 +2839,7 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2894
2839
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2895
2840
  if (error == GRPC_ERROR_NONE) {
2896
2841
  gpr_log(GPR_INFO, "%s: Keepalive watchdog fired. Closing transport.",
2897
- t->peer_string);
2842
+ t->peer_string.c_str());
2898
2843
  t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING;
2899
2844
  close_transport_locked(
2900
2845
  t, grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -2903,8 +2848,8 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2903
2848
  GRPC_STATUS_UNAVAILABLE));
2904
2849
  }
2905
2850
  } else {
2906
- /* The watchdog timer should have been cancelled by
2907
- * finish_keepalive_ping_locked. */
2851
+ // The watchdog timer should have been cancelled by
2852
+ // finish_keepalive_ping_locked.
2908
2853
  if (GPR_UNLIKELY(error != GRPC_ERROR_CANCELLED)) {
2909
2854
  gpr_log(GPR_ERROR, "keepalive_ping_end state error: %d (expect: %d)",
2910
2855
  t->keepalive_state, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING);
@@ -2913,21 +2858,22 @@ static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2913
2858
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive watchdog");
2914
2859
  }
2915
2860
 
2916
- /*******************************************************************************
2917
- * CALLBACK LOOP
2918
- */
2861
+ //
2862
+ // CALLBACK LOOP
2863
+ //
2919
2864
 
2920
2865
  static void connectivity_state_set(grpc_chttp2_transport* t,
2921
2866
  grpc_connectivity_state state,
2867
+ const absl::Status& status,
2922
2868
  const char* reason) {
2923
2869
  GRPC_CHTTP2_IF_TRACING(
2924
2870
  gpr_log(GPR_INFO, "transport %p set connectivity_state=%d", t, state));
2925
- t->state_tracker.SetState(state, reason);
2871
+ t->state_tracker.SetState(state, status, reason);
2926
2872
  }
2927
2873
 
2928
- /*******************************************************************************
2929
- * POLLSET STUFF
2930
- */
2874
+ //
2875
+ // POLLSET STUFF
2876
+ //
2931
2877
 
2932
2878
  static void set_pollset(grpc_transport* gt, grpc_stream* /*gs*/,
2933
2879
  grpc_pollset* pollset) {
@@ -2941,9 +2887,9 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
2941
2887
  grpc_endpoint_add_to_pollset_set(t->ep, pollset_set);
2942
2888
  }
2943
2889
 
2944
- /*******************************************************************************
2945
- * BYTE STREAM
2946
- */
2890
+ //
2891
+ // BYTE STREAM
2892
+ //
2947
2893
 
2948
2894
  static void reset_byte_stream(void* arg, grpc_error* error) {
2949
2895
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
@@ -3031,7 +2977,7 @@ void Chttp2IncomingByteStream::NextLocked(void* arg,
3031
2977
  s->data_parser.parsing_frame = nullptr;
3032
2978
  }
3033
2979
  } else {
3034
- /* Should never reach here. */
2980
+ // Should never reach here.
3035
2981
  GPR_ASSERT(false);
3036
2982
  }
3037
2983
  } else {
@@ -3160,9 +3106,9 @@ void Chttp2IncomingByteStream::Shutdown(grpc_error* error) {
3160
3106
 
3161
3107
  } // namespace grpc_core
3162
3108
 
3163
- /*******************************************************************************
3164
- * RESOURCE QUOTAS
3165
- */
3109
+ //
3110
+ // RESOURCE QUOTAS
3111
+ //
3166
3112
 
3167
3113
  static void post_benign_reclaimer(grpc_chttp2_transport* t) {
3168
3114
  if (!t->benign_reclaimer_registered) {
@@ -3197,11 +3143,11 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3197
3143
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3198
3144
  if (error == GRPC_ERROR_NONE &&
3199
3145
  grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
3200
- /* Channel with no active streams: send a goaway to try and make it
3201
- * disconnect cleanly */
3146
+ // Channel with no active streams: send a goaway to try and make it
3147
+ // disconnect cleanly
3202
3148
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3203
3149
  gpr_log(GPR_INFO, "HTTP2: %s - send goaway to free memory",
3204
- t->peer_string);
3150
+ t->peer_string.c_str());
3205
3151
  }
3206
3152
  send_goaway(t,
3207
3153
  grpc_error_set_int(
@@ -3212,7 +3158,8 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3212
3158
  gpr_log(GPR_INFO,
3213
3159
  "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
3214
3160
  " streams",
3215
- t->peer_string, grpc_chttp2_stream_map_size(&t->stream_map));
3161
+ t->peer_string.c_str(),
3162
+ grpc_chttp2_stream_map_size(&t->stream_map));
3216
3163
  }
3217
3164
  t->benign_reclaimer_registered = false;
3218
3165
  if (error != GRPC_ERROR_CANCELLED) {
@@ -3237,8 +3184,8 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3237
3184
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
3238
3185
  grpc_chttp2_stream_map_rand(&t->stream_map));
3239
3186
  if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3240
- gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d", t->peer_string,
3241
- s->id);
3187
+ gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d",
3188
+ t->peer_string.c_str(), s->id);
3242
3189
  }
3243
3190
  grpc_chttp2_cancel_stream(
3244
3191
  t, s,
@@ -3246,10 +3193,10 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3246
3193
  GRPC_ERROR_INT_HTTP2_ERROR,
3247
3194
  GRPC_HTTP2_ENHANCE_YOUR_CALM));
3248
3195
  if (n > 1) {
3249
- /* Since we cancel one stream per destructive reclamation, if
3250
- there are more streams left, we can immediately post a new
3251
- reclaimer in case the resource quota needs to free more
3252
- memory */
3196
+ // Since we cancel one stream per destructive reclamation, if
3197
+ // there are more streams left, we can immediately post a new
3198
+ // reclaimer in case the resource quota needs to free more
3199
+ // memory
3253
3200
  post_destructive_reclaimer(t);
3254
3201
  }
3255
3202
  }
@@ -3260,9 +3207,9 @@ static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3260
3207
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "destructive_reclaimer");
3261
3208
  }
3262
3209
 
3263
- /*******************************************************************************
3264
- * MONITORING
3265
- */
3210
+ //
3211
+ // MONITORING
3212
+ //
3266
3213
 
3267
3214
  const char* grpc_chttp2_initiate_write_reason_string(
3268
3215
  grpc_chttp2_initiate_write_reason reason) {
@@ -3299,6 +3246,8 @@ const char* grpc_chttp2_initiate_write_reason_string(
3299
3246
  return "FLOW_CONTROL_UNSTALLED_BY_UPDATE";
3300
3247
  case GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING:
3301
3248
  return "APPLICATION_PING";
3249
+ case GRPC_CHTTP2_INITIATE_WRITE_BDP_PING:
3250
+ return "BDP_PING";
3302
3251
  case GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING:
3303
3252
  return "KEEPALIVE_PING";
3304
3253
  case GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED: