apply option on MQProxy
authorYoungjae Shin <yj99.shin@samsung.com>
Fri, 26 Aug 2022 01:33:24 +0000 (10:33 +0900)
committerYoungjae Shin <yj99.shin@samsung.com>
Thu, 15 Sep 2022 05:34:30 +0000 (14:34 +0900)
 - For passing configures to custom mqtt client

12 files changed:
common/AittDiscovery.cc
common/AittOption.cc [new file with mode: 0644]
common/MQProxy.cc
common/MQProxy.h
common/ModuleLoader.cc
common/ModuleLoader.h
include/AittOption.h
include/MQ.h
modules/webrtc/MqttServer.cc
src/AITTImpl.cc
src/AittOption.cc [deleted file]
tests/ModuleLoader_test.cc

index 3d80864..6dc0c46 100644 (file)
@@ -26,7 +26,9 @@
 namespace aitt {
 
 AittDiscovery::AittDiscovery(const std::string &id, bool custom_broker)
-      : id_(id), discovery_mq(new MQProxy(id + "d", true, custom_broker)), callback_handle(nullptr)
+      : id_(id),
+        discovery_mq(new MQProxy(id + "d", AittOption(true, custom_broker))),
+        callback_handle(nullptr)
 {
 }
 
diff --git a/common/AittOption.cc b/common/AittOption.cc
new file mode 100644 (file)
index 0000000..87a8896
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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 "AittOption.h"
+
+#include "aitt_internal.h"
+
+AittOption::AittOption() : clear_session_(false), use_custom_broker(false)
+{
+}
+
+AittOption::AittOption(bool clear_session, bool use_custom_mqtt_broker)
+      : clear_session_(clear_session), use_custom_broker(use_custom_mqtt_broker)
+{
+}
+
+void AittOption::SetClearSession(bool val)
+{
+    clear_session_ = val;
+}
+
+bool AittOption::GetClearSession() const
+{
+    return clear_session_;
+}
+
+void AittOption::SetUseCustomMqttBroker(bool val)
+{
+    use_custom_broker = val;
+}
+
+bool AittOption::GetUseCustomMqttBroker() const
+{
+    return use_custom_broker;
+}
+
+void AittOption::SetServiceID(const std::string& id)
+{
+    RET_IF(false == use_custom_broker);
+    service_id = id;
+}
+
+const char* AittOption::GetServiceID() const
+{
+    return service_id.c_str();
+}
+
+void AittOption::SetLocationID(const std::string& id)
+{
+    RET_IF(false == use_custom_broker);
+    location_id = id;
+}
+
+const char* AittOption::GetLocationID() const
+{
+    return location_id.c_str();
+}
+
+void AittOption::SetRootCA(const std::string& ca)
+{
+    RET_IF(false == use_custom_broker);
+    root_ca = ca;
+}
+
+const char* AittOption::GetRootCA() const
+{
+    return root_ca.c_str();
+}
+
+void AittOption::SetCustomRWFile(const std::string& file)
+{
+    RET_IF(false == use_custom_broker);
+    custom_rw_file = file;
+}
+
+const char* AittOption::GetCustomRWFile() const
+{
+    return custom_rw_file.c_str();
+}
index 92ec58f..c1df3fb 100644 (file)
 
 namespace aitt {
 
-MQProxy::MQProxy(const std::string &id, bool clear_session, bool is_custom_broker)
-      : handle(nullptr, nullptr)
+MQProxy::MQProxy(const std::string &id, const AittOption &option) : handle(nullptr, nullptr)
 {
-    if (is_custom_broker) {
+    if (option.GetUseCustomMqttBroker()) {
         ModuleLoader loader;
         handle = loader.OpenModule(ModuleLoader::TYPE_CUSTOM_MQTT);
 
-        mq = loader.LoadMqttClient(handle.get(), "test", true);
+        mq = loader.LoadMqttClient(handle.get(), "test", option);
     } else {
-        mq = std::unique_ptr<MQ>(new MosquittoMQ(id, clear_session));
+        mq = std::unique_ptr<MQ>(new MosquittoMQ(id, option.GetClearSession()));
     }
 }
 
index 5da8e09..b6edb91 100644 (file)
@@ -23,7 +23,7 @@ namespace aitt {
 
 class MQProxy : public MQ {
   public:
-    explicit MQProxy(const std::string &id, bool clear_session, bool custom_broker);
+    explicit MQProxy(const std::string &id, const AittOption &option);
     virtual ~MQProxy() = default;
 
     void SetConnectionCallback(const MQConnectionCallback &cb);
index 8dae2fe..55ab336 100644 (file)
@@ -78,7 +78,7 @@ std::unique_ptr<AittTransport> ModuleLoader::LoadTransport(void *handle, const s
 }
 
 std::unique_ptr<MQ> ModuleLoader::LoadMqttClient(void *handle, const std::string &id,
-      bool clear_session)
+      const AittOption &option)
 {
     MQ::ModuleEntry get_instance_fn =
           reinterpret_cast<MQ::ModuleEntry>(dlsym(handle, MQ::MODULE_ENTRY_NAME));
@@ -87,7 +87,7 @@ std::unique_ptr<MQ> ModuleLoader::LoadMqttClient(void *handle, const std::string
         throw AittException(AittException::SYSTEM_ERR);
     }
 
-    std::unique_ptr<MQ> instance(static_cast<MQ *>(get_instance_fn(id.c_str(), clear_session)));
+    std::unique_ptr<MQ> instance(static_cast<MQ *>(get_instance_fn(id.c_str(), option)));
     if (instance == nullptr) {
         ERR("get_instance_fn(MQ) Fail");
         throw AittException(AittException::SYSTEM_ERR);
index c122ace..25e5faa 100644 (file)
@@ -43,7 +43,8 @@ class ModuleLoader {
     ModuleHandle OpenModule(Type type);
     std::unique_ptr<AittTransport> LoadTransport(void *handle, const std::string &ip,
           AittDiscovery &discovery);
-    std::unique_ptr<MQ> LoadMqttClient(void *handle, const std::string &id, bool clear_session);
+    std::unique_ptr<MQ> LoadMqttClient(void *handle, const std::string &id,
+          const AittOption &option);
 
   private:
     std::string GetModuleFilename(Type type);
index 40a4217..1669511 100644 (file)
@@ -17,6 +17,8 @@
 
 #include <AittTypes.h>
 
+#include <string>
+
 class API AittOption {
   public:
     AittOption();
@@ -24,11 +26,23 @@ class API AittOption {
     ~AittOption() = default;
 
     void SetClearSession(bool val);
-    bool GetClearSession();
+    bool GetClearSession() const;
     void SetUseCustomMqttBroker(bool val);
-    bool GetUseCustomMqttBroker();
+    bool GetUseCustomMqttBroker() const;
+    void SetServiceID(const std::string &id);
+    const char *GetServiceID() const;
+    void SetLocationID(const std::string &id);
+    const char *GetLocationID() const;
+    void SetRootCA(const std::string &ca);
+    const char *GetRootCA() const;
+    void SetCustomRWFile(const std::string &file);
+    const char *GetCustomRWFile() const;
 
   private:
     bool clear_session_;
-    bool use_custom_broker_;
+    bool use_custom_broker;
+    std::string service_id;
+    std::string location_id;
+    std::string root_ca;
+    std::string custom_rw_file;
 };
index 644c8d1..4c4f752 100644 (file)
@@ -15,6 +15,7 @@
  */
 #pragma once
 
+#include <AittOption.h>
 #include <MSG.h>
 
 #include <functional>
@@ -28,7 +29,7 @@ namespace aitt {
 
 class MQ {
   public:
-    typedef void *(*ModuleEntry)(const char *id, bool clear_session);
+    typedef void *(*ModuleEntry)(const char *id, const AittOption &option);
 
     using SubscribeCallback = std::function<void(MSG *msg, const std::string &topic,
           const void *data, const size_t datalen, void *user_data)>;
index a0afae5..726161e 100644 (file)
@@ -22,7 +22,7 @@
 #define MQTT_HANDLER_MGMT_QOS 2
 
 MqttServer::MqttServer(const Config &config)
-      : mq(new aitt::MQProxy(config.GetLocalId(), true, false))
+      : mq(new aitt::MQProxy(config.GetLocalId(), AittOption(true, false)))
 {
     broker_ip_ = config.GetBrokerIp();
     broker_port_ = config.GetBrokerPort();
index abb8754..3885660 100644 (file)
@@ -35,7 +35,7 @@ AITT::Impl::Impl(AITT &parent, const std::string &id, const std::string &my_ip,
       bool custom_broker)
       : public_api(parent),
         id_(id),
-        mq(new MQProxy(id, clear_session, custom_broker)),
+        mq(new MQProxy(id, AittOption(clear_session, custom_broker))),
         discovery(id, custom_broker),
         reply_id(0),
         transports{0}
diff --git a/src/AittOption.cc b/src/AittOption.cc
deleted file mode 100644 (file)
index 02e2299..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * 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 "AittOption.h"
-
-AittOption::AittOption() : clear_session_(false), use_custom_broker_(false)
-{
-}
-
-AittOption::AittOption(bool clear_session, bool use_custom_mqtt_broker)
-      : clear_session_(clear_session), use_custom_broker_(use_custom_mqtt_broker)
-{
-}
-
-void AittOption::SetClearSession(bool val)
-{
-    clear_session_ = val;
-}
-
-bool AittOption::GetClearSession()
-{
-    return clear_session_;
-}
-
-void AittOption::SetUseCustomMqttBroker(bool val)
-{
-    use_custom_broker_ = val;
-}
-
-bool AittOption::GetUseCustomMqttBroker()
-{
-    return use_custom_broker_;
-}
index 5e7678f..6cca0ef 100644 (file)
@@ -60,7 +60,7 @@ TEST_F(ModuleLoaderTest, LoadMqttClient_P_Anytime)
     ModuleLoader::ModuleHandle handle = loader.OpenModule(ModuleLoader::TYPE_CUSTOM_MQTT);
     if (handle) {
         EXPECT_NO_THROW({
-            auto module = loader.LoadMqttClient(handle.get(), "test", false);
+            auto module = loader.LoadMqttClient(handle.get(), "test", AittOption(false, true));
             ASSERT_NE(module, nullptr);
         });
     }
@@ -70,7 +70,7 @@ TEST_F(ModuleLoaderTest, LoadMqttClient_N_Anytime)
 {
     EXPECT_THROW(
           {
-              loader.LoadMqttClient(nullptr, "test", false);
+              loader.LoadMqttClient(nullptr, "test", AittOption(false, true));
               FAIL() << "Should not be called";
           },
           aitt::AittException);