From bb718b1017aacdd44d9301831b1e60111cb9867b Mon Sep 17 00:00:00 2001 From: Zofia Abramowska Date: Mon, 22 Dec 2014 16:40:16 +0100 Subject: [PATCH] Redo admin logic template Template askCynaraAndInterpreteCodeResponse replaced with more general getResponse. Change-Id: I3d4ba04ebc5fb279a4eefbe9657a627822c39fc2 --- src/admin/logic/OnlineLogic.cpp | 110 ++++++++++++++++++---------------------- src/admin/logic/OnlineLogic.h | 4 +- 2 files changed, 52 insertions(+), 62 deletions(-) diff --git a/src/admin/logic/OnlineLogic.cpp b/src/admin/logic/OnlineLogic.cpp index 6626a77..d27681b 100644 --- a/src/admin/logic/OnlineLogic.cpp +++ b/src/admin/logic/OnlineLogic.cpp @@ -64,8 +64,8 @@ bool OnlineLogic::ensureConnection(void) { return m_socketClient->isConnected() || m_socketClient->connect(); } -template -int OnlineLogic::askCynaraAndInterpreteCodeResponse(Args... args) { +template +int OnlineLogic::getResponse(std::shared_ptr &retResponse, ReqArgs... args) { if (!ensureConnection()) { LOGE("Cannot connect to cynara. Service not available."); return CYNARA_API_SERVICE_NOT_AVAILABLE; @@ -73,24 +73,25 @@ int OnlineLogic::askCynaraAndInterpreteCodeResponse(Args... args) { ProtocolFrameSequenceNumber sequenceNumber = generateSequenceNumber(); - //Ask cynara service - CodeResponsePtr codeResponse; - - RequestPtr request = std::make_shared(args..., sequenceNumber); + RequestPtr request = std::make_shared(args..., sequenceNumber); ResponsePtr response; while (!(response = m_socketClient->askCynaraServer(request))) { if (!m_socketClient->connect()) return CYNARA_API_SERVICE_NOT_AVAILABLE; } - codeResponse = std::dynamic_pointer_cast(response); - if (!codeResponse) { - LOGC("Critical error. Casting Response to CodeResponse failed."); + retResponse = std::dynamic_pointer_cast(response); + if (!retResponse) { + LOGC("Critical error. Casting Response failed."); return CYNARA_API_UNKNOWN_ERROR; } - LOGD("codeResponse: code [%" PRIu16 "]", codeResponse->m_code); - switch (codeResponse->m_code) { + return CYNARA_API_SUCCESS; +} + +static int interpretCodeResponse(const CodeResponse::Code &code) { + LOGD("codeResponse: code [%" PRIu16 "]", code); + switch (code) { case CodeResponse::Code::OK: LOGI("Cynara command finished successfully."); return CYNARA_API_SUCCESS; @@ -105,49 +106,49 @@ int OnlineLogic::askCynaraAndInterpreteCodeResponse(Args... args) { return CYNARA_API_OPERATION_FAILED; default: LOGE("Unexpected response code from server: [%d]", - static_cast(codeResponse->m_code)); + static_cast(code)); return CYNARA_API_UNKNOWN_ERROR; } } int OnlineLogic::setPolicies(const ApiInterface::PoliciesByBucket &insertOrUpdate, - const ApiInterface::KeysByBucket &remove) { - return askCynaraAndInterpreteCodeResponse(insertOrUpdate, remove); + const ApiInterface::KeysByBucket &remove) { + CodeResponsePtr codeResponse; + int ret = getResponse(codeResponse, insertOrUpdate, remove); + if (ret != CYNARA_API_SUCCESS) { + return ret; + } + + return interpretCodeResponse(codeResponse->m_code); } int OnlineLogic::insertOrUpdateBucket(const PolicyBucketId &bucket, - const PolicyResult &policyResult) { - return askCynaraAndInterpreteCodeResponse(bucket, policyResult); -} + const PolicyResult &policyResult) { + CodeResponsePtr codeResponse; + int ret = getResponse(codeResponse, bucket, policyResult); + if (ret != CYNARA_API_SUCCESS) { + return ret; + } -int OnlineLogic::removeBucket(const PolicyBucketId &bucket) { - return askCynaraAndInterpreteCodeResponse(bucket); + return interpretCodeResponse(codeResponse->m_code); } -int OnlineLogic::adminCheck(const PolicyBucketId &startBucket, bool recursive, const PolicyKey &key, - PolicyResult &result) { - if (!ensureConnection()) { - LOGE("Cannot connect to cynara. Service not available."); - return CYNARA_API_SERVICE_NOT_AVAILABLE; +int OnlineLogic::removeBucket(const PolicyBucketId &bucket) { + CodeResponsePtr codeResponse; + int ret = getResponse(codeResponse, bucket); + if (ret != CYNARA_API_SUCCESS) { + return ret; } - ProtocolFrameSequenceNumber sequenceNumber = generateSequenceNumber(); + return interpretCodeResponse(codeResponse->m_code); +} - //Ask cynara service +int OnlineLogic::adminCheck(const PolicyBucketId &startBucket, bool recursive, const PolicyKey &key, + PolicyResult &result) { AdminCheckResponsePtr adminCheckResponse; - - RequestPtr request = std::make_shared(key, startBucket, recursive, - sequenceNumber); - ResponsePtr response; - while (!(response = m_socketClient->askCynaraServer(request))) { - if (!m_socketClient->connect()) - return CYNARA_API_SERVICE_NOT_AVAILABLE; - } - - adminCheckResponse = std::dynamic_pointer_cast(response); - if (!adminCheckResponse) { - LOGC("Casting Response to AdminCheckResponse failed."); - return CYNARA_API_UNKNOWN_ERROR; + int ret = getResponse(adminCheckResponse, key, startBucket, recursive); + if (ret != CYNARA_API_SUCCESS) { + return ret; } LOGD("AdminCheckResponse: policyType [%" PRIu16 "], metadata <%s>, bucketValid [%d]", @@ -166,27 +167,10 @@ int OnlineLogic::adminCheck(const PolicyBucketId &startBucket, bool recursive, c int OnlineLogic::listPolicies(const PolicyBucketId &bucket, const PolicyKey &filter, std::vector &policies) { - if (!ensureConnection()) { - LOGE("Cannot connect to cynara. Service not available."); - return CYNARA_API_SERVICE_NOT_AVAILABLE; - } - - ProtocolFrameSequenceNumber sequenceNumber = generateSequenceNumber(); - - //Ask cynara service ListResponsePtr listResponse; - - RequestPtr request = std::make_shared(bucket, filter, sequenceNumber); - ResponsePtr response; - while (!(response = m_socketClient->askCynaraServer(request))) { - if (!m_socketClient->connect()) - return CYNARA_API_SERVICE_NOT_AVAILABLE; - } - - listResponse = std::dynamic_pointer_cast(response); - if (!listResponse) { - LOGC("Casting Response to ListResponse failed."); - return CYNARA_API_UNKNOWN_ERROR; + int ret = getResponse(listResponse, bucket, filter); + if (ret != CYNARA_API_SUCCESS) { + return ret; } LOGD("listResponse: number of policies [%zu], bucketValid [%d]", @@ -202,7 +186,13 @@ int OnlineLogic::listPolicies(const PolicyBucketId &bucket, const PolicyKey &fil int OnlineLogic::erasePolicies(const PolicyBucketId &startBucket, bool recursive, const PolicyKey &filter) { - return askCynaraAndInterpreteCodeResponse(startBucket, recursive, filter); + CodeResponsePtr codeResponse; + int ret = getResponse(codeResponse, startBucket, recursive, filter); + if (ret != CYNARA_API_SUCCESS) { + return ret; + } + + return interpretCodeResponse(codeResponse->m_code); } int OnlineLogic::listDescriptions(std::vector &descriptions) { diff --git a/src/admin/logic/OnlineLogic.h b/src/admin/logic/OnlineLogic.h index 84becd7..fbcbc48 100644 --- a/src/admin/logic/OnlineLogic.h +++ b/src/admin/logic/OnlineLogic.h @@ -34,8 +34,8 @@ private: SocketClientPtr m_socketClient; bool ensureConnection(void); - template - int askCynaraAndInterpreteCodeResponse(Args... args); + template + int getResponse(std::shared_ptr &retResponse, ReqArgs... args); public: OnlineLogic(); -- 2.7.4