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
@@ -60,20 +60,6 @@ grpc_error_handle grpc_call_create(grpc_call_create_args* args,
60
60
 
61
61
  void grpc_call_set_completion_queue(grpc_call* call, grpc_completion_queue* cq);
62
62
 
63
- #ifndef NDEBUG
64
- void grpc_call_internal_ref(grpc_call* call, const char* reason);
65
- void grpc_call_internal_unref(grpc_call* call, const char* reason);
66
- #define GRPC_CALL_INTERNAL_REF(call, reason) \
67
- grpc_call_internal_ref(call, reason)
68
- #define GRPC_CALL_INTERNAL_UNREF(call, reason) \
69
- grpc_call_internal_unref(call, reason)
70
- #else
71
- void grpc_call_internal_ref(grpc_call* call);
72
- void grpc_call_internal_unref(grpc_call* call);
73
- #define GRPC_CALL_INTERNAL_REF(call, reason) grpc_call_internal_ref(call)
74
- #define GRPC_CALL_INTERNAL_UNREF(call, reason) grpc_call_internal_unref(call)
75
- #endif
76
-
77
63
  grpc_core::Arena* grpc_call_get_arena(grpc_call* call);
78
64
 
79
65
  grpc_call_stack* grpc_call_get_call_stack(grpc_call* call);
@@ -31,6 +31,7 @@
31
31
  #include <grpc/support/string_util.h>
32
32
 
33
33
  #include "src/core/lib/channel/channel_args.h"
34
+ #include "src/core/lib/channel/channel_stack_builder_impl.h"
34
35
  #include "src/core/lib/channel/channel_trace.h"
35
36
  #include "src/core/lib/channel/channelz.h"
36
37
  #include "src/core/lib/channel/channelz_registry.h"
@@ -241,8 +242,8 @@ grpc_channel* grpc_channel_create_internal(
241
242
  // grpc_shutdown() when the channel is actually destroyed, thus
242
243
  // ensuring that shutdown is deferred until that point.
243
244
  grpc_init();
244
- grpc_core::ChannelStackBuilder builder(
245
- grpc_channel_stack_type_string(channel_stack_type));
245
+ grpc_core::ChannelStackBuilderImpl builder(
246
+ grpc_channel_stack_type_string(channel_stack_type), channel_stack_type);
246
247
  const grpc_core::UniquePtr<char> default_authority =
247
248
  get_default_authority(input_args);
248
249
  grpc_channel_args* args =
@@ -258,7 +259,7 @@ grpc_channel* grpc_channel_create_internal(
258
259
  optional_transport);
259
260
  grpc_channel_args_destroy(args);
260
261
  if (!grpc_core::CoreConfiguration::Get().channel_init().CreateStack(
261
- &builder, channel_stack_type)) {
262
+ &builder)) {
262
263
  grpc_shutdown(); // Since we won't call destroy_channel().
263
264
  return nullptr;
264
265
  }
@@ -45,9 +45,8 @@ ChannelInit ChannelInit::Builder::Build() {
45
45
  return result;
46
46
  }
47
47
 
48
- bool ChannelInit::CreateStack(ChannelStackBuilder* builder,
49
- grpc_channel_stack_type type) const {
50
- for (const auto& stage : slots_[type]) {
48
+ bool ChannelInit::CreateStack(ChannelStackBuilder* builder) const {
49
+ for (const auto& stage : slots_[builder->channel_stack_type()]) {
51
50
  if (!stage(builder)) return false;
52
51
  }
53
52
  return true;
@@ -24,7 +24,7 @@
24
24
  #include <functional>
25
25
  #include <vector>
26
26
 
27
- #include "src/core/lib/surface/channel_stack_type.h"
27
+ #include "src/core/lib/channel/channel_stack_builder.h"
28
28
 
29
29
  #define GRPC_CHANNEL_INIT_BUILTIN_PRIORITY 10000
30
30
 
@@ -35,8 +35,6 @@
35
35
 
36
36
  namespace grpc_core {
37
37
 
38
- class ChannelStackBuilder;
39
-
40
38
  class ChannelInit {
41
39
  public:
42
40
  /// One stage of mutation: call functions against \a builder to influence the
@@ -72,10 +70,8 @@ class ChannelInit {
72
70
  };
73
71
 
74
72
  /// Construct a channel stack of some sort: see channel_stack.h for details
75
- /// \a type is the type of channel stack to create
76
73
  /// \a builder is the channel stack builder to build into.
77
- bool CreateStack(ChannelStackBuilder* builder,
78
- grpc_channel_stack_type type) const;
74
+ bool CreateStack(ChannelStackBuilder* builder) const;
79
75
 
80
76
  private:
81
77
  std::vector<Stage> slots_[GRPC_NUM_CHANNEL_STACK_TYPES];
@@ -86,7 +86,7 @@ static bool maybe_prepend_client_auth_filter(
86
86
  if (args) {
87
87
  for (size_t i = 0; i < args->num_args; i++) {
88
88
  if (0 == strcmp(GRPC_ARG_SECURITY_CONNECTOR, args->args[i].key)) {
89
- builder->PrependFilter(&grpc_client_auth_filter, nullptr);
89
+ builder->PrependFilter(&grpc_core::ClientAuthFilter::kFilter, nullptr);
90
90
  break;
91
91
  }
92
92
  }
@@ -479,7 +479,6 @@ class ChannelBroadcaster {
479
479
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown"),
480
480
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK)
481
481
  : GRPC_ERROR_NONE;
482
- op->set_accept_stream = true;
483
482
  sc->slice = grpc_slice_from_copied_string("Server shutdown");
484
483
  op->disconnect_with_error = send_disconnect;
485
484
  elem =
@@ -685,7 +684,7 @@ Server::RegisteredMethod* Server::RegisterMethod(
685
684
  return nullptr;
686
685
  }
687
686
  }
688
- if ((flags & ~GRPC_INITIAL_METADATA_USED_MASK) != 0) {
687
+ if (flags != 0) {
689
688
  gpr_log(GPR_ERROR, "grpc_server_register_method invalid flags 0x%08x",
690
689
  flags);
691
690
  return nullptr;
@@ -1062,7 +1061,7 @@ void Server::ChannelData::InitTransport(RefCountedPtr<Server> server,
1062
1061
  }
1063
1062
 
1064
1063
  Server::ChannelRegisteredMethod* Server::ChannelData::GetRegisteredMethod(
1065
- const grpc_slice& host, const grpc_slice& path, bool is_idempotent) {
1064
+ const grpc_slice& host, const grpc_slice& path) {
1066
1065
  if (registered_methods_ == nullptr) return nullptr;
1067
1066
  /* TODO(ctiller): unify these two searches */
1068
1067
  /* check for an exact match with host */
@@ -1075,10 +1074,6 @@ Server::ChannelRegisteredMethod* Server::ChannelData::GetRegisteredMethod(
1075
1074
  if (!rm->has_host) continue;
1076
1075
  if (rm->host != host) continue;
1077
1076
  if (rm->method != path) continue;
1078
- if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
1079
- !is_idempotent) {
1080
- continue;
1081
- }
1082
1077
  return rm;
1083
1078
  }
1084
1079
  /* check for a wildcard method definition (no host set) */
@@ -1089,10 +1084,6 @@ Server::ChannelRegisteredMethod* Server::ChannelData::GetRegisteredMethod(
1089
1084
  if (rm->server_registered_method == nullptr) break;
1090
1085
  if (rm->has_host) continue;
1091
1086
  if (rm->method != path) continue;
1092
- if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
1093
- !is_idempotent) {
1094
- continue;
1095
- }
1096
1087
  return rm;
1097
1088
  }
1098
1089
  return nullptr;
@@ -1299,9 +1290,7 @@ void Server::CallData::StartNewRpc(grpc_call_element* elem) {
1299
1290
  GRPC_SRM_PAYLOAD_NONE;
1300
1291
  if (path_.has_value() && host_.has_value()) {
1301
1292
  ChannelRegisteredMethod* rm =
1302
- chand->GetRegisteredMethod(host_->c_slice(), path_->c_slice(),
1303
- (recv_initial_metadata_flags_ &
1304
- GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST));
1293
+ chand->GetRegisteredMethod(host_->c_slice(), path_->c_slice());
1305
1294
  if (rm != nullptr) {
1306
1295
  matcher_ = rm->server_registered_method->matcher.get();
1307
1296
  payload_handling = rm->server_registered_method->payload_handling;
@@ -200,8 +200,7 @@ class Server : public InternallyRefCounted<Server>,
200
200
  size_t cq_idx() const { return cq_idx_; }
201
201
 
202
202
  ChannelRegisteredMethod* GetRegisteredMethod(const grpc_slice& host,
203
- const grpc_slice& path,
204
- bool is_idempotent);
203
+ const grpc_slice& path);
205
204
 
206
205
  // Filter vtable functions.
207
206
  static grpc_error_handle InitChannelElement(
@@ -23,6 +23,6 @@
23
23
 
24
24
  #include <grpc/grpc.h>
25
25
 
26
- const char* grpc_version_string(void) { return "23.0.0"; }
26
+ const char* grpc_version_string(void) { return "24.0.0"; }
27
27
 
28
- const char* grpc_g_stands_for(void) { return "gravity"; }
28
+ const char* grpc_g_stands_for(void) { return "golazo"; }
@@ -51,6 +51,7 @@ SliceBufferByteStream::~SliceBufferByteStream() {}
51
51
  void SliceBufferByteStream::Orphan() {
52
52
  grpc_slice_buffer_destroy_internal(&backing_buffer_);
53
53
  GRPC_ERROR_UNREF(shutdown_error_);
54
+ shutdown_error_ = GRPC_ERROR_NONE;
54
55
  // Note: We do not actually delete the object here, since
55
56
  // SliceBufferByteStream is usually allocated as part of a larger
56
57
  // object and has an OrphanablePtr of itself passed down through the
@@ -107,6 +108,7 @@ ByteStreamCache::CachingByteStream::~CachingByteStream() {}
107
108
 
108
109
  void ByteStreamCache::CachingByteStream::Orphan() {
109
110
  GRPC_ERROR_UNREF(shutdown_error_);
111
+ shutdown_error_ = GRPC_ERROR_NONE;
110
112
  // Note: We do not actually delete the object here, since
111
113
  // CachingByteStream is usually allocated as part of a larger
112
114
  // object and has an OrphanablePtr of itself passed down through the
@@ -45,6 +45,8 @@
45
45
  #include "src/core/lib/transport/parsed_metadata.h"
46
46
  #include "src/core/lib/transport/timeout_encoding.h"
47
47
 
48
+ struct grpc_call_final_info;
49
+
48
50
  namespace grpc_core {
49
51
 
50
52
  // grpc-timeout metadata trait.
@@ -224,7 +226,6 @@ struct HttpMethodMetadata {
224
226
  static constexpr bool kRepeatable = false;
225
227
  enum ValueType {
226
228
  kPost,
227
- kPut,
228
229
  kGet,
229
230
  kInvalid,
230
231
  };
@@ -235,8 +236,6 @@ struct HttpMethodMetadata {
235
236
  auto value_string = value.as_string_view();
236
237
  if (value_string == "POST") {
237
238
  out = kPost;
238
- } else if (value_string == "PUT") {
239
- out = kPut;
240
239
  } else if (value_string == "GET") {
241
240
  out = kGet;
242
241
  } else {
@@ -251,8 +250,6 @@ struct HttpMethodMetadata {
251
250
  switch (x) {
252
251
  case kPost:
253
252
  return StaticSlice::FromStaticString("POST");
254
- case kPut:
255
- return StaticSlice::FromStaticString("PUT");
256
253
  case kGet:
257
254
  return StaticSlice::FromStaticString("GET");
258
255
  default:
@@ -263,8 +260,6 @@ struct HttpMethodMetadata {
263
260
  switch (content_type) {
264
261
  case kPost:
265
262
  return "POST";
266
- case kPut:
267
- return "PUT";
268
263
  case kGet:
269
264
  return "GET";
270
265
  default:
@@ -533,6 +528,14 @@ struct GrpcStreamNetworkState {
533
528
  }
534
529
  };
535
530
 
531
+ // Annotation added by a server transport to note the peer making a request.
532
+ struct PeerString {
533
+ static absl::string_view DebugKey() { return "PeerString"; }
534
+ static constexpr bool kRepeatable = false;
535
+ using ValueType = absl::string_view;
536
+ static std::string DisplayValue(ValueType x) { return std::string(x); }
537
+ };
538
+
536
539
  // Annotation added by various systems to describe the reason for a failure.
537
540
  struct GrpcStatusContext {
538
541
  static absl::string_view DebugKey() { return "GrpcStatusContext"; }
@@ -1381,7 +1384,8 @@ using grpc_metadata_batch_base = grpc_core::MetadataMap<
1381
1384
  grpc_core::GrpcTagsBinMetadata, grpc_core::GrpcLbClientStatsMetadata,
1382
1385
  grpc_core::LbCostBinMetadata, grpc_core::LbTokenMetadata,
1383
1386
  // Non-encodable things
1384
- grpc_core::GrpcStreamNetworkState, grpc_core::GrpcStatusContext>;
1387
+ grpc_core::GrpcStreamNetworkState, grpc_core::PeerString,
1388
+ grpc_core::GrpcStatusContext>;
1385
1389
 
1386
1390
  struct grpc_metadata_batch : public grpc_metadata_batch_base {
1387
1391
  using grpc_metadata_batch_base::grpc_metadata_batch_base;
@@ -31,6 +31,7 @@
31
31
  #include "src/core/lib/iomgr/pollset.h"
32
32
  #include "src/core/lib/iomgr/pollset_set.h"
33
33
  #include "src/core/lib/promise/arena_promise.h"
34
+ #include "src/core/lib/promise/latch.h"
34
35
  #include "src/core/lib/resource_quota/arena.h"
35
36
  #include "src/core/lib/slice/slice_internal.h"
36
37
  #include "src/core/lib/transport/byte_stream.h"
@@ -43,6 +44,8 @@
43
44
  #define GRPC_PROTOCOL_VERSION_MIN_MAJOR 2
44
45
  #define GRPC_PROTOCOL_VERSION_MIN_MINOR 1
45
46
 
47
+ #define GRPC_ARG_TRANSPORT "grpc.internal.transport"
48
+
46
49
  namespace grpc_core {
47
50
  // TODO(ctiller): eliminate once MetadataHandle is constructable directly.
48
51
  namespace promise_filter_detail {
@@ -97,23 +100,35 @@ class MetadataHandle {
97
100
  T* handle_ = nullptr;
98
101
  };
99
102
 
100
- // Trailing metadata type
103
+ // Server metadata type
101
104
  // TODO(ctiller): This should be a bespoke instance of MetadataMap<>
102
- using TrailingMetadata = MetadataHandle<grpc_metadata_batch>;
105
+ using ServerMetadata = grpc_metadata_batch;
106
+ using ServerMetadataHandle = MetadataHandle<ServerMetadata>;
103
107
 
104
108
  // Ok/not-ok check for trailing metadata, so that it can be used as result types
105
109
  // for TrySeq.
106
- inline bool IsStatusOk(const TrailingMetadata& m) {
110
+ inline bool IsStatusOk(const ServerMetadataHandle& m) {
107
111
  return m->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN) ==
108
112
  GRPC_STATUS_OK;
109
113
  }
110
114
 
111
115
  // Client initial metadata type
112
116
  // TODO(ctiller): This should be a bespoke instance of MetadataMap<>
113
- using ClientInitialMetadata = MetadataHandle<grpc_metadata_batch>;
117
+ using ClientMetadata = grpc_metadata_batch;
118
+ using ClientMetadataHandle = MetadataHandle<ClientMetadata>;
119
+
120
+ // Server initial metadata type
121
+ // TODO(ctiller): This should be a bespoke instance of MetadataMap<>
122
+ using ServerMetadataHandle = MetadataHandle<grpc_metadata_batch>;
123
+
124
+ struct CallArgs {
125
+ ClientMetadataHandle client_initial_metadata;
126
+ Latch<ServerMetadata*>* server_initial_metadata;
127
+ };
114
128
 
115
129
  using NextPromiseFactory =
116
- std::function<ArenaPromise<TrailingMetadata>(ClientInitialMetadata)>;
130
+ std::function<ArenaPromise<ServerMetadataHandle>(CallArgs)>;
131
+
117
132
  } // namespace grpc_core
118
133
 
119
134
  /* forward declarations */
@@ -45,9 +45,8 @@ typedef struct grpc_transport_vtable {
45
45
  - allocation of memory for call data (sizeof_stream may be ignored)
46
46
  There is an on-going migration to move all filters to providing this, and
47
47
  then to drop perform_stream_op. */
48
- grpc_core::ArenaPromise<grpc_core::TrailingMetadata> (*make_call_promise)(
49
- grpc_transport* self, grpc_core::ClientInitialMetadata initial_metadata,
50
- grpc_core::NextPromiseFactory next_promise_factory);
48
+ grpc_core::ArenaPromise<grpc_core::ServerMetadataHandle> (*make_call_promise)(
49
+ grpc_transport* self, grpc_core::ClientMetadataHandle initial_metadata);
51
50
 
52
51
  /* implementation of grpc_transport_set_pollset */
53
52
  void (*set_pollset)(grpc_transport* self, grpc_stream* stream,
@@ -77,6 +76,8 @@ typedef struct grpc_transport_vtable {
77
76
 
78
77
  /* an instance of a grpc transport */
79
78
  struct grpc_transport {
79
+ struct RawPointerChannelArgTag {};
80
+ static absl::string_view ChannelArgName() { return GRPC_ARG_TRANSPORT; }
80
81
  /* pointer to a vtable defining operations on this transport */
81
82
  const grpc_transport_vtable* vtable;
82
83
  };
@@ -80,12 +80,11 @@ extern void BuildClientChannelConfiguration(
80
80
  extern void SecurityRegisterHandshakerFactories(
81
81
  CoreConfiguration::Builder* builder);
82
82
  extern void RegisterClientAuthorityFilter(CoreConfiguration::Builder* builder);
83
- extern void RegisterClientIdleFilter(CoreConfiguration::Builder* builder);
83
+ extern void RegisterChannelIdleFilters(CoreConfiguration::Builder* builder);
84
84
  extern void RegisterDeadlineFilter(CoreConfiguration::Builder* builder);
85
85
  extern void RegisterGrpcLbLoadReportingFilter(
86
86
  CoreConfiguration::Builder* builder);
87
87
  extern void RegisterHttpFilters(CoreConfiguration::Builder* builder);
88
- extern void RegisterMaxAgeFilter(CoreConfiguration::Builder* builder);
89
88
  extern void RegisterMessageSizeFilter(CoreConfiguration::Builder* builder);
90
89
  extern void RegisterSecurityFilters(CoreConfiguration::Builder* builder);
91
90
  extern void RegisterServiceConfigChannelArgFilter(
@@ -105,10 +104,9 @@ void BuildCoreConfiguration(CoreConfiguration::Builder* builder) {
105
104
  BuildClientChannelConfiguration(builder);
106
105
  SecurityRegisterHandshakerFactories(builder);
107
106
  RegisterClientAuthorityFilter(builder);
108
- RegisterClientIdleFilter(builder);
107
+ RegisterChannelIdleFilters(builder);
109
108
  RegisterGrpcLbLoadReportingFilter(builder);
110
109
  RegisterHttpFilters(builder);
111
- RegisterMaxAgeFilter(builder);
112
110
  RegisterDeadlineFilter(builder);
113
111
  RegisterMessageSizeFilter(builder);
114
112
  RegisterServiceConfigChannelArgFilter(builder);
@@ -447,7 +447,7 @@ static tsi_result alts_tsi_handshaker_continue_handshaker_next(
447
447
  GPR_ASSERT(handshaker->client == nullptr);
448
448
  handshaker->client = client;
449
449
  if (handshaker->shutdown) {
450
- gpr_log(GPR_ERROR, "TSI handshake shutdown");
450
+ gpr_log(GPR_INFO, "TSI handshake shutdown");
451
451
  return TSI_HANDSHAKE_SHUTDOWN;
452
452
  }
453
453
  }
@@ -532,7 +532,7 @@ static tsi_result handshaker_next(
532
532
  {
533
533
  grpc_core::MutexLock lock(&handshaker->mu);
534
534
  if (handshaker->shutdown) {
535
- gpr_log(GPR_ERROR, "TSI handshake shutdown");
535
+ gpr_log(GPR_INFO, "TSI handshake shutdown");
536
536
  return TSI_HANDSHAKE_SHUTDOWN;
537
537
  }
538
538
  }
@@ -1441,8 +1441,7 @@ static tsi_result ssl_handshaker_result_create(
1441
1441
  static tsi_result ssl_handshaker_get_bytes_to_send_to_peer(
1442
1442
  tsi_ssl_handshaker* impl, unsigned char* bytes, size_t* bytes_size) {
1443
1443
  int bytes_read_from_ssl = 0;
1444
- if (bytes == nullptr || bytes_size == nullptr || *bytes_size == 0 ||
1445
- *bytes_size > INT_MAX) {
1444
+ if (bytes == nullptr || bytes_size == nullptr || *bytes_size > INT_MAX) {
1446
1445
  return TSI_INVALID_ARGUMENT;
1447
1446
  }
1448
1447
  GPR_ASSERT(*bytes_size <= INT_MAX);
@@ -1469,22 +1468,7 @@ static tsi_result ssl_handshaker_get_result(tsi_ssl_handshaker* impl) {
1469
1468
  return impl->result;
1470
1469
  }
1471
1470
 
1472
- static tsi_result ssl_handshaker_process_bytes_from_peer(
1473
- tsi_ssl_handshaker* impl, const unsigned char* bytes, size_t* bytes_size) {
1474
- int bytes_written_into_ssl_size = 0;
1475
- if (bytes == nullptr || bytes_size == nullptr || *bytes_size > INT_MAX) {
1476
- return TSI_INVALID_ARGUMENT;
1477
- }
1478
- GPR_ASSERT(*bytes_size <= INT_MAX);
1479
- bytes_written_into_ssl_size =
1480
- BIO_write(impl->network_io, bytes, static_cast<int>(*bytes_size));
1481
- if (bytes_written_into_ssl_size < 0) {
1482
- gpr_log(GPR_ERROR, "Could not write to memory BIO.");
1483
- impl->result = TSI_INTERNAL_ERROR;
1484
- return impl->result;
1485
- }
1486
- *bytes_size = static_cast<size_t>(bytes_written_into_ssl_size);
1487
-
1471
+ static tsi_result ssl_handshaker_do_handshake(tsi_ssl_handshaker* impl) {
1488
1472
  if (ssl_handshaker_get_result(impl) != TSI_HANDSHAKE_IN_PROGRESS) {
1489
1473
  impl->result = TSI_OK;
1490
1474
  return impl->result;
@@ -1503,6 +1487,8 @@ static tsi_result ssl_handshaker_process_bytes_from_peer(
1503
1487
  }
1504
1488
  case SSL_ERROR_NONE:
1505
1489
  return TSI_OK;
1490
+ case SSL_ERROR_WANT_WRITE:
1491
+ return TSI_DRAIN_BUFFER;
1506
1492
  default: {
1507
1493
  char err_str[256];
1508
1494
  ERR_error_string_n(ERR_get_error(), err_str, sizeof(err_str));
@@ -1515,6 +1501,24 @@ static tsi_result ssl_handshaker_process_bytes_from_peer(
1515
1501
  }
1516
1502
  }
1517
1503
 
1504
+ static tsi_result ssl_handshaker_process_bytes_from_peer(
1505
+ tsi_ssl_handshaker* impl, const unsigned char* bytes, size_t* bytes_size) {
1506
+ int bytes_written_into_ssl_size = 0;
1507
+ if (bytes == nullptr || bytes_size == nullptr || *bytes_size > INT_MAX) {
1508
+ return TSI_INVALID_ARGUMENT;
1509
+ }
1510
+ GPR_ASSERT(*bytes_size <= INT_MAX);
1511
+ bytes_written_into_ssl_size =
1512
+ BIO_write(impl->network_io, bytes, static_cast<int>(*bytes_size));
1513
+ if (bytes_written_into_ssl_size < 0) {
1514
+ gpr_log(GPR_ERROR, "Could not write to memory BIO.");
1515
+ impl->result = TSI_INTERNAL_ERROR;
1516
+ return impl->result;
1517
+ }
1518
+ *bytes_size = static_cast<size_t>(bytes_written_into_ssl_size);
1519
+ return ssl_handshaker_do_handshake(impl);
1520
+ }
1521
+
1518
1522
  static void ssl_handshaker_destroy(tsi_handshaker* self) {
1519
1523
  tsi_ssl_handshaker* impl = reinterpret_cast<tsi_ssl_handshaker*>(self);
1520
1524
  SSL_free(impl->ssl);
@@ -1554,6 +1558,30 @@ static tsi_result ssl_bytes_remaining(tsi_ssl_handshaker* impl,
1554
1558
  return TSI_OK;
1555
1559
  }
1556
1560
 
1561
+ // Write handshake data received from SSL to an unbound output buffer.
1562
+ // By doing that, we drain SSL bio buffer used to hold handshake data.
1563
+ // This API needs to be repeatedly called until all handshake data are
1564
+ // received from SSL.
1565
+ static tsi_result ssl_handshaker_write_output_buffer(tsi_handshaker* self,
1566
+ size_t* bytes_written) {
1567
+ tsi_ssl_handshaker* impl = reinterpret_cast<tsi_ssl_handshaker*>(self);
1568
+ tsi_result status = TSI_OK;
1569
+ int offset = *bytes_written;
1570
+ do {
1571
+ size_t to_send_size = impl->outgoing_bytes_buffer_size - offset;
1572
+ status = ssl_handshaker_get_bytes_to_send_to_peer(
1573
+ impl, impl->outgoing_bytes_buffer + offset, &to_send_size);
1574
+ offset += to_send_size;
1575
+ if (status == TSI_INCOMPLETE_DATA) {
1576
+ impl->outgoing_bytes_buffer_size *= 2;
1577
+ impl->outgoing_bytes_buffer = static_cast<unsigned char*>(gpr_realloc(
1578
+ impl->outgoing_bytes_buffer, impl->outgoing_bytes_buffer_size));
1579
+ }
1580
+ } while (status == TSI_INCOMPLETE_DATA);
1581
+ *bytes_written = offset;
1582
+ return status;
1583
+ }
1584
+
1557
1585
  static tsi_result ssl_handshaker_next(
1558
1586
  tsi_handshaker* self, const unsigned char* received_bytes,
1559
1587
  size_t received_bytes_size, const unsigned char** bytes_to_send,
@@ -1569,27 +1597,22 @@ static tsi_result ssl_handshaker_next(
1569
1597
  tsi_ssl_handshaker* impl = reinterpret_cast<tsi_ssl_handshaker*>(self);
1570
1598
  tsi_result status = TSI_OK;
1571
1599
  size_t bytes_consumed = received_bytes_size;
1600
+ size_t bytes_written = 0;
1572
1601
  if (received_bytes_size > 0) {
1573
1602
  status = ssl_handshaker_process_bytes_from_peer(impl, received_bytes,
1574
1603
  &bytes_consumed);
1575
- if (status != TSI_OK) return status;
1604
+ while (status == TSI_DRAIN_BUFFER) {
1605
+ status = ssl_handshaker_write_output_buffer(self, &bytes_written);
1606
+ if (status != TSI_OK) return status;
1607
+ status = ssl_handshaker_do_handshake(impl);
1608
+ }
1576
1609
  }
1610
+ if (status != TSI_OK) return status;
1577
1611
  /* Get bytes to send to the peer, if available. */
1578
- size_t offset = 0;
1579
- do {
1580
- size_t to_send_size = impl->outgoing_bytes_buffer_size - offset;
1581
- status = ssl_handshaker_get_bytes_to_send_to_peer(
1582
- impl, impl->outgoing_bytes_buffer + offset, &to_send_size);
1583
- offset += to_send_size;
1584
- if (status == TSI_INCOMPLETE_DATA) {
1585
- impl->outgoing_bytes_buffer_size *= 2;
1586
- impl->outgoing_bytes_buffer = static_cast<unsigned char*>(gpr_realloc(
1587
- impl->outgoing_bytes_buffer, impl->outgoing_bytes_buffer_size));
1588
- }
1589
- } while (status == TSI_INCOMPLETE_DATA);
1612
+ status = ssl_handshaker_write_output_buffer(self, &bytes_written);
1590
1613
  if (status != TSI_OK) return status;
1591
1614
  *bytes_to_send = impl->outgoing_bytes_buffer;
1592
- *bytes_to_send_size = offset;
1615
+ *bytes_to_send_size = bytes_written;
1593
1616
  /* If handshake completes, create tsi_handshaker_result. */
1594
1617
  if (ssl_handshaker_get_result(impl) == TSI_HANDSHAKE_IN_PROGRESS) {
1595
1618
  *handshaker_result = nullptr;
@@ -1646,6 +1669,8 @@ static void tsi_ssl_handshaker_resume_session(
1646
1669
 
1647
1670
  static tsi_result create_tsi_ssl_handshaker(SSL_CTX* ctx, int is_client,
1648
1671
  const char* server_name_indication,
1672
+ size_t network_bio_buf_size,
1673
+ size_t ssl_bio_buf_size,
1649
1674
  tsi_ssl_handshaker_factory* factory,
1650
1675
  tsi_handshaker** handshaker) {
1651
1676
  SSL* ssl = SSL_new(ctx);
@@ -1662,7 +1687,8 @@ static tsi_result create_tsi_ssl_handshaker(SSL_CTX* ctx, int is_client,
1662
1687
  }
1663
1688
  SSL_set_info_callback(ssl, ssl_info_callback);
1664
1689
 
1665
- if (!BIO_new_bio_pair(&network_io, 0, &ssl_io, 0)) {
1690
+ if (!BIO_new_bio_pair(&network_io, network_bio_buf_size, &ssl_io,
1691
+ ssl_bio_buf_size)) {
1666
1692
  gpr_log(GPR_ERROR, "BIO_new_bio_pair failed.");
1667
1693
  SSL_free(ssl);
1668
1694
  return TSI_OUT_OF_RESOURCES;
@@ -1747,10 +1773,11 @@ static int select_protocol_list(const unsigned char** out,
1747
1773
 
1748
1774
  tsi_result tsi_ssl_client_handshaker_factory_create_handshaker(
1749
1775
  tsi_ssl_client_handshaker_factory* factory,
1750
- const char* server_name_indication, tsi_handshaker** handshaker) {
1751
- return create_tsi_ssl_handshaker(factory->ssl_context, 1,
1752
- server_name_indication, &factory->base,
1753
- handshaker);
1776
+ const char* server_name_indication, size_t network_bio_buf_size,
1777
+ size_t ssl_bio_buf_size, tsi_handshaker** handshaker) {
1778
+ return create_tsi_ssl_handshaker(
1779
+ factory->ssl_context, 1, server_name_indication, network_bio_buf_size,
1780
+ ssl_bio_buf_size, &factory->base, handshaker);
1754
1781
  }
1755
1782
 
1756
1783
  void tsi_ssl_client_handshaker_factory_unref(
@@ -1784,11 +1811,13 @@ static int client_handshaker_factory_npn_callback(
1784
1811
  /* --- tsi_ssl_server_handshaker_factory methods implementation. --- */
1785
1812
 
1786
1813
  tsi_result tsi_ssl_server_handshaker_factory_create_handshaker(
1787
- tsi_ssl_server_handshaker_factory* factory, tsi_handshaker** handshaker) {
1814
+ tsi_ssl_server_handshaker_factory* factory, size_t network_bio_buf_size,
1815
+ size_t ssl_bio_buf_size, tsi_handshaker** handshaker) {
1788
1816
  if (factory->ssl_context_count == 0) return TSI_INVALID_ARGUMENT;
1789
1817
  /* Create the handshaker with the first context. We will switch if needed
1790
1818
  because of SNI in ssl_server_handshaker_factory_servername_callback. */
1791
1819
  return create_tsi_ssl_handshaker(factory->ssl_contexts[0], 0, nullptr,
1820
+ network_bio_buf_size, ssl_bio_buf_size,
1792
1821
  &factory->base, handshaker);
1793
1822
  }
1794
1823
 
@@ -1939,8 +1968,16 @@ static void ssl_keylogging_callback(const SSL* ssl, const char* info) {
1939
1968
  factory->key_logger->LogSessionKeys(ssl_context, info);
1940
1969
  }
1941
1970
 
1971
+ // This callback is invoked when the CRL has been verified and will soft-fail
1972
+ // errors in verification depending on certain error types.
1942
1973
  static int verify_cb(int ok, X509_STORE_CTX* ctx) {
1943
1974
  int cert_error = X509_STORE_CTX_get_error(ctx);
1975
+ if (cert_error == X509_V_ERR_UNABLE_TO_GET_CRL) {
1976
+ gpr_log(
1977
+ GPR_INFO,
1978
+ "Certificate verification failed to get CRL files. Ignoring error.");
1979
+ return 1;
1980
+ }
1944
1981
  if (cert_error != 0) {
1945
1982
  gpr_log(GPR_ERROR, "Certificate verify failed with code %d", cert_error);
1946
1983
  }
@@ -209,13 +209,16 @@ tsi_result tsi_create_ssl_client_handshaker_factory_with_options(
209
209
  - server_name_indication indicates the name of the server the client is
210
210
  trying to connect to which will be relayed to the server using the SNI
211
211
  extension.
212
+ - network_bio_buf_size and ssl_bio_buf_size represent BIO pair buffers used in
213
+ SSL. The buffer size being 0 translates to 17KB in boringSSL.
212
214
  - handshaker is the address of the handshaker pointer to be created.
213
215
 
214
216
  - This method returns TSI_OK on success or TSI_INVALID_PARAMETER in the case
215
217
  where a parameter is invalid. */
216
218
  tsi_result tsi_ssl_client_handshaker_factory_create_handshaker(
217
219
  tsi_ssl_client_handshaker_factory* factory,
218
- const char* server_name_indication, tsi_handshaker** handshaker);
220
+ const char* server_name_indication, size_t network_bio_buf_size,
221
+ size_t ssl_bio_buf_size, tsi_handshaker** handshaker);
219
222
 
220
223
  /* Decrements reference count of the handshaker factory. Handshaker factory will
221
224
  * be destroyed once no references exist. */
@@ -347,12 +350,15 @@ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
347
350
 
348
351
  /* Creates a server handshaker.
349
352
  - factory is the factory from which the handshaker will be created.
353
+ - network_bio_buf_size and ssl_bio_buf_size represent BIO pair buffers used in
354
+ SSL. The buffer size being 0 translates to 17KB in boringSSL.
350
355
  - handshaker is the address of the handshaker pointer to be created.
351
356
 
352
357
  - This method returns TSI_OK on success or TSI_INVALID_PARAMETER in the case
353
358
  where a parameter is invalid. */
354
359
  tsi_result tsi_ssl_server_handshaker_factory_create_handshaker(
355
- tsi_ssl_server_handshaker_factory* factory, tsi_handshaker** handshaker);
360
+ tsi_ssl_server_handshaker_factory* factory, size_t network_bio_buf_size,
361
+ size_t ssl_bio_buf_size, tsi_handshaker** handshaker);
356
362
 
357
363
  /* Decrements reference count of the handshaker factory. Handshaker factory will
358
364
  * be destroyed once no references exist. */
@@ -45,6 +45,8 @@ typedef enum {
45
45
  TSI_ASYNC = 13,
46
46
  TSI_HANDSHAKE_SHUTDOWN = 14,
47
47
  TSI_CLOSE_NOTIFY = 15, // Indicates that the connection should be closed.
48
+ TSI_DRAIN_BUFFER = 16, // Indicates that the buffer used to store handshake
49
+ // data should be drained.
48
50
  } tsi_result;
49
51
 
50
52
  typedef enum {
@@ -60,7 +60,7 @@ end
60
60
 
61
61
  ENV['CPPFLAGS'] = '-DGPR_BACKWARDS_COMPATIBILITY_MODE'
62
62
  ENV['CPPFLAGS'] += ' -DGRPC_XDS_USER_AGENT_NAME_SUFFIX="\"RUBY\"" '
63
- ENV['CPPFLAGS'] += ' -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="\"1.45.0\"" '
63
+ ENV['CPPFLAGS'] += ' -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="\"1.46.2\"" '
64
64
 
65
65
  output_dir = File.expand_path(RbConfig::CONFIG['topdir'])
66
66
  grpc_lib_dir = File.join(output_dir, 'libs', grpc_config)
@@ -164,7 +164,13 @@ module GRPC
164
164
  end
165
165
 
166
166
  def receive_and_check_status
167
- batch_result = @call.run_batch(RECV_STATUS_ON_CLIENT => nil)
167
+ ops = { RECV_STATUS_ON_CLIENT => nil }
168
+ ops[RECV_INITIAL_METADATA] = nil unless @metadata_received
169
+ batch_result = @call.run_batch(ops)
170
+ unless @metadata_received
171
+ @call.metadata = batch_result.metadata
172
+ @metadata_received = true
173
+ end
168
174
  set_input_stream_done
169
175
  attach_status_results_and_complete_call(batch_result)
170
176
  end