Remove shared_ptr from logic/clients 90/36890/4
authorZofia Abramowska <z.abramowska@samsung.com>
Mon, 9 Mar 2015 12:28:28 +0000 (13:28 +0100)
committerZofia Abramowska <z.abramowska@samsung.com>
Mon, 30 Mar 2015 15:56:26 +0000 (17:56 +0200)
Remove shared_ptr members and arguments from Logic* Socket* classes,
where no shared ownership takes place.

Change-Id: I0fa3594c2acdb5468d324890d475e7bbd56ccbfe

14 files changed:
src/admin/logic/OnlineLogic.cpp
src/admin/logic/OnlineLogic.h
src/agent/logic/Logic.cpp
src/agent/logic/Logic.h
src/agent/socket/AgentSocketClient.cpp
src/agent/socket/AgentSocketClient.h
src/client-async/logic/Logic.cpp
src/client-async/logic/Logic.h
src/client-async/sockets/SocketClientAsync.cpp
src/client-async/sockets/SocketClientAsync.h
src/client/logic/Logic.cpp
src/client/logic/Logic.h
src/common/sockets/SocketClient.cpp
src/common/sockets/SocketClient.h

index e8964b0..88c73fb 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <cinttypes>
 #include <memory>
+#include <utility>
 
 #include <cynara-error.h>
 #include <common.h>
@@ -54,9 +55,8 @@
 
 namespace Cynara {
 
-OnlineLogic::OnlineLogic() {
-    m_socketClient = std::make_shared<SocketClient>(PathConfig::SocketPath::admin,
-                                                    std::make_shared<ProtocolAdmin>());
+OnlineLogic::OnlineLogic() : m_socketClient(PathConfig::SocketPath::admin,
+                                            std::make_shared<ProtocolAdmin>()) {
 }
 
 ProtocolFrameSequenceNumber generateSequenceNumber(void) {
@@ -65,11 +65,11 @@ ProtocolFrameSequenceNumber generateSequenceNumber(void) {
 }
 
 bool OnlineLogic::ensureConnection(void) {
-    return m_socketClient->isConnected() || m_socketClient->connect();
+    return m_socketClient.isConnected() || m_socketClient.connect();
 }
 
 template<typename Req, typename Res, typename... ReqArgs>
-int OnlineLogic::getResponse(std::shared_ptr<Res> &retResponse, ReqArgs... args) {
+int OnlineLogic::getResponse(std::shared_ptr<Res> &retResponse, ReqArgs&&... args) {
     if (!ensureConnection()) {
         LOGE("Cannot connect to cynara. Service not available.");
         return CYNARA_API_SERVICE_NOT_AVAILABLE;
@@ -77,10 +77,10 @@ int OnlineLogic::getResponse(std::shared_ptr<Res> &retResponse, ReqArgs... args)
 
     ProtocolFrameSequenceNumber sequenceNumber = generateSequenceNumber();
 
-    RequestPtr request = std::make_shared<Req>(args..., sequenceNumber);
+    Req request(std::forward<ReqArgs>(args)..., sequenceNumber);
     ResponsePtr response;
-    while (!(response = m_socketClient->askCynaraServer(request))) {
-        if (!m_socketClient->connect())
+    while (!(response = m_socketClient.askCynaraServer(request))) {
+        if (!m_socketClient.connect())
             return CYNARA_API_SERVICE_NOT_AVAILABLE;
     }
 
index fbcbc48..f1ac5a8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *  Copyright (c) 2014-2015 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.
@@ -31,11 +31,11 @@ namespace Cynara {
 
 class OnlineLogic : public ApiInterface {
 private:
-    SocketClientPtr m_socketClient;
+    SocketClient m_socketClient;
 
     bool ensureConnection(void);
     template<typename Req, typename Res, typename... ReqArgs>
-    int getResponse(std::shared_ptr<Res> &retResponse, ReqArgs... args);
+    int getResponse(std::shared_ptr<Res> &retResponse, ReqArgs&&... args);
 
 public:
     OnlineLogic();
index fe3cb3f..f652868 100644 (file)
@@ -51,9 +51,9 @@ Cynara::ProtocolFrameSequenceNumber generateSequenceNumber(void) {
 
 namespace Cynara {
 
-Logic::Logic(const AgentType &agentType) : m_agentType(agentType), m_registered(false) {
-    m_agentSocket = std::make_shared<AgentSocketClient>(PathConfig::SocketPath::agent,
-                                                        std::make_shared<ProtocolAgent>());
+Logic::Logic(const AgentType &agentType) : m_agentType(agentType),
+        m_socketClient(PathConfig::SocketPath::agent, std::make_shared<ProtocolAgent>()),
+        m_registered(false) {
     m_responseTakerPtr = std::make_shared<ProtocolAgent>();
     m_responseBuffer = std::make_shared<BinaryQueue>();
 }
@@ -63,8 +63,8 @@ int Logic::registerInCynara(void) {
 
     //Ask cynara service
     AgentRegisterResponsePtr registerResponsePtr;
-    RequestPtr request = std::make_shared<AgentRegisterRequest>(m_agentType, sequenceNumber);
-    ResponsePtr response = m_agentSocket->askCynaraServer(request);
+    AgentRegisterRequest request(m_agentType, sequenceNumber);
+    ResponsePtr response = m_socketClient.askCynaraServer(request);
     if (!response) {
         LOGW("Disconnected by cynara server.");
         return CYNARA_API_SERVICE_NOT_AVAILABLE;
@@ -91,7 +91,7 @@ int Logic::registerInCynara(void) {
 }
 
 int Logic::ensureConnection(void) {
-    switch (m_agentSocket->connect()) {
+    switch (m_socketClient.connect()) {
         case SS_CONNECTED:
             return CYNARA_API_SUCCESS;
         case SS_RECONNECTED:
@@ -109,7 +109,7 @@ int Logic::getRequest(AgentActionResponsePtr &resultPtr) {
     if (ret != CYNARA_API_SUCCESS)
         return ret;
 
-    ResponsePtr responsePtr = m_agentSocket->receiveResponseFromServer();
+    ResponsePtr responsePtr = m_socketClient.receiveResponseFromServer();
     if (!responsePtr) {
         LOGW("Disconnected by cynara server.");
         return CYNARA_API_SERVICE_NOT_AVAILABLE;
@@ -131,7 +131,7 @@ int Logic::getRequest(AgentActionResponsePtr &resultPtr) {
 int Logic::putResponse(const AgentResponseType responseType,
                        const ProtocolFrameSequenceNumber sequenceNumber,
                        const RawBuffer &pluginData) {
-    if (!m_agentSocket->isConnected()) {
+    if (!m_socketClient.isConnected()) {
         LOGE("Agent not connected to cynara service.");
         return CYNARA_API_SERVICE_NOT_AVAILABLE;
     }
@@ -140,7 +140,7 @@ int Logic::putResponse(const AgentResponseType responseType,
     m_responseBuffer->clear();
     RequestContext context(ResponseTakerPtr(), m_responseBuffer);
     request.execute(*m_responseTakerPtr, context);
-    return m_agentSocket->sendDataToServer(*m_responseBuffer) ? CYNARA_API_SUCCESS :
+    return m_socketClient.sendDataToServer(*m_responseBuffer) ? CYNARA_API_SUCCESS :
                                                      CYNARA_API_SERVICE_NOT_AVAILABLE;
 }
 
index f6c9d42..5a6b02c 100644 (file)
@@ -48,7 +48,7 @@ public:
 
 private:
     AgentType m_agentType;
-    AgentSocketPtr m_agentSocket;
+    AgentSocketClient m_socketClient;
     bool m_registered;
     RequestTakerPtr m_responseTakerPtr;
     BinaryQueuePtr m_responseBuffer;
index 3710c6d..38f5891 100644 (file)
@@ -41,10 +41,10 @@ AgentSocketClient::AgentSocketClient(const std::string &socketPath, ProtocolPtr
     m_readQueue = std::make_shared<BinaryQueue>();
 }
 
-ResponsePtr AgentSocketClient::askCynaraServer(RequestPtr request) {
+ResponsePtr AgentSocketClient::askCynaraServer(const Request &request) {
     //pass request to protocol
     RequestContext context(ResponseTakerPtr(), m_writeQueue);
-    request->execute(*m_protocol, context);
+    request.execute(*m_protocol, context);
 
     //send request to cynara
     if (!sendDataToServer(*m_writeQueue)) {
index ee58c49..741ff56 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *  Copyright (c) 2014-2015 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.
@@ -53,7 +53,7 @@ public:
 
     ResponsePtr receiveResponseFromServer(void);
     bool sendDataToServer(BinaryQueue &data);
-    ResponsePtr askCynaraServer(RequestPtr request);
+    ResponsePtr askCynaraServer(const Request &request);
 
 private:
     Socket m_socket;
index 91769da..41b1cec 100644 (file)
 namespace Cynara {
 
 Logic::Logic(cynara_status_callback callback, void *userStatusData, const Configuration &conf)
-    : m_statusCallback(callback, userStatusData),
+    : m_statusCallback(callback, userStatusData), m_cache(conf.getCacheSize()),
+      m_socketClient(PathConfig::SocketPath::client, std::make_shared<ProtocolClient>()),
       m_operationPermitted(true), m_inAnswerCancelResponseCallback(false) {
 
-    m_socketClient = std::make_shared<SocketClientAsync>(
-        PathConfig::SocketPath::client, std::make_shared<ProtocolClient>());
-
-    m_cache = std::make_shared<CapacityCache>(conf.getCacheSize());
     auto naiveInterpreter = std::make_shared<NaiveInterpreter>();
     for (auto &descr : naiveInterpreter->getSupportedPolicyDescr()) {
-        m_cache->registerPlugin(descr, naiveInterpreter);
+        m_cache.registerPlugin(descr, naiveInterpreter);
     }
 }
 
@@ -75,7 +72,7 @@ int Logic::checkCache(const std::string &client, const std::string &session,
     if (!checkCacheValid())
         return CYNARA_API_CACHE_MISS;
 
-    return m_cache->get(session, PolicyKey(client, user, privilege));
+    return m_cache.get(session, PolicyKey(client, user, privilege));
 }
 
 int Logic::createCheckRequest(const std::string &client, const std::string &session,
@@ -113,11 +110,11 @@ int Logic::createRequest(bool simple, const std::string &client, const std::stri
     m_checks.insert(CheckPair(sequenceNumber, CheckData(key, session, responseCallback,
                                                         simple)));
     if (simple)
-        m_socketClient->appendRequest(std::make_shared<SimpleCheckRequest>(key, sequenceNumber));
+        m_socketClient.appendRequest(SimpleCheckRequest(key, sequenceNumber));
     else
-        m_socketClient->appendRequest(std::make_shared<CheckRequest>(key, sequenceNumber));
+        m_socketClient.appendRequest(CheckRequest(key, sequenceNumber));
 
-    onStatusChange(m_socketClient->getSockFd(), cynara_async_status::CYNARA_STATUS_FOR_RW);
+    onStatusChange(m_socketClient.getSockFd(), cynara_async_status::CYNARA_STATUS_FOR_RW);
     checkId = static_cast<cynara_check_id>(sequenceNumber);
 
     return CYNARA_API_SUCCESS;
@@ -151,7 +148,7 @@ int Logic::cancelRequest(cynara_check_id checkId) {
     if (it == m_checks.end() || it->second.cancelled())
         return CYNARA_API_INVALID_PARAM;
 
-    m_socketClient->appendRequest(std::make_shared<CancelRequest>(it->first));
+    m_socketClient.appendRequest(CancelRequest(it->first));
 
     it->second.cancel();
 
@@ -160,7 +157,7 @@ int Logic::cancelRequest(cynara_check_id checkId) {
     it->second.callback().onCancel(it->first);
     m_inAnswerCancelResponseCallback = onAnswerCancel;
 
-    onStatusChange(m_socketClient->getSockFd(), cynara_async_status::CYNARA_STATUS_FOR_RW);
+    onStatusChange(m_socketClient.getSockFd(), cynara_async_status::CYNARA_STATUS_FOR_RW);
 
     return CYNARA_API_SUCCESS;
 }
@@ -170,7 +167,7 @@ bool Logic::isFinishPermitted(void) {
 }
 
 bool Logic::checkCacheValid(void) {
-    return m_socketClient->isConnected();
+    return m_socketClient.isConnected();
 }
 
 void Logic::prepareRequestsToSend(void) {
@@ -180,20 +177,18 @@ void Logic::prepareRequestsToSend(void) {
             it = m_checks.erase(it);
         } else {
             if (it->second.isSimple())
-                m_socketClient->appendRequest(std::make_shared<SimpleCheckRequest>(it->second.key(),
-                                                                                   it->first));
+                m_socketClient.appendRequest(SimpleCheckRequest(it->second.key(), it->first));
             else
-                m_socketClient->appendRequest(std::make_shared<CheckRequest>(it->second.key(),
-                                                                             it->first));
+                m_socketClient.appendRequest(CheckRequest(it->second.key(), it->first));
             ++it;
         }
     }
 }
 
 bool Logic::processOut(void) {
-    switch (m_socketClient->sendToCynara()) {
+    switch (m_socketClient.sendToCynara()) {
         case Socket::SendStatus::ALL_DATA_SENT:
-            onStatusChange(m_socketClient->getSockFd(),
+            onStatusChange(m_socketClient.getSockFd(),
                            cynara_async_status::CYNARA_STATUS_FOR_READ);
         case Socket::SendStatus::PARTIAL_DATA_SENT:
             return true;
@@ -202,11 +197,11 @@ bool Logic::processOut(void) {
     }
 }
 
-Logic::CheckMap::iterator Logic::checkResponseValid(ResponsePtr response) {
-    auto it = m_checks.find(response->sequenceNumber());
+Logic::CheckMap::iterator Logic::checkResponseValid(const Response &response) {
+    auto it = m_checks.find(response.sequenceNumber());
     if (it == m_checks.end()) {
         LOGC("Critical error. Unknown checkResponse received: sequenceNumber = [%" PRIu16 "]",
-             response->sequenceNumber());
+             response.sequenceNumber());
         throw UnexpectedErrorException("Unexpected response from cynara service");
     }
     return it;
@@ -217,14 +212,14 @@ void Logic::releaseRequest(Logic::CheckMap::iterator reqIt) {
     m_checks.erase(reqIt);
 }
 
-void Logic::processCheckResponse(CheckResponsePtr checkResponse) {
+void Logic::processCheckResponse(const CheckResponse &checkResponse) {
     LOGD("checkResponse: policyType = [%" PRIu16 "], metadata = <%s>",
-         checkResponse->m_resultRef.policyType(),
-         checkResponse->m_resultRef.metadata().c_str());
+         checkResponse.m_resultRef.policyType(),
+         checkResponse.m_resultRef.metadata().c_str());
 
     auto it = checkResponseValid(checkResponse);
-    int result = m_cache->update(it->second.session(), it->second.key(),
-                                 checkResponse->m_resultRef);
+    int result = m_cache.update(it->second.session(), it->second.key(),
+                                 checkResponse.m_resultRef);
     CheckData checkData(std::move(it->second));
     releaseRequest(it);
 
@@ -232,22 +227,22 @@ void Logic::processCheckResponse(CheckResponsePtr checkResponse) {
         bool onAnswerCancel = m_inAnswerCancelResponseCallback;
         m_inAnswerCancelResponseCallback = true;
         checkData.callback().onAnswer(
-            static_cast<cynara_check_id>(checkResponse->sequenceNumber()), result);
+            static_cast<cynara_check_id>(checkResponse.sequenceNumber()), result);
         m_inAnswerCancelResponseCallback = onAnswerCancel;
     }
 }
 
-void Logic::processSimpleCheckResponse(SimpleCheckResponsePtr response) {
+void Logic::processSimpleCheckResponse(const SimpleCheckResponse &response) {
     LOGD("simpleCheckResponse");
     LOGD("checkResponse: policyType = [%" PRIu16 "], metadata = <%s>",
-         response->getResult().policyType(),
-         response->getResult().metadata().c_str());
+         response.getResult().policyType(),
+         response.getResult().metadata().c_str());
 
     auto it = checkResponseValid(response);
-    int result = response->getReturnValue();
+    int result = response.getReturnValue();
     if (result == CYNARA_API_SUCCESS)
-        result = m_cache->update(it->second.session(), it->second.key(),
-                                 response->getResult());
+        result = m_cache.update(it->second.session(), it->second.key(),
+                                 response.getResult());
     CheckData checkData(std::move(it->second));
     releaseRequest(it);
 
@@ -255,18 +250,17 @@ void Logic::processSimpleCheckResponse(SimpleCheckResponsePtr response) {
         bool onAnswerCancel = m_inAnswerCancelResponseCallback;
         m_inAnswerCancelResponseCallback = true;
         checkData.callback().onAnswer(
-            static_cast<cynara_check_id>(response->sequenceNumber()), result);
+            static_cast<cynara_check_id>(response.sequenceNumber()), result);
         m_inAnswerCancelResponseCallback = onAnswerCancel;
     }
 }
 
-void Logic::processCancelResponse(CancelResponsePtr cancelResponse) {
-    LOGD("cancelResponse");
+void Logic::processCancelResponse(const CancelResponse &cancelResponse) {
 
     auto it = checkResponseValid(cancelResponse);
     if (!it->second.cancelled()) {
         LOGC("Critical error. CancelRequest not sent: sequenceNumber = [%" PRIu16 "]",
-             cancelResponse->sequenceNumber());
+             cancelResponse.sequenceNumber());
         throw UnexpectedErrorException("Unexpected response from cynara service");
     }
     releaseRequest(it);
@@ -277,22 +271,22 @@ void Logic::processResponses(void) {
     CheckResponsePtr checkResponse;
     CancelResponsePtr cancelResponse;
     SimpleCheckResponsePtr simpleResponse;
-    while ((response = m_socketClient->getResponse())) {
+    while (response = m_socketClient.getResponse()) {
         checkResponse = std::dynamic_pointer_cast<CheckResponse>(response);
         if (checkResponse) {
-            processCheckResponse(checkResponse);
+            processCheckResponse(*checkResponse);
             continue;
         }
 
         cancelResponse = std::dynamic_pointer_cast<CancelResponse>(response);
         if (cancelResponse) {
-            processCancelResponse(cancelResponse);
+            processCancelResponse(*cancelResponse);
             continue;
         }
 
         simpleResponse = std::dynamic_pointer_cast<SimpleCheckResponse>(response);
         if (simpleResponse) {
-            processSimpleCheckResponse(simpleResponse);
+            processSimpleCheckResponse(*simpleResponse);
             continue;
         }
 
@@ -302,19 +296,19 @@ void Logic::processResponses(void) {
 }
 
 bool Logic::processIn(void) {
-    if (!m_socketClient->receiveFromCynara())
+    if (!m_socketClient.receiveFromCynara())
         return false;
     processResponses();
     return true;
 }
 
 cynara_async_status Logic::socketDataStatus(void) {
-    return m_socketClient->isDataToSend() ? cynara_async_status::CYNARA_STATUS_FOR_RW
+    return m_socketClient.isDataToSend() ? cynara_async_status::CYNARA_STATUS_FOR_RW
                                           : cynara_async_status::CYNARA_STATUS_FOR_READ;
 }
 
 bool Logic::ensureConnection(void) {
-    if (m_socketClient->isConnected())
+    if (m_socketClient.isConnected())
         return true;
     onDisconnected();
 
@@ -322,14 +316,14 @@ bool Logic::ensureConnection(void) {
 }
 
 bool Logic::connect(void) {
-    switch (m_socketClient->connect()) {
+    switch (m_socketClient.connect()) {
         case Socket::ConnectionStatus::CONNECTION_SUCCEEDED:
             prepareRequestsToSend();
-            onStatusChange(m_socketClient->getSockFd(), socketDataStatus());
+            onStatusChange(m_socketClient.getSockFd(), socketDataStatus());
             return true;
         case Socket::ConnectionStatus::CONNECTION_IN_PROGRESS:
             prepareRequestsToSend();
-            onStatusChange(m_socketClient->getSockFd(), cynara_async_status::CYNARA_STATUS_FOR_RW);
+            onStatusChange(m_socketClient.getSockFd(), cynara_async_status::CYNARA_STATUS_FOR_RW);
             return true;
         default:
             onServiceNotAvailable();
@@ -338,12 +332,12 @@ bool Logic::connect(void) {
 }
 
 int Logic::completeConnection(bool &completed) {
-    switch (m_socketClient->completeConnection()) {
+    switch (m_socketClient.completeConnection()) {
         case Socket::ConnectionStatus::ALREADY_CONNECTED:
             completed = true;
             return CYNARA_API_SUCCESS;
         case Socket::ConnectionStatus::CONNECTION_SUCCEEDED:
-            onStatusChange(m_socketClient->getSockFd(), socketDataStatus());
+            onStatusChange(m_socketClient.getSockFd(), socketDataStatus());
             completed = true;
             return CYNARA_API_SUCCESS;
         case Socket::ConnectionStatus::CONNECTION_IN_PROGRESS:
@@ -377,7 +371,7 @@ void Logic::onServiceNotAvailable(void)
 
 void Logic::onDisconnected(void) {
     m_operationPermitted = false;
-    m_cache->clear();
+    m_cache.clear();
     m_statusCallback.onDisconnected();
     m_operationPermitted = true;
 }
index 911215c..5ad4364 100644 (file)
@@ -32,6 +32,7 @@
 #include <types/ProtocolFields.h>
 
 #include <api/ApiInterface.h>
+#include <cache/CapacityCache.h>
 #include <callback/StatusCallback.h>
 #include <check/CheckData.h>
 #include <cynara-client-async.h>
@@ -67,8 +68,8 @@ private:
     typedef std::pair<ProtocolFrameSequenceNumber, CheckData> CheckPair;
 
     StatusCallback m_statusCallback;
-    PluginCachePtr m_cache;
-    SocketClientAsyncPtr m_socketClient;
+    CapacityCache m_cache;
+    SocketClientAsync m_socketClient;
     CheckMap m_checks;
     SequenceContainer m_sequenceContainer;
     bool m_operationPermitted;
@@ -82,11 +83,11 @@ private:
     void prepareRequestsToSend(void);
     cynara_async_status socketDataStatus(void);
     bool processOut(void);
-    CheckMap::iterator checkResponseValid(ResponsePtr response);
-    void releaseRequest(Logic::CheckMap::iterator reqIt);
-    void processCheckResponse(CheckResponsePtr checkResponse);
-    void processCancelResponse(CancelResponsePtr cancelResponse);
-    void processSimpleCheckResponse(SimpleCheckResponsePtr response);
+    CheckMap::iterator checkResponseValid(const Response &response);
+    void releaseRequest(CheckMap::iterator reqIt);
+    void processCheckResponse(const CheckResponse &checkResponse);
+    void processCancelResponse(const CancelResponse &cancelResponse);
+    void processSimpleCheckResponse(const SimpleCheckResponse &response);
     void processResponses(void);
     bool processIn(void);
     bool ensureConnection(void);
index c72e255..a13fc29 100644 (file)
@@ -56,9 +56,9 @@ bool SocketClientAsync::isConnected(void) {
     return m_socket.isConnected();
 }
 
-void SocketClientAsync::appendRequest(RequestPtr request) {
+void SocketClientAsync::appendRequest(const Request &request) {
     RequestContext context(ResponseTakerPtr(), m_writeQueue);
-    request->execute(*m_protocol, context);
+    request.execute(*m_protocol, context);
 }
 
 bool SocketClientAsync::isDataToSend(void) {
index 511221b..b257b4e 100644 (file)
@@ -47,7 +47,7 @@ public:
     Socket::ConnectionStatus completeConnection(void);
     int getSockFd(void);
     bool isConnected(void);
-    void appendRequest(RequestPtr request);
+    void appendRequest(const Request &request);
     bool isDataToSend(void);
     Socket::SendStatus sendToCynara(void);
     bool receiveFromCynara(void);
index 9f738fb..b9d590e 100644 (file)
@@ -50,13 +50,12 @@ static ProtocolFrameSequenceNumber generateSequenceNumber(void) {
     return ++sequenceNumber;
 }
 
-Logic::Logic(const Configuration &conf) {
-    m_socket = std::make_shared<SocketClient>(PathConfig::SocketPath::client,
-                                              std::make_shared<ProtocolClient>());
-    m_cache = std::make_shared<CapacityCache>(conf.getCacheSize());
+Logic::Logic(const Configuration &conf) :
+        m_socketClient(PathConfig::SocketPath::client, std::make_shared<ProtocolClient>()),
+        m_cache(conf.getCacheSize()) {
     auto naiveInterpreter = std::make_shared<NaiveInterpreter>();
     for (auto &descr : naiveInterpreter->getSupportedPolicyDescr()) {
-        m_cache->registerPlugin(descr, naiveInterpreter);
+        m_cache.registerPlugin(descr, naiveInterpreter);
     }
 }
 
@@ -66,7 +65,7 @@ int Logic::check(const std::string &client, const ClientSession &session, const
         return CYNARA_API_SERVICE_NOT_AVAILABLE;
 
     PolicyKey key(client, user, privilege);
-    int ret = m_cache->get(session, key);
+    int ret = m_cache.get(session, key);
     if (ret != CYNARA_API_CACHE_MISS) {
         return ret;
     }
@@ -78,7 +77,7 @@ int Logic::check(const std::string &client, const ClientSession &session, const
         return ret;
     }
 
-    return m_cache->update(session, key, result);
+    return m_cache.update(session, key, result);
 }
 
 int Logic::simpleCheck(const std::string &client, const ClientSession &session,
@@ -87,7 +86,7 @@ int Logic::simpleCheck(const std::string &client, const ClientSession &session,
         return CYNARA_API_SERVICE_NOT_AVAILABLE;
 
     PolicyKey key(client, user, privilege);
-    int ret = m_cache->get(session, key);
+    int ret = m_cache.get(session, key);
     if (ret != CYNARA_API_CACHE_MISS) {
         return ret;
     }
@@ -100,14 +99,14 @@ int Logic::simpleCheck(const std::string &client, const ClientSession &session,
         return ret;
     }
 
-    return m_cache->update(session, key, result);
+    return m_cache.update(session, key, result);
 }
 
 bool Logic::ensureConnection(void) {
-    if (m_socket->isConnected())
+    if (m_socketClient.isConnected())
         return true;
     onDisconnected();
-    if (m_socket->connect())
+    if (m_socketClient.connect())
         return true;
     LOGW("Cannot connect to cynara. Service not available.");
     return false;
@@ -119,11 +118,11 @@ std::shared_ptr<Res> Logic::requestResponse(const PolicyKey &key) {
 
     //Ask cynara service
     std::shared_ptr<Res> reqResponse;
-    RequestPtr request = std::make_shared<Req>(key, sequenceNumber);
+    Req request(key, sequenceNumber);
     ResponsePtr response;
-    while (!(response = m_socket->askCynaraServer(request))) {
+    while (!(response = m_socketClient.askCynaraServer(request))) {
         onDisconnected();
-        if (!m_socket->connect())
+        if (!m_socketClient.connect())
             return nullptr;
     }
 
@@ -163,7 +162,7 @@ int Logic::requestSimpleResult(const PolicyKey &key, PolicyResult &result) {
 }
 
 void Logic::onDisconnected(void) {
-    m_cache->clear();
+    m_cache.clear();
 }
 
 } // namespace Cynara
index e98f950..35af3e7 100644 (file)
@@ -34,7 +34,7 @@
 #include <configuration/Configuration.h>
 
 #include <api/ApiInterface.h>
-#include <cache/CacheInterface.h>
+#include <cache/CapacityCache.h>
 
 namespace Cynara {
 
@@ -51,8 +51,8 @@ public:
     virtual int simpleCheck(const std::string &client, const ClientSession &session,
                             const std::string &user, const std::string &privilege);
 private:
-    SocketClientPtr m_socket;
-    PluginCachePtr m_cache;
+    SocketClient m_socketClient;
+    CapacityCache m_cache;
 
     void onDisconnected(void);
     bool ensureConnection(void);
index 9f96a43..2ec8d62 100644 (file)
  * @brief       This file contains implementation of cynara's socket client
  */
 
-#include <memory>
-#include <string>
-
 #include <log/log.h>
-#include <protocol/Protocol.h>
-#include <request/pointers.h>
 #include <request/Request.h>
 #include <request/RequestContext.h>
-#include <response/pointers.h>
 #include <sockets/Socket.h>
 
 #include "SocketClient.h"
@@ -60,10 +54,10 @@ bool SocketClient::isConnected(void) {
     return m_socket.isConnected();
 }
 
-ResponsePtr SocketClient::askCynaraServer(RequestPtr request) {
+ResponsePtr SocketClient::askCynaraServer(const Request &request) {
     //pass request to protocol
     RequestContext context(ResponseTakerPtr(), m_writeQueue);
-    request->execute(*m_protocol, context);
+    request.execute(*m_protocol, context);
 
     //send request to cynara
     if (m_socket.sendToServer(*m_writeQueue) == Socket::SendStatus::CONNECTION_LOST) {
index c313b13..2924392 100644 (file)
 #define SRC_COMMON_SOCKETS_SOCKETCLIENT_H_
 
 #include <memory>
+#include <string>
 
 #include <containers/BinaryQueue.h>
 #include <protocol/Protocol.h>
 #include <request/pointers.h>
 #include <response/pointers.h>
-#include <response/ResponseTaker.h>
 #include <sockets/Socket.h>
 
 namespace Cynara {
@@ -53,7 +53,7 @@ public:
 
     //returns pointer to response
     //        or nullptr when connection to cynara service is lost
-    ResponsePtr askCynaraServer(RequestPtr request);
+    ResponsePtr askCynaraServer(const Request &request);
 };
 
 } // namespace Cynara