grpc 1.74.1 → 1.75.0.pre1

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 (368) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +83 -41
  3. data/include/grpc/credentials.h +7 -1
  4. data/src/core/call/client_call.cc +4 -4
  5. data/src/core/call/filter_fusion.h +1230 -0
  6. data/src/core/call/metadata.cc +22 -0
  7. data/src/core/call/metadata.h +24 -2
  8. data/src/core/channelz/channelz.cc +10 -17
  9. data/src/core/channelz/channelz.h +58 -19
  10. data/src/core/channelz/channelz_registry.cc +0 -162
  11. data/src/core/channelz/channelz_registry.h +14 -7
  12. data/src/core/channelz/property_list.cc +19 -23
  13. data/src/core/channelz/property_list.h +3 -1
  14. data/src/core/channelz/v2tov1/convert.cc +683 -0
  15. data/src/core/channelz/v2tov1/convert.h +58 -0
  16. data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
  17. data/src/core/channelz/v2tov1/legacy_api.h +32 -0
  18. data/src/core/channelz/v2tov1/property_list.cc +118 -0
  19. data/src/core/channelz/v2tov1/property_list.h +52 -0
  20. data/src/core/client_channel/client_channel_filter.cc +5 -4
  21. data/src/core/client_channel/client_channel_filter.h +2 -2
  22. data/src/core/client_channel/client_channel_internal.h +2 -1
  23. data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
  24. data/src/core/client_channel/subchannel.cc +14 -6
  25. data/src/core/client_channel/subchannel.h +2 -0
  26. data/src/core/config/core_configuration.cc +3 -1
  27. data/src/core/config/core_configuration.h +12 -0
  28. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
  29. data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
  30. data/src/core/credentials/transport/channel_creds_registry_init.cc +3 -1
  31. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
  32. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
  33. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
  34. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
  37. data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
  38. data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
  39. data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
  40. data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
  41. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
  42. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
  43. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
  44. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
  45. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
  46. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  47. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  48. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
  49. data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
  50. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  51. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
  52. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3 -2
  53. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  54. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  55. data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
  56. data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
  57. data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
  61. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
  62. data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
  63. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
  64. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
  65. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
  66. data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
  67. data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
  68. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  69. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
  70. data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
  72. data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
  73. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
  74. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
  75. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
  76. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
  77. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +142 -54
  78. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
  79. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
  80. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
  81. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
  82. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +86 -88
  83. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
  84. data/src/core/filter/auth/auth_filters.h +2 -2
  85. data/src/core/filter/fused_filters.cc +154 -0
  86. data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
  87. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
  88. data/src/core/handshaker/security/secure_endpoint.cc +28 -13
  89. data/src/core/handshaker/security/secure_endpoint.h +8 -0
  90. data/src/core/lib/channel/promise_based_filter.cc +15 -25
  91. data/src/core/lib/channel/promise_based_filter.h +6 -5
  92. data/src/core/lib/event_engine/ares_resolver.h +3 -1
  93. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
  94. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
  95. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
  96. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
  97. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
  98. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +12 -0
  99. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
  100. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
  101. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
  102. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
  103. data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
  104. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
  105. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
  106. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
  107. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
  108. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
  109. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +2 -2
  110. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
  111. data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
  112. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  113. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  114. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
  115. data/src/core/lib/experiments/experiments.cc +120 -6
  116. data/src/core/lib/experiments/experiments.h +46 -3
  117. data/src/core/lib/iomgr/combiner.cc +1 -1
  118. data/src/core/lib/iomgr/exec_ctx.h +3 -9
  119. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  120. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
  121. data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  123. data/src/core/lib/iomgr/tcp_posix.cc +3 -3
  124. data/src/core/lib/promise/activity.h +2 -2
  125. data/src/core/lib/promise/mpsc.cc +8 -8
  126. data/src/core/lib/promise/party.cc +7 -7
  127. data/src/core/lib/promise/party.h +4 -4
  128. data/src/core/lib/promise/poll.h +10 -0
  129. data/src/core/lib/resource_quota/memory_quota.cc +90 -3
  130. data/src/core/lib/resource_quota/memory_quota.h +20 -9
  131. data/src/core/lib/resource_quota/periodic_update.cc +14 -0
  132. data/src/core/lib/resource_quota/periodic_update.h +8 -0
  133. data/src/core/lib/resource_quota/resource_quota.cc +15 -4
  134. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  135. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  136. data/src/core/lib/surface/call.cc +5 -5
  137. data/src/core/lib/surface/call.h +6 -5
  138. data/src/core/lib/surface/completion_queue.cc +2 -4
  139. data/src/core/lib/surface/filter_stack_call.cc +1 -1
  140. data/src/core/lib/surface/version.cc +2 -2
  141. data/src/core/lib/transport/promise_endpoint.cc +2 -2
  142. data/src/core/lib/transport/promise_endpoint.h +3 -3
  143. data/src/core/load_balancing/endpoint_list.cc +29 -2
  144. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
  145. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
  146. data/src/core/load_balancing/pick_first/pick_first.cc +12 -5
  147. data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
  148. data/src/core/net/socket_mutator.cc +19 -0
  149. data/src/core/net/socket_mutator.h +25 -0
  150. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  151. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
  152. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
  153. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
  154. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
  155. data/src/core/resolver/xds/xds_dependency_manager.cc +1 -1
  156. data/src/core/server/server.cc +1 -1
  157. data/src/core/server/server_call_tracer_filter.cc +0 -66
  158. data/src/core/server/server_call_tracer_filter.h +64 -0
  159. data/src/core/server/server_config_selector_filter.cc +1 -1
  160. data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
  161. data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
  162. data/src/core/telemetry/call_tracer.cc +20 -14
  163. data/src/core/telemetry/call_tracer.h +22 -17
  164. data/src/core/telemetry/metrics.h +8 -8
  165. data/src/core/telemetry/stats_data.cc +151 -151
  166. data/src/core/telemetry/stats_data.h +87 -87
  167. data/src/core/transport/auth_context.cc +20 -0
  168. data/src/core/transport/auth_context.h +4 -0
  169. data/src/core/transport/auth_context_comparator_registry.h +69 -0
  170. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
  171. data/src/core/tsi/ssl_transport_security.cc +202 -32
  172. data/src/core/tsi/ssl_transport_security.h +19 -10
  173. data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
  174. data/src/core/tsi/ssl_transport_security_utils.h +4 -0
  175. data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
  176. data/src/core/util/latent_see.cc +178 -146
  177. data/src/core/util/latent_see.h +245 -188
  178. data/src/core/util/single_set_ptr.h +5 -2
  179. data/src/core/util/useful.h +91 -0
  180. data/src/core/util/windows/directory_reader.cc +1 -0
  181. data/src/core/util/windows/thd.cc +1 -3
  182. data/src/core/util/work_serializer.cc +1 -1
  183. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
  184. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
  185. data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
  186. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  187. data/src/ruby/lib/grpc/version.rb +1 -1
  188. data/third_party/cares/cares/include/ares.h +925 -460
  189. data/third_party/cares/cares/include/ares_dns.h +86 -71
  190. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  191. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  192. data/third_party/cares/cares/include/ares_version.h +37 -14
  193. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  194. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  195. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  196. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  197. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  198. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  199. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  200. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  201. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  202. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  203. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  204. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  205. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  206. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  207. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  208. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  209. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  210. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  211. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  212. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  213. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  214. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  215. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  216. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  217. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  218. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  219. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  220. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  221. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  222. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  223. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  224. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  225. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  226. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  227. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  228. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  229. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  230. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  231. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  232. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  233. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  234. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  235. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  236. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  237. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  238. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  239. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  240. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  241. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  242. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  243. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  244. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  245. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  246. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  247. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  248. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  249. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  250. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  251. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  252. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  253. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  254. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  255. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  256. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  257. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  258. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  259. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  260. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  261. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  262. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  263. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  264. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  265. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  266. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  267. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  268. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  269. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  270. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  271. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  272. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  273. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  274. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  275. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  276. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  277. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  278. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  279. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  280. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  281. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  282. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  283. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  284. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  285. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  286. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  287. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  288. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  289. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  290. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  291. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  292. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  293. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  294. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  295. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  296. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  297. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  298. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  299. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  300. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  301. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  302. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  303. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  304. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  305. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  306. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  307. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  308. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  309. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  310. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  311. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  312. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  313. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  314. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  315. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  316. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  317. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  318. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  319. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  320. metadata +121 -49
  321. data/src/core/util/ring_buffer.h +0 -122
  322. data/third_party/cares/cares/include/ares_rules.h +0 -125
  323. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  324. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  325. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  326. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  327. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  328. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  329. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  330. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  331. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  332. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  333. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  334. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  335. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  336. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  337. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  338. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  339. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  340. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  341. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  342. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  343. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  344. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  345. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  346. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  347. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  348. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  349. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  350. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  351. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  352. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  353. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  354. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  355. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  356. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  357. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  358. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  359. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  360. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  361. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  362. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  363. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  364. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  365. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  366. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  367. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  368. data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -312,7 +312,7 @@ TlsChannelSecurityConnector::TlsChannelSecurityConnector(
312
312
  // hence no need to register the watcher.
313
313
  bool use_default_roots = !options_->watch_root_cert();
314
314
  if (use_default_roots && !options_->watch_identity_pair()) {
315
- watcher_ptr->OnCertificatesChanged(std::nullopt, std::nullopt);
315
+ watcher_ptr->OnCertificatesChanged(nullptr, std::nullopt);
316
316
  } else {
317
317
  distributor->WatchTlsCertificates(std::move(watcher_ptr),
318
318
  watched_root_cert_name,
@@ -429,18 +429,18 @@ ArenaPromise<absl::Status> TlsChannelSecurityConnector::CheckCallHost(
429
429
  }
430
430
 
431
431
  void TlsChannelSecurityConnector::TlsChannelCertificateWatcher::
432
- OnCertificatesChanged(std::optional<absl::string_view> root_certs,
432
+ OnCertificatesChanged(std::shared_ptr<RootCertInfo> root_certs,
433
433
  std::optional<PemKeyCertPairList> key_cert_pairs) {
434
434
  CHECK_NE(security_connector_, nullptr);
435
435
  MutexLock lock(&security_connector_->mu_);
436
- if (root_certs.has_value()) {
437
- security_connector_->pem_root_certs_ = root_certs;
436
+ if (root_certs != nullptr) {
437
+ security_connector_->root_cert_info_ = std::move(root_certs);
438
438
  }
439
439
  if (key_cert_pairs.has_value()) {
440
440
  security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs);
441
441
  }
442
442
  const bool root_ready = !security_connector_->options_->watch_root_cert() ||
443
- security_connector_->pem_root_certs_.has_value();
443
+ security_connector_->root_cert_info_ != nullptr;
444
444
  const bool identity_ready =
445
445
  !security_connector_->options_->watch_identity_pair() ||
446
446
  security_connector_->pem_key_cert_pair_list_.has_value();
@@ -525,21 +525,13 @@ TlsChannelSecurityConnector::UpdateHandshakerFactoryLocked() {
525
525
  if (client_handshaker_factory_ != nullptr) {
526
526
  tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_);
527
527
  }
528
- std::string pem_root_certs;
529
- if (pem_root_certs_.has_value()) {
530
- // TODO(ZhenLian): update the underlying TSI layer to use C++ types like
531
- // std::string and absl::string_view to avoid making another copy here.
532
- pem_root_certs = std::string(*pem_root_certs_);
533
- }
534
528
  tsi_ssl_pem_key_cert_pair* pem_key_cert_pair = nullptr;
535
529
  if (pem_key_cert_pair_list_.has_value()) {
536
530
  pem_key_cert_pair = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_);
537
531
  }
538
532
  bool use_default_roots = !options_->watch_root_cert();
539
533
  grpc_security_status status = grpc_ssl_tsi_client_handshaker_factory_init(
540
- pem_key_cert_pair,
541
- pem_root_certs.empty() || use_default_roots ? nullptr
542
- : pem_root_certs.c_str(),
534
+ pem_key_cert_pair, use_default_roots ? nullptr : root_cert_info_,
543
535
  skip_server_certificate_verification,
544
536
  grpc_get_tsi_tls_version(options_->min_tls_version()),
545
537
  grpc_get_tsi_tls_version(options_->max_tls_version()), ssl_session_cache_,
@@ -689,18 +681,18 @@ int TlsServerSecurityConnector::cmp(
689
681
  }
690
682
 
691
683
  void TlsServerSecurityConnector::TlsServerCertificateWatcher::
692
- OnCertificatesChanged(std::optional<absl::string_view> root_certs,
684
+ OnCertificatesChanged(std::shared_ptr<RootCertInfo> roots,
693
685
  std::optional<PemKeyCertPairList> key_cert_pairs) {
694
686
  CHECK_NE(security_connector_, nullptr);
695
687
  MutexLock lock(&security_connector_->mu_);
696
- if (root_certs.has_value()) {
697
- security_connector_->pem_root_certs_ = root_certs;
688
+ if (roots != nullptr) {
689
+ security_connector_->root_cert_info_ = std::move(roots);
698
690
  }
699
691
  if (key_cert_pairs.has_value()) {
700
692
  security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs);
701
693
  }
702
694
  bool root_being_watched = security_connector_->options_->watch_root_cert();
703
- bool root_has_value = security_connector_->pem_root_certs_.has_value();
695
+ bool root_has_value = security_connector_->root_cert_info_ != nullptr;
704
696
  bool identity_being_watched =
705
697
  security_connector_->options_->watch_identity_pair();
706
698
  bool identity_has_value =
@@ -790,18 +782,11 @@ TlsServerSecurityConnector::UpdateHandshakerFactoryLocked() {
790
782
  // The identity certs on the server side shouldn't be empty.
791
783
  CHECK(pem_key_cert_pair_list_.has_value());
792
784
  CHECK(!(*pem_key_cert_pair_list_).empty());
793
- std::string pem_root_certs;
794
- if (pem_root_certs_.has_value()) {
795
- // TODO(ZhenLian): update the underlying TSI layer to use C++ types like
796
- // std::string and absl::string_view to avoid making another copy here.
797
- pem_root_certs = std::string(*pem_root_certs_);
798
- }
799
785
  tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs = nullptr;
800
786
  pem_key_cert_pairs = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_);
801
787
  size_t num_key_cert_pairs = (*pem_key_cert_pair_list_).size();
802
788
  grpc_security_status status = grpc_ssl_tsi_server_handshaker_factory_init(
803
- pem_key_cert_pairs, num_key_cert_pairs,
804
- pem_root_certs.empty() ? nullptr : pem_root_certs.c_str(),
789
+ pem_key_cert_pairs, num_key_cert_pairs, root_cert_info_,
805
790
  options_->cert_request_type(),
806
791
  grpc_get_tsi_tls_version(options_->min_tls_version()),
807
792
  grpc_get_tsi_tls_version(options_->max_tls_version()),
@@ -94,14 +94,14 @@ class TlsChannelSecurityConnector final
94
94
  return client_handshaker_factory_;
95
95
  };
96
96
 
97
- std::optional<absl::string_view> RootCertsForTesting() {
97
+ std::optional<PemKeyCertPairList> KeyCertPairListForTesting() {
98
98
  MutexLock lock(&mu_);
99
- return pem_root_certs_;
99
+ return pem_key_cert_pair_list_;
100
100
  }
101
101
 
102
- std::optional<PemKeyCertPairList> KeyCertPairListForTesting() {
102
+ std::shared_ptr<RootCertInfo> RootCertInfoForTesting() {
103
103
  MutexLock lock(&mu_);
104
- return pem_key_cert_pair_list_;
104
+ return root_cert_info_;
105
105
  }
106
106
 
107
107
  private:
@@ -115,7 +115,7 @@ class TlsChannelSecurityConnector final
115
115
  TlsChannelSecurityConnector* security_connector)
116
116
  : security_connector_(security_connector) {}
117
117
  void OnCertificatesChanged(
118
- std::optional<absl::string_view> root_certs,
118
+ std::shared_ptr<RootCertInfo> root_certs,
119
119
  std::optional<PemKeyCertPairList> key_cert_pairs) override;
120
120
  void OnError(grpc_error_handle root_cert_error,
121
121
  grpc_error_handle identity_cert_error) override;
@@ -165,9 +165,9 @@ class TlsChannelSecurityConnector final
165
165
  ABSL_GUARDED_BY(mu_) = nullptr;
166
166
  tsi_ssl_session_cache* ssl_session_cache_ ABSL_GUARDED_BY(mu_) = nullptr;
167
167
  RefCountedPtr<TlsSessionKeyLogger> tls_session_key_logger_;
168
- std::optional<absl::string_view> pem_root_certs_ ABSL_GUARDED_BY(mu_);
169
168
  std::optional<PemKeyCertPairList> pem_key_cert_pair_list_
170
169
  ABSL_GUARDED_BY(mu_);
170
+ std::shared_ptr<RootCertInfo> root_cert_info_ ABSL_GUARDED_BY(mu_);
171
171
  std::map<grpc_closure* /*on_peer_checked*/, ChannelPendingVerifierRequest*>
172
172
  pending_verifier_requests_ ABSL_GUARDED_BY(verifier_request_map_mu_);
173
173
  };
@@ -204,14 +204,14 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
204
204
  return server_handshaker_factory_;
205
205
  };
206
206
 
207
- std::optional<absl::string_view> RootCertsForTesting() {
207
+ std::optional<PemKeyCertPairList> KeyCertPairListForTesting() {
208
208
  MutexLock lock(&mu_);
209
- return pem_root_certs_;
209
+ return pem_key_cert_pair_list_;
210
210
  }
211
211
 
212
- std::optional<PemKeyCertPairList> KeyCertPairListForTesting() {
212
+ std::shared_ptr<RootCertInfo> RootCertInfoForTesting() {
213
213
  MutexLock lock(&mu_);
214
- return pem_key_cert_pair_list_;
214
+ return root_cert_info_;
215
215
  }
216
216
 
217
217
  private:
@@ -225,7 +225,7 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
225
225
  TlsServerSecurityConnector* security_connector)
226
226
  : security_connector_(security_connector) {}
227
227
  void OnCertificatesChanged(
228
- std::optional<absl::string_view> root_certs,
228
+ std::shared_ptr<RootCertInfo> roots,
229
229
  std::optional<PemKeyCertPairList> key_cert_pairs) override;
230
230
 
231
231
  void OnError(grpc_error_handle root_cert_error,
@@ -272,9 +272,9 @@ class TlsServerSecurityConnector final : public grpc_server_security_connector {
272
272
  certificate_watcher_ = nullptr;
273
273
  tsi_ssl_server_handshaker_factory* server_handshaker_factory_
274
274
  ABSL_GUARDED_BY(mu_) = nullptr;
275
- std::optional<absl::string_view> pem_root_certs_ ABSL_GUARDED_BY(mu_);
276
275
  std::optional<PemKeyCertPairList> pem_key_cert_pair_list_
277
276
  ABSL_GUARDED_BY(mu_);
277
+ std::shared_ptr<RootCertInfo> root_cert_info_ ABSL_GUARDED_BY(mu_);
278
278
  RefCountedPtr<TlsSessionKeyLogger> tls_session_key_logger_;
279
279
  std::map<grpc_closure* /*on_peer_checked*/, ServerPendingVerifierRequest*>
280
280
  pending_verifier_requests_ ABSL_GUARDED_BY(verifier_request_map_mu_);
@@ -116,8 +116,7 @@ BackendMetricFilter::Create(const ChannelArgs&, ChannelFilter::Args) {
116
116
  }
117
117
 
118
118
  void BackendMetricFilter::Call::OnServerTrailingMetadata(ServerMetadata& md) {
119
- GRPC_LATENT_SEE_INNER_SCOPE(
120
- "BackendMetricFilter::Call::OnServerTrailingMetadata");
119
+ GRPC_LATENT_SEE_SCOPE("BackendMetricFilter::Call::OnServerTrailingMetadata");
121
120
  if (md.get(GrpcCallWasCancelled()).value_or(false)) return;
122
121
  auto* ctx = MaybeGetContext<BackendMetricProvider>();
123
122
  if (ctx == nullptr) {
@@ -107,8 +107,7 @@ Slice UserAgentFromArgs(const ChannelArgs& args,
107
107
 
108
108
  void HttpClientFilter::Call::OnClientInitialMetadata(ClientMetadata& md,
109
109
  HttpClientFilter* filter) {
110
- GRPC_LATENT_SEE_INNER_SCOPE(
111
- "HttpClientFilter::Call::OnClientInitialMetadata");
110
+ GRPC_LATENT_SEE_SCOPE("HttpClientFilter::Call::OnClientInitialMetadata");
112
111
  if (filter->test_only_use_put_requests_) {
113
112
  md.Set(HttpMethodMetadata(), HttpMethodMetadata::kPut);
114
113
  } else {
@@ -122,15 +121,13 @@ void HttpClientFilter::Call::OnClientInitialMetadata(ClientMetadata& md,
122
121
 
123
122
  absl::Status HttpClientFilter::Call::OnServerInitialMetadata(
124
123
  ServerMetadata& md) {
125
- GRPC_LATENT_SEE_INNER_SCOPE(
126
- "HttpClientFilter::Call::OnServerInitialMetadata");
124
+ GRPC_LATENT_SEE_SCOPE("HttpClientFilter::Call::OnServerInitialMetadata");
127
125
  return CheckServerMetadata(&md);
128
126
  }
129
127
 
130
128
  absl::Status HttpClientFilter::Call::OnServerTrailingMetadata(
131
129
  ServerMetadata& md) {
132
- GRPC_LATENT_SEE_INNER_SCOPE(
133
- "HttpClientFilter::Call::OnServerTrailingMetadata");
130
+ GRPC_LATENT_SEE_SCOPE("HttpClientFilter::Call::OnServerTrailingMetadata");
134
131
  return CheckServerMetadata(&md);
135
132
  }
136
133
 
@@ -51,8 +51,7 @@ ClientAuthorityFilter::Create(const ChannelArgs& args, ChannelFilter::Args) {
51
51
 
52
52
  void ClientAuthorityFilter::Call::OnClientInitialMetadata(
53
53
  ClientMetadata& md, ClientAuthorityFilter* filter) {
54
- GRPC_LATENT_SEE_INNER_SCOPE(
55
- "ClientAuthorityFilter::Call::OnClientInitialMetadata");
54
+ GRPC_LATENT_SEE_SCOPE("ClientAuthorityFilter::Call::OnClientInitialMetadata");
56
55
  // If no authority is set, set the default authority.
57
56
  if (md.get_pointer(HttpAuthorityMetadata()) == nullptr) {
58
57
  md.Set(HttpAuthorityMetadata(), filter->default_authority_.Ref());
@@ -229,7 +229,7 @@ ChannelCompression::DecompressArgs ChannelCompression::HandleIncomingMetadata(
229
229
 
230
230
  void ClientCompressionFilter::Call::OnClientInitialMetadata(
231
231
  ClientMetadata& md, ClientCompressionFilter* filter) {
232
- GRPC_LATENT_SEE_INNER_SCOPE(
232
+ GRPC_LATENT_SEE_SCOPE(
233
233
  "ClientCompressionFilter::Call::OnClientInitialMetadata");
234
234
  compression_algorithm_ =
235
235
  filter->compression_engine_.HandleOutgoingMetadata(md);
@@ -238,7 +238,7 @@ void ClientCompressionFilter::Call::OnClientInitialMetadata(
238
238
 
239
239
  MessageHandle ClientCompressionFilter::Call::OnClientToServerMessage(
240
240
  MessageHandle message, ClientCompressionFilter* filter) {
241
- GRPC_LATENT_SEE_INNER_SCOPE(
241
+ GRPC_LATENT_SEE_SCOPE(
242
242
  "ClientCompressionFilter::Call::OnClientToServerMessage");
243
243
  return filter->compression_engine_.CompressMessage(
244
244
  std::move(message), compression_algorithm_, call_tracer_);
@@ -246,7 +246,7 @@ MessageHandle ClientCompressionFilter::Call::OnClientToServerMessage(
246
246
 
247
247
  void ClientCompressionFilter::Call::OnServerInitialMetadata(
248
248
  ServerMetadata& md, ClientCompressionFilter* filter) {
249
- GRPC_LATENT_SEE_INNER_SCOPE(
249
+ GRPC_LATENT_SEE_SCOPE(
250
250
  "ClientCompressionFilter::Call::OnServerInitialMetadata");
251
251
  decompress_args_ = filter->compression_engine_.HandleIncomingMetadata(md);
252
252
  }
@@ -254,7 +254,7 @@ void ClientCompressionFilter::Call::OnServerInitialMetadata(
254
254
  absl::StatusOr<MessageHandle>
255
255
  ClientCompressionFilter::Call::OnServerToClientMessage(
256
256
  MessageHandle message, ClientCompressionFilter* filter) {
257
- GRPC_LATENT_SEE_INNER_SCOPE(
257
+ GRPC_LATENT_SEE_SCOPE(
258
258
  "ClientCompressionFilter::Call::OnServerToClientMessage");
259
259
  return filter->compression_engine_.DecompressMessage(
260
260
  /*is_client=*/true, std::move(message), decompress_args_, call_tracer_);
@@ -262,7 +262,7 @@ ClientCompressionFilter::Call::OnServerToClientMessage(
262
262
 
263
263
  void ServerCompressionFilter::Call::OnClientInitialMetadata(
264
264
  ClientMetadata& md, ServerCompressionFilter* filter) {
265
- GRPC_LATENT_SEE_INNER_SCOPE(
265
+ GRPC_LATENT_SEE_SCOPE(
266
266
  "ServerCompressionFilter::Call::OnClientInitialMetadata");
267
267
  decompress_args_ = filter->compression_engine_.HandleIncomingMetadata(md);
268
268
  }
@@ -270,7 +270,7 @@ void ServerCompressionFilter::Call::OnClientInitialMetadata(
270
270
  absl::StatusOr<MessageHandle>
271
271
  ServerCompressionFilter::Call::OnClientToServerMessage(
272
272
  MessageHandle message, ServerCompressionFilter* filter) {
273
- GRPC_LATENT_SEE_INNER_SCOPE(
273
+ GRPC_LATENT_SEE_SCOPE(
274
274
  "ServerCompressionFilter::Call::OnClientToServerMessage");
275
275
  return filter->compression_engine_.DecompressMessage(
276
276
  /*is_client=*/false, std::move(message), decompress_args_,
@@ -279,7 +279,7 @@ ServerCompressionFilter::Call::OnClientToServerMessage(
279
279
 
280
280
  void ServerCompressionFilter::Call::OnServerInitialMetadata(
281
281
  ServerMetadata& md, ServerCompressionFilter* filter) {
282
- GRPC_LATENT_SEE_INNER_SCOPE(
282
+ GRPC_LATENT_SEE_SCOPE(
283
283
  "ServerCompressionFilter::Call::OnServerInitialMetadata");
284
284
  compression_algorithm_ =
285
285
  filter->compression_engine_.HandleOutgoingMetadata(md);
@@ -287,7 +287,7 @@ void ServerCompressionFilter::Call::OnServerInitialMetadata(
287
287
 
288
288
  MessageHandle ServerCompressionFilter::Call::OnServerToClientMessage(
289
289
  MessageHandle message, ServerCompressionFilter* filter) {
290
- GRPC_LATENT_SEE_INNER_SCOPE(
290
+ GRPC_LATENT_SEE_SCOPE(
291
291
  "ServerCompressionFilter::Call::OnServerToClientMessage");
292
292
  return filter->compression_engine_.CompressMessage(
293
293
  std::move(message), compression_algorithm_,
@@ -71,8 +71,7 @@ ServerMetadataHandle MalformedRequest(absl::string_view explanation) {
71
71
 
72
72
  ServerMetadataHandle HttpServerFilter::Call::OnClientInitialMetadata(
73
73
  ClientMetadata& md, HttpServerFilter* filter) {
74
- GRPC_LATENT_SEE_INNER_SCOPE(
75
- "HttpServerFilter::Call::OnClientInitialMetadata");
74
+ GRPC_LATENT_SEE_SCOPE("HttpServerFilter::Call::OnClientInitialMetadata");
76
75
  auto method = md.get(HttpMethodMetadata());
77
76
  if (method.has_value()) {
78
77
  switch (*method) {
@@ -135,8 +134,7 @@ ServerMetadataHandle HttpServerFilter::Call::OnClientInitialMetadata(
135
134
  }
136
135
 
137
136
  void HttpServerFilter::Call::OnServerInitialMetadata(ServerMetadata& md) {
138
- GRPC_LATENT_SEE_INNER_SCOPE(
139
- "HttpServerFilter::Call::OnServerInitialMetadata");
137
+ GRPC_LATENT_SEE_SCOPE("HttpServerFilter::Call::OnServerInitialMetadata");
140
138
  GRPC_TRACE_LOG(call, INFO)
141
139
  << GetContext<Activity>()->DebugTag() << "[http-server] Write metadata";
142
140
  FilterOutgoingMetadata(&md);
@@ -145,8 +143,7 @@ void HttpServerFilter::Call::OnServerInitialMetadata(ServerMetadata& md) {
145
143
  }
146
144
 
147
145
  void HttpServerFilter::Call::OnServerTrailingMetadata(ServerMetadata& md) {
148
- GRPC_LATENT_SEE_INNER_SCOPE(
149
- "HttpServerFilter::Call::OnServerTrailingMetadata");
146
+ GRPC_LATENT_SEE_SCOPE("HttpServerFilter::Call::OnServerTrailingMetadata");
150
147
  FilterOutgoingMetadata(&md);
151
148
  }
152
149
 
@@ -187,7 +187,7 @@ void ClientMessageSizeFilter::Call::OnClientInitialMetadata(
187
187
 
188
188
  ServerMetadataHandle ServerMessageSizeFilter::Call::OnClientToServerMessage(
189
189
  const Message& message, ServerMessageSizeFilter* filter) {
190
- GRPC_LATENT_SEE_INNER_SCOPE(
190
+ GRPC_LATENT_SEE_SCOPE(
191
191
  "ServerMessageSizeFilter::Call::OnClientToServerMessage");
192
192
  return CheckPayload(message, filter->parsed_config_.max_recv_size(),
193
193
  /*is_client=*/false, false);
@@ -195,7 +195,7 @@ ServerMetadataHandle ServerMessageSizeFilter::Call::OnClientToServerMessage(
195
195
 
196
196
  ServerMetadataHandle ServerMessageSizeFilter::Call::OnServerToClientMessage(
197
197
  const Message& message, ServerMessageSizeFilter* filter) {
198
- GRPC_LATENT_SEE_INNER_SCOPE(
198
+ GRPC_LATENT_SEE_SCOPE(
199
199
  "ServerMessageSizeFilter::Call::OnServerToClientMessage");
200
200
  return CheckPayload(message, filter->parsed_config_.max_send_size(),
201
201
  /*is_client=*/false, true);
@@ -203,7 +203,7 @@ ServerMetadataHandle ServerMessageSizeFilter::Call::OnServerToClientMessage(
203
203
 
204
204
  ServerMetadataHandle ClientMessageSizeFilter::Call::OnClientToServerMessage(
205
205
  const Message& message) {
206
- GRPC_LATENT_SEE_INNER_SCOPE(
206
+ GRPC_LATENT_SEE_SCOPE(
207
207
  "ClientMessageSizeFilter::Call::OnClientToServerMessage");
208
208
  return CheckPayload(message, limits_.max_send_size(), /*is_client=*/true,
209
209
  true);
@@ -211,7 +211,7 @@ ServerMetadataHandle ClientMessageSizeFilter::Call::OnClientToServerMessage(
211
211
 
212
212
  ServerMetadataHandle ClientMessageSizeFilter::Call::OnServerToClientMessage(
213
213
  const Message& message) {
214
- GRPC_LATENT_SEE_INNER_SCOPE(
214
+ GRPC_LATENT_SEE_SCOPE(
215
215
  "ClientMessageSizeFilter::Call::OnServerToClientMessage");
216
216
  return CheckPayload(message, limits_.max_recv_size(), /*is_client=*/true,
217
217
  false);
@@ -43,7 +43,7 @@ namespace grpc_core {
43
43
 
44
44
  absl::Status RbacFilter::Call::OnClientInitialMetadata(ClientMetadata& md,
45
45
  RbacFilter* filter) {
46
- GRPC_LATENT_SEE_INNER_SCOPE("RbacFilter::Call::OnClientInitialMetadata");
46
+ GRPC_LATENT_SEE_SCOPE("RbacFilter::Call::OnClientInitialMetadata");
47
47
  // Fetch and apply the rbac policy from the service config.
48
48
  auto* service_config_call_data = GetContext<ServiceConfigCallData>();
49
49
  auto* method_params = static_cast<RbacMethodParsedConfig*>(
@@ -213,8 +213,7 @@ bool IsConfiguredPath(absl::string_view configured_path,
213
213
 
214
214
  void StatefulSessionFilter::Call::OnClientInitialMetadata(
215
215
  ClientMetadata& md, StatefulSessionFilter* filter) {
216
- GRPC_LATENT_SEE_INNER_SCOPE(
217
- "StatefulSessionFilter::Call::OnClientInitialMetadata");
216
+ GRPC_LATENT_SEE_SCOPE("StatefulSessionFilter::Call::OnClientInitialMetadata");
218
217
  // Get config.
219
218
  auto* service_config_call_data = GetContext<ServiceConfigCallData>();
220
219
  CHECK_NE(service_config_call_data, nullptr);
@@ -254,8 +253,7 @@ void StatefulSessionFilter::Call::OnClientInitialMetadata(
254
253
  }
255
254
 
256
255
  void StatefulSessionFilter::Call::OnServerInitialMetadata(ServerMetadata& md) {
257
- GRPC_LATENT_SEE_INNER_SCOPE(
258
- "StatefulSessionFilter::Call::OnServerInitialMetadata");
256
+ GRPC_LATENT_SEE_SCOPE("StatefulSessionFilter::Call::OnServerInitialMetadata");
259
257
  if (!perform_filtering_) return;
260
258
  // Add cookie to server initial metadata if needed.
261
259
  MaybeUpdateServerInitialMetadata(cookie_config_, cluster_changed_,
@@ -264,7 +262,7 @@ void StatefulSessionFilter::Call::OnServerInitialMetadata(ServerMetadata& md) {
264
262
  }
265
263
 
266
264
  void StatefulSessionFilter::Call::OnServerTrailingMetadata(ServerMetadata& md) {
267
- GRPC_LATENT_SEE_INNER_SCOPE(
265
+ GRPC_LATENT_SEE_SCOPE(
268
266
  "StatefulSessionFilter::Call::OnServerTrailingMetadata");
269
267
  if (!perform_filtering_) return;
270
268
  // If we got a Trailers-Only response, then add the
@@ -69,6 +69,7 @@
69
69
  #include "src/core/ext/transport/chttp2/transport/frame_security.h"
70
70
  #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
71
71
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
72
+ #include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
72
73
  #include "src/core/ext/transport/chttp2/transport/http2_stats_collector.h"
73
74
  #include "src/core/ext/transport/chttp2/transport/http2_status.h"
74
75
  #include "src/core/ext/transport/chttp2/transport/internal.h"
@@ -1136,7 +1137,7 @@ static const char* begin_writing_desc(bool partial) {
1136
1137
  static void write_action_begin_locked(
1137
1138
  grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
1138
1139
  grpc_error_handle /*error_ignored*/) {
1139
- GRPC_LATENT_SEE_INNER_SCOPE("write_action_begin_locked");
1140
+ GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("write_action_begin_locked");
1140
1141
  CHECK(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
1141
1142
  grpc_chttp2_begin_write_result r;
1142
1143
  if (!t->closed_with_error.ok()) {
@@ -2896,7 +2897,7 @@ static void read_action(grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
2896
2897
  static void read_action_parse_loop_locked(
2897
2898
  grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
2898
2899
  grpc_error_handle error) {
2899
- GRPC_LATENT_SEE_INNER_SCOPE("read_action_parse_loop_locked");
2900
+ GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("read_action_parse_loop_locked");
2900
2901
  if (t->closed_with_error.ok()) {
2901
2902
  grpc_error_handle errors[3] = {error, absl::OkStatus(), absl::OkStatus()};
2902
2903
  size_t requests_started = 0;
@@ -34,6 +34,7 @@
34
34
  #include "absl/strings/str_format.h"
35
35
  #include "absl/strings/str_join.h"
36
36
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
37
+ #include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
37
38
  #include "src/core/lib/experiments/experiments.h"
38
39
  #include "src/core/lib/resource_quota/memory_quota.h"
39
40
  #include "src/core/util/useful.h"
@@ -34,6 +34,7 @@
34
34
  #include "absl/strings/string_view.h"
35
35
  #include "src/core/channelz/property_list.h"
36
36
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
37
+ #include "src/core/ext/transport/chttp2/transport/http2_settings_manager.h"
37
38
  #include "src/core/lib/debug/trace.h"
38
39
  #include "src/core/lib/resource_quota/memory_quota.h"
39
40
  #include "src/core/lib/transport/bdp_estimator.h"
@@ -24,20 +24,69 @@
24
24
  #include "absl/log/check.h"
25
25
  #include "absl/status/status.h"
26
26
  #include "absl/strings/str_cat.h"
27
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
27
28
  #include "src/core/lib/slice/slice.h"
28
29
  #include "src/core/lib/slice/slice_buffer.h"
29
30
  #include "src/core/util/crash.h"
30
31
 
32
+ // TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
33
+ // framing code
34
+
31
35
  using grpc_core::http2::Http2ErrorCode;
32
36
  using grpc_core::http2::Http2Status;
33
37
  using grpc_core::http2::ValueOrHttp2Status;
34
38
 
35
39
  namespace grpc_core {
36
40
 
41
+ ///////////////////////////////////////////////////////////////////////////////
42
+ // Settings Frame Validations
43
+
44
+ bool IsUnknownSetting(const uint16_t setting_id) {
45
+ // RFC9113 : An endpoint that receives a SETTINGS frame with any unknown
46
+ // or unsupported identifier MUST ignore that setting.
47
+ return setting_id < Http2Settings::kHeaderTableSizeWireId ||
48
+ setting_id > Http2Settings::kGrpcAllowSecurityFrameWireId ||
49
+ (setting_id > Http2Settings::kMaxHeaderListSizeWireId &&
50
+ setting_id < Http2Settings::kGrpcAllowTrueBinaryMetadataWireId);
51
+ }
52
+
53
+ Http2Status ValidateSettingsValues(
54
+ std::vector<Http2SettingsFrame::Setting>& list) {
55
+ for (const auto& setting : list) {
56
+ if (GPR_UNLIKELY(setting.id == Http2Settings::kInitialWindowSizeWireId &&
57
+ setting.value > RFC9113::kMaxSize31Bit)) {
58
+ LOG(ERROR)
59
+ << "ValidateSettingsValues Invalid "
60
+ "Setting:{setting.id:kInitialWindowSizeWireId, setting.value: "
61
+ << setting.value << "}";
62
+ return Http2Status::Http2ConnectionError(
63
+ Http2ErrorCode::kFlowControlError,
64
+ absl::StrCat(RFC9113::kIncorrectWindowSizeSetting,
65
+ "Invalid Setting:{setting.id:kInitialWindowSizeWireId, "
66
+ "setting.value: ",
67
+ setting.value));
68
+ } else if (GPR_UNLIKELY(setting.id == Http2Settings::kMaxFrameSizeWireId &&
69
+ (setting.value < RFC9113::kMinimumFrameSize ||
70
+ setting.value > RFC9113::kMaximumFrameSize))) {
71
+ LOG(ERROR) << "ValidateSettingsValues Invalid "
72
+ "Setting:{setting.id:kMaxFrameSizeWireId, setting.value: "
73
+ << setting.value << "}";
74
+ return Http2Status::Http2ConnectionError(
75
+ Http2ErrorCode::kProtocolError,
76
+ absl::StrCat(RFC9113::kIncorrectFrameSizeSetting,
77
+ "Invalid Setting:{setting.id:kMaxFrameSizeWireId, "
78
+ "setting.value: ",
79
+ setting.value));
80
+ }
81
+ }
82
+ DVLOG(2) << "Http2Transport ValidateSettingsValues Valid";
83
+ return Http2Status::Ok();
84
+ }
85
+
37
86
  namespace {
38
87
 
39
- // TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
40
- // framing code
88
+ ///////////////////////////////////////////////////////////////////////////////
89
+ // HTTP2 Framing Code
41
90
 
42
91
  // HTTP2 Frame Types
43
92
  enum class FrameType : uint8_t {
@@ -431,7 +480,8 @@ ValueOrHttp2Status<Http2Frame> ParseSettingsFrame(const Http2FrameHeader& hdr,
431
480
  Http2ErrorCode::kFrameSizeError,
432
481
  absl::StrCat(RFC9113::kSettingsLength0, hdr.ToString()));
433
482
  }
434
- return ValueOrHttp2Status<Http2Frame>(Http2SettingsFrame{true, {}});
483
+ return ValueOrHttp2Status<Http2Frame>(
484
+ Http2SettingsFrame{/*ack=*/true, /*settings=*/{}});
435
485
  }
436
486
 
437
487
  if (GPR_UNLIKELY(payload.Length() % 6 != 0)) {
@@ -440,13 +490,18 @@ ValueOrHttp2Status<Http2Frame> ParseSettingsFrame(const Http2FrameHeader& hdr,
440
490
  absl::StrCat(RFC9113::kSettingsLength6x, hdr.ToString()));
441
491
  }
442
492
 
443
- Http2SettingsFrame frame{false, {}};
493
+ Http2SettingsFrame frame{/*ack=*/false, /*settings=*/{}};
444
494
  while (payload.Length() != 0) {
445
495
  uint8_t buffer[6];
446
496
  payload.MoveFirstNBytesIntoBuffer(6, buffer);
497
+ uint16_t setting_id = Read2b(buffer);
498
+ uint32_t setting_value = Read4b(buffer + 2);
499
+ if (GPR_UNLIKELY(IsUnknownSetting(setting_id))) {
500
+ continue;
501
+ }
447
502
  frame.settings.push_back({
448
- Read2b(buffer),
449
- Read4b(buffer + 2),
503
+ setting_id,
504
+ setting_value,
450
505
  });
451
506
  }
452
507
  return ValueOrHttp2Status<Http2Frame>(std::move(frame));
@@ -578,6 +633,7 @@ std::string Http2FrameTypeString(FrameType frame_type) {
578
633
  }
579
634
  return absl::StrCat("UNKNOWN(", static_cast<uint8_t>(frame_type), ")");
580
635
  }
636
+
581
637
  } // namespace
582
638
 
583
639
  std::string Http2FrameHeader::ToString() const {
@@ -642,6 +698,9 @@ http2::Http2ErrorCode Http2ErrorCodeFromRstFrameErrorCode(uint32_t error_code) {
642
698
  return static_cast<http2::Http2ErrorCode>(error_code);
643
699
  }
644
700
 
701
+ ///////////////////////////////////////////////////////////////////////////////
702
+ // GRPC Header
703
+
645
704
  GrpcMessageHeader ExtractGrpcHeader(SliceBuffer& payload) {
646
705
  CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
647
706
  uint8_t buffer[kGrpcHeaderSizeInBytes];
@@ -659,4 +718,28 @@ void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint8_t flags,
659
718
  Write4b(length, frame_hdr + 1);
660
719
  }
661
720
 
721
+ Http2Status ValidateFrameHeader(const uint32_t max_frame_size_setting,
722
+ const bool incoming_header_in_progress,
723
+ const uint32_t incoming_header_stream_id,
724
+ Http2FrameHeader& current_frame_header) {
725
+ if (GPR_UNLIKELY(current_frame_header.length > max_frame_size_setting)) {
726
+ return Http2Status::Http2ConnectionError(
727
+ Http2ErrorCode::kFrameSizeError,
728
+ absl::StrCat(RFC9113::kFrameSizeLargerThanMaxFrameSizeSetting,
729
+ ", Current Size = ", current_frame_header.length,
730
+ ", Max Size = ", max_frame_size_setting));
731
+ }
732
+ if (GPR_UNLIKELY(
733
+ incoming_header_in_progress &&
734
+ (current_frame_header.type !=
735
+ static_cast<uint8_t>(FrameType::kContinuation) ||
736
+ current_frame_header.stream_id != incoming_header_stream_id))) {
737
+ return Http2Status::Http2ConnectionError(
738
+ Http2ErrorCode::kProtocolError,
739
+ std::string(RFC9113::kAssemblerContiguousSequenceError));
740
+ }
741
+ // TODO(tjagtap) : [PH2][P2]:Consider validating MAX_CONCURRENT_STREAMS here
742
+ return Http2Status::Ok();
743
+ }
744
+
662
745
  } // namespace grpc_core