grpc 1.45.0 → 1.46.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (513) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +36 -29
  3. data/include/grpc/impl/codegen/grpc_types.h +7 -13
  4. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  5. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
  6. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  7. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +3 -3
  8. data/src/core/ext/filters/client_channel/client_channel.cc +163 -96
  9. data/src/core/ext/filters/client_channel/client_channel.h +2 -0
  10. data/src/core/ext/filters/client_channel/health/health_check_client.cc +124 -581
  11. data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
  12. data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
  13. data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
  14. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +182 -142
  15. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -6
  16. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -10
  17. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +87 -58
  18. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -48
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +229 -284
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +92 -257
  22. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +51 -221
  23. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
  24. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
  25. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +102 -55
  26. data/src/core/ext/filters/client_channel/retry_filter.cc +18 -3
  27. data/src/core/ext/filters/client_channel/subchannel.cc +5 -5
  28. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
  29. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
  30. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +127 -367
  31. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
  32. data/src/core/ext/filters/http/client/http_client_filter.cc +78 -458
  33. data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
  34. data/src/core/ext/filters/http/client_authority_filter.cc +17 -22
  35. data/src/core/ext/filters/http/client_authority_filter.h +6 -5
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -6
  37. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -116
  38. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +2 -8
  39. data/src/core/ext/filters/server_config_selector/server_config_selector.h +2 -2
  40. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +73 -201
  41. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -1
  42. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +5 -4
  43. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -28
  44. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
  45. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -6
  46. data/src/core/ext/transport/chttp2/transport/internal.h +4 -2
  47. data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -0
  48. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -13
  49. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  50. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +143 -63
  51. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +37 -35
  52. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +177 -77
  53. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +115 -111
  54. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +547 -207
  55. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  56. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +26 -13
  57. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +5 -5
  58. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +23 -9
  59. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  60. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +18 -0
  61. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  62. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +13 -4
  63. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  64. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +9 -0
  65. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  66. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +217 -78
  67. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  68. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +10 -2
  69. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  70. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  71. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  72. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +20 -2
  73. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  74. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +289 -110
  75. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +133 -125
  76. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +656 -267
  77. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +96 -23
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +185 -173
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +860 -309
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +10 -2
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +165 -40
  85. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  86. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +433 -174
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +33 -31
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +154 -52
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +14 -4
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +89 -89
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +460 -166
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +379 -69
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +14 -6
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +10 -91
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +26 -13
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +369 -131
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +94 -65
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +447 -161
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +27 -11
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +104 -85
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +378 -113
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +3 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +30 -13
  113. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +7 -7
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +43 -16
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +58 -24
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +14 -4
  119. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  120. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +100 -43
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +31 -30
  122. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +171 -71
  123. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  124. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +196 -95
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  126. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +7 -2
  127. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +53 -46
  128. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +284 -129
  129. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  130. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +337 -146
  131. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +13 -11
  132. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +49 -14
  133. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +4 -4
  134. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +14 -4
  135. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  136. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +20 -4
  137. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  138. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +205 -86
  139. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  140. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +175 -74
  141. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +56 -52
  142. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +370 -146
  143. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +27 -23
  144. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +173 -74
  145. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +362 -341
  146. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2056 -845
  147. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  148. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +49 -16
  149. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +56 -50
  150. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +293 -111
  151. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -3
  152. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -0
  153. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  154. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +10 -2
  155. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  156. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +26 -10
  157. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  158. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +27 -12
  159. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  160. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +83 -36
  161. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  162. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +7 -2
  163. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  164. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +46 -17
  165. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  166. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +38 -12
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -7
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +30 -10
  169. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +10 -6
  171. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  172. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +71 -28
  173. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  174. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -65
  175. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +8 -7
  176. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +30 -12
  177. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
  178. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +42 -15
  179. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +173 -144
  180. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +898 -323
  181. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +51 -45
  182. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +261 -116
  183. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  184. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +70 -25
  185. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +80 -55
  186. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +410 -124
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +23 -9
  189. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  190. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +44 -44
  191. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +261 -122
  192. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  193. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +47 -21
  194. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +32 -32
  195. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +175 -66
  196. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  197. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +17 -6
  198. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  199. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +38 -17
  200. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  201. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +12 -0
  202. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  203. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +43 -18
  204. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  205. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +20 -9
  206. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  207. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +24 -9
  208. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  209. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +14 -6
  210. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  211. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +40 -16
  212. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  213. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +70 -25
  214. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  215. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +37 -18
  216. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  217. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +81 -30
  218. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  219. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +76 -30
  220. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  221. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +90 -30
  222. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  223. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +28 -10
  224. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +3 -0
  226. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  227. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +13 -4
  228. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  229. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -0
  230. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  231. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +9 -0
  232. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  233. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +17 -4
  234. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  235. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  236. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  237. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +410 -162
  238. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  239. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +440 -158
  240. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  241. data/src/core/ext/upb-generated/google/api/http.upb.h +116 -43
  242. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  243. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +19 -7
  244. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  245. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -0
  246. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +163 -162
  247. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1157 -435
  248. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  249. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +10 -4
  250. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  251. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  252. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +108 -40
  253. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  254. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +10 -4
  255. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  256. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -0
  257. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  258. data/src/core/ext/upb-generated/google/rpc/status.upb.h +19 -7
  259. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  260. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +65 -22
  261. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  262. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +49 -12
  263. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  264. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +364 -149
  265. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  266. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +20 -4
  267. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  268. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -0
  269. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  270. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +150 -58
  271. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  272. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +51 -18
  273. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  274. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  275. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  276. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +97 -10
  277. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  278. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +23 -2
  279. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  280. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  281. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  282. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +27 -6
  283. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  284. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +20 -2
  285. data/src/core/ext/upb-generated/validate/validate.upb.c +261 -250
  286. data/src/core/ext/upb-generated/validate/validate.upb.h +1836 -663
  287. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  288. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +97 -10
  289. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  290. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +23 -2
  291. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  292. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  293. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  294. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +70 -10
  295. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  296. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +20 -2
  297. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  298. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +3 -0
  299. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  300. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +38 -12
  301. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  302. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +27 -10
  303. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  304. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +10 -2
  305. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  306. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +21 -8
  307. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  308. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +71 -30
  309. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  310. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +16 -2
  311. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +12 -12
  312. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +69 -26
  313. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  314. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +255 -103
  315. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  316. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +19 -8
  317. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  318. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +70 -25
  319. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -3
  320. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +10 -2
  321. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  322. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +195 -185
  323. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  324. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  325. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  327. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  328. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +163 -155
  329. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  331. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +26 -20
  332. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +738 -730
  333. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +271 -251
  334. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  335. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +207 -193
  336. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  337. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  338. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  339. data/src/core/ext/xds/certificate_provider_store.cc +8 -0
  340. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  341. data/src/core/ext/xds/xds_api.cc +20 -0
  342. data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
  343. data/src/core/ext/xds/xds_certificate_provider.h +8 -0
  344. data/src/core/ext/xds/xds_client.cc +83 -93
  345. data/src/core/ext/xds/xds_client.h +11 -4
  346. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  347. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  348. data/src/core/ext/xds/xds_common_types.cc +9 -9
  349. data/src/core/ext/xds/xds_common_types.h +3 -3
  350. data/src/core/ext/xds/xds_endpoint.cc +12 -5
  351. data/src/core/ext/xds/xds_http_fault_filter.cc +1 -1
  352. data/src/core/ext/xds/xds_listener.cc +1 -1
  353. data/src/core/ext/xds/xds_route_config.cc +162 -25
  354. data/src/core/ext/xds/xds_route_config.h +13 -10
  355. data/src/core/ext/xds/xds_server_config_fetcher.cc +17 -22
  356. data/src/core/lib/avl/avl.h +68 -5
  357. data/src/core/lib/channel/call_tracer.h +4 -1
  358. data/src/core/lib/channel/channel_args.cc +138 -59
  359. data/src/core/lib/channel/channel_args.h +210 -9
  360. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -9
  361. data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
  362. data/src/core/lib/channel/channel_stack.h +2 -5
  363. data/src/core/lib/channel/channel_stack_builder.cc +0 -65
  364. data/src/core/lib/channel/channel_stack_builder.h +27 -6
  365. data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
  366. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  367. data/src/core/lib/channel/connected_channel.h +1 -0
  368. data/src/core/lib/channel/promise_based_filter.cc +495 -162
  369. data/src/core/lib/channel/promise_based_filter.h +55 -41
  370. data/src/core/lib/compression/compression_internal.cc +1 -7
  371. data/src/core/lib/debug/stats_data.cc +2 -6
  372. data/src/core/lib/debug/stats_data.h +18 -21
  373. data/src/core/lib/gpr/tls.h +1 -0
  374. data/src/core/lib/gprpp/bitset.h +12 -0
  375. data/src/core/lib/gprpp/cpp_impl_of.h +4 -0
  376. data/src/core/lib/gprpp/match.h +73 -0
  377. data/src/core/lib/gprpp/overload.h +59 -0
  378. data/src/core/lib/gprpp/ref_counted.h +2 -0
  379. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  380. data/src/core/lib/gprpp/status_helper.cc +18 -2
  381. data/src/core/lib/gprpp/time.cc +12 -0
  382. data/src/core/lib/gprpp/time.h +1 -1
  383. data/src/core/lib/http/format_request.cc +1 -2
  384. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  385. data/src/core/lib/http/parser.cc +80 -9
  386. data/src/core/lib/http/parser.h +14 -1
  387. data/src/core/lib/iomgr/ev_posix.cc +6 -7
  388. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  389. data/src/core/lib/iomgr/port.h +0 -2
  390. data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
  391. data/src/core/lib/iomgr/tcp_posix.cc +93 -35
  392. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
  393. data/src/core/lib/json/json_util.h +3 -3
  394. data/src/core/lib/promise/call_push_pull.h +144 -0
  395. data/src/core/lib/promise/detail/status.h +2 -1
  396. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  397. data/src/core/lib/promise/latch.h +104 -0
  398. data/src/core/lib/resource_quota/api.cc +5 -30
  399. data/src/core/lib/resource_quota/api.h +1 -1
  400. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  401. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  402. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -12
  403. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -6
  404. data/src/core/lib/security/context/security_context.h +8 -1
  405. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  406. data/src/core/lib/security/credentials/alts/alts_credentials.h +4 -0
  407. data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
  408. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  409. data/src/core/lib/security/credentials/composite/composite_credentials.cc +15 -10
  410. data/src/core/lib/security/credentials/composite/composite_credentials.h +9 -8
  411. data/src/core/lib/security/credentials/credentials.h +16 -33
  412. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -12
  413. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -5
  414. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -0
  415. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  416. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -4
  417. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -2
  418. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +22 -29
  419. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  420. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -3
  421. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +6 -2
  422. data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
  423. data/src/core/lib/security/credentials/local/local_credentials.h +4 -0
  424. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -9
  425. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +14 -6
  426. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -6
  427. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +8 -6
  428. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +6 -4
  429. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +8 -0
  430. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
  431. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
  432. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -3
  433. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +66 -95
  434. data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
  435. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -5
  436. data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
  437. data/src/core/lib/security/credentials/xds/xds_credentials.h +31 -5
  438. data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
  439. data/src/core/lib/security/security_connector/security_connector.h +9 -0
  440. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -2
  441. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -2
  442. data/src/core/lib/security/transport/auth_filters.h +7 -7
  443. data/src/core/lib/security/transport/client_auth_filter.cc +28 -20
  444. data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
  445. data/src/core/lib/security/transport/secure_endpoint.h +1 -1
  446. data/src/core/lib/security/transport/security_handshaker.cc +6 -4
  447. data/src/core/lib/surface/call.cc +1023 -903
  448. data/src/core/lib/surface/call.h +0 -14
  449. data/src/core/lib/surface/channel.cc +4 -3
  450. data/src/core/lib/surface/channel_init.cc +2 -3
  451. data/src/core/lib/surface/channel_init.h +2 -6
  452. data/src/core/lib/surface/init.cc +1 -1
  453. data/src/core/lib/surface/server.cc +3 -14
  454. data/src/core/lib/surface/server.h +1 -2
  455. data/src/core/lib/surface/version.cc +2 -2
  456. data/src/core/lib/transport/byte_stream.cc +2 -0
  457. data/src/core/lib/transport/metadata_batch.h +12 -8
  458. data/src/core/lib/transport/transport.h +20 -5
  459. data/src/core/lib/transport/transport_impl.h +4 -3
  460. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -4
  461. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
  462. data/src/core/tsi/ssl_transport_security.cc +75 -38
  463. data/src/core/tsi/ssl_transport_security.h +8 -2
  464. data/src/core/tsi/transport_security_interface.h +2 -0
  465. data/src/ruby/ext/grpc/extconf.rb +1 -1
  466. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  467. data/src/ruby/lib/grpc/grpc.rb +1 -1
  468. data/src/ruby/lib/grpc/version.rb +1 -1
  469. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  470. data/src/ruby/pb/test/client.rb +769 -0
  471. data/src/ruby/pb/test/server.rb +252 -0
  472. data/src/ruby/pb/test/xds_client.rb +415 -0
  473. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  474. data/third_party/upb/upb/decode.c +32 -16
  475. data/third_party/upb/upb/def.c +118 -55
  476. data/third_party/upb/upb/def.h +12 -3
  477. data/third_party/upb/upb/encode.c +14 -8
  478. data/third_party/upb/upb/json_encode.c +776 -0
  479. data/third_party/upb/upb/json_encode.h +62 -0
  480. data/third_party/upb/upb/msg.c +5 -7
  481. data/third_party/upb/upb/msg.h +1 -2
  482. data/third_party/upb/upb/msg_internal.h +49 -36
  483. data/third_party/upb/upb/port_def.inc +8 -0
  484. data/third_party/upb/upb/port_undef.inc +1 -0
  485. data/third_party/upb/upb/table.c +10 -6
  486. data/third_party/upb/upb/table_internal.h +2 -0
  487. data/third_party/upb/upb/upb.h +41 -11
  488. data/third_party/zlib/crc32.c +966 -292
  489. data/third_party/zlib/crc32.h +9441 -436
  490. data/third_party/zlib/deflate.c +78 -30
  491. data/third_party/zlib/deflate.h +12 -15
  492. data/third_party/zlib/gzguts.h +3 -2
  493. data/third_party/zlib/gzlib.c +5 -3
  494. data/third_party/zlib/gzread.c +5 -7
  495. data/third_party/zlib/gzwrite.c +25 -13
  496. data/third_party/zlib/infback.c +2 -1
  497. data/third_party/zlib/inffast.c +14 -14
  498. data/third_party/zlib/inflate.c +39 -8
  499. data/third_party/zlib/inflate.h +3 -2
  500. data/third_party/zlib/inftrees.c +3 -3
  501. data/third_party/zlib/trees.c +27 -48
  502. data/third_party/zlib/zlib.h +123 -100
  503. data/third_party/zlib/zutil.c +2 -2
  504. data/third_party/zlib/zutil.h +12 -9
  505. metadata +66 -45
  506. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  507. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  508. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  509. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  510. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  511. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  512. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  513. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
@@ -29,7 +29,6 @@
29
29
  #include "src/core/lib/security/security_connector/security_connector.h"
30
30
  #include "src/core/lib/transport/transport.h"
31
31
 
32
- extern const grpc_channel_filter grpc_client_auth_filter;
33
32
  extern const grpc_channel_filter grpc_server_auth_filter;
34
33
 
35
34
  namespace grpc_core {
@@ -37,21 +36,22 @@ namespace grpc_core {
37
36
  // Handles calling out to credentials to fill in metadata per call.
38
37
  class ClientAuthFilter final : public ChannelFilter {
39
38
  public:
40
- static absl::StatusOr<ClientAuthFilter> Create(const grpc_channel_args* args,
39
+ static const grpc_channel_filter kFilter;
40
+
41
+ static absl::StatusOr<ClientAuthFilter> Create(ChannelArgs args,
41
42
  ChannelFilter::Args);
42
43
 
43
44
  // Construct a promise for one call.
44
- ArenaPromise<TrailingMetadata> MakeCallPromise(
45
- ClientInitialMetadata initial_metadata,
46
- NextPromiseFactory next_promise_factory) override;
45
+ ArenaPromise<ServerMetadataHandle> MakeCallPromise(
46
+ CallArgs call_args, NextPromiseFactory next_promise_factory) override;
47
47
 
48
48
  private:
49
49
  ClientAuthFilter(
50
50
  RefCountedPtr<grpc_channel_security_connector> security_connector,
51
51
  RefCountedPtr<grpc_auth_context> auth_context);
52
52
 
53
- ArenaPromise<absl::StatusOr<ClientInitialMetadata>> GetCallCredsMetadata(
54
- ClientInitialMetadata initial_metadata);
53
+ ArenaPromise<absl::StatusOr<CallArgs>> GetCallCredsMetadata(
54
+ CallArgs call_args);
55
55
 
56
56
  // Contains refs to security connector and auth context.
57
57
  grpc_call_credentials::GetRequestMetadataArgs args_;
@@ -31,6 +31,7 @@
31
31
  #include "src/core/lib/channel/channel_stack.h"
32
32
  #include "src/core/lib/channel/promise_based_filter.h"
33
33
  #include "src/core/lib/gpr/string.h"
34
+ #include "src/core/lib/gprpp/capture.h"
34
35
  #include "src/core/lib/iomgr/error.h"
35
36
  #include "src/core/lib/profiling/timers.h"
36
37
  #include "src/core/lib/promise/promise.h"
@@ -98,8 +99,8 @@ ClientAuthFilter::ClientAuthFilter(
98
99
  RefCountedPtr<grpc_auth_context> auth_context)
99
100
  : args_{std::move(security_connector), std::move(auth_context)} {}
100
101
 
101
- ArenaPromise<absl::StatusOr<ClientInitialMetadata>>
102
- ClientAuthFilter::GetCallCredsMetadata(ClientInitialMetadata initial_metadata) {
102
+ ArenaPromise<absl::StatusOr<CallArgs>> ClientAuthFilter::GetCallCredsMetadata(
103
+ CallArgs call_args) {
103
104
  auto* ctx = static_cast<grpc_client_security_context*>(
104
105
  GetContext<grpc_call_context_element>()[GRPC_CONTEXT_SECURITY].value);
105
106
  grpc_call_credentials* channel_call_creds =
@@ -108,8 +109,7 @@ ClientAuthFilter::GetCallCredsMetadata(ClientInitialMetadata initial_metadata) {
108
109
 
109
110
  if (channel_call_creds == nullptr && !call_creds_has_md) {
110
111
  /* Skip sending metadata altogether. */
111
- return Immediate(
112
- absl::StatusOr<ClientInitialMetadata>(std::move(initial_metadata)));
112
+ return Immediate(absl::StatusOr<CallArgs>(std::move(call_args)));
113
113
  }
114
114
 
115
115
  RefCountedPtr<grpc_call_credentials> creds;
@@ -148,12 +148,20 @@ ClientAuthFilter::GetCallCredsMetadata(ClientInitialMetadata initial_metadata) {
148
148
  "transfer call credential."));
149
149
  }
150
150
 
151
- return creds->GetRequestMetadata(std::move(initial_metadata), &args_);
151
+ auto client_initial_metadata = std::move(call_args.client_initial_metadata);
152
+ return TrySeq(
153
+ creds->GetRequestMetadata(std::move(client_initial_metadata), &args_),
154
+ Capture(
155
+ [](CallArgs* rest_of_args, ClientMetadataHandle new_metadata) {
156
+ rest_of_args->client_initial_metadata = std::move(new_metadata);
157
+ return Immediate<absl::StatusOr<CallArgs>>(
158
+ absl::StatusOr<CallArgs>(std::move(*rest_of_args)));
159
+ },
160
+ std::move(call_args)));
152
161
  }
153
162
 
154
- ArenaPromise<TrailingMetadata> ClientAuthFilter::MakeCallPromise(
155
- ClientInitialMetadata initial_metadata,
156
- NextPromiseFactory next_promise_factory) {
163
+ ArenaPromise<ServerMetadataHandle> ClientAuthFilter::MakeCallPromise(
164
+ CallArgs call_args, NextPromiseFactory next_promise_factory) {
157
165
  auto* legacy_ctx = GetContext<grpc_call_context_element>();
158
166
  if (legacy_ctx[GRPC_CONTEXT_SECURITY].value == nullptr) {
159
167
  legacy_ctx[GRPC_CONTEXT_SECURITY].value =
@@ -166,24 +174,25 @@ ArenaPromise<TrailingMetadata> ClientAuthFilter::MakeCallPromise(
166
174
  legacy_ctx[GRPC_CONTEXT_SECURITY].value)
167
175
  ->auth_context = args_.auth_context;
168
176
 
169
- auto* host = initial_metadata->get_pointer(HttpAuthorityMetadata());
177
+ auto* host =
178
+ call_args.client_initial_metadata->get_pointer(HttpAuthorityMetadata());
170
179
  if (host == nullptr) {
171
- return next_promise_factory(std::move(initial_metadata));
180
+ return next_promise_factory(std::move(call_args));
172
181
  }
173
182
  return TrySeq(args_.security_connector->CheckCallHost(
174
183
  host->as_string_view(), args_.auth_context.get()),
175
- GetCallCredsMetadata(std::move(initial_metadata)),
184
+ GetCallCredsMetadata(std::move(call_args)),
176
185
  next_promise_factory);
177
186
  }
178
187
 
179
- absl::StatusOr<ClientAuthFilter> ClientAuthFilter::Create(
180
- const grpc_channel_args* args, ChannelFilter::Args) {
181
- grpc_security_connector* sc = grpc_security_connector_find_in_args(args);
188
+ absl::StatusOr<ClientAuthFilter> ClientAuthFilter::Create(ChannelArgs args,
189
+ ChannelFilter::Args) {
190
+ auto* sc = args.GetObject<grpc_security_connector>();
182
191
  if (sc == nullptr) {
183
192
  return absl::InvalidArgumentError(
184
193
  "Security connector missing from client auth filter args");
185
194
  }
186
- grpc_auth_context* auth_context = grpc_find_auth_context_in_args(args);
195
+ auto* auth_context = args.GetObject<grpc_auth_context>();
187
196
  if (auth_context == nullptr) {
188
197
  return absl::InvalidArgumentError(
189
198
  "Auth context missing from client auth filter args");
@@ -194,9 +203,8 @@ absl::StatusOr<ClientAuthFilter> ClientAuthFilter::Create(
194
203
  auth_context->Ref());
195
204
  }
196
205
 
197
- } // namespace grpc_core
198
-
199
- const grpc_channel_filter grpc_client_auth_filter =
200
- grpc_core::MakePromiseBasedFilter<grpc_core::ClientAuthFilter,
201
- grpc_core::FilterEndpoint::kClient>(
206
+ const grpc_channel_filter ClientAuthFilter::kFilter =
207
+ MakePromiseBasedFilter<ClientAuthFilter, FilterEndpoint::kClient>(
202
208
  "client-auth-filter");
209
+
210
+ } // namespace grpc_core
@@ -33,6 +33,9 @@
33
33
  #include "src/core/lib/gprpp/memory.h"
34
34
  #include "src/core/lib/iomgr/sockaddr.h"
35
35
  #include "src/core/lib/profiling/timers.h"
36
+ #include "src/core/lib/resource_quota/api.h"
37
+ #include "src/core/lib/resource_quota/memory_quota.h"
38
+ #include "src/core/lib/resource_quota/trace.h"
36
39
  #include "src/core/lib/security/transport/tsi_error.h"
37
40
  #include "src/core/lib/slice/slice_internal.h"
38
41
  #include "src/core/lib/slice/slice_string_helpers.h"
@@ -48,6 +51,7 @@ struct secure_endpoint {
48
51
  tsi_frame_protector* protector,
49
52
  tsi_zero_copy_grpc_protector* zero_copy_protector,
50
53
  grpc_endpoint* transport, grpc_slice* leftover_slices,
54
+ const grpc_channel_args* channel_args,
51
55
  size_t leftover_nslices)
52
56
  : wrapped_ep(transport),
53
57
  protector(protector),
@@ -62,6 +66,17 @@ struct secure_endpoint {
62
66
  grpc_slice_ref_internal(leftover_slices[i]));
63
67
  }
64
68
  grpc_slice_buffer_init(&output_buffer);
69
+ memory_owner =
70
+ grpc_core::ResourceQuotaFromChannelArgs(channel_args)
71
+ ->memory_quota()
72
+ ->CreateMemoryOwner(absl::StrCat(grpc_endpoint_get_peer(transport),
73
+ ":secure_endpoint"));
74
+ self_reservation = memory_owner.MakeReservation(sizeof(*this));
75
+ read_staging_buffer =
76
+ memory_owner.MakeSlice(grpc_core::MemoryRequest(STAGING_BUFFER_SIZE));
77
+ write_staging_buffer =
78
+ memory_owner.MakeSlice(grpc_core::MemoryRequest(STAGING_BUFFER_SIZE));
79
+ has_posted_reclaimer.store(false, std::memory_order_relaxed);
65
80
  gpr_ref_init(&ref, 1);
66
81
  }
67
82
 
@@ -82,6 +97,8 @@ struct secure_endpoint {
82
97
  struct tsi_frame_protector* protector;
83
98
  struct tsi_zero_copy_grpc_protector* zero_copy_protector;
84
99
  gpr_mu protector_mu;
100
+ absl::Mutex read_mu;
101
+ absl::Mutex write_mu;
85
102
  /* saved upper level callbacks and user_data. */
86
103
  grpc_closure* read_cb = nullptr;
87
104
  grpc_closure* write_cb = nullptr;
@@ -91,9 +108,12 @@ struct secure_endpoint {
91
108
  /* saved handshaker leftover data to unprotect. */
92
109
  grpc_slice_buffer leftover_bytes;
93
110
  /* buffers for read and write */
94
- grpc_slice read_staging_buffer = GRPC_SLICE_MALLOC(STAGING_BUFFER_SIZE);
95
- grpc_slice write_staging_buffer = GRPC_SLICE_MALLOC(STAGING_BUFFER_SIZE);
111
+ grpc_slice read_staging_buffer ABSL_GUARDED_BY(read_mu);
112
+ grpc_slice write_staging_buffer ABSL_GUARDED_BY(write_mu);
96
113
  grpc_slice_buffer output_buffer;
114
+ grpc_core::MemoryOwner memory_owner;
115
+ grpc_core::MemoryAllocator::Reservation self_reservation;
116
+ std::atomic<bool> has_posted_reclaimer;
97
117
 
98
118
  gpr_refcount ref;
99
119
  };
@@ -143,10 +163,46 @@ static void secure_endpoint_unref(secure_endpoint* ep) {
143
163
  static void secure_endpoint_ref(secure_endpoint* ep) { gpr_ref(&ep->ref); }
144
164
  #endif
145
165
 
166
+ static void maybe_post_reclaimer(secure_endpoint* ep) {
167
+ if (!ep->has_posted_reclaimer) {
168
+ SECURE_ENDPOINT_REF(ep, "benign_reclaimer");
169
+ ep->has_posted_reclaimer.exchange(true, std::memory_order_relaxed);
170
+ ep->memory_owner.PostReclaimer(
171
+ grpc_core::ReclamationPass::kBenign,
172
+ [ep](absl::optional<grpc_core::ReclamationSweep> sweep) {
173
+ if (sweep.has_value()) {
174
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
175
+ gpr_log(GPR_INFO,
176
+ "secure endpoint: benign reclamation to free memory");
177
+ }
178
+ grpc_slice temp_read_slice;
179
+ grpc_slice temp_write_slice;
180
+
181
+ ep->read_mu.Lock();
182
+ temp_read_slice = ep->read_staging_buffer;
183
+ ep->read_staging_buffer = grpc_empty_slice();
184
+ ep->read_mu.Unlock();
185
+
186
+ ep->write_mu.Lock();
187
+ temp_write_slice = ep->write_staging_buffer;
188
+ ep->write_staging_buffer = grpc_empty_slice();
189
+ ep->write_mu.Unlock();
190
+
191
+ grpc_slice_unref_internal(temp_read_slice);
192
+ grpc_slice_unref_internal(temp_write_slice);
193
+ ep->has_posted_reclaimer.exchange(false, std::memory_order_relaxed);
194
+ }
195
+ SECURE_ENDPOINT_UNREF(ep, "benign_reclaimer");
196
+ });
197
+ }
198
+ }
199
+
146
200
  static void flush_read_staging_buffer(secure_endpoint* ep, uint8_t** cur,
147
- uint8_t** end) {
148
- grpc_slice_buffer_add(ep->read_buffer, ep->read_staging_buffer);
149
- ep->read_staging_buffer = GRPC_SLICE_MALLOC(STAGING_BUFFER_SIZE);
201
+ uint8_t** end)
202
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(ep->read_mu) {
203
+ grpc_slice_buffer_add_indexed(ep->read_buffer, ep->read_staging_buffer);
204
+ ep->read_staging_buffer =
205
+ ep->memory_owner.MakeSlice(grpc_core::MemoryRequest(STAGING_BUFFER_SIZE));
150
206
  *cur = GRPC_SLICE_START_PTR(ep->read_staging_buffer);
151
207
  *end = GRPC_SLICE_END_PTR(ep->read_staging_buffer);
152
208
  }
@@ -171,68 +227,73 @@ static void on_read(void* user_data, grpc_error_handle error) {
171
227
  uint8_t keep_looping = 0;
172
228
  tsi_result result = TSI_OK;
173
229
  secure_endpoint* ep = static_cast<secure_endpoint*>(user_data);
174
- uint8_t* cur = GRPC_SLICE_START_PTR(ep->read_staging_buffer);
175
- uint8_t* end = GRPC_SLICE_END_PTR(ep->read_staging_buffer);
176
230
 
177
- if (error != GRPC_ERROR_NONE) {
178
- grpc_slice_buffer_reset_and_unref_internal(ep->read_buffer);
179
- call_read_cb(ep, GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
180
- "Secure read failed", &error, 1));
181
- return;
182
- }
231
+ {
232
+ absl::MutexLock l(&ep->read_mu);
233
+ uint8_t* cur = GRPC_SLICE_START_PTR(ep->read_staging_buffer);
234
+ uint8_t* end = GRPC_SLICE_END_PTR(ep->read_staging_buffer);
183
235
 
184
- if (ep->zero_copy_protector != nullptr) {
185
- // Use zero-copy grpc protector to unprotect.
186
- result = tsi_zero_copy_grpc_protector_unprotect(
187
- ep->zero_copy_protector, &ep->source_buffer, ep->read_buffer);
188
- } else {
189
- // Use frame protector to unprotect.
190
- /* TODO(yangg) check error, maybe bail out early */
191
- for (i = 0; i < ep->source_buffer.count; i++) {
192
- grpc_slice encrypted = ep->source_buffer.slices[i];
193
- uint8_t* message_bytes = GRPC_SLICE_START_PTR(encrypted);
194
- size_t message_size = GRPC_SLICE_LENGTH(encrypted);
195
-
196
- while (message_size > 0 || keep_looping) {
197
- size_t unprotected_buffer_size_written = static_cast<size_t>(end - cur);
198
- size_t processed_message_size = message_size;
199
- gpr_mu_lock(&ep->protector_mu);
200
- result = tsi_frame_protector_unprotect(
201
- ep->protector, message_bytes, &processed_message_size, cur,
202
- &unprotected_buffer_size_written);
203
- gpr_mu_unlock(&ep->protector_mu);
204
- if (result != TSI_OK) {
205
- gpr_log(GPR_ERROR, "Decryption error: %s",
206
- tsi_result_to_string(result));
207
- break;
208
- }
209
- message_bytes += processed_message_size;
210
- message_size -= processed_message_size;
211
- cur += unprotected_buffer_size_written;
212
-
213
- if (cur == end) {
214
- flush_read_staging_buffer(ep, &cur, &end);
215
- /* Force to enter the loop again to extract buffered bytes in
216
- protector. The bytes could be buffered because of running out of
217
- staging_buffer. If this happens at the end of all slices, doing
218
- another unprotect avoids leaving data in the protector. */
219
- keep_looping = 1;
220
- } else if (unprotected_buffer_size_written > 0) {
221
- keep_looping = 1;
222
- } else {
223
- keep_looping = 0;
236
+ if (error != GRPC_ERROR_NONE) {
237
+ grpc_slice_buffer_reset_and_unref_internal(ep->read_buffer);
238
+ call_read_cb(ep, GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
239
+ "Secure read failed", &error, 1));
240
+ return;
241
+ }
242
+
243
+ if (ep->zero_copy_protector != nullptr) {
244
+ // Use zero-copy grpc protector to unprotect.
245
+ result = tsi_zero_copy_grpc_protector_unprotect(
246
+ ep->zero_copy_protector, &ep->source_buffer, ep->read_buffer);
247
+ } else {
248
+ // Use frame protector to unprotect.
249
+ /* TODO(yangg) check error, maybe bail out early */
250
+ for (i = 0; i < ep->source_buffer.count; i++) {
251
+ grpc_slice encrypted = ep->source_buffer.slices[i];
252
+ uint8_t* message_bytes = GRPC_SLICE_START_PTR(encrypted);
253
+ size_t message_size = GRPC_SLICE_LENGTH(encrypted);
254
+
255
+ while (message_size > 0 || keep_looping) {
256
+ size_t unprotected_buffer_size_written =
257
+ static_cast<size_t>(end - cur);
258
+ size_t processed_message_size = message_size;
259
+ gpr_mu_lock(&ep->protector_mu);
260
+ result = tsi_frame_protector_unprotect(
261
+ ep->protector, message_bytes, &processed_message_size, cur,
262
+ &unprotected_buffer_size_written);
263
+ gpr_mu_unlock(&ep->protector_mu);
264
+ if (result != TSI_OK) {
265
+ gpr_log(GPR_ERROR, "Decryption error: %s",
266
+ tsi_result_to_string(result));
267
+ break;
268
+ }
269
+ message_bytes += processed_message_size;
270
+ message_size -= processed_message_size;
271
+ cur += unprotected_buffer_size_written;
272
+
273
+ if (cur == end) {
274
+ flush_read_staging_buffer(ep, &cur, &end);
275
+ /* Force to enter the loop again to extract buffered bytes in
276
+ protector. The bytes could be buffered because of running out of
277
+ staging_buffer. If this happens at the end of all slices, doing
278
+ another unprotect avoids leaving data in the protector. */
279
+ keep_looping = 1;
280
+ } else if (unprotected_buffer_size_written > 0) {
281
+ keep_looping = 1;
282
+ } else {
283
+ keep_looping = 0;
284
+ }
224
285
  }
286
+ if (result != TSI_OK) break;
225
287
  }
226
- if (result != TSI_OK) break;
227
- }
228
288
 
229
- if (cur != GRPC_SLICE_START_PTR(ep->read_staging_buffer)) {
230
- grpc_slice_buffer_add(
231
- ep->read_buffer,
232
- grpc_slice_split_head(
233
- &ep->read_staging_buffer,
234
- static_cast<size_t>(
235
- cur - GRPC_SLICE_START_PTR(ep->read_staging_buffer))));
289
+ if (cur != GRPC_SLICE_START_PTR(ep->read_staging_buffer)) {
290
+ grpc_slice_buffer_add(
291
+ ep->read_buffer,
292
+ grpc_slice_split_head(
293
+ &ep->read_staging_buffer,
294
+ static_cast<size_t>(
295
+ cur - GRPC_SLICE_START_PTR(ep->read_staging_buffer))));
296
+ }
236
297
  }
237
298
  }
238
299
 
@@ -270,11 +331,14 @@ static void endpoint_read(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
270
331
  }
271
332
 
272
333
  static void flush_write_staging_buffer(secure_endpoint* ep, uint8_t** cur,
273
- uint8_t** end) {
274
- grpc_slice_buffer_add(&ep->output_buffer, ep->write_staging_buffer);
275
- ep->write_staging_buffer = GRPC_SLICE_MALLOC(STAGING_BUFFER_SIZE);
334
+ uint8_t** end)
335
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(ep->write_mu) {
336
+ grpc_slice_buffer_add_indexed(&ep->output_buffer, ep->write_staging_buffer);
337
+ ep->write_staging_buffer =
338
+ ep->memory_owner.MakeSlice(grpc_core::MemoryRequest(STAGING_BUFFER_SIZE));
276
339
  *cur = GRPC_SLICE_START_PTR(ep->write_staging_buffer);
277
340
  *end = GRPC_SLICE_END_PTR(ep->write_staging_buffer);
341
+ maybe_post_reclaimer(ep);
278
342
  }
279
343
 
280
344
  static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
@@ -284,75 +348,79 @@ static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
284
348
  unsigned i;
285
349
  tsi_result result = TSI_OK;
286
350
  secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
287
- uint8_t* cur = GRPC_SLICE_START_PTR(ep->write_staging_buffer);
288
- uint8_t* end = GRPC_SLICE_END_PTR(ep->write_staging_buffer);
289
351
 
290
- grpc_slice_buffer_reset_and_unref_internal(&ep->output_buffer);
352
+ {
353
+ absl::MutexLock l(&ep->write_mu);
354
+ uint8_t* cur = GRPC_SLICE_START_PTR(ep->write_staging_buffer);
355
+ uint8_t* end = GRPC_SLICE_END_PTR(ep->write_staging_buffer);
291
356
 
292
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_secure_endpoint)) {
293
- for (i = 0; i < slices->count; i++) {
294
- char* data =
295
- grpc_dump_slice(slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
296
- gpr_log(GPR_INFO, "WRITE %p: %s", ep, data);
297
- gpr_free(data);
298
- }
299
- }
300
-
301
- if (ep->zero_copy_protector != nullptr) {
302
- // Use zero-copy grpc protector to protect.
303
- result = tsi_zero_copy_grpc_protector_protect(ep->zero_copy_protector,
304
- slices, &ep->output_buffer);
305
- } else {
306
- // Use frame protector to protect.
307
- for (i = 0; i < slices->count; i++) {
308
- grpc_slice plain = slices->slices[i];
309
- uint8_t* message_bytes = GRPC_SLICE_START_PTR(plain);
310
- size_t message_size = GRPC_SLICE_LENGTH(plain);
311
- while (message_size > 0) {
312
- size_t protected_buffer_size_to_send = static_cast<size_t>(end - cur);
313
- size_t processed_message_size = message_size;
314
- gpr_mu_lock(&ep->protector_mu);
315
- result = tsi_frame_protector_protect(ep->protector, message_bytes,
316
- &processed_message_size, cur,
317
- &protected_buffer_size_to_send);
318
- gpr_mu_unlock(&ep->protector_mu);
319
- if (result != TSI_OK) {
320
- gpr_log(GPR_ERROR, "Encryption error: %s",
321
- tsi_result_to_string(result));
322
- break;
323
- }
324
- message_bytes += processed_message_size;
325
- message_size -= processed_message_size;
326
- cur += protected_buffer_size_to_send;
357
+ grpc_slice_buffer_reset_and_unref_internal(&ep->output_buffer);
327
358
 
328
- if (cur == end) {
329
- flush_write_staging_buffer(ep, &cur, &end);
330
- }
359
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_secure_endpoint)) {
360
+ for (i = 0; i < slices->count; i++) {
361
+ char* data =
362
+ grpc_dump_slice(slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
363
+ gpr_log(GPR_INFO, "WRITE %p: %s", ep, data);
364
+ gpr_free(data);
331
365
  }
332
- if (result != TSI_OK) break;
333
366
  }
334
- if (result == TSI_OK) {
335
- size_t still_pending_size;
336
- do {
337
- size_t protected_buffer_size_to_send = static_cast<size_t>(end - cur);
338
- gpr_mu_lock(&ep->protector_mu);
339
- result = tsi_frame_protector_protect_flush(
340
- ep->protector, cur, &protected_buffer_size_to_send,
341
- &still_pending_size);
342
- gpr_mu_unlock(&ep->protector_mu);
367
+
368
+ if (ep->zero_copy_protector != nullptr) {
369
+ // Use zero-copy grpc protector to protect.
370
+ result = tsi_zero_copy_grpc_protector_protect(ep->zero_copy_protector,
371
+ slices, &ep->output_buffer);
372
+ } else {
373
+ // Use frame protector to protect.
374
+ for (i = 0; i < slices->count; i++) {
375
+ grpc_slice plain = slices->slices[i];
376
+ uint8_t* message_bytes = GRPC_SLICE_START_PTR(plain);
377
+ size_t message_size = GRPC_SLICE_LENGTH(plain);
378
+ while (message_size > 0) {
379
+ size_t protected_buffer_size_to_send = static_cast<size_t>(end - cur);
380
+ size_t processed_message_size = message_size;
381
+ gpr_mu_lock(&ep->protector_mu);
382
+ result = tsi_frame_protector_protect(ep->protector, message_bytes,
383
+ &processed_message_size, cur,
384
+ &protected_buffer_size_to_send);
385
+ gpr_mu_unlock(&ep->protector_mu);
386
+ if (result != TSI_OK) {
387
+ gpr_log(GPR_ERROR, "Encryption error: %s",
388
+ tsi_result_to_string(result));
389
+ break;
390
+ }
391
+ message_bytes += processed_message_size;
392
+ message_size -= processed_message_size;
393
+ cur += protected_buffer_size_to_send;
394
+
395
+ if (cur == end) {
396
+ flush_write_staging_buffer(ep, &cur, &end);
397
+ }
398
+ }
343
399
  if (result != TSI_OK) break;
344
- cur += protected_buffer_size_to_send;
345
- if (cur == end) {
346
- flush_write_staging_buffer(ep, &cur, &end);
400
+ }
401
+ if (result == TSI_OK) {
402
+ size_t still_pending_size;
403
+ do {
404
+ size_t protected_buffer_size_to_send = static_cast<size_t>(end - cur);
405
+ gpr_mu_lock(&ep->protector_mu);
406
+ result = tsi_frame_protector_protect_flush(
407
+ ep->protector, cur, &protected_buffer_size_to_send,
408
+ &still_pending_size);
409
+ gpr_mu_unlock(&ep->protector_mu);
410
+ if (result != TSI_OK) break;
411
+ cur += protected_buffer_size_to_send;
412
+ if (cur == end) {
413
+ flush_write_staging_buffer(ep, &cur, &end);
414
+ }
415
+ } while (still_pending_size > 0);
416
+ if (cur != GRPC_SLICE_START_PTR(ep->write_staging_buffer)) {
417
+ grpc_slice_buffer_add(
418
+ &ep->output_buffer,
419
+ grpc_slice_split_head(
420
+ &ep->write_staging_buffer,
421
+ static_cast<size_t>(
422
+ cur - GRPC_SLICE_START_PTR(ep->write_staging_buffer))));
347
423
  }
348
- } while (still_pending_size > 0);
349
- if (cur != GRPC_SLICE_START_PTR(ep->write_staging_buffer)) {
350
- grpc_slice_buffer_add(
351
- &ep->output_buffer,
352
- grpc_slice_split_head(
353
- &ep->write_staging_buffer,
354
- static_cast<size_t>(
355
- cur - GRPC_SLICE_START_PTR(ep->write_staging_buffer))));
356
424
  }
357
425
  }
358
426
  }
@@ -377,6 +445,7 @@ static void endpoint_shutdown(grpc_endpoint* secure_ep, grpc_error_handle why) {
377
445
 
378
446
  static void endpoint_destroy(grpc_endpoint* secure_ep) {
379
447
  secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
448
+ ep->memory_owner.Reset();
380
449
  SECURE_ENDPOINT_UNREF(ep, "destroy");
381
450
  }
382
451
 
@@ -434,9 +503,9 @@ grpc_endpoint* grpc_secure_endpoint_create(
434
503
  struct tsi_frame_protector* protector,
435
504
  struct tsi_zero_copy_grpc_protector* zero_copy_protector,
436
505
  grpc_endpoint* to_wrap, grpc_slice* leftover_slices,
437
- size_t leftover_nslices) {
506
+ const grpc_channel_args* channel_args, size_t leftover_nslices) {
438
507
  secure_endpoint* ep =
439
508
  new secure_endpoint(&vtable, protector, zero_copy_protector, to_wrap,
440
- leftover_slices, leftover_nslices);
509
+ leftover_slices, channel_args, leftover_nslices);
441
510
  return &ep->base;
442
511
  }
@@ -37,6 +37,6 @@ grpc_endpoint* grpc_secure_endpoint_create(
37
37
  struct tsi_frame_protector* protector,
38
38
  struct tsi_zero_copy_grpc_protector* zero_copy_protector,
39
39
  grpc_endpoint* to_wrap, grpc_slice* leftover_slices,
40
- size_t leftover_nslices);
40
+ const grpc_channel_args* channel_args, size_t leftover_nslices);
41
41
 
42
42
  #endif /* GRPC_CORE_LIB_SECURITY_TRANSPORT_SECURE_ENDPOINT_H */
@@ -294,12 +294,14 @@ void SecurityHandshaker::OnPeerCheckedInner(grpc_error_handle error) {
294
294
  if (unused_bytes_size > 0) {
295
295
  grpc_slice slice = grpc_slice_from_copied_buffer(
296
296
  reinterpret_cast<const char*>(unused_bytes), unused_bytes_size);
297
- args_->endpoint = grpc_secure_endpoint_create(
298
- protector, zero_copy_protector, args_->endpoint, &slice, 1);
297
+ args_->endpoint =
298
+ grpc_secure_endpoint_create(protector, zero_copy_protector,
299
+ args_->endpoint, &slice, args_->args, 1);
299
300
  grpc_slice_unref_internal(slice);
300
301
  } else {
301
- args_->endpoint = grpc_secure_endpoint_create(
302
- protector, zero_copy_protector, args_->endpoint, nullptr, 0);
302
+ args_->endpoint =
303
+ grpc_secure_endpoint_create(protector, zero_copy_protector,
304
+ args_->endpoint, nullptr, args_->args, 0);
303
305
  }
304
306
  } else if (unused_bytes_size > 0) {
305
307
  // Not wrapping the endpoint, so just pass along unused bytes.