grpc 1.34.0 → 1.35.0.pre1

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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +808 -2787
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +14 -0
  6. data/include/grpc/grpc_security.h +61 -3
  7. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  8. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +1 -1
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  12. data/include/grpc/slice_buffer.h +3 -3
  13. data/include/grpc/support/sync.h +3 -3
  14. data/include/grpc/support/time.h +7 -7
  15. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
  16. data/src/core/ext/filters/client_channel/client_channel.cc +2734 -1498
  17. data/src/core/ext/filters/client_channel/client_channel.h +0 -4
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -0
  20. data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
  21. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  22. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -6
  23. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +4 -5
  25. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +2 -3
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +32 -30
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +162 -20
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +24 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -2
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1262 -0
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +7 -14
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +454 -16
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  42. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -9
  43. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  44. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +18 -31
  45. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -5
  46. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  47. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  48. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  49. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -13
  50. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
  51. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  52. data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
  53. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  54. data/src/core/ext/filters/client_channel/subchannel.cc +34 -50
  55. data/src/core/ext/filters/client_channel/subchannel.h +12 -18
  56. data/src/core/ext/filters/deadline/deadline_filter.cc +4 -2
  57. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  58. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  59. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  60. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  61. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  62. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
  63. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  64. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
  65. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +178 -86
  66. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  67. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  69. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  70. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  71. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
  72. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  73. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  74. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  75. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  76. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -27
  77. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +111 -111
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +424 -241
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +22 -22
  85. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +47 -21
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +44 -44
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +200 -78
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +17 -17
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +72 -35
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +39 -39
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +157 -89
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +47 -47
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +163 -78
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +7 -0
  112. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -13
  113. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  114. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  115. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  116. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  117. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  118. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  119. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  120. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +28 -28
  121. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  122. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +23 -23
  123. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +106 -54
  124. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -2
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  126. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
  127. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
  128. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -7
  129. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +38 -22
  130. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +203 -203
  131. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +845 -495
  132. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
  133. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
  134. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -3
  135. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  136. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +87 -87
  137. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +343 -204
  138. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  139. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +20 -20
  140. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +85 -46
  141. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +33 -11
  143. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -32
  144. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
  145. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  147. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  148. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  149. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +29 -29
  150. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +120 -82
  151. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  153. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  155. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  157. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  159. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  160. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  161. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  162. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  163. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  164. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  165. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  166. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  168. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  169. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  173. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  174. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  175. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  176. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  177. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  178. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  179. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  180. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  181. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  182. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  184. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  185. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
  186. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
  187. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +34 -34
  188. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +142 -59
  189. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  190. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  191. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  192. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  193. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  194. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  195. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  196. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  197. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  198. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  199. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  200. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  201. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  202. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  203. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  204. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  205. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  206. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  207. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  208. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  209. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  210. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  211. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  212. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  213. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  214. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  215. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  216. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  217. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  218. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  219. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  220. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  221. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  222. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  223. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  224. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  225. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  226. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +1 -1
  227. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +7 -0
  228. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +5 -5
  229. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +21 -7
  230. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +2 -2
  231. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +7 -0
  232. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +4 -4
  233. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +17 -8
  234. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +7 -7
  235. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +31 -18
  236. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +5 -5
  237. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +19 -11
  238. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  239. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  240. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  241. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  242. data/src/core/ext/xds/certificate_provider_store.cc +10 -7
  243. data/src/core/ext/xds/certificate_provider_store.h +12 -7
  244. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +25 -0
  245. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -4
  246. data/src/core/ext/xds/xds_api.cc +220 -31
  247. data/src/core/ext/xds/xds_api.h +41 -10
  248. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  249. data/src/core/ext/xds/xds_certificate_provider.cc +61 -2
  250. data/src/core/ext/xds/xds_certificate_provider.h +40 -2
  251. data/src/core/ext/xds/xds_client.cc +31 -29
  252. data/src/core/ext/xds/xds_client.h +6 -1
  253. data/src/core/ext/xds/xds_client_stats.cc +2 -2
  254. data/src/core/ext/xds/xds_server_config_fetcher.cc +131 -0
  255. data/src/core/lib/channel/channel_args.cc +8 -8
  256. data/src/core/lib/channel/channel_trace.h +1 -1
  257. data/src/core/lib/channel/channelz.cc +13 -14
  258. data/src/core/lib/channel/channelz.h +0 -1
  259. data/src/core/lib/channel/channelz_registry.h +0 -1
  260. data/src/core/lib/channel/handshaker.cc +2 -2
  261. data/src/core/lib/compression/compression_args.cc +3 -2
  262. data/src/core/lib/debug/stats.h +2 -2
  263. data/src/core/lib/debug/stats_data.h +13 -13
  264. data/src/core/lib/gpr/alloc.cc +3 -2
  265. data/src/core/lib/gpr/log.cc +53 -16
  266. data/src/core/lib/gpr/log_linux.cc +3 -1
  267. data/src/core/lib/gpr/log_posix.cc +3 -1
  268. data/src/core/lib/gpr/log_windows.cc +3 -1
  269. data/src/core/lib/gpr/spinlock.h +10 -2
  270. data/src/core/lib/gpr/string.cc +22 -21
  271. data/src/core/lib/gpr/string.h +5 -6
  272. data/src/core/lib/gpr/sync.cc +4 -4
  273. data/src/core/lib/gpr/time.cc +12 -12
  274. data/src/core/lib/gprpp/arena.h +3 -2
  275. data/src/core/lib/gprpp/ref_counted.h +2 -2
  276. data/src/core/lib/gprpp/ref_counted_ptr.h +9 -1
  277. data/src/core/lib/gprpp/thd_posix.cc +6 -1
  278. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  279. data/src/core/lib/http/httpcli.cc +1 -1
  280. data/src/core/lib/http/httpcli.h +2 -3
  281. data/src/core/lib/http/httpcli_security_connector.cc +1 -1
  282. data/src/core/lib/http/parser.cc +1 -2
  283. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  284. data/src/core/lib/iomgr/combiner.cc +2 -1
  285. data/src/core/lib/iomgr/endpoint.h +1 -1
  286. data/src/core/lib/iomgr/error.cc +15 -11
  287. data/src/core/lib/iomgr/error_internal.h +1 -1
  288. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
  289. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -13
  290. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  291. data/src/core/lib/iomgr/exec_ctx.h +6 -4
  292. data/src/core/lib/iomgr/executor.cc +2 -1
  293. data/src/core/lib/iomgr/executor.h +1 -1
  294. data/src/core/lib/iomgr/executor/threadpool.h +1 -1
  295. data/src/core/lib/iomgr/iomgr.cc +1 -1
  296. data/src/core/lib/iomgr/load_file.h +1 -1
  297. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  298. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  299. data/src/core/lib/iomgr/parse_address.cc +52 -46
  300. data/src/core/lib/iomgr/parse_address.h +13 -9
  301. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  302. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  303. data/src/core/lib/iomgr/python_util.h +1 -1
  304. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  305. data/src/core/lib/iomgr/resource_quota.cc +4 -4
  306. data/src/core/lib/iomgr/sockaddr_utils.cc +10 -10
  307. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  308. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  309. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  310. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  311. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  312. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  313. data/src/core/lib/iomgr/tcp_posix.cc +9 -6
  314. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  315. data/src/core/lib/iomgr/timer_custom.cc +3 -3
  316. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  317. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  318. data/src/core/lib/iomgr/udp_server.cc +1 -2
  319. data/src/core/lib/iomgr/udp_server.h +1 -2
  320. data/src/core/lib/iomgr/unix_sockets_posix.cc +17 -18
  321. data/src/core/lib/json/json.h +10 -0
  322. data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
  323. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  324. data/src/core/lib/security/context/security_context.cc +4 -3
  325. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  326. data/src/core/lib/security/credentials/credentials.cc +6 -6
  327. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  328. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  329. data/src/core/lib/security/credentials/external/aws_request_signer.cc +15 -10
  330. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -2
  331. data/src/core/lib/security/credentials/external/external_account_credentials.cc +217 -31
  332. data/src/core/lib/security/credentials/external/external_account_credentials.h +7 -5
  333. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  334. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -4
  335. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -18
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +5 -6
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -1
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +18 -12
  339. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  341. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -3
  342. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +37 -44
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  345. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -5
  346. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -6
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +1 -6
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +326 -5
  350. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +64 -0
  351. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +1 -1
  352. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +0 -1
  353. data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
  354. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  355. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  356. data/src/core/lib/security/credentials/xds/xds_credentials.cc +140 -10
  357. data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
  358. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  359. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  360. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +46 -13
  361. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +23 -6
  362. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +3 -2
  364. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  365. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  366. data/src/core/lib/security/security_connector/ssl_utils.h +12 -19
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +57 -12
  368. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +2 -3
  369. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  370. data/src/core/lib/security/transport/security_handshaker.cc +2 -2
  371. data/src/core/lib/slice/slice_intern.cc +4 -5
  372. data/src/core/lib/slice/slice_internal.h +2 -2
  373. data/src/core/lib/surface/call.cc +32 -24
  374. data/src/core/lib/surface/call_details.cc +8 -8
  375. data/src/core/lib/surface/channel.cc +16 -10
  376. data/src/core/lib/surface/channel.h +3 -2
  377. data/src/core/lib/surface/channel_init.cc +1 -1
  378. data/src/core/lib/surface/completion_queue.cc +23 -18
  379. data/src/core/lib/surface/completion_queue.h +16 -16
  380. data/src/core/lib/surface/init.cc +6 -5
  381. data/src/core/lib/surface/lame_client.cc +20 -46
  382. data/src/core/lib/surface/lame_client.h +4 -0
  383. data/src/core/lib/surface/server.cc +59 -15
  384. data/src/core/lib/surface/server.h +37 -5
  385. data/src/core/lib/surface/version.cc +1 -1
  386. data/src/core/lib/transport/authority_override.cc +6 -4
  387. data/src/core/lib/transport/authority_override.h +5 -2
  388. data/src/core/lib/transport/connectivity_state.h +6 -4
  389. data/src/core/lib/transport/error_utils.h +1 -1
  390. data/src/core/lib/transport/metadata_batch.h +4 -4
  391. data/src/core/lib/transport/static_metadata.cc +1 -1
  392. data/src/core/lib/transport/status_metadata.cc +4 -3
  393. data/src/core/lib/transport/transport.h +7 -7
  394. data/src/core/lib/uri/uri_parser.cc +131 -249
  395. data/src/core/lib/uri/uri_parser.h +57 -21
  396. data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
  397. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  398. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  399. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  400. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -23
  401. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  402. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  403. data/src/core/tsi/fake_transport_security.cc +5 -3
  404. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  405. data/src/core/tsi/ssl_transport_security.cc +62 -49
  406. data/src/core/tsi/ssl_transport_security.h +6 -6
  407. data/src/core/tsi/transport_security.cc +6 -6
  408. data/src/core/tsi/transport_security_interface.h +1 -1
  409. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  410. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -0
  411. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +31 -13
  412. data/src/ruby/lib/grpc/version.rb +1 -1
  413. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +28 -0
  414. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  415. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  416. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  417. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  418. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  419. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  420. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  421. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  422. data/third_party/upb/upb/decode.c +248 -167
  423. data/third_party/upb/upb/decode.h +20 -1
  424. data/third_party/upb/upb/decode.int.h +163 -0
  425. data/third_party/upb/upb/decode_fast.c +1040 -0
  426. data/third_party/upb/upb/decode_fast.h +126 -0
  427. data/third_party/upb/upb/def.c +525 -516
  428. data/third_party/upb/upb/def.h +16 -31
  429. data/third_party/upb/upb/def.hpp +37 -123
  430. data/third_party/upb/upb/encode.c +227 -169
  431. data/third_party/upb/upb/encode.h +27 -2
  432. data/third_party/upb/upb/json_decode.c +1443 -0
  433. data/third_party/upb/upb/json_decode.h +23 -0
  434. data/third_party/upb/upb/json_encode.c +713 -0
  435. data/third_party/upb/upb/json_encode.h +36 -0
  436. data/third_party/upb/upb/msg.c +167 -88
  437. data/third_party/upb/upb/msg.h +174 -34
  438. data/third_party/upb/upb/port_def.inc +74 -61
  439. data/third_party/upb/upb/port_undef.inc +3 -7
  440. data/third_party/upb/upb/reflection.c +36 -19
  441. data/third_party/upb/upb/table.c +34 -197
  442. data/third_party/upb/upb/table.int.h +14 -5
  443. data/third_party/upb/upb/text_encode.c +45 -22
  444. data/third_party/upb/upb/text_encode.h +4 -1
  445. data/third_party/upb/upb/upb.c +18 -41
  446. data/third_party/upb/upb/upb.h +36 -7
  447. data/third_party/upb/upb/upb.hpp +4 -4
  448. data/third_party/upb/upb/upb.int.h +29 -0
  449. metadata +60 -46
  450. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
  451. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  452. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  453. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
  454. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
  455. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
  456. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
  457. data/src/core/lib/gprpp/map.h +0 -53
  458. data/third_party/upb/upb/port.c +0 -26
@@ -75,8 +75,4 @@ void grpc_client_channel_stop_connectivity_watch(
75
75
  grpc_channel_element* elem,
76
76
  grpc_core::AsyncConnectivityStateWatcherInterface* watcher);
77
77
 
78
- /* Debug helper: pull the subchannel call from a call stack element */
79
- grpc_core::RefCountedPtr<grpc_core::SubchannelCall>
80
- grpc_client_channel_get_subchannel_call(grpc_call_element* elem);
81
-
82
78
  #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
@@ -54,7 +54,7 @@ void grpc_client_channel_init(void) {
54
54
  grpc_core::GlobalSubchannelPool::Init();
55
55
  grpc_channel_init_register_stage(
56
56
  GRPC_CLIENT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY, append_filter,
57
- (void*)&grpc_client_channel_filter);
57
+ const_cast<grpc_channel_filter*>(&grpc_client_channel_filter));
58
58
  grpc_http_connect_register_handshaker_factory();
59
59
  grpc_client_channel_global_init_backup_polling();
60
60
  }
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <functional>
23
23
  #include <map>
24
+ #include <vector>
24
25
 
25
26
  #include "absl/strings/string_view.h"
26
27
 
@@ -28,6 +29,7 @@
28
29
 
29
30
  #include "src/core/ext/filters/client_channel/service_config.h"
30
31
  #include "src/core/ext/filters/client_channel/service_config_parser.h"
32
+ #include "src/core/lib/channel/channel_stack.h"
31
33
  #include "src/core/lib/gprpp/arena.h"
32
34
  #include "src/core/lib/gprpp/ref_counted.h"
33
35
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -80,6 +82,8 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
80
82
  return cs1->Equals(cs2);
81
83
  }
82
84
 
85
+ virtual std::vector<const grpc_channel_filter*> GetFilters() { return {}; }
86
+
83
87
  virtual CallConfig GetCallConfig(GetCallConfigArgs args) = 0;
84
88
 
85
89
  grpc_arg MakeChannelArg() const;
@@ -0,0 +1,186 @@
1
+ //
2
+ // Copyright 2020 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/filters/client_channel/dynamic_filters.h"
20
+
21
+ #include "src/core/lib/channel/channel_stack.h"
22
+ #include "src/core/lib/surface/lame_client.h"
23
+
24
+ // Conversion between call and call stack.
25
+ #define CALL_TO_CALL_STACK(call) \
26
+ (grpc_call_stack*)((char*)(call) + GPR_ROUND_UP_TO_ALIGNMENT_SIZE( \
27
+ sizeof(DynamicFilters::Call)))
28
+ #define CALL_STACK_TO_CALL(callstack) \
29
+ (DynamicFilters::Call*)(((char*)(call_stack)) - \
30
+ GPR_ROUND_UP_TO_ALIGNMENT_SIZE( \
31
+ sizeof(DynamicFilters::Call)))
32
+
33
+ namespace grpc_core {
34
+
35
+ //
36
+ // DynamicFilters::Call
37
+ //
38
+
39
+ DynamicFilters::Call::Call(Args args, grpc_error** error)
40
+ : channel_stack_(std::move(args.channel_stack)) {
41
+ grpc_call_stack* call_stack = CALL_TO_CALL_STACK(this);
42
+ const grpc_call_element_args call_args = {
43
+ call_stack, /* call_stack */
44
+ nullptr, /* server_transport_data */
45
+ args.context, /* context */
46
+ args.path, /* path */
47
+ args.start_time, /* start_time */
48
+ args.deadline, /* deadline */
49
+ args.arena, /* arena */
50
+ args.call_combiner /* call_combiner */
51
+ };
52
+ *error = grpc_call_stack_init(channel_stack_->channel_stack_, 1, Destroy,
53
+ this, &call_args);
54
+ if (GPR_UNLIKELY(*error != GRPC_ERROR_NONE)) {
55
+ const char* error_string = grpc_error_string(*error);
56
+ gpr_log(GPR_ERROR, "error: %s", error_string);
57
+ return;
58
+ }
59
+ grpc_call_stack_set_pollset_or_pollset_set(call_stack, args.pollent);
60
+ }
61
+
62
+ void DynamicFilters::Call::StartTransportStreamOpBatch(
63
+ grpc_transport_stream_op_batch* batch) {
64
+ grpc_call_stack* call_stack = CALL_TO_CALL_STACK(this);
65
+ grpc_call_element* top_elem = grpc_call_stack_element(call_stack, 0);
66
+ GRPC_CALL_LOG_OP(GPR_INFO, top_elem, batch);
67
+ top_elem->filter->start_transport_stream_op_batch(top_elem, batch);
68
+ }
69
+
70
+ void DynamicFilters::Call::SetAfterCallStackDestroy(grpc_closure* closure) {
71
+ GPR_ASSERT(after_call_stack_destroy_ == nullptr);
72
+ GPR_ASSERT(closure != nullptr);
73
+ after_call_stack_destroy_ = closure;
74
+ }
75
+
76
+ RefCountedPtr<DynamicFilters::Call> DynamicFilters::Call::Ref() {
77
+ IncrementRefCount();
78
+ return RefCountedPtr<DynamicFilters::Call>(this);
79
+ }
80
+
81
+ RefCountedPtr<DynamicFilters::Call> DynamicFilters::Call::Ref(
82
+ const grpc_core::DebugLocation& location, const char* reason) {
83
+ IncrementRefCount(location, reason);
84
+ return RefCountedPtr<DynamicFilters::Call>(this);
85
+ }
86
+
87
+ void DynamicFilters::Call::Unref() {
88
+ GRPC_CALL_STACK_UNREF(CALL_TO_CALL_STACK(this), "");
89
+ }
90
+
91
+ void DynamicFilters::Call::Unref(const DebugLocation& /*location*/,
92
+ const char* reason) {
93
+ GRPC_CALL_STACK_UNREF(CALL_TO_CALL_STACK(this), reason);
94
+ }
95
+
96
+ void DynamicFilters::Call::Destroy(void* arg, grpc_error* /*error*/) {
97
+ DynamicFilters::Call* self = static_cast<DynamicFilters::Call*>(arg);
98
+ // Keep some members before destroying the subchannel call.
99
+ grpc_closure* after_call_stack_destroy = self->after_call_stack_destroy_;
100
+ RefCountedPtr<DynamicFilters> channel_stack = std::move(self->channel_stack_);
101
+ // Destroy the subchannel call.
102
+ self->~Call();
103
+ // Destroy the call stack. This should be after destroying the call, because
104
+ // call->after_call_stack_destroy(), if not null, will free the call arena.
105
+ grpc_call_stack_destroy(CALL_TO_CALL_STACK(self), nullptr,
106
+ after_call_stack_destroy);
107
+ // Automatically reset channel_stack. This should be after destroying the call
108
+ // stack, because destroying call stack needs access to the channel stack.
109
+ }
110
+
111
+ void DynamicFilters::Call::IncrementRefCount() {
112
+ GRPC_CALL_STACK_REF(CALL_TO_CALL_STACK(this), "");
113
+ }
114
+
115
+ void DynamicFilters::Call::IncrementRefCount(
116
+ const grpc_core::DebugLocation& /*location*/, const char* reason) {
117
+ GRPC_CALL_STACK_REF(CALL_TO_CALL_STACK(this), reason);
118
+ }
119
+
120
+ //
121
+ // DynamicFilters
122
+ //
123
+
124
+ namespace {
125
+
126
+ void DestroyChannelStack(void* arg, grpc_error* /*error*/) {
127
+ grpc_channel_stack* channel_stack = static_cast<grpc_channel_stack*>(arg);
128
+ grpc_channel_stack_destroy(channel_stack);
129
+ gpr_free(channel_stack);
130
+ }
131
+
132
+ std::pair<grpc_channel_stack*, grpc_error*> CreateChannelStack(
133
+ const grpc_channel_args* args,
134
+ std::vector<const grpc_channel_filter*> filters) {
135
+ // Allocate memory for channel stack.
136
+ const size_t channel_stack_size =
137
+ grpc_channel_stack_size(filters.data(), filters.size());
138
+ grpc_channel_stack* channel_stack =
139
+ reinterpret_cast<grpc_channel_stack*>(gpr_zalloc(channel_stack_size));
140
+ // Initialize stack.
141
+ grpc_error* error = grpc_channel_stack_init(
142
+ /*initial_refs=*/1, DestroyChannelStack, channel_stack, filters.data(),
143
+ filters.size(), args, /*optional_transport=*/nullptr, "DynamicFilters",
144
+ channel_stack);
145
+ if (error != GRPC_ERROR_NONE) {
146
+ gpr_log(GPR_ERROR, "error initializing client internal stack: %s",
147
+ grpc_error_string(error));
148
+ grpc_channel_stack_destroy(channel_stack);
149
+ gpr_free(channel_stack);
150
+ return {nullptr, error};
151
+ }
152
+ return {channel_stack, GRPC_ERROR_NONE};
153
+ }
154
+
155
+ } // namespace
156
+
157
+ RefCountedPtr<DynamicFilters> DynamicFilters::Create(
158
+ const grpc_channel_args* args,
159
+ std::vector<const grpc_channel_filter*> filters) {
160
+ // Attempt to create channel stack from requested filters.
161
+ auto p = CreateChannelStack(args, std::move(filters));
162
+ if (p.second != GRPC_ERROR_NONE) {
163
+ // Initial pass failed. Create with lame filter.
164
+ grpc_error* error = p.second;
165
+ p = CreateChannelStack(args, {&grpc_lame_filter});
166
+ GPR_ASSERT(p.second == GRPC_ERROR_NONE);
167
+ grpc_channel_element* elem = grpc_channel_stack_element(p.first, 0);
168
+ SetLameFilterError(elem, error);
169
+ }
170
+ return MakeRefCounted<DynamicFilters>(p.first);
171
+ }
172
+
173
+ DynamicFilters::~DynamicFilters() {
174
+ GRPC_CHANNEL_STACK_UNREF(channel_stack_, "~DynamicFilters");
175
+ }
176
+
177
+ RefCountedPtr<DynamicFilters::Call> DynamicFilters::CreateCall(
178
+ DynamicFilters::Call::Args args, grpc_error** error) {
179
+ size_t allocation_size = GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(Call)) +
180
+ channel_stack_->call_stack_size;
181
+ Call* call = static_cast<Call*>(args.arena->Alloc(allocation_size));
182
+ new (call) Call(std::move(args), error);
183
+ return call;
184
+ }
185
+
186
+ } // namespace grpc_core
@@ -0,0 +1,99 @@
1
+ //
2
+ // Copyright 2020 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_DYNAMIC_FILTERS_H
18
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_DYNAMIC_FILTERS_H
19
+
20
+ #include <grpc/support/port_platform.h>
21
+
22
+ #include <vector>
23
+
24
+ #include "src/core/lib/channel/channel_stack.h"
25
+ #include "src/core/lib/gpr/time_precise.h"
26
+ #include "src/core/lib/gprpp/arena.h"
27
+ #include "src/core/lib/gprpp/ref_counted.h"
28
+ #include "src/core/lib/iomgr/exec_ctx.h"
29
+ #include "src/core/lib/iomgr/polling_entity.h"
30
+
31
+ namespace grpc_core {
32
+
33
+ class DynamicFilters : public RefCounted<DynamicFilters> {
34
+ public:
35
+ // Implements the interface of RefCounted<>.
36
+ class Call {
37
+ public:
38
+ struct Args {
39
+ RefCountedPtr<DynamicFilters> channel_stack;
40
+ grpc_polling_entity* pollent;
41
+ grpc_slice path;
42
+ gpr_cycle_counter start_time;
43
+ grpc_millis deadline;
44
+ Arena* arena;
45
+ grpc_call_context_element* context;
46
+ CallCombiner* call_combiner;
47
+ };
48
+
49
+ Call(Args args, grpc_error** error);
50
+
51
+ // Continues processing a transport stream op batch.
52
+ void StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch);
53
+
54
+ // Sets the 'then_schedule_closure' argument for call stack destruction.
55
+ // Must be called once per call.
56
+ void SetAfterCallStackDestroy(grpc_closure* closure);
57
+
58
+ // Interface of RefCounted<>.
59
+ RefCountedPtr<Call> Ref() GRPC_MUST_USE_RESULT;
60
+ RefCountedPtr<Call> Ref(const DebugLocation& location,
61
+ const char* reason) GRPC_MUST_USE_RESULT;
62
+ // When refcount drops to 0, destroys itself and the associated call stack,
63
+ // but does NOT free the memory because it's in the call arena.
64
+ void Unref();
65
+ void Unref(const DebugLocation& location, const char* reason);
66
+
67
+ private:
68
+ // Allow RefCountedPtr<> to access IncrementRefCount().
69
+ template <typename T>
70
+ friend class RefCountedPtr;
71
+
72
+ // Interface of RefCounted<>.
73
+ void IncrementRefCount();
74
+ void IncrementRefCount(const DebugLocation& location, const char* reason);
75
+
76
+ static void Destroy(void* arg, grpc_error* error);
77
+
78
+ RefCountedPtr<DynamicFilters> channel_stack_;
79
+ grpc_closure* after_call_stack_destroy_ = nullptr;
80
+ };
81
+
82
+ static RefCountedPtr<DynamicFilters> Create(
83
+ const grpc_channel_args* args,
84
+ std::vector<const grpc_channel_filter*> filters);
85
+
86
+ explicit DynamicFilters(grpc_channel_stack* channel_stack)
87
+ : channel_stack_(channel_stack) {}
88
+
89
+ ~DynamicFilters() override;
90
+
91
+ RefCountedPtr<Call> CreateCall(Call::Args args, grpc_error** error);
92
+
93
+ private:
94
+ grpc_channel_stack* channel_stack_;
95
+ };
96
+
97
+ } // namespace grpc_core
98
+
99
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_DYNAMIC_FILTERS_H
@@ -46,7 +46,7 @@ TraceFlag grpc_health_check_client_trace(false, "health_check_client");
46
46
  //
47
47
 
48
48
  HealthCheckClient::HealthCheckClient(
49
- const char* service_name,
49
+ std::string service_name,
50
50
  RefCountedPtr<ConnectedSubchannel> connected_subchannel,
51
51
  grpc_pollset_set* interested_parties,
52
52
  RefCountedPtr<channelz::SubchannelNode> channelz_node,
@@ -55,7 +55,7 @@ HealthCheckClient::HealthCheckClient(
55
55
  GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)
56
56
  ? "HealthCheckClient"
57
57
  : nullptr),
58
- service_name_(service_name),
58
+ service_name_(std::move(service_name)),
59
59
  connected_subchannel_(std::move(connected_subchannel)),
60
60
  interested_parties_(interested_parties),
61
61
  channelz_node_(std::move(channelz_node)),
@@ -180,13 +180,14 @@ void HealthCheckClient::OnRetryTimer(void* arg, grpc_error* error) {
180
180
 
181
181
  namespace {
182
182
 
183
- void EncodeRequest(const char* service_name,
183
+ void EncodeRequest(const std::string& service_name,
184
184
  ManualConstructor<SliceBufferByteStream>* send_message) {
185
185
  upb::Arena arena;
186
186
  grpc_health_v1_HealthCheckRequest* request_struct =
187
187
  grpc_health_v1_HealthCheckRequest_new(arena.ptr());
188
188
  grpc_health_v1_HealthCheckRequest_set_service(
189
- request_struct, upb_strview_makez(service_name));
189
+ request_struct,
190
+ upb_strview_make(service_name.data(), service_name.size()));
190
191
  size_t buf_length;
191
192
  char* buf = grpc_health_v1_HealthCheckRequest_serialize(
192
193
  request_struct, arena.ptr(), &buf_length);
@@ -252,7 +253,7 @@ HealthCheckClient::CallState::CallState(
252
253
  : health_check_client_(std::move(health_check_client)),
253
254
  pollent_(grpc_polling_entity_create_from_pollset_set(interested_parties)),
254
255
  arena_(Arena::Create(health_check_client_->connected_subchannel_
255
- ->GetInitialCallSizeEstimate(0))),
256
+ ->GetInitialCallSizeEstimate())),
256
257
  payload_(context_) {}
257
258
 
258
259
  HealthCheckClient::CallState::~CallState() {
@@ -291,7 +292,6 @@ void HealthCheckClient::CallState::StartCall() {
291
292
  arena_,
292
293
  context_,
293
294
  &call_combiner_,
294
- 0, // parent_data_size
295
295
  };
296
296
  grpc_error* error = GRPC_ERROR_NONE;
297
297
  call_ = SubchannelCall::Create(std::move(args), &error).release();
@@ -44,7 +44,7 @@ namespace grpc_core {
44
44
 
45
45
  class HealthCheckClient : public InternallyRefCounted<HealthCheckClient> {
46
46
  public:
47
- HealthCheckClient(const char* service_name,
47
+ HealthCheckClient(std::string service_name,
48
48
  RefCountedPtr<ConnectedSubchannel> connected_subchannel,
49
49
  grpc_pollset_set* interested_parties,
50
50
  RefCountedPtr<channelz::SubchannelNode> channelz_node,
@@ -150,7 +150,7 @@ class HealthCheckClient : public InternallyRefCounted<HealthCheckClient> {
150
150
  void SetHealthStatusLocked(grpc_connectivity_state state,
151
151
  const char* reason); // Requires holding mu_.
152
152
 
153
- const char* service_name_; // Do not own.
153
+ std::string service_name_;
154
154
  RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
155
155
  grpc_pollset_set* interested_parties_; // Do not own.
156
156
  RefCountedPtr<channelz::SubchannelNode> channelz_node_;
@@ -332,7 +332,7 @@ void HttpConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
332
332
  grpc_httpcli_request request;
333
333
  request.host = server_name;
334
334
  request.ssl_host_override = nullptr;
335
- request.http.method = (char*)"CONNECT";
335
+ request.http.method = const_cast<char*>("CONNECT");
336
336
  request.http.path = server_name;
337
337
  request.http.version = GRPC_HTTP_HTTP10; // Set by OnReadDone
338
338
  request.http.hdrs = headers;
@@ -382,8 +382,7 @@ class HttpConnectHandshakerFactory : public HandshakerFactory {
382
382
  } // namespace grpc_core
383
383
 
384
384
  void grpc_http_connect_register_handshaker_factory() {
385
- using namespace grpc_core;
386
- HandshakerRegistry::RegisterHandshakerFactory(
387
- true /* at_start */, HANDSHAKER_CLIENT,
388
- absl::make_unique<HttpConnectHandshakerFactory>());
385
+ grpc_core::HandshakerRegistry::RegisterHandshakerFactory(
386
+ true /* at_start */, grpc_core::HANDSHAKER_CLIENT,
387
+ absl::make_unique<grpc_core::HttpConnectHandshakerFactory>());
389
388
  }
@@ -24,6 +24,7 @@
24
24
  #include <string.h>
25
25
 
26
26
  #include "absl/strings/str_cat.h"
27
+ #include "absl/strings/strip.h"
27
28
 
28
29
  #include <grpc/support/alloc.h>
29
30
  #include <grpc/support/log.h>
@@ -47,9 +48,10 @@ namespace {
47
48
  * credentials if present in the 'http_proxy' env var, otherwise leaves it
48
49
  * unchanged. It is caller's responsibility to gpr_free user_cred.
49
50
  */
51
+ // TODO(hork): change this to return std::string
50
52
  char* GetHttpProxyServer(const grpc_channel_args* args, char** user_cred) {
51
53
  GPR_ASSERT(user_cred != nullptr);
52
- grpc_uri* uri = nullptr;
54
+ absl::StatusOr<URI> uri;
53
55
  char* proxy_name = nullptr;
54
56
  char** authority_strs = nullptr;
55
57
  size_t authority_nstrs;
@@ -69,17 +71,20 @@ char* GetHttpProxyServer(const grpc_channel_args* args, char** user_cred) {
69
71
  if (uri_str == nullptr) return nullptr;
70
72
  // an emtpy value means "don't use proxy"
71
73
  if (uri_str[0] == '\0') goto done;
72
- uri = grpc_uri_parse(uri_str, false /* suppress_errors */);
73
- if (uri == nullptr || uri->authority == nullptr) {
74
- gpr_log(GPR_ERROR, "cannot parse value of 'http_proxy' env var");
74
+ uri = URI::Parse(uri_str);
75
+ if (!uri.ok() || uri->authority().empty()) {
76
+ gpr_log(GPR_ERROR, "cannot parse value of 'http_proxy' env var. Error: %s",
77
+ uri.status().ToString().c_str());
75
78
  goto done;
76
79
  }
77
- if (strcmp(uri->scheme, "http") != 0) {
78
- gpr_log(GPR_ERROR, "'%s' scheme not supported in proxy URI", uri->scheme);
80
+ if (uri->scheme() != "http") {
81
+ gpr_log(GPR_ERROR, "'%s' scheme not supported in proxy URI",
82
+ uri->scheme().c_str());
79
83
  goto done;
80
84
  }
81
85
  /* Split on '@' to separate user credentials from host */
82
- gpr_string_split(uri->authority, "@", &authority_strs, &authority_nstrs);
86
+ gpr_string_split(uri->authority().c_str(), "@", &authority_strs,
87
+ &authority_nstrs);
83
88
  GPR_ASSERT(authority_nstrs != 0); /* should have at least 1 string */
84
89
  if (authority_nstrs == 1) {
85
90
  /* User cred not present in authority */
@@ -99,7 +104,6 @@ char* GetHttpProxyServer(const grpc_channel_args* args, char** user_cred) {
99
104
  gpr_free(authority_strs);
100
105
  done:
101
106
  gpr_free(uri_str);
102
- grpc_uri_destroy(uri);
103
107
  return proxy_name;
104
108
  }
105
109
 
@@ -114,15 +118,15 @@ class HttpProxyMapper : public ProxyMapperInterface {
114
118
  *name_to_resolve = GetHttpProxyServer(args, &user_cred);
115
119
  if (*name_to_resolve == nullptr) return false;
116
120
  char* no_proxy_str = nullptr;
117
- grpc_uri* uri = grpc_uri_parse(server_uri, false /* suppress_errors */);
118
- if (uri == nullptr || uri->path[0] == '\0') {
121
+ absl::StatusOr<URI> uri = URI::Parse(server_uri);
122
+ if (!uri.ok() || uri->path().empty()) {
119
123
  gpr_log(GPR_ERROR,
120
124
  "'http_proxy' environment variable set, but cannot "
121
- "parse server URI '%s' -- not using proxy",
122
- server_uri);
125
+ "parse server URI '%s' -- not using proxy. Error: %s",
126
+ server_uri, uri.status().ToString().c_str());
123
127
  goto no_use_proxy;
124
128
  }
125
- if (strcmp(uri->scheme, "unix") == 0) {
129
+ if (uri->scheme() == "unix") {
126
130
  gpr_log(GPR_INFO, "not using proxy for Unix domain socket '%s'",
127
131
  server_uri);
128
132
  goto no_use_proxy;
@@ -135,9 +139,8 @@ class HttpProxyMapper : public ProxyMapperInterface {
135
139
  bool use_proxy = true;
136
140
  std::string server_host;
137
141
  std::string server_port;
138
- if (!grpc_core::SplitHostPort(
139
- uri->path[0] == '/' ? uri->path + 1 : uri->path, &server_host,
140
- &server_port)) {
142
+ if (!SplitHostPort(absl::StripPrefix(uri->path(), "/"), &server_host,
143
+ &server_port)) {
141
144
  gpr_log(GPR_INFO,
142
145
  "unable to split host and port, not checking no_proxy list for "
143
146
  "host '%s'",
@@ -172,8 +175,8 @@ class HttpProxyMapper : public ProxyMapperInterface {
172
175
  }
173
176
  grpc_arg args_to_add[2];
174
177
  args_to_add[0] = grpc_channel_arg_string_create(
175
- (char*)GRPC_ARG_HTTP_CONNECT_SERVER,
176
- uri->path[0] == '/' ? uri->path + 1 : uri->path);
178
+ const_cast<char*>(GRPC_ARG_HTTP_CONNECT_SERVER),
179
+ const_cast<char*>(absl::StripPrefix(uri->path(), "/").data()));
177
180
  if (user_cred != nullptr) {
178
181
  /* Use base64 encoding for user credentials as stated in RFC 7617 */
179
182
  char* encoded_user_cred =
@@ -188,11 +191,9 @@ class HttpProxyMapper : public ProxyMapperInterface {
188
191
  } else {
189
192
  *new_args = grpc_channel_args_copy_and_add(args, args_to_add, 1);
190
193
  }
191
- grpc_uri_destroy(uri);
192
194
  gpr_free(user_cred);
193
195
  return true;
194
196
  no_use_proxy:
195
- if (uri != nullptr) grpc_uri_destroy(uri);
196
197
  gpr_free(*name_to_resolve);
197
198
  *name_to_resolve = nullptr;
198
199
  gpr_free(user_cred);