Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / grpc-cloned / deps / grpc / src / core / tsi / alts / handshaker / alts_shared_resource.cc
diff --git a/legacy-libs/grpc-cloned/deps/grpc/src/core/tsi/alts/handshaker/alts_shared_resource.cc b/legacy-libs/grpc-cloned/deps/grpc/src/core/tsi/alts/handshaker/alts_shared_resource.cc
new file mode 100644 (file)
index 0000000..3501257
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ *
+ * Copyright 2018 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/tsi/alts/handshaker/alts_shared_resource.h"
+
+#include <grpc/support/log.h>
+
+#include "src/core/tsi/alts/handshaker/alts_handshaker_client.h"
+
+static alts_shared_resource_dedicated g_alts_resource_dedicated;
+
+alts_shared_resource_dedicated* grpc_alts_get_shared_resource_dedicated(void) {
+  return &g_alts_resource_dedicated;
+}
+
+static void thread_worker(void* arg) {
+  while (true) {
+    grpc_event event =
+        grpc_completion_queue_next(g_alts_resource_dedicated.cq,
+                                   gpr_inf_future(GPR_CLOCK_REALTIME), nullptr);
+    GPR_ASSERT(event.type != GRPC_QUEUE_TIMEOUT);
+    if (event.type == GRPC_QUEUE_SHUTDOWN) {
+      break;
+    }
+    GPR_ASSERT(event.type == GRPC_OP_COMPLETE);
+    alts_handshaker_client* client =
+        static_cast<alts_handshaker_client*>(event.tag);
+    alts_handshaker_client_handle_response(client, event.success);
+  }
+}
+
+void grpc_alts_shared_resource_dedicated_init() {
+  g_alts_resource_dedicated.cq = nullptr;
+  gpr_mu_init(&g_alts_resource_dedicated.mu);
+}
+
+void grpc_alts_shared_resource_dedicated_start(
+    const char* handshaker_service_url) {
+  gpr_mu_lock(&g_alts_resource_dedicated.mu);
+  if (g_alts_resource_dedicated.cq == nullptr) {
+    g_alts_resource_dedicated.channel =
+        grpc_insecure_channel_create(handshaker_service_url, nullptr, nullptr);
+    g_alts_resource_dedicated.cq =
+        grpc_completion_queue_create_for_next(nullptr);
+    g_alts_resource_dedicated.thread =
+        grpc_core::Thread("alts_tsi_handshaker", &thread_worker, nullptr);
+    g_alts_resource_dedicated.interested_parties = grpc_pollset_set_create();
+    grpc_pollset_set_add_pollset(g_alts_resource_dedicated.interested_parties,
+                                 grpc_cq_pollset(g_alts_resource_dedicated.cq));
+    g_alts_resource_dedicated.thread.Start();
+  }
+  gpr_mu_unlock(&g_alts_resource_dedicated.mu);
+}
+
+void grpc_alts_shared_resource_dedicated_shutdown() {
+  if (g_alts_resource_dedicated.cq != nullptr) {
+    grpc_pollset_set_del_pollset(g_alts_resource_dedicated.interested_parties,
+                                 grpc_cq_pollset(g_alts_resource_dedicated.cq));
+    grpc_completion_queue_shutdown(g_alts_resource_dedicated.cq);
+    g_alts_resource_dedicated.thread.Join();
+    grpc_pollset_set_destroy(g_alts_resource_dedicated.interested_parties);
+    grpc_completion_queue_destroy(g_alts_resource_dedicated.cq);
+    grpc_channel_destroy(g_alts_resource_dedicated.channel);
+  }
+  gpr_mu_destroy(&g_alts_resource_dedicated.mu);
+}