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;
#include <cache/CacheInterface.h>
+#include <config/PathConfig.h>
+#include <plugin/PluginManager.h>
+
namespace Cynara {
class CapacityCache : public PluginCache {
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,
KeyUsageList m_keyUsage;
KeyValueMap m_keyValue;
+ PluginManager m_pluginManager;
};
} //namespace Cynara
${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
${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
)