Add PluginManager to CapacityCache 78/28978/7
authorZofia Abramowska <z.abramowska@samsung.com>
Fri, 17 Oct 2014 16:28:34 +0000 (18:28 +0200)
committerZofia Abramowska <z.abramowska@samsung.com>
Fri, 14 Nov 2014 18:34:02 +0000 (19:34 +0100)
Change-Id: Icdaf1df3793db0a43ae4aadcf2d8d306b04f650f

src/client-common/cache/CapacityCache.cpp
src/client-common/cache/CapacityCache.h
src/common/CMakeLists.txt
src/common/plugin/PluginManager.cpp [moved from src/service/plugin/PluginManager.cpp with 100% similarity]
src/common/plugin/PluginManager.h [moved from src/service/plugin/PluginManager.h with 100% similarity]
src/service/CMakeLists.txt

index 7eb7e34..3174744 100644 (file)
@@ -47,15 +47,22 @@ int CapacityCache::get(const ClientSession &session, const PolicyKey &key) {
         auto &cachedValue = resultIt->second;
         auto &policyResult = std::get<0>(cachedValue);
 
+        ClientPluginInterfacePtr plugin;
         auto pluginIt = m_plugins.find(policyResult.policyType());
-        if (pluginIt == m_plugins.end()) {
-            LOGE("No plugin registered for given PolicyType : %" PRIu16,
-                    policyResult.policyType());
-            return CYNARA_API_ACCESS_DENIED;
+        if (pluginIt != m_plugins.end()) {
+            plugin = pluginIt->second;
+        } else {
+            plugin = std::dynamic_pointer_cast<ClientPluginInterface>(
+                              m_pluginManager.getPlugin(policyResult.policyType()));
+            if (!plugin) {
+                LOGE("No plugin registered for given PolicyType : %" PRIu16,
+                        policyResult.policyType());
+                return CYNARA_API_ACCESS_DENIED;
+            }
         }
 
         //Is it still usable?
-        ClientPluginInterfacePtr plugin = pluginIt->second;
+
         auto &prevSession = std::get<1>(cachedValue);
         auto usageIt = std::get<2>(cachedValue);
         bool updateSession = false;
index 4218078..24e1092 100644 (file)
@@ -29,6 +29,9 @@
 
 #include <cache/CacheInterface.h>
 
+#include <config/PathConfig.h>
+#include <plugin/PluginManager.h>
+
 namespace Cynara {
 
 class CapacityCache : public PluginCache {
@@ -36,7 +39,7 @@ public:
     static const std::size_t CACHE_DEFAULT_CAPACITY = 10000;
 
     CapacityCache(std::size_t capacity = CACHE_DEFAULT_CAPACITY) :
-        m_capacity(capacity) {}
+        m_capacity(capacity), m_pluginManager(PathConfig::PluginPath::clientDir) {}
 
     int get(const ClientSession &session, const PolicyKey &key);
     int update(const ClientSession& session,
@@ -57,6 +60,7 @@ private:
 
     KeyUsageList m_keyUsage;
     KeyValueMap m_keyValue;
+    PluginManager m_pluginManager;
 };
 
 } //namespace Cynara
index 9dc48de..98f5133 100644 (file)
@@ -29,6 +29,7 @@ SET(COMMON_SOURCES
     ${COMMON_PATH}/config/PathConfig.cpp
     ${COMMON_PATH}/containers/BinaryQueue.cpp
     ${COMMON_PATH}/log/log.cpp
+    ${COMMON_PATH}/plugin/PluginManager.cpp
     ${COMMON_PATH}/protocol/ProtocolAdmin.cpp
     ${COMMON_PATH}/protocol/ProtocolClient.cpp
     ${COMMON_PATH}/protocol/ProtocolFrame.cpp
index f8d2eb8..c317d8e 100644 (file)
@@ -22,7 +22,6 @@ SET(CYNARA_SOURCES
     ${CYNARA_SERVICE_PATH}/logic/Logic.cpp
     ${CYNARA_SERVICE_PATH}/main/Cynara.cpp
     ${CYNARA_SERVICE_PATH}/main/main.cpp
-    ${CYNARA_SERVICE_PATH}/plugin/PluginManager.cpp
     ${CYNARA_SERVICE_PATH}/sockets/Descriptor.cpp
     ${CYNARA_SERVICE_PATH}/sockets/SocketManager.cpp
     )