grpc 1.72.0 → 1.73.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 (1034) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +23 -6
  3. data/include/grpc/event_engine/event_engine.h +125 -8
  4. data/include/grpc/event_engine/internal/write_event.h +34 -0
  5. data/include/grpc/impl/channel_arg_names.h +17 -9
  6. data/include/grpc/impl/compression_types.h +3 -2
  7. data/include/grpc/impl/slice_type.h +1 -1
  8. data/include/grpc/support/json.h +3 -21
  9. data/include/grpc/support/port_platform.h +8 -5
  10. data/src/core/call/call_filters.h +28 -19
  11. data/src/core/call/call_spine.h +2 -0
  12. data/src/core/call/metadata.h +17 -0
  13. data/src/core/channelz/channel_trace.cc +50 -42
  14. data/src/core/channelz/channel_trace.h +35 -4
  15. data/src/core/channelz/channelz.cc +338 -125
  16. data/src/core/channelz/channelz.h +276 -34
  17. data/src/core/channelz/channelz_registry.cc +322 -117
  18. data/src/core/channelz/channelz_registry.h +179 -21
  19. data/src/core/channelz/ztrace_collector.h +315 -0
  20. data/src/core/client_channel/client_channel.cc +30 -29
  21. data/src/core/client_channel/client_channel_filter.cc +21 -20
  22. data/src/core/client_channel/client_channel_filter.h +0 -2
  23. data/src/core/client_channel/connector.h +0 -3
  24. data/src/core/client_channel/global_subchannel_pool.cc +68 -7
  25. data/src/core/client_channel/global_subchannel_pool.h +37 -4
  26. data/src/core/client_channel/subchannel.cc +7 -9
  27. data/src/core/client_channel/subchannel.h +2 -8
  28. data/src/core/client_channel/subchannel_pool_interface.cc +5 -6
  29. data/src/core/client_channel/subchannel_pool_interface.h +11 -1
  30. data/src/core/config/config_vars.cc +11 -1
  31. data/src/core/config/config_vars.h +8 -0
  32. data/src/core/config/core_configuration.cc +50 -11
  33. data/src/core/config/core_configuration.h +89 -7
  34. data/src/core/credentials/call/external/aws_request_signer.cc +3 -2
  35. data/src/core/credentials/call/external/url_external_account_credentials.cc +2 -2
  36. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +1 -1
  37. data/src/core/credentials/call/jwt/jwt_verifier.cc +4 -4
  38. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +4 -2
  39. data/src/core/credentials/transport/alts/alts_security_connector.cc +9 -8
  40. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  41. data/src/core/credentials/transport/ssl/ssl_credentials.cc +2 -2
  42. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +41 -11
  43. data/src/core/credentials/transport/ssl/ssl_security_connector.h +2 -1
  44. data/src/core/credentials/transport/tls/ssl_utils.cc +18 -0
  45. data/src/core/credentials/transport/tls/ssl_utils.h +5 -0
  46. data/src/core/credentials/transport/tls/tls_security_connector.cc +2 -1
  47. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +6 -3
  48. data/src/core/ext/filters/http/message_compress/compression_filter.h +34 -4
  49. data/src/core/ext/filters/http/server/http_server_filter.cc +1 -1
  50. data/src/core/ext/filters/http/server/http_server_filter.h +14 -3
  51. data/src/core/ext/transport/chttp2/chttp2_plugin.cc +40 -0
  52. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +11 -112
  53. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +3 -0
  54. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +33 -962
  55. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -1
  56. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -47
  57. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  58. data/src/core/ext/transport/chttp2/transport/flow_control.h +18 -0
  59. data/src/core/ext/transport/chttp2/transport/frame.cc +213 -105
  60. data/src/core/ext/transport/chttp2/transport/frame.h +78 -6
  61. data/src/core/ext/transport/chttp2/transport/frame_data.cc +10 -0
  62. data/src/core/ext/transport/chttp2/transport/frame_data.h +2 -0
  63. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +15 -3
  64. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +5 -3
  65. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -0
  66. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +11 -4
  67. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -1
  68. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -1
  69. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -0
  70. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +7 -0
  71. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -0
  72. data/src/core/ext/transport/chttp2/transport/http2_settings.h +26 -0
  73. data/src/core/ext/transport/chttp2/transport/http2_status.h +358 -1
  74. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +252 -0
  75. data/src/core/ext/transport/chttp2/transport/internal.h +29 -5
  76. data/src/core/ext/transport/chttp2/transport/internal_channel_arg_names.h +24 -0
  77. data/src/core/ext/transport/chttp2/transport/parsing.cc +36 -21
  78. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +10 -9
  79. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +6 -0
  80. data/src/core/ext/transport/chttp2/transport/writing.cc +60 -49
  81. data/src/core/ext/transport/inproc/inproc_transport.cc +7 -2
  82. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +6 -2
  83. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +4 -0
  84. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +12 -0
  85. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +12 -22
  86. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +12 -22
  87. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +28 -22
  88. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +12 -0
  89. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +24 -67
  90. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +4 -0
  91. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +4 -0
  92. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +29 -31
  93. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +2 -2
  94. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +12 -0
  95. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +4 -0
  96. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +8 -0
  97. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +4 -0
  98. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +4 -0
  99. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +0 -23
  100. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +8 -0
  101. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +8 -0
  102. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +12 -0
  103. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +20 -0
  104. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +12 -0
  105. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +8 -22
  106. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +0 -23
  107. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +64 -66
  108. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +4 -0
  109. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +12 -0
  110. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +4 -0
  111. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +4 -0
  112. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +4 -95
  113. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +8 -0
  114. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
  115. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +4 -0
  116. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +28 -0
  117. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +4 -0
  118. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +4 -0
  119. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +4 -0
  120. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +12 -0
  121. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +8 -0
  122. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +8 -36
  123. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +4 -0
  124. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +4 -0
  125. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +4 -0
  126. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +4 -0
  127. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +4 -0
  128. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +4 -0
  129. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +4 -0
  130. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +4 -0
  131. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +4 -0
  132. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +8 -0
  133. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +8 -0
  134. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +4 -0
  135. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +4 -0
  136. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +4 -0
  137. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +8 -44
  138. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +12 -40
  139. data/src/core/ext/upb-gen/google/api/http.upb.h +4 -0
  140. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +193 -20
  141. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +59 -21
  142. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +4 -0
  143. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +4 -22
  144. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +0 -18
  145. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +113 -53
  146. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +20 -14
  147. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +154 -0
  148. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +40 -2
  149. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +4 -0
  150. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +8 -0
  151. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +0 -18
  152. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +0 -36
  153. data/src/core/ext/upb-gen/validate/validate.upb.h +12 -0
  154. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +4 -0
  155. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +0 -18
  156. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +8 -0
  157. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +0 -54
  158. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +20 -22
  159. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +4 -0
  160. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +4 -0
  161. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +4 -0
  162. data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c +123 -62
  163. data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h +5 -1
  164. data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c +200 -101
  165. data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h +5 -1
  166. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c +152 -77
  167. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h +5 -1
  168. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.c +524 -255
  169. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.h +5 -1
  170. data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.c +44 -23
  171. data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.h +5 -1
  172. data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.c +66 -34
  173. data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.h +5 -1
  174. data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.c +54 -28
  175. data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.h +5 -1
  176. data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.c +46 -25
  177. data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.h +5 -1
  178. data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.c +47 -25
  179. data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.h +5 -1
  180. data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.c +256 -126
  181. data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.h +5 -1
  182. data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.c +50 -28
  183. data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.h +5 -1
  184. data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.c +55 -28
  185. data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.h +5 -1
  186. data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.c +34 -18
  187. data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.h +5 -1
  188. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +414 -206
  189. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.h +5 -1
  190. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +831 -413
  191. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -1
  192. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +143 -73
  193. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +5 -1
  194. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1132 -557
  195. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.h +5 -1
  196. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.c +63 -34
  197. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.h +5 -1
  198. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.c +255 -127
  199. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.h +5 -1
  200. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +363 -178
  201. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.h +5 -1
  202. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +227 -114
  203. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.h +5 -1
  204. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.c +57 -31
  205. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.h +5 -1
  206. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +596 -295
  207. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +5 -1
  208. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.c +271 -137
  209. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.h +5 -1
  210. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.c +56 -30
  211. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.h +5 -1
  212. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.c +45 -25
  213. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.h +5 -1
  214. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.c +59 -31
  215. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.h +5 -1
  216. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +438 -217
  217. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.h +5 -1
  218. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.c +441 -221
  219. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.h +5 -1
  220. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.c +55 -30
  221. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.h +5 -1
  222. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.c +57 -31
  223. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.h +5 -1
  224. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +619 -303
  225. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.h +5 -1
  226. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +70 -36
  227. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -1
  228. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.c +62 -33
  229. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.h +5 -1
  230. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.c +47 -25
  231. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.h +5 -1
  232. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.c +97 -49
  233. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +5 -1
  234. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +97 -51
  235. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.h +5 -1
  236. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.c +51 -27
  237. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.h +5 -1
  238. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.c +147 -76
  239. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.h +5 -1
  240. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +230 -116
  241. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -1
  242. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.c +277 -138
  243. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.h +5 -1
  244. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.c +48 -26
  245. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.h +5 -1
  246. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +388 -197
  247. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -1
  248. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.c +304 -153
  249. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +5 -1
  250. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +173 -90
  251. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.h +5 -1
  252. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.c +90 -47
  253. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.h +5 -1
  254. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +98 -51
  255. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.h +5 -1
  256. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +196 -99
  257. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.h +5 -1
  258. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +237 -118
  259. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.h +5 -1
  260. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +418 -210
  261. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +5 -1
  262. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +194 -99
  263. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.h +5 -1
  264. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +2003 -973
  265. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +5 -1
  266. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.c +101 -53
  267. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.h +5 -1
  268. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +352 -176
  269. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.h +5 -1
  270. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.c +79 -42
  271. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.h +5 -1
  272. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.c +67 -37
  273. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.h +5 -1
  274. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.c +63 -34
  275. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.h +5 -1
  276. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.c +88 -47
  277. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.h +5 -1
  278. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +80 -43
  279. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.h +5 -1
  280. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.c +53 -29
  281. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.h +5 -1
  282. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.c +86 -46
  283. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.h +5 -1
  284. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.c +55 -32
  285. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.h +5 -1
  286. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.c +91 -49
  287. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.h +5 -1
  288. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +105 -55
  289. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.h +5 -1
  290. data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.c +775 -379
  291. data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.h +5 -1
  292. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +52 -28
  293. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -1
  294. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +134 -68
  295. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +5 -1
  296. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +189 -96
  297. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +5 -1
  298. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.c +116 -61
  299. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.h +5 -1
  300. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +112 -58
  301. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +5 -1
  302. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.c +160 -82
  303. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.h +5 -1
  304. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +75 -39
  305. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +5 -1
  306. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1161 -570
  307. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -1
  308. data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +52 -28
  309. data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +5 -1
  310. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.c +55 -29
  311. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.h +5 -1
  312. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -26
  313. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +5 -1
  314. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +390 -194
  315. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +5 -1
  316. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +126 -65
  317. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -1
  318. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +498 -246
  319. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -1
  320. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +74 -38
  321. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +5 -1
  322. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +221 -110
  323. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -1
  324. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c +68 -36
  325. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h +5 -1
  326. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c +378 -187
  327. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +5 -1
  328. data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c +100 -52
  329. data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h +5 -1
  330. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.c +257 -129
  331. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.h +5 -1
  332. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +44 -24
  333. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -1
  334. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.c +68 -35
  335. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.h +5 -1
  336. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.c +38 -20
  337. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.h +5 -1
  338. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.c +59 -32
  339. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.h +5 -1
  340. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.c +65 -34
  341. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -1
  342. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.c +72 -38
  343. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.h +5 -1
  344. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.c +57 -31
  345. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.h +5 -1
  346. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.c +52 -29
  347. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.h +5 -1
  348. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.c +51 -28
  349. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.h +5 -1
  350. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.c +89 -47
  351. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.h +5 -1
  352. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.c +37 -20
  353. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.h +5 -1
  354. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.c +89 -47
  355. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.h +5 -1
  356. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.c +67 -35
  357. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.h +5 -1
  358. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.c +112 -58
  359. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.h +5 -1
  360. data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.c +110 -56
  361. data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.h +5 -1
  362. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +123 -62
  363. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.h +5 -1
  364. data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.c +59 -31
  365. data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.h +5 -1
  366. data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.c +30 -16
  367. data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.h +5 -1
  368. data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.c +143 -72
  369. data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.h +5 -1
  370. data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.c +61 -32
  371. data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.h +5 -1
  372. data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.c +51 -27
  373. data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.h +5 -1
  374. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.c +85 -45
  375. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.h +5 -1
  376. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.c +35 -19
  377. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.h +5 -1
  378. data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.c +44 -23
  379. data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.h +5 -1
  380. data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.c +61 -33
  381. data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.h +5 -1
  382. data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.c +35 -19
  383. data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.h +5 -1
  384. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.c +272 -133
  385. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.h +5 -1
  386. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.c +315 -154
  387. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.h +5 -1
  388. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +64 -33
  389. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.h +5 -1
  390. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +35 -19
  391. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.h +5 -1
  392. data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.c +26 -15
  393. data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.h +5 -1
  394. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +1106 -508
  395. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.h +10 -1
  396. data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.c +28 -16
  397. data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.h +5 -1
  398. data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.c +23 -13
  399. data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.h +5 -1
  400. data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.c +69 -35
  401. data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.h +5 -1
  402. data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.c +29 -16
  403. data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.h +5 -1
  404. data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.c +51 -26
  405. data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.h +5 -1
  406. data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.c +32 -17
  407. data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.h +5 -1
  408. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +161 -79
  409. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +5 -1
  410. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +84 -42
  411. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.h +5 -1
  412. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +48 -26
  413. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.h +5 -1
  414. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +26 -14
  415. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.h +5 -1
  416. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +50 -26
  417. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.h +5 -1
  418. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +36 -19
  419. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.h +5 -1
  420. data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.c +538 -261
  421. data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.h +5 -1
  422. data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.c +86 -43
  423. data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.h +5 -1
  424. data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.c +49 -26
  425. data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.h +5 -1
  426. data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.c +27 -15
  427. data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.h +5 -1
  428. data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.c +87 -44
  429. data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.h +5 -1
  430. data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.c +37 -20
  431. data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.h +5 -1
  432. data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.c +30 -17
  433. data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.h +5 -1
  434. data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.c +41 -23
  435. data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.h +5 -1
  436. data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.c +62 -33
  437. data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.h +5 -1
  438. data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.c +36 -19
  439. data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.h +5 -1
  440. data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.c +36 -20
  441. data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.h +5 -1
  442. data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.c +42 -23
  443. data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.h +5 -1
  444. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.c +76 -39
  445. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.h +5 -1
  446. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.c +45 -24
  447. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.h +5 -1
  448. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +41 -23
  449. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.h +5 -1
  450. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.c +53 -29
  451. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.h +5 -1
  452. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +29 -16
  453. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.h +5 -1
  454. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.c +58 -32
  455. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.h +5 -1
  456. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +207 -103
  457. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.h +5 -1
  458. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.c +95 -49
  459. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.h +5 -1
  460. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.c +38 -20
  461. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.h +5 -1
  462. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +60 -31
  463. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.h +5 -1
  464. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +67 -36
  465. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.h +5 -1
  466. data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.c +31 -17
  467. data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.h +5 -1
  468. data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.c +31 -17
  469. data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.h +5 -1
  470. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +7 -22
  471. data/src/core/handshaker/security/legacy_secure_endpoint.cc +596 -0
  472. data/src/core/handshaker/security/secure_endpoint.cc +769 -312
  473. data/src/core/handshaker/security/secure_endpoint.h +17 -0
  474. data/src/core/handshaker/security/security_handshaker.cc +3 -3
  475. data/src/core/lib/address_utils/sockaddr_utils.cc +5 -5
  476. data/src/core/lib/channel/channel_args.h +4 -0
  477. data/src/core/lib/channel/channel_stack.cc +29 -0
  478. data/src/core/lib/channel/channel_stack.h +9 -0
  479. data/src/core/lib/channel/promise_based_filter.h +707 -299
  480. data/src/core/lib/debug/trace_flags.cc +2 -2
  481. data/src/core/lib/debug/trace_flags.h +1 -1
  482. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +6 -2
  483. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +4 -4
  484. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +14 -6
  485. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  486. data/src/core/lib/event_engine/extensions/blocking_dns.h +46 -0
  487. data/src/core/lib/event_engine/extensions/channelz.h +62 -0
  488. data/src/core/lib/event_engine/extensions/tcp_trace.h +2 -2
  489. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +4 -7
  490. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +3 -0
  491. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +6 -7
  492. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +28 -22
  493. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +22 -0
  494. data/src/core/lib/event_engine/posix_engine/posix_engine.h +15 -15
  495. data/src/core/lib/event_engine/query_extensions.h +10 -21
  496. data/src/core/lib/event_engine/tcp_socket_utils.cc +10 -9
  497. data/src/core/lib/event_engine/utils.cc +34 -0
  498. data/src/core/lib/event_engine/utils.h +3 -0
  499. data/src/core/lib/event_engine/windows/windows_endpoint.cc +2 -2
  500. data/src/core/lib/event_engine/windows/windows_endpoint.h +9 -2
  501. data/src/core/lib/experiments/experiments.cc +198 -51
  502. data/src/core/lib/experiments/experiments.h +78 -35
  503. data/src/core/lib/iomgr/combiner.cc +3 -2
  504. data/src/core/lib/iomgr/ev_poll_posix.cc +4 -0
  505. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +11 -8
  506. data/src/core/lib/iomgr/fork_posix.cc +0 -7
  507. data/src/core/lib/iomgr/iomgr.cc +0 -3
  508. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +3 -0
  509. data/src/core/lib/iomgr/resolve_address_posix.cc +37 -47
  510. data/src/core/lib/iomgr/resolve_address_posix.h +15 -0
  511. data/src/core/lib/iomgr/resolve_address_windows.cc +22 -45
  512. data/src/core/lib/iomgr/resolve_address_windows.h +15 -2
  513. data/src/core/lib/iomgr/tcp_client_posix.cc +14 -6
  514. data/src/core/lib/iomgr/tcp_posix.cc +14 -12
  515. data/src/core/lib/iomgr/tcp_server_windows.cc +14 -2
  516. data/src/core/lib/promise/detail/promise_like.h +24 -0
  517. data/src/core/lib/promise/detail/seq_state.h +741 -0
  518. data/src/core/lib/promise/map.h +22 -5
  519. data/src/core/lib/promise/promise.h +2 -0
  520. data/src/core/lib/promise/seq.h +2 -0
  521. data/src/core/lib/promise/sleep.cc +6 -3
  522. data/src/core/lib/promise/try_seq.h +2 -0
  523. data/src/core/lib/resource_quota/memory_quota.cc +9 -0
  524. data/src/core/lib/resource_quota/memory_quota.h +1 -3
  525. data/src/core/lib/slice/slice_buffer.h +6 -0
  526. data/src/core/lib/surface/call.cc +4 -0
  527. data/src/core/lib/surface/channel_create.cc +61 -1
  528. data/src/core/lib/surface/init.cc +2 -2
  529. data/src/core/lib/surface/version.cc +2 -2
  530. data/src/core/lib/transport/status_conversion.cc +7 -34
  531. data/src/core/lib/transport/transport.cc +2 -2
  532. data/src/core/lib/transport/transport.h +3 -0
  533. data/src/core/load_balancing/backend_metric_parser.cc +12 -18
  534. data/src/core/load_balancing/grpclb/grpclb.cc +2 -2
  535. data/src/core/load_balancing/health_check_client.cc +2 -4
  536. data/src/core/load_balancing/oob_backend_metric.cc +2 -4
  537. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +4 -3
  538. data/src/core/load_balancing/pick_first/pick_first.cc +3 -3
  539. data/src/core/load_balancing/rls/rls.cc +6 -5
  540. data/src/core/load_balancing/round_robin/round_robin.cc +2 -3
  541. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +4 -4
  542. data/src/core/load_balancing/weighted_target/weighted_target.cc +3 -9
  543. data/src/core/load_balancing/xds/xds_override_host.cc +55 -34
  544. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  545. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +2 -1
  546. data/src/core/resolver/xds/xds_resolver.cc +2 -1
  547. data/src/core/server/add_port.cc +87 -0
  548. data/src/core/server/server.cc +48 -53
  549. data/src/core/server/server.h +3 -5
  550. data/src/core/telemetry/call_tracer.cc +2 -2
  551. data/src/core/telemetry/call_tracer.h +1 -1
  552. data/src/core/{ext/transport/chttp2/transport → telemetry}/context_list_entry.h +3 -3
  553. data/src/core/telemetry/default_tcp_tracer.cc +26 -0
  554. data/src/core/telemetry/default_tcp_tracer.h +44 -0
  555. data/src/core/telemetry/stats.h +0 -5
  556. data/src/core/telemetry/stats_data.cc +376 -334
  557. data/src/core/telemetry/stats_data.h +260 -166
  558. data/src/core/telemetry/tcp_tracer.cc +38 -0
  559. data/src/core/telemetry/tcp_tracer.h +14 -16
  560. data/src/core/transport/auth_context.cc +0 -1
  561. data/src/core/transport/auth_context.h +0 -1
  562. data/src/core/transport/endpoint_transport.h +90 -0
  563. data/src/core/transport/endpoint_transport_client_channel_factory.cc +61 -0
  564. data/src/core/transport/endpoint_transport_client_channel_factory.h +57 -0
  565. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +33 -1
  566. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +3 -1
  567. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +76 -22
  568. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +8 -2
  569. data/src/core/tsi/ssl_transport_security.cc +189 -71
  570. data/src/core/tsi/ssl_transport_security.h +6 -1
  571. data/src/core/tsi/transport_security.h +3 -0
  572. data/src/core/tsi/transport_security_grpc.h +7 -3
  573. data/src/core/tsi/transport_security_interface.h +30 -25
  574. data/src/core/util/backoff.cc +7 -14
  575. data/src/core/util/backoff.h +0 -1
  576. data/src/core/util/dual_ref_counted.h +48 -0
  577. data/src/core/util/function_signature.h +66 -0
  578. data/src/core/util/gcp_metadata_query.cc +3 -2
  579. data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
  580. data/src/core/util/json/json_object_loader.h +3 -3
  581. data/src/core/util/latent_see.cc +28 -2
  582. data/src/core/util/latent_see.h +11 -23
  583. data/src/core/util/linux/env.cc +3 -1
  584. data/src/core/util/ref_counted_ptr.h +26 -0
  585. data/src/core/util/shared_bit_gen.cc +21 -0
  586. data/src/core/util/shared_bit_gen.h +44 -0
  587. data/src/core/util/single_set_ptr.h +35 -4
  588. data/src/core/util/uri.cc +75 -17
  589. data/src/core/util/uri.h +13 -8
  590. data/src/core/xds/grpc/xds_common_types_parser.cc +1 -9
  591. data/src/core/xds/grpc/xds_http_filter_registry.cc +1 -3
  592. data/src/core/xds/grpc/xds_http_rbac_filter.cc +10 -17
  593. data/src/core/xds/grpc/xds_metadata_parser.cc +40 -64
  594. data/src/core/xds/grpc/xds_metadata_parser.h +0 -2
  595. data/src/core/xds/grpc/xds_route_config_parser.cc +55 -77
  596. data/src/core/xds/xds_client/xds_client.cc +1 -1
  597. data/src/ruby/ext/grpc/extconf.rb +1 -1
  598. data/src/ruby/lib/grpc/version.rb +1 -1
  599. data/src/ruby/spec/generic/client_stub_spec.rb +2 -6
  600. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  601. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +2 -2
  602. data/third_party/abseil-cpp/absl/algorithm/container.h +79 -48
  603. data/third_party/abseil-cpp/absl/base/attributes.h +66 -16
  604. data/third_party/abseil-cpp/absl/base/call_once.h +8 -5
  605. data/third_party/abseil-cpp/absl/base/config.h +4 -4
  606. data/third_party/abseil-cpp/absl/base/internal/nullability_impl.h +17 -56
  607. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +1 -1
  608. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -0
  609. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +5 -1
  610. data/third_party/abseil-cpp/absl/base/internal/tracing.cc +39 -0
  611. data/third_party/abseil-cpp/absl/base/internal/tracing.h +81 -0
  612. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +0 -10
  613. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -0
  614. data/third_party/abseil-cpp/absl/base/macros.h +35 -4
  615. data/third_party/abseil-cpp/absl/base/nullability.h +72 -16
  616. data/third_party/abseil-cpp/absl/base/optimization.h +8 -12
  617. data/third_party/abseil-cpp/absl/base/options.h +5 -2
  618. data/third_party/abseil-cpp/absl/base/policy_checks.h +2 -0
  619. data/third_party/abseil-cpp/absl/container/btree_map.h +889 -0
  620. data/third_party/abseil-cpp/absl/container/btree_set.h +824 -0
  621. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -1
  622. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +17 -3
  623. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +17 -3
  624. data/third_party/abseil-cpp/absl/container/inlined_vector.h +2 -1
  625. data/third_party/abseil-cpp/absl/container/internal/btree.h +3046 -0
  626. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +763 -0
  627. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +9 -0
  628. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +1 -0
  629. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +4 -2
  630. data/third_party/abseil-cpp/absl/container/internal/layout.h +1 -1
  631. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +142 -114
  632. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +397 -231
  633. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +56 -0
  634. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +21 -7
  635. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +4 -2
  636. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +1 -1
  637. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +17 -1
  638. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +7 -0
  639. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +9 -6
  640. data/third_party/abseil-cpp/absl/debugging/leak_check.cc +73 -0
  641. data/third_party/abseil-cpp/absl/debugging/leak_check.h +150 -0
  642. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +3 -2
  643. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +48 -9
  644. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +1 -0
  645. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +7 -0
  646. data/third_party/abseil-cpp/absl/flags/flag.h +14 -12
  647. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +12 -4
  648. data/third_party/abseil-cpp/absl/flags/internal/flag.h +16 -5
  649. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +4 -0
  650. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +3 -0
  651. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +13 -12
  652. data/third_party/abseil-cpp/absl/flags/usage_config.cc +9 -4
  653. data/third_party/abseil-cpp/absl/hash/hash.h +26 -2
  654. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +17 -17
  655. data/third_party/abseil-cpp/absl/hash/internal/hash.h +196 -91
  656. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +2 -4
  657. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +2 -0
  658. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +27 -22
  659. data/third_party/abseil-cpp/absl/log/internal/check_op.h +102 -80
  660. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +90 -38
  661. data/third_party/abseil-cpp/absl/log/internal/log_message.h +80 -48
  662. data/third_party/abseil-cpp/absl/log/internal/proto.cc +0 -3
  663. data/third_party/abseil-cpp/absl/log/internal/proto.h +25 -15
  664. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +115 -0
  665. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +107 -0
  666. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +8 -1
  667. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +5 -2
  668. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +2 -0
  669. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -6
  670. data/third_party/abseil-cpp/absl/numeric/int128.h +15 -3
  671. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +6 -4
  672. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +6 -3
  673. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +3 -1
  674. data/third_party/abseil-cpp/absl/random/beta_distribution.h +3 -1
  675. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +2 -1
  676. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +10 -0
  677. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +4 -2
  678. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -0
  679. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +2 -1
  680. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -1
  681. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +5 -2
  682. data/third_party/abseil-cpp/absl/random/internal/platform.h +12 -12
  683. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +56 -5
  684. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -1
  685. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +2 -2
  686. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +0 -1
  687. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +1 -4
  688. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +4 -3
  689. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +2 -3
  690. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -2
  691. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -1
  692. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +2 -0
  693. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +5 -4
  694. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +8 -4
  695. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -1
  696. data/third_party/abseil-cpp/absl/status/status.h +1 -1
  697. data/third_party/abseil-cpp/absl/strings/ascii.cc +41 -26
  698. data/third_party/abseil-cpp/absl/strings/ascii.h +48 -8
  699. data/third_party/abseil-cpp/absl/strings/charconv.cc +4 -7
  700. data/third_party/abseil-cpp/absl/strings/charset.h +3 -4
  701. data/third_party/abseil-cpp/absl/strings/cord.h +5 -19
  702. data/third_party/abseil-cpp/absl/strings/escaping.cc +56 -48
  703. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +1 -1
  704. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +48 -15
  705. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +3 -2
  706. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -0
  707. data/third_party/abseil-cpp/absl/strings/match.h +21 -11
  708. data/third_party/abseil-cpp/absl/strings/numbers.cc +2 -1
  709. data/third_party/abseil-cpp/absl/strings/str_cat.h +11 -0
  710. data/third_party/abseil-cpp/absl/strings/str_split.h +18 -1
  711. data/third_party/abseil-cpp/absl/strings/string_view.h +20 -19
  712. data/third_party/abseil-cpp/absl/strings/strip.h +11 -8
  713. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +16 -10
  714. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +6 -0
  715. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +5 -1
  716. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +38 -12
  717. data/third_party/abseil-cpp/absl/synchronization/notification.cc +10 -2
  718. data/third_party/abseil-cpp/absl/synchronization/notification.h +11 -1
  719. data/third_party/abseil-cpp/absl/time/duration.cc +6 -51
  720. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  721. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  722. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +3 -3
  723. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +2 -2
  724. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +2 -2
  725. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +3 -3
  726. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +2 -2
  727. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +1 -1
  728. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +1 -1
  729. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +3 -2
  730. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +1 -1
  731. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -4
  732. data/third_party/abseil-cpp/absl/time/time.h +84 -23
  733. data/third_party/abseil-cpp/absl/types/internal/span.h +3 -2
  734. data/third_party/abseil-cpp/absl/types/optional.h +4 -2
  735. data/third_party/abseil-cpp/absl/types/span.h +85 -43
  736. data/third_party/boringssl-with-bazel/src/crypto/aes/aes.cc +41 -0
  737. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.cc +16 -0
  738. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.cc +15 -0
  739. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +19 -3
  740. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.cc +79 -48
  741. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.cc +11 -19
  742. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.cc +3 -7
  743. data/third_party/boringssl-with-bazel/src/crypto/bcm_support.h +0 -35
  744. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.cc +0 -2
  745. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +3 -5
  746. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.cc +0 -3
  747. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.cc +0 -2
  748. data/third_party/boringssl-with-bazel/src/crypto/bn/convert.cc +31 -47
  749. data/third_party/boringssl-with-bazel/src/crypto/bn/div.cc +100 -0
  750. data/third_party/boringssl-with-bazel/src/crypto/bn/exponentiation.cc +166 -0
  751. data/third_party/boringssl-with-bazel/src/crypto/bn/sqrt.cc +93 -0
  752. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.cc +14 -8
  753. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.cc +1 -1
  754. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +3 -3
  755. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +4 -4
  756. data/third_party/boringssl-with-bazel/src/crypto/cipher/derive_key.cc +13 -15
  757. data/third_party/boringssl-with-bazel/src/crypto/cipher/e_aeseax.cc +289 -0
  758. data/third_party/boringssl-with-bazel/src/crypto/cipher/e_aesgcmsiv.cc +179 -102
  759. data/third_party/boringssl-with-bazel/src/crypto/cipher/internal.h +3 -3
  760. data/third_party/boringssl-with-bazel/src/crypto/cms/cms.cc +172 -0
  761. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.cc +28 -5
  762. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.h +11 -9
  763. data/third_party/boringssl-with-bazel/src/crypto/cpu_intel.cc +0 -6
  764. data/third_party/boringssl-with-bazel/src/crypto/crypto.cc +1 -1
  765. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +3 -3
  766. data/third_party/boringssl-with-bazel/src/crypto/des/internal.h +3 -3
  767. data/third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.cc +13 -14
  768. data/third_party/boringssl-with-bazel/src/crypto/dh/params.cc +27 -61
  769. data/third_party/boringssl-with-bazel/src/crypto/digest/digest_extra.cc +16 -8
  770. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.cc +112 -122
  771. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.cc +23 -35
  772. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  773. data/third_party/boringssl-with-bazel/src/crypto/ec/ec_asn1.cc +47 -63
  774. data/third_party/boringssl-with-bazel/src/crypto/ec/hash_to_curve.cc +60 -68
  775. data/third_party/boringssl-with-bazel/src/crypto/ec/internal.h +3 -3
  776. data/third_party/boringssl-with-bazel/src/crypto/ecdsa/ecdsa_asn1.cc +11 -17
  777. data/third_party/boringssl-with-bazel/src/crypto/err/err.cc +0 -2
  778. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.cc +10 -11
  779. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.cc +10 -11
  780. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +3 -3
  781. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.cc +6 -6
  782. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.cc +6 -6
  783. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.cc +6 -6
  784. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.cc +6 -6
  785. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.cc +6 -6
  786. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.cc +23 -42
  787. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.cc.inc +29 -18
  788. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/gcm.cc.inc +10 -10
  789. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +16 -45
  790. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -4
  791. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc +15 -6
  792. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.cc +3 -3
  793. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm_interface.h +101 -5
  794. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.cc.inc +96 -187
  795. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.cc.inc +24 -512
  796. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.cc.inc +58 -80
  797. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.cc.inc +29 -45
  798. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +27 -25
  799. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.cc.inc +7 -16
  800. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.cc.inc +27 -48
  801. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.cc.inc +34 -34
  802. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.cc.inc +102 -154
  803. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +3 -3
  804. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.cc.inc +3 -8
  805. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.cc.inc +1 -78
  806. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.cc.inc +10 -17
  807. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +3 -3
  808. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +15 -8
  809. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.cc.inc +40 -53
  810. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.cc.inc +57 -76
  811. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.cc.inc +4 -10
  812. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +3 -3
  813. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +3 -3
  814. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.cc.inc +37 -52
  815. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.cc.inc +13 -20
  816. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +3 -3
  817. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.cc.inc +28 -39
  818. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.h +3 -3
  819. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.cc.inc +6 -11
  820. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/keccak/internal.h +3 -3
  821. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
  822. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/mldsa.cc.inc +335 -28
  823. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
  824. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/mlkem.cc.inc +265 -33
  825. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +3 -3
  826. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.cc.inc +1 -1
  827. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +3 -3
  828. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.cc.inc +19 -26
  829. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.cc.inc +7 -7
  830. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.cc.inc +121 -138
  831. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.cc.inc +96 -83
  832. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +3 -3
  833. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +8 -20
  834. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
  835. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +235 -60
  836. data/third_party/boringssl-with-bazel/src/crypto/fuzzer_mode.cc +30 -0
  837. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +3 -3
  838. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -30
  839. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +3 -3
  840. data/third_party/boringssl-with-bazel/src/crypto/md5/internal.h +3 -3
  841. data/third_party/boringssl-with-bazel/src/crypto/mem.cc +0 -2
  842. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.cc +2 -8
  843. data/third_party/boringssl-with-bazel/src/crypto/pem/internal.h +3 -3
  844. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.cc +8 -13
  845. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +22 -8
  846. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.cc +19 -17
  847. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.cc +134 -136
  848. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +14 -8
  849. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.cc +25 -21
  850. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.cc +36 -52
  851. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.cc +97 -79
  852. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +3 -3
  853. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +3 -3
  854. data/third_party/boringssl-with-bazel/src/crypto/rand/deterministic.cc +1 -1
  855. data/third_party/boringssl-with-bazel/src/crypto/rand/fork_detect.cc +2 -2
  856. data/third_party/boringssl-with-bazel/src/crypto/rand/getentropy.cc +1 -1
  857. data/third_party/boringssl-with-bazel/src/crypto/rand/{sysrand_internal.h → internal.h} +22 -4
  858. data/third_party/boringssl-with-bazel/src/crypto/rand/ios.cc +1 -1
  859. data/third_party/boringssl-with-bazel/src/crypto/rand/trusty.cc +1 -1
  860. data/third_party/boringssl-with-bazel/src/crypto/rand/urandom.cc +1 -1
  861. data/third_party/boringssl-with-bazel/src/crypto/rand/windows.cc +1 -5
  862. data/third_party/boringssl-with-bazel/src/crypto/rsa/internal.h +3 -3
  863. data/third_party/boringssl-with-bazel/src/crypto/rsa/rsa_crypt.cc +14 -22
  864. data/third_party/boringssl-with-bazel/src/crypto/spake2plus/internal.h +3 -3
  865. data/third_party/boringssl-with-bazel/src/crypto/thread_win.cc +0 -2
  866. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +3 -3
  867. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.cc +3 -5
  868. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.cc +8 -12
  869. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +15 -3
  870. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_conf.cc +16 -24
  871. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_info.cc +18 -21
  872. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.cc +10 -3
  873. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.cc +9 -0
  874. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.cc +10 -1
  875. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.cc +64 -85
  876. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.cc +16 -32
  877. data/third_party/boringssl-with-bazel/src/gen/crypto/err_data.cc +576 -567
  878. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +16 -8
  879. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +1 -1
  880. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -54
  881. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +1 -1
  882. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +8 -4
  883. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +1 -1
  884. data/third_party/boringssl-with-bazel/src/include/openssl/bcm_public.h +1 -1
  885. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +1 -1
  886. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -1
  887. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +1 -1
  888. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1 -1
  889. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +1 -1
  890. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +7 -1
  891. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +1 -1
  892. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  893. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +1 -1
  894. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +1 -1
  895. data/third_party/boringssl-with-bazel/src/include/openssl/cms.h +146 -0
  896. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +1 -1
  897. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +23 -3
  898. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +1 -1
  899. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +1 -1
  900. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +1 -1
  901. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +1 -1
  902. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +19 -7
  903. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +1 -1
  904. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +1 -1
  905. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +1 -1
  906. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +1 -1
  907. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +1 -1
  908. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -1
  909. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +1 -1
  910. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -1
  911. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -1
  912. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  913. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/kyber.h +1 -1
  914. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +1 -1
  915. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +1 -1
  916. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +4 -4
  917. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +1 -1
  918. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +1 -1
  919. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +1 -1
  920. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +1 -1
  921. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +1 -1
  922. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +1 -1
  923. data/third_party/boringssl-with-bazel/src/include/openssl/mldsa.h +1 -1
  924. data/third_party/boringssl-with-bazel/src/include/openssl/mlkem.h +1 -1
  925. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +1 -1
  926. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +1 -1
  927. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +1 -1
  928. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +10 -4
  929. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +1 -1
  930. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +19 -6
  931. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +1 -1
  932. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +1 -1
  933. data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +1 -1
  934. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  935. data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +1 -1
  936. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +1 -1
  937. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +2 -2
  938. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +1 -1
  939. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +1 -1
  940. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +1 -1
  941. data/third_party/boringssl-with-bazel/src/include/openssl/slhdsa.h +1 -1
  942. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +1 -1
  943. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +291 -40
  944. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +1 -1
  945. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +0 -5
  946. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -1
  947. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +9 -1
  948. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -1
  949. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +1 -1
  950. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +7 -4
  951. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +2 -0
  952. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +32 -26
  953. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +49 -49
  954. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +253 -50
  955. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +12 -12
  956. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +7 -5
  957. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -1
  958. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +24 -32
  959. data/third_party/boringssl-with-bazel/src/ssl/internal.h +93 -4
  960. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +6 -12
  961. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +18 -4
  962. data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +83 -7
  963. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +1 -1
  964. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +173 -19
  965. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +5 -18
  966. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +28 -15
  967. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +1 -1
  968. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +31 -7
  969. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +13 -1
  970. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -11
  971. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +13 -11
  972. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +2 -5
  973. data/third_party/upb/upb/hash/common.c +310 -189
  974. data/third_party/upb/upb/hash/common.h +44 -43
  975. data/third_party/upb/upb/hash/int_table.h +29 -5
  976. data/third_party/upb/upb/hash/str_table.h +6 -0
  977. data/third_party/upb/upb/mem/arena.c +180 -57
  978. data/third_party/upb/upb/mem/arena.h +10 -0
  979. data/third_party/upb/upb/mem/internal/arena.h +62 -24
  980. data/third_party/upb/upb/message/accessors.c +1 -5
  981. data/third_party/upb/upb/message/array.c +7 -6
  982. data/third_party/upb/upb/message/array.h +4 -4
  983. data/third_party/upb/upb/message/internal/accessors.h +3 -3
  984. data/third_party/upb/upb/message/internal/extension.c +0 -12
  985. data/third_party/upb/upb/message/internal/extension.h +0 -4
  986. data/third_party/upb/upb/message/internal/iterator.h +3 -3
  987. data/third_party/upb/upb/message/internal/map.h +75 -20
  988. data/third_party/upb/upb/message/internal/map_sorter.h +10 -2
  989. data/third_party/upb/upb/message/internal/message.h +53 -5
  990. data/third_party/upb/upb/message/map.c +68 -20
  991. data/third_party/upb/upb/message/map.h +8 -1
  992. data/third_party/upb/upb/message/map_gencode_util.h +3 -45
  993. data/third_party/upb/upb/message/map_sorter.c +32 -8
  994. data/third_party/upb/upb/message/merge.h +3 -3
  995. data/third_party/upb/upb/message/message.c +120 -14
  996. data/third_party/upb/upb/message/message.h +17 -8
  997. data/third_party/upb/upb/mini_descriptor/build_enum.c +15 -5
  998. data/third_party/upb/upb/mini_descriptor/decode.c +18 -2
  999. data/third_party/upb/upb/mini_descriptor/link.c +4 -0
  1000. data/third_party/upb/upb/mini_table/extension.h +8 -1
  1001. data/third_party/upb/upb/mini_table/extension_registry.c +1 -1
  1002. data/third_party/upb/upb/mini_table/internal/enum.h +1 -1
  1003. data/third_party/upb/upb/mini_table/internal/extension.h +24 -1
  1004. data/third_party/upb/upb/mini_table/internal/field.h +4 -4
  1005. data/third_party/upb/upb/mini_table/internal/message.h +1 -1
  1006. data/third_party/upb/upb/port/def.inc +32 -16
  1007. data/third_party/upb/upb/port/undef.inc +1 -0
  1008. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  1009. data/third_party/upb/upb/reflection/descriptor_bootstrap.h +3 -3
  1010. data/third_party/upb/upb/reflection/enum_def.c +4 -4
  1011. data/third_party/upb/upb/reflection/enum_reserved_range.c +1 -1
  1012. data/third_party/upb/upb/reflection/enum_value_def.c +9 -8
  1013. data/third_party/upb/upb/reflection/extension_range.c +1 -2
  1014. data/third_party/upb/upb/reflection/field_def.c +3 -5
  1015. data/third_party/upb/upb/reflection/field_def.h +1 -1
  1016. data/third_party/upb/upb/reflection/file_def.c +4 -5
  1017. data/third_party/upb/upb/reflection/internal/def_builder.h +35 -10
  1018. data/third_party/upb/upb/reflection/internal/enum_value_def.h +1 -1
  1019. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  1020. data/third_party/upb/upb/reflection/message_def.c +4 -7
  1021. data/third_party/upb/upb/reflection/message_reserved_range.c +1 -1
  1022. data/third_party/upb/upb/reflection/method_def.c +1 -1
  1023. data/third_party/upb/upb/reflection/oneof_def.c +3 -3
  1024. data/third_party/upb/upb/reflection/service_def.c +2 -5
  1025. data/third_party/upb/upb/text/encode.c +16 -0
  1026. data/third_party/upb/upb/text/internal/encode.h +2 -1
  1027. data/third_party/upb/upb/wire/decode.c +104 -72
  1028. data/third_party/upb/upb/wire/encode.c +37 -13
  1029. data/third_party/upb/upb/wire/internal/decode_fast.c +2 -2
  1030. data/third_party/upb/upb/wire/internal/decode_fast.h +4 -0
  1031. metadata +43 -7
  1032. data/src/core/lib/iomgr/executor.cc +0 -441
  1033. data/src/core/lib/iomgr/executor.h +0 -119
  1034. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/polyval.cc.inc +0 -89
@@ -32,6 +32,7 @@
32
32
  #include <atomic>
33
33
  #include <memory>
34
34
  #include <optional>
35
+ #include <regex>
35
36
  #include <utility>
36
37
 
37
38
  #include "absl/base/thread_annotations.h"
@@ -40,9 +41,11 @@
40
41
  #include "absl/status/status.h"
41
42
  #include "absl/strings/string_view.h"
42
43
  #include "src/core/lib/debug/trace.h"
44
+ #include "src/core/lib/experiments/experiments.h"
43
45
  #include "src/core/lib/iomgr/closure.h"
44
46
  #include "src/core/lib/iomgr/endpoint.h"
45
47
  #include "src/core/lib/iomgr/error.h"
48
+ #include "src/core/lib/iomgr/event_engine_shims/endpoint.h"
46
49
  #include "src/core/lib/iomgr/exec_ctx.h"
47
50
  #include "src/core/lib/iomgr/iomgr_fwd.h"
48
51
  #include "src/core/lib/resource_quota/api.h"
@@ -63,206 +66,133 @@
63
66
  static void on_read(void* user_data, grpc_error_handle error);
64
67
  static void on_write(void* user_data, grpc_error_handle error);
65
68
 
69
+ namespace grpc_core {
66
70
  namespace {
67
- struct secure_endpoint : public grpc_endpoint {
68
- secure_endpoint(const grpc_endpoint_vtable* vtbl,
69
- tsi_frame_protector* protector,
70
- tsi_zero_copy_grpc_protector* zero_copy_protector,
71
- grpc_core::OrphanablePtr<grpc_endpoint> endpoint,
72
- grpc_slice* leftover_slices,
73
- const grpc_channel_args* channel_args,
74
- size_t leftover_nslices)
75
- : wrapped_ep(std::move(endpoint)),
76
- protector(protector),
77
- zero_copy_protector(zero_copy_protector) {
78
- this->vtable = vtbl;
79
- gpr_mu_init(&protector_mu);
80
- GRPC_CLOSURE_INIT(&on_read, ::on_read, this, grpc_schedule_on_exec_ctx);
81
- GRPC_CLOSURE_INIT(&on_write, ::on_write, this, grpc_schedule_on_exec_ctx);
82
- grpc_slice_buffer_init(&source_buffer);
83
- grpc_slice_buffer_init(&leftover_bytes);
84
- for (size_t i = 0; i < leftover_nslices; i++) {
85
- grpc_slice_buffer_add(&leftover_bytes,
86
- grpc_core::CSliceRef(leftover_slices[i]));
71
+ class FrameProtector : public RefCounted<FrameProtector> {
72
+ public:
73
+ FrameProtector(tsi_frame_protector* protector,
74
+ tsi_zero_copy_grpc_protector* zero_copy_protector,
75
+ grpc_slice* leftover_slices, size_t leftover_nslices,
76
+ const ChannelArgs& args)
77
+ : protector_(protector),
78
+ zero_copy_protector_(zero_copy_protector),
79
+ memory_owner_(args.GetObject<ResourceQuota>()
80
+ ->memory_quota()
81
+ ->CreateMemoryOwner()),
82
+ self_reservation_(memory_owner_.MakeReservation(sizeof(*this))) {
83
+ GRPC_TRACE_LOG(secure_endpoint, INFO)
84
+ << "FrameProtector: " << this << " protector: " << protector_
85
+ << " zero_copy_protector: " << zero_copy_protector_
86
+ << " leftover_nslices: " << leftover_nslices;
87
+ if (leftover_nslices > 0) {
88
+ leftover_bytes_ = std::make_unique<SliceBuffer>();
89
+ for (size_t i = 0; i < leftover_nslices; i++) {
90
+ leftover_bytes_->Append(Slice(CSliceRef(leftover_slices[i])));
91
+ }
87
92
  }
88
- grpc_slice_buffer_init(&output_buffer);
89
- memory_owner = grpc_core::ResourceQuotaFromChannelArgs(channel_args)
90
- ->memory_quota()
91
- ->CreateMemoryOwner();
92
- self_reservation = memory_owner.MakeReservation(sizeof(*this));
93
- if (zero_copy_protector) {
94
- read_staging_buffer = grpc_empty_slice();
95
- write_staging_buffer = grpc_empty_slice();
93
+ if (zero_copy_protector_ != nullptr) {
94
+ read_staging_buffer_ = grpc_empty_slice();
95
+ write_staging_buffer_ = grpc_empty_slice();
96
96
  } else {
97
- read_staging_buffer =
98
- memory_owner.MakeSlice(grpc_core::MemoryRequest(STAGING_BUFFER_SIZE));
99
- write_staging_buffer =
100
- memory_owner.MakeSlice(grpc_core::MemoryRequest(STAGING_BUFFER_SIZE));
97
+ read_staging_buffer_ =
98
+ memory_owner_.MakeSlice(MemoryRequest(STAGING_BUFFER_SIZE));
99
+ write_staging_buffer_ =
100
+ memory_owner_.MakeSlice(MemoryRequest(STAGING_BUFFER_SIZE));
101
101
  }
102
- has_posted_reclaimer.store(false, std::memory_order_relaxed);
103
- min_progress_size = 1;
104
- grpc_slice_buffer_init(&protector_staging_buffer);
105
- gpr_ref_init(&ref, 1);
106
102
  }
107
103
 
108
- ~secure_endpoint() {
109
- tsi_frame_protector_destroy(protector);
110
- tsi_zero_copy_grpc_protector_destroy(zero_copy_protector);
111
- grpc_slice_buffer_destroy(&source_buffer);
112
- grpc_slice_buffer_destroy(&leftover_bytes);
113
- grpc_core::CSliceUnref(read_staging_buffer);
114
- grpc_core::CSliceUnref(write_staging_buffer);
115
- grpc_slice_buffer_destroy(&output_buffer);
116
- grpc_slice_buffer_destroy(&protector_staging_buffer);
117
- gpr_mu_destroy(&protector_mu);
104
+ ~FrameProtector() override {
105
+ tsi_frame_protector_destroy(protector_);
106
+ tsi_zero_copy_grpc_protector_destroy(zero_copy_protector_);
107
+ CSliceUnref(read_staging_buffer_);
108
+ CSliceUnref(write_staging_buffer_);
118
109
  }
119
110
 
120
- grpc_core::OrphanablePtr<grpc_endpoint> wrapped_ep;
121
- struct tsi_frame_protector* protector;
122
- struct tsi_zero_copy_grpc_protector* zero_copy_protector;
123
- gpr_mu protector_mu;
124
- grpc_core::Mutex read_mu;
125
- grpc_core::Mutex write_mu;
126
- // saved upper level callbacks and user_data.
127
- grpc_closure* read_cb = nullptr;
128
- grpc_closure* write_cb = nullptr;
129
- grpc_closure on_read;
130
- grpc_closure on_write;
131
- grpc_slice_buffer* read_buffer = nullptr;
132
- grpc_slice_buffer source_buffer;
133
- // saved handshaker leftover data to unprotect.
134
- grpc_slice_buffer leftover_bytes;
135
- // buffers for read and write
136
- grpc_slice read_staging_buffer ABSL_GUARDED_BY(read_mu);
137
- grpc_slice write_staging_buffer ABSL_GUARDED_BY(write_mu);
138
- grpc_slice_buffer output_buffer;
139
- grpc_core::MemoryOwner memory_owner;
140
- grpc_core::MemoryAllocator::Reservation self_reservation;
141
- std::atomic<bool> has_posted_reclaimer;
142
- int min_progress_size;
143
- grpc_slice_buffer protector_staging_buffer;
144
- gpr_refcount ref;
145
- };
146
- } // namespace
147
-
148
- static void destroy(secure_endpoint* ep) { delete ep; }
111
+ Mutex* read_mu() ABSL_LOCK_RETURNED(read_mu_) { return &read_mu_; }
112
+ Mutex* write_mu() ABSL_LOCK_RETURNED(write_mu_) { return &write_mu_; }
149
113
 
150
- #ifndef NDEBUG
151
- #define SECURE_ENDPOINT_UNREF(ep, reason) \
152
- secure_endpoint_unref((ep), (reason), __FILE__, __LINE__)
153
- #define SECURE_ENDPOINT_REF(ep, reason) \
154
- secure_endpoint_ref((ep), (reason), __FILE__, __LINE__)
155
- static void secure_endpoint_unref(secure_endpoint* ep, const char* reason,
156
- const char* file, int line) {
157
- if (GRPC_TRACE_FLAG_ENABLED(secure_endpoint)) {
158
- gpr_atm val = gpr_atm_no_barrier_load(&ep->ref.count);
159
- VLOG(2).AtLocation(file, line) << "SECENDP unref " << ep << " : " << reason
160
- << " " << val << " -> " << val - 1;
161
- }
162
- if (gpr_unref(&ep->ref)) {
163
- destroy(ep);
164
- }
165
- }
166
-
167
- static void secure_endpoint_ref(secure_endpoint* ep, const char* reason,
168
- const char* file, int line) {
169
- if (GRPC_TRACE_FLAG_ENABLED(secure_endpoint)) {
170
- gpr_atm val = gpr_atm_no_barrier_load(&ep->ref.count);
171
- VLOG(2).AtLocation(file, line) << "SECENDP ref " << ep << " : " << reason
172
- << " " << val << " -> " << val + 1;
173
- }
174
- gpr_ref(&ep->ref);
175
- }
176
- #else
177
- #define SECURE_ENDPOINT_UNREF(ep, reason) secure_endpoint_unref((ep))
178
- #define SECURE_ENDPOINT_REF(ep, reason) secure_endpoint_ref((ep))
179
- static void secure_endpoint_unref(secure_endpoint* ep) {
180
- if (gpr_unref(&ep->ref)) {
181
- destroy(ep);
114
+ void TraceOp(absl::string_view op, grpc_slice_buffer* slices) {
115
+ if (GRPC_TRACE_FLAG_ENABLED(secure_endpoint)) {
116
+ size_t i;
117
+ if (slices->length < 64) {
118
+ for (i = 0; i < slices->count; i++) {
119
+ char* data =
120
+ grpc_dump_slice(slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
121
+ LOG(INFO) << op << " " << this << ": " << data;
122
+ gpr_free(data);
123
+ }
124
+ } else {
125
+ grpc_slice first = GRPC_SLICE_MALLOC(64);
126
+ grpc_slice_buffer_copy_first_into_buffer(slices, 64,
127
+ GRPC_SLICE_START_PTR(first));
128
+ char* data = grpc_dump_slice(first, GPR_DUMP_HEX | GPR_DUMP_ASCII);
129
+ LOG(INFO) << op << " first:" << this << ": " << data;
130
+ gpr_free(data);
131
+ CSliceUnref(first);
132
+ }
133
+ }
182
134
  }
183
- }
184
135
 
185
- static void secure_endpoint_ref(secure_endpoint* ep) { gpr_ref(&ep->ref); }
186
- #endif
136
+ void MaybePostReclaimer() {
137
+ if (!has_posted_reclaimer_.exchange(true, std::memory_order_relaxed)) {
138
+ memory_owner_.PostReclaimer(
139
+ ReclamationPass::kBenign,
140
+ [self = Ref()](std::optional<ReclamationSweep> sweep) {
141
+ if (sweep.has_value()) {
142
+ GRPC_TRACE_LOG(resource_quota, INFO)
143
+ << "secure endpoint: benign reclamation to free memory";
144
+ grpc_slice temp_read_slice;
145
+ grpc_slice temp_write_slice;
187
146
 
188
- static void maybe_post_reclaimer(secure_endpoint* ep) {
189
- if (!ep->has_posted_reclaimer) {
190
- SECURE_ENDPOINT_REF(ep, "benign_reclaimer");
191
- ep->has_posted_reclaimer.exchange(true, std::memory_order_relaxed);
192
- ep->memory_owner.PostReclaimer(
193
- grpc_core::ReclamationPass::kBenign,
194
- [ep](std::optional<grpc_core::ReclamationSweep> sweep) {
195
- if (sweep.has_value()) {
196
- GRPC_TRACE_LOG(resource_quota, INFO)
197
- << "secure endpoint: benign reclamation to free memory";
198
- grpc_slice temp_read_slice;
199
- grpc_slice temp_write_slice;
200
-
201
- ep->read_mu.Lock();
202
- temp_read_slice = ep->read_staging_buffer;
203
- ep->read_staging_buffer = grpc_empty_slice();
204
- ep->read_mu.Unlock();
205
-
206
- ep->write_mu.Lock();
207
- temp_write_slice = ep->write_staging_buffer;
208
- ep->write_staging_buffer = grpc_empty_slice();
209
- ep->write_mu.Unlock();
210
-
211
- grpc_core::CSliceUnref(temp_read_slice);
212
- grpc_core::CSliceUnref(temp_write_slice);
213
- ep->has_posted_reclaimer.exchange(false, std::memory_order_relaxed);
214
- }
215
- SECURE_ENDPOINT_UNREF(ep, "benign_reclaimer");
216
- });
217
- }
218
- }
147
+ self->read_mu_.Lock();
148
+ temp_read_slice =
149
+ std::exchange(self->read_staging_buffer_, grpc_empty_slice());
150
+ self->read_mu_.Unlock();
219
151
 
220
- static void flush_read_staging_buffer(secure_endpoint* ep, uint8_t** cur,
221
- uint8_t** end)
222
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(ep->read_mu) {
223
- grpc_slice_buffer_add_indexed(ep->read_buffer, ep->read_staging_buffer);
224
- ep->read_staging_buffer =
225
- ep->memory_owner.MakeSlice(grpc_core::MemoryRequest(STAGING_BUFFER_SIZE));
226
- *cur = GRPC_SLICE_START_PTR(ep->read_staging_buffer);
227
- *end = GRPC_SLICE_END_PTR(ep->read_staging_buffer);
228
- }
152
+ self->write_mu_.Lock();
153
+ temp_write_slice = std::exchange(self->write_staging_buffer_,
154
+ grpc_empty_slice());
155
+ self->write_mu_.Unlock();
229
156
 
230
- static void call_read_cb(secure_endpoint* ep, grpc_error_handle error) {
231
- if (GRPC_TRACE_FLAG_ENABLED(secure_endpoint) && ABSL_VLOG_IS_ON(2)) {
232
- size_t i;
233
- for (i = 0; i < ep->read_buffer->count; i++) {
234
- char* data = grpc_dump_slice(ep->read_buffer->slices[i],
235
- GPR_DUMP_HEX | GPR_DUMP_ASCII);
236
- VLOG(2) << "READ " << ep << ": " << data;
237
- gpr_free(data);
157
+ CSliceUnref(temp_read_slice);
158
+ CSliceUnref(temp_write_slice);
159
+ self->has_posted_reclaimer_.store(false,
160
+ std::memory_order_relaxed);
161
+ }
162
+ });
238
163
  }
239
164
  }
240
- ep->read_buffer = nullptr;
241
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, ep->read_cb, error);
242
- SECURE_ENDPOINT_UNREF(ep, "read");
243
- }
244
165
 
245
- static void on_read(void* user_data, grpc_error_handle error) {
246
- unsigned i;
247
- uint8_t keep_looping = 0;
248
- tsi_result result = TSI_OK;
249
- secure_endpoint* ep = static_cast<secure_endpoint*>(user_data);
166
+ void FlushReadStagingBuffer(uint8_t** cur, uint8_t** end)
167
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(read_mu_) {
168
+ grpc_slice_buffer_add_indexed(read_buffer_, read_staging_buffer_);
169
+ read_staging_buffer_ =
170
+ memory_owner_.MakeSlice(MemoryRequest(STAGING_BUFFER_SIZE));
171
+ *cur = GRPC_SLICE_START_PTR(read_staging_buffer_);
172
+ *end = GRPC_SLICE_END_PTR(read_staging_buffer_);
173
+ }
250
174
 
251
- {
252
- grpc_core::MutexLock l(&ep->read_mu);
175
+ void FinishRead(bool ok) {
176
+ TraceOp("FinishRead", read_buffer_);
177
+ // TODO(yangg) experiment with moving this block after read_cb to see if it
178
+ // helps latency
179
+ source_buffer_.Clear();
180
+ if (!ok) grpc_slice_buffer_reset_and_unref(read_buffer_);
181
+ read_buffer_ = nullptr;
182
+ }
253
183
 
254
- // If we were shut down after this callback was scheduled with OK
255
- // status but before it was invoked, we need to treat that as an error.
256
- if (ep->wrapped_ep == nullptr && error.ok()) {
257
- error = absl::CancelledError("secure endpoint shutdown");
258
- }
184
+ absl::Status Unprotect(absl::Status read_status)
185
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(read_mu_) {
186
+ GRPC_LATENT_SEE_INNER_SCOPE("unprotect");
187
+ bool keep_looping = false;
188
+ tsi_result result = TSI_OK;
259
189
 
260
- uint8_t* cur = GRPC_SLICE_START_PTR(ep->read_staging_buffer);
261
- uint8_t* end = GRPC_SLICE_END_PTR(ep->read_staging_buffer);
190
+ uint8_t* cur = GRPC_SLICE_START_PTR(read_staging_buffer_);
191
+ uint8_t* end = GRPC_SLICE_END_PTR(read_staging_buffer_);
262
192
 
263
- if (!error.ok()) {
264
- grpc_slice_buffer_reset_and_unref(ep->read_buffer);
265
- } else if (ep->zero_copy_protector != nullptr) {
193
+ if (!read_status.ok()) {
194
+ grpc_slice_buffer_reset_and_unref(read_buffer_);
195
+ } else if (zero_copy_protector_ != nullptr) {
266
196
  // Use zero-copy grpc protector to unprotect.
267
197
  int min_progress_size = 1;
268
198
  // Get the size of the last frame which is not yet fully decrypted.
@@ -270,18 +200,18 @@ static void on_read(void* user_data, grpc_error_handle error) {
270
200
  // passed to the TCP layer to indicate the minimum number of
271
201
  // bytes that need to be read to make meaningful progress. This would
272
202
  // avoid reading of small slices from the network.
273
- // TODO(vigneshbabu): Set min_progress_size in the regular (non-zero-copy)
274
- // frame protector code path as well.
203
+ // TODO(vigneshbabu): Set min_progress_size in the regular
204
+ // (non-zero-copy) frame protector code path as well.
275
205
  result = tsi_zero_copy_grpc_protector_unprotect(
276
- ep->zero_copy_protector, &ep->source_buffer, ep->read_buffer,
206
+ zero_copy_protector_, source_buffer_.c_slice_buffer(), read_buffer_,
277
207
  &min_progress_size);
278
208
  min_progress_size = std::max(1, min_progress_size);
279
- ep->min_progress_size = result != TSI_OK ? 1 : min_progress_size;
209
+ min_progress_size_ = result != TSI_OK ? 1 : min_progress_size;
280
210
  } else {
281
211
  // Use frame protector to unprotect.
282
212
  // TODO(yangg) check error, maybe bail out early
283
- for (i = 0; i < ep->source_buffer.count; i++) {
284
- grpc_slice encrypted = ep->source_buffer.slices[i];
213
+ for (size_t i = 0; i < source_buffer_.Count(); i++) {
214
+ grpc_slice encrypted = source_buffer_.c_slice_buffer()->slices[i];
285
215
  uint8_t* message_bytes = GRPC_SLICE_START_PTR(encrypted);
286
216
  size_t message_size = GRPC_SLICE_LENGTH(encrypted);
287
217
 
@@ -289,11 +219,17 @@ static void on_read(void* user_data, grpc_error_handle error) {
289
219
  size_t unprotected_buffer_size_written =
290
220
  static_cast<size_t>(end - cur);
291
221
  size_t processed_message_size = message_size;
292
- gpr_mu_lock(&ep->protector_mu);
293
- result = tsi_frame_protector_unprotect(
294
- ep->protector, message_bytes, &processed_message_size, cur,
295
- &unprotected_buffer_size_written);
296
- gpr_mu_unlock(&ep->protector_mu);
222
+ if (IsTsiFrameProtectorWithoutLocksEnabled()) {
223
+ result = tsi_frame_protector_unprotect(
224
+ protector_, message_bytes, &processed_message_size, cur,
225
+ &unprotected_buffer_size_written);
226
+ } else {
227
+ protector_mu_.Lock();
228
+ result = tsi_frame_protector_unprotect(
229
+ protector_, message_bytes, &processed_message_size, cur,
230
+ &unprotected_buffer_size_written);
231
+ protector_mu_.Unlock();
232
+ }
297
233
  if (result != TSI_OK) {
298
234
  LOG(ERROR) << "Decryption error: " << tsi_result_to_string(result);
299
235
  break;
@@ -303,152 +239,128 @@ static void on_read(void* user_data, grpc_error_handle error) {
303
239
  cur += unprotected_buffer_size_written;
304
240
 
305
241
  if (cur == end) {
306
- flush_read_staging_buffer(ep, &cur, &end);
242
+ FlushReadStagingBuffer(&cur, &end);
307
243
  // Force to enter the loop again to extract buffered bytes in
308
- // protector. The bytes could be buffered because of running out of
309
- // staging_buffer. If this happens at the end of all slices, doing
310
- // another unprotect avoids leaving data in the protector.
311
- keep_looping = 1;
244
+ // protector. The bytes could be buffered because of running out
245
+ // of staging_buffer. If this happens at the end of all slices,
246
+ // doing another unprotect avoids leaving data in the protector.
247
+ keep_looping = true;
312
248
  } else if (unprotected_buffer_size_written > 0) {
313
- keep_looping = 1;
249
+ keep_looping = true;
314
250
  } else {
315
- keep_looping = 0;
251
+ keep_looping = false;
316
252
  }
317
253
  }
318
254
  if (result != TSI_OK) break;
319
255
  }
320
256
 
321
- if (cur != GRPC_SLICE_START_PTR(ep->read_staging_buffer)) {
257
+ if (cur != GRPC_SLICE_START_PTR(read_staging_buffer_)) {
322
258
  grpc_slice_buffer_add(
323
- ep->read_buffer,
259
+ read_buffer_,
324
260
  grpc_slice_split_head(
325
- &ep->read_staging_buffer,
261
+ &read_staging_buffer_,
326
262
  static_cast<size_t>(
327
- cur - GRPC_SLICE_START_PTR(ep->read_staging_buffer))));
263
+ cur - GRPC_SLICE_START_PTR(read_staging_buffer_))));
328
264
  }
329
265
  }
330
- }
331
266
 
332
- if (!error.ok()) {
333
- call_read_cb(
334
- ep, GRPC_ERROR_CREATE_REFERENCING("Secure read failed", &error, 1));
335
- return;
336
- }
267
+ if (read_status.ok() && result != TSI_OK) {
268
+ read_status = GRPC_ERROR_CREATE(
269
+ absl::StrCat("Unwrap failed (", tsi_result_to_string(result), ")"));
270
+ }
337
271
 
338
- // TODO(yangg) experiment with moving this block after read_cb to see if it
339
- // helps latency
340
- grpc_slice_buffer_reset_and_unref(&ep->source_buffer);
272
+ GRPC_TRACE_LOG(secure_endpoint, INFO)
273
+ << "Unprotect: " << this << " read_status: " << read_status;
341
274
 
342
- if (result != TSI_OK) {
343
- grpc_slice_buffer_reset_and_unref(ep->read_buffer);
344
- call_read_cb(
345
- ep, GRPC_ERROR_CREATE(absl::StrCat("Unwrap failed (",
346
- tsi_result_to_string(result), ")")));
347
- return;
275
+ return read_status;
348
276
  }
349
277
 
350
- call_read_cb(ep, absl::OkStatus());
351
- }
352
-
353
- static void endpoint_read(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
354
- grpc_closure* cb, bool urgent,
355
- int /*min_progress_size*/) {
356
- secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
357
- ep->read_cb = cb;
358
- ep->read_buffer = slices;
359
- grpc_slice_buffer_reset_and_unref(ep->read_buffer);
278
+ void BeginRead(grpc_slice_buffer* slices) {
279
+ read_buffer_ = slices;
280
+ grpc_slice_buffer_reset_and_unref(read_buffer_);
281
+ }
360
282
 
361
- SECURE_ENDPOINT_REF(ep, "read");
362
- if (ep->leftover_bytes.count) {
363
- grpc_slice_buffer_swap(&ep->leftover_bytes, &ep->source_buffer);
364
- CHECK_EQ(ep->leftover_bytes.count, 0u);
365
- on_read(ep, absl::OkStatus());
366
- return;
283
+ bool MaybeCompleteReadImmediately() {
284
+ GRPC_TRACE_LOG(secure_endpoint, INFO)
285
+ << "MaybeCompleteReadImmediately: " << this
286
+ << " leftover_bytes_: " << leftover_bytes_.get();
287
+ if (leftover_bytes_ != nullptr) {
288
+ grpc_slice_buffer_swap(leftover_bytes_->c_slice_buffer(),
289
+ source_buffer_.c_slice_buffer());
290
+ leftover_bytes_.reset();
291
+ return true;
292
+ }
293
+ return false;
367
294
  }
368
295
 
369
- grpc_endpoint_read(ep->wrapped_ep.get(), &ep->source_buffer, &ep->on_read,
370
- urgent, /*min_progress_size=*/ep->min_progress_size);
371
- }
296
+ grpc_event_engine::experimental::SliceBuffer* source_buffer() {
297
+ return &source_buffer_;
298
+ }
372
299
 
373
- static void flush_write_staging_buffer(secure_endpoint* ep, uint8_t** cur,
374
- uint8_t** end)
375
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(ep->write_mu) {
376
- grpc_slice_buffer_add_indexed(&ep->output_buffer, ep->write_staging_buffer);
377
- ep->write_staging_buffer =
378
- ep->memory_owner.MakeSlice(grpc_core::MemoryRequest(STAGING_BUFFER_SIZE));
379
- *cur = GRPC_SLICE_START_PTR(ep->write_staging_buffer);
380
- *end = GRPC_SLICE_END_PTR(ep->write_staging_buffer);
381
- maybe_post_reclaimer(ep);
382
- }
300
+ int min_progress_size() const { return min_progress_size_; }
383
301
 
384
- static void on_write(void* user_data, grpc_error_handle error) {
385
- secure_endpoint* ep = static_cast<secure_endpoint*>(user_data);
386
- grpc_closure* cb = ep->write_cb;
387
- ep->write_cb = nullptr;
388
- SECURE_ENDPOINT_UNREF(ep, "write");
389
- grpc_core::EnsureRunInExecCtx([cb, error = std::move(error)]() {
390
- grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
391
- });
392
- }
302
+ void FlushWriteStagingBuffer(uint8_t** cur, uint8_t** end)
303
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(write_mu_) {
304
+ output_buffer_.AppendIndexed(
305
+ grpc_event_engine::experimental::Slice(write_staging_buffer_));
306
+ write_staging_buffer_ =
307
+ memory_owner_.MakeSlice(MemoryRequest(STAGING_BUFFER_SIZE));
308
+ *cur = GRPC_SLICE_START_PTR(write_staging_buffer_);
309
+ *end = GRPC_SLICE_END_PTR(write_staging_buffer_);
310
+ MaybePostReclaimer();
311
+ }
393
312
 
394
- static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
395
- grpc_closure* cb, void* arg, int max_frame_size) {
396
- GRPC_LATENT_SEE_INNER_SCOPE("secure_endpoint write");
397
- unsigned i;
398
- tsi_result result = TSI_OK;
399
- secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
313
+ tsi_result Protect(grpc_slice_buffer* slices, int max_frame_size)
314
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(write_mu_) {
315
+ GRPC_LATENT_SEE_INNER_SCOPE("protect");
316
+ uint8_t* cur = GRPC_SLICE_START_PTR(write_staging_buffer_);
317
+ uint8_t* end = GRPC_SLICE_END_PTR(write_staging_buffer_);
400
318
 
401
- {
402
- grpc_core::MutexLock l(&ep->write_mu);
403
- uint8_t* cur = GRPC_SLICE_START_PTR(ep->write_staging_buffer);
404
- uint8_t* end = GRPC_SLICE_END_PTR(ep->write_staging_buffer);
319
+ output_buffer_.Clear();
405
320
 
406
- grpc_slice_buffer_reset_and_unref(&ep->output_buffer);
321
+ TraceOp("Protect", slices);
407
322
 
408
- if (GRPC_TRACE_FLAG_ENABLED(secure_endpoint) && ABSL_VLOG_IS_ON(2)) {
409
- for (i = 0; i < slices->count; i++) {
410
- char* data =
411
- grpc_dump_slice(slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
412
- VLOG(2) << "WRITE " << ep << ": " << data;
413
- gpr_free(data);
414
- }
415
- }
416
-
417
- if (ep->zero_copy_protector != nullptr) {
323
+ tsi_result result = TSI_OK;
324
+ if (zero_copy_protector_ != nullptr) {
418
325
  // Use zero-copy grpc protector to protect.
419
- result = TSI_OK;
420
326
  // Break the input slices into chunks of size = max_frame_size and call
421
327
  // tsi_zero_copy_grpc_protector_protect on each chunk. This ensures that
422
328
  // the protector cannot create frames larger than the specified
423
329
  // max_frame_size.
424
330
  while (slices->length > static_cast<size_t>(max_frame_size) &&
425
331
  result == TSI_OK) {
426
- grpc_slice_buffer_move_first(slices,
427
- static_cast<size_t>(max_frame_size),
428
- &ep->protector_staging_buffer);
332
+ grpc_slice_buffer_move_first(
333
+ slices, static_cast<size_t>(max_frame_size),
334
+ protector_staging_buffer_.c_slice_buffer());
429
335
  result = tsi_zero_copy_grpc_protector_protect(
430
- ep->zero_copy_protector, &ep->protector_staging_buffer,
431
- &ep->output_buffer);
336
+ zero_copy_protector_, protector_staging_buffer_.c_slice_buffer(),
337
+ output_buffer_.c_slice_buffer());
432
338
  }
433
339
  if (result == TSI_OK && slices->length > 0) {
434
340
  result = tsi_zero_copy_grpc_protector_protect(
435
- ep->zero_copy_protector, slices, &ep->output_buffer);
341
+ zero_copy_protector_, slices, output_buffer_.c_slice_buffer());
436
342
  }
437
- grpc_slice_buffer_reset_and_unref(&ep->protector_staging_buffer);
343
+ protector_staging_buffer_.Clear();
438
344
  } else {
439
345
  // Use frame protector to protect.
440
- for (i = 0; i < slices->count; i++) {
346
+ for (size_t i = 0; i < slices->count; i++) {
441
347
  grpc_slice plain = slices->slices[i];
442
348
  uint8_t* message_bytes = GRPC_SLICE_START_PTR(plain);
443
349
  size_t message_size = GRPC_SLICE_LENGTH(plain);
444
350
  while (message_size > 0) {
445
351
  size_t protected_buffer_size_to_send = static_cast<size_t>(end - cur);
446
352
  size_t processed_message_size = message_size;
447
- gpr_mu_lock(&ep->protector_mu);
448
- result = tsi_frame_protector_protect(ep->protector, message_bytes,
449
- &processed_message_size, cur,
450
- &protected_buffer_size_to_send);
451
- gpr_mu_unlock(&ep->protector_mu);
353
+ if (IsTsiFrameProtectorWithoutLocksEnabled()) {
354
+ result = tsi_frame_protector_protect(
355
+ protector_, message_bytes, &processed_message_size, cur,
356
+ &protected_buffer_size_to_send);
357
+ } else {
358
+ protector_mu_.Lock();
359
+ result = tsi_frame_protector_protect(
360
+ protector_, message_bytes, &processed_message_size, cur,
361
+ &protected_buffer_size_to_send);
362
+ protector_mu_.Unlock();
363
+ }
452
364
  if (result != TSI_OK) {
453
365
  LOG(ERROR) << "Encryption error: " << tsi_result_to_string(result);
454
366
  break;
@@ -458,7 +370,7 @@ static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
458
370
  cur += protected_buffer_size_to_send;
459
371
 
460
372
  if (cur == end) {
461
- flush_write_staging_buffer(ep, &cur, &end);
373
+ FlushWriteStagingBuffer(&cur, &end);
462
374
  }
463
375
  }
464
376
  if (result != TSI_OK) break;
@@ -467,32 +379,205 @@ static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
467
379
  size_t still_pending_size;
468
380
  do {
469
381
  size_t protected_buffer_size_to_send = static_cast<size_t>(end - cur);
470
- gpr_mu_lock(&ep->protector_mu);
471
- result = tsi_frame_protector_protect_flush(
472
- ep->protector, cur, &protected_buffer_size_to_send,
473
- &still_pending_size);
474
- gpr_mu_unlock(&ep->protector_mu);
382
+ if (IsTsiFrameProtectorWithoutLocksEnabled()) {
383
+ result = tsi_frame_protector_protect_flush(
384
+ protector_, cur, &protected_buffer_size_to_send,
385
+ &still_pending_size);
386
+ } else {
387
+ protector_mu_.Lock();
388
+ result = tsi_frame_protector_protect_flush(
389
+ protector_, cur, &protected_buffer_size_to_send,
390
+ &still_pending_size);
391
+ protector_mu_.Unlock();
392
+ }
475
393
  if (result != TSI_OK) break;
476
394
  cur += protected_buffer_size_to_send;
477
395
  if (cur == end) {
478
- flush_write_staging_buffer(ep, &cur, &end);
396
+ FlushWriteStagingBuffer(&cur, &end);
479
397
  }
480
398
  } while (still_pending_size > 0);
481
- if (cur != GRPC_SLICE_START_PTR(ep->write_staging_buffer)) {
482
- grpc_slice_buffer_add(
483
- &ep->output_buffer,
484
- grpc_slice_split_head(
485
- &ep->write_staging_buffer,
399
+ if (cur != GRPC_SLICE_START_PTR(write_staging_buffer_)) {
400
+ output_buffer_.Append(
401
+ grpc_event_engine::experimental::Slice(grpc_slice_split_head(
402
+ &write_staging_buffer_,
486
403
  static_cast<size_t>(
487
- cur - GRPC_SLICE_START_PTR(ep->write_staging_buffer))));
404
+ cur - GRPC_SLICE_START_PTR(write_staging_buffer_)))));
488
405
  }
489
406
  }
490
407
  }
408
+ // TODO(yangg) do different things according to the error type?
409
+ if (result != TSI_OK) output_buffer_.Clear();
410
+ return result;
411
+ }
412
+
413
+ grpc_event_engine::experimental::SliceBuffer* output_buffer() {
414
+ return &output_buffer_;
415
+ }
416
+
417
+ void Shutdown() { memory_owner_.Reset(); }
418
+
419
+ private:
420
+ struct tsi_frame_protector* const protector_;
421
+ struct tsi_zero_copy_grpc_protector* const zero_copy_protector_;
422
+ Mutex mu_;
423
+ Mutex read_mu_;
424
+ Mutex write_mu_;
425
+ Mutex protector_mu_;
426
+ grpc_slice_buffer* read_buffer_ = nullptr;
427
+ grpc_event_engine::experimental::SliceBuffer source_buffer_;
428
+ // saved handshaker leftover data to unprotect.
429
+ std::unique_ptr<SliceBuffer> leftover_bytes_;
430
+ // buffers for read and write
431
+ grpc_slice read_staging_buffer_ ABSL_GUARDED_BY(read_mu_);
432
+ grpc_slice write_staging_buffer_ ABSL_GUARDED_BY(write_mu_);
433
+ grpc_event_engine::experimental::SliceBuffer output_buffer_;
434
+ MemoryOwner memory_owner_;
435
+ MemoryAllocator::Reservation self_reservation_;
436
+ std::atomic<bool> has_posted_reclaimer_{false};
437
+ int min_progress_size_ = 1;
438
+ SliceBuffer protector_staging_buffer_;
439
+ };
440
+ } // namespace
441
+ } // namespace grpc_core
442
+
443
+ namespace {
444
+ struct secure_endpoint : public grpc_endpoint {
445
+ secure_endpoint(const grpc_endpoint_vtable* vtbl,
446
+ tsi_frame_protector* protector,
447
+ tsi_zero_copy_grpc_protector* zero_copy_protector,
448
+ grpc_core::OrphanablePtr<grpc_endpoint> endpoint,
449
+ grpc_slice* leftover_slices, size_t leftover_nslices,
450
+ const grpc_core::ChannelArgs& args)
451
+ : wrapped_ep(std::move(endpoint)),
452
+ frame_protector(protector, zero_copy_protector, leftover_slices,
453
+ leftover_nslices, args) {
454
+ this->vtable = vtbl;
455
+ GRPC_CLOSURE_INIT(&on_read, ::on_read, this, grpc_schedule_on_exec_ctx);
456
+ GRPC_CLOSURE_INIT(&on_write, ::on_write, this, grpc_schedule_on_exec_ctx);
457
+ gpr_ref_init(&ref, 1);
458
+ }
459
+
460
+ ~secure_endpoint() {}
461
+
462
+ grpc_core::OrphanablePtr<grpc_endpoint> wrapped_ep;
463
+ grpc_core::FrameProtector frame_protector;
464
+ // saved upper level callbacks and user_data.
465
+ grpc_closure* read_cb = nullptr;
466
+ grpc_closure* write_cb = nullptr;
467
+ grpc_closure on_read;
468
+ grpc_closure on_write;
469
+ gpr_refcount ref;
470
+ };
471
+ } // namespace
472
+
473
+ static void destroy(secure_endpoint* ep) { delete ep; }
474
+
475
+ #ifndef NDEBUG
476
+ #define SECURE_ENDPOINT_UNREF(ep, reason) \
477
+ secure_endpoint_unref((ep), (reason), __FILE__, __LINE__)
478
+ #define SECURE_ENDPOINT_REF(ep, reason) \
479
+ secure_endpoint_ref((ep), (reason), __FILE__, __LINE__)
480
+ static void secure_endpoint_unref(secure_endpoint* ep, const char* reason,
481
+ const char* file, int line) {
482
+ if (GRPC_TRACE_FLAG_ENABLED(secure_endpoint)) {
483
+ gpr_atm val = gpr_atm_no_barrier_load(&ep->ref.count);
484
+ VLOG(2).AtLocation(file, line) << "SECENDP unref " << ep << " : " << reason
485
+ << " " << val << " -> " << val - 1;
486
+ }
487
+ if (gpr_unref(&ep->ref)) {
488
+ destroy(ep);
489
+ }
490
+ }
491
+
492
+ static void secure_endpoint_ref(secure_endpoint* ep, const char* reason,
493
+ const char* file, int line) {
494
+ if (GRPC_TRACE_FLAG_ENABLED(secure_endpoint)) {
495
+ gpr_atm val = gpr_atm_no_barrier_load(&ep->ref.count);
496
+ VLOG(2).AtLocation(file, line) << "SECENDP ref " << ep << " : " << reason
497
+ << " " << val << " -> " << val + 1;
498
+ }
499
+ gpr_ref(&ep->ref);
500
+ }
501
+ #else
502
+ #define SECURE_ENDPOINT_UNREF(ep, reason) secure_endpoint_unref((ep))
503
+ #define SECURE_ENDPOINT_REF(ep, reason) secure_endpoint_ref((ep))
504
+ static void secure_endpoint_unref(secure_endpoint* ep) {
505
+ if (gpr_unref(&ep->ref)) {
506
+ destroy(ep);
507
+ }
508
+ }
509
+
510
+ static void secure_endpoint_ref(secure_endpoint* ep) { gpr_ref(&ep->ref); }
511
+ #endif
512
+
513
+ static void call_read_cb(secure_endpoint* ep, grpc_error_handle error) {
514
+ ep->frame_protector.FinishRead(error.ok());
515
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, ep->read_cb, error);
516
+ SECURE_ENDPOINT_UNREF(ep, "read");
517
+ }
518
+
519
+ static void on_read(void* user_data, grpc_error_handle error) {
520
+ secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(user_data);
521
+
522
+ {
523
+ grpc_core::MutexLock lock(ep->frame_protector.read_mu());
524
+ // If we were shut down after this callback was scheduled with OK
525
+ // status but before it was invoked, we need to treat that as an error.
526
+ if (ep->wrapped_ep == nullptr && error.ok()) {
527
+ error = absl::CancelledError("secure endpoint shutdown");
528
+ }
529
+ error = ep->frame_protector.Unprotect(std::move(error));
530
+ }
531
+
532
+ if (!error.ok()) {
533
+ call_read_cb(
534
+ ep, GRPC_ERROR_CREATE_REFERENCING("Secure read failed", &error, 1));
535
+ return;
536
+ }
537
+
538
+ call_read_cb(ep, absl::OkStatus());
539
+ }
540
+
541
+ static void endpoint_read(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
542
+ grpc_closure* cb, bool urgent,
543
+ int /*min_progress_size*/) {
544
+ secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
545
+ ep->read_cb = cb;
546
+ ep->frame_protector.BeginRead(slices);
547
+
548
+ SECURE_ENDPOINT_REF(ep, "read");
549
+ if (ep->frame_protector.MaybeCompleteReadImmediately()) {
550
+ on_read(ep, absl::OkStatus());
551
+ return;
552
+ }
553
+
554
+ grpc_endpoint_read(ep->wrapped_ep.get(),
555
+ ep->frame_protector.source_buffer()->c_slice_buffer(),
556
+ &ep->on_read, urgent,
557
+ ep->frame_protector.min_progress_size());
558
+ }
559
+
560
+ static void on_write(void* user_data, grpc_error_handle error) {
561
+ secure_endpoint* ep = static_cast<secure_endpoint*>(user_data);
562
+ grpc_closure* cb = ep->write_cb;
563
+ ep->write_cb = nullptr;
564
+ SECURE_ENDPOINT_UNREF(ep, "write");
565
+ grpc_core::EnsureRunInExecCtx([cb, error = std::move(error)]() {
566
+ grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
567
+ });
568
+ }
569
+
570
+ static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
571
+ grpc_closure* cb, void* arg, int max_frame_size) {
572
+ GRPC_LATENT_SEE_INNER_SCOPE("secure_endpoint write");
573
+ secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
574
+ tsi_result result;
575
+ {
576
+ grpc_core::MutexLock lock(ep->frame_protector.write_mu());
577
+ result = ep->frame_protector.Protect(slices, max_frame_size);
491
578
  }
492
579
 
493
580
  if (result != TSI_OK) {
494
- // TODO(yangg) do different things according to the error type?
495
- grpc_slice_buffer_reset_and_unref(&ep->output_buffer);
496
581
  grpc_core::ExecCtx::Run(
497
582
  DEBUG_LOCATION, cb,
498
583
  GRPC_ERROR_CREATE(
@@ -504,16 +589,17 @@ static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
504
589
  // output_buffer at any time until the write completes.
505
590
  SECURE_ENDPOINT_REF(ep, "write");
506
591
  ep->write_cb = cb;
507
- grpc_endpoint_write(ep->wrapped_ep.get(), &ep->output_buffer, &ep->on_write,
508
- arg, max_frame_size);
592
+ grpc_endpoint_write(ep->wrapped_ep.get(),
593
+ ep->frame_protector.output_buffer()->c_slice_buffer(),
594
+ &ep->on_write, arg, max_frame_size);
509
595
  }
510
596
 
511
597
  static void endpoint_destroy(grpc_endpoint* secure_ep) {
512
598
  secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
513
- ep->read_mu.Lock();
599
+ ep->frame_protector.read_mu()->Lock();
514
600
  ep->wrapped_ep.reset();
515
- ep->memory_owner.Reset();
516
- ep->read_mu.Unlock();
601
+ ep->frame_protector.Shutdown();
602
+ ep->frame_protector.read_mu()->Unlock();
517
603
  SECURE_ENDPOINT_UNREF(ep, "destroy");
518
604
  }
519
605
 
@@ -566,13 +652,384 @@ static const grpc_endpoint_vtable vtable = {endpoint_read,
566
652
  endpoint_get_fd,
567
653
  endpoint_can_track_err};
568
654
 
655
+ namespace grpc_event_engine::experimental {
656
+ namespace {
657
+
658
+ class SecureEndpoint final : public EventEngine::Endpoint {
659
+ public:
660
+ SecureEndpoint(
661
+ std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
662
+ wrapped_ep,
663
+ struct tsi_frame_protector* protector,
664
+ struct tsi_zero_copy_grpc_protector* zero_copy_protector,
665
+ grpc_slice* leftover_slices, size_t leftover_nslices,
666
+ const grpc_core::ChannelArgs& channel_args)
667
+ : impl_(grpc_core::MakeRefCounted<Impl>(
668
+ std::move(wrapped_ep), protector, zero_copy_protector,
669
+ leftover_slices, leftover_nslices, channel_args)) {}
670
+
671
+ ~SecureEndpoint() override { impl_->Shutdown(); }
672
+
673
+ bool Read(absl::AnyInvocable<void(absl::Status)> on_read, SliceBuffer* buffer,
674
+ ReadArgs in_args) override {
675
+ return impl_->Read(std::move(on_read), buffer, std::move(in_args));
676
+ }
677
+
678
+ bool Write(absl::AnyInvocable<void(absl::Status)> on_writable,
679
+ SliceBuffer* data, WriteArgs args) override {
680
+ return impl_->Write(std::move(on_writable), data, std::move(args));
681
+ }
682
+
683
+ const EventEngine::ResolvedAddress& GetPeerAddress() const override {
684
+ return impl_->GetPeerAddress();
685
+ }
686
+
687
+ const EventEngine::ResolvedAddress& GetLocalAddress() const override {
688
+ return impl_->GetLocalAddress();
689
+ }
690
+
691
+ void* QueryExtension(absl::string_view id) override {
692
+ return impl_->QueryExtension(id);
693
+ }
694
+
695
+ std::vector<size_t> AllWriteMetrics() override {
696
+ return impl_->AllWriteMetrics();
697
+ }
698
+
699
+ std::optional<absl::string_view> GetMetricName(size_t key) override {
700
+ return impl_->GetMetricName(key);
701
+ }
702
+
703
+ std::optional<size_t> GetMetricKey(absl::string_view name) override {
704
+ return impl_->GetMetricKey(name);
705
+ }
706
+
707
+ private:
708
+ class Impl : public grpc_core::RefCounted<Impl> {
709
+ public:
710
+ Impl(std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
711
+ wrapped_ep,
712
+ struct tsi_frame_protector* protector,
713
+ struct tsi_zero_copy_grpc_protector* zero_copy_protector,
714
+ grpc_slice* leftover_slices, size_t leftover_nslices,
715
+ const grpc_core::ChannelArgs& channel_args)
716
+ : frame_protector_(protector, zero_copy_protector, leftover_slices,
717
+ leftover_nslices, channel_args),
718
+ wrapped_ep_(std::move(wrapped_ep)),
719
+ event_engine_(channel_args.GetObjectRef<
720
+ grpc_event_engine::experimental::EventEngine>()),
721
+ large_read_threshold_(std::max(
722
+ 1, channel_args.GetInt(GRPC_ARG_DECRYPTION_OFFLOAD_THRESHOLD)
723
+ .value_or(32 * 1024))),
724
+ large_write_threshold_(std::max(
725
+ 1, channel_args.GetInt(GRPC_ARG_ENCRYPTION_OFFLOAD_THRESHOLD)
726
+ .value_or(32 * 1024))),
727
+ max_buffered_writes_(std::max(
728
+ 0, channel_args
729
+ .GetInt(GRPC_ARG_ENCRYPTION_OFFLOAD_MAX_BUFFERED_WRITES)
730
+ .value_or(1024 * 1024))) {}
731
+
732
+ bool Read(absl::AnyInvocable<void(absl::Status)> on_read,
733
+ SliceBuffer* buffer, ReadArgs args) {
734
+ on_read_ = std::move(on_read);
735
+ frame_protector_.BeginRead(buffer->c_slice_buffer());
736
+ if (frame_protector_.MaybeCompleteReadImmediately()) {
737
+ return MaybeFinishReadImmediately();
738
+ }
739
+ args.set_read_hint_bytes(frame_protector_.min_progress_size());
740
+ bool read_completed_immediately = wrapped_ep_->Read(
741
+ [impl = Ref()](absl::Status status) mutable {
742
+ FinishAsyncRead(std::move(impl), std::move(status));
743
+ },
744
+ frame_protector_.source_buffer(), std::move(args));
745
+ if (read_completed_immediately) return MaybeFinishReadImmediately();
746
+ return false;
747
+ }
748
+
749
+ bool Write(absl::AnyInvocable<void(absl::Status)> on_writable,
750
+ SliceBuffer* data, WriteArgs args) {
751
+ GRPC_LATENT_SEE_INNER_SCOPE("secure_endpoint write");
752
+ tsi_result result;
753
+ frame_protector_.TraceOp("Write", data->c_slice_buffer());
754
+ if (grpc_core::IsSecureEndpointOffloadLargeWritesEnabled()) {
755
+ // If we get a zero length frame, just complete without looking at
756
+ // anything further
757
+ if (data->Length() == 0) return true;
758
+ grpc_core::MutexLock lock(&write_queue_mu_);
759
+ // If there's been a failure observed asynchronously, then fail out with
760
+ // that error.
761
+ if (!writing_.ok()) {
762
+ event_engine_->Run(
763
+ [on_write = std::move(on_writable),
764
+ status = writing_.status()]() mutable { on_write(status); });
765
+ return false;
766
+ }
767
+ // If we're already writing (== encrypting on another thread) we need to
768
+ // queue the writes up to do after that completes.
769
+ // OR if we're not already writing but this write is large, we push it
770
+ // onto the event engine to encrypt later.
771
+ if (*writing_ || data->Length() > large_write_threshold_) {
772
+ // Since we don't call on_write until we've collected pending_writes
773
+ // in the FinishAsyncWrites path, and EventEngine insists that one
774
+ // write finishes before a second begins, we should never see a Write
775
+ // call here with a non-null pending_writes_.
776
+ CHECK(pending_writes_ == nullptr);
777
+ pending_writes_ = std::make_unique<SliceBuffer>(std::move(*data));
778
+ frame_protector_.TraceOp("Pending",
779
+ pending_writes_->c_slice_buffer());
780
+ // Wait for the previous write to finish before considering this one.
781
+ // Note that since EventEngine::Endpoint allows only one outstanding
782
+ // write, this will pause sending until the callback is invoked.
783
+ last_write_args_ = std::move(args);
784
+ on_write_ = std::move(on_writable);
785
+ if (!*writing_) {
786
+ writing_ = true;
787
+ event_engine_->Run([impl = Ref()]() mutable {
788
+ FinishAsyncWrite(std::move(impl));
789
+ });
790
+ }
791
+ return false;
792
+ }
793
+ }
794
+ // A small write: encrypt inline and write to the socket.
795
+ {
796
+ grpc_core::MutexLock lock(frame_protector_.write_mu());
797
+ result = frame_protector_.Protect(data->c_slice_buffer(),
798
+ args.max_frame_size());
799
+ }
800
+ if (result != TSI_OK) {
801
+ event_engine_->Run(
802
+ [on_writable = std::move(on_writable), result]() mutable {
803
+ on_writable(GRPC_ERROR_CREATE(absl::StrCat(
804
+ "Wrap failed (", tsi_result_to_string(result), ")")));
805
+ });
806
+ return false;
807
+ }
808
+ on_write_ = std::move(on_writable);
809
+ frame_protector_.TraceOp(
810
+ "Write", frame_protector_.output_buffer()->c_slice_buffer());
811
+ return wrapped_ep_->Write(
812
+ [impl = Ref()](absl::Status status) mutable {
813
+ auto on_write = std::move(impl->on_write_);
814
+ impl.reset();
815
+ on_write(status);
816
+ },
817
+ frame_protector_.output_buffer(), std::move(args));
818
+ }
819
+
820
+ const EventEngine::ResolvedAddress& GetPeerAddress() const {
821
+ return wrapped_ep_->GetPeerAddress();
822
+ }
823
+
824
+ const EventEngine::ResolvedAddress& GetLocalAddress() const {
825
+ return wrapped_ep_->GetLocalAddress();
826
+ }
827
+
828
+ void* QueryExtension(absl::string_view id) {
829
+ return wrapped_ep_->QueryExtension(id);
830
+ }
831
+
832
+ void Shutdown() {
833
+ std::unique_ptr<EventEngine::Endpoint> wrapped_ep;
834
+ grpc_core::MutexLock write_lock(frame_protector_.write_mu());
835
+ grpc_core::MutexLock read_lock(frame_protector_.read_mu());
836
+ wrapped_ep = std::move(wrapped_ep_);
837
+ frame_protector_.Shutdown();
838
+ }
839
+
840
+ virtual std::vector<size_t> AllWriteMetrics() {
841
+ return wrapped_ep_->AllWriteMetrics();
842
+ }
843
+
844
+ virtual std::optional<absl::string_view> GetMetricName(size_t key) {
845
+ return wrapped_ep_->GetMetricName(key);
846
+ }
847
+
848
+ virtual std::optional<size_t> GetMetricKey(absl::string_view name) {
849
+ return wrapped_ep_->GetMetricKey(name);
850
+ }
851
+
852
+ private:
853
+ bool MaybeFinishReadImmediately() {
854
+ GRPC_LATENT_SEE_INNER_SCOPE("secure_endpoint maybe finish read");
855
+ grpc_core::MutexLock lock(frame_protector_.read_mu());
856
+ // If the read is large, since we got the bytes whilst still calling read,
857
+ // offload the decryption to event engine.
858
+ // That way we can do the decryption off this thread (which is usually
859
+ // under some mutual exclusion device) and publish the bytes using the
860
+ // async callback path.
861
+ // (remember there's at most one outstanding read and write on an
862
+ // EventEngine::Endpoint allowed, so this doesn't risk ordering issues.)
863
+ if (grpc_core::IsSecureEndpointOffloadLargeReadsEnabled() &&
864
+ frame_protector_.source_buffer()->Length() > large_read_threshold_) {
865
+ event_engine_->Run([impl = Ref()]() mutable {
866
+ FinishAsyncRead(std::move(impl), absl::OkStatus());
867
+ });
868
+ return false;
869
+ }
870
+ frame_protector_.TraceOp(
871
+ "Read(Imm)", frame_protector_.source_buffer()->c_slice_buffer());
872
+ auto status = frame_protector_.Unprotect(absl::OkStatus());
873
+ frame_protector_.FinishRead(status.ok());
874
+ if (status.ok()) return true;
875
+ event_engine_->Run([impl = Ref(), status = std::move(status)]() mutable {
876
+ auto on_read = std::move(impl->on_read_);
877
+ impl.reset();
878
+ on_read(status);
879
+ });
880
+ return false;
881
+ }
882
+
883
+ static void FinishAsyncRead(grpc_core::RefCountedPtr<Impl> impl,
884
+ absl::Status status) {
885
+ GRPC_LATENT_SEE_PARENT_SCOPE("secure endpoint finish async read");
886
+ {
887
+ grpc_core::MutexLock lock(impl->frame_protector_.read_mu());
888
+ if (status.ok() && impl->wrapped_ep_ == nullptr) {
889
+ status = absl::CancelledError("secure endpoint shutdown");
890
+ }
891
+ status = impl->frame_protector_.Unprotect(std::move(status));
892
+ }
893
+ if (status.ok()) {
894
+ impl->frame_protector_.TraceOp(
895
+ "Read", impl->frame_protector_.source_buffer()->c_slice_buffer());
896
+ }
897
+ auto on_read = std::move(impl->on_read_);
898
+ impl->frame_protector_.FinishRead(status.ok());
899
+ impl.reset();
900
+ on_read(status);
901
+ }
902
+
903
+ std::string WritingString() ABSL_EXCLUSIVE_LOCKS_REQUIRED(write_queue_mu_) {
904
+ if (!writing_.ok()) return writing_.status().ToString();
905
+ return *writing_ ? "true" : "false";
906
+ }
907
+
908
+ static void FailWrites(grpc_core::RefCountedPtr<Impl> impl,
909
+ absl::Status status)
910
+ ABSL_LOCKS_EXCLUDED(frame_protector_.write_mu(), write_queue_mu_) {
911
+ impl->write_queue_mu_.Lock();
912
+ impl->writing_ = status;
913
+ auto on_write = std::move(impl->on_write_);
914
+ impl->write_queue_mu_.Unlock();
915
+ impl.reset();
916
+ if (on_write != nullptr) on_write(status);
917
+ };
918
+
919
+ static void FinishAsyncWrite(grpc_core::RefCountedPtr<Impl> impl) {
920
+ GRPC_LATENT_SEE_PARENT_SCOPE("secure endpoint finish async write");
921
+ tsi_result result;
922
+ std::unique_ptr<SliceBuffer> data;
923
+ WriteArgs args;
924
+ // If writes complete immediately we'll loop back to here.
925
+ while (true) {
926
+ {
927
+ // Check to see if we've written all the bytes.
928
+ grpc_core::ReleasableMutexLock lock(&impl->write_queue_mu_);
929
+ if (impl->pending_writes_ == nullptr) {
930
+ impl->writing_ = false;
931
+ DCHECK(impl->on_write_ == nullptr);
932
+ lock.Release();
933
+ return;
934
+ }
935
+ // There's more data - grab it under the queue lock.
936
+ data = std::move(impl->pending_writes_);
937
+ impl->frame_protector_.TraceOp("data", data->c_slice_buffer());
938
+ args = std::move(impl->last_write_args_);
939
+ DCHECK(impl->on_write_ != nullptr);
940
+ }
941
+ impl->event_engine_->Run(
942
+ [on_write = std::move(impl->on_write_)]() mutable {
943
+ on_write(absl::OkStatus());
944
+ });
945
+ // Now grab the frame protector write mutex - this is held for some
946
+ // time (we do the encryption inside of it) - so it's a different
947
+ // mutex to the queue mutex above.
948
+ grpc_core::ReleasableMutexLock lock(impl->frame_protector_.write_mu());
949
+ // If the endpoint closed whilst waiting for this callback, then fail
950
+ // out the write and we're done.
951
+ if (impl->wrapped_ep_ == nullptr) {
952
+ lock.Release();
953
+ FailWrites(std::move(impl),
954
+ absl::CancelledError("secure endpoint shutdown"));
955
+ return;
956
+ }
957
+ result = impl->frame_protector_.Protect(data->c_slice_buffer(),
958
+ args.max_frame_size());
959
+ if (result != TSI_OK) {
960
+ lock.Release();
961
+ // Protection failed... fail the write and we're done.
962
+ FailWrites(std::move(impl),
963
+ GRPC_ERROR_CREATE(absl::StrCat(
964
+ "Wrap failed (", tsi_result_to_string(result), ")")));
965
+ return;
966
+ }
967
+ // Write out the protected bytes - returns true if it finishes
968
+ // immediately, in which case we'll loop.
969
+ const bool write_finished_immediately = impl->wrapped_ep_->Write(
970
+ [impl](absl::Status status) mutable {
971
+ // Async completion path: if we completed successfully then loop
972
+ // back into FinishAsyncWrite to see if there's more writing to
973
+ // do.
974
+ if (status.ok()) {
975
+ FinishAsyncWrite(std::move(impl));
976
+ return;
977
+ }
978
+ // Write failed: push the failure up via the callback if it's
979
+ // there.
980
+ FailWrites(std::move(impl), status);
981
+ },
982
+ impl->frame_protector_.output_buffer(), std::move(args));
983
+ if (!write_finished_immediately) break;
984
+ }
985
+ }
986
+
987
+ grpc_core::Mutex write_queue_mu_;
988
+ absl::StatusOr<bool> writing_ ABSL_GUARDED_BY(write_queue_mu_) = false;
989
+ WriteArgs last_write_args_ ABSL_GUARDED_BY(write_queue_mu_);
990
+ std::unique_ptr<SliceBuffer> pending_writes_
991
+ ABSL_GUARDED_BY(write_queue_mu_);
992
+ grpc_core::FrameProtector frame_protector_;
993
+ absl::AnyInvocable<void(absl::Status)> on_read_;
994
+ absl::AnyInvocable<void(absl::Status)> on_write_;
995
+ std::unique_ptr<EventEngine::Endpoint> wrapped_ep_;
996
+ std::shared_ptr<EventEngine> event_engine_;
997
+ const size_t large_read_threshold_;
998
+ const size_t large_write_threshold_;
999
+ const size_t max_buffered_writes_;
1000
+ };
1001
+
1002
+ grpc_core::RefCountedPtr<Impl> impl_;
1003
+ };
1004
+
1005
+ } // namespace
1006
+ } // namespace grpc_event_engine::experimental
1007
+
569
1008
  grpc_core::OrphanablePtr<grpc_endpoint> grpc_secure_endpoint_create(
570
1009
  struct tsi_frame_protector* protector,
571
1010
  struct tsi_zero_copy_grpc_protector* zero_copy_protector,
572
1011
  grpc_core::OrphanablePtr<grpc_endpoint> to_wrap,
573
- grpc_slice* leftover_slices, const grpc_channel_args* channel_args,
574
- size_t leftover_nslices) {
1012
+ grpc_slice* leftover_slices, size_t leftover_nslices,
1013
+ const grpc_core::ChannelArgs& channel_args) {
1014
+ if (!grpc_core::IsEventEngineSecureEndpointEnabled()) {
1015
+ return grpc_legacy_secure_endpoint_create(
1016
+ protector, zero_copy_protector, std::move(to_wrap), leftover_slices,
1017
+ channel_args.ToC().get(), leftover_nslices);
1018
+ }
1019
+ if (grpc_event_engine::experimental::grpc_get_wrapped_event_engine_endpoint(
1020
+ to_wrap.get()) != nullptr) {
1021
+ std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
1022
+ event_engine_endpoint = grpc_event_engine::experimental::
1023
+ grpc_take_wrapped_event_engine_endpoint(to_wrap.release());
1024
+ CHECK(event_engine_endpoint != nullptr);
1025
+ return grpc_core::OrphanablePtr<grpc_endpoint>(
1026
+ grpc_event_engine::experimental::grpc_event_engine_endpoint_create(
1027
+ std::make_unique<grpc_event_engine::experimental::SecureEndpoint>(
1028
+ std::move(event_engine_endpoint), protector,
1029
+ zero_copy_protector, leftover_slices, leftover_nslices,
1030
+ channel_args)));
1031
+ }
575
1032
  return grpc_core::MakeOrphanable<secure_endpoint>(
576
1033
  &vtable, protector, zero_copy_protector, std::move(to_wrap),
577
- leftover_slices, channel_args, leftover_nslices);
1034
+ leftover_slices, leftover_nslices, channel_args);
578
1035
  }