Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / grpc / deps / grpc / src / core / ext / filters / client_channel / resolver / xds / xds_resolver.cc
diff --git a/legacy-libs/grpc/deps/grpc/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc b/legacy-libs/grpc/deps/grpc/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc
new file mode 100644 (file)
index 0000000..8be1b89
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ *
+ * Copyright 2019 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <grpc/support/port_platform.h>
+
+#include "src/core/ext/filters/client_channel/resolver_registry.h"
+
+namespace grpc_core {
+
+namespace {
+
+class XdsResolver : public Resolver {
+ public:
+  explicit XdsResolver(ResolverArgs args)
+      : Resolver(args.combiner, std::move(args.result_handler)),
+        args_(grpc_channel_args_copy(args.args)) {}
+  ~XdsResolver() override { grpc_channel_args_destroy(args_); }
+
+  void StartLocked() override;
+
+  void ShutdownLocked() override{};
+
+ private:
+  const grpc_channel_args* args_;
+};
+
+void XdsResolver::StartLocked() {
+  static const char* service_config =
+      "{\n"
+      "  \"loadBalancingConfig\":[\n"
+      "    { \"xds_experimental\":{} }\n"
+      "  ]\n"
+      "}";
+  Result result;
+  result.args = args_;
+  args_ = nullptr;
+  grpc_error* error = GRPC_ERROR_NONE;
+  result.service_config = ServiceConfig::Create(service_config, &error);
+  result_handler()->ReturnResult(std::move(result));
+}
+
+//
+// Factory
+//
+
+class XdsResolverFactory : public ResolverFactory {
+ public:
+  bool IsValidUri(const grpc_uri* uri) const override {
+    if (GPR_UNLIKELY(0 != strcmp(uri->authority, ""))) {
+      gpr_log(GPR_ERROR, "URI authority not supported");
+      return false;
+    }
+    return true;
+  }
+
+  OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
+    if (!IsValidUri(args.uri)) return nullptr;
+    return OrphanablePtr<Resolver>(New<XdsResolver>(std::move(args)));
+  }
+
+  const char* scheme() const override { return "xds-experimental"; }
+};
+
+}  // namespace
+
+}  // namespace grpc_core
+
+void grpc_resolver_xds_init() {
+  grpc_core::ResolverRegistry::Builder::RegisterResolverFactory(
+      grpc_core::UniquePtr<grpc_core::ResolverFactory>(
+          grpc_core::New<grpc_core::XdsResolverFactory>()));
+}
+
+void grpc_resolver_xds_shutdown() {}