From b953220f7a88458d9a1971f73c04f8c53651053b Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Mon, 7 Jul 2014 14:59:46 +0200 Subject: [PATCH] Add sequence number generation Change-Id: I1fc3250d211a171bc121846d96282d8ff5b095fa --- src/client/logic/Logic.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/client/logic/Logic.cpp b/src/client/logic/Logic.cpp index 597c8e4..3479597 100644 --- a/src/client/logic/Logic.cpp +++ b/src/client/logic/Logic.cpp @@ -47,30 +47,36 @@ Logic::Logic() { std::make_shared()); } +ProtocolFrameSequenceNumber generateSequenceNumber(void) { + static ProtocolFrameSequenceNumber sequenceNumber = 0; + return ++sequenceNumber; +} + cynara_api_result Logic::check(const std::string &client, const std::string &session UNUSED, const std::string &user, const std::string &privilege) noexcept { - //todo Handle session parameter. + PolicyKey key(client, user, privilege); + //todo Check if answer can be get from cache. Update cache. + //todo m_cache->check(session, key); + + ProtocolFrameSequenceNumber sequenceNumber = generateSequenceNumber(); //Ask cynara service - PolicyResult result(PredefinedPolicyType::DENY); + CheckResponsePtr checkResponse; try { - // todo handle sequence number correctly - ProtocolFrameSequenceNumber sequenceNumber = 0; - RequestPtr request = std::make_shared(PolicyKey(client, user, privilege), sequenceNumber); + RequestPtr request = std::make_shared(key, sequenceNumber); ResponsePtr response = m_socketClient->askCynaraServer(request); if (!response) { LOGW("Disconnected by cynara server."); onDisconnected(); return cynara_api_result::CYNARA_API_SERVICE_NOT_AVAILABLE; } - CheckResponsePtr checkResponse = std::dynamic_pointer_cast(response); + checkResponse = std::dynamic_pointer_cast(response); if (!checkResponse) { LOGC("Critical error. Casting Response to CheckResponse failed."); throw UnexpectedErrorException("Error casting Response to CheckResponse"); } - result = checkResponse->m_resultRef; } catch (const ServerConnectionErrorException &ex) { LOGE("Cynara service not available."); onDisconnected(); @@ -80,6 +86,7 @@ cynara_api_result Logic::check(const std::string &client, const std::string &ses return cynara_api_result::CYNARA_API_ACCESS_DENIED; } + PolicyResult result = checkResponse->m_resultRef; //todo Interprete result. //todo Update cache. -- 2.7.4