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
@@ -33,489 +33,109 @@
33
33
  #include <grpc/support/log.h>
34
34
 
35
35
  #include "src/core/lib/channel/channel_args.h"
36
- #include "src/core/lib/gpr/string.h"
37
- #include "src/core/lib/gprpp/manual_constructor.h"
38
- #include "src/core/lib/profiling/timers.h"
39
- #include "src/core/lib/slice/b64.h"
36
+ #include "src/core/lib/promise/call_push_pull.h"
37
+ #include "src/core/lib/promise/seq.h"
40
38
  #include "src/core/lib/slice/percent_encoding.h"
41
- #include "src/core/lib/slice/slice_internal.h"
42
- #include "src/core/lib/slice/slice_string_helpers.h"
43
39
  #include "src/core/lib/transport/status_conversion.h"
44
40
  #include "src/core/lib/transport/transport_impl.h"
45
41
 
46
- #define EXPECTED_CONTENT_TYPE "application/grpc"
47
- #define EXPECTED_CONTENT_TYPE_LENGTH (sizeof(EXPECTED_CONTENT_TYPE) - 1)
42
+ namespace grpc_core {
48
43
 
49
- /* default maximum size of payload eligible for GET request */
50
- static constexpr size_t kMaxPayloadSizeForGet = 2048;
51
-
52
- static void recv_initial_metadata_ready(void* user_data,
53
- grpc_error_handle error);
54
- static void recv_trailing_metadata_ready(void* user_data,
55
- grpc_error_handle error);
56
- static void on_send_message_next_done(void* arg, grpc_error_handle error);
57
- static void send_message_on_complete(void* arg, grpc_error_handle error);
44
+ const grpc_channel_filter HttpClientFilter::kFilter =
45
+ MakePromiseBasedFilter<HttpClientFilter, FilterEndpoint::kClient,
46
+ kFilterExaminesServerInitialMetadata>("http-client");
58
47
 
59
48
  namespace {
60
- struct call_data {
61
- call_data(grpc_call_element* elem, const grpc_call_element_args& args)
62
- : call_combiner(args.call_combiner) {
63
- GRPC_CLOSURE_INIT(&recv_initial_metadata_ready,
64
- ::recv_initial_metadata_ready, elem,
65
- grpc_schedule_on_exec_ctx);
66
- GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready,
67
- ::recv_trailing_metadata_ready, elem,
68
- grpc_schedule_on_exec_ctx);
69
- GRPC_CLOSURE_INIT(&on_send_message_next_done, ::on_send_message_next_done,
70
- elem, grpc_schedule_on_exec_ctx);
71
- GRPC_CLOSURE_INIT(&send_message_on_complete, ::send_message_on_complete,
72
- elem, grpc_schedule_on_exec_ctx);
73
- }
74
-
75
- ~call_data() { GRPC_ERROR_UNREF(recv_initial_metadata_error); }
76
-
77
- grpc_core::CallCombiner* call_combiner;
78
- // State for handling recv_initial_metadata ops.
79
- grpc_metadata_batch* recv_initial_metadata;
80
- grpc_error_handle recv_initial_metadata_error = GRPC_ERROR_NONE;
81
- grpc_closure* original_recv_initial_metadata_ready = nullptr;
82
- grpc_closure recv_initial_metadata_ready;
83
- // State for handling recv_trailing_metadata ops.
84
- grpc_metadata_batch* recv_trailing_metadata;
85
- grpc_closure* original_recv_trailing_metadata_ready;
86
- grpc_closure recv_trailing_metadata_ready;
87
- grpc_error_handle recv_trailing_metadata_error = GRPC_ERROR_NONE;
88
- bool seen_recv_trailing_metadata_ready = false;
89
- // State for handling send_message ops.
90
- grpc_transport_stream_op_batch* send_message_batch;
91
- size_t send_message_bytes_read = 0;
92
- grpc_core::ManualConstructor<grpc_core::ByteStreamCache> send_message_cache;
93
- grpc_core::ManualConstructor<grpc_core::ByteStreamCache::CachingByteStream>
94
- send_message_caching_stream;
95
- grpc_closure on_send_message_next_done;
96
- grpc_closure* original_send_message_on_complete;
97
- grpc_closure send_message_on_complete;
98
- };
99
-
100
- struct channel_data {
101
- grpc_core::HttpSchemeMetadata::ValueType static_scheme;
102
- grpc_core::Slice user_agent;
103
- size_t max_payload_size_for_get;
104
- };
105
- } // namespace
106
-
107
- static grpc_error_handle client_filter_incoming_metadata(
108
- grpc_metadata_batch* b) {
109
- if (auto* status = b->get_pointer(grpc_core::HttpStatusMetadata())) {
49
+ absl::Status CheckServerMetadata(ServerMetadata* b) {
50
+ if (auto* status = b->get_pointer(HttpStatusMetadata())) {
110
51
  /* If both gRPC status and HTTP status are provided in the response, we
111
52
  * should prefer the gRPC status code, as mentioned in
112
53
  * https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md.
113
54
  */
114
- const grpc_status_code* grpc_status =
115
- b->get_pointer(grpc_core::GrpcStatusMetadata());
55
+ const grpc_status_code* grpc_status = b->get_pointer(GrpcStatusMetadata());
116
56
  if (grpc_status != nullptr || *status == 200) {
117
- b->Remove(grpc_core::HttpStatusMetadata());
57
+ b->Remove(HttpStatusMetadata());
118
58
  } else {
119
- std::string msg =
120
- absl::StrCat("Received http2 header with status: ", *status);
121
- grpc_error_handle e = grpc_error_set_str(
122
- grpc_error_set_int(
123
- grpc_error_set_str(
124
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
125
- "Received http2 :status header with non-200 OK status"),
126
- GRPC_ERROR_STR_VALUE, std::to_string(*status)),
127
- GRPC_ERROR_INT_GRPC_STATUS,
59
+ return absl::Status(
60
+ static_cast<absl::StatusCode>(
128
61
  grpc_http2_status_to_grpc_status(*status)),
129
- GRPC_ERROR_STR_GRPC_MESSAGE, msg);
130
- return e;
131
- }
132
- }
133
-
134
- if (grpc_core::Slice* grpc_message =
135
- b->get_pointer(grpc_core::GrpcMessageMetadata())) {
136
- *grpc_message =
137
- grpc_core::PermissivePercentDecodeSlice(std::move(*grpc_message));
138
- }
139
-
140
- b->Remove(grpc_core::ContentTypeMetadata());
141
-
142
- return GRPC_ERROR_NONE;
143
- }
144
-
145
- static void recv_initial_metadata_ready(void* user_data,
146
- grpc_error_handle error) {
147
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
148
- call_data* calld = static_cast<call_data*>(elem->call_data);
149
- if (error == GRPC_ERROR_NONE) {
150
- error = client_filter_incoming_metadata(calld->recv_initial_metadata);
151
- calld->recv_initial_metadata_error = GRPC_ERROR_REF(error);
152
- } else {
153
- (void)GRPC_ERROR_REF(error);
154
- }
155
- grpc_closure* closure = calld->original_recv_initial_metadata_ready;
156
- calld->original_recv_initial_metadata_ready = nullptr;
157
- if (calld->seen_recv_trailing_metadata_ready) {
158
- GRPC_CALL_COMBINER_START(
159
- calld->call_combiner, &calld->recv_trailing_metadata_ready,
160
- calld->recv_trailing_metadata_error, "continue recv_trailing_metadata");
161
- }
162
- grpc_core::Closure::Run(DEBUG_LOCATION, closure, error);
163
- }
164
-
165
- static void recv_trailing_metadata_ready(void* user_data,
166
- grpc_error_handle error) {
167
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
168
- call_data* calld = static_cast<call_data*>(elem->call_data);
169
- if (calld->original_recv_initial_metadata_ready != nullptr) {
170
- calld->recv_trailing_metadata_error = GRPC_ERROR_REF(error);
171
- calld->seen_recv_trailing_metadata_ready = true;
172
- GRPC_CALL_COMBINER_STOP(calld->call_combiner,
173
- "deferring recv_trailing_metadata_ready until "
174
- "after recv_initial_metadata_ready");
175
- return;
176
- }
177
- if (error == GRPC_ERROR_NONE) {
178
- error = client_filter_incoming_metadata(calld->recv_trailing_metadata);
179
- } else {
180
- (void)GRPC_ERROR_REF(error);
181
- }
182
- error = grpc_error_add_child(
183
- error, GRPC_ERROR_REF(calld->recv_initial_metadata_error));
184
- grpc_core::Closure::Run(DEBUG_LOCATION,
185
- calld->original_recv_trailing_metadata_ready, error);
186
- }
187
-
188
- static void send_message_on_complete(void* arg, grpc_error_handle error) {
189
- grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
190
- call_data* calld = static_cast<call_data*>(elem->call_data);
191
- calld->send_message_cache.Destroy();
192
- // Set the batch's send_message bit back to true, so the retry code
193
- // above knows what was in this batch.
194
- calld->send_message_batch->send_message = true;
195
- grpc_core::Closure::Run(DEBUG_LOCATION,
196
- calld->original_send_message_on_complete,
197
- GRPC_ERROR_REF(error));
198
- }
199
-
200
- // Pulls a slice from the send_message byte stream, updating
201
- // calld->send_message_bytes_read.
202
- static grpc_error_handle pull_slice_from_send_message(call_data* calld) {
203
- grpc_slice incoming_slice;
204
- grpc_error_handle error =
205
- calld->send_message_caching_stream->Pull(&incoming_slice);
206
- if (error == GRPC_ERROR_NONE) {
207
- calld->send_message_bytes_read += GRPC_SLICE_LENGTH(incoming_slice);
208
- grpc_slice_unref_internal(incoming_slice);
209
- }
210
- return error;
211
- }
212
-
213
- // Reads as many slices as possible from the send_message byte stream.
214
- // Upon successful return, if calld->send_message_bytes_read ==
215
- // calld->send_message_caching_stream->length(), then we have completed
216
- // reading from the byte stream; otherwise, an async read has been dispatched
217
- // and on_send_message_next_done() will be invoked when it is complete.
218
- static grpc_error_handle read_all_available_send_message_data(
219
- call_data* calld) {
220
- while (calld->send_message_caching_stream->Next(
221
- SIZE_MAX, &calld->on_send_message_next_done)) {
222
- grpc_error_handle error = pull_slice_from_send_message(calld);
223
- if (error != GRPC_ERROR_NONE) return error;
224
- if (calld->send_message_bytes_read ==
225
- calld->send_message_caching_stream->length()) {
226
- break;
62
+ absl::StrCat("Received http2 header with status: ", *status));
227
63
  }
228
64
  }
229
- return GRPC_ERROR_NONE;
230
- }
231
65
 
232
- // Async callback for ByteStream::Next().
233
- static void on_send_message_next_done(void* arg, grpc_error_handle error) {
234
- grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
235
- call_data* calld = static_cast<call_data*>(elem->call_data);
236
- if (error != GRPC_ERROR_NONE) {
237
- grpc_transport_stream_op_batch_finish_with_failure(
238
- calld->send_message_batch, error, calld->call_combiner);
239
- return;
240
- }
241
- error = pull_slice_from_send_message(calld);
242
- if (error != GRPC_ERROR_NONE) {
243
- grpc_transport_stream_op_batch_finish_with_failure(
244
- calld->send_message_batch, error, calld->call_combiner);
245
- return;
66
+ if (Slice* grpc_message = b->get_pointer(GrpcMessageMetadata())) {
67
+ *grpc_message = PermissivePercentDecodeSlice(std::move(*grpc_message));
246
68
  }
247
- // There may or may not be more to read, but we don't care. If we got
248
- // here, then we know that all of the data was not available
249
- // synchronously, so we were not able to do a cached call. Instead,
250
- // we just reset the byte stream and then send down the batch as-is.
251
- calld->send_message_caching_stream->Reset();
252
- grpc_call_next_op(elem, calld->send_message_batch);
253
- }
254
69
 
255
- static char* slice_buffer_to_string(grpc_slice_buffer* slice_buffer) {
256
- char* payload_bytes =
257
- static_cast<char*>(gpr_malloc(slice_buffer->length + 1));
258
- size_t offset = 0;
259
- for (size_t i = 0; i < slice_buffer->count; ++i) {
260
- memcpy(payload_bytes + offset,
261
- GRPC_SLICE_START_PTR(slice_buffer->slices[i]),
262
- GRPC_SLICE_LENGTH(slice_buffer->slices[i]));
263
- offset += GRPC_SLICE_LENGTH(slice_buffer->slices[i]);
264
- }
265
- *(payload_bytes + offset) = '\0';
266
- return payload_bytes;
70
+ b->Remove(ContentTypeMetadata());
71
+ return absl::OkStatus();
267
72
  }
268
73
 
269
- // Modifies the path entry in the batch's send_initial_metadata to
270
- // append the base64-encoded query for a GET request.
271
- static void update_path_for_get(grpc_call_element* elem,
272
- grpc_transport_stream_op_batch* batch) {
273
- grpc_metadata_batch* b =
274
- batch->payload->send_initial_metadata.send_initial_metadata;
275
- call_data* calld = static_cast<call_data*>(elem->call_data);
276
- const grpc_core::Slice& path_slice =
277
- *b->get_pointer(grpc_core::HttpPathMetadata());
278
- /* sum up individual component's lengths and allocate enough memory to
279
- * hold combined path+query */
280
- size_t estimated_len = path_slice.size();
281
- estimated_len++; /* for the '?' */
282
- estimated_len += grpc_base64_estimate_encoded_size(
283
- batch->payload->send_message.send_message->length(),
284
- false /* multi_line */);
285
- grpc_core::MutableSlice path_with_query_slice =
286
- grpc_core::MutableSlice::CreateUninitialized(estimated_len);
287
- /* memcopy individual pieces into this slice */
288
- uint8_t* write_ptr = path_with_query_slice.begin();
289
- const uint8_t* original_path = path_slice.data();
290
- memcpy(write_ptr, original_path, path_slice.size());
291
- write_ptr += path_slice.size();
292
- *write_ptr++ = '?';
293
- char* payload_bytes =
294
- slice_buffer_to_string(calld->send_message_cache->cache_buffer());
295
- grpc_base64_encode_core(reinterpret_cast<char*>(write_ptr), payload_bytes,
296
- batch->payload->send_message.send_message->length(),
297
- true /* url_safe */, false /* multi_line */);
298
- gpr_free(payload_bytes);
299
- char* t = reinterpret_cast<char*>(path_with_query_slice.begin()) +
300
- path_slice.size();
301
- /* safe to use strlen since base64_encode will always add '\0' */
302
- /* substitute previous path with the new path+query */
303
- b->Set(grpc_core::HttpPathMetadata(),
304
- grpc_core::Slice(path_with_query_slice.TakeSubSlice(
305
- 0, path_slice.size() + strlen(t))));
74
+ HttpSchemeMetadata::ValueType SchemeFromArgs(const ChannelArgs& args) {
75
+ HttpSchemeMetadata::ValueType scheme = HttpSchemeMetadata::Parse(
76
+ args.GetString(GRPC_ARG_HTTP2_SCHEME).value_or(""),
77
+ [](absl::string_view, const Slice&) {});
78
+ if (scheme == HttpSchemeMetadata::kInvalid) return HttpSchemeMetadata::kHttp;
79
+ return scheme;
306
80
  }
307
81
 
308
- static void http_client_start_transport_stream_op_batch(
309
- grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
310
- call_data* calld = static_cast<call_data*>(elem->call_data);
311
- channel_data* channeld = static_cast<channel_data*>(elem->channel_data);
312
- GPR_TIMER_SCOPE("http_client_start_transport_stream_op_batch", 0);
313
-
314
- if (batch->recv_initial_metadata) {
315
- /* substitute our callback for the higher callback */
316
- calld->recv_initial_metadata =
317
- batch->payload->recv_initial_metadata.recv_initial_metadata;
318
- calld->original_recv_initial_metadata_ready =
319
- batch->payload->recv_initial_metadata.recv_initial_metadata_ready;
320
- batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
321
- &calld->recv_initial_metadata_ready;
322
- }
82
+ Slice UserAgentFromArgs(const ChannelArgs& args, const char* transport_name) {
83
+ std::vector<std::string> fields;
84
+ auto add = [&fields](absl::string_view x) {
85
+ if (!x.empty()) fields.push_back(std::string(x));
86
+ };
323
87
 
324
- if (batch->recv_trailing_metadata) {
325
- /* substitute our callback for the higher callback */
326
- calld->recv_trailing_metadata =
327
- batch->payload->recv_trailing_metadata.recv_trailing_metadata;
328
- calld->original_recv_trailing_metadata_ready =
329
- batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
330
- batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
331
- &calld->recv_trailing_metadata_ready;
332
- }
333
-
334
- grpc_error_handle error = GRPC_ERROR_NONE;
335
- bool batch_will_be_handled_asynchronously = false;
336
- if (batch->send_initial_metadata) {
337
- // Decide which HTTP VERB to use. We use GET if the request is marked
338
- // cacheable, and the operation contains both initial metadata and send
339
- // message, and the payload is below the size threshold, and all the data
340
- // for this request is immediately available.
341
- grpc_core::HttpMethodMetadata::ValueType method =
342
- grpc_core::HttpMethodMetadata::kPost;
343
- if (batch->send_message &&
344
- (batch->payload->send_initial_metadata.send_initial_metadata_flags &
345
- GRPC_INITIAL_METADATA_CACHEABLE_REQUEST) &&
346
- batch->payload->send_message.send_message->length() <
347
- channeld->max_payload_size_for_get) {
348
- calld->send_message_bytes_read = 0;
349
- calld->send_message_cache.Init(
350
- std::move(batch->payload->send_message.send_message));
351
- calld->send_message_caching_stream.Init(calld->send_message_cache.get());
352
- batch->payload->send_message.send_message.reset(
353
- calld->send_message_caching_stream.get());
354
- calld->original_send_message_on_complete = batch->on_complete;
355
- batch->on_complete = &calld->send_message_on_complete;
356
- calld->send_message_batch = batch;
357
- error = read_all_available_send_message_data(calld);
358
- if (error != GRPC_ERROR_NONE) goto done;
359
- // If all the data has been read, then we can use GET.
360
- if (calld->send_message_bytes_read ==
361
- calld->send_message_caching_stream->length()) {
362
- method = grpc_core::HttpMethodMetadata::kGet;
363
- update_path_for_get(elem, batch);
364
- batch->send_message = false;
365
- calld->send_message_caching_stream->Orphan();
366
- } else {
367
- // Not all data is available. The batch will be sent down
368
- // asynchronously in on_send_message_next_done().
369
- batch_will_be_handled_asynchronously = true;
370
- // Fall back to POST.
371
- gpr_log(GPR_DEBUG,
372
- "Request is marked Cacheable but not all data is available. "
373
- "Falling back to POST");
374
- }
375
- } else if (batch->payload->send_initial_metadata
376
- .send_initial_metadata_flags &
377
- GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) {
378
- method = grpc_core::HttpMethodMetadata::kPut;
379
- }
380
-
381
- /* Send : prefixed headers, which have to be before any application
382
- layer headers. */
383
- batch->payload->send_initial_metadata.send_initial_metadata->Set(
384
- grpc_core::HttpMethodMetadata(), method);
385
- batch->payload->send_initial_metadata.send_initial_metadata->Set(
386
- grpc_core::HttpSchemeMetadata(), channeld->static_scheme);
387
- batch->payload->send_initial_metadata.send_initial_metadata->Set(
388
- grpc_core::TeMetadata(), grpc_core::TeMetadata::kTrailers);
389
- batch->payload->send_initial_metadata.send_initial_metadata->Set(
390
- grpc_core::ContentTypeMetadata(),
391
- grpc_core::ContentTypeMetadata::kApplicationGrpc);
392
- batch->payload->send_initial_metadata.send_initial_metadata->Set(
393
- grpc_core::UserAgentMetadata(), channeld->user_agent.Ref());
394
- }
395
-
396
- done:
397
- if (error != GRPC_ERROR_NONE) {
398
- grpc_transport_stream_op_batch_finish_with_failure(batch, error,
399
- calld->call_combiner);
400
- } else if (!batch_will_be_handled_asynchronously) {
401
- grpc_call_next_op(elem, batch);
402
- }
403
- }
404
-
405
- /* Constructor for call_data */
406
- static grpc_error_handle http_client_init_call_elem(
407
- grpc_call_element* elem, const grpc_call_element_args* args) {
408
- new (elem->call_data) call_data(elem, *args);
409
- return GRPC_ERROR_NONE;
410
- }
411
-
412
- /* Destructor for call_data */
413
- static void http_client_destroy_call_elem(
414
- grpc_call_element* elem, const grpc_call_final_info* /*final_info*/,
415
- grpc_closure* /*ignored*/) {
416
- call_data* calld = static_cast<call_data*>(elem->call_data);
417
- calld->~call_data();
418
- }
419
-
420
- static grpc_core::HttpSchemeMetadata::ValueType scheme_from_args(
421
- const grpc_channel_args* args) {
422
- if (args != nullptr) {
423
- for (size_t i = 0; i < args->num_args; ++i) {
424
- if (args->args[i].type == GRPC_ARG_STRING &&
425
- 0 == strcmp(args->args[i].key, GRPC_ARG_HTTP2_SCHEME)) {
426
- grpc_core::HttpSchemeMetadata::ValueType scheme =
427
- grpc_core::HttpSchemeMetadata::Parse(
428
- args->args[i].value.string,
429
- [](absl::string_view, const grpc_core::Slice&) {});
430
- if (scheme != grpc_core::HttpSchemeMetadata::kInvalid) return scheme;
431
- }
432
- }
433
- }
434
- return grpc_core::HttpSchemeMetadata::kHttp;
435
- }
436
-
437
- static size_t max_payload_size_from_args(const grpc_channel_args* args) {
438
- if (args != nullptr) {
439
- for (size_t i = 0; i < args->num_args; ++i) {
440
- if (0 == strcmp(args->args[i].key, GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET)) {
441
- if (args->args[i].type != GRPC_ARG_INTEGER) {
442
- gpr_log(GPR_ERROR, "%s: must be an integer",
443
- GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET);
444
- } else {
445
- return static_cast<size_t>(args->args[i].value.integer);
446
- }
447
- }
448
- }
449
- }
450
- return kMaxPayloadSizeForGet;
451
- }
452
-
453
- static grpc_core::Slice user_agent_from_args(const grpc_channel_args* args,
454
- const char* transport_name) {
455
- std::vector<std::string> user_agent_fields;
456
-
457
- for (size_t i = 0; args && i < args->num_args; i++) {
458
- if (0 == strcmp(args->args[i].key, GRPC_ARG_PRIMARY_USER_AGENT_STRING)) {
459
- if (args->args[i].type != GRPC_ARG_STRING) {
460
- gpr_log(GPR_ERROR, "Channel argument '%s' should be a string",
461
- GRPC_ARG_PRIMARY_USER_AGENT_STRING);
462
- } else {
463
- user_agent_fields.push_back(args->args[i].value.string);
464
- }
465
- }
466
- }
467
-
468
- user_agent_fields.push_back(
469
- absl::StrFormat("grpc-c/%s (%s; %s)", grpc_version_string(),
88
+ add(args.GetString(GRPC_ARG_PRIMARY_USER_AGENT_STRING).value_or(""));
89
+ add(absl::StrFormat("grpc-c/%s (%s; %s)", grpc_version_string(),
470
90
  GPR_PLATFORM_STRING, transport_name));
91
+ add(args.GetString(GRPC_ARG_SECONDARY_USER_AGENT_STRING).value_or(""));
471
92
 
472
- for (size_t i = 0; args && i < args->num_args; i++) {
473
- if (0 == strcmp(args->args[i].key, GRPC_ARG_SECONDARY_USER_AGENT_STRING)) {
474
- if (args->args[i].type != GRPC_ARG_STRING) {
475
- gpr_log(GPR_ERROR, "Channel argument '%s' should be a string",
476
- GRPC_ARG_SECONDARY_USER_AGENT_STRING);
477
- } else {
478
- user_agent_fields.push_back(args->args[i].value.string);
479
- }
480
- }
481
- }
482
-
483
- std::string user_agent_string = absl::StrJoin(user_agent_fields, " ");
484
- return grpc_core::Slice::FromCopiedString(user_agent_string.c_str());
485
- }
486
-
487
- /* Constructor for channel_data */
488
- static grpc_error_handle http_client_init_channel_elem(
489
- grpc_channel_element* elem, grpc_channel_element_args* args) {
490
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
491
- new (chand) channel_data();
492
- GPR_ASSERT(!args->is_last);
493
- auto* transport = grpc_channel_args_find_pointer<grpc_transport>(
494
- args->channel_args, GRPC_ARG_TRANSPORT);
495
- GPR_ASSERT(transport != nullptr);
496
- chand->static_scheme = scheme_from_args(args->channel_args);
497
- chand->max_payload_size_for_get =
498
- max_payload_size_from_args(args->channel_args);
499
- chand->user_agent = grpc_core::Slice(
500
- user_agent_from_args(args->channel_args, transport->vtable->name));
501
- return GRPC_ERROR_NONE;
502
- }
503
-
504
- /* Destructor for channel data */
505
- static void http_client_destroy_channel_elem(grpc_channel_element* elem) {
506
- static_cast<channel_data*>(elem->channel_data)->~channel_data();
93
+ return Slice::FromCopiedString(absl::StrJoin(fields, " "));
507
94
  }
95
+ } // namespace
508
96
 
509
- const grpc_channel_filter grpc_http_client_filter = {
510
- http_client_start_transport_stream_op_batch,
511
- nullptr,
512
- grpc_channel_next_op,
513
- sizeof(call_data),
514
- http_client_init_call_elem,
515
- grpc_call_stack_ignore_set_pollset_or_pollset_set,
516
- http_client_destroy_call_elem,
517
- sizeof(channel_data),
518
- http_client_init_channel_elem,
519
- http_client_destroy_channel_elem,
520
- grpc_channel_next_get_info,
521
- "http-client"};
97
+ ArenaPromise<ServerMetadataHandle> HttpClientFilter::MakeCallPromise(
98
+ CallArgs call_args, NextPromiseFactory next_promise_factory) {
99
+ auto& md = call_args.client_initial_metadata;
100
+ md->Set(HttpMethodMetadata(), HttpMethodMetadata::kPost);
101
+ md->Set(HttpSchemeMetadata(), scheme_);
102
+ md->Set(TeMetadata(), TeMetadata::kTrailers);
103
+ md->Set(ContentTypeMetadata(), ContentTypeMetadata::kApplicationGrpc);
104
+ md->Set(UserAgentMetadata(), user_agent_.Ref());
105
+
106
+ auto* read_latch = GetContext<Arena>()->New<Latch<ServerMetadata*>>();
107
+ auto* write_latch =
108
+ absl::exchange(call_args.server_initial_metadata, read_latch);
109
+
110
+ return CallPushPull(
111
+ Seq(next_promise_factory(std::move(call_args)),
112
+ [](ServerMetadataHandle md) -> ServerMetadataHandle {
113
+ auto r = CheckServerMetadata(md.get());
114
+ if (!r.ok()) return ServerMetadataHandle(r);
115
+ return md;
116
+ }),
117
+ []() { return absl::OkStatus(); },
118
+ Seq(read_latch->Wait(),
119
+ [write_latch](ServerMetadata** md) -> absl::Status {
120
+ auto r =
121
+ *md == nullptr ? absl::OkStatus() : CheckServerMetadata(*md);
122
+ write_latch->Set(*md);
123
+ return r;
124
+ }));
125
+ }
126
+
127
+ HttpClientFilter::HttpClientFilter(HttpSchemeMetadata::ValueType scheme,
128
+ Slice user_agent)
129
+ : scheme_(scheme), user_agent_(std::move(user_agent)) {}
130
+
131
+ absl::StatusOr<HttpClientFilter> HttpClientFilter::Create(ChannelArgs args,
132
+ ChannelFilter::Args) {
133
+ auto* transport = args.GetObject<grpc_transport>();
134
+ if (transport == nullptr) {
135
+ return absl::InvalidArgumentError("HttpClientFilter needs a transport");
136
+ }
137
+ return HttpClientFilter(SchemeFromArgs(args),
138
+ UserAgentFromArgs(args, transport->vtable->name));
139
+ }
140
+
141
+ } // namespace grpc_core
@@ -21,11 +21,28 @@
21
21
  #include <grpc/support/port_platform.h>
22
22
 
23
23
  #include "src/core/lib/channel/channel_stack.h"
24
+ #include "src/core/lib/channel/promise_based_filter.h"
24
25
 
25
- /* Processes metadata on the client side for HTTP2 transports */
26
- extern const grpc_channel_filter grpc_http_client_filter;
26
+ namespace grpc_core {
27
27
 
28
- /* Channel arg to determine maximum size of payload eligible for GET request */
29
- #define GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET "grpc.max_payload_size_for_get"
28
+ class HttpClientFilter : public ChannelFilter {
29
+ public:
30
+ static const grpc_channel_filter kFilter;
31
+
32
+ static absl::StatusOr<HttpClientFilter> Create(
33
+ ChannelArgs args, ChannelFilter::Args filter_args);
34
+
35
+ // Construct a promise for one call.
36
+ ArenaPromise<ServerMetadataHandle> MakeCallPromise(
37
+ CallArgs call_args, NextPromiseFactory next_promise_factory) override;
38
+
39
+ private:
40
+ HttpClientFilter(HttpSchemeMetadata::ValueType scheme, Slice user_agent);
41
+
42
+ HttpSchemeMetadata::ValueType scheme_;
43
+ Slice user_agent_;
44
+ };
45
+
46
+ } // namespace grpc_core
30
47
 
31
48
  #endif /* GRPC_CORE_EXT_FILTERS_HTTP_CLIENT_HTTP_CLIENT_FILTER_H */
@@ -40,40 +40,35 @@
40
40
  namespace grpc_core {
41
41
 
42
42
  absl::StatusOr<ClientAuthorityFilter> ClientAuthorityFilter::Create(
43
- const grpc_channel_args* args, ChannelFilter::Args) {
44
- const grpc_arg* default_authority_arg =
45
- grpc_channel_args_find(args, GRPC_ARG_DEFAULT_AUTHORITY);
46
- if (default_authority_arg == nullptr) {
43
+ ChannelArgs args, ChannelFilter::Args) {
44
+ absl::optional<absl::string_view> default_authority =
45
+ args.GetString(GRPC_ARG_DEFAULT_AUTHORITY);
46
+ if (!default_authority.has_value()) {
47
47
  return absl::InvalidArgumentError(
48
- "GRPC_ARG_DEFAULT_AUTHORITY channel arg. not found. Note that direct "
49
- "channels must explicitly specify a value for this argument.");
48
+ "GRPC_ARG_DEFAULT_AUTHORITY string channel arg. not found. Note that "
49
+ "direct channels must explicitly specify a value for this argument.");
50
50
  }
51
- const char* default_authority_str =
52
- grpc_channel_arg_get_string(default_authority_arg);
53
- if (default_authority_str == nullptr) {
54
- return absl::InvalidArgumentError(
55
- "GRPC_ARG_DEFAULT_AUTHORITY channel arg. must be a string");
56
- }
57
- return ClientAuthorityFilter(Slice::FromCopiedString(default_authority_str));
51
+ return ClientAuthorityFilter(Slice::FromCopiedString(*default_authority));
58
52
  }
59
53
 
60
- ArenaPromise<TrailingMetadata> ClientAuthorityFilter::MakeCallPromise(
61
- ClientInitialMetadata initial_metadata,
62
- NextPromiseFactory next_promise_factory) {
54
+ ArenaPromise<ServerMetadataHandle> ClientAuthorityFilter::MakeCallPromise(
55
+ CallArgs call_args, NextPromiseFactory next_promise_factory) {
63
56
  // If no authority is set, set the default authority.
64
- if (initial_metadata->get_pointer(HttpAuthorityMetadata()) == nullptr) {
65
- initial_metadata->Set(HttpAuthorityMetadata(), default_authority_.Ref());
57
+ if (call_args.client_initial_metadata->get_pointer(HttpAuthorityMetadata()) ==
58
+ nullptr) {
59
+ call_args.client_initial_metadata->Set(HttpAuthorityMetadata(),
60
+ default_authority_.Ref());
66
61
  }
67
62
  // We have no asynchronous work, so we can just ask the next promise to run,
68
63
  // passing down initial_metadata.
69
- return next_promise_factory(std::move(initial_metadata));
64
+ return next_promise_factory(std::move(call_args));
70
65
  }
71
66
 
72
- namespace {
73
- const grpc_channel_filter grpc_client_authority_filter =
67
+ const grpc_channel_filter ClientAuthorityFilter::kFilter =
74
68
  MakePromiseBasedFilter<ClientAuthorityFilter, FilterEndpoint::kClient>(
75
69
  "authority");
76
70
 
71
+ namespace {
77
72
  bool add_client_authority_filter(ChannelStackBuilder* builder) {
78
73
  const grpc_channel_args* channel_args = builder->channel_args();
79
74
  const grpc_arg* disable_client_authority_filter_arg = grpc_channel_args_find(
@@ -85,7 +80,7 @@ bool add_client_authority_filter(ChannelStackBuilder* builder) {
85
80
  return true;
86
81
  }
87
82
  }
88
- builder->PrependFilter(&grpc_client_authority_filter, nullptr);
83
+ builder->PrependFilter(&ClientAuthorityFilter::kFilter, nullptr);
89
84
  return true;
90
85
  }
91
86
  } // namespace