grpc 1.71.0 → 1.72.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 (597) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +78 -75
  3. data/include/grpc/event_engine/memory_request.h +3 -3
  4. data/include/grpc/impl/channel_arg_names.h +70 -50
  5. data/include/grpc/support/workaround_list.h +1 -4
  6. data/src/core/{lib/transport → call}/call_arena_allocator.cc +1 -1
  7. data/src/core/{lib/transport → call}/call_arena_allocator.h +3 -3
  8. data/src/core/{lib/transport → call}/call_destination.h +4 -4
  9. data/src/core/{lib/transport → call}/call_filters.cc +2 -2
  10. data/src/core/{lib/transport → call}/call_filters.h +25 -6
  11. data/src/core/{lib/channel → call}/call_finalization.h +3 -3
  12. data/src/core/{lib/transport → call}/call_spine.cc +1 -1
  13. data/src/core/{lib/transport → call}/call_spine.h +68 -26
  14. data/src/core/{lib/transport → call}/call_state.cc +1 -1
  15. data/src/core/{lib/transport → call}/call_state.h +3 -3
  16. data/src/core/{lib/surface → call}/client_call.cc +9 -7
  17. data/src/core/{lib/surface → call}/client_call.h +4 -4
  18. data/src/core/{lib/transport → call}/custom_metadata.h +3 -3
  19. data/src/core/{lib/transport → call}/interception_chain.cc +5 -5
  20. data/src/core/{lib/transport → call}/interception_chain.h +7 -7
  21. data/src/core/{lib/transport → call}/message.cc +1 -1
  22. data/src/core/{lib/transport → call}/message.h +7 -3
  23. data/src/core/{lib/transport → call}/metadata.cc +2 -2
  24. data/src/core/{lib/transport → call}/metadata.h +4 -4
  25. data/src/core/{lib/transport → call}/metadata_batch.cc +1 -1
  26. data/src/core/{lib/transport → call}/metadata_batch.h +7 -7
  27. data/src/core/{lib/transport → call}/metadata_compression_traits.h +3 -3
  28. data/src/core/{lib/transport → call}/metadata_info.cc +27 -9
  29. data/src/core/{lib/transport → call}/metadata_info.h +4 -4
  30. data/src/core/{lib/transport → call}/parsed_metadata.cc +1 -1
  31. data/src/core/{lib/transport → call}/parsed_metadata.h +3 -3
  32. data/src/core/call/request_buffer.h +3 -3
  33. data/src/core/call/security_context.cc +125 -0
  34. data/src/core/call/security_context.h +114 -0
  35. data/src/core/{lib/surface → call}/server_call.cc +3 -3
  36. data/src/core/{lib/surface → call}/server_call.h +5 -5
  37. data/src/core/{lib/transport → call}/simple_slice_based_metadata.h +4 -4
  38. data/src/core/{lib/channel → call}/status_util.cc +1 -1
  39. data/src/core/{lib/channel → call}/status_util.h +3 -3
  40. data/src/core/client_channel/client_channel.cc +24 -16
  41. data/src/core/client_channel/client_channel.h +4 -3
  42. data/src/core/client_channel/client_channel_filter.cc +10 -20
  43. data/src/core/client_channel/client_channel_filter.h +1 -1
  44. data/src/core/client_channel/client_channel_internal.h +1 -1
  45. data/src/core/client_channel/config_selector.h +2 -2
  46. data/src/core/client_channel/direct_channel.cc +2 -2
  47. data/src/core/client_channel/dynamic_filters.cc +0 -1
  48. data/src/core/client_channel/dynamic_filters.h +0 -1
  49. data/src/core/client_channel/lb_metadata.h +1 -1
  50. data/src/core/client_channel/load_balanced_call_destination.cc +1 -1
  51. data/src/core/client_channel/load_balanced_call_destination.h +1 -1
  52. data/src/core/client_channel/retry_filter_legacy_call_data.cc +43 -41
  53. data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -6
  54. data/src/core/client_channel/retry_interceptor.h +1 -1
  55. data/src/core/client_channel/retry_service_config.cc +1 -1
  56. data/src/core/client_channel/retry_service_config.h +1 -1
  57. data/src/core/client_channel/retry_throttle.cc +30 -34
  58. data/src/core/client_channel/retry_throttle.h +10 -2
  59. data/src/core/client_channel/subchannel.cc +7 -8
  60. data/src/core/client_channel/subchannel.h +1 -2
  61. data/src/core/client_channel/subchannel_stream_client.cc +14 -11
  62. data/src/core/client_channel/subchannel_stream_client.h +2 -2
  63. data/src/core/config/core_configuration.h +2 -2
  64. data/src/core/credentials/call/call_credentials.h +157 -0
  65. data/src/core/{lib/security/credentials → credentials/call}/call_creds_util.cc +4 -4
  66. data/src/core/{lib/security/credentials → credentials/call}/call_creds_util.h +4 -4
  67. data/src/core/{lib/security/credentials/composite/composite_credentials.cc → credentials/call/composite/composite_call_credentials.cc} +4 -57
  68. data/src/core/credentials/call/composite/composite_call_credentials.h +82 -0
  69. data/src/core/{lib/security/credentials → credentials/call}/external/aws_external_account_credentials.cc +2 -2
  70. data/src/core/{lib/security/credentials → credentials/call}/external/aws_external_account_credentials.h +5 -5
  71. data/src/core/{lib/security/credentials → credentials/call}/external/aws_request_signer.cc +1 -1
  72. data/src/core/{lib/security/credentials → credentials/call}/external/aws_request_signer.h +3 -3
  73. data/src/core/{lib/security/credentials → credentials/call}/external/external_account_credentials.cc +6 -6
  74. data/src/core/{lib/security/credentials → credentials/call}/external/external_account_credentials.h +5 -5
  75. data/src/core/{lib/security/credentials → credentials/call}/external/file_external_account_credentials.cc +1 -1
  76. data/src/core/{lib/security/credentials → credentials/call}/external/file_external_account_credentials.h +4 -4
  77. data/src/core/{lib/security/credentials → credentials/call}/external/url_external_account_credentials.cc +3 -2
  78. data/src/core/{lib/security/credentials → credentials/call}/external/url_external_account_credentials.h +4 -4
  79. data/src/core/{lib/security/credentials → credentials/call}/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +3 -2
  80. data/src/core/{lib/security/credentials → credentials/call}/gcp_service_account_identity/gcp_service_account_identity_credentials.h +6 -6
  81. data/src/core/{lib/security/credentials → credentials/call}/iam/iam_credentials.cc +2 -2
  82. data/src/core/{lib/security/credentials → credentials/call}/iam/iam_credentials.h +4 -4
  83. data/src/core/{lib/security/util → credentials/call}/json_util.cc +1 -1
  84. data/src/core/{lib/security/util → credentials/call}/json_util.h +3 -3
  85. data/src/core/{lib/security/credentials → credentials/call}/jwt/json_token.cc +2 -2
  86. data/src/core/{lib/security/credentials → credentials/call}/jwt/json_token.h +3 -3
  87. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_credentials.cc +3 -3
  88. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_credentials.h +5 -5
  89. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_verifier.cc +3 -2
  90. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_verifier.h +3 -3
  91. data/src/core/{lib/security/credentials → credentials/call}/oauth2/oauth2_credentials.cc +4 -3
  92. data/src/core/{lib/security/credentials → credentials/call}/oauth2/oauth2_credentials.h +5 -5
  93. data/src/core/{lib/security/credentials → credentials/call}/plugin/plugin_credentials.cc +2 -2
  94. data/src/core/{lib/security/credentials → credentials/call}/plugin/plugin_credentials.h +5 -5
  95. data/src/core/{lib/security/credentials → credentials/call}/token_fetcher/token_fetcher_credentials.cc +1 -1
  96. data/src/core/{lib/security/credentials → credentials/call}/token_fetcher/token_fetcher_credentials.h +5 -5
  97. data/src/core/{lib/security/credentials → credentials/transport}/alts/alts_credentials.cc +4 -4
  98. data/src/core/{lib/security/credentials → credentials/transport}/alts/alts_credentials.h +5 -5
  99. data/src/core/{lib/security/security_connector → credentials/transport}/alts/alts_security_connector.cc +4 -4
  100. data/src/core/{lib/security/security_connector → credentials/transport}/alts/alts_security_connector.h +4 -4
  101. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment.cc +1 -1
  102. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment.h +3 -3
  103. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment_linux.cc +1 -1
  104. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment_no_op.cc +1 -1
  105. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment_windows.cc +1 -1
  106. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_client_options.cc +1 -1
  107. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_options.cc +1 -1
  108. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_options.h +3 -3
  109. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_server_options.cc +1 -1
  110. data/src/core/{lib/security/credentials → credentials/transport}/channel_creds_registry.h +4 -4
  111. data/src/core/{lib/security/credentials → credentials/transport}/channel_creds_registry_init.cc +21 -17
  112. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +68 -0
  113. data/src/core/{lib/security/credentials/composite/composite_credentials.h → credentials/transport/composite/composite_channel_credentials.h} +6 -51
  114. data/src/core/{lib/security/credentials → credentials/transport}/fake/fake_credentials.cc +4 -26
  115. data/src/core/{lib/security/credentials → credentials/transport}/fake/fake_credentials.h +5 -37
  116. data/src/core/{lib/security/security_connector → credentials/transport}/fake/fake_security_connector.cc +4 -4
  117. data/src/core/{lib/security/security_connector → credentials/transport}/fake/fake_security_connector.h +4 -4
  118. data/src/core/{lib/security/credentials → credentials/transport}/google_default/credentials_generic.cc +2 -2
  119. data/src/core/{lib/security/credentials → credentials/transport}/google_default/google_default_credentials.cc +31 -19
  120. data/src/core/{lib/security/credentials → credentials/transport}/google_default/google_default_credentials.h +5 -5
  121. data/src/core/{lib/security/credentials → credentials/transport}/insecure/insecure_credentials.cc +2 -2
  122. data/src/core/{lib/security/credentials → credentials/transport}/insecure/insecure_credentials.h +5 -5
  123. data/src/core/{lib/security/security_connector → credentials/transport}/insecure/insecure_security_connector.cc +2 -2
  124. data/src/core/{lib/security/security_connector → credentials/transport}/insecure/insecure_security_connector.h +5 -5
  125. data/src/core/{lib/security/credentials → credentials/transport}/local/local_credentials.cc +2 -2
  126. data/src/core/{lib/security/credentials → credentials/transport}/local/local_credentials.h +5 -5
  127. data/src/core/{lib/security/security_connector → credentials/transport}/local/local_security_connector.cc +4 -4
  128. data/src/core/{lib/security/security_connector → credentials/transport}/local/local_security_connector.h +4 -4
  129. data/src/core/{lib/security/security_connector → credentials/transport}/security_connector.cc +2 -2
  130. data/src/core/{lib/security/security_connector → credentials/transport}/security_connector.h +3 -3
  131. data/src/core/{lib/security/credentials → credentials/transport}/ssl/ssl_credentials.cc +2 -2
  132. data/src/core/{lib/security/credentials → credentials/transport}/ssl/ssl_credentials.h +6 -6
  133. data/src/core/{lib/security/security_connector → credentials/transport}/ssl/ssl_security_connector.cc +5 -5
  134. data/src/core/{lib/security/security_connector → credentials/transport}/ssl/ssl_security_connector.h +4 -4
  135. data/src/core/{lib/security/certificate_provider → credentials/transport/tls}/certificate_provider_factory.h +3 -3
  136. data/src/core/{lib/security/certificate_provider → credentials/transport/tls}/certificate_provider_registry.cc +1 -1
  137. data/src/core/{lib/security/certificate_provider → credentials/transport/tls}/certificate_provider_registry.h +4 -4
  138. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_distributor.cc +1 -1
  139. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_distributor.h +4 -4
  140. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_match.cc +1 -1
  141. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_provider.cc +2 -2
  142. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_provider.h +5 -5
  143. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_verifier.cc +2 -2
  144. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_verifier.h +3 -3
  145. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_credentials_options.cc +1 -1
  146. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_credentials_options.h +7 -7
  147. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_crl_provider.cc +1 -1
  148. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_crl_provider.h +3 -3
  149. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots.h +3 -3
  150. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_fallback.cc +1 -1
  151. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_supported.cc +2 -2
  152. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_supported.h +3 -3
  153. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_windows.cc +1 -1
  154. data/src/core/{lib/security/security_connector → credentials/transport/tls}/ssl_utils.cc +3 -3
  155. data/src/core/{lib/security/security_connector → credentials/transport/tls}/ssl_utils.h +4 -4
  156. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_credentials.cc +4 -4
  157. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_credentials.h +5 -5
  158. data/src/core/{lib/security/security_connector → credentials/transport}/tls/tls_security_connector.cc +6 -6
  159. data/src/core/{lib/security/security_connector → credentials/transport}/tls/tls_security_connector.h +6 -6
  160. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_utils.cc +1 -1
  161. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_utils.h +3 -3
  162. data/src/core/{lib/security/credentials/credentials.cc → credentials/transport/transport_credentials.cc} +1 -3
  163. data/src/core/{lib/security/credentials/credentials.h → credentials/transport/transport_credentials.h} +5 -121
  164. data/src/core/{lib/security/credentials → credentials/transport}/xds/xds_credentials.cc +5 -5
  165. data/src/core/{lib/security/credentials → credentials/transport}/xds/xds_credentials.h +6 -6
  166. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -1
  167. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -5
  168. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +2 -2
  169. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +1 -1
  170. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  171. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  172. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  173. data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
  174. data/src/core/ext/filters/http/message_compress/compression_filter.cc +1 -1
  175. data/src/core/ext/filters/http/message_compress/compression_filter.h +1 -1
  176. data/src/core/ext/filters/http/server/http_server_filter.cc +1 -1
  177. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  178. data/src/core/ext/filters/rbac/rbac_filter.cc +2 -2
  179. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +1 -1
  180. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +3 -3
  181. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +8 -5
  182. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -1
  183. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.cc +2 -2
  184. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +1 -3
  185. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +58 -57
  186. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +3 -3
  187. data/src/core/ext/transport/chttp2/transport/frame.cc +89 -68
  188. data/src/core/ext/transport/chttp2/transport/frame.h +37 -1
  189. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -0
  190. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -3
  191. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -2
  192. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -2
  193. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +1 -1
  194. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
  195. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -1
  196. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -2
  197. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +10 -8
  198. data/src/core/ext/transport/chttp2/transport/http2_settings.h +2 -2
  199. data/src/core/ext/transport/chttp2/transport/http2_status.h +52 -0
  200. data/src/core/ext/transport/chttp2/transport/internal.h +11 -14
  201. data/src/core/ext/transport/chttp2/transport/parsing.cc +36 -23
  202. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -14
  203. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -1
  204. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +1 -1
  205. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +65 -65
  206. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +28 -28
  207. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +14 -14
  208. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +6 -6
  209. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +6 -6
  210. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +4 -4
  211. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +133 -133
  212. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +71 -71
  213. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +26 -26
  214. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +7 -7
  215. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +216 -218
  216. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +66 -66
  217. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +27 -27
  218. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +9 -9
  219. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +326 -328
  220. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +103 -103
  221. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +58 -58
  222. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +14 -14
  223. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +22 -24
  224. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +3 -3
  225. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +29 -29
  226. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +16 -16
  227. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +186 -192
  228. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +54 -54
  229. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +54 -54
  230. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +21 -21
  231. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +59 -61
  232. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +15 -15
  233. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +100 -100
  234. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +34 -34
  235. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +12 -12
  236. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +5 -5
  237. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +118 -118
  238. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +39 -39
  239. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +19 -19
  240. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +9 -9
  241. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +27 -27
  242. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +10 -10
  243. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +12 -14
  244. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +2 -2
  245. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +41 -41
  246. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +16 -16
  247. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +24 -24
  248. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +9 -9
  249. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +139 -139
  250. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +46 -46
  251. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +61 -61
  252. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +20 -20
  253. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +3 -3
  254. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +1 -1
  255. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +6 -6
  256. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -4
  257. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +33 -33
  258. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +14 -14
  259. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +12 -14
  260. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +2 -2
  261. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +52 -54
  262. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +10 -10
  263. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +620 -626
  264. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +215 -215
  265. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +13 -13
  266. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +4 -4
  267. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +3 -3
  268. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +2 -2
  269. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +7 -7
  270. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +3 -3
  271. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +15 -15
  272. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +7 -7
  273. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +7 -7
  274. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +3 -3
  275. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +16 -16
  276. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +10 -10
  277. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +306 -312
  278. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +96 -96
  279. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +61 -61
  280. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +27 -27
  281. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h +19 -19
  282. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.c +6 -6
  283. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +25 -25
  284. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +9 -9
  285. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +34 -34
  286. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +9 -9
  287. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +3 -3
  288. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +2 -2
  289. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +294 -294
  290. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +105 -105
  291. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +3 -3
  292. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +1 -1
  293. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +23 -23
  294. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +8 -8
  295. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +84 -84
  296. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +28 -28
  297. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +87 -87
  298. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +31 -31
  299. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +24 -24
  300. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +5 -5
  301. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +130 -132
  302. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +43 -43
  303. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +6 -6
  304. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +2 -2
  305. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +60 -60
  306. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +26 -26
  307. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +7 -7
  308. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +3 -3
  309. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +6 -6
  310. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +2 -2
  311. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +7 -7
  312. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +3 -3
  313. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +11 -11
  314. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +4 -4
  315. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +85 -89
  316. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +20 -20
  317. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +80 -83
  318. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +27 -27
  319. data/src/core/ext/upb-gen/google/api/http.upb.h +51 -51
  320. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +22 -22
  321. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +327 -301
  322. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +97 -85
  323. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +1 -0
  324. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +9 -11
  325. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +9 -10
  326. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +110 -113
  327. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +25 -25
  328. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +6 -6
  329. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +4 -4
  330. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +21 -22
  331. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +3 -3
  332. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +70 -72
  333. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +17 -17
  334. data/src/core/ext/upb-gen/validate/validate.upb.h +368 -368
  335. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +117 -117
  336. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +9 -10
  337. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +7 -7
  338. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +3 -3
  339. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +12 -12
  340. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +2 -2
  341. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +27 -30
  342. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +7 -7
  343. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +3 -3
  344. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +3 -3
  345. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +1 -1
  346. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +22 -24
  347. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +3 -3
  348. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +98 -87
  349. data/src/core/{lib/security/transport → filter/auth}/auth_filters.h +8 -7
  350. data/src/core/{lib/security/transport → filter/auth}/client_auth_filter.cc +7 -6
  351. data/src/core/{lib/security/transport → filter/auth}/server_auth_filter.cc +5 -4
  352. data/src/core/handshaker/handshaker.cc +0 -8
  353. data/src/core/handshaker/security/security_handshaker.cc +1 -1
  354. data/src/core/handshaker/security/security_handshaker.h +1 -1
  355. data/src/core/lib/channel/channel_args.h +49 -30
  356. data/src/core/lib/channel/channel_stack.h +1 -2
  357. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  358. data/src/core/lib/channel/connected_channel.cc +2 -2
  359. data/src/core/lib/channel/promise_based_filter.h +3 -3
  360. data/src/core/lib/debug/trace_flags.cc +2 -4
  361. data/src/core/lib/debug/trace_flags.h +1 -2
  362. data/src/core/lib/event_engine/default_event_engine_factory.cc +6 -6
  363. data/src/core/lib/event_engine/default_event_engine_factory.h +1 -1
  364. data/src/core/lib/event_engine/extensions/iomgr_compatible.h +39 -0
  365. data/src/core/lib/event_engine/extensions/supports_win_sockets.h +48 -0
  366. data/src/core/lib/event_engine/extensions/tcp_trace.h +1 -1
  367. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +0 -2
  368. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +1 -3
  369. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +26 -0
  370. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +4 -0
  371. data/src/core/lib/event_engine/posix_engine/set_socket_dualstack.cc +64 -0
  372. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +0 -11
  373. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +10 -2
  374. data/src/core/lib/event_engine/shim.cc +9 -16
  375. data/src/core/lib/event_engine/shim.h +11 -0
  376. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +15 -7
  377. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +2 -1
  378. data/src/core/lib/event_engine/windows/win_socket.cc +11 -0
  379. data/src/core/lib/event_engine/windows/win_socket.h +3 -0
  380. data/src/core/lib/event_engine/windows/windows_endpoint.cc +5 -10
  381. data/src/core/lib/event_engine/windows/windows_engine.cc +42 -0
  382. data/src/core/lib/event_engine/windows/windows_engine.h +8 -2
  383. data/src/core/lib/event_engine/windows/windows_listener.cc +5 -6
  384. data/src/core/lib/event_engine/windows/windows_listener.h +9 -4
  385. data/src/core/lib/experiments/experiments.cc +174 -21
  386. data/src/core/lib/experiments/experiments.h +70 -13
  387. data/src/core/lib/iomgr/endpoint_pair_posix.cc +43 -16
  388. data/src/core/lib/iomgr/endpoint_pair_windows.cc +43 -8
  389. data/src/core/lib/iomgr/error.cc +27 -43
  390. data/src/core/lib/iomgr/ev_epoll1_linux.cc +13 -1
  391. data/src/core/lib/iomgr/ev_poll_posix.cc +13 -0
  392. data/src/core/lib/iomgr/polling_entity.cc +2 -7
  393. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  394. data/src/core/lib/iomgr/socket_utils_posix.cc +22 -11
  395. data/src/core/lib/iomgr/socket_utils_posix.h +12 -2
  396. data/src/core/lib/iomgr/tcp_client_cfstream.cc +8 -9
  397. data/src/core/lib/iomgr/tcp_client_posix.cc +11 -15
  398. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  399. data/src/core/lib/iomgr/tcp_posix.cc +58 -31
  400. data/src/core/lib/iomgr/tcp_posix.h +10 -2
  401. data/src/core/lib/iomgr/tcp_server_posix.cc +9 -1
  402. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -4
  403. data/src/core/lib/iomgr/tcp_server_windows.cc +27 -16
  404. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -2
  405. data/src/core/lib/promise/all_ok.h +31 -0
  406. data/src/core/lib/promise/loop.h +8 -5
  407. data/src/core/lib/promise/map.h +65 -2
  408. data/src/core/lib/promise/party.h +5 -1
  409. data/src/core/lib/promise/poll.h +22 -20
  410. data/src/core/lib/promise/promise.h +2 -2
  411. data/src/core/lib/promise/status_flag.h +23 -11
  412. data/src/core/lib/security/authorization/evaluate_args.cc +1 -1
  413. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  414. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  415. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  416. data/src/core/lib/slice/slice.h +6 -0
  417. data/src/core/lib/surface/call.cc +20 -18
  418. data/src/core/lib/surface/call_utils.cc +3 -3
  419. data/src/core/lib/surface/call_utils.h +3 -3
  420. data/src/core/lib/surface/channel.h +2 -2
  421. data/src/core/lib/surface/channel_init.h +2 -2
  422. data/src/core/lib/surface/completion_queue.cc +77 -17
  423. data/src/core/lib/surface/filter_stack_call.cc +40 -27
  424. data/src/core/lib/surface/filter_stack_call.h +1 -1
  425. data/src/core/lib/surface/init.cc +2 -3
  426. data/src/core/lib/surface/lame_client.cc +1 -1
  427. data/src/core/lib/surface/legacy_channel.cc +27 -23
  428. data/src/core/lib/surface/legacy_channel.h +1 -1
  429. data/src/core/lib/surface/version.cc +2 -2
  430. data/src/core/lib/transport/error_utils.cc +65 -11
  431. data/src/core/lib/transport/error_utils.h +2 -2
  432. data/src/core/lib/transport/status_conversion.cc +16 -14
  433. data/src/core/lib/transport/status_conversion.h +5 -4
  434. data/src/core/lib/transport/transport.h +5 -5
  435. data/src/core/lib/transport/transport_op_string.cc +1 -1
  436. data/src/core/load_balancing/delegating_helper.h +1 -1
  437. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -1
  438. data/src/core/load_balancing/grpclb/grpclb.cc +1 -2
  439. data/src/core/load_balancing/pick_first/pick_first.cc +0 -955
  440. data/src/core/load_balancing/rls/rls.cc +31 -37
  441. data/src/core/load_balancing/weighted_target/weighted_target.cc +1 -1
  442. data/src/core/load_balancing/xds/cds.cc +3 -10
  443. data/src/core/load_balancing/xds/xds_cluster_impl.cc +1 -1
  444. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  445. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -2
  446. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +1 -3
  447. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -0
  448. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +1 -1
  449. data/src/core/resolver/xds/xds_dependency_manager.cc +8 -3
  450. data/src/core/resolver/xds/xds_resolver.cc +2 -2
  451. data/src/core/server/server.cc +7 -4
  452. data/src/core/server/server.h +1 -1
  453. data/src/core/server/server_call_tracer_filter.cc +1 -1
  454. data/src/core/server/server_config_selector.h +1 -1
  455. data/src/core/server/server_config_selector_filter.cc +1 -1
  456. data/src/core/server/xds_server_config_fetcher.cc +5 -5
  457. data/src/core/service_config/service_config_channel_arg_filter.cc +1 -1
  458. data/src/core/telemetry/call_tracer.cc +2 -4
  459. data/src/core/telemetry/call_tracer.h +3 -3
  460. data/src/core/telemetry/metrics.cc +30 -12
  461. data/src/core/telemetry/metrics.h +15 -3
  462. data/src/core/telemetry/stats_data.cc +75 -2
  463. data/src/core/telemetry/stats_data.h +46 -4
  464. data/src/core/telemetry/tcp_tracer.h +90 -84
  465. data/src/core/{lib/security/context/security_context.cc → transport/auth_context.cc} +1 -96
  466. data/src/core/{lib/security/context/security_context.h → transport/auth_context.h} +6 -76
  467. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  468. data/src/core/tsi/ssl_transport_security.cc +1 -1
  469. data/src/core/util/check_class_size.h +48 -0
  470. data/src/core/util/gcp_metadata_query.cc +1 -1
  471. data/src/core/util/http_client/httpcli.cc +3 -3
  472. data/src/core/util/http_client/httpcli_security_connector.cc +3 -3
  473. data/src/core/util/load_file.cc +26 -14
  474. data/src/core/util/status_helper.cc +86 -63
  475. data/src/core/util/status_helper.h +9 -26
  476. data/src/core/xds/grpc/certificate_provider_store.cc +1 -1
  477. data/src/core/xds/grpc/certificate_provider_store.h +3 -3
  478. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  479. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
  480. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +10 -7
  481. data/src/core/xds/grpc/xds_certificate_provider.cc +1 -1
  482. data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
  483. data/src/core/xds/grpc/xds_client_grpc.cc +7 -6
  484. data/src/core/xds/grpc/xds_client_grpc.h +4 -2
  485. data/src/core/xds/grpc/xds_cluster.h +3 -3
  486. data/src/core/xds/grpc/xds_cluster_parser.cc +3 -2
  487. data/src/core/xds/grpc/xds_http_fault_filter.cc +1 -1
  488. data/src/core/xds/grpc/xds_http_filter.h +1 -1
  489. data/src/core/xds/grpc/xds_http_filter_registry.h +1 -1
  490. data/src/core/xds/grpc/xds_route_config.h +1 -1
  491. data/src/core/xds/grpc/xds_route_config_parser.cc +1 -1
  492. data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
  493. data/src/core/xds/grpc/xds_routing.h +1 -1
  494. data/src/core/xds/grpc/xds_server_grpc.cc +60 -48
  495. data/src/core/xds/grpc/xds_server_grpc.h +23 -13
  496. data/src/core/xds/grpc/xds_server_grpc_interface.h +2 -2
  497. data/src/core/xds/grpc/xds_transport_grpc.cc +5 -5
  498. data/src/core/xds/grpc/xds_transport_grpc.h +5 -3
  499. data/src/core/xds/xds_client/lrs_client.cc +6 -5
  500. data/src/core/xds/xds_client/lrs_client.h +7 -7
  501. data/src/core/xds/xds_client/xds_bootstrap.h +16 -1
  502. data/src/core/xds/xds_client/xds_client.cc +25 -23
  503. data/src/core/xds/xds_client/xds_client.h +3 -1
  504. data/src/core/xds/xds_client/xds_resource_type.h +1 -2
  505. data/src/core/xds/xds_client/xds_transport.h +1 -1
  506. data/src/ruby/ext/grpc/extconf.rb +1 -1
  507. data/src/ruby/lib/grpc/version.rb +1 -1
  508. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.cc +0 -2
  509. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_fuchsia.cc +0 -2
  510. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_linux.cc +0 -2
  511. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.cc +0 -2
  512. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_sysreg.cc +0 -2
  513. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.cc +0 -2
  514. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.cc +0 -1
  515. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.cc +0 -1
  516. data/third_party/boringssl-with-bazel/src/crypto/crypto.cc +0 -2
  517. data/third_party/boringssl-with-bazel/src/crypto/internal.h +20 -3
  518. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -25
  519. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +3 -7
  520. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1 -1
  521. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  522. data/third_party/boringssl-with-bazel/src/ssl/internal.h +13 -6
  523. data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +2 -1
  524. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  525. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1 -1
  526. data/third_party/upb/upb/base/internal/log2.h +3 -1
  527. data/third_party/upb/upb/base/string_view.h +10 -0
  528. data/third_party/upb/upb/hash/common.c +5 -1
  529. data/third_party/upb/upb/json/decode.c +2 -2
  530. data/third_party/upb/upb/json/decode.h +0 -1
  531. data/third_party/upb/upb/mem/alloc.h +5 -0
  532. data/third_party/upb/upb/mem/arena.c +296 -142
  533. data/third_party/upb/upb/mem/arena.h +47 -11
  534. data/third_party/upb/upb/mem/arena.hpp +4 -20
  535. data/third_party/upb/upb/mem/internal/arena.h +4 -6
  536. data/third_party/upb/upb/message/accessors.h +41 -0
  537. data/third_party/upb/upb/message/compat.c +11 -14
  538. data/third_party/upb/upb/message/compat.h +4 -3
  539. data/third_party/upb/upb/message/copy.c +35 -30
  540. data/third_party/upb/upb/message/internal/accessors.h +139 -10
  541. data/third_party/upb/upb/message/internal/extension.c +28 -25
  542. data/third_party/upb/upb/message/internal/extension.h +21 -5
  543. data/third_party/upb/upb/message/internal/iterator.c +58 -0
  544. data/third_party/upb/upb/message/internal/iterator.h +29 -0
  545. data/third_party/upb/upb/message/internal/map.h +2 -3
  546. data/third_party/upb/upb/message/internal/map_sorter.h +3 -2
  547. data/third_party/upb/upb/message/internal/message.c +48 -29
  548. data/third_party/upb/upb/message/internal/message.h +154 -24
  549. data/third_party/upb/upb/message/map_sorter.c +20 -8
  550. data/third_party/upb/upb/message/message.c +90 -38
  551. data/third_party/upb/upb/message/message.h +58 -2
  552. data/third_party/upb/upb/message/value.h +9 -0
  553. data/third_party/upb/upb/mini_descriptor/build_enum.c +1 -1
  554. data/third_party/upb/upb/mini_descriptor/decode.c +97 -136
  555. data/third_party/upb/upb/mini_descriptor/decode.h +4 -3
  556. data/third_party/upb/upb/mini_descriptor/internal/encode.hpp +1 -1
  557. data/third_party/upb/upb/mini_table/extension_registry.c +24 -12
  558. data/third_party/upb/upb/mini_table/extension_registry.h +13 -6
  559. data/third_party/upb/upb/mini_table/message.c +21 -13
  560. data/third_party/upb/upb/port/atomic.h +134 -7
  561. data/third_party/upb/upb/port/def.inc +140 -38
  562. data/third_party/upb/upb/port/undef.inc +11 -1
  563. data/third_party/upb/upb/reflection/def.hpp +5 -1
  564. data/third_party/upb/upb/reflection/def_pool.c +10 -3
  565. data/third_party/upb/upb/reflection/descriptor_bootstrap.h +1 -1
  566. data/third_party/upb/upb/reflection/file_def.c +12 -5
  567. data/third_party/upb/upb/reflection/internal/def_builder.c +1 -1
  568. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  569. data/third_party/upb/upb/reflection/message.c +19 -16
  570. data/third_party/upb/upb/reflection/message.h +3 -1
  571. data/third_party/upb/upb/text/encode.c +1 -13
  572. data/third_party/upb/upb/text/internal/encode.c +25 -6
  573. data/third_party/upb/upb/text/internal/encode.h +4 -0
  574. data/third_party/upb/upb/wire/decode.c +60 -45
  575. data/third_party/upb/upb/wire/decode.h +4 -2
  576. data/third_party/upb/upb/wire/encode.c +77 -42
  577. data/third_party/upb/upb/wire/encode.h +2 -0
  578. data/third_party/upb/upb/wire/eps_copy_input_stream.h +18 -20
  579. data/third_party/upb/upb/wire/internal/decoder.h +4 -11
  580. data/third_party/utf8_range/utf8_range.c +15 -275
  581. data/third_party/utf8_range/utf8_range_neon.inc +117 -0
  582. data/third_party/utf8_range/utf8_range_sse.inc +272 -0
  583. data/third_party/zlib/deflate.c +40 -15
  584. data/third_party/zlib/deflate.h +33 -2
  585. data/third_party/zlib/gzguts.h +2 -6
  586. data/third_party/zlib/inflate.c +1 -1
  587. data/third_party/zlib/inftrees.c +3 -3
  588. data/third_party/zlib/inftrees.h +2 -2
  589. data/third_party/zlib/trees.c +18 -4
  590. data/third_party/zlib/zconf.h +1 -9
  591. data/third_party/zlib/zlib.h +12 -12
  592. data/third_party/zlib/zutil.h +4 -25
  593. metadata +155 -145
  594. data/include/grpc/grpc_cronet.h +0 -37
  595. data/src/core/lib/transport/http2_errors.h +0 -43
  596. data/third_party/upb/upb/message/internal/compare_unknown.c +0 -289
  597. data/third_party/upb/upb/message/internal/compare_unknown.h +0 -49
@@ -42,7 +42,7 @@ class ContextListEntry {
42
42
  ContextListEntry(void* context, int64_t outbuf_offset,
43
43
  int64_t num_traced_bytes, size_t byte_offset,
44
44
  size_t stream_index,
45
- std::shared_ptr<TcpTracerInterface> tcp_tracer)
45
+ std::shared_ptr<TcpCallTracer> tcp_tracer)
46
46
  : trace_context_(context),
47
47
  outbuf_offset_(outbuf_offset),
48
48
  num_traced_bytes_in_chunk_(num_traced_bytes),
@@ -57,7 +57,7 @@ class ContextListEntry {
57
57
  int64_t NumTracedBytesInChunk() { return num_traced_bytes_in_chunk_; }
58
58
  size_t ByteOffsetInStream() { return byte_offset_in_stream_; }
59
59
  size_t StreamIndex() { return stream_index_; }
60
- std::shared_ptr<TcpTracerInterface> ReleaseTcpTracer() {
60
+ std::shared_ptr<TcpCallTracer> ReleaseTcpTracer() {
61
61
  return std::move(tcp_tracer_);
62
62
  }
63
63
 
@@ -72,7 +72,7 @@ class ContextListEntry {
72
72
  // Index of the current chunk in the RPC stream.
73
73
  // Set to zero for the first chunk of the RPC stream.
74
74
  size_t stream_index_;
75
- std::shared_ptr<TcpTracerInterface> tcp_tracer_;
75
+ std::shared_ptr<TcpCallTracer> tcp_tracer_;
76
76
  };
77
77
 
78
78
  /// A list of RPC Contexts
@@ -18,27 +18,33 @@
18
18
  #include <stddef.h>
19
19
 
20
20
  #include <cstdint>
21
+ #include <string>
21
22
  #include <utility>
22
23
 
23
24
  #include "absl/log/check.h"
24
25
  #include "absl/status/status.h"
25
26
  #include "absl/strings/str_cat.h"
27
+ #include "src/core/lib/slice/slice_buffer.h"
26
28
  #include "src/core/util/crash.h"
27
29
 
28
30
  namespace grpc_core {
29
31
 
30
32
  namespace {
31
33
 
32
- constexpr uint8_t kFrameTypeData = 0;
33
- constexpr uint8_t kFrameTypeHeader = 1;
34
- constexpr uint8_t kFrameTypeContinuation = 9;
35
- constexpr uint8_t kFrameTypeRstStream = 3;
36
- constexpr uint8_t kFrameTypeSettings = 4;
37
- constexpr uint8_t kFrameTypePing = 6;
38
- constexpr uint8_t kFrameTypeGoaway = 7;
39
- constexpr uint8_t kFrameTypeWindowUpdate = 8;
40
- constexpr uint8_t kFrameTypePushPromise = 5;
41
- constexpr uint8_t kFrameTypeSecurity = 200;
34
+ // HTTP2 Frame Types
35
+ enum class FrameType : uint8_t {
36
+ kData = 0,
37
+ kHeader = 1,
38
+ // type 2 was Priority which has been deprecated.
39
+ kRstStream = 3,
40
+ kSettings = 4,
41
+ kPushPromise = 5,
42
+ kPing = 6,
43
+ kGoaway = 7,
44
+ kWindowUpdate = 8,
45
+ kContinuation = 9,
46
+ kCustomSecurity = 200, // Custom Frame Type
47
+ };
42
48
 
43
49
  constexpr uint8_t kFlagEndStream = 1;
44
50
  constexpr uint8_t kFlagAck = 1;
@@ -46,8 +52,6 @@ constexpr uint8_t kFlagEndHeaders = 4;
46
52
  constexpr uint8_t kFlagPadded = 8;
47
53
  constexpr uint8_t kFlagPriority = 0x20;
48
54
 
49
- constexpr size_t kFrameHeaderSize = 9;
50
-
51
55
  void Write2b(uint16_t x, uint8_t* output) {
52
56
  output[0] = static_cast<uint8_t>(x >> 8);
53
57
  output[1] = static_cast<uint8_t>(x);
@@ -125,6 +129,7 @@ class SerializeExtraBytesRequired {
125
129
  size_t operator()(const Http2WindowUpdateFrame&) { return 4; }
126
130
  size_t operator()(const Http2SecurityFrame&) { return 0; }
127
131
  size_t operator()(const Http2UnknownFrame&) { Crash("unreachable"); }
132
+ size_t operator()(const Http2EmptyFrame&) { Crash("unreachable"); }
128
133
  };
129
134
 
130
135
  class SerializeHeaderAndPayload {
@@ -135,9 +140,10 @@ class SerializeHeaderAndPayload {
135
140
 
136
141
  void operator()(Http2DataFrame& frame) {
137
142
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
138
- Http2FrameHeader{
139
- static_cast<uint32_t>(frame.payload.Length()), kFrameTypeData,
140
- MaybeFlag(frame.end_stream, kFlagEndStream), frame.stream_id}
143
+ Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
144
+ static_cast<uint8_t>(FrameType::kData),
145
+ MaybeFlag(frame.end_stream, kFlagEndStream),
146
+ frame.stream_id}
141
147
  .Serialize(hdr.begin());
142
148
  out_.AppendIndexed(Slice(std::move(hdr)));
143
149
  out_.TakeAndAppend(frame.payload);
@@ -146,7 +152,8 @@ class SerializeHeaderAndPayload {
146
152
  void operator()(Http2HeaderFrame& frame) {
147
153
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
148
154
  Http2FrameHeader{
149
- static_cast<uint32_t>(frame.payload.Length()), kFrameTypeHeader,
155
+ static_cast<uint32_t>(frame.payload.Length()),
156
+ static_cast<uint8_t>(FrameType::kHeader),
150
157
  static_cast<uint8_t>(MaybeFlag(frame.end_headers, kFlagEndHeaders) |
151
158
  MaybeFlag(frame.end_stream, kFlagEndStream)),
152
159
  frame.stream_id}
@@ -158,7 +165,8 @@ class SerializeHeaderAndPayload {
158
165
  void operator()(Http2ContinuationFrame& frame) {
159
166
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
160
167
  Http2FrameHeader{
161
- static_cast<uint32_t>(frame.payload.Length()), kFrameTypeContinuation,
168
+ static_cast<uint32_t>(frame.payload.Length()),
169
+ static_cast<uint8_t>(FrameType::kContinuation),
162
170
  static_cast<uint8_t>(MaybeFlag(frame.end_headers, kFlagEndHeaders)),
163
171
  frame.stream_id}
164
172
  .Serialize(hdr.begin());
@@ -168,8 +176,9 @@ class SerializeHeaderAndPayload {
168
176
 
169
177
  void operator()(Http2RstStreamFrame& frame) {
170
178
  auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
171
- Http2FrameHeader{4, kFrameTypeRstStream, 0, frame.stream_id}.Serialize(
172
- hdr_and_payload.begin());
179
+ Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kRstStream), 0,
180
+ frame.stream_id}
181
+ .Serialize(hdr_and_payload.begin());
173
182
  Write4b(frame.error_code, hdr_and_payload.begin() + kFrameHeaderSize);
174
183
  out_.AppendIndexed(Slice(std::move(hdr_and_payload)));
175
184
  }
@@ -179,7 +188,8 @@ class SerializeHeaderAndPayload {
179
188
  const size_t payload_size = 6 * frame.settings.size();
180
189
  auto hdr_and_payload =
181
190
  extra_bytes_.TakeFirst(kFrameHeaderSize + payload_size);
182
- Http2FrameHeader{static_cast<uint32_t>(payload_size), kFrameTypeSettings,
191
+ Http2FrameHeader{static_cast<uint32_t>(payload_size),
192
+ static_cast<uint8_t>(FrameType::kSettings),
183
193
  MaybeFlag(frame.ack, kFlagAck), 0}
184
194
  .Serialize(hdr_and_payload.begin());
185
195
  size_t offset = kFrameHeaderSize;
@@ -193,7 +203,8 @@ class SerializeHeaderAndPayload {
193
203
 
194
204
  void operator()(Http2PingFrame& frame) {
195
205
  auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
196
- Http2FrameHeader{8, kFrameTypePing, MaybeFlag(frame.ack, kFlagAck), 0}
206
+ Http2FrameHeader{8, static_cast<uint8_t>(FrameType::kPing),
207
+ MaybeFlag(frame.ack, kFlagAck), 0}
197
208
  .Serialize(hdr_and_payload.begin());
198
209
  Write8b(frame.opaque, hdr_and_payload.begin() + kFrameHeaderSize);
199
210
  out_.AppendIndexed(Slice(std::move(hdr_and_payload)));
@@ -202,7 +213,7 @@ class SerializeHeaderAndPayload {
202
213
  void operator()(Http2GoawayFrame& frame) {
203
214
  auto hdr_and_fixed_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
204
215
  Http2FrameHeader{static_cast<uint32_t>(8 + frame.debug_data.length()),
205
- kFrameTypeGoaway, 0, 0}
216
+ static_cast<uint8_t>(FrameType::kGoaway), 0, 0}
206
217
  .Serialize(hdr_and_fixed_payload.begin());
207
218
  Write4b(frame.last_stream_id,
208
219
  hdr_and_fixed_payload.begin() + kFrameHeaderSize);
@@ -214,8 +225,9 @@ class SerializeHeaderAndPayload {
214
225
 
215
226
  void operator()(Http2WindowUpdateFrame& frame) {
216
227
  auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
217
- Http2FrameHeader{4, kFrameTypeWindowUpdate, 0, frame.stream_id}.Serialize(
218
- hdr_and_payload.begin());
228
+ Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kWindowUpdate), 0,
229
+ frame.stream_id}
230
+ .Serialize(hdr_and_payload.begin());
219
231
  Write4b(frame.increment, hdr_and_payload.begin() + kFrameHeaderSize);
220
232
  out_.AppendIndexed(Slice(std::move(hdr_and_payload)));
221
233
  }
@@ -223,7 +235,7 @@ class SerializeHeaderAndPayload {
223
235
  void operator()(Http2SecurityFrame& frame) {
224
236
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
225
237
  Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
226
- kFrameTypeSecurity, 0, 0}
238
+ static_cast<uint8_t>(FrameType::kCustomSecurity), 0, 0}
227
239
  .Serialize(hdr.begin());
228
240
  out_.AppendIndexed(Slice(std::move(hdr)));
229
241
  out_.TakeAndAppend(frame.payload);
@@ -231,6 +243,8 @@ class SerializeHeaderAndPayload {
231
243
 
232
244
  void operator()(Http2UnknownFrame&) { Crash("unreachable"); }
233
245
 
246
+ void operator()(Http2EmptyFrame&) {}
247
+
234
248
  private:
235
249
  SliceBuffer& out_;
236
250
  MutableSlice extra_bytes_;
@@ -365,18 +379,9 @@ absl::StatusOr<Http2PingFrame> ParsePingFrame(const Http2FrameHeader& hdr,
365
379
  absl::StrCat("invalid ping stream id: ", hdr.ToString()));
366
380
  }
367
381
 
368
- bool ack;
369
- switch (hdr.flags) {
370
- case 0:
371
- ack = false;
372
- break;
373
- case kFlagAck:
374
- ack = true;
375
- break;
376
- default:
377
- return absl::InternalError(
378
- absl::StrCat("invalid ping flags: ", hdr.ToString()));
379
- }
382
+ // RFC9113 : Unused flags MUST be ignored on receipt and MUST be left unset
383
+ // (0x00) when sending.
384
+ bool ack = ((hdr.flags & kFlagAck) == kFlagAck);
380
385
 
381
386
  uint8_t buffer[8];
382
387
  payload.CopyToBuffer(buffer);
@@ -397,11 +402,6 @@ absl::StatusOr<Http2GoawayFrame> ParseGoawayFrame(const Http2FrameHeader& hdr,
397
402
  absl::StrCat("invalid goaway stream id: ", hdr.ToString()));
398
403
  }
399
404
 
400
- if (hdr.flags != 0) {
401
- return absl::InternalError(
402
- absl::StrCat("invalid goaway flags: ", hdr.ToString()));
403
- }
404
-
405
405
  uint8_t buffer[8];
406
406
  payload.MoveFirstNBytesIntoBuffer(8, buffer);
407
407
  return Http2GoawayFrame{Read4b(buffer), Read4b(buffer + 4),
@@ -445,34 +445,38 @@ Http2FrameHeader Http2FrameHeader::Parse(const uint8_t* input) {
445
445
  }
446
446
 
447
447
  namespace {
448
- std::string Http2FrameTypeString(uint8_t frame_type) {
448
+
449
+ std::string Http2FrameTypeString(FrameType frame_type) {
449
450
  switch (frame_type) {
450
- case kFrameTypeData:
451
+ case FrameType::kData:
451
452
  return "DATA";
452
- case kFrameTypeHeader:
453
+ case FrameType::kHeader:
453
454
  return "HEADER";
454
- case kFrameTypeContinuation:
455
- return "CONTINUATION";
456
- case kFrameTypeRstStream:
455
+ case FrameType::kRstStream:
457
456
  return "RST_STREAM";
458
- case kFrameTypeSettings:
457
+ case FrameType::kSettings:
459
458
  return "SETTINGS";
460
- case kFrameTypeGoaway:
459
+ case FrameType::kPushPromise:
460
+ return "PUSH_PROMISE";
461
+ case FrameType::kPing:
462
+ return "PING";
463
+ case FrameType::kGoaway:
461
464
  return "GOAWAY";
462
- case kFrameTypeWindowUpdate:
465
+ case FrameType::kWindowUpdate:
463
466
  return "WINDOW_UPDATE";
464
- case kFrameTypePing:
465
- return "PING";
466
- case kFrameTypeSecurity:
467
+ case FrameType::kContinuation:
468
+ return "CONTINUATION";
469
+ case FrameType::kCustomSecurity:
467
470
  return "SECURITY";
468
471
  }
469
- return absl::StrCat("UNKNOWN(", frame_type, ")");
472
+ return absl::StrCat("UNKNOWN(", static_cast<uint8_t>(frame_type), ")");
470
473
  }
471
474
  } // namespace
472
475
 
473
476
  std::string Http2FrameHeader::ToString() const {
474
- return absl::StrCat("{", Http2FrameTypeString(type), ": flags=", flags,
475
- ", stream_id=", stream_id, ", length=", length, "}");
477
+ return absl::StrCat("{", Http2FrameTypeString(static_cast<FrameType>(type)),
478
+ ": flags=", flags, ", stream_id=", stream_id,
479
+ ", length=", length, "}");
476
480
  }
477
481
 
478
482
  void Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out) {
@@ -492,32 +496,49 @@ void Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out) {
492
496
  absl::StatusOr<Http2Frame> ParseFramePayload(const Http2FrameHeader& hdr,
493
497
  SliceBuffer payload) {
494
498
  CHECK(payload.Length() == hdr.length);
495
- switch (hdr.type) {
496
- case kFrameTypeData:
499
+ switch (static_cast<FrameType>(hdr.type)) {
500
+ case FrameType::kData:
497
501
  return ParseDataFrame(hdr, payload);
498
- case kFrameTypeHeader:
502
+ case FrameType::kHeader:
499
503
  return ParseHeaderFrame(hdr, payload);
500
- case kFrameTypeContinuation:
504
+ case FrameType::kContinuation:
501
505
  return ParseContinuationFrame(hdr, payload);
502
- case kFrameTypeRstStream:
506
+ case FrameType::kRstStream:
503
507
  return ParseRstStreamFrame(hdr, payload);
504
- case kFrameTypeSettings:
508
+ case FrameType::kSettings:
505
509
  return ParseSettingsFrame(hdr, payload);
506
- case kFrameTypePing:
510
+ case FrameType::kPing:
507
511
  return ParsePingFrame(hdr, payload);
508
- case kFrameTypeGoaway:
512
+ case FrameType::kGoaway:
509
513
  return ParseGoawayFrame(hdr, payload);
510
- case kFrameTypeWindowUpdate:
514
+ case FrameType::kWindowUpdate:
511
515
  return ParseWindowUpdateFrame(hdr, payload);
512
- case kFrameTypePushPromise:
516
+ case FrameType::kPushPromise:
513
517
  return absl::InternalError(
514
518
  "push promise not supported (and SETTINGS_ENABLE_PUSH explicitly "
515
519
  "disabled).");
516
- case kFrameTypeSecurity:
520
+ case FrameType::kCustomSecurity:
517
521
  return ParseSecurityFrame(hdr, payload);
518
522
  default:
519
523
  return Http2UnknownFrame{};
520
524
  }
521
525
  }
522
526
 
527
+ GrpcMessageHeader ExtractGrpcHeader(SliceBuffer& payload) {
528
+ CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
529
+ uint8_t buffer[kGrpcHeaderSizeInBytes];
530
+ payload.MoveFirstNBytesIntoBuffer(kGrpcHeaderSizeInBytes, buffer);
531
+ GrpcMessageHeader header;
532
+ header.flags = buffer[0];
533
+ header.length = Read4b(buffer + 1);
534
+ return header;
535
+ }
536
+
537
+ void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint8_t flags,
538
+ const uint32_t length) {
539
+ uint8_t* frame_hdr = payload.AddTiny(kGrpcHeaderSizeInBytes);
540
+ frame_hdr[0] = flags;
541
+ Write4b(length, frame_hdr + 1);
542
+ }
543
+
523
544
  } // namespace grpc_core
@@ -50,6 +50,19 @@ namespace grpc_core {
50
50
  //
51
51
  // Equality operators are defined for use in unit tests.
52
52
 
53
+ // All frames begin with a fixed 9-octet header followed by a variable-length
54
+ // frame payload. The following sizes are in bits.
55
+ // HTTP Frame {
56
+ // Length(24),
57
+ // Type(8),
58
+ // Flags(8),
59
+ // Reserved(1),
60
+ // Stream Identifier(31),
61
+ // Frame Payload(..),
62
+ // }
63
+ // Reference : https://www.rfc-editor.org/rfc/rfc9113.html#name-frame-format
64
+ constexpr uint8_t kFrameHeaderSize = 9;
65
+
53
66
  // DATA frame
54
67
  struct Http2DataFrame {
55
68
  uint32_t stream_id = 0;
@@ -165,6 +178,11 @@ struct Http2UnknownFrame {
165
178
  bool operator==(const Http2UnknownFrame&) const { return true; }
166
179
  };
167
180
 
181
+ // This is used as a fake frame to trigger events in the HTTP2 transport.
182
+ struct Http2EmptyFrame {
183
+ bool operator==(const Http2EmptyFrame&) const { return true; }
184
+ };
185
+
168
186
  ///////////////////////////////////////////////////////////////////////////////
169
187
  // Frame variant
170
188
  //
@@ -174,7 +192,7 @@ using Http2Frame =
174
192
  std::variant<Http2DataFrame, Http2HeaderFrame, Http2ContinuationFrame,
175
193
  Http2RstStreamFrame, Http2SettingsFrame, Http2PingFrame,
176
194
  Http2GoawayFrame, Http2WindowUpdateFrame, Http2SecurityFrame,
177
- Http2UnknownFrame>;
195
+ Http2UnknownFrame, Http2EmptyFrame>;
178
196
 
179
197
  ///////////////////////////////////////////////////////////////////////////////
180
198
  // Frame header
@@ -218,6 +236,24 @@ absl::StatusOr<Http2Frame> ParseFramePayload(const Http2FrameHeader& hdr,
218
236
  // move things out of frames)
219
237
  void Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out);
220
238
 
239
+ ///////////////////////////////////////////////////////////////////////////////
240
+ // GRPC Header
241
+
242
+ constexpr uint8_t kGrpcHeaderSizeInBytes = 5;
243
+
244
+ struct GrpcMessageHeader {
245
+ uint8_t flags;
246
+ uint32_t length;
247
+ };
248
+
249
+ // If the payload SliceBuffer is too small to hold a gRPC header, this function
250
+ // will crash. The calling function MUST ensure that the payload SliceBuffer
251
+ // has length greater than or equal to the gRPC header.
252
+ GrpcMessageHeader ExtractGrpcHeader(SliceBuffer& payload);
253
+
254
+ void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint8_t flags,
255
+ const uint32_t length);
256
+
221
257
  } // namespace grpc_core
222
258
 
223
259
  #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_H
@@ -31,6 +31,7 @@
31
31
  #include "src/core/lib/slice/slice.h"
32
32
  #include "src/core/lib/slice/slice_buffer.h"
33
33
  #include "src/core/lib/transport/transport.h"
34
+ #include "src/core/telemetry/stats.h"
34
35
  #include "src/core/util/status_helper.h"
35
36
 
36
37
  absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
@@ -75,6 +76,7 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
75
76
 
76
77
  grpc_slice_buffer_move_first_no_ref(inbuf, write_bytes, outbuf);
77
78
 
79
+ grpc_core::global_stats().IncrementHttp2WriteDataFrameSize(write_bytes);
78
80
  call_tracer->RecordOutgoingBytes({header_size, 0, 0});
79
81
  }
80
82
 
@@ -28,16 +28,18 @@
28
28
  #include "absl/status/status.h"
29
29
  #include "absl/strings/str_cat.h"
30
30
  #include "absl/strings/str_format.h"
31
+ #include "src/core/call/metadata_batch.h"
31
32
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
33
+ #include "src/core/ext/transport/chttp2/transport/http2_status.h"
32
34
  #include "src/core/ext/transport/chttp2/transport/internal.h"
33
35
  #include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
34
36
  #include "src/core/ext/transport/chttp2/transport/ping_callbacks.h"
35
37
  #include "src/core/lib/debug/trace.h"
36
38
  #include "src/core/lib/experiments/experiments.h"
37
- #include "src/core/lib/transport/http2_errors.h"
38
- #include "src/core/lib/transport/metadata_batch.h"
39
39
  #include "src/core/util/status_helper.h"
40
40
 
41
+ using grpc_core::http2::Http2ErrorCode;
42
+
41
43
  grpc_slice grpc_chttp2_rst_stream_create(
42
44
  uint32_t id, uint32_t code, grpc_core::CallTracerInterface* call_tracer) {
43
45
  static const size_t frame_size = 13;
@@ -116,7 +118,8 @@ grpc_error_handle grpc_chttp2_rst_stream_parser_parse(void* parser,
116
118
  << "[chttp2 transport=" << t << " stream=" << s
117
119
  << "] received RST_STREAM(reason=" << reason << ")";
118
120
  grpc_error_handle error;
119
- if (reason != GRPC_HTTP2_NO_ERROR || s->trailing_metadata_buffer.empty()) {
121
+ if (reason != static_cast<uint32_t>(Http2ErrorCode::kNoError) ||
122
+ s->trailing_metadata_buffer.empty()) {
120
123
  error = grpc_error_set_int(
121
124
  grpc_error_set_str(
122
125
  GRPC_ERROR_CREATE("RST_STREAM"),
@@ -40,6 +40,8 @@
40
40
  #include "src/core/util/debug_location.h"
41
41
  #include "src/core/util/useful.h"
42
42
 
43
+ using grpc_core::http2::Http2ErrorCode;
44
+
43
45
  static uint8_t* fill_header(uint8_t* out, uint32_t length, uint8_t flags) {
44
46
  *out++ = static_cast<uint8_t>(length >> 16);
45
47
  *out++ = static_cast<uint8_t>(length >> 8);
@@ -193,9 +195,9 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
193
195
  }
194
196
  auto error =
195
197
  parser->incoming_settings->Apply(parser->id, parser->value);
196
- if (error != GRPC_HTTP2_NO_ERROR) {
198
+ if (error != Http2ErrorCode::kNoError) {
197
199
  grpc_chttp2_goaway_append(
198
- t->last_new_stream_id, error,
200
+ t->last_new_stream_id, static_cast<uint32_t>(error),
199
201
  grpc_slice_from_static_string("HTTP2 settings error"), &t->qbuf);
200
202
  return GRPC_ERROR_CREATE(absl::StrFormat(
201
203
  "invalid value %u passed for %s", parser->value,
@@ -31,12 +31,12 @@
31
31
  #include "absl/strings/match.h"
32
32
  #include "absl/strings/str_cat.h"
33
33
  #include "absl/strings/string_view.h"
34
+ #include "src/core/call/metadata_batch.h"
35
+ #include "src/core/call/metadata_compression_traits.h"
34
36
  #include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
35
37
  #include "src/core/ext/transport/chttp2/transport/hpack_encoder_table.h"
36
38
  #include "src/core/lib/slice/slice.h"
37
39
  #include "src/core/lib/slice/slice_buffer.h"
38
- #include "src/core/lib/transport/metadata_batch.h"
39
- #include "src/core/lib/transport/metadata_compression_traits.h"
40
40
  #include "src/core/lib/transport/timeout_encoding.h"
41
41
  #include "src/core/lib/transport/transport.h"
42
42
  #include "src/core/telemetry/call_tracer.h"
@@ -27,8 +27,8 @@
27
27
  #include "absl/status/status.h"
28
28
  #include "absl/strings/str_cat.h"
29
29
  #include "absl/strings/string_view.h"
30
+ #include "src/core/call/metadata_batch.h"
30
31
  #include "src/core/lib/surface/validate_metadata.h"
31
- #include "src/core/lib/transport/metadata_batch.h"
32
32
  #include "src/core/util/crash.h"
33
33
  #include "src/core/util/ref_counted.h"
34
34
  #include "src/core/util/ref_counted_ptr.h"
@@ -38,6 +38,8 @@
38
38
  #include "absl/strings/str_cat.h"
39
39
  #include "absl/strings/string_view.h"
40
40
  #include "absl/types/span.h"
41
+ #include "src/core/call/metadata_info.h"
42
+ #include "src/core/call/parsed_metadata.h"
41
43
  #include "src/core/ext/transport/chttp2/transport/decode_huff.h"
42
44
  #include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
43
45
  #include "src/core/ext/transport/chttp2/transport/hpack_parse_result.h"
@@ -46,8 +48,6 @@
46
48
  #include "src/core/lib/slice/slice.h"
47
49
  #include "src/core/lib/slice/slice_refcount.h"
48
50
  #include "src/core/lib/surface/validate_metadata.h"
49
- #include "src/core/lib/transport/metadata_info.h"
50
- #include "src/core/lib/transport/parsed_metadata.h"
51
51
  #include "src/core/telemetry/call_tracer.h"
52
52
  #include "src/core/telemetry/stats.h"
53
53
  #include "src/core/telemetry/stats_data.h"
@@ -34,13 +34,13 @@
34
34
  #include "absl/strings/str_cat.h"
35
35
  #include "absl/strings/string_view.h"
36
36
  #include "absl/types/span.h"
37
+ #include "src/core/call/metadata_batch.h"
37
38
  #include "src/core/ext/transport/chttp2/transport/hpack_parse_result.h"
38
39
  #include "src/core/ext/transport/chttp2/transport/hpack_parser_table.h"
39
40
  #include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
40
41
  #include "src/core/lib/iomgr/error.h"
41
42
  #include "src/core/lib/slice/slice.h"
42
43
  #include "src/core/lib/slice/slice_refcount.h"
43
- #include "src/core/lib/transport/metadata_batch.h"
44
44
  #include "src/core/telemetry/call_tracer.h"
45
45
  #include "src/core/util/random_early_detection.h"
46
46
 
@@ -29,10 +29,10 @@
29
29
  #include <vector>
30
30
 
31
31
  #include "absl/functional/function_ref.h"
32
+ #include "src/core/call/metadata_batch.h"
33
+ #include "src/core/call/parsed_metadata.h"
32
34
  #include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
33
35
  #include "src/core/ext/transport/chttp2/transport/hpack_parse_result.h"
34
- #include "src/core/lib/transport/metadata_batch.h"
35
- #include "src/core/lib/transport/parsed_metadata.h"
36
36
  #include "src/core/util/no_destruct.h"
37
37
  #include "src/core/util/unique_ptr_with_bitset.h"
38
38
 
@@ -24,9 +24,11 @@
24
24
 
25
25
  #include "absl/strings/str_cat.h"
26
26
  #include "src/core/ext/transport/chttp2/transport/frame.h"
27
- #include "src/core/lib/transport/http2_errors.h"
27
+ #include "src/core/ext/transport/chttp2/transport/http2_status.h"
28
28
  #include "src/core/util/useful.h"
29
29
 
30
+ using grpc_core::http2::Http2ErrorCode;
31
+
30
32
  namespace grpc_core {
31
33
 
32
34
  void Http2Settings::Diff(
@@ -88,13 +90,13 @@ std::string Http2Settings::WireIdToName(uint16_t wire_id) {
88
90
  }
89
91
  }
90
92
 
91
- grpc_http2_error_code Http2Settings::Apply(uint16_t key, uint32_t value) {
93
+ Http2ErrorCode Http2Settings::Apply(uint16_t key, uint32_t value) {
92
94
  switch (key) {
93
95
  case kHeaderTableSizeWireId:
94
96
  header_table_size_ = value;
95
97
  break;
96
98
  case kEnablePushWireId:
97
- if (value > 1) return GRPC_HTTP2_PROTOCOL_ERROR;
99
+ if (value > 1) return Http2ErrorCode::kProtocolError;
98
100
  enable_push_ = value != 0;
99
101
  break;
100
102
  case kMaxConcurrentStreamsWireId:
@@ -102,13 +104,13 @@ grpc_http2_error_code Http2Settings::Apply(uint16_t key, uint32_t value) {
102
104
  break;
103
105
  case kInitialWindowSizeWireId:
104
106
  if (value > max_initial_window_size()) {
105
- return GRPC_HTTP2_FLOW_CONTROL_ERROR;
107
+ return Http2ErrorCode::kFlowControlError;
106
108
  }
107
109
  initial_window_size_ = value;
108
110
  break;
109
111
  case kMaxFrameSizeWireId:
110
112
  if (value < min_max_frame_size() || value > max_max_frame_size()) {
111
- return GRPC_HTTP2_PROTOCOL_ERROR;
113
+ return Http2ErrorCode::kProtocolError;
112
114
  }
113
115
  max_frame_size_ = value;
114
116
  break;
@@ -116,7 +118,7 @@ grpc_http2_error_code Http2Settings::Apply(uint16_t key, uint32_t value) {
116
118
  max_header_list_size_ = std::min(value, 16777216u);
117
119
  break;
118
120
  case kGrpcAllowTrueBinaryMetadataWireId:
119
- if (value > 1) return GRPC_HTTP2_PROTOCOL_ERROR;
121
+ if (value > 1) return Http2ErrorCode::kProtocolError;
120
122
  allow_true_binary_metadata_ = value != 0;
121
123
  break;
122
124
  case kGrpcPreferredReceiveCryptoFrameSizeWireId:
@@ -125,11 +127,11 @@ grpc_http2_error_code Http2Settings::Apply(uint16_t key, uint32_t value) {
125
127
  max_preferred_receive_crypto_message_size());
126
128
  break;
127
129
  case kGrpcAllowSecurityFrameWireId:
128
- if (value > 1) return GRPC_HTTP2_PROTOCOL_ERROR;
130
+ if (value > 1) return Http2ErrorCode::kProtocolError;
129
131
  allow_security_frame_ = value != 0;
130
132
  break;
131
133
  }
132
- return GRPC_HTTP2_NO_ERROR;
134
+ return Http2ErrorCode::kNoError;
133
135
  }
134
136
 
135
137
  std::optional<Http2SettingsFrame> Http2SettingsManager::MaybeSendUpdate() {
@@ -26,7 +26,7 @@
26
26
  #include "absl/functional/function_ref.h"
27
27
  #include "absl/strings/string_view.h"
28
28
  #include "src/core/ext/transport/chttp2/transport/frame.h"
29
- #include "src/core/lib/transport/http2_errors.h"
29
+ #include "src/core/ext/transport/chttp2/transport/http2_status.h"
30
30
  #include "src/core/util/useful.h"
31
31
 
32
32
  namespace grpc_core {
@@ -47,7 +47,7 @@ class Http2Settings {
47
47
 
48
48
  void Diff(bool is_first_send, const Http2Settings& old,
49
49
  absl::FunctionRef<void(uint16_t key, uint32_t value)> cb) const;
50
- GRPC_MUST_USE_RESULT grpc_http2_error_code Apply(uint16_t key,
50
+ GRPC_MUST_USE_RESULT http2::Http2ErrorCode Apply(uint16_t key,
51
51
  uint32_t value);
52
52
  uint32_t header_table_size() const { return header_table_size_; }
53
53
  uint32_t max_concurrent_streams() const { return max_concurrent_streams_; }