grpc 1.60.0 → 1.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +208 -165
  3. data/include/grpc/event_engine/event_engine.h +59 -12
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
  5. data/include/grpc/event_engine/internal/slice_cast.h +12 -0
  6. data/include/grpc/event_engine/memory_allocator.h +3 -1
  7. data/include/grpc/event_engine/slice.h +5 -0
  8. data/include/grpc/grpc_security.h +22 -1
  9. data/include/grpc/impl/call.h +29 -0
  10. data/include/grpc/impl/channel_arg_names.h +12 -1
  11. data/include/grpc/impl/slice_type.h +1 -1
  12. data/include/grpc/module.modulemap +1 -0
  13. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
  14. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
  15. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
  16. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
  17. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
  18. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
  20. data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
  21. data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
  29. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
  39. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
  54. data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
  58. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
  59. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
  60. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
  61. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
  63. data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
  64. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  65. data/src/core/ext/filters/http/client_authority_filter.h +12 -4
  66. data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
  67. data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
  68. data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
  69. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
  70. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
  71. data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
  72. data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
  73. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
  74. data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
  75. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
  76. data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
  77. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
  78. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
  79. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
  80. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  81. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
  83. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +67 -145
  84. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
  85. data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
  86. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
  87. data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
  88. data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
  89. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
  90. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
  91. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
  92. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
  93. data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
  94. data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
  95. data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
  96. data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
  97. data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
  98. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
  99. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
  100. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
  101. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
  102. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
  103. data/src/core/ext/xds/certificate_provider_store.cc +2 -1
  104. data/src/core/ext/xds/certificate_provider_store.h +0 -5
  105. data/src/core/ext/xds/xds_api.cc +31 -18
  106. data/src/core/ext/xds/xds_api.h +2 -2
  107. data/src/core/ext/xds/xds_bootstrap.h +3 -0
  108. data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
  109. data/src/core/ext/xds/xds_certificate_provider.h +44 -111
  110. data/src/core/ext/xds/xds_client.cc +420 -414
  111. data/src/core/ext/xds/xds_client.h +31 -22
  112. data/src/core/ext/xds/xds_client_grpc.cc +3 -1
  113. data/src/core/ext/xds/xds_cluster.cc +104 -11
  114. data/src/core/ext/xds/xds_cluster.h +9 -1
  115. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
  116. data/src/core/ext/xds/xds_common_types.cc +14 -10
  117. data/src/core/ext/xds/xds_endpoint.cc +9 -4
  118. data/src/core/ext/xds/xds_endpoint.h +5 -1
  119. data/src/core/ext/xds/xds_health_status.cc +12 -2
  120. data/src/core/ext/xds/xds_health_status.h +4 -2
  121. data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
  122. data/src/core/ext/xds/xds_listener.cc +14 -8
  123. data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
  124. data/src/core/ext/xds/xds_route_config.cc +34 -22
  125. data/src/core/ext/xds/xds_route_config.h +1 -0
  126. data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
  127. data/src/core/ext/xds/xds_transport.h +3 -0
  128. data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
  129. data/src/core/ext/xds/xds_transport_grpc.h +4 -0
  130. data/src/core/lib/channel/call_tracer.cc +12 -0
  131. data/src/core/lib/channel/call_tracer.h +17 -3
  132. data/src/core/lib/channel/channel_args.cc +24 -14
  133. data/src/core/lib/channel/channel_args.h +74 -13
  134. data/src/core/lib/channel/channel_stack.cc +27 -0
  135. data/src/core/lib/channel/channel_stack.h +10 -10
  136. data/src/core/lib/channel/connected_channel.cc +64 -18
  137. data/src/core/lib/channel/promise_based_filter.h +1041 -1
  138. data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
  139. data/src/core/lib/compression/compression_internal.cc +0 -3
  140. data/src/core/lib/event_engine/ares_resolver.cc +35 -14
  141. data/src/core/lib/event_engine/ares_resolver.h +9 -10
  142. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
  143. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
  144. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
  145. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
  146. data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
  147. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
  148. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
  149. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
  150. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
  151. data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
  152. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
  153. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
  154. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
  155. data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
  156. data/src/core/lib/experiments/config.cc +13 -0
  157. data/src/core/lib/experiments/config.h +3 -0
  158. data/src/core/lib/experiments/experiments.cc +245 -366
  159. data/src/core/lib/experiments/experiments.h +50 -156
  160. data/src/core/lib/gprpp/debug_location.h +13 -0
  161. data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
  162. data/src/core/lib/gprpp/orphanable.h +27 -0
  163. data/src/core/lib/gprpp/ref_counted.h +63 -22
  164. data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
  165. data/src/core/lib/gprpp/ref_counted_string.h +13 -0
  166. data/src/core/lib/gprpp/status_helper.cc +1 -2
  167. data/src/core/lib/iomgr/combiner.cc +15 -51
  168. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
  169. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
  170. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
  171. data/src/core/lib/load_balancing/lb_policy.h +1 -1
  172. data/src/core/lib/promise/activity.cc +17 -2
  173. data/src/core/lib/promise/activity.h +5 -4
  174. data/src/core/lib/promise/all_ok.h +80 -0
  175. data/src/core/lib/promise/detail/join_state.h +2077 -0
  176. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  177. data/src/core/lib/promise/detail/promise_like.h +8 -1
  178. data/src/core/lib/promise/detail/seq_state.h +3458 -150
  179. data/src/core/lib/promise/detail/status.h +42 -5
  180. data/src/core/lib/promise/for_each.h +13 -1
  181. data/src/core/lib/promise/if.h +4 -0
  182. data/src/core/lib/promise/latch.h +6 -3
  183. data/src/core/lib/promise/party.cc +33 -31
  184. data/src/core/lib/promise/party.h +142 -6
  185. data/src/core/lib/promise/poll.h +39 -13
  186. data/src/core/lib/promise/promise.h +4 -0
  187. data/src/core/lib/promise/seq.h +107 -7
  188. data/src/core/lib/promise/status_flag.h +196 -0
  189. data/src/core/lib/promise/try_join.h +132 -0
  190. data/src/core/lib/promise/try_seq.h +132 -10
  191. data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
  192. data/src/core/lib/resolver/endpoint_addresses.h +48 -0
  193. data/src/core/lib/resource_quota/arena.h +2 -2
  194. data/src/core/lib/resource_quota/memory_quota.cc +57 -8
  195. data/src/core/lib/resource_quota/memory_quota.h +6 -0
  196. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
  197. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
  198. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
  199. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
  200. data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
  201. data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
  202. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
  205. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
  206. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
  207. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
  208. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
  209. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
  210. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
  211. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
  212. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
  213. data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
  214. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
  215. data/src/core/lib/security/transport/auth_filters.h +71 -4
  216. data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
  217. data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
  218. data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
  219. data/src/core/lib/slice/slice_buffer.h +3 -0
  220. data/src/core/lib/surface/builtins.cc +1 -1
  221. data/src/core/lib/surface/call.cc +683 -196
  222. data/src/core/lib/surface/call.h +26 -13
  223. data/src/core/lib/surface/call_trace.cc +42 -1
  224. data/src/core/lib/surface/channel.cc +0 -1
  225. data/src/core/lib/surface/channel.h +0 -6
  226. data/src/core/lib/surface/channel_init.h +26 -0
  227. data/src/core/lib/surface/init.cc +14 -8
  228. data/src/core/lib/surface/server.cc +256 -237
  229. data/src/core/lib/surface/server.h +26 -54
  230. data/src/core/lib/surface/version.cc +2 -2
  231. data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
  232. data/src/core/lib/transport/call_final_info.cc +38 -0
  233. data/src/core/lib/transport/call_final_info.h +54 -0
  234. data/src/core/lib/transport/connectivity_state.cc +3 -2
  235. data/src/core/lib/transport/connectivity_state.h +4 -0
  236. data/src/core/lib/transport/metadata_batch.h +4 -4
  237. data/src/core/lib/transport/transport.cc +70 -19
  238. data/src/core/lib/transport/transport.h +395 -25
  239. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
  240. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
  241. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  242. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  243. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  244. data/src/core/tsi/ssl_transport_security.cc +65 -43
  245. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  246. data/src/ruby/ext/grpc/rb_grpc.c +0 -1
  247. data/src/ruby/ext/grpc/rb_grpc.h +0 -2
  248. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  249. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  250. data/src/ruby/lib/grpc/version.rb +1 -1
  251. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  252. data/third_party/zlib/adler32.c +5 -27
  253. data/third_party/zlib/compress.c +5 -16
  254. data/third_party/zlib/crc32.c +86 -162
  255. data/third_party/zlib/deflate.c +233 -336
  256. data/third_party/zlib/deflate.h +8 -8
  257. data/third_party/zlib/gzguts.h +11 -12
  258. data/third_party/zlib/infback.c +7 -23
  259. data/third_party/zlib/inffast.c +1 -4
  260. data/third_party/zlib/inffast.h +1 -1
  261. data/third_party/zlib/inflate.c +30 -99
  262. data/third_party/zlib/inftrees.c +6 -11
  263. data/third_party/zlib/inftrees.h +3 -3
  264. data/third_party/zlib/trees.c +224 -302
  265. data/third_party/zlib/uncompr.c +4 -12
  266. data/third_party/zlib/zconf.h +6 -2
  267. data/third_party/zlib/zlib.h +191 -188
  268. data/third_party/zlib/zutil.c +16 -44
  269. data/third_party/zlib/zutil.h +10 -10
  270. metadata +35 -13
  271. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
  272. data/src/core/lib/event_engine/memory_allocator.cc +0 -74
  273. data/src/core/lib/transport/pid_controller.cc +0 -51
  274. data/src/core/lib/transport/pid_controller.h +0 -116
  275. data/third_party/upb/upb/collections/array.h +0 -17
  276. data/third_party/upb/upb/collections/map.h +0 -17
  277. data/third_party/upb/upb/upb.hpp +0 -18
@@ -14,10 +14,6 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
- //
18
- // Automatically generated by tools/codegen/core/gen_settings_ids.py
19
- //
20
-
21
17
  #ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_H
22
18
  #define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_H
23
19
 
@@ -25,38 +21,147 @@
25
21
 
26
22
  #include <stdint.h>
27
23
 
28
- typedef enum {
29
- GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE = 0, // wire id 1
30
- GRPC_CHTTP2_SETTINGS_ENABLE_PUSH = 1, // wire id 2
31
- GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS = 2, // wire id 3
32
- GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE = 3, // wire id 4
33
- GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE = 4, // wire id 5
34
- GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE = 5, // wire id 6
35
- GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA = 6, // wire id 65027
36
- GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE =
37
- 7, // wire id 65028
38
- } grpc_chttp2_setting_id;
39
-
40
- #define GRPC_CHTTP2_NUM_SETTINGS 8
41
- extern const uint16_t grpc_setting_id_to_wire_id[];
42
-
43
- bool grpc_wire_id_to_setting_id(uint32_t wire_id, grpc_chttp2_setting_id* out);
44
-
45
- typedef enum {
46
- GRPC_CHTTP2_CLAMP_INVALID_VALUE,
47
- GRPC_CHTTP2_DISCONNECT_ON_INVALID_VALUE
48
- } grpc_chttp2_invalid_value_behavior;
49
-
50
- typedef struct {
51
- const char* name;
52
- uint32_t default_value;
53
- uint32_t min_value;
54
- uint32_t max_value;
55
- grpc_chttp2_invalid_value_behavior invalid_value_behavior;
56
- uint32_t error_value;
57
- } grpc_chttp2_setting_parameters;
58
-
59
- extern const grpc_chttp2_setting_parameters
60
- grpc_chttp2_settings_parameters[GRPC_CHTTP2_NUM_SETTINGS];
24
+ #include <cstdint>
25
+
26
+ #include "absl/functional/function_ref.h"
27
+ #include "absl/strings/string_view.h"
28
+ #include "absl/types/optional.h"
29
+
30
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
31
+ #include "src/core/lib/gpr/useful.h"
32
+ #include "src/core/lib/transport/http2_errors.h"
33
+
34
+ namespace grpc_core {
35
+
36
+ class Http2Settings {
37
+ public:
38
+ enum : uint16_t {
39
+ kHeaderTableSizeWireId = 1,
40
+ kEnablePushWireId = 2,
41
+ kMaxConcurrentStreamsWireId = 3,
42
+ kInitialWindowSizeWireId = 4,
43
+ kMaxFrameSizeWireId = 5,
44
+ kMaxHeaderListSizeWireId = 6,
45
+ kGrpcAllowTrueBinaryMetadataWireId = 65027,
46
+ kGrpcPreferredReceiveCryptoFrameSizeWireId = 65028,
47
+ };
48
+
49
+ void Diff(bool is_first_send, const Http2Settings& old,
50
+ absl::FunctionRef<void(uint16_t key, uint32_t value)> cb) const;
51
+ GRPC_MUST_USE_RESULT grpc_http2_error_code Apply(uint16_t key,
52
+ uint32_t value);
53
+ uint32_t header_table_size() const { return header_table_size_; }
54
+ uint32_t max_concurrent_streams() const { return max_concurrent_streams_; }
55
+ uint32_t initial_window_size() const { return initial_window_size_; }
56
+ uint32_t max_frame_size() const { return max_frame_size_; }
57
+ uint32_t max_header_list_size() const { return max_header_list_size_; }
58
+ uint32_t preferred_receive_crypto_message_size() const {
59
+ return preferred_receive_crypto_message_size_;
60
+ }
61
+ bool enable_push() const { return enable_push_; }
62
+ bool allow_true_binary_metadata() const {
63
+ return allow_true_binary_metadata_;
64
+ }
65
+
66
+ void SetHeaderTableSize(uint32_t x) { header_table_size_ = x; }
67
+ void SetMaxConcurrentStreams(uint32_t x) { max_concurrent_streams_ = x; }
68
+ void SetInitialWindowSize(uint32_t x) {
69
+ initial_window_size_ = std::min(x, max_initial_window_size());
70
+ }
71
+ void SetEnablePush(bool x) { enable_push_ = x; }
72
+ void SetMaxHeaderListSize(uint32_t x) {
73
+ max_header_list_size_ = std::min(x, 16777216u);
74
+ }
75
+ void SetAllowTrueBinaryMetadata(bool x) { allow_true_binary_metadata_ = x; }
76
+ void SetMaxFrameSize(uint32_t x) {
77
+ max_frame_size_ = Clamp(x, min_max_frame_size(), max_max_frame_size());
78
+ }
79
+ void SetPreferredReceiveCryptoMessageSize(uint32_t x) {
80
+ preferred_receive_crypto_message_size_ =
81
+ Clamp(x, min_preferred_receive_crypto_message_size(),
82
+ max_preferred_receive_crypto_message_size());
83
+ }
84
+
85
+ static absl::string_view header_table_size_name() {
86
+ return "HEADER_TABLE_SIZE";
87
+ }
88
+ static absl::string_view max_concurrent_streams_name() {
89
+ return "MAX_CONCURRENT_STREAMS";
90
+ }
91
+ static absl::string_view initial_window_size_name() {
92
+ return "INITIAL_WINDOW_SIZE";
93
+ }
94
+ static absl::string_view max_frame_size_name() { return "MAX_FRAME_SIZE"; }
95
+ static absl::string_view max_header_list_size_name() {
96
+ return "MAX_HEADER_LIST_SIZE";
97
+ }
98
+ static absl::string_view enable_push_name() { return "ENABLE_PUSH"; }
99
+ static absl::string_view allow_true_binary_metadata_name() {
100
+ return "GRPC_ALLOW_TRUE_BINARY_METADATA";
101
+ }
102
+ static absl::string_view preferred_receive_crypto_message_size_name() {
103
+ return "GRPC_PREFERRED_RECEIVE_MESSAGE_SIZE";
104
+ }
105
+
106
+ static uint32_t max_initial_window_size() { return 2147483647u; }
107
+ static uint32_t max_max_frame_size() { return 16777215u; }
108
+ static uint32_t min_max_frame_size() { return 16384u; }
109
+ static uint32_t min_preferred_receive_crypto_message_size() { return 16384u; }
110
+ static uint32_t max_preferred_receive_crypto_message_size() {
111
+ return 2147483647u;
112
+ }
113
+
114
+ static std::string WireIdToName(uint16_t wire_id);
115
+
116
+ bool operator==(const Http2Settings& rhs) const {
117
+ return header_table_size_ == rhs.header_table_size_ &&
118
+ max_concurrent_streams_ == rhs.max_concurrent_streams_ &&
119
+ initial_window_size_ == rhs.initial_window_size_ &&
120
+ max_frame_size_ == rhs.max_frame_size_ &&
121
+ max_header_list_size_ == rhs.max_header_list_size_ &&
122
+ preferred_receive_crypto_message_size_ ==
123
+ rhs.preferred_receive_crypto_message_size_ &&
124
+ enable_push_ == rhs.enable_push_ &&
125
+ allow_true_binary_metadata_ == rhs.allow_true_binary_metadata_;
126
+ }
127
+
128
+ bool operator!=(const Http2Settings& rhs) const { return !operator==(rhs); }
129
+
130
+ private:
131
+ uint32_t header_table_size_ = 4096;
132
+ uint32_t max_concurrent_streams_ = 4294967295u;
133
+ uint32_t initial_window_size_ = 65535u;
134
+ uint32_t max_frame_size_ = 16384u;
135
+ uint32_t max_header_list_size_ = 16777216u;
136
+ uint32_t preferred_receive_crypto_message_size_ = 0u;
137
+ bool enable_push_ = true;
138
+ bool allow_true_binary_metadata_ = false;
139
+ };
140
+
141
+ class Http2SettingsManager {
142
+ public:
143
+ Http2Settings& mutable_local() { return local_; }
144
+ const Http2Settings& local() const { return local_; }
145
+ const Http2Settings& acked() const { return acked_; }
146
+ Http2Settings& mutable_peer() { return peer_; }
147
+ const Http2Settings& peer() const { return peer_; }
148
+
149
+ absl::optional<Http2SettingsFrame> MaybeSendUpdate();
150
+ GRPC_MUST_USE_RESULT bool AckLastSend();
151
+
152
+ private:
153
+ enum class UpdateState : uint8_t {
154
+ kFirst,
155
+ kSending,
156
+ kIdle,
157
+ };
158
+ UpdateState update_state_ = UpdateState::kFirst;
159
+ Http2Settings local_;
160
+ Http2Settings sent_;
161
+ Http2Settings peer_;
162
+ Http2Settings acked_;
163
+ };
164
+
165
+ } // namespace grpc_core
61
166
 
62
167
  #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HTTP2_SETTINGS_H
@@ -203,18 +203,6 @@ struct grpc_chttp2_stream_link {
203
203
  grpc_chttp2_stream* next;
204
204
  grpc_chttp2_stream* prev;
205
205
  };
206
- // We keep several sets of connection wide parameters
207
- typedef enum {
208
- // The settings our peer has asked for (and we have acked)
209
- GRPC_PEER_SETTINGS = 0,
210
- // The settings we'd like to have
211
- GRPC_LOCAL_SETTINGS,
212
- // The settings we've published to our peer
213
- GRPC_SENT_SETTINGS,
214
- // The settings the peer has acked
215
- GRPC_ACKED_SETTINGS,
216
- GRPC_NUM_SETTING_SETS
217
- } grpc_chttp2_setting_set;
218
206
 
219
207
  typedef enum {
220
208
  GRPC_CHTTP2_NO_GOAWAY_SEND,
@@ -359,12 +347,8 @@ struct grpc_chttp2_transport final
359
347
 
360
348
  grpc_chttp2_sent_goaway_state sent_goaway_state = GRPC_CHTTP2_NO_GOAWAY_SEND;
361
349
 
362
- /// bitmask of setting indexes to send out
363
- /// Hack: it's common for implementations to assume 65536 bytes initial send
364
- /// window -- this should by rights be 0
365
- uint32_t force_send_settings = 1 << GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
366
350
  /// settings values
367
- uint32_t settings[GRPC_NUM_SETTING_SETS][GRPC_CHTTP2_NUM_SETTINGS];
351
+ grpc_core::Http2SettingsManager settings;
368
352
 
369
353
  grpc_event_engine::experimental::EventEngine::TaskHandle
370
354
  settings_ack_watchdog =
@@ -538,11 +522,6 @@ struct grpc_chttp2_transport final
538
522
  /// is this a client?
539
523
  bool is_client;
540
524
 
541
- /// are the local settings dirty and need to be sent?
542
- bool dirtied_local_settings = true;
543
- /// have local settings been sent?
544
- bool sent_local_settings = false;
545
-
546
525
  /// If start_bdp_ping_locked has been called
547
526
  bool bdp_ping_started = false;
548
527
  // True if pings should be acked
@@ -357,13 +357,10 @@ absl::variant<size_t, absl::Status> grpc_chttp2_perform_read(
357
357
  }
358
358
  goto dts_fh_0; // loop
359
359
  } else if (t->incoming_frame_size >
360
- t->settings[GRPC_ACKED_SETTINGS]
361
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]) {
362
- return GRPC_ERROR_CREATE(
363
- absl::StrFormat("Frame size %d is larger than max frame size %d",
364
- t->incoming_frame_size,
365
- t->settings[GRPC_ACKED_SETTINGS]
366
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]));
360
+ t->settings.acked().max_frame_size()) {
361
+ return GRPC_ERROR_CREATE(absl::StrFormat(
362
+ "Frame size %d is larger than max frame size %d",
363
+ t->incoming_frame_size, t->settings.acked().max_frame_size()));
367
364
  }
368
365
  if (++cur == end) {
369
366
  return absl::OkStatus();
@@ -395,8 +392,7 @@ absl::variant<size_t, absl::Status> grpc_chttp2_perform_read(
395
392
  }
396
393
  cur += t->incoming_frame_size;
397
394
  t->incoming_stream = nullptr;
398
- if (t->incoming_frame_type == GRPC_CHTTP2_FRAME_RST_STREAM &&
399
- grpc_core::IsChttp2OffloadOnRstStreamEnabled()) {
395
+ if (t->incoming_frame_type == GRPC_CHTTP2_FRAME_RST_STREAM) {
400
396
  requests_started = std::numeric_limits<size_t>::max();
401
397
  }
402
398
  goto dts_fh_0; // loop
@@ -506,8 +502,7 @@ static grpc_error_handle init_header_skip_frame_parser(
506
502
  /*metadata_size_soft_limit=*/
507
503
  t->max_header_list_size_soft_limit,
508
504
  /*metadata_size_hard_limit=*/
509
- t->settings[GRPC_ACKED_SETTINGS]
510
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE],
505
+ t->settings.acked().max_header_list_size(),
511
506
  hpack_boundary_type(t, is_eoh), priority_type,
512
507
  hpack_parser_log_info(t, HPackParser::LogInfo::kDontKnow));
513
508
  return absl::OkStatus();
@@ -647,10 +642,8 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
647
642
  "ignoring grpc_chttp2_stream with non-client generated index %d",
648
643
  t->incoming_stream_id));
649
644
  return init_header_skip_frame_parser(t, priority_type, is_eoh);
650
- } else if (GPR_UNLIKELY(
651
- t->stream_map.size() + t->extra_streams >=
652
- t->settings[GRPC_ACKED_SETTINGS]
653
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS])) {
645
+ } else if (GPR_UNLIKELY(t->stream_map.size() + t->extra_streams >=
646
+ t->settings.acked().max_concurrent_streams())) {
654
647
  if (grpc_core::IsRfcMaxConcurrentStreamsEnabled()) {
655
648
  ++t->num_pending_induced_frames;
656
649
  grpc_slice_buffer_add(
@@ -675,13 +668,11 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
675
668
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM);
676
669
  return init_header_skip_frame_parser(t, priority_type, is_eoh);
677
670
  } else if (GPR_UNLIKELY(
678
- grpc_core::IsRedMaxConcurrentStreamsEnabled() &&
679
671
  t->stream_map.size() >=
680
672
  t->max_concurrent_streams_policy.AdvertiseValue() &&
681
673
  grpc_core::RandomEarlyDetection(
682
674
  t->max_concurrent_streams_policy.AdvertiseValue(),
683
- t->settings[GRPC_ACKED_SETTINGS]
684
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS])
675
+ t->settings.acked().max_concurrent_streams())
685
676
  .Reject(t->stream_map.size(), t->bitgen))) {
686
677
  // We are under the limit of max concurrent streams for the current
687
678
  // setting, but are over the next value that will be advertised.
@@ -702,8 +693,7 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
702
693
  t, std::string(t->peer_string.as_string_view()).c_str(),
703
694
  t->incoming_stream_id, t->last_new_stream_id));
704
695
  return init_header_skip_frame_parser(t, priority_type, is_eoh);
705
- } else if (grpc_core::IsBlockExcessiveRequestsBeforeSettingsAckEnabled() &&
706
- t->num_incoming_streams_before_settings_ack == 0) {
696
+ } else if (t->num_incoming_streams_before_settings_ack == 0) {
707
697
  GRPC_CHTTP2_IF_TRACING(gpr_log(
708
698
  GPR_ERROR,
709
699
  "transport:%p SERVER peer:%s rejecting grpc_chttp2_stream id=%d, "
@@ -791,15 +781,13 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
791
781
  return GRPC_ERROR_CREATE(
792
782
  "Trailing metadata frame received without an end-o-stream");
793
783
  }
794
- t->hpack_parser.BeginFrame(
795
- incoming_metadata_buffer,
796
- /*metadata_size_soft_limit=*/
797
- t->max_header_list_size_soft_limit,
798
- /*metadata_size_hard_limit=*/
799
- t->settings[GRPC_ACKED_SETTINGS]
800
- [GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE],
801
- hpack_boundary_type(t, is_eoh), priority_type,
802
- hpack_parser_log_info(t, frame_type));
784
+ t->hpack_parser.BeginFrame(incoming_metadata_buffer,
785
+ /*metadata_size_soft_limit=*/
786
+ t->max_header_list_size_soft_limit,
787
+ /*metadata_size_hard_limit=*/
788
+ t->settings.acked().max_header_list_size(),
789
+ hpack_boundary_type(t, is_eoh), priority_type,
790
+ hpack_parser_log_info(t, frame_type));
803
791
  return absl::OkStatus();
804
792
  }
805
793
 
@@ -870,21 +858,20 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
870
858
 
871
859
  grpc_error_handle err = grpc_chttp2_settings_parser_begin_frame(
872
860
  &t->simple.settings, t->incoming_frame_size, t->incoming_frame_flags,
873
- t->settings[GRPC_PEER_SETTINGS]);
861
+ t->settings.mutable_peer());
874
862
  if (!err.ok()) {
875
863
  return err;
876
864
  }
877
865
  if (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
878
866
  t->max_concurrent_streams_policy.AckLastSend();
879
- memcpy(t->settings[GRPC_ACKED_SETTINGS], t->settings[GRPC_SENT_SETTINGS],
880
- GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
867
+ if (!t->settings.AckLastSend()) {
868
+ return GRPC_ERROR_CREATE("Received unexpected settings ack");
869
+ }
881
870
  t->hpack_parser.hpack_table()->SetMaxBytes(
882
- t->settings[GRPC_ACKED_SETTINGS]
883
- [GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
871
+ t->settings.acked().header_table_size());
884
872
  grpc_chttp2_act_on_flowctl_action(
885
873
  t->flow_control.SetAckedInitialWindow(
886
- t->settings[GRPC_ACKED_SETTINGS]
887
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]),
874
+ t->settings.acked().initial_window_size()),
888
875
  t, nullptr);
889
876
  if (t->settings_ack_watchdog !=
890
877
  grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid) {
@@ -892,7 +879,6 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
892
879
  t->settings_ack_watchdog,
893
880
  grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid));
894
881
  }
895
- t->sent_local_settings = false;
896
882
  // This is more streams than can be started in http2, so setting this
897
883
  // effictively removes the limit for the rest of the connection.
898
884
  t->num_incoming_streams_before_settings_ack =
@@ -34,6 +34,7 @@
34
34
  #include <grpc/event_engine/event_engine.h>
35
35
  #include <grpc/slice_buffer.h>
36
36
  #include <grpc/support/log.h>
37
+ #include <grpc/support/time.h>
37
38
 
38
39
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
39
40
  #include "src/core/ext/transport/chttp2/transport/context_list_entry.h"
@@ -217,15 +218,12 @@ static void report_stall(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
217
218
  ":peer_initwin=%d:t_win=%" PRId64 ":s_win=%d:s_delta=%" PRId64 "]",
218
219
  std::string(t->peer_string.as_string_view()).c_str(), t, s->id, staller,
219
220
  s->flow_controlled_buffer.length, s->flow_controlled_bytes_flowed,
220
- t->settings[GRPC_ACKED_SETTINGS]
221
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE],
221
+ t->settings.acked().initial_window_size(),
222
222
  t->flow_control.remote_window(),
223
223
  static_cast<uint32_t>(std::max(
224
- int64_t{0},
225
- s->flow_control.remote_window_delta() +
226
- static_cast<int64_t>(
227
- t->settings[GRPC_PEER_SETTINGS]
228
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]))),
224
+ int64_t{0}, s->flow_control.remote_window_delta() +
225
+ static_cast<int64_t>(
226
+ t->settings.peer().initial_window_size()))),
229
227
  s->flow_control.remote_window_delta());
230
228
  }
231
229
  }
@@ -265,23 +263,13 @@ class WriteContext {
265
263
  }
266
264
 
267
265
  void FlushSettings() {
268
- const bool dirty =
269
- t_->dirtied_local_settings ||
270
- t_->settings[GRPC_SENT_SETTINGS]
271
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] !=
272
- t_->max_concurrent_streams_policy.AdvertiseValue();
273
- if (dirty && !t_->sent_local_settings) {
274
- t_->settings[GRPC_LOCAL_SETTINGS]
275
- [GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] =
276
- t_->max_concurrent_streams_policy.AdvertiseValue();
277
- grpc_slice_buffer_add(
278
- t_->outbuf.c_slice_buffer(),
279
- grpc_chttp2_settings_create(t_->settings[GRPC_SENT_SETTINGS],
280
- t_->settings[GRPC_LOCAL_SETTINGS],
281
- t_->force_send_settings,
282
- GRPC_CHTTP2_NUM_SETTINGS));
283
- if (grpc_core::IsSettingsTimeoutEnabled() &&
284
- t_->keepalive_timeout != grpc_core::Duration::Infinity()) {
266
+ t_->settings.mutable_local().SetMaxConcurrentStreams(
267
+ t_->max_concurrent_streams_policy.AdvertiseValue());
268
+ auto update = t_->settings.MaybeSendUpdate();
269
+ if (update.has_value()) {
270
+ grpc_core::Http2Frame frame(std::move(*update));
271
+ Serialize(absl::Span<grpc_core::Http2Frame>(&frame, 1), t_->outbuf);
272
+ if (t_->keepalive_timeout != grpc_core::Duration::Infinity()) {
285
273
  GPR_ASSERT(
286
274
  t_->settings_ack_watchdog ==
287
275
  grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid);
@@ -294,9 +282,6 @@ class WriteContext {
294
282
  grpc_chttp2_settings_timeout(std::move(t));
295
283
  });
296
284
  }
297
- t_->force_send_settings = false;
298
- t_->dirtied_local_settings = false;
299
- t_->sent_local_settings = true;
300
285
  t_->flow_control.FlushedSettings();
301
286
  t_->max_concurrent_streams_policy.FlushedSettings();
302
287
  grpc_core::global_stats().IncrementHttp2SettingsWrites();
@@ -336,8 +321,7 @@ class WriteContext {
336
321
 
337
322
  void EnactHpackSettings() {
338
323
  t_->hpack_compressor.SetMaxTableSize(
339
- t_->settings[GRPC_PEER_SETTINGS]
340
- [GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
324
+ t_->settings.peer().header_table_size());
341
325
  }
342
326
 
343
327
  void UpdateStreamsNoLongerStalled() {
@@ -410,17 +394,14 @@ class DataSendContext {
410
394
  return static_cast<uint32_t>(std::max(
411
395
  int64_t{0},
412
396
  s_->flow_control.remote_window_delta() +
413
- static_cast<int64_t>(
414
- t_->settings[GRPC_PEER_SETTINGS]
415
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE])));
397
+ static_cast<int64_t>(t_->settings.peer().initial_window_size())));
416
398
  }
417
399
 
418
400
  uint32_t max_outgoing() const {
419
401
  return grpc_core::Clamp<uint32_t>(
420
402
  std::min<int64_t>(
421
- {t_->settings[GRPC_PEER_SETTINGS]
422
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
423
- stream_remote_window(), t_->flow_control.remote_window(),
403
+ {t_->settings.peer().max_frame_size(), stream_remote_window(),
404
+ t_->flow_control.remote_window(),
424
405
  grpc_core::IsWriteSizeCapEnabled()
425
406
  ? static_cast<int64_t>(write_context_->target_write_size())
426
407
  : std::numeric_limits<uint32_t>::max()}),
@@ -494,14 +475,10 @@ class StreamWriteContext {
494
475
  grpc_core::HPackCompressor::EncodeHeaderOptions{
495
476
  s_->id, // stream_id
496
477
  false, // is_eof
497
- t_->settings
498
- [GRPC_PEER_SETTINGS]
499
- [GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA] !=
500
- 0, // use_true_binary_metadata
501
- t_->settings
502
- [GRPC_PEER_SETTINGS]
503
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE], // max_frame_size
504
- &s_->stats.outgoing // stats
478
+ t_->settings.peer()
479
+ .allow_true_binary_metadata(), // use_true_binary_metadata
480
+ t_->settings.peer().max_frame_size(), // max_frame_size
481
+ &s_->stats.outgoing // stats
505
482
  },
506
483
  *s_->send_initial_metadata, t_->outbuf.c_slice_buffer());
507
484
  grpc_chttp2_reset_ping_clock(t_);
@@ -517,7 +494,7 @@ class StreamWriteContext {
517
494
  if (s_->call_tracer) {
518
495
  s_->call_tracer->RecordAnnotation(grpc_core::HttpAnnotation(
519
496
  grpc_core::HttpAnnotation::Type::kHeadWritten,
520
- grpc_core::Timestamp::Now(), s_->t->flow_control.stats(),
497
+ gpr_now(GPR_CLOCK_REALTIME), s_->t->flow_control.stats(),
521
498
  s_->flow_control.stats()));
522
499
  }
523
500
  }
@@ -596,14 +573,8 @@ class StreamWriteContext {
596
573
  }
597
574
  t_->hpack_compressor.EncodeHeaders(
598
575
  grpc_core::HPackCompressor::EncodeHeaderOptions{
599
- s_->id, true,
600
- t_->settings
601
- [GRPC_PEER_SETTINGS]
602
- [GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA] !=
603
- 0,
604
- t_->settings[GRPC_PEER_SETTINGS]
605
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
606
- &s_->stats.outgoing},
576
+ s_->id, true, t_->settings.peer().allow_true_binary_metadata(),
577
+ t_->settings.peer().max_frame_size(), &s_->stats.outgoing},
607
578
  *s_->send_trailing_metadata, t_->outbuf.c_slice_buffer());
608
579
  }
609
580
  write_context_->IncTrailingMetadataWrites();
@@ -649,7 +620,7 @@ class StreamWriteContext {
649
620
  absl::OkStatus());
650
621
  if (s_->call_tracer) {
651
622
  s_->call_tracer->RecordAnnotation(grpc_core::HttpAnnotation(
652
- grpc_core::HttpAnnotation::Type::kEnd, grpc_core::Timestamp::Now(),
623
+ grpc_core::HttpAnnotation::Type::kEnd, gpr_now(GPR_CLOCK_REALTIME),
653
624
  s_->t->flow_control.stats(), s_->flow_control.stats()));
654
625
  }
655
626
  }
@@ -734,9 +705,7 @@ void grpc_chttp2_end_write(grpc_chttp2_transport* t, grpc_error_handle error) {
734
705
  t->keepalive_timeout != grpc_core::Duration::Infinity()) {
735
706
  // Set ping timeout after finishing write so we don't measure our own send
736
707
  // time.
737
- const auto timeout = grpc_core::IsSeparatePingFromKeepaliveEnabled()
738
- ? t->ping_timeout
739
- : t->keepalive_timeout;
708
+ const auto timeout = t->ping_timeout;
740
709
  auto id = t->ping_callbacks.OnPingTimeout(
741
710
  timeout, t->event_engine.get(), [t = t->Ref()] {
742
711
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
@@ -750,8 +719,7 @@ void grpc_chttp2_end_write(grpc_chttp2_transport* t, grpc_error_handle error) {
750
719
  id.value());
751
720
  }
752
721
 
753
- if (grpc_core::IsSeparatePingFromKeepaliveEnabled() &&
754
- t->keepalive_incoming_data_wanted &&
722
+ if (t->keepalive_incoming_data_wanted &&
755
723
  t->keepalive_timeout < t->ping_timeout &&
756
724
  t->keepalive_ping_timeout_handle !=
757
725
  grpc_event_engine::experimental::EventEngine::TaskHandle::