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
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <ares.h>
25
+
24
26
  #include "src/core/ext/filters/client_channel/server_address.h"
25
27
  #include "src/core/lib/iomgr/iomgr.h"
26
28
  #include "src/core/lib/iomgr/polling_entity.h"
@@ -93,5 +95,8 @@ bool grpc_ares_query_ipv6();
93
95
  void grpc_cares_wrapper_address_sorting_sort(
94
96
  const grpc_ares_request* request, grpc_core::ServerAddressList* addresses);
95
97
 
98
+ /* Exposed in this header for C-core tests only */
99
+ extern void (*grpc_ares_test_only_inject_config)(ares_channel channel);
100
+
96
101
  #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_DNS_C_ARES_GRPC_ARES_WRAPPER_H \
97
102
  */
@@ -74,7 +74,7 @@ class NativeDnsResolver : public Resolver {
74
74
  void OnResolvedLocked(grpc_error* error);
75
75
 
76
76
  /// name to resolve
77
- char* name_to_resolve_ = nullptr;
77
+ std::string name_to_resolve_;
78
78
  /// channel args
79
79
  grpc_channel_args* channel_args_ = nullptr;
80
80
  /// pollset_set to drive the name resolution process
@@ -107,9 +107,7 @@ NativeDnsResolver::NativeDnsResolver(ResolverArgs args)
107
107
  .set_multiplier(GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER)
108
108
  .set_jitter(GRPC_DNS_RECONNECT_JITTER)
109
109
  .set_max_backoff(GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000)) {
110
- char* path = args.uri->path;
111
- if (path[0] == '/') ++path;
112
- name_to_resolve_ = gpr_strdup(path);
110
+ name_to_resolve_ = std::string(absl::StripPrefix(args.uri.path(), "/"));
113
111
  channel_args_ = grpc_channel_args_copy(args.args);
114
112
  const grpc_arg* arg = grpc_channel_args_find(
115
113
  args.args, GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS);
@@ -124,7 +122,6 @@ NativeDnsResolver::NativeDnsResolver(ResolverArgs args)
124
122
  NativeDnsResolver::~NativeDnsResolver() {
125
123
  grpc_channel_args_destroy(channel_args_);
126
124
  grpc_pollset_set_destroy(interested_parties_);
127
- gpr_free(name_to_resolve_);
128
125
  }
129
126
 
130
127
  void NativeDnsResolver::StartLocked() { MaybeStartResolvingLocked(); }
@@ -269,8 +266,8 @@ void NativeDnsResolver::StartResolvingLocked() {
269
266
  addresses_ = nullptr;
270
267
  GRPC_CLOSURE_INIT(&on_resolved_, NativeDnsResolver::OnResolved, this,
271
268
  grpc_schedule_on_exec_ctx);
272
- grpc_resolve_address(name_to_resolve_, kDefaultPort, interested_parties_,
273
- &on_resolved_, &addresses_);
269
+ grpc_resolve_address(name_to_resolve_.c_str(), kDefaultPort,
270
+ interested_parties_, &on_resolved_, &addresses_);
274
271
  last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now();
275
272
  }
276
273
 
@@ -280,8 +277,8 @@ void NativeDnsResolver::StartResolvingLocked() {
280
277
 
281
278
  class NativeDnsResolverFactory : public ResolverFactory {
282
279
  public:
283
- bool IsValidUri(const grpc_uri* uri) const override {
284
- if (GPR_UNLIKELY(0 != strcmp(uri->authority, ""))) {
280
+ bool IsValidUri(const URI& uri) const override {
281
+ if (GPR_UNLIKELY(!uri.authority().empty())) {
285
282
  gpr_log(GPR_ERROR, "authority based dns uri's not supported");
286
283
  return false;
287
284
  }
@@ -339,7 +339,7 @@ grpc_arg FakeResolverResponseGenerator::MakeChannelArg(
339
339
  FakeResolverResponseGenerator* generator) {
340
340
  grpc_arg arg;
341
341
  arg.type = GRPC_ARG_POINTER;
342
- arg.key = (char*)GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR;
342
+ arg.key = const_cast<char*>(GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR);
343
343
  arg.value.pointer.p = generator;
344
344
  arg.value.pointer.vtable = &response_generator_arg_vtable;
345
345
  return arg;
@@ -362,7 +362,7 @@ namespace {
362
362
 
363
363
  class FakeResolverFactory : public ResolverFactory {
364
364
  public:
365
- bool IsValidUri(const grpc_uri* /*uri*/) const override { return true; }
365
+ bool IsValidUri(const URI& /*uri*/) const override { return true; }
366
366
 
367
367
  OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
368
368
  return MakeOrphanable<FakeResolver>(std::move(args));
@@ -23,6 +23,8 @@
23
23
  #include <stdlib.h>
24
24
  #include <string.h>
25
25
 
26
+ #include "absl/strings/str_split.h"
27
+
26
28
  #include <grpc/support/alloc.h>
27
29
  #include <grpc/support/string_util.h>
28
30
 
@@ -78,30 +80,20 @@ void SockaddrResolver::StartLocked() {
78
80
  // Factory
79
81
  //
80
82
 
81
- void DoNothing(void* /*ignored*/) {}
82
-
83
- bool ParseUri(const grpc_uri* uri,
84
- bool parse(const grpc_uri* uri, grpc_resolved_address* dst),
83
+ bool ParseUri(const URI& uri,
84
+ bool parse(const URI& uri, grpc_resolved_address* dst),
85
85
  ServerAddressList* addresses) {
86
- if (0 != strcmp(uri->authority, "")) {
86
+ if (!uri.authority().empty()) {
87
87
  gpr_log(GPR_ERROR, "authority-based URIs not supported by the %s scheme",
88
- uri->scheme);
88
+ uri.scheme().c_str());
89
89
  return false;
90
90
  }
91
91
  // Construct addresses.
92
- grpc_slice path_slice =
93
- grpc_slice_new(uri->path, strlen(uri->path), DoNothing);
94
- grpc_slice_buffer path_parts;
95
- grpc_slice_buffer_init(&path_parts);
96
- grpc_slice_split(path_slice, ",", &path_parts);
97
92
  bool errors_found = false;
98
- for (size_t i = 0; i < path_parts.count; i++) {
99
- grpc_uri ith_uri = *uri;
100
- grpc_core::UniquePtr<char> part_str(
101
- grpc_slice_to_c_string(path_parts.slices[i]));
102
- ith_uri.path = part_str.get();
93
+ for (absl::string_view ith_path : absl::StrSplit(uri.path(), ',')) {
94
+ URI ith_uri(uri.scheme(), "", std::string(ith_path), {}, "");
103
95
  grpc_resolved_address addr;
104
- if (!parse(&ith_uri, &addr)) {
96
+ if (!parse(ith_uri, &addr)) {
105
97
  errors_found = true;
106
98
  break;
107
99
  }
@@ -109,14 +101,11 @@ bool ParseUri(const grpc_uri* uri,
109
101
  addresses->emplace_back(addr, nullptr /* args */);
110
102
  }
111
103
  }
112
- grpc_slice_buffer_destroy_internal(&path_parts);
113
- grpc_slice_unref_internal(path_slice);
114
104
  return !errors_found;
115
105
  }
116
106
 
117
107
  OrphanablePtr<Resolver> CreateSockaddrResolver(
118
- ResolverArgs args,
119
- bool parse(const grpc_uri* uri, grpc_resolved_address* dst)) {
108
+ ResolverArgs args, bool parse(const URI& uri, grpc_resolved_address* dst)) {
120
109
  ServerAddressList addresses;
121
110
  if (!ParseUri(args.uri, parse, &addresses)) return nullptr;
122
111
  // Instantiate resolver.
@@ -126,7 +115,7 @@ OrphanablePtr<Resolver> CreateSockaddrResolver(
126
115
 
127
116
  class IPv4ResolverFactory : public ResolverFactory {
128
117
  public:
129
- bool IsValidUri(const grpc_uri* uri) const override {
118
+ bool IsValidUri(const URI& uri) const override {
130
119
  return ParseUri(uri, grpc_parse_ipv4, nullptr);
131
120
  }
132
121
 
@@ -139,7 +128,7 @@ class IPv4ResolverFactory : public ResolverFactory {
139
128
 
140
129
  class IPv6ResolverFactory : public ResolverFactory {
141
130
  public:
142
- bool IsValidUri(const grpc_uri* uri) const override {
131
+ bool IsValidUri(const URI& uri) const override {
143
132
  return ParseUri(uri, grpc_parse_ipv6, nullptr);
144
133
  }
145
134
 
@@ -153,7 +142,7 @@ class IPv6ResolverFactory : public ResolverFactory {
153
142
  #ifdef GRPC_HAVE_UNIX_SOCKET
154
143
  class UnixResolverFactory : public ResolverFactory {
155
144
  public:
156
- bool IsValidUri(const grpc_uri* uri) const override {
145
+ bool IsValidUri(const URI& uri) const override {
157
146
  return ParseUri(uri, grpc_parse_unix, nullptr);
158
147
  }
159
148
 
@@ -161,9 +150,8 @@ class UnixResolverFactory : public ResolverFactory {
161
150
  return CreateSockaddrResolver(std::move(args), grpc_parse_unix);
162
151
  }
163
152
 
164
- grpc_core::UniquePtr<char> GetDefaultAuthority(
165
- grpc_uri* /*uri*/) const override {
166
- return grpc_core::UniquePtr<char>(gpr_strdup("localhost"));
153
+ std::string GetDefaultAuthority(const URI& uri) const override {
154
+ return "localhost";
167
155
  }
168
156
 
169
157
  const char* scheme() const override { return "unix"; }
@@ -171,7 +159,7 @@ class UnixResolverFactory : public ResolverFactory {
171
159
 
172
160
  class UnixAbstractResolverFactory : public ResolverFactory {
173
161
  public:
174
- bool IsValidUri(const grpc_uri* uri) const override {
162
+ bool IsValidUri(const URI& uri) const override {
175
163
  return ParseUri(uri, grpc_parse_unix_abstract, nullptr);
176
164
  }
177
165
 
@@ -179,9 +167,8 @@ class UnixAbstractResolverFactory : public ResolverFactory {
179
167
  return CreateSockaddrResolver(std::move(args), grpc_parse_unix_abstract);
180
168
  }
181
169
 
182
- grpc_core::UniquePtr<char> GetDefaultAuthority(
183
- grpc_uri* /*uri*/) const override {
184
- return grpc_core::UniquePtr<char>(gpr_strdup("localhost"));
170
+ std::string GetDefaultAuthority(const URI& /*uri*/) const override {
171
+ return "localhost";
185
172
  }
186
173
 
187
174
  const char* scheme() const override { return "unix-abstract"; }
@@ -48,11 +48,9 @@ class XdsResolver : public Resolver {
48
48
  explicit XdsResolver(ResolverArgs args)
49
49
  : Resolver(std::move(args.work_serializer),
50
50
  std::move(args.result_handler)),
51
+ server_name_(absl::StripPrefix(args.uri.path(), "/")),
51
52
  args_(grpc_channel_args_copy(args.args)),
52
53
  interested_parties_(args.pollset_set) {
53
- char* path = args.uri->path;
54
- if (path[0] == '/') ++path;
55
- server_name_ = path;
56
54
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
57
55
  gpr_log(GPR_INFO, "[xds_resolver %p] created for server name %s", this,
58
56
  server_name_.c_str());
@@ -762,8 +760,8 @@ void XdsResolver::MaybeRemoveUnusedClusters() {
762
760
 
763
761
  class XdsResolverFactory : public ResolverFactory {
764
762
  public:
765
- bool IsValidUri(const grpc_uri* uri) const override {
766
- if (GPR_UNLIKELY(0 != strcmp(uri->authority, ""))) {
763
+ bool IsValidUri(const URI& uri) const override {
764
+ if (GPR_UNLIKELY(!uri.authority().empty())) {
767
765
  gpr_log(GPR_ERROR, "URI authority not supported");
768
766
  return false;
769
767
  }
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "absl/strings/strip.h"
25
+
24
26
  #include <grpc/support/string_util.h>
25
27
 
26
28
  #include "src/core/ext/filters/client_channel/resolver.h"
@@ -33,7 +35,7 @@ namespace grpc_core {
33
35
 
34
36
  struct ResolverArgs {
35
37
  /// The parsed URI to resolve.
36
- grpc_uri* uri = nullptr;
38
+ URI uri;
37
39
  /// Channel args to be included in resolver results.
38
40
  const grpc_channel_args* args = nullptr;
39
41
  /// Used to drive I/O in the name resolution process.
@@ -48,17 +50,15 @@ class ResolverFactory {
48
50
  public:
49
51
  /// Returns a bool indicating whether the input uri is valid to create a
50
52
  /// resolver.
51
- virtual bool IsValidUri(const grpc_uri* uri) const = 0;
53
+ virtual bool IsValidUri(const URI& uri) const = 0;
52
54
 
53
55
  /// Returns a new resolver instance.
54
56
  virtual OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const = 0;
55
57
 
56
58
  /// Returns a string representing the default authority to use for this
57
59
  /// scheme.
58
- virtual grpc_core::UniquePtr<char> GetDefaultAuthority(grpc_uri* uri) const {
59
- const char* path = uri->path;
60
- if (path[0] == '/') ++path;
61
- return grpc_core::UniquePtr<char>(gpr_strdup(path));
60
+ virtual std::string GetDefaultAuthority(const URI& uri) const {
61
+ return std::string(absl::StripPrefix(uri.path(), "/"));
62
62
  }
63
63
 
64
64
  /// Returns the URI scheme that this factory implements.
@@ -24,6 +24,7 @@
24
24
 
25
25
  #include "absl/container/inlined_vector.h"
26
26
  #include "absl/strings/str_cat.h"
27
+ #include "absl/strings/str_format.h"
27
28
 
28
29
  #include <grpc/support/alloc.h>
29
30
  #include <grpc/support/log.h>
@@ -50,9 +51,9 @@ class RegistryState {
50
51
  factories_.push_back(std::move(factory));
51
52
  }
52
53
 
53
- ResolverFactory* LookupResolverFactory(const char* scheme) const {
54
+ ResolverFactory* LookupResolverFactory(absl::string_view scheme) const {
54
55
  for (size_t i = 0; i < factories_.size(); ++i) {
55
- if (strcmp(scheme, factories_[i]->scheme()) == 0) {
56
+ if (scheme == factories_[i]->scheme()) {
56
57
  return factories_[i].get();
57
58
  }
58
59
  }
@@ -65,26 +66,35 @@ class RegistryState {
65
66
  // point to the parsed URI.
66
67
  // If \a default_prefix_ needs to be prepended, sets \a canonical_target
67
68
  // to the canonical target string.
68
- ResolverFactory* FindResolverFactory(const char* target, grpc_uri** uri,
69
+ ResolverFactory* FindResolverFactory(absl::string_view target, URI* uri,
69
70
  std::string* canonical_target) const {
70
71
  GPR_ASSERT(uri != nullptr);
71
- *uri = grpc_uri_parse(target, true);
72
+ absl::StatusOr<URI> tmp_uri = URI::Parse(target);
72
73
  ResolverFactory* factory =
73
- *uri == nullptr ? nullptr : LookupResolverFactory((*uri)->scheme);
74
- if (factory == nullptr) {
75
- grpc_uri_destroy(*uri);
76
- *canonical_target = absl::StrCat(default_prefix_.get(), target);
77
- *uri = grpc_uri_parse(canonical_target->c_str(), true);
78
- factory =
79
- *uri == nullptr ? nullptr : LookupResolverFactory((*uri)->scheme);
80
- if (factory == nullptr) {
81
- grpc_uri_destroy(grpc_uri_parse(target, false));
82
- grpc_uri_destroy(grpc_uri_parse(canonical_target->c_str(), false));
83
- gpr_log(GPR_ERROR, "don't know how to resolve '%s' or '%s'", target,
84
- canonical_target->c_str());
85
- }
74
+ tmp_uri.ok() ? LookupResolverFactory(tmp_uri->scheme()) : nullptr;
75
+ if (factory != nullptr) {
76
+ *uri = *tmp_uri;
77
+ return factory;
78
+ }
79
+ *canonical_target = absl::StrCat(default_prefix_.get(), target);
80
+ absl::StatusOr<URI> tmp_uri2 = URI::Parse(*canonical_target);
81
+ factory =
82
+ tmp_uri2.ok() ? LookupResolverFactory(tmp_uri2->scheme()) : nullptr;
83
+ if (factory != nullptr) {
84
+ *uri = *tmp_uri2;
85
+ return factory;
86
86
  }
87
- return factory;
87
+ if (!tmp_uri.ok() || !tmp_uri2.ok()) {
88
+ gpr_log(GPR_ERROR, "%s",
89
+ absl::StrFormat("Error parsing URI(s). '%s':%s; '%s':%s", target,
90
+ tmp_uri.status().ToString(), *canonical_target,
91
+ tmp_uri2.status().ToString())
92
+ .c_str());
93
+ return nullptr;
94
+ }
95
+ gpr_log(GPR_ERROR, "Don't know how to resolve '%s' or '%s'.",
96
+ std::string(target).c_str(), canonical_target->c_str());
97
+ return nullptr;
88
98
  }
89
99
 
90
100
  private:
@@ -114,10 +124,9 @@ void ResolverRegistry::Builder::ShutdownRegistry() {
114
124
  g_state = nullptr;
115
125
  }
116
126
 
117
- void ResolverRegistry::Builder::SetDefaultPrefix(
118
- const char* default_resolver_prefix) {
127
+ void ResolverRegistry::Builder::SetDefaultPrefix(const char* default_prefix) {
119
128
  InitRegistry();
120
- g_state->SetDefaultPrefix(default_resolver_prefix);
129
+ g_state->SetDefaultPrefix(default_prefix);
121
130
  }
122
131
 
123
132
  void ResolverRegistry::Builder::RegisterResolverFactory(
@@ -135,14 +144,12 @@ ResolverFactory* ResolverRegistry::LookupResolverFactory(const char* scheme) {
135
144
  return g_state->LookupResolverFactory(scheme);
136
145
  }
137
146
 
138
- bool ResolverRegistry::IsValidTarget(const char* target) {
139
- grpc_uri* uri = nullptr;
147
+ bool ResolverRegistry::IsValidTarget(absl::string_view target) {
148
+ URI uri;
140
149
  std::string canonical_target;
141
150
  ResolverFactory* factory =
142
151
  g_state->FindResolverFactory(target, &uri, &canonical_target);
143
- bool result = factory == nullptr ? false : factory->IsValidUri(uri);
144
- grpc_uri_destroy(uri);
145
- return result;
152
+ return factory == nullptr ? false : factory->IsValidUri(uri);
146
153
  }
147
154
 
148
155
  OrphanablePtr<Resolver> ResolverRegistry::CreateResolver(
@@ -151,12 +158,10 @@ OrphanablePtr<Resolver> ResolverRegistry::CreateResolver(
151
158
  std::shared_ptr<WorkSerializer> work_serializer,
152
159
  std::unique_ptr<Resolver::ResultHandler> result_handler) {
153
160
  GPR_ASSERT(g_state != nullptr);
154
- grpc_uri* uri = nullptr;
155
161
  std::string canonical_target;
156
- ResolverFactory* factory =
157
- g_state->FindResolverFactory(target, &uri, &canonical_target);
158
162
  ResolverArgs resolver_args;
159
- resolver_args.uri = uri;
163
+ ResolverFactory* factory = g_state->FindResolverFactory(
164
+ target, &resolver_args.uri, &canonical_target);
160
165
  resolver_args.args = args;
161
166
  resolver_args.pollset_set = pollset_set;
162
167
  resolver_args.work_serializer = std::move(work_serializer);
@@ -164,30 +169,26 @@ OrphanablePtr<Resolver> ResolverRegistry::CreateResolver(
164
169
  OrphanablePtr<Resolver> resolver =
165
170
  factory == nullptr ? nullptr
166
171
  : factory->CreateResolver(std::move(resolver_args));
167
- grpc_uri_destroy(uri);
168
172
  return resolver;
169
173
  }
170
174
 
171
- grpc_core::UniquePtr<char> ResolverRegistry::GetDefaultAuthority(
172
- const char* target) {
175
+ std::string ResolverRegistry::GetDefaultAuthority(absl::string_view target) {
173
176
  GPR_ASSERT(g_state != nullptr);
174
- grpc_uri* uri = nullptr;
177
+ URI uri;
175
178
  std::string canonical_target;
176
179
  ResolverFactory* factory =
177
180
  g_state->FindResolverFactory(target, &uri, &canonical_target);
178
- grpc_core::UniquePtr<char> authority =
179
- factory == nullptr ? nullptr : factory->GetDefaultAuthority(uri);
180
- grpc_uri_destroy(uri);
181
+ std::string authority =
182
+ factory == nullptr ? "" : factory->GetDefaultAuthority(uri);
181
183
  return authority;
182
184
  }
183
185
 
184
186
  grpc_core::UniquePtr<char> ResolverRegistry::AddDefaultPrefixIfNeeded(
185
187
  const char* target) {
186
188
  GPR_ASSERT(g_state != nullptr);
187
- grpc_uri* uri = nullptr;
189
+ URI uri;
188
190
  std::string canonical_target;
189
191
  g_state->FindResolverFactory(target, &uri, &canonical_target);
190
- grpc_uri_destroy(uri);
191
192
  return grpc_core::UniquePtr<char>(canonical_target.empty()
192
193
  ? gpr_strdup(target)
193
194
  : gpr_strdup(canonical_target.c_str()));
@@ -51,7 +51,7 @@ class ResolverRegistry {
51
51
  };
52
52
 
53
53
  /// Checks whether the user input \a target is valid to create a resolver.
54
- static bool IsValidTarget(const char* target);
54
+ static bool IsValidTarget(absl::string_view target);
55
55
 
56
56
  /// Creates a resolver given \a target.
57
57
  /// First tries to parse \a target as a URI. If this succeeds, tries
@@ -73,7 +73,7 @@ class ResolverRegistry {
73
73
  std::unique_ptr<Resolver::ResultHandler> result_handler);
74
74
 
75
75
  /// Returns the default authority to pass from a client for \a target.
76
- static grpc_core::UniquePtr<char> GetDefaultAuthority(const char* target);
76
+ static std::string GetDefaultAuthority(absl::string_view target);
77
77
 
78
78
  /// Returns \a target with the default prefix prepended, if needed.
79
79
  static grpc_core::UniquePtr<char> AddDefaultPrefixIfNeeded(
@@ -248,27 +248,25 @@ grpc_error* ParseRetryThrottling(
248
248
  return GRPC_ERROR_CREATE_FROM_VECTOR("retryPolicy", &error_list);
249
249
  }
250
250
 
251
- const char* ParseHealthCheckConfig(const Json& field, grpc_error** error) {
251
+ absl::optional<std::string> ParseHealthCheckConfig(const Json& field,
252
+ grpc_error** error) {
252
253
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
253
- const char* service_name = nullptr;
254
254
  if (field.type() != Json::Type::OBJECT) {
255
255
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
256
256
  "field:healthCheckConfig error:should be of type object");
257
- return nullptr;
257
+ return absl::nullopt;
258
258
  }
259
259
  std::vector<grpc_error*> error_list;
260
+ absl::optional<std::string> service_name;
260
261
  auto it = field.object_value().find("serviceName");
261
262
  if (it != field.object_value().end()) {
262
263
  if (it->second.type() != Json::Type::STRING) {
263
264
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
264
265
  "field:serviceName error:should be of type string"));
265
266
  } else {
266
- service_name = it->second.string_value().c_str();
267
+ service_name = it->second.string_value();
267
268
  }
268
269
  }
269
- if (!error_list.empty()) {
270
- return nullptr;
271
- }
272
270
  *error =
273
271
  GRPC_ERROR_CREATE_FROM_VECTOR("field:healthCheckConfig", &error_list);
274
272
  return service_name;
@@ -281,12 +279,8 @@ ClientChannelServiceConfigParser::ParseGlobalParams(
281
279
  const grpc_channel_args* /*args*/, const Json& json, grpc_error** error) {
282
280
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
283
281
  std::vector<grpc_error*> error_list;
284
- RefCountedPtr<LoadBalancingPolicy::Config> parsed_lb_config;
285
- std::string lb_policy_name;
286
- absl::optional<ClientChannelGlobalParsedConfig::RetryThrottling>
287
- retry_throttling;
288
- const char* health_check_service_name = nullptr;
289
282
  // Parse LB config.
283
+ RefCountedPtr<LoadBalancingPolicy::Config> parsed_lb_config;
290
284
  auto it = json.object_value().find("loadBalancingConfig");
291
285
  if (it != json.object_value().end()) {
292
286
  grpc_error* parse_error = GRPC_ERROR_NONE;
@@ -300,6 +294,7 @@ ClientChannelServiceConfigParser::ParseGlobalParams(
300
294
  }
301
295
  }
302
296
  // Parse deprecated LB policy.
297
+ std::string lb_policy_name;
303
298
  it = json.object_value().find("loadBalancingPolicy");
304
299
  if (it != json.object_value().end()) {
305
300
  if (it->second.type() != Json::Type::STRING) {
@@ -325,6 +320,8 @@ ClientChannelServiceConfigParser::ParseGlobalParams(
325
320
  }
326
321
  }
327
322
  // Parse retry throttling.
323
+ absl::optional<ClientChannelGlobalParsedConfig::RetryThrottling>
324
+ retry_throttling;
328
325
  it = json.object_value().find("retryThrottling");
329
326
  if (it != json.object_value().end()) {
330
327
  ClientChannelGlobalParsedConfig::RetryThrottling data;
@@ -336,6 +333,7 @@ ClientChannelServiceConfigParser::ParseGlobalParams(
336
333
  }
337
334
  }
338
335
  // Parse health check config.
336
+ absl::optional<std::string> health_check_service_name;
339
337
  it = json.object_value().find("healthCheckConfig");
340
338
  if (it != json.object_value().end()) {
341
339
  grpc_error* parsing_error = GRPC_ERROR_NONE;
@@ -350,7 +348,7 @@ ClientChannelServiceConfigParser::ParseGlobalParams(
350
348
  if (*error == GRPC_ERROR_NONE) {
351
349
  return absl::make_unique<ClientChannelGlobalParsedConfig>(
352
350
  std::move(parsed_lb_config), std::move(lb_policy_name),
353
- retry_throttling, health_check_service_name);
351
+ retry_throttling, std::move(health_check_service_name));
354
352
  }
355
353
  return nullptr;
356
354
  }