From a8a961533ad965b2e16ada2cbef838dd0220e60d Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Tue, 3 Mar 2015 14:26:11 +0100 Subject: [PATCH 01/16] Fix bug in receiving requests in libcynara-agent Method AgentSocketClient::receiveResponseFromServer should hang until it can return a request received from cynara service. However a single read from socket can read more than one request. Received requests are queued. Code did not check if there is a valid request read and queued previously, but always tried to read from socket. Fix changes order - so now code first checks queue and only in case, when there is no valid request waiting a socket is read. Change-Id: I845cd677700e516f252a8958b97ee8facb82170f --- src/agent/socket/AgentSocketClient.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/agent/socket/AgentSocketClient.cpp b/src/agent/socket/AgentSocketClient.cpp index 780c996..0e576ed 100644 --- a/src/agent/socket/AgentSocketClient.cpp +++ b/src/agent/socket/AgentSocketClient.cpp @@ -56,17 +56,14 @@ ResponsePtr AgentSocketClient::askCynaraServer(RequestPtr request) { } ResponsePtr AgentSocketClient::receiveResponseFromServer(void) { - while (true) { + ResponsePtr response; + while (!(response = m_protocol->extractResponseFromBuffer(m_readQueue))) { if (!m_socket.receiveFromServer(*m_readQueue)) { LOGW("Error receiving data from Cynara. Service not available."); return nullptr; } - - ResponsePtr response = m_protocol->extractResponseFromBuffer(m_readQueue); - if (response) { - return response; - } } + return response; } bool AgentSocketClient::sendDataToServer(BinaryQueue &data) { -- 2.7.4 From 9f66119c6b4b2be20608ce4b02afe0c731d4474f Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Mon, 9 Mar 2015 16:54:27 +0100 Subject: [PATCH 02/16] Release 0.6.0 Change-Id: Ia5c5029289dec6653262885b5095221abc63b2d5 --- CMakeLists.txt | 2 +- changelog | 32 ++++++++++++++++++++++++++++++++ packaging/cynara.spec | 2 +- src/admin/CMakeLists.txt | 2 +- src/agent/CMakeLists.txt | 4 ++-- src/client-async/CMakeLists.txt | 4 ++-- src/client-common/CMakeLists.txt | 2 +- src/client/CMakeLists.txt | 2 +- src/common/CMakeLists.txt | 2 +- src/helpers/creds-commons/CMakeLists.txt | 2 +- src/helpers/creds-dbus/CMakeLists.txt | 2 +- src/helpers/creds-socket/CMakeLists.txt | 2 +- src/helpers/session/CMakeLists.txt | 2 +- src/storage/CMakeLists.txt | 2 +- 14 files changed, 47 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 116c14f..a8d8f17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8.3) PROJECT("cynara") -set(CYNARA_VERSION 0.5.0) +set(CYNARA_VERSION 0.6.0) ############################# cmake packages ################################## diff --git a/changelog b/changelog index 10a0dc7..7d42925 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,37 @@ ############################### +Release: 0.6.0 +Date: 2015.03.09 +Name: Client configuration, simple-check, cynara_strerror, checksums, emergency mode, migration tool. + +Libraries: +libcynara-admin.0.6.0 +libcynara-agent.0.6.0 +libcynara-client-async.0.6.0 +libcynara-client-commmons.0.6.0 +libcynara-client.0.6.0 +libcynara-commons.0.6.0 +libcynara-creds-commons.0.6.0 +libcynara-creds-dbus.0.6.0 +libcynara-creds-socket.0.6.0 +libcynara-session.0.6.0 +libcynara-storage.0.6.0 + +Executables: +cyad +cynara + +Description: +Configuration of cache size for both synchronous and asynchronous client. +New client command - simple_check. +Stringization of errors in cyad and with cynara_strerror. +Checksums mechanism finished. +Emergency mode, when database is corrupted. +Revisited migration tool. +Some bug fixes + +############################### + Release: 0.5.0 Date: 2015.01.16 Name: Cyad, offline-admin, erase, listPolicies, listDescriptions diff --git a/packaging/cynara.spec b/packaging/cynara.spec index 3289855..5021f72 100644 --- a/packaging/cynara.spec +++ b/packaging/cynara.spec @@ -1,6 +1,6 @@ Name: cynara Summary: Cynara service with client libraries -Version: 0.5.0 +Version: 0.6.0 Release: 1 Group: Security/Application Privilege License: Apache-2.0 diff --git a/src/admin/CMakeLists.txt b/src/admin/CMakeLists.txt index dcb2419..42e6b9e 100644 --- a/src/admin/CMakeLists.txt +++ b/src/admin/CMakeLists.txt @@ -17,7 +17,7 @@ # SET(LIB_CYNARA_ADMIN_VERSION_MAJOR 0) -SET(LIB_CYNARA_ADMIN_VERSION ${LIB_CYNARA_ADMIN_VERSION_MAJOR}.5.0) +SET(LIB_CYNARA_ADMIN_VERSION ${LIB_CYNARA_ADMIN_VERSION_MAJOR}.6.0) SET(CYNARA_LIB_CYNARA_ADMIN_PATH ${CYNARA_PATH}/admin) diff --git a/src/agent/CMakeLists.txt b/src/agent/CMakeLists.txt index 83d90f6..da71235 100644 --- a/src/agent/CMakeLists.txt +++ b/src/agent/CMakeLists.txt @@ -1,4 +1,4 @@ -# 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. @@ -17,7 +17,7 @@ # SET(LIB_CYNARA_AGENT_VERSION_MAJOR 0) -SET(LIB_CYNARA_AGENT_VERSION ${LIB_CYNARA_AGENT_VERSION_MAJOR}.3.0) +SET(LIB_CYNARA_AGENT_VERSION ${LIB_CYNARA_AGENT_VERSION_MAJOR}.6.0) SET(CYNARA_LIB_CYNARA_AGENT_PATH ${CYNARA_PATH}/agent) diff --git a/src/client-async/CMakeLists.txt b/src/client-async/CMakeLists.txt index a9b9971..19d8b3c 100644 --- a/src/client-async/CMakeLists.txt +++ b/src/client-async/CMakeLists.txt @@ -1,4 +1,4 @@ -# 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. @@ -17,7 +17,7 @@ # SET(LIB_CYNARA_ASYNC_VERSION_MAJOR 0) -SET(LIB_CYNARA_ASYNC_VERSION ${LIB_CYNARA_ASYNC_VERSION_MAJOR}.0.2) +SET(LIB_CYNARA_ASYNC_VERSION ${LIB_CYNARA_ASYNC_VERSION_MAJOR}.6.0) SET(CYNARA_LIB_CYNARA_ASYNC_PATH ${CYNARA_PATH}/client-async) diff --git a/src/client-common/CMakeLists.txt b/src/client-common/CMakeLists.txt index 6629aec..8984ff6 100644 --- a/src/client-common/CMakeLists.txt +++ b/src/client-common/CMakeLists.txt @@ -17,7 +17,7 @@ # SET(LIB_CYNARA_CLIENT_COMMON_VERSION_MAJOR 0) -SET(LIB_CYNARA_CLIENT_COMMON_VERSION ${LIB_CYNARA_CLIENT_COMMON_VERSION_MAJOR}.5.0) +SET(LIB_CYNARA_CLIENT_COMMON_VERSION ${LIB_CYNARA_CLIENT_COMMON_VERSION_MAJOR}.6.0) SET(LIB_CYNARA_COMMON_PATH ${CYNARA_PATH}/client-common) diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index 059fac2..d98059f 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -18,7 +18,7 @@ # SET(LIB_CYNARA_VERSION_MAJOR 0) -SET(LIB_CYNARA_VERSION ${LIB_CYNARA_VERSION_MAJOR}.5.0) +SET(LIB_CYNARA_VERSION ${LIB_CYNARA_VERSION_MAJOR}.6.0) SET(LIB_CYNARA_PATH ${CYNARA_PATH}/client) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index be94ff8..f72bb7e 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -17,7 +17,7 @@ # SET(CYNARA_COMMON_VERSION_MAJOR 0) -SET(CYNARA_COMMON_VERSION ${CYNARA_COMMON_VERSION_MAJOR}.5.0) +SET(CYNARA_COMMON_VERSION ${CYNARA_COMMON_VERSION_MAJOR}.6.0) SET(COMMON_PATH ${CYNARA_PATH}/common) diff --git a/src/helpers/creds-commons/CMakeLists.txt b/src/helpers/creds-commons/CMakeLists.txt index 29d37ef..dc0b25d 100644 --- a/src/helpers/creds-commons/CMakeLists.txt +++ b/src/helpers/creds-commons/CMakeLists.txt @@ -19,7 +19,7 @@ # SET(LIB_CREDS_COMMONS_VERSION_MAJOR 0) -SET(LIB_CREDS_COMMONS_VERSION ${LIB_CREDS_COMMONS_VERSION_MAJOR}.5.0) +SET(LIB_CREDS_COMMONS_VERSION ${LIB_CREDS_COMMONS_VERSION_MAJOR}.6.0) SET(LIB_CREDS_COMMONS_PATH ${CYNARA_PATH}/helpers/creds-commons) diff --git a/src/helpers/creds-dbus/CMakeLists.txt b/src/helpers/creds-dbus/CMakeLists.txt index 4001207..fc7c4cb 100644 --- a/src/helpers/creds-dbus/CMakeLists.txt +++ b/src/helpers/creds-dbus/CMakeLists.txt @@ -19,7 +19,7 @@ # SET(LIB_CREDS_DBUS_VERSION_MAJOR 0) -SET(LIB_CREDS_DBUS_VERSION ${LIB_CREDS_DBUS_VERSION_MAJOR}.5.0) +SET(LIB_CREDS_DBUS_VERSION ${LIB_CREDS_DBUS_VERSION_MAJOR}.6.0) SET(LIB_CREDS_DBUS_PATH ${CYNARA_PATH}/helpers/creds-dbus) diff --git a/src/helpers/creds-socket/CMakeLists.txt b/src/helpers/creds-socket/CMakeLists.txt index 950561c..4c33968 100644 --- a/src/helpers/creds-socket/CMakeLists.txt +++ b/src/helpers/creds-socket/CMakeLists.txt @@ -19,7 +19,7 @@ # SET(LIB_CREDS_SOCKET_VERSION_MAJOR 0) -SET(LIB_CREDS_SOCKET_VERSION ${LIB_CREDS_SOCKET_VERSION_MAJOR}.5.0) +SET(LIB_CREDS_SOCKET_VERSION ${LIB_CREDS_SOCKET_VERSION_MAJOR}.6.0) SET(LIB_CREDS_SOCKET_PATH ${CYNARA_PATH}/helpers/creds-socket) diff --git a/src/helpers/session/CMakeLists.txt b/src/helpers/session/CMakeLists.txt index 7897828..c08da4f 100644 --- a/src/helpers/session/CMakeLists.txt +++ b/src/helpers/session/CMakeLists.txt @@ -19,7 +19,7 @@ # SET(LIB_SESSION_VERSION_MAJOR 0) -SET(LIB_SESSION_VERSION ${LIB_SESSION_VERSION_MAJOR}.5.0) +SET(LIB_SESSION_VERSION ${LIB_SESSION_VERSION_MAJOR}.6.0) SET(LIB_SESSION_PATH ${CYNARA_PATH}/helpers/session) diff --git a/src/storage/CMakeLists.txt b/src/storage/CMakeLists.txt index f75bc06..574d369 100644 --- a/src/storage/CMakeLists.txt +++ b/src/storage/CMakeLists.txt @@ -18,7 +18,7 @@ # SET(LIB_CYNARA_STORAGE_VERSION_MAJOR 0) -SET(LIB_CYNARA_STORAGE_VERSION ${LIB_CYNARA_STORAGE_VERSION_MAJOR}.3.0) +SET(LIB_CYNARA_STORAGE_VERSION ${LIB_CYNARA_STORAGE_VERSION_MAJOR}.6.0) SET(CYNARA_LIB_CYNARA_STORAGE_PATH ${CYNARA_PATH}/storage) -- 2.7.4 From 4dc7e0fa44a517366022103244d7b6e2d57537f8 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Fri, 13 Mar 2015 13:47:56 +0100 Subject: [PATCH 03/16] Add test checking migration dependency on cynara libs Verify if cynara-db-chsgen depends on libcynara* libraries Change-Id: I56c02c0c97d079fb0f0eb064ca0c7fd4053caba6 --- test/tools/cynara-db-migration-tests | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/test/tools/cynara-db-migration-tests b/test/tools/cynara-db-migration-tests index c6ea3d8..3f9ae38 100644 --- a/test/tools/cynara-db-migration-tests +++ b/test/tools/cynara-db-migration-tests @@ -51,19 +51,25 @@ FAILURE=1 TEST_CASE=0 +##### Colors + +RED_BEGIN="\033[0;31m" +GREEN_BEGIN="\033[0;32m" +COLOR_END="\033[m" + ##### Functions fail_msg() { local ID="$1" local NAME="$2" - echo "Test $ID ($NAME) failed:" + echo -e "Test $ID ($NAME) $RED_BEGIN failed $COLOR_END:" cat "${TESTS_DIR}/${ID}/${FAIL_FILE}" } success_msg() { local ID="$1" local NAME="$2" - echo "Test $ID ($NAME) passed." + echo -e "Test $ID ($NAME) $GREEN_BEGIN passed $COLOR_END." } execute() { @@ -214,5 +220,18 @@ run db10_postchs_bcp db10_postchs_bcp "down_postchs_postchs_bcp" \ run db10_postchs_bcp db10_postchs_bcp "migr_same_ver_bcp" \ "upgrade -f $POSTCHS_HIGH_VERSION -t $POSTCHS_HIGH_VERSION" +############################################################################## +# Test case 18: check if cynara-db-chsgen does not depend on cynara libraries +TEST_18_DEPS=`ldd /usr/sbin/cynara-db-chsgen | grep -c libcynara` +if [ $TEST_18_DEPS -eq 0 ] ; then + success_msg "18" "cynara-db-chsgen dependencies" +else + mkdir -p ${TESTS_DIR}/18/ + ldd /usr/sbin/cynara-db-chsgen | grep libcynara > ${TESTS_DIR}/18/${FAIL_FILE} + fail_msg "18" "cynara-db-chsgen dependencies" +fi + +############################################################################## ### Clean up tests environment rm -r "$TESTS_DIR" + -- 2.7.4 From 443ec3e67c082a0c0f8f13c09b9897d61739c183 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Fri, 13 Mar 2015 13:53:57 +0100 Subject: [PATCH 04/16] Add missing dependency on findutils Migration tool uses "find" command but did not require findutils package. This patch adds proper dependency. Change-Id: Ie91ef7019c25557349748df9e719aa932f469a02 --- packaging/cynara.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/packaging/cynara.spec b/packaging/cynara.spec index 5021f72..635c067 100644 --- a/packaging/cynara.spec +++ b/packaging/cynara.spec @@ -148,6 +148,7 @@ Cynara helper client session string creation library %package -n cynara-db-migration Summary: Migration tools for Cynara's database +Requires: findutils %description -n cynara-db-migration Migration tools for Cynara's database -- 2.7.4 From a9dac09c0ba97cb1ee63fc8614c479f2bd90fc45 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Fri, 13 Mar 2015 14:33:16 +0100 Subject: [PATCH 05/16] Log chsgen errors to stderr instead of journal This patch allows not to use libcynara-commons in chsgen anymore. Change-Id: I051b9a300c19c2f99228573d6e30ea8a1af2f323 --- src/chsgen/CMakeLists.txt | 2 +- src/chsgen/ChecksumGenerator.cpp | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/chsgen/CMakeLists.txt b/src/chsgen/CMakeLists.txt index 748d950..865a9ba 100644 --- a/src/chsgen/CMakeLists.txt +++ b/src/chsgen/CMakeLists.txt @@ -21,6 +21,7 @@ SET(CHSGEN_PATH ${CYNARA_PATH}/chsgen) SET(CHSGEN_SOURCES ${CHSGEN_PATH}/ChecksumGenerator.cpp ${CHSGEN_PATH}/main.cpp + ${CYNARA_PATH}/common/config/PathConfig.cpp ) INCLUDE_DIRECTORIES( @@ -31,7 +32,6 @@ INCLUDE_DIRECTORIES( ADD_EXECUTABLE(${TARGET_CHSGEN} ${CHSGEN_SOURCES}) TARGET_LINK_LIBRARIES(${TARGET_CHSGEN} - ${TARGET_CYNARA_COMMON} crypt ) diff --git a/src/chsgen/ChecksumGenerator.cpp b/src/chsgen/ChecksumGenerator.cpp index fcc76dc..0037c08 100644 --- a/src/chsgen/ChecksumGenerator.cpp +++ b/src/chsgen/ChecksumGenerator.cpp @@ -33,7 +33,6 @@ #include #include #include -#include #include "ChecksumGenerator.h" @@ -83,9 +82,11 @@ const std::string ChecksumGenerator::generate(const std::string &data) { } else { int err = errno; if (err == ENOSYS) { - LOGE("'crypt' function was not implemented; error [%d] : <%s>", err, strerror(err)); + std::cerr << "'crypt' function was not implemented; error [" << err << "] : <" + << strerror(err) << ">" << std::endl; } else { - LOGE("'crypt' function error [%d] : <%s>", err, strerror(err)); + std::cerr << "'crypt' function error [" << err << "] : <" << strerror(err) << ">" + << std::endl; } throw UnexpectedErrorException(err, strerror(err)); } @@ -109,8 +110,8 @@ void ChecksumGenerator::copyFileStream(void) { void ChecksumGenerator::printRecord(void) const { std::unique_ptr pathnameDuplicate(strdup(m_pathname.c_str()), free); if (pathnameDuplicate == nullptr) { - LOGE("Insufficient memory available to allocate duplicate filename: <%s>", - m_pathname.c_str()); + std::cerr << "Insufficient memory available to allocate duplicate filename: <" + << m_pathname << ">" << std::endl; throw std::bad_alloc(); } -- 2.7.4 From 505f386a35fbe91e8ec0fc335de5f76f287edf6c Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Fri, 13 Mar 2015 14:48:04 +0100 Subject: [PATCH 06/16] Add missing packages dependencies Change-Id: I1b826c6b430b39bf8883c2d04e04e2cf6330b24a --- packaging/cynara.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packaging/cynara.spec b/packaging/cynara.spec index 635c067..1e9643e 100644 --- a/packaging/cynara.spec +++ b/packaging/cynara.spec @@ -20,6 +20,7 @@ Source1011: cynara-db-migration.manifest Source1012: cyad.manifest Source1013: cynara-db-chsgen.manifest Requires: default-ac-domains +Requires: libcynara-commons = %{version}-%{release} Requires(pre): pwdutils Requires(pre): cynara-db-migration >= %{version}-%{release} Requires(post): smack @@ -122,6 +123,7 @@ cynara common library with common functionalities %package -n libcynara-creds-commons Summary: Base library for cynara credentials helpers +Requires: libcynara-commons = %{version}-%{release} %description -n libcynara-creds-commons Base library for cynara credentials helpers @@ -155,6 +157,8 @@ Migration tools for Cynara's database %package -n cyad Summary: Cynara's command-line tool +Requires: libcynara-admin = %{version}-%{release} +Requires: libcynara-commons = %{version}-%{release} %description -n cyad Command-line tool to manage Cynara's database -- 2.7.4 From ae67006df0f705d658b81fe2811f1181f5b8f4a1 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Fri, 13 Mar 2015 15:12:05 +0100 Subject: [PATCH 07/16] Quick fix of database migration During upgrade of downgrade of cynara package "from version" is always set to 0.0.0 and is ignored in migration tool. Migration tool always tries to do generate or remove checksum files whichever is needed due to NEW_VERSION. OLD_VERSION is ignored during database migration. Change-Id: I1141c7c6f15f3a11bd740330995a5bf1bae45db0 --- migration/cynara-db-migration | 32 ++++++++++++++++++-------------- packaging/cynara.spec | 18 +----------------- 2 files changed, 19 insertions(+), 31 deletions(-) diff --git a/migration/cynara-db-migration b/migration/cynara-db-migration index d31897c..ff9bd61 100644 --- a/migration/cynara-db-migration +++ b/migration/cynara-db-migration @@ -208,20 +208,24 @@ migrate_db() { exit_success fi - case $(version_compare ${OLD_VERSION} ${NEW_VERSION}) in - -1 ) - upgrade_db - ;; - 0 ) - : - # Same version given twice; take no action - ;; - 1 ) - downgrade_db - ;; - * ) - failure - esac +#quick fix - always generate or remove checksums if needed + upgrade_db + downgrade_db + +# case $(version_compare ${OLD_VERSION} ${NEW_VERSION}) in +# -1 ) +# upgrade_db +# ;; +# 0 ) +# : +# # Same version given twice; take no action +# ;; +# 1 ) +# downgrade_db +# ;; +# * ) +# failure +# esac } remove_db() { diff --git a/packaging/cynara.spec b/packaging/cynara.spec index 1e9643e..778e718 100644 --- a/packaging/cynara.spec +++ b/packaging/cynara.spec @@ -233,23 +233,7 @@ fi if [ $1 -gt 1 ] ; then # upgrade - OLD_VERSION="" - VERSION_INDICATOR="$(ls %{_libdir}/libcynara-commons\.so\.*\.*\.*)" - if [ -z "${VERSION_INDICATOR}" ] ; then - # For releases which dropped "%{_libdir}/libcynara-commons\.so\.*" file - OLD_VERSION="$(/usr/bin/cynara --version)" - else - VERSION="${VERSION_INDICATOR##*so\.}" - SIGNIFICANT="${VERSION%\.*}" - if [ 0 -eq "${SIGNIFICANT%%\.*}" -a 5 -ge "${SIGNIFICANT##*\.}" ] ; then - # For releases which did not provide "--version" functionality - OLD_VERSION="${VERSION}" - else - OLD_VERSION="$(/usr/bin/cynara --version)" - fi - fi - - %{_sbindir}/cynara-db-migration upgrade -f ${OLD_VERSION} -t %{version} + %{_sbindir}/cynara-db-migration upgrade -f 0.0.0 -t %{version} else # install %{_sbindir}/cynara-db-migration install -t %{version} -- 2.7.4 From bd42105b3819ace908e8b0140261e8c53fcdebcf Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Fri, 13 Mar 2015 17:01:24 +0100 Subject: [PATCH 08/16] Quick fix remove PathConfig dependency in chsgen Change-Id: I35d4336dd317e724b787fb7206b13089e50a490e --- src/chsgen/CMakeLists.txt | 1 - src/chsgen/ChecksumGenerator.cpp | 9 +++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/chsgen/CMakeLists.txt b/src/chsgen/CMakeLists.txt index 865a9ba..73c697f 100644 --- a/src/chsgen/CMakeLists.txt +++ b/src/chsgen/CMakeLists.txt @@ -21,7 +21,6 @@ SET(CHSGEN_PATH ${CYNARA_PATH}/chsgen) SET(CHSGEN_SOURCES ${CHSGEN_PATH}/ChecksumGenerator.cpp ${CHSGEN_PATH}/main.cpp - ${CYNARA_PATH}/common/config/PathConfig.cpp ) INCLUDE_DIRECTORIES( diff --git a/src/chsgen/ChecksumGenerator.cpp b/src/chsgen/ChecksumGenerator.cpp index 0037c08..62e3411 100644 --- a/src/chsgen/ChecksumGenerator.cpp +++ b/src/chsgen/ChecksumGenerator.cpp @@ -30,7 +30,6 @@ #include -#include #include #include @@ -38,11 +37,9 @@ namespace Cynara { -namespace StorageConfig = PathConfig::StoragePath; - -const char ChecksumGenerator::m_fieldSeparator(StorageConfig::fieldSeparator); -const char ChecksumGenerator::m_recordSeparator(StorageConfig::recordSeparator); -const std::string ChecksumGenerator::m_backupFilenameSuffix(StorageConfig::backupFilenameSuffix); +const char ChecksumGenerator::m_fieldSeparator(';'); +const char ChecksumGenerator::m_recordSeparator('\n'); +const std::string ChecksumGenerator::m_backupFilenameSuffix("~"); ChecksumGenerator::ChecksumGenerator(int argc, char * const *argv) { if (argc > 1) { -- 2.7.4 From 756dd74cdf9b629157e7fff351a933697c5b5bbb Mon Sep 17 00:00:00 2001 From: Jacek Bukarewicz Date: Wed, 11 Mar 2015 18:02:33 +0100 Subject: [PATCH 09/16] Relabel database files when offline admin API modifies database Change-Id: I5226adcbc969114773bb40c129ecf11b270418e5 --- packaging/cynara.spec | 4 +++- src/admin/CMakeLists.txt | 12 ++++++++++++ src/admin/logic/OfflineLogic.cpp | 27 +++++++++++++++++++++++++++ src/admin/logic/OfflineLogic.h | 2 ++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/packaging/cynara.spec b/packaging/cynara.spec index 778e718..e0282cf 100644 --- a/packaging/cynara.spec +++ b/packaging/cynara.spec @@ -30,6 +30,7 @@ BuildRequires: cmake BuildRequires: zip BuildRequires: pkgconfig(libsystemd-daemon) BuildRequires: pkgconfig(libsystemd-journal) +BuildRequires: pkgconfig(libsmack) %{?systemd_requires} %global user_name %{name} @@ -199,7 +200,8 @@ export LDFLAGS+="-Wl,--rpath=%{_libdir}" %cmake . \ -DBUILD_TESTS=ON \ -DCMAKE_BUILD_TYPE=%{?build_type} \ - -DCMAKE_VERBOSE_MAKEFILE=ON + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DDB_FILES_SMACK_LABEL="System" make %{?jobs:-j%jobs} %install diff --git a/src/admin/CMakeLists.txt b/src/admin/CMakeLists.txt index 42e6b9e..773126b 100644 --- a/src/admin/CMakeLists.txt +++ b/src/admin/CMakeLists.txt @@ -19,6 +19,17 @@ SET(LIB_CYNARA_ADMIN_VERSION_MAJOR 0) SET(LIB_CYNARA_ADMIN_VERSION ${LIB_CYNARA_ADMIN_VERSION_MAJOR}.6.0) +IF (DB_FILES_SMACK_LABEL) + SET(SMACK "smack") + SET(LIBSMACK "libsmack") + ADD_DEFINITIONS("-DDB_FILES_SMACK_LABEL=\"${DB_FILES_SMACK_LABEL}\"") +ENDIF (DB_FILES_SMACK_LABEL) + +PKG_CHECK_MODULES(CYNARA_ADMIN_API_DEP + REQUIRED + ${LIBSMACK} + ) + SET(CYNARA_LIB_CYNARA_ADMIN_PATH ${CYNARA_PATH}/admin) SET(LIB_CYNARA_ADMIN_SOURCES @@ -47,6 +58,7 @@ TARGET_LINK_LIBRARIES(${TARGET_LIB_CYNARA_ADMIN} ${CYNARA_DEP_LIBRARIES} ${TARGET_CYNARA_COMMON} ${TARGET_LIB_CYNARA_STORAGE} + ${SMACK} ) INSTALL(TARGETS ${TARGET_LIB_CYNARA_ADMIN} DESTINATION ${LIB_INSTALL_DIR}) diff --git a/src/admin/logic/OfflineLogic.cpp b/src/admin/logic/OfflineLogic.cpp index 98721bc..fc0b6a7 100644 --- a/src/admin/logic/OfflineLogic.cpp +++ b/src/admin/logic/OfflineLogic.cpp @@ -21,6 +21,11 @@ * @version 1.0 * @brief This file contains implementation of OfflineLogic class */ +#ifdef DB_FILES_SMACK_LABEL +#include +#include +#include +#endif #include #include @@ -32,6 +37,7 @@ #include #include #include +#include #include #include @@ -193,8 +199,29 @@ int OfflineLogic::erasePolicies(const PolicyBucketId &startBucket, bool recursiv return CYNARA_API_SUCCESS; } + +void OfflineLogic::labelDatabaseFiles(void) +{ +#ifdef DB_FILES_SMACK_LABEL + DIR *dbDirectory; + struct dirent *directoryEntry; + + dbDirectory = opendir(PathConfig::StoragePath::dbDir.c_str()); + if (dbDirectory) { + while ((directoryEntry = readdir(dbDirectory)) != NULL) { + std::string f = PathConfig::StoragePath::dbDir + directoryEntry->d_name; + if (smack_set_label_for_path(f.c_str(), XATTR_NAME_SMACK, 1, DB_FILES_SMACK_LABEL) < 0) { + LOGE("Failed to set label for database file: " << f); + } + } + closedir(dbDirectory); + } +#endif +} + void OfflineLogic::onPoliciesChanged(void) { m_storage->save(); + labelDatabaseFiles(); } } /* namespace Cynara */ diff --git a/src/admin/logic/OfflineLogic.h b/src/admin/logic/OfflineLogic.h index 6dc2a7e..e378930 100644 --- a/src/admin/logic/OfflineLogic.h +++ b/src/admin/logic/OfflineLogic.h @@ -67,6 +67,8 @@ private: typedef std::unique_ptr StorageBackendUniquePtr; typedef std::unique_ptr PluginManagerUniquePtr; + void labelDatabaseFiles(void); + StorageUniquePtr m_storage; StorageBackendUniquePtr m_storageBackend; PluginManagerUniquePtr m_pluginManager; -- 2.7.4 From 229ec1e1e8c5940c62f734e4b8a0b9c49eb8f9f2 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Fri, 13 Mar 2015 15:26:12 +0100 Subject: [PATCH 10/16] Release 0.6.1 Change-Id: Ib59402d97908d7799599031b1923e74fd875383f --- CMakeLists.txt | 2 +- changelog | 26 ++++++++++++++++++++++++++ packaging/cynara.spec | 2 +- src/admin/CMakeLists.txt | 2 +- src/agent/CMakeLists.txt | 2 +- src/client-async/CMakeLists.txt | 2 +- src/client-common/CMakeLists.txt | 2 +- src/client/CMakeLists.txt | 2 +- src/common/CMakeLists.txt | 2 +- src/helpers/creds-commons/CMakeLists.txt | 2 +- src/helpers/creds-dbus/CMakeLists.txt | 2 +- src/helpers/creds-socket/CMakeLists.txt | 2 +- src/helpers/session/CMakeLists.txt | 2 +- src/storage/CMakeLists.txt | 2 +- 14 files changed, 39 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a8d8f17..244e392 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8.3) PROJECT("cynara") -set(CYNARA_VERSION 0.6.0) +set(CYNARA_VERSION 0.6.1) ############################# cmake packages ################################## diff --git a/changelog b/changelog index 7d42925..924d601 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,31 @@ ############################### +Release: 0.6.1 +Date: 2015.03.13 +Name: Fix migration and checksums related bugs. + +Libraries: +libcynara-admin.0.6.1 +libcynara-agent.0.6.1 +libcynara-client-async.0.6.1 +libcynara-client-commmons.0.6.1 +libcynara-client.0.6.1 +libcynara-commons.0.6.1 +libcynara-creds-commons.0.6.1 +libcynara-creds-dbus.0.6.1 +libcynara-creds-socket.0.6.1 +libcynara-session.0.6.1 +libcynara-storage.0.6.1 + +Executables: +cyad +cynara + +Description: +Fix bugs related to database migration + +############################### + Release: 0.6.0 Date: 2015.03.09 Name: Client configuration, simple-check, cynara_strerror, checksums, emergency mode, migration tool. diff --git a/packaging/cynara.spec b/packaging/cynara.spec index e0282cf..9d56c9c 100644 --- a/packaging/cynara.spec +++ b/packaging/cynara.spec @@ -1,6 +1,6 @@ Name: cynara Summary: Cynara service with client libraries -Version: 0.6.0 +Version: 0.6.1 Release: 1 Group: Security/Application Privilege License: Apache-2.0 diff --git a/src/admin/CMakeLists.txt b/src/admin/CMakeLists.txt index 773126b..a63ab3a 100644 --- a/src/admin/CMakeLists.txt +++ b/src/admin/CMakeLists.txt @@ -17,7 +17,7 @@ # SET(LIB_CYNARA_ADMIN_VERSION_MAJOR 0) -SET(LIB_CYNARA_ADMIN_VERSION ${LIB_CYNARA_ADMIN_VERSION_MAJOR}.6.0) +SET(LIB_CYNARA_ADMIN_VERSION ${LIB_CYNARA_ADMIN_VERSION_MAJOR}.6.1) IF (DB_FILES_SMACK_LABEL) SET(SMACK "smack") diff --git a/src/agent/CMakeLists.txt b/src/agent/CMakeLists.txt index da71235..a2ca4c2 100644 --- a/src/agent/CMakeLists.txt +++ b/src/agent/CMakeLists.txt @@ -17,7 +17,7 @@ # SET(LIB_CYNARA_AGENT_VERSION_MAJOR 0) -SET(LIB_CYNARA_AGENT_VERSION ${LIB_CYNARA_AGENT_VERSION_MAJOR}.6.0) +SET(LIB_CYNARA_AGENT_VERSION ${LIB_CYNARA_AGENT_VERSION_MAJOR}.6.1) SET(CYNARA_LIB_CYNARA_AGENT_PATH ${CYNARA_PATH}/agent) diff --git a/src/client-async/CMakeLists.txt b/src/client-async/CMakeLists.txt index 19d8b3c..0b82d57 100644 --- a/src/client-async/CMakeLists.txt +++ b/src/client-async/CMakeLists.txt @@ -17,7 +17,7 @@ # SET(LIB_CYNARA_ASYNC_VERSION_MAJOR 0) -SET(LIB_CYNARA_ASYNC_VERSION ${LIB_CYNARA_ASYNC_VERSION_MAJOR}.6.0) +SET(LIB_CYNARA_ASYNC_VERSION ${LIB_CYNARA_ASYNC_VERSION_MAJOR}.6.1) SET(CYNARA_LIB_CYNARA_ASYNC_PATH ${CYNARA_PATH}/client-async) diff --git a/src/client-common/CMakeLists.txt b/src/client-common/CMakeLists.txt index 8984ff6..2372ba6 100644 --- a/src/client-common/CMakeLists.txt +++ b/src/client-common/CMakeLists.txt @@ -17,7 +17,7 @@ # SET(LIB_CYNARA_CLIENT_COMMON_VERSION_MAJOR 0) -SET(LIB_CYNARA_CLIENT_COMMON_VERSION ${LIB_CYNARA_CLIENT_COMMON_VERSION_MAJOR}.6.0) +SET(LIB_CYNARA_CLIENT_COMMON_VERSION ${LIB_CYNARA_CLIENT_COMMON_VERSION_MAJOR}.6.1) SET(LIB_CYNARA_COMMON_PATH ${CYNARA_PATH}/client-common) diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index d98059f..05b93cd 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -18,7 +18,7 @@ # SET(LIB_CYNARA_VERSION_MAJOR 0) -SET(LIB_CYNARA_VERSION ${LIB_CYNARA_VERSION_MAJOR}.6.0) +SET(LIB_CYNARA_VERSION ${LIB_CYNARA_VERSION_MAJOR}.6.1) SET(LIB_CYNARA_PATH ${CYNARA_PATH}/client) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index f72bb7e..00c717c 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -17,7 +17,7 @@ # SET(CYNARA_COMMON_VERSION_MAJOR 0) -SET(CYNARA_COMMON_VERSION ${CYNARA_COMMON_VERSION_MAJOR}.6.0) +SET(CYNARA_COMMON_VERSION ${CYNARA_COMMON_VERSION_MAJOR}.6.1) SET(COMMON_PATH ${CYNARA_PATH}/common) diff --git a/src/helpers/creds-commons/CMakeLists.txt b/src/helpers/creds-commons/CMakeLists.txt index dc0b25d..910f98f 100644 --- a/src/helpers/creds-commons/CMakeLists.txt +++ b/src/helpers/creds-commons/CMakeLists.txt @@ -19,7 +19,7 @@ # SET(LIB_CREDS_COMMONS_VERSION_MAJOR 0) -SET(LIB_CREDS_COMMONS_VERSION ${LIB_CREDS_COMMONS_VERSION_MAJOR}.6.0) +SET(LIB_CREDS_COMMONS_VERSION ${LIB_CREDS_COMMONS_VERSION_MAJOR}.6.1) SET(LIB_CREDS_COMMONS_PATH ${CYNARA_PATH}/helpers/creds-commons) diff --git a/src/helpers/creds-dbus/CMakeLists.txt b/src/helpers/creds-dbus/CMakeLists.txt index fc7c4cb..871535f 100644 --- a/src/helpers/creds-dbus/CMakeLists.txt +++ b/src/helpers/creds-dbus/CMakeLists.txt @@ -19,7 +19,7 @@ # SET(LIB_CREDS_DBUS_VERSION_MAJOR 0) -SET(LIB_CREDS_DBUS_VERSION ${LIB_CREDS_DBUS_VERSION_MAJOR}.6.0) +SET(LIB_CREDS_DBUS_VERSION ${LIB_CREDS_DBUS_VERSION_MAJOR}.6.1) SET(LIB_CREDS_DBUS_PATH ${CYNARA_PATH}/helpers/creds-dbus) diff --git a/src/helpers/creds-socket/CMakeLists.txt b/src/helpers/creds-socket/CMakeLists.txt index 4c33968..ee905c8 100644 --- a/src/helpers/creds-socket/CMakeLists.txt +++ b/src/helpers/creds-socket/CMakeLists.txt @@ -19,7 +19,7 @@ # SET(LIB_CREDS_SOCKET_VERSION_MAJOR 0) -SET(LIB_CREDS_SOCKET_VERSION ${LIB_CREDS_SOCKET_VERSION_MAJOR}.6.0) +SET(LIB_CREDS_SOCKET_VERSION ${LIB_CREDS_SOCKET_VERSION_MAJOR}.6.1) SET(LIB_CREDS_SOCKET_PATH ${CYNARA_PATH}/helpers/creds-socket) diff --git a/src/helpers/session/CMakeLists.txt b/src/helpers/session/CMakeLists.txt index c08da4f..49a369b 100644 --- a/src/helpers/session/CMakeLists.txt +++ b/src/helpers/session/CMakeLists.txt @@ -19,7 +19,7 @@ # SET(LIB_SESSION_VERSION_MAJOR 0) -SET(LIB_SESSION_VERSION ${LIB_SESSION_VERSION_MAJOR}.6.0) +SET(LIB_SESSION_VERSION ${LIB_SESSION_VERSION_MAJOR}.6.1) SET(LIB_SESSION_PATH ${CYNARA_PATH}/helpers/session) diff --git a/src/storage/CMakeLists.txt b/src/storage/CMakeLists.txt index 574d369..ab534c0 100644 --- a/src/storage/CMakeLists.txt +++ b/src/storage/CMakeLists.txt @@ -18,7 +18,7 @@ # SET(LIB_CYNARA_STORAGE_VERSION_MAJOR 0) -SET(LIB_CYNARA_STORAGE_VERSION ${LIB_CYNARA_STORAGE_VERSION_MAJOR}.6.0) +SET(LIB_CYNARA_STORAGE_VERSION ${LIB_CYNARA_STORAGE_VERSION_MAJOR}.6.1) SET(CYNARA_LIB_CYNARA_STORAGE_PATH ${CYNARA_PATH}/storage) -- 2.7.4 From fd23011968b2d89cdfe129f4bb6a5b21c83e6baf Mon Sep 17 00:00:00 2001 From: Zofia Abramowska Date: Thu, 5 Mar 2015 15:06:40 +0100 Subject: [PATCH 11/16] Removal of unnecesary shared_ptr in requests/responses Change arguments from shared_ptr to references for Request*, Response* class methods where no shared ownership takes place. Change-Id: I46d04d24d95df1f5b1844284e5a218d2946935fb --- src/agent/logic/Logic.cpp | 10 +- src/agent/socket/AgentSocketClient.cpp | 6 +- src/client-async/sockets/SocketClientAsync.cpp | 4 +- src/common/protocol/ProtocolAdmin.cpp | 180 +++++++++++---------- src/common/protocol/ProtocolAdmin.h | 24 +-- src/common/protocol/ProtocolAgent.cpp | 46 +++--- src/common/protocol/ProtocolAgent.h | 10 +- src/common/protocol/ProtocolClient.cpp | 74 ++++----- src/common/protocol/ProtocolClient.h | 12 +- src/common/protocol/ProtocolSignal.cpp | 5 +- src/common/protocol/ProtocolSignal.h | 4 +- src/common/request/AdminCheckRequest.cpp | 11 +- src/common/request/AdminCheckRequest.h | 6 +- src/common/request/AgentActionRequest.cpp | 11 +- src/common/request/AgentActionRequest.h | 5 +- src/common/request/AgentRegisterRequest.cpp | 11 +- src/common/request/AgentRegisterRequest.h | 5 +- src/common/request/CancelRequest.cpp | 11 +- src/common/request/CancelRequest.h | 6 +- src/common/request/CheckRequest.cpp | 11 +- src/common/request/CheckRequest.h | 6 +- src/common/request/DescriptionListRequest.cpp | 11 +- src/common/request/DescriptionListRequest.h | 5 +- src/common/request/EraseRequest.cpp | 11 +- src/common/request/EraseRequest.h | 5 +- src/common/request/InsertOrUpdateBucketRequest.cpp | 11 +- src/common/request/InsertOrUpdateBucketRequest.h | 6 +- src/common/request/ListRequest.cpp | 10 +- src/common/request/ListRequest.h | 5 +- src/common/request/RemoveBucketRequest.cpp | 11 +- src/common/request/RemoveBucketRequest.h | 6 +- src/common/request/Request.h | 7 +- src/common/request/RequestContext.h | 7 +- src/common/request/RequestTaker.cpp | 46 +++--- src/common/request/RequestTaker.h | 30 ++-- src/common/request/SetPoliciesRequest.cpp | 11 +- src/common/request/SetPoliciesRequest.h | 6 +- src/common/request/SignalRequest.cpp | 11 +- src/common/request/SignalRequest.h | 7 +- src/common/request/SimpleCheckRequest.cpp | 9 +- src/common/request/SimpleCheckRequest.h | 5 +- src/common/response/AdminCheckResponse.cpp | 11 +- src/common/response/AdminCheckResponse.h | 4 +- src/common/response/AgentActionResponse.cpp | 11 +- src/common/response/AgentActionResponse.h | 5 +- src/common/response/AgentRegisterResponse.cpp | 13 +- src/common/response/AgentRegisterResponse.h | 5 +- src/common/response/CancelResponse.cpp | 11 +- src/common/response/CancelResponse.h | 5 +- src/common/response/CheckResponse.cpp | 11 +- src/common/response/CheckResponse.h | 6 +- src/common/response/CodeResponse.cpp | 11 +- src/common/response/CodeResponse.h | 4 +- src/common/response/DescriptionListResponse.cpp | 11 +- src/common/response/DescriptionListResponse.h | 3 +- src/common/response/ListResponse.cpp | 12 +- src/common/response/ListResponse.h | 3 +- src/common/response/Response.h | 7 +- src/common/response/ResponseTaker.cpp | 32 ++-- src/common/response/ResponseTaker.h | 18 +-- src/common/response/SimpleCheckResponse.cpp | 9 +- src/common/response/SimpleCheckResponse.h | 4 +- src/common/sockets/SocketClient.cpp | 6 +- src/service/agent/AgentTalker.cpp | 7 +- src/service/logic/Logic.cpp | 142 ++++++++-------- src/service/logic/Logic.h | 36 ++--- src/service/request/CheckContext.h | 7 +- src/service/request/CheckRequestManager.cpp | 8 +- src/service/request/CheckRequestManager.h | 4 +- src/service/sockets/SocketManager.cpp | 10 +- test/common/protocols/RequestTestHelper.h | 12 +- test/common/protocols/ResponseTestHelper.h | 12 +- 72 files changed, 569 insertions(+), 549 deletions(-) diff --git a/src/agent/logic/Logic.cpp b/src/agent/logic/Logic.cpp index d6576fe..c1c6eb4 100644 --- a/src/agent/logic/Logic.cpp +++ b/src/agent/logic/Logic.cpp @@ -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. @@ -136,12 +136,10 @@ int Logic::putResponse(const AgentResponseType responseType, return CYNARA_API_SERVICE_NOT_AVAILABLE; } - RequestPtr requestPtr = std::make_shared(responseType, pluginData, - sequenceNumber); + AgentActionRequest request(responseType, pluginData, sequenceNumber); m_responseBuffer->clear(); - RequestContextPtr contextPtr = std::make_shared(ResponseTakerPtr(), - m_responseBuffer); - requestPtr->execute(requestPtr, m_responseTakerPtr, contextPtr); + RequestContext context(ResponseTakerPtr(), m_responseBuffer); + request.execute(request, *m_responseTakerPtr, context); return m_agentSocket->sendDataToServer(*m_responseBuffer) ? CYNARA_API_SUCCESS : CYNARA_API_SERVICE_NOT_AVAILABLE; } diff --git a/src/agent/socket/AgentSocketClient.cpp b/src/agent/socket/AgentSocketClient.cpp index 0e576ed..31e30b2 100644 --- a/src/agent/socket/AgentSocketClient.cpp +++ b/src/agent/socket/AgentSocketClient.cpp @@ -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. @@ -43,8 +43,8 @@ AgentSocketClient::AgentSocketClient(const std::string &socketPath, ProtocolPtr ResponsePtr AgentSocketClient::askCynaraServer(RequestPtr request) { //pass request to protocol - RequestContextPtr context = std::make_shared(ResponseTakerPtr(), m_writeQueue); - request->execute(request, m_protocol, context); + RequestContext context(ResponseTakerPtr(), m_writeQueue); + request->execute(*request, *m_protocol, context); //send request to cynara if (!sendDataToServer(*m_writeQueue)) { diff --git a/src/client-async/sockets/SocketClientAsync.cpp b/src/client-async/sockets/SocketClientAsync.cpp index 7be87d1..fa2cef0 100644 --- a/src/client-async/sockets/SocketClientAsync.cpp +++ b/src/client-async/sockets/SocketClientAsync.cpp @@ -57,8 +57,8 @@ bool SocketClientAsync::isConnected(void) { } void SocketClientAsync::appendRequest(RequestPtr request) { - RequestContextPtr context = std::make_shared(ResponseTakerPtr(), m_writeQueue); - request->execute(request, m_protocol, context); + RequestContext context(ResponseTakerPtr(), m_writeQueue); + request->execute(*request, *m_protocol, context); } bool SocketClientAsync::isDataToSend(void) { diff --git a/src/common/protocol/ProtocolAdmin.cpp b/src/common/protocol/ProtocolAdmin.cpp index 35eedd8..87d8995 100644 --- a/src/common/protocol/ProtocolAdmin.cpp +++ b/src/common/protocol/ProtocolAdmin.cpp @@ -347,110 +347,111 @@ ResponsePtr ProtocolAdmin::extractResponseFromBuffer(BinaryQueuePtr bufferQueue) return nullptr; } -void ProtocolAdmin::execute(RequestContextPtr context, AdminCheckRequestPtr request) { +void ProtocolAdmin::execute(const RequestContext &context, const AdminCheckRequest &request) { LOGD("Serializing AdminCheckRequest: client <%s>, user <%s>, privilege <%s>, " - "startBucket <%s>, recursive [%d]", request->key().client().value().c_str(), - request->key().user().value().c_str(), request->key().privilege().value().c_str(), - request->startBucket().c_str(), request->recursive()); + "startBucket <%s>, recursive [%d]", request.key().client().value().c_str(), + request.key().user().value().c_str(), request.key().privilege().value().c_str(), + request.startBucket().c_str(), request.recursive()); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); ProtocolSerialization::serialize(frame, OpAdminCheckRequest); - ProtocolSerialization::serialize(frame, request->key().client().value()); - ProtocolSerialization::serialize(frame, request->key().user().value()); - ProtocolSerialization::serialize(frame, request->key().privilege().value()); - ProtocolSerialization::serialize(frame, request->startBucket()); - ProtocolSerialization::serialize(frame, request->recursive()); + ProtocolSerialization::serialize(frame, request.key().client().value()); + ProtocolSerialization::serialize(frame, request.key().user().value()); + ProtocolSerialization::serialize(frame, request.key().privilege().value()); + ProtocolSerialization::serialize(frame, request.startBucket()); + ProtocolSerialization::serialize(frame, request.recursive()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, DescriptionListRequestPtr request) { +void ProtocolAdmin::execute(const RequestContext &context, const DescriptionListRequest &request) { LOGD("Serializing DescriptionListRequest"); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); ProtocolSerialization::serialize(frame, OpDescriptionListRequest); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, EraseRequestPtr request) { +void ProtocolAdmin::execute(const RequestContext &context, const EraseRequest &request) { LOGD("Serializing EraseRequest: sequenceNumber [%" PRIu16 "], startBucket <%s>, " "recursive [%d], filter client <%s> filter user <%s> filter privilege <%s>", - request->sequenceNumber(), request->startBucket().c_str(), - static_cast(request->recursive()), request->filter().client().value().c_str(), - request->filter().user().value().c_str(), request->filter().privilege().value().c_str()); + request.sequenceNumber(), request.startBucket().c_str(), + static_cast(request.recursive()), request.filter().client().value().c_str(), + request.filter().user().value().c_str(), request.filter().privilege().value().c_str()); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); ProtocolSerialization::serialize(frame, OpEraseRequest); - ProtocolSerialization::serialize(frame, request->startBucket()); - ProtocolSerialization::serialize(frame, request->recursive()); - ProtocolSerialization::serialize(frame, request->filter().client().value()); - ProtocolSerialization::serialize(frame, request->filter().user().value()); - ProtocolSerialization::serialize(frame, request->filter().privilege().value()); + ProtocolSerialization::serialize(frame, request.startBucket()); + ProtocolSerialization::serialize(frame, request.recursive()); + ProtocolSerialization::serialize(frame, request.filter().client().value()); + ProtocolSerialization::serialize(frame, request.filter().user().value()); + ProtocolSerialization::serialize(frame, request.filter().privilege().value()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request) { +void ProtocolAdmin::execute(const RequestContext &context, + const InsertOrUpdateBucketRequest &request) { LOGD("Serializing InsertOrUpdateBucketRequest: sequenceNumber [%" PRIu16 "], bucketId <%s>, " - "result.type [%" PRIu16 "], result.meta <%s>", request->sequenceNumber(), - request->bucketId().c_str(), request->result().policyType(), - request->result().metadata().c_str()); + "result.type [%" PRIu16 "], result.meta <%s>", request.sequenceNumber(), + request.bucketId().c_str(), request.result().policyType(), + request.result().metadata().c_str()); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); ProtocolSerialization::serialize(frame, OpInsertOrUpdateBucket); - ProtocolSerialization::serialize(frame, request->bucketId()); - ProtocolSerialization::serialize(frame, request->result().policyType()); - ProtocolSerialization::serialize(frame, request->result().metadata()); + ProtocolSerialization::serialize(frame, request.bucketId()); + ProtocolSerialization::serialize(frame, request.result().policyType()); + ProtocolSerialization::serialize(frame, request.result().metadata()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, ListRequestPtr request) { +void ProtocolAdmin::execute(const RequestContext &context, const ListRequest &request) { LOGD("Serializing ListRequest: sequenceNumber [%" PRIu16 "], bucketId <%s>, " - "filter client <%s> filter user <%s> filter privilege <%s>", request->sequenceNumber(), - request->bucket().c_str(), request->filter().client().value().c_str(), - request->filter().user().value().c_str(), request->filter().privilege().value().c_str()); + "filter client <%s> filter user <%s> filter privilege <%s>", request.sequenceNumber(), + request.bucket().c_str(), request.filter().client().value().c_str(), + request.filter().user().value().c_str(), request.filter().privilege().value().c_str()); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); ProtocolSerialization::serialize(frame, OpListRequest); - ProtocolSerialization::serialize(frame, request->bucket()); - ProtocolSerialization::serialize(frame, request->filter().client().value()); - ProtocolSerialization::serialize(frame, request->filter().user().value()); - ProtocolSerialization::serialize(frame, request->filter().privilege().value()); + ProtocolSerialization::serialize(frame, request.bucket()); + ProtocolSerialization::serialize(frame, request.filter().client().value()); + ProtocolSerialization::serialize(frame, request.filter().user().value()); + ProtocolSerialization::serialize(frame, request.filter().privilege().value()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, RemoveBucketRequestPtr request) { +void ProtocolAdmin::execute(const RequestContext &context, const RemoveBucketRequest &request) { LOGD("Serializing RemoveBucketRequest: sequenceNumber [%" PRIu16 "], bucketId <%s>", - request->sequenceNumber(), request->bucketId().c_str()); + request.sequenceNumber(), request.bucketId().c_str()); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); ProtocolSerialization::serialize(frame, OpRemoveBucket); - ProtocolSerialization::serialize(frame, request->bucketId()); + ProtocolSerialization::serialize(frame, request.bucketId()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, SetPoliciesRequestPtr request) { +void ProtocolAdmin::execute(const RequestContext &context, const SetPoliciesRequest &request) { LOGD("Serializing SetPoliciesRequestPtr: sequenceNumber [%" PRIu16 "], " - "insertOrUpdate count [%zu], remove count [%zu]", request->sequenceNumber(), - request->policiesToBeInsertedOrUpdated().size(), request->policiesToBeRemoved().size()); + "insertOrUpdate count [%zu], remove count [%zu]", request.sequenceNumber(), + request.policiesToBeInsertedOrUpdated().size(), request.policiesToBeRemoved().size()); ProtocolFrame frame = - ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); + ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); ProtocolSerialization::serialize(frame, OpSetPolicies); ProtocolSerialization::serialize(frame, - static_cast(request->policiesToBeInsertedOrUpdated().size())); - for (auto policyBucket : request->policiesToBeInsertedOrUpdated()) { + static_cast(request.policiesToBeInsertedOrUpdated().size())); + for (auto policyBucket : request.policiesToBeInsertedOrUpdated()) { ProtocolSerialization::serialize(frame, policyBucket.first); ProtocolSerialization::serialize(frame, static_cast(policyBucket.second.size())); @@ -466,8 +467,8 @@ void ProtocolAdmin::execute(RequestContextPtr context, SetPoliciesRequestPtr req } ProtocolSerialization::serialize(frame, - static_cast(request->policiesToBeRemoved().size())); - for (auto policyBucket : request->policiesToBeRemoved()) { + static_cast(request.policiesToBeRemoved().size())); + for (auto policyBucket : request.policiesToBeRemoved()) { ProtocolSerialization::serialize(frame, policyBucket.first); ProtocolSerialization::serialize(frame, static_cast(policyBucket.second.size())); @@ -479,76 +480,77 @@ void ProtocolAdmin::execute(RequestContextPtr context, SetPoliciesRequestPtr req } } - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, AdminCheckResponsePtr response) { +void ProtocolAdmin::execute(const RequestContext &context, const AdminCheckResponse &response) { LOGD("Serializing AdminCheckResponse: op [%" PRIu8 "], sequenceNumber [%" PRIu16 "], " "policyType [%" PRIu16 "], metadata <%s>, bucketValid [%d], dbCorrupted [%d]", - OpAdminCheckPolicyResponse, response->sequenceNumber(), response->result().policyType(), - response->result().metadata().c_str(), static_cast(response->isBucketValid()), - static_cast(response->isDbCorrupted())); + OpAdminCheckPolicyResponse, response.sequenceNumber(), response.result().policyType(), + response.result().metadata().c_str(), static_cast(response.isBucketValid()), + static_cast(response.isDbCorrupted())); ProtocolFrame frame = ProtocolFrameSerializer::startSerialization( - response->sequenceNumber()); + response.sequenceNumber()); ProtocolSerialization::serialize(frame, OpAdminCheckPolicyResponse); - ProtocolSerialization::serialize(frame, response->result().policyType()); - ProtocolSerialization::serialize(frame, response->result().metadata()); - ProtocolSerialization::serialize(frame, response->isBucketValid()); - ProtocolSerialization::serialize(frame, response->isDbCorrupted()); + ProtocolSerialization::serialize(frame, response.result().policyType()); + ProtocolSerialization::serialize(frame, response.result().metadata()); + ProtocolSerialization::serialize(frame, response.isBucketValid()); + ProtocolSerialization::serialize(frame, response.isDbCorrupted()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, CodeResponsePtr response) { +void ProtocolAdmin::execute(const RequestContext &context, const CodeResponse &response) { LOGD("Serializing CodeResponse: op [%" PRIu8 "], sequenceNumber [%" PRIu16 "], " - "code [%" PRIu16 "]", OpCodeResponse, response->sequenceNumber(), response->m_code); + "code [%" PRIu16 "]", OpCodeResponse, response.sequenceNumber(), response.m_code); ProtocolFrame frame = ProtocolFrameSerializer::startSerialization( - response->sequenceNumber()); + response.sequenceNumber()); ProtocolSerialization::serialize(frame, OpCodeResponse); - ProtocolSerialization::serialize(frame, static_cast(response->m_code)); + ProtocolSerialization::serialize(frame, static_cast(response.m_code)); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, DescriptionListResponsePtr response) { +void ProtocolAdmin::execute(const RequestContext &context, const DescriptionListResponse &response) +{ ProtocolFrameFieldsCount descriptionsSize - = static_cast(response->descriptions().size()); + = static_cast(response.descriptions().size()); LOGD("Serializing DescriptionListResponse: op [%" PRIu8 "], sequenceNumber [%" PRIu16 "], " "number of descriptions [%" PRIu16 "], dbCorrupted [%d]", OpDescriptionListResponse, - response->sequenceNumber(), descriptionsSize, static_cast(response->isDbCorrupted())); + response.sequenceNumber(), descriptionsSize, static_cast(response.isDbCorrupted())); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response.sequenceNumber()); ProtocolSerialization::serialize(frame, OpDescriptionListResponse); ProtocolSerialization::serialize(frame, descriptionsSize); - for (auto &desc : response->descriptions()) { + for (auto &desc : response.descriptions()) { ProtocolSerialization::serialize(frame, desc.type); ProtocolSerialization::serialize(frame, desc.name); } - ProtocolSerialization::serialize(frame, response->isDbCorrupted()); + ProtocolSerialization::serialize(frame, response.isDbCorrupted()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolAdmin::execute(RequestContextPtr context, ListResponsePtr response) { +void ProtocolAdmin::execute(const RequestContext &context, const ListResponse &response) { ProtocolFrameFieldsCount policiesSize - = static_cast(response->policies().size()); + = static_cast(response.policies().size()); LOGD("Serializing ListResponse: op [%" PRIu8 "], sequenceNumber [%" PRIu16 "], " "number of policies [%" PRIu16 "], bucketValid [%d], dbCorrupted [%d]", OpListResponse, - response->sequenceNumber(), policiesSize, static_cast(response->isBucketValid()), - static_cast(response->isDbCorrupted())); + response.sequenceNumber(), policiesSize, static_cast(response.isBucketValid()), + static_cast(response.isDbCorrupted())); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response.sequenceNumber()); ProtocolSerialization::serialize(frame, OpListResponse); ProtocolSerialization::serialize(frame, policiesSize); - for (auto &policy : response->policies()) { + for (auto &policy : response.policies()) { // PolicyKey ProtocolSerialization::serialize(frame, policy.key().client().value()); ProtocolSerialization::serialize(frame, policy.key().user().value()); @@ -557,10 +559,10 @@ void ProtocolAdmin::execute(RequestContextPtr context, ListResponsePtr response) ProtocolSerialization::serialize(frame, policy.result().policyType()); ProtocolSerialization::serialize(frame, policy.result().metadata()); } - ProtocolSerialization::serialize(frame, response->isBucketValid()); - ProtocolSerialization::serialize(frame, response->isDbCorrupted()); + ProtocolSerialization::serialize(frame, response.isBucketValid()); + ProtocolSerialization::serialize(frame, response.isDbCorrupted()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } } // namespace Cynara diff --git a/src/common/protocol/ProtocolAdmin.h b/src/common/protocol/ProtocolAdmin.h index 254dd33..fb76d38 100644 --- a/src/common/protocol/ProtocolAdmin.h +++ b/src/common/protocol/ProtocolAdmin.h @@ -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. @@ -38,18 +38,18 @@ public: virtual RequestPtr extractRequestFromBuffer(BinaryQueuePtr bufferQueue); virtual ResponsePtr extractResponseFromBuffer(BinaryQueuePtr bufferQueue); - virtual void execute(RequestContextPtr context, AdminCheckRequestPtr request); - virtual void execute(RequestContextPtr context, DescriptionListRequestPtr request); - virtual void execute(RequestContextPtr context, EraseRequestPtr request); - virtual void execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request); - virtual void execute(RequestContextPtr context, ListRequestPtr request); - virtual void execute(RequestContextPtr context, RemoveBucketRequestPtr request); - virtual void execute(RequestContextPtr context, SetPoliciesRequestPtr request); + virtual void execute(const RequestContext &context, const AdminCheckRequest &request); + virtual void execute(const RequestContext &context, const DescriptionListRequest &request); + virtual void execute(const RequestContext &context, const EraseRequest &request); + virtual void execute(const RequestContext &context, const InsertOrUpdateBucketRequest &request); + virtual void execute(const RequestContext &context, const ListRequest &request); + virtual void execute(const RequestContext &context, const RemoveBucketRequest &request); + virtual void execute(const RequestContext &context, const SetPoliciesRequest &request); - virtual void execute(RequestContextPtr context, AdminCheckResponsePtr response); - virtual void execute(RequestContextPtr context, CodeResponsePtr response); - virtual void execute(RequestContextPtr context, DescriptionListResponsePtr response); - virtual void execute(RequestContextPtr context, ListResponsePtr response); + virtual void execute(const RequestContext &context, const AdminCheckResponse &response); + virtual void execute(const RequestContext &context, const CodeResponse &response); + virtual void execute(const RequestContext &context, const DescriptionListResponse &response); + virtual void execute(const RequestContext &context, const ListResponse &response); private: RequestPtr deserializeAdminCheckRequest(void); diff --git a/src/common/protocol/ProtocolAgent.cpp b/src/common/protocol/ProtocolAgent.cpp index 7ccec81..b6d82cc 100644 --- a/src/common/protocol/ProtocolAgent.cpp +++ b/src/common/protocol/ProtocolAgent.cpp @@ -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. @@ -142,54 +142,54 @@ ResponsePtr ProtocolAgent::extractResponseFromBuffer(BinaryQueuePtr bufferQueue) return nullptr; } -void ProtocolAgent::execute(RequestContextPtr context, AgentActionRequestPtr request) { +void ProtocolAgent::execute(const RequestContext &context, const AgentActionRequest &request) { LOGD("Serializing AgentActionRequest: op [%" PRIu8 "], requestType [%" PRIu8 "], " - "data lengtgh <%zu>", OpAgentActionRequest, request->type(), request->data().size()); + "data lengtgh <%zu>", OpAgentActionRequest, request.type(), request.data().size()); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); ProtocolSerialization::serialize(frame, OpAgentActionRequest); - ProtocolSerialization::serialize(frame, request->type()); - ProtocolSerialization::serialize(frame, request->data()); + ProtocolSerialization::serialize(frame, request.type()); + ProtocolSerialization::serialize(frame, request.data()); - ProtocolFrameSerializer::finishSerialization(frame, *context->responseQueue()); + ProtocolFrameSerializer::finishSerialization(frame, *context.responseQueue()); } -void ProtocolAgent::execute(RequestContextPtr context, AgentRegisterRequestPtr request) { +void ProtocolAgent::execute(const RequestContext &context, const AgentRegisterRequest &request) { LOGD("Serializing AgentRegisterRequest: op [%" PRIu8 "], agent type <%s>", - OpAgentRegisterRequest, request->agentType().c_str()); + OpAgentRegisterRequest, request.agentType().c_str()); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); ProtocolSerialization::serialize(frame, OpAgentRegisterRequest); - ProtocolSerialization::serialize(frame, request->agentType()); + ProtocolSerialization::serialize(frame, request.agentType()); - ProtocolFrameSerializer::finishSerialization(frame, *context->responseQueue()); + ProtocolFrameSerializer::finishSerialization(frame, *context.responseQueue()); } -void ProtocolAgent::execute(RequestContextPtr context, AgentRegisterResponsePtr response) { +void ProtocolAgent::execute(const RequestContext &context, const AgentRegisterResponse &response) { LOGD("Serializing AgentRegisterResponse: op [%" PRIu8 "], response code: [%d]", - OpAgentRegisterResponse, static_cast(response->m_code)); + OpAgentRegisterResponse, static_cast(response.m_code)); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response.sequenceNumber()); ProtocolSerialization::serialize(frame, OpAgentRegisterResponse); - ProtocolSerialization::serialize(frame, static_cast(response->m_code)); + ProtocolSerialization::serialize(frame, static_cast(response.m_code)); - ProtocolFrameSerializer::finishSerialization(frame, *context->responseQueue()); + ProtocolFrameSerializer::finishSerialization(frame, *context.responseQueue()); } -void ProtocolAgent::execute(RequestContextPtr context, AgentActionResponsePtr response) { +void ProtocolAgent::execute(const RequestContext &context, const AgentActionResponse &response) { LOGD("Serializing AgentActionResponse: op [%" PRIu8 "], responseType [%" PRIu8 "], " - "data lengtgh <%zu>", OpAgentActionResponse, response->type(), response->data().size()); + "data lengtgh <%zu>", OpAgentActionResponse, response.type(), response.data().size()); - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response->sequenceNumber()); + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response.sequenceNumber()); ProtocolSerialization::serialize(frame, OpAgentActionResponse); - ProtocolSerialization::serialize(frame, response->type()); - ProtocolSerialization::serialize(frame, response->data()); + ProtocolSerialization::serialize(frame, response.type()); + ProtocolSerialization::serialize(frame, response.data()); - ProtocolFrameSerializer::finishSerialization(frame, *context->responseQueue()); + ProtocolFrameSerializer::finishSerialization(frame, *context.responseQueue()); } } // namespace Cynara diff --git a/src/common/protocol/ProtocolAgent.h b/src/common/protocol/ProtocolAgent.h index ca28ec7..a0932c9 100644 --- a/src/common/protocol/ProtocolAgent.h +++ b/src/common/protocol/ProtocolAgent.h @@ -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. @@ -41,10 +41,10 @@ public: virtual RequestPtr extractRequestFromBuffer(BinaryQueuePtr bufferQueue); virtual ResponsePtr extractResponseFromBuffer(BinaryQueuePtr bufferQueue); - virtual void execute(RequestContextPtr context, AgentActionRequestPtr request); - virtual void execute(RequestContextPtr context, AgentActionResponsePtr request); - virtual void execute(RequestContextPtr context, AgentRegisterRequestPtr request); - virtual void execute(RequestContextPtr context, AgentRegisterResponsePtr request); + virtual void execute(const RequestContext &context, const AgentActionRequest &request); + virtual void execute(const RequestContext &context, const AgentActionResponse &request); + virtual void execute(const RequestContext &context, const AgentRegisterRequest &request); + virtual void execute(const RequestContext &context, const AgentRegisterResponse &request); private: RequestPtr deserializeActionRequest(void); diff --git a/src/common/protocol/ProtocolClient.cpp b/src/common/protocol/ProtocolClient.cpp index 05aac89..ad50ae7 100644 --- a/src/common/protocol/ProtocolClient.cpp +++ b/src/common/protocol/ProtocolClient.cpp @@ -179,87 +179,87 @@ ResponsePtr ProtocolClient::extractResponseFromBuffer(BinaryQueuePtr bufferQueue return nullptr; } -void ProtocolClient::execute(RequestContextPtr context, CancelRequestPtr request) { - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); +void ProtocolClient::execute(const RequestContext &context, const CancelRequest &request) { + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); LOGD("Serializing CancelRequest op [%" PRIu8 "]", OpCancelRequest); ProtocolSerialization::serialize(frame, OpCancelRequest); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolClient::execute(RequestContextPtr context, CheckRequestPtr request) { - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); +void ProtocolClient::execute(const RequestContext &context, const CheckRequest &request) { + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); LOGD("Serializing CheckRequest: client <%s>, user <%s>, privilege <%s>", - request->key().client().value().c_str(), request->key().user().value().c_str(), - request->key().privilege().value().c_str()); + request.key().client().value().c_str(), request.key().user().value().c_str(), + request.key().privilege().value().c_str()); ProtocolSerialization::serialize(frame, OpCheckPolicyRequest); - ProtocolSerialization::serialize(frame, request->key().client().value()); - ProtocolSerialization::serialize(frame, request->key().user().value()); - ProtocolSerialization::serialize(frame, request->key().privilege().value()); + ProtocolSerialization::serialize(frame, request.key().client().value()); + ProtocolSerialization::serialize(frame, request.key().user().value()); + ProtocolSerialization::serialize(frame, request.key().privilege().value()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolClient::execute(RequestContextPtr context, SimpleCheckRequestPtr request) { - ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber()); +void ProtocolClient::execute(const RequestContext &context, const SimpleCheckRequest &request) { + ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request.sequenceNumber()); LOGD("Serializing SimpleCheckRequest: client <%s>, user <%s>, privilege <%s>", - request->key().client().value().c_str(), request->key().user().value().c_str(), - request->key().privilege().value().c_str()); + request.key().client().value().c_str(), request.key().user().value().c_str(), + request.key().privilege().value().c_str()); ProtocolSerialization::serialize(frame, OpSimpleCheckPolicyRequest); - ProtocolSerialization::serialize(frame, request->key().client().value()); - ProtocolSerialization::serialize(frame, request->key().user().value()); - ProtocolSerialization::serialize(frame, request->key().privilege().value()); + ProtocolSerialization::serialize(frame, request.key().client().value()); + ProtocolSerialization::serialize(frame, request.key().user().value()); + ProtocolSerialization::serialize(frame, request.key().privilege().value()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolClient::execute(RequestContextPtr context, CancelResponsePtr response) { +void ProtocolClient::execute(const RequestContext &context, const CancelResponse &response) { ProtocolFrame frame = ProtocolFrameSerializer::startSerialization( - response->sequenceNumber()); + response.sequenceNumber()); LOGD("Serializing CancelResponse: op [%" PRIu8 "]", OpCancelResponse); ProtocolSerialization::serialize(frame, OpCancelResponse); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolClient::execute(RequestContextPtr context, CheckResponsePtr response) { +void ProtocolClient::execute(const RequestContext &context, const CheckResponse &response) { ProtocolFrame frame = ProtocolFrameSerializer::startSerialization( - response->sequenceNumber()); + response.sequenceNumber()); LOGD("Serializing CheckResponse: op [%" PRIu8 "], policyType [%" PRIu16 "], metadata <%s>", - OpCheckPolicyResponse, response->m_resultRef.policyType(), - response->m_resultRef.metadata().c_str()); + OpCheckPolicyResponse, response.m_resultRef.policyType(), + response.m_resultRef.metadata().c_str()); ProtocolSerialization::serialize(frame, OpCheckPolicyResponse); - ProtocolSerialization::serialize(frame, response->m_resultRef.policyType()); - ProtocolSerialization::serialize(frame, response->m_resultRef.metadata()); + ProtocolSerialization::serialize(frame, response.m_resultRef.policyType()); + ProtocolSerialization::serialize(frame, response.m_resultRef.metadata()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } -void ProtocolClient::execute(RequestContextPtr context, SimpleCheckResponsePtr response) { +void ProtocolClient::execute(const RequestContext &context, const SimpleCheckResponse &response) { ProtocolFrame frame = ProtocolFrameSerializer::startSerialization( - response->sequenceNumber()); + response.sequenceNumber()); LOGD("Serializing SimpleCheckResponse: op [%" PRIu8 "], retVal [%" PRIi32 "]," " policyType [%" PRIu16 "], metadata <%s>", OpCheckPolicyResponse, - response->getReturnValue(), response->getResult().policyType(), - response->getResult().metadata().c_str()); + response.getReturnValue(), response.getResult().policyType(), + response.getResult().metadata().c_str()); ProtocolSerialization::serialize(frame, OpSimpleCheckPolicyResponse); - ProtocolSerialization::serialize(frame, response->getReturnValue()); - ProtocolSerialization::serialize(frame, response->getResult().policyType()); - ProtocolSerialization::serialize(frame, response->getResult().metadata()); + ProtocolSerialization::serialize(frame, response.getReturnValue()); + ProtocolSerialization::serialize(frame, response.getResult().policyType()); + ProtocolSerialization::serialize(frame, response.getResult().metadata()); - ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); + ProtocolFrameSerializer::finishSerialization(frame, *(context.responseQueue())); } } // namespace Cynara diff --git a/src/common/protocol/ProtocolClient.h b/src/common/protocol/ProtocolClient.h index 7ed41b1..70d3f92 100644 --- a/src/common/protocol/ProtocolClient.h +++ b/src/common/protocol/ProtocolClient.h @@ -41,13 +41,13 @@ public: virtual RequestPtr extractRequestFromBuffer(BinaryQueuePtr bufferQueue); virtual ResponsePtr extractResponseFromBuffer(BinaryQueuePtr bufferQueue); - virtual void execute(RequestContextPtr context, CancelRequestPtr request); - virtual void execute(RequestContextPtr context, CheckRequestPtr request); - virtual void execute(RequestContextPtr context, SimpleCheckRequestPtr request); + virtual void execute(const RequestContext &context, const CancelRequest &request); + virtual void execute(const RequestContext &context, const CheckRequest &request); + virtual void execute(const RequestContext &context, const SimpleCheckRequest &request); - virtual void execute(RequestContextPtr context, CancelResponsePtr response); - virtual void execute(RequestContextPtr context, CheckResponsePtr response); - virtual void execute(RequestContextPtr context, SimpleCheckResponsePtr request); + virtual void execute(const RequestContext &context, const CancelResponse &response); + virtual void execute(const RequestContext &context, const CheckResponse &response); + virtual void execute(const RequestContext &context, const SimpleCheckResponse &request); private: RequestPtr deserializeCancelRequest(void); diff --git a/src/common/protocol/ProtocolSignal.cpp b/src/common/protocol/ProtocolSignal.cpp index d04dbbe..e249f92 100644 --- a/src/common/protocol/ProtocolSignal.cpp +++ b/src/common/protocol/ProtocolSignal.cpp @@ -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. @@ -38,7 +38,8 @@ ProtocolSignal::ProtocolSignal() { ProtocolSignal::~ProtocolSignal() { } -void ProtocolSignal::execute(RequestContextPtr context UNUSED, SignalRequestPtr request UNUSED) { +void ProtocolSignal::execute(const RequestContext &context UNUSED, + const SignalRequest &request UNUSED) { throw NotImplementedException(); } diff --git a/src/common/protocol/ProtocolSignal.h b/src/common/protocol/ProtocolSignal.h index 6c544c4..77617cd 100644 --- a/src/common/protocol/ProtocolSignal.h +++ b/src/common/protocol/ProtocolSignal.h @@ -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. @@ -39,7 +39,7 @@ public: virtual RequestPtr extractRequestFromBuffer(BinaryQueuePtr bufferQueue); virtual ResponsePtr extractResponseFromBuffer(BinaryQueuePtr bufferQueue); - virtual void execute(RequestContextPtr context, SignalRequestPtr request); + virtual void execute(const RequestContext &context, const SignalRequest &request); }; } // namespace Cynara diff --git a/src/common/request/AdminCheckRequest.cpp b/src/common/request/AdminCheckRequest.cpp index d8608be..f0fb3c3 100644 --- a/src/common/request/AdminCheckRequest.cpp +++ b/src/common/request/AdminCheckRequest.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements admin check request class */ -#include +#include +#include #include "AdminCheckRequest.h" namespace Cynara { -void AdminCheckRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void AdminCheckRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/AdminCheckRequest.h b/src/common/request/AdminCheckRequest.h index 96e2d0e..04db2a0 100644 --- a/src/common/request/AdminCheckRequest.h +++ b/src/common/request/AdminCheckRequest.h @@ -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. @@ -28,7 +28,6 @@ #include #include -#include namespace Cynara { @@ -58,7 +57,8 @@ public: return m_recursive; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/AgentActionRequest.cpp b/src/common/request/AgentActionRequest.cpp index 1e51313..9ea3c78 100644 --- a/src/common/request/AgentActionRequest.cpp +++ b/src/common/request/AgentActionRequest.cpp @@ -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. @@ -20,17 +20,16 @@ * @brief This file implements agent action request class */ -#include - +#include #include #include "AgentActionRequest.h" namespace Cynara { -void AgentActionRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void AgentActionRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/AgentActionRequest.h b/src/common/request/AgentActionRequest.h index f187435..7c53ebe 100644 --- a/src/common/request/AgentActionRequest.h +++ b/src/common/request/AgentActionRequest.h @@ -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. @@ -48,7 +48,8 @@ public: return m_type; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; private: const AgentRequestType m_type; diff --git a/src/common/request/AgentRegisterRequest.cpp b/src/common/request/AgentRegisterRequest.cpp index 6488193..4749b2e 100644 --- a/src/common/request/AgentRegisterRequest.cpp +++ b/src/common/request/AgentRegisterRequest.cpp @@ -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. @@ -20,17 +20,16 @@ * @brief This file implements agent register request class */ -#include - +#include #include #include "AgentRegisterRequest.h" namespace Cynara { -void AgentRegisterRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void AgentRegisterRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/AgentRegisterRequest.h b/src/common/request/AgentRegisterRequest.h index aa6f61b..b5e93dc 100644 --- a/src/common/request/AgentRegisterRequest.h +++ b/src/common/request/AgentRegisterRequest.h @@ -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. @@ -42,7 +42,8 @@ public: return m_agentType; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; private: AgentType m_agentType; diff --git a/src/common/request/CancelRequest.cpp b/src/common/request/CancelRequest.cpp index d7a5ffa..2d50ebf 100644 --- a/src/common/request/CancelRequest.cpp +++ b/src/common/request/CancelRequest.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements cancel request class */ -#include +#include +#include #include "CancelRequest.h" namespace Cynara { -void CancelRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void CancelRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/CancelRequest.h b/src/common/request/CancelRequest.h index a6192b8..ffe9ab5 100644 --- a/src/common/request/CancelRequest.h +++ b/src/common/request/CancelRequest.h @@ -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. @@ -25,7 +25,6 @@ #include #include -#include namespace Cynara { @@ -36,7 +35,8 @@ public: virtual ~CancelRequest() {}; - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/CheckRequest.cpp b/src/common/request/CheckRequest.cpp index 149c0c6..c40fff3 100644 --- a/src/common/request/CheckRequest.cpp +++ b/src/common/request/CheckRequest.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements check request class */ -#include +#include +#include #include "CheckRequest.h" namespace Cynara { -void CheckRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void CheckRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/CheckRequest.h b/src/common/request/CheckRequest.h index 263c4d6..594b81b 100644 --- a/src/common/request/CheckRequest.h +++ b/src/common/request/CheckRequest.h @@ -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. @@ -27,7 +27,6 @@ #include #include -#include namespace Cynara { @@ -46,7 +45,8 @@ public: return m_key; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/DescriptionListRequest.cpp b/src/common/request/DescriptionListRequest.cpp index 1cea6f5..879b03d 100644 --- a/src/common/request/DescriptionListRequest.cpp +++ b/src/common/request/DescriptionListRequest.cpp @@ -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. @@ -20,17 +20,16 @@ * @brief This file implements plugin description list request class */ -#include - +#include #include #include "DescriptionListRequest.h" namespace Cynara { -void DescriptionListRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void DescriptionListRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/DescriptionListRequest.h b/src/common/request/DescriptionListRequest.h index 53e14ef..8b33026 100644 --- a/src/common/request/DescriptionListRequest.h +++ b/src/common/request/DescriptionListRequest.h @@ -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. @@ -36,7 +36,8 @@ public: virtual ~DescriptionListRequest() {}; - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/EraseRequest.cpp b/src/common/request/EraseRequest.cpp index 54b59fc..2465d04 100644 --- a/src/common/request/EraseRequest.cpp +++ b/src/common/request/EraseRequest.cpp @@ -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. @@ -20,17 +20,16 @@ * @brief This file implements policies erase request class */ -#include - +#include #include #include "EraseRequest.h" namespace Cynara { -void EraseRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void EraseRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/EraseRequest.h b/src/common/request/EraseRequest.h index bbbf7d3..c2b3393 100644 --- a/src/common/request/EraseRequest.h +++ b/src/common/request/EraseRequest.h @@ -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,8 @@ public: return m_filter; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; private: PolicyBucketId m_startBucket; diff --git a/src/common/request/InsertOrUpdateBucketRequest.cpp b/src/common/request/InsertOrUpdateBucketRequest.cpp index 7d51e01..1279f17 100644 --- a/src/common/request/InsertOrUpdateBucketRequest.cpp +++ b/src/common/request/InsertOrUpdateBucketRequest.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements request class for inserting or updating policy bucket */ -#include +#include +#include #include "InsertOrUpdateBucketRequest.h" namespace Cynara { -void InsertOrUpdateBucketRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void InsertOrUpdateBucketRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/InsertOrUpdateBucketRequest.h b/src/common/request/InsertOrUpdateBucketRequest.h index 1ad1e89..7983c57 100644 --- a/src/common/request/InsertOrUpdateBucketRequest.h +++ b/src/common/request/InsertOrUpdateBucketRequest.h @@ -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. @@ -28,7 +28,6 @@ #include #include -#include namespace Cynara { @@ -53,7 +52,8 @@ public: return m_result; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/ListRequest.cpp b/src/common/request/ListRequest.cpp index 87abea7..01d93c6 100644 --- a/src/common/request/ListRequest.cpp +++ b/src/common/request/ListRequest.cpp @@ -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. @@ -20,16 +20,16 @@ * @brief This file implements policies list request class */ -#include - +#include #include #include "ListRequest.h" namespace Cynara { -void ListRequest::execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void ListRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/ListRequest.h b/src/common/request/ListRequest.h index 2df9506..b77a772 100644 --- a/src/common/request/ListRequest.h +++ b/src/common/request/ListRequest.h @@ -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. @@ -52,7 +52,8 @@ public: return m_filter; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/RemoveBucketRequest.cpp b/src/common/request/RemoveBucketRequest.cpp index dead83d..f15397b 100644 --- a/src/common/request/RemoveBucketRequest.cpp +++ b/src/common/request/RemoveBucketRequest.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements request class for bucket removal */ -#include +#include +#include #include "RemoveBucketRequest.h" namespace Cynara { -void RemoveBucketRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void RemoveBucketRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/RemoveBucketRequest.h b/src/common/request/RemoveBucketRequest.h index 1172a5f..876c302 100644 --- a/src/common/request/RemoveBucketRequest.h +++ b/src/common/request/RemoveBucketRequest.h @@ -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. @@ -27,7 +27,6 @@ #include #include -#include namespace Cynara { @@ -46,7 +45,8 @@ public: return m_bucketId; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/Request.h b/src/common/request/Request.h index e890868..bb311ef 100644 --- a/src/common/request/Request.h +++ b/src/common/request/Request.h @@ -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. @@ -24,7 +24,6 @@ #define SRC_COMMON_REQUEST_REQUEST_H_ #include -#include #include namespace Cynara { @@ -35,8 +34,8 @@ public: } virtual ~Request() {}; - virtual void execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const = 0; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const = 0; ProtocolFrameSequenceNumber sequenceNumber(void) const { return m_sequenceNumber; diff --git a/src/common/request/RequestContext.h b/src/common/request/RequestContext.h index 9c98bef..be70bda 100644 --- a/src/common/request/RequestContext.h +++ b/src/common/request/RequestContext.h @@ -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. @@ -25,6 +25,7 @@ #include +#include #include #include #include @@ -44,10 +45,10 @@ public: : m_responseTaker(responseTaker), m_responseQueue(responseQueue) { } - void returnResponse(RequestContextPtr self, ResponsePtr response) const { + void returnResponse(const RequestContext &self UNUSED, const Response &response) const { ResponseTakerPtr taker = m_responseTaker.lock(); if (taker) - response->execute(response, taker, self); + response.execute(response, *taker, *this); } BinaryQueuePtr responseQueue(void) const { diff --git a/src/common/request/RequestTaker.cpp b/src/common/request/RequestTaker.cpp index 1f238fd..5ae1386 100644 --- a/src/common/request/RequestTaker.cpp +++ b/src/common/request/RequestTaker.cpp @@ -24,69 +24,77 @@ #include #include -#include #include "RequestTaker.h" namespace Cynara { -void RequestTaker::execute(RequestContextPtr context UNUSED, AdminCheckRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const AdminCheckRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, AgentActionRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const AgentActionRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, - AgentRegisterRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const AgentRegisterRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, CancelRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const CancelRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, CheckRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const CheckRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, EraseRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const EraseRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, - DescriptionListRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const DescriptionListRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, - InsertOrUpdateBucketRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const InsertOrUpdateBucketRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, ListRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const ListRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, - RemoveBucketRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const RemoveBucketRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, SetPoliciesRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const SetPoliciesRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, SignalRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const SignalRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::execute(RequestContextPtr context UNUSED, SimpleCheckRequestPtr request UNUSED) { +void RequestTaker::execute(const RequestContext &context UNUSED, + const SimpleCheckRequest &request UNUSED) { throw NotImplementedException(); } -void RequestTaker::contextClosed(RequestContextPtr context UNUSED) { +void RequestTaker::contextClosed(const RequestContext &context UNUSED) { throw NotImplementedException(); } diff --git a/src/common/request/RequestTaker.h b/src/common/request/RequestTaker.h index a38ab28..4c8a986 100644 --- a/src/common/request/RequestTaker.h +++ b/src/common/request/RequestTaker.h @@ -33,21 +33,21 @@ public: RequestTaker() = default; virtual ~RequestTaker() {}; - virtual void execute(RequestContextPtr context, AdminCheckRequestPtr request); - virtual void execute(RequestContextPtr context, AgentActionRequestPtr request); - virtual void execute(RequestContextPtr context, AgentRegisterRequestPtr request); - virtual void execute(RequestContextPtr context, CancelRequestPtr request); - virtual void execute(RequestContextPtr context, CheckRequestPtr request); - virtual void execute(RequestContextPtr context, DescriptionListRequestPtr request); - virtual void execute(RequestContextPtr context, EraseRequestPtr request); - virtual void execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request); - virtual void execute(RequestContextPtr context, ListRequestPtr request); - virtual void execute(RequestContextPtr context, RemoveBucketRequestPtr request); - virtual void execute(RequestContextPtr context, SetPoliciesRequestPtr request); - virtual void execute(RequestContextPtr context, SignalRequestPtr request); - virtual void execute(RequestContextPtr context, SimpleCheckRequestPtr request); - - virtual void contextClosed(RequestContextPtr context); + virtual void execute(const RequestContext &context, const AdminCheckRequest &request); + virtual void execute(const RequestContext &context, const AgentActionRequest &request); + virtual void execute(const RequestContext &context, const AgentRegisterRequest &request); + virtual void execute(const RequestContext &context, const CancelRequest &request); + virtual void execute(const RequestContext &context, const CheckRequest &request); + virtual void execute(const RequestContext &context, const DescriptionListRequest &request); + virtual void execute(const RequestContext &context, const EraseRequest &request); + virtual void execute(const RequestContext &context, const InsertOrUpdateBucketRequest &request); + virtual void execute(const RequestContext &context, const ListRequest &request); + virtual void execute(const RequestContext &context, const RemoveBucketRequest &request); + virtual void execute(const RequestContext &context, const SetPoliciesRequest &request); + virtual void execute(const RequestContext &context, const SignalRequest &request); + virtual void execute(const RequestContext &context, const SimpleCheckRequest &request); + + virtual void contextClosed(const RequestContext &context); }; } // namespace Cynara diff --git a/src/common/request/SetPoliciesRequest.cpp b/src/common/request/SetPoliciesRequest.cpp index 82e10ff..bad86a9 100644 --- a/src/common/request/SetPoliciesRequest.cpp +++ b/src/common/request/SetPoliciesRequest.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements request class for modifying policies */ -#include +#include +#include #include "SetPoliciesRequest.h" namespace Cynara { -void SetPoliciesRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void SetPoliciesRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/SetPoliciesRequest.h b/src/common/request/SetPoliciesRequest.h index eb2362f..e98f6b8 100644 --- a/src/common/request/SetPoliciesRequest.h +++ b/src/common/request/SetPoliciesRequest.h @@ -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. @@ -32,7 +32,6 @@ #include #include -#include namespace Cynara { @@ -59,7 +58,8 @@ public: return m_removePolicies; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/SignalRequest.cpp b/src/common/request/SignalRequest.cpp index c881c5d..4229fae 100644 --- a/src/common/request/SignalRequest.cpp +++ b/src/common/request/SignalRequest.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements signal request class */ -#include +#include +#include #include "SignalRequest.h" namespace Cynara { -void SignalRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void SignalRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/SignalRequest.h b/src/common/request/SignalRequest.h index 97314aa..1be5101 100644 --- a/src/common/request/SignalRequest.h +++ b/src/common/request/SignalRequest.h @@ -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. @@ -40,9 +40,10 @@ public: virtual ~SignalRequest() {}; - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; - uint32_t signalNumber(void) { + uint32_t signalNumber(void) const { return m_sigInfo.ssi_signo; } diff --git a/src/common/request/SimpleCheckRequest.cpp b/src/common/request/SimpleCheckRequest.cpp index ecf8e06..7e03392 100644 --- a/src/common/request/SimpleCheckRequest.cpp +++ b/src/common/request/SimpleCheckRequest.cpp @@ -20,15 +20,16 @@ * @brief This file implements simple check request class */ -#include +#include +#include #include "SimpleCheckRequest.h" namespace Cynara { -void SimpleCheckRequest::execute(RequestPtr self, RequestTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void SimpleCheckRequest::execute(const Request &self UNUSED, RequestTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/request/SimpleCheckRequest.h b/src/common/request/SimpleCheckRequest.h index 2748b0e..9c75ade 100644 --- a/src/common/request/SimpleCheckRequest.h +++ b/src/common/request/SimpleCheckRequest.h @@ -27,8 +27,6 @@ #include #include -#include - namespace Cynara { class SimpleCheckRequest : public Request { @@ -46,7 +44,8 @@ public: return m_key; } - virtual void execute(RequestPtr self, RequestTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Request &self, RequestTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/AdminCheckResponse.cpp b/src/common/response/AdminCheckResponse.cpp index 85ee425..d7fa8ab 100644 --- a/src/common/response/AdminCheckResponse.cpp +++ b/src/common/response/AdminCheckResponse.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements admin check response class */ -#include +#include +#include #include "AdminCheckResponse.h" namespace Cynara { -void AdminCheckResponse::execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void AdminCheckResponse::execute(const Response &self UNUSED, ResponseTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/response/AdminCheckResponse.h b/src/common/response/AdminCheckResponse.h index d553fd9..fd9fd4e 100644 --- a/src/common/response/AdminCheckResponse.h +++ b/src/common/response/AdminCheckResponse.h @@ -42,8 +42,8 @@ public: virtual ~AdminCheckResponse() {} - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const; const PolicyResult &result(void) const { return m_result; diff --git a/src/common/response/AgentActionResponse.cpp b/src/common/response/AgentActionResponse.cpp index 4a8bcc8..e0bc260 100644 --- a/src/common/response/AgentActionResponse.cpp +++ b/src/common/response/AgentActionResponse.cpp @@ -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. @@ -20,17 +20,16 @@ * @brief This file implements common class for sending a request to agent */ -#include - +#include #include #include "AgentActionResponse.h" namespace Cynara { -void AgentActionResponse::execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void AgentActionResponse::execute(const Response &self UNUSED, ResponseTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/response/AgentActionResponse.h b/src/common/response/AgentActionResponse.h index f99c043..7403e1d 100644 --- a/src/common/response/AgentActionResponse.h +++ b/src/common/response/AgentActionResponse.h @@ -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. @@ -39,7 +39,8 @@ public: ~AgentActionResponse() {} - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const; const RawBuffer &data(void) const { return m_data; diff --git a/src/common/response/AgentRegisterResponse.cpp b/src/common/response/AgentRegisterResponse.cpp index fe15bd3..8855731 100644 --- a/src/common/response/AgentRegisterResponse.cpp +++ b/src/common/response/AgentRegisterResponse.cpp @@ -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. @@ -20,17 +20,16 @@ * @brief This file implements class for responding to agent register request */ -#include - -#include +#include +#include #include "AgentRegisterResponse.h" namespace Cynara { -void AgentRegisterResponse::execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void AgentRegisterResponse::execute(const Response &self UNUSED, ResponseTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/response/AgentRegisterResponse.h b/src/common/response/AgentRegisterResponse.h index 0b8f678..71f1563 100644 --- a/src/common/response/AgentRegisterResponse.h +++ b/src/common/response/AgentRegisterResponse.h @@ -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. @@ -45,7 +45,8 @@ public: virtual ~AgentRegisterResponse() {}; - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/CancelResponse.cpp b/src/common/response/CancelResponse.cpp index 69211e7..7b61f9f 100644 --- a/src/common/response/CancelResponse.cpp +++ b/src/common/response/CancelResponse.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements cancel response class */ -#include +#include +#include #include "CancelResponse.h" namespace Cynara { -void CancelResponse::execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void CancelResponse::execute(const Response &self UNUSED, ResponseTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/response/CancelResponse.h b/src/common/response/CancelResponse.h index 657ab2c..61d3c3d 100644 --- a/src/common/response/CancelResponse.h +++ b/src/common/response/CancelResponse.h @@ -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. @@ -36,7 +36,8 @@ public: virtual ~CancelResponse() {}; - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/CheckResponse.cpp b/src/common/response/CheckResponse.cpp index 96f20ff..3ac43ae 100644 --- a/src/common/response/CheckResponse.cpp +++ b/src/common/response/CheckResponse.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements check response class */ -#include +#include +#include #include "CheckResponse.h" namespace Cynara { -void CheckResponse::execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void CheckResponse::execute(const Response &self UNUSED, ResponseTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/response/CheckResponse.h b/src/common/response/CheckResponse.h index 9f6f9e0..b3ad83e 100644 --- a/src/common/response/CheckResponse.h +++ b/src/common/response/CheckResponse.h @@ -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. @@ -41,8 +41,8 @@ public: virtual ~CheckResponse() {}; - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/CodeResponse.cpp b/src/common/response/CodeResponse.cpp index bec8e96..c9ebe40 100644 --- a/src/common/response/CodeResponse.cpp +++ b/src/common/response/CodeResponse.cpp @@ -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. @@ -20,15 +20,16 @@ * @brief This file implements class for responding to a request with a code */ -#include +#include +#include #include "CodeResponse.h" namespace Cynara { -void CodeResponse::execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void CodeResponse::execute(const Response &self UNUSED, ResponseTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/response/CodeResponse.h b/src/common/response/CodeResponse.h index 78b21c1..fa346e0 100644 --- a/src/common/response/CodeResponse.h +++ b/src/common/response/CodeResponse.h @@ -49,8 +49,8 @@ public: virtual ~CodeResponse() {}; - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/DescriptionListResponse.cpp b/src/common/response/DescriptionListResponse.cpp index 481913a..129ba5c 100644 --- a/src/common/response/DescriptionListResponse.cpp +++ b/src/common/response/DescriptionListResponse.cpp @@ -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. @@ -20,17 +20,16 @@ * @brief This file implements plugins description list response class */ -#include - +#include #include #include "DescriptionListResponse.h" namespace Cynara { -void DescriptionListResponse::execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void DescriptionListResponse::execute(const Response &self UNUSED, ResponseTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/response/DescriptionListResponse.h b/src/common/response/DescriptionListResponse.h index 310ee63..4c55c8c 100644 --- a/src/common/response/DescriptionListResponse.h +++ b/src/common/response/DescriptionListResponse.h @@ -42,7 +42,8 @@ public: virtual ~DescriptionListResponse() {}; - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const; bool isDbCorrupted(void) const { return m_dbCorrupted; diff --git a/src/common/response/ListResponse.cpp b/src/common/response/ListResponse.cpp index 8931ee1..e14dff3 100644 --- a/src/common/response/ListResponse.cpp +++ b/src/common/response/ListResponse.cpp @@ -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. @@ -20,16 +20,16 @@ * @brief This file implements policies list response class */ -#include +#include +#include #include "ListResponse.h" -#include "ResponseTaker.h" namespace Cynara { -void ListResponse::execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void ListResponse::execute(const Response &self UNUSED, ResponseTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/response/ListResponse.h b/src/common/response/ListResponse.h index 2a67225..2ce0f55 100644 --- a/src/common/response/ListResponse.h +++ b/src/common/response/ListResponse.h @@ -44,7 +44,8 @@ public: virtual ~ListResponse() {}; - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, RequestContextPtr context) const; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const; bool isBucketValid(void) const { return m_bucketValid; diff --git a/src/common/response/Response.h b/src/common/response/Response.h index 406bd76..d5fc114 100644 --- a/src/common/response/Response.h +++ b/src/common/response/Response.h @@ -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. @@ -24,7 +24,6 @@ #define SRC_COMMON_RESPONSE_RESPONSE_H_ #include -#include #include namespace Cynara { @@ -35,8 +34,8 @@ public: }; virtual ~Response() {}; - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const = 0; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const = 0; ProtocolFrameSequenceNumber sequenceNumber(void) const { return m_sequenceNumber; diff --git a/src/common/response/ResponseTaker.cpp b/src/common/response/ResponseTaker.cpp index 410f8c9..3b34b11 100644 --- a/src/common/response/ResponseTaker.cpp +++ b/src/common/response/ResponseTaker.cpp @@ -29,44 +29,48 @@ namespace Cynara { -void ResponseTaker::execute(RequestContextPtr context UNUSED, - AdminCheckResponsePtr response UNUSED) { +void ResponseTaker::execute(const RequestContext &context UNUSED, + const AdminCheckResponse &response UNUSED) { throw NotImplementedException(); } -void ResponseTaker::execute(RequestContextPtr context UNUSED, - AgentActionResponsePtr response UNUSED) { +void ResponseTaker::execute(const RequestContext &context UNUSED, + const AgentActionResponse &response UNUSED) { throw NotImplementedException(); } -void ResponseTaker::execute(RequestContextPtr context UNUSED, - AgentRegisterResponsePtr response UNUSED) { +void ResponseTaker::execute(const RequestContext &context UNUSED, + const AgentRegisterResponse &response UNUSED) { throw NotImplementedException(); } -void ResponseTaker::execute(RequestContextPtr context UNUSED, CancelResponsePtr response UNUSED) { +void ResponseTaker::execute(const RequestContext &context UNUSED, + const CancelResponse &response UNUSED) { throw NotImplementedException(); } -void ResponseTaker::execute(RequestContextPtr context UNUSED, CheckResponsePtr response UNUSED) { +void ResponseTaker::execute(const RequestContext &context UNUSED, + const CheckResponse &response UNUSED) { throw NotImplementedException(); } -void ResponseTaker::execute(RequestContextPtr context UNUSED, CodeResponsePtr response UNUSED) { +void ResponseTaker::execute(const RequestContext &context UNUSED, + const CodeResponse &response UNUSED) { throw NotImplementedException(); } -void ResponseTaker::execute(RequestContextPtr context UNUSED, - DescriptionListResponsePtr response UNUSED) { +void ResponseTaker::execute(const RequestContext &context UNUSED, + const DescriptionListResponse &response UNUSED) { throw NotImplementedException(); } -void ResponseTaker::execute(RequestContextPtr context UNUSED, ListResponsePtr response UNUSED) { +void ResponseTaker::execute(const RequestContext &context UNUSED, + const ListResponse &response UNUSED) { throw NotImplementedException(); } -void ResponseTaker::execute(RequestContextPtr context UNUSED, - SimpleCheckResponsePtr response UNUSED) { +void ResponseTaker::execute(const RequestContext &context UNUSED, + const SimpleCheckResponse &response UNUSED) { throw NotImplementedException(); } diff --git a/src/common/response/ResponseTaker.h b/src/common/response/ResponseTaker.h index 31b7714..42ccdaf 100644 --- a/src/common/response/ResponseTaker.h +++ b/src/common/response/ResponseTaker.h @@ -34,15 +34,15 @@ public: ResponseTaker() = default; virtual ~ResponseTaker() {}; - virtual void execute(RequestContextPtr context, AdminCheckResponsePtr response); - virtual void execute(RequestContextPtr context, AgentActionResponsePtr response); - virtual void execute(RequestContextPtr context, AgentRegisterResponsePtr response); - virtual void execute(RequestContextPtr context, CancelResponsePtr response); - virtual void execute(RequestContextPtr context, CheckResponsePtr response); - virtual void execute(RequestContextPtr context, CodeResponsePtr response); - virtual void execute(RequestContextPtr context, DescriptionListResponsePtr response); - virtual void execute(RequestContextPtr context, ListResponsePtr response); - virtual void execute(RequestContextPtr context, SimpleCheckResponsePtr response); + virtual void execute(const RequestContext &context, const AdminCheckResponse &response); + virtual void execute(const RequestContext &context, const AgentActionResponse &response); + virtual void execute(const RequestContext &context, const AgentRegisterResponse &response); + virtual void execute(const RequestContext &context, const CancelResponse &response); + virtual void execute(const RequestContext &context, const CheckResponse &response); + virtual void execute(const RequestContext &context, const CodeResponse &response); + virtual void execute(const RequestContext &context, const DescriptionListResponse &response); + virtual void execute(const RequestContext &context, const ListResponse &response); + virtual void execute(const RequestContext &context, const SimpleCheckResponse &response); }; } // namespace Cynara diff --git a/src/common/response/SimpleCheckResponse.cpp b/src/common/response/SimpleCheckResponse.cpp index 52976fa..1e256d9 100644 --- a/src/common/response/SimpleCheckResponse.cpp +++ b/src/common/response/SimpleCheckResponse.cpp @@ -20,15 +20,16 @@ * @brief This file implements simple check response class */ -#include +#include +#include #include "SimpleCheckResponse.h" namespace Cynara { -void SimpleCheckResponse::execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const { - taker->execute(context, std::dynamic_pointer_cast(self)); +void SimpleCheckResponse::execute(const Response &self UNUSED, ResponseTaker &taker, + const RequestContext &context) const { + taker.execute(context, *this); } } // namespace Cynara diff --git a/src/common/response/SimpleCheckResponse.h b/src/common/response/SimpleCheckResponse.h index 8fe28e6..49888fb 100644 --- a/src/common/response/SimpleCheckResponse.h +++ b/src/common/response/SimpleCheckResponse.h @@ -51,8 +51,8 @@ public: } virtual ~SimpleCheckResponse() {} - virtual void execute(ResponsePtr self, ResponseTakerPtr taker, - RequestContextPtr context) const; + virtual void execute(const Response &self, ResponseTaker &taker, + const RequestContext &context) const; private: const PolicyResult m_resultRef; const int32_t m_retValue; diff --git a/src/common/sockets/SocketClient.cpp b/src/common/sockets/SocketClient.cpp index b3ce8ad..81698a2 100644 --- a/src/common/sockets/SocketClient.cpp +++ b/src/common/sockets/SocketClient.cpp @@ -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. @@ -62,8 +62,8 @@ bool SocketClient::isConnected(void) { ResponsePtr SocketClient::askCynaraServer(RequestPtr request) { //pass request to protocol - RequestContextPtr context = std::make_shared(ResponseTakerPtr(), m_writeQueue); - request->execute(request, m_protocol, context); + RequestContext context(ResponseTakerPtr(), m_writeQueue); + request->execute(*request, *m_protocol, context); //send request to cynara if (m_socket.sendToServer(*m_writeQueue) == Socket::SendStatus::CONNECTION_LOST) { diff --git a/src/service/agent/AgentTalker.cpp b/src/service/agent/AgentTalker.cpp index 45f8a50..afcb2ec 100644 --- a/src/service/agent/AgentTalker.cpp +++ b/src/service/agent/AgentTalker.cpp @@ -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. @@ -34,9 +34,8 @@ namespace Cynara { void AgentTalker::sendMessage(const AgentResponseType type, const RawBuffer &data) { ResponseTakerPtr responseTaker = std::make_shared(); - auto context = std::make_shared(responseTaker, m_linkId); - context->returnResponse(context, - std::make_shared(type, data, m_checkId)); + RequestContext context(responseTaker, m_linkId); + context.returnResponse(context, AgentActionResponse(type, data, m_checkId)); } void AgentTalker::send(const PluginData &agentData) { diff --git a/src/service/logic/Logic.cpp b/src/service/logic/Logic.cpp index 44fcd97..ae04539 100644 --- a/src/service/logic/Logic.cpp +++ b/src/service/logic/Logic.cpp @@ -84,10 +84,10 @@ Logic::Logic() : m_dbCorrupted(false) { Logic::~Logic() { } -void Logic::execute(RequestContextPtr context UNUSED, SignalRequestPtr request) { - LOGD("Processing signal: [%d]", request->signalNumber()); +void Logic::execute(const RequestContext &context UNUSED, const SignalRequest &request) { + LOGD("Processing signal: [%d]", request.signalNumber()); - switch (request->signalNumber()) { + switch (request.signalNumber()) { case SIGTERM: LOGI("SIGTERM received!"); m_socketManager->mainLoopStop(); @@ -95,7 +95,7 @@ void Logic::execute(RequestContextPtr context UNUSED, SignalRequestPtr request) } } -void Logic::execute(RequestContextPtr context, AdminCheckRequestPtr request) { +void Logic::execute(const RequestContext &context, const AdminCheckRequest &request) { PolicyResult result; bool bucketValid = true; @@ -103,23 +103,23 @@ void Logic::execute(RequestContextPtr context, AdminCheckRequestPtr request) { bucketValid = false; } else { try { - result = m_storage->checkPolicy(request->key(), request->startBucket(), - request->recursive()); + result = m_storage->checkPolicy(request.key(), request.startBucket(), + request.recursive()); } catch (const BucketNotExistsException &ex) { bucketValid = false; } } - context->returnResponse(context, std::make_shared(result, bucketValid, - m_dbCorrupted, request->sequenceNumber())); + context.returnResponse(context, AdminCheckResponse(result, bucketValid, m_dbCorrupted, + request.sequenceNumber())); } -void Logic::execute(RequestContextPtr context, AgentActionRequestPtr request) { - AgentTalkerPtr talkerPtr = m_agentManager->getTalker(context->responseQueue(), - request->sequenceNumber()); +void Logic::execute(const RequestContext &context, const AgentActionRequest &request) { + AgentTalkerPtr talkerPtr = m_agentManager->getTalker(context.responseQueue(), + request.sequenceNumber()); if (!talkerPtr) { LOGD("Received response from agent with invalid request id: [%" PRIu16 "]", - request->sequenceNumber()); + request.sequenceNumber()); return; } @@ -131,15 +131,15 @@ void Logic::execute(RequestContextPtr context, AgentActionRequestPtr request) { } if (!checkContextPtr->cancelled()) { - PluginData data(request->data().begin(), request->data().end()); - if (request->type() == CYNARA_MSG_TYPE_CANCEL) { + PluginData data(request.data().begin(), request.data().end()); + if (request.type() == CYNARA_MSG_TYPE_CANCEL) { // Nothing to do for now - } else if (request->type() == CYNARA_MSG_TYPE_ACTION) { + } else if (request.type() == CYNARA_MSG_TYPE_ACTION) { update(checkContextPtr->m_key, checkContextPtr->m_checkId, data, checkContextPtr->m_requestContext, checkContextPtr->m_plugin); } else { LOGE("Invalid response type [%d] in response from agent <%s>", - static_cast(request->type()), talkerPtr->agentType().c_str()); + static_cast(request.type()), talkerPtr->agentType().c_str()); // TODO: disconnect agent } } @@ -148,18 +148,17 @@ void Logic::execute(RequestContextPtr context, AgentActionRequestPtr request) { m_checkRequestManager.removeRequest(checkContextPtr); } -void Logic::execute(RequestContextPtr context, AgentRegisterRequestPtr request) { - auto result = m_agentManager->registerAgent(request->agentType(), context->responseQueue()); - context->returnResponse(context, std::make_shared( - result, request->sequenceNumber())); +void Logic::execute(const RequestContext &context, const AgentRegisterRequest &request) { + auto result = m_agentManager->registerAgent(request.agentType(), context.responseQueue()); + context.returnResponse(context, AgentRegisterResponse(result, request.sequenceNumber())); } -void Logic::execute(RequestContextPtr context, CancelRequestPtr request) { - CheckContextPtr checkContextPtr = m_checkRequestManager.getContext(context->responseQueue(), - request->sequenceNumber()); +void Logic::execute(const RequestContext &context, const CancelRequest &request) { + CheckContextPtr checkContextPtr = m_checkRequestManager.getContext(context.responseQueue(), + request.sequenceNumber()); if (!checkContextPtr) { LOGD("Cancel request id: [%" PRIu16 "] with no matching request in progress.", - request->sequenceNumber()); + request.sequenceNumber()); return; } @@ -169,23 +168,22 @@ void Logic::execute(RequestContextPtr context, CancelRequestPtr request) { checkContextPtr->cancel(); checkContextPtr->m_agentTalker->cancel(); - LOGD("Returning response for cancel request id: [%" PRIu16 "].", request->sequenceNumber()); - context->returnResponse(context, std::make_shared(request->sequenceNumber())); + LOGD("Returning response for cancel request id: [%" PRIu16 "].", request.sequenceNumber()); + context.returnResponse(context, CancelResponse(request.sequenceNumber())); } -void Logic::execute(RequestContextPtr context, CheckRequestPtr request) { +void Logic::execute(const RequestContext &context, const CheckRequest &request) { PolicyResult result(PredefinedPolicyType::DENY); - if (check(context, request->key(), request->sequenceNumber(), result)) { - m_auditLog.log(request->key(), result); - context->returnResponse(context, std::make_shared(result, - request->sequenceNumber())); + if (check(context, request.key(), request.sequenceNumber(), result)) { + m_auditLog.log(request.key(), result); + context.returnResponse(context, CheckResponse(result, request.sequenceNumber())); } } -bool Logic::check(const RequestContextPtr &context, const PolicyKey &key, +bool Logic::check(const RequestContext &context, const PolicyKey &key, ProtocolFrameSequenceNumber checkId, PolicyResult &result) { - if (m_checkRequestManager.getContext(context->responseQueue(), checkId)) { + if (m_checkRequestManager.getContext(context.responseQueue(), checkId)) { LOGE("Check request for checkId: [%" PRIu16 "] is already processing", checkId); return false; } @@ -204,7 +202,7 @@ bool Logic::check(const RequestContextPtr &context, const PolicyKey &key, return pluginCheck(context, key, checkId, result); } -bool Logic::pluginCheck(const RequestContextPtr &context, const PolicyKey &key, +bool Logic::pluginCheck(const RequestContext &context, const PolicyKey &key, ProtocolFrameSequenceNumber checkId, PolicyResult &result) { LOGD("Trying to check policy: <%s> in plugin.", key.toString().c_str()); @@ -258,7 +256,7 @@ bool Logic::pluginCheck(const RequestContextPtr &context, const PolicyKey &key, } bool Logic::update(const PolicyKey &key, ProtocolFrameSequenceNumber checkId, - const PluginData &agentData, const RequestContextPtr &context, + const PluginData &agentData, const RequestContext &context, const ServicePluginInterfacePtr &plugin) { LOGD("Check update: <%s>:[%" PRIu16 "]", key.toString().c_str(), checkId); @@ -279,31 +277,31 @@ bool Logic::update(const PolicyKey &key, ProtocolFrameSequenceNumber checkId, throw PluginErrorException(key); } - if (answerReady && context->responseQueue()) { + if (answerReady && context.responseQueue()) { m_auditLog.log(key, result); - context->returnResponse(context, std::make_shared(result, checkId)); + context.returnResponse(context, CheckResponse(result, checkId)); return true; } return false; } -void Logic::execute(RequestContextPtr context, DescriptionListRequestPtr request) { +void Logic::execute(const RequestContext &context, const DescriptionListRequest &request) { auto descriptions = m_pluginManager->getPolicyDescriptions(); descriptions.insert(descriptions.begin(), predefinedPolicyDescr.begin(), predefinedPolicyDescr.end()); - context->returnResponse(context, std::make_shared(descriptions, - m_dbCorrupted, request->sequenceNumber())); + context.returnResponse(context, DescriptionListResponse(descriptions, m_dbCorrupted, + request.sequenceNumber())); } -void Logic::execute(RequestContextPtr context, EraseRequestPtr request) { +void Logic::execute(const RequestContext &context, const EraseRequest &request) { auto code = CodeResponse::Code::OK; if (m_dbCorrupted) { code = CodeResponse::Code::DB_CORRUPTED; } else { try { - m_storage->erasePolicies(request->startBucket(), request->recursive(), request->filter()); + m_storage->erasePolicies(request.startBucket(), request.recursive(), request.filter()); onPoliciesChanged(); } catch (const DatabaseException &ex) { code = CodeResponse::Code::FAILED; @@ -312,19 +310,18 @@ void Logic::execute(RequestContextPtr context, EraseRequestPtr request) { } } - context->returnResponse(context, std::make_shared(code, - request->sequenceNumber())); + context.returnResponse(context, CodeResponse(code, request.sequenceNumber())); } -void Logic::execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request) { +void Logic::execute(const RequestContext &context, const InsertOrUpdateBucketRequest &request) { auto code = CodeResponse::Code::OK; if (m_dbCorrupted) { code = CodeResponse::Code::DB_CORRUPTED; } else { try { - checkSinglePolicyType(request->result().policyType(), true, true); - m_storage->addOrUpdateBucket(request->bucketId(), request->result()); + checkSinglePolicyType(request.result().policyType(), true, true); + m_storage->addOrUpdateBucket(request.bucketId(), request.result()); onPoliciesChanged(); } catch (const DatabaseException &ex) { code = CodeResponse::Code::FAILED; @@ -337,11 +334,10 @@ void Logic::execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr re } } - context->returnResponse(context, std::make_shared(code, - request->sequenceNumber())); + context.returnResponse(context, CodeResponse(code, request.sequenceNumber())); } -void Logic::execute(RequestContextPtr context, ListRequestPtr request) { +void Logic::execute(const RequestContext &context, const ListRequest &request) { bool bucketValid = true; std::vector policies; @@ -349,24 +345,24 @@ void Logic::execute(RequestContextPtr context, ListRequestPtr request) { bucketValid = false; } else { try { - policies = m_storage->listPolicies(request->bucket(), request->filter()); + policies = m_storage->listPolicies(request.bucket(), request.filter()); } catch (const BucketNotExistsException &ex) { bucketValid = false; } } - context->returnResponse(context, std::make_shared(policies, bucketValid, - m_dbCorrupted, request->sequenceNumber())); + context.returnResponse(context, ListResponse(policies, bucketValid, m_dbCorrupted, + request.sequenceNumber())); } -void Logic::execute(RequestContextPtr context, RemoveBucketRequestPtr request) { +void Logic::execute(const RequestContext &context, const RemoveBucketRequest &request) { auto code = CodeResponse::Code::OK; if (m_dbCorrupted) { code = CodeResponse::Code::DB_CORRUPTED; } else { try { - m_storage->deleteBucket(request->bucketId()); + m_storage->deleteBucket(request.bucketId()); onPoliciesChanged(); } catch (const DatabaseException &ex) { code = CodeResponse::Code::FAILED; @@ -376,21 +372,19 @@ void Logic::execute(RequestContextPtr context, RemoveBucketRequestPtr request) { code = CodeResponse::Code::NOT_ALLOWED; } } - - context->returnResponse(context, std::make_shared(code, - request->sequenceNumber())); + context.returnResponse(context, CodeResponse(code, request.sequenceNumber())); } -void Logic::execute(RequestContextPtr context, SetPoliciesRequestPtr request) { +void Logic::execute(const RequestContext &context, const SetPoliciesRequest &request) { auto code = CodeResponse::Code::OK; if (m_dbCorrupted) { code = CodeResponse::Code::DB_CORRUPTED; } else { try { - checkPoliciesTypes(request->policiesToBeInsertedOrUpdated(), true, false); - m_storage->insertPolicies(request->policiesToBeInsertedOrUpdated()); - m_storage->deletePolicies(request->policiesToBeRemoved()); + checkPoliciesTypes(request.policiesToBeInsertedOrUpdated(), true, false); + m_storage->insertPolicies(request.policiesToBeInsertedOrUpdated()); + m_storage->deletePolicies(request.policiesToBeRemoved()); onPoliciesChanged(); } catch (const DatabaseException &ex) { code = CodeResponse::Code::FAILED; @@ -401,14 +395,13 @@ void Logic::execute(RequestContextPtr context, SetPoliciesRequestPtr request) { } } - context->returnResponse(context, std::make_shared(code, - request->sequenceNumber())); + context.returnResponse(context, CodeResponse(code, request.sequenceNumber())); } -void Logic::execute(RequestContextPtr context, SimpleCheckRequestPtr request) { +void Logic::execute(const RequestContext &context, const SimpleCheckRequest &request) { int retValue = CYNARA_API_SUCCESS; PolicyResult result; - PolicyKey key = request->key(); + PolicyKey key = request.key(); result = m_storage->checkPolicy(key); switch (result.policyType()) { @@ -455,9 +448,9 @@ void Logic::execute(RequestContextPtr context, SimpleCheckRequestPtr request) { } } } - m_auditLog.log(request->key(), result); - context->returnResponse(context, std::make_shared(retValue, result, - request->sequenceNumber())); + m_auditLog.log(request.key(), result); + context.returnResponse(context, SimpleCheckResponse(retValue, result, + request.sequenceNumber())); } void Logic::checkPoliciesTypes(const std::map> &policies, @@ -481,10 +474,10 @@ void Logic::checkSinglePolicyType(const PolicyType &policyType, bool allowBucket m_pluginManager->checkPolicyType(policyType); } -void Logic::contextClosed(RequestContextPtr context) { +void Logic::contextClosed(const RequestContext &context) { LOGD("context closed"); - LinkId linkId = context->responseQueue(); + LinkId linkId = context.responseQueue(); m_agentManager->cleanupAgent(linkId, [&](const AgentTalkerPtr &talker) -> void { handleAgentTalkerDisconnection(talker); }); @@ -508,11 +501,12 @@ void Logic::handleAgentTalkerDisconnection(const AgentTalkerPtr &agentTalkerPtr) return; } - if (!checkContextPtr->cancelled() && checkContextPtr->m_requestContext->responseQueue()) { + RequestContext &context = checkContextPtr->m_requestContext; + if (!checkContextPtr->cancelled() && context.responseQueue()) { PolicyResult result(PredefinedPolicyType::DENY); m_auditLog.log(checkContextPtr->m_key, result); - checkContextPtr->m_requestContext->returnResponse(checkContextPtr->m_requestContext, - std::make_shared(result, checkContextPtr->m_checkId)); + context.returnResponse(checkContextPtr->m_requestContext, + CheckResponse(result, checkContextPtr->m_checkId)); } m_checkRequestManager.removeRequest(checkContextPtr); diff --git a/src/service/logic/Logic.h b/src/service/logic/Logic.h index 4f95d30..e59528e 100644 --- a/src/service/logic/Logic.h +++ b/src/service/logic/Logic.h @@ -73,21 +73,21 @@ public: m_socketManager.reset(); } - virtual void execute(RequestContextPtr context, AdminCheckRequestPtr request); - virtual void execute(RequestContextPtr context, AgentActionRequestPtr request); - virtual void execute(RequestContextPtr context, AgentRegisterRequestPtr request); - virtual void execute(RequestContextPtr context, CancelRequestPtr request); - virtual void execute(RequestContextPtr context, CheckRequestPtr request); - virtual void execute(RequestContextPtr context, DescriptionListRequestPtr request); - virtual void execute(RequestContextPtr context, EraseRequestPtr request); - virtual void execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request); - virtual void execute(RequestContextPtr context, ListRequestPtr request); - virtual void execute(RequestContextPtr context, RemoveBucketRequestPtr request); - virtual void execute(RequestContextPtr context, SetPoliciesRequestPtr request); - virtual void execute(RequestContextPtr context, SignalRequestPtr request); - virtual void execute(RequestContextPtr context, SimpleCheckRequestPtr request); - - virtual void contextClosed(RequestContextPtr context); + virtual void execute(const RequestContext &context, const AdminCheckRequest &request); + virtual void execute(const RequestContext &context, const AgentActionRequest &request); + virtual void execute(const RequestContext &context, const AgentRegisterRequest &request); + virtual void execute(const RequestContext &context, const CancelRequest &request); + virtual void execute(const RequestContext &context, const CheckRequest &request); + virtual void execute(const RequestContext &context, const DescriptionListRequest &request); + virtual void execute(const RequestContext &context, const EraseRequest &request); + virtual void execute(const RequestContext &context, const InsertOrUpdateBucketRequest &request); + virtual void execute(const RequestContext &context, const ListRequest &request); + virtual void execute(const RequestContext &context, const RemoveBucketRequest &request); + virtual void execute(const RequestContext &context, const SetPoliciesRequest &request); + virtual void execute(const RequestContext &context, const SignalRequest &request); + virtual void execute(const RequestContext &context, const SimpleCheckRequest &request); + + virtual void contextClosed(const RequestContext &context); virtual void loadDb(void); private: @@ -99,12 +99,12 @@ private: AuditLog m_auditLog; bool m_dbCorrupted; - bool check(const RequestContextPtr &context, const PolicyKey &key, + bool check(const RequestContext &context, const PolicyKey &key, ProtocolFrameSequenceNumber checkId, PolicyResult &result); - bool pluginCheck(const RequestContextPtr &context, const PolicyKey &key, + bool pluginCheck(const RequestContext &context, const PolicyKey &key, ProtocolFrameSequenceNumber checkId, PolicyResult &result); bool update(const PolicyKey &key, ProtocolFrameSequenceNumber checkId, - const PluginData &agentData, const RequestContextPtr &request, + const PluginData &agentData, const RequestContext &request, const ServicePluginInterfacePtr &plugin); void checkPoliciesTypes(const std::map> &policies, diff --git a/src/service/request/CheckContext.h b/src/service/request/CheckContext.h index 5184296..5f4d095 100644 --- a/src/service/request/CheckContext.h +++ b/src/service/request/CheckContext.h @@ -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. @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -38,7 +39,7 @@ namespace Cynara { class CheckContext { public: - CheckContext(const PolicyKey &key, RequestContextPtr requestContext, + CheckContext(const PolicyKey &key, const RequestContext &requestContext, ProtocolFrameSequenceNumber checkId, ServicePluginInterfacePtr plugin, const AgentTalkerPtr &agentTalkerPtr) : m_agentTalker(agentTalkerPtr), m_checkId(checkId), m_key(key), m_plugin(plugin), @@ -49,7 +50,7 @@ public: const ProtocolFrameSequenceNumber m_checkId; const PolicyKey m_key; ServicePluginInterfacePtr m_plugin; - RequestContextPtr m_requestContext; + RequestContext m_requestContext; bool m_cancelled; void cancel(void) { diff --git a/src/service/request/CheckRequestManager.cpp b/src/service/request/CheckRequestManager.cpp index 06ae4ea..896540e 100644 --- a/src/service/request/CheckRequestManager.cpp +++ b/src/service/request/CheckRequestManager.cpp @@ -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,14 +31,14 @@ namespace Cynara { CheckContextPtr CheckRequestManager::createContext(const PolicyKey &key, - const RequestContextPtr &request, + const RequestContext &request, ProtocolFrameSequenceNumber checkId, const ServicePluginInterfacePtr &plugin, const AgentTalkerPtr &agentTalkerPtr) { CheckContextPtr checkPtr = std::make_shared(key, request, checkId, plugin, agentTalkerPtr); - if (m_checks[request->responseQueue()].insert(std::make_pair(checkId, checkPtr)).second) { + if (m_checks[request.responseQueue()].insert(std::make_pair(checkId, checkPtr)).second) { return checkPtr; } @@ -68,7 +68,7 @@ CheckContextPtr CheckRequestManager::getContext(const AgentTalkerPtr &talker) { } void CheckRequestManager::removeRequest(const CheckContextPtr &checkContextPtr) { - auto it = m_checks.find(checkContextPtr->m_requestContext->responseQueue()); + auto it = m_checks.find(checkContextPtr->m_requestContext.responseQueue()); if (it != m_checks.end()) { it->second.erase(checkContextPtr->m_checkId); if (it->second.empty()) { diff --git a/src/service/request/CheckRequestManager.h b/src/service/request/CheckRequestManager.h index f71f8f1..f77113f 100644 --- a/src/service/request/CheckRequestManager.h +++ b/src/service/request/CheckRequestManager.h @@ -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. @@ -42,7 +42,7 @@ public: CheckRequestManager() {} ~CheckRequestManager() {} - CheckContextPtr createContext(const PolicyKey &key, const RequestContextPtr &request, + CheckContextPtr createContext(const PolicyKey &key, const RequestContext &request, ProtocolFrameSequenceNumber checkId, const ServicePluginInterfacePtr &plugin, const AgentTalkerPtr &agentTalkerPtr); diff --git a/src/service/sockets/SocketManager.cpp b/src/service/sockets/SocketManager.cpp index b7329b0..c7866c0 100644 --- a/src/service/sockets/SocketManager.cpp +++ b/src/service/sockets/SocketManager.cpp @@ -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. @@ -218,8 +218,7 @@ void SocketManager::readyForAccept(int fd) { void SocketManager::closeSocket(int fd) { LOGD("SocketManger closeSocket fd [%d] start", fd); Descriptor &desc = m_fds[fd]; - requestTaker()->contextClosed(std::make_shared(nullptr, - desc.writeQueue())); + requestTaker()->contextClosed(RequestContext(nullptr, desc.writeQueue())); removeReadSocket(fd); removeWriteSocket(fd); desc.clear(); @@ -241,10 +240,9 @@ bool SocketManager::handleRead(int fd, const RawBuffer &readbuffer) { LOGD("request extracted"); //build context - auto context = std::make_shared(desc.responseTaker(), - desc.writeQueue()); + RequestContext context(desc.responseTaker(), desc.writeQueue()); //pass request to request taker - req->execute(req, requestTaker(), context); + req->execute(*req, *requestTaker(), context); } } catch (const Exception &ex) { LOGE("Error handling request <%s>. Closing socket", ex.what()); diff --git a/test/common/protocols/RequestTestHelper.h b/test/common/protocols/RequestTestHelper.h index 9274a46..7788fc4 100644 --- a/test/common/protocols/RequestTestHelper.h +++ b/test/common/protocols/RequestTestHelper.h @@ -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. @@ -42,9 +42,9 @@ namespace RequestTestHelper { template void testRequest(std::shared_ptr request, Cynara::ProtocolPtr protocol) { auto queue = std::make_shared(); - auto context = std::make_shared(Cynara::ResponseTakerPtr(), queue); + Cynara::RequestContext context(Cynara::ResponseTakerPtr(), queue); - request->execute(request, protocol, context); + request->execute(*request, *protocol, context); auto extractedRequest = protocol->extractRequestFromBuffer(queue); ASSERT_TRUE(bool(extractedRequest)); @@ -55,9 +55,9 @@ void testRequest(std::shared_ptr request, Cynara::ProtocolPtr protocol) { void binaryTestRequest(Cynara::RequestPtr request, Cynara::ProtocolPtr protocol) { auto queue = std::make_shared(); - auto context = std::make_shared(Cynara::ResponseTakerPtr(), queue); + Cynara::RequestContext context(Cynara::ResponseTakerPtr(), queue); - request->execute(request, protocol, context); + request->execute(*request, *protocol, context); Cynara::RawBuffer data(queue->size()); queue->flatten(data.data(), queue->size()); @@ -65,7 +65,7 @@ void binaryTestRequest(Cynara::RequestPtr request, Cynara::ProtocolPtr protocol) ASSERT_TRUE(bool(extractedRequest)); ASSERT_EQ(queue->size(), 0); - extractedRequest->execute(extractedRequest, protocol, context); + extractedRequest->execute(*extractedRequest, *protocol, context); Cynara::RawBuffer data2(queue->size()); queue->flatten(data2.data(), queue->size()); diff --git a/test/common/protocols/ResponseTestHelper.h b/test/common/protocols/ResponseTestHelper.h index 63e658b..aa80ee3 100644 --- a/test/common/protocols/ResponseTestHelper.h +++ b/test/common/protocols/ResponseTestHelper.h @@ -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. @@ -42,9 +42,9 @@ namespace ResponseTestHelper { template void testResponse(std::shared_ptr response, Cynara::ProtocolPtr protocol) { auto queue = std::make_shared(); - auto context = std::make_shared(Cynara::ResponseTakerPtr(), queue); + auto context = Cynara::RequestContext(Cynara::ResponseTakerPtr(), queue); - response->execute(response, protocol, context); + response->execute(*response, *protocol, context); auto extractedResponse = protocol->extractResponseFromBuffer(queue); ASSERT_TRUE(bool(extractedResponse)); @@ -55,9 +55,9 @@ void testResponse(std::shared_ptr response, Cynara::ProtocolPtr protocol) { void binaryTestResponse(Cynara::ResponsePtr response, Cynara::ProtocolPtr protocol) { auto queue = std::make_shared(); - auto context = std::make_shared(Cynara::ResponseTakerPtr(), queue); + auto context = Cynara::RequestContext(Cynara::ResponseTakerPtr(), queue); - response->execute(response, protocol, context); + response->execute(*response, *protocol, context); Cynara::RawBuffer data(queue->size()); queue->flatten(data.data(), queue->size()); @@ -65,7 +65,7 @@ void binaryTestResponse(Cynara::ResponsePtr response, Cynara::ProtocolPtr protoc ASSERT_TRUE(bool(extractedResponse)); ASSERT_EQ(queue->size(), 0); - extractedResponse->execute(extractedResponse, protocol, context); + extractedResponse->execute(*extractedResponse, *protocol, context); Cynara::RawBuffer data2(queue->size()); queue->flatten(data2.data(), queue->size()); -- 2.7.4 From 5248305b8bc647f1f2e8d8af11fb299a8dfb5bb1 Mon Sep 17 00:00:00 2001 From: Zofia Abramowska Date: Fri, 6 Mar 2015 18:13:53 +0100 Subject: [PATCH 12/16] Remove self parameter from requests/responses Remove 'self' argument from Request/Responses methods, us 'this' instead. Change-Id: I46621a8a26d204399365330f9732815833e2ba73 --- src/agent/logic/Logic.cpp | 2 +- src/agent/socket/AgentSocketClient.cpp | 2 +- src/client-async/sockets/SocketClientAsync.cpp | 2 +- src/common/request/AdminCheckRequest.cpp | 4 +-- src/common/request/AdminCheckRequest.h | 3 +- src/common/request/AgentActionRequest.cpp | 4 +-- src/common/request/AgentActionRequest.h | 3 +- src/common/request/AgentRegisterRequest.cpp | 4 +-- src/common/request/AgentRegisterRequest.h | 3 +- src/common/request/CancelRequest.cpp | 4 +-- src/common/request/CancelRequest.h | 3 +- src/common/request/CheckRequest.cpp | 4 +-- src/common/request/CheckRequest.h | 3 +- src/common/request/DescriptionListRequest.cpp | 4 +-- src/common/request/DescriptionListRequest.h | 3 +- src/common/request/EraseRequest.cpp | 4 +-- src/common/request/EraseRequest.h | 3 +- src/common/request/InsertOrUpdateBucketRequest.cpp | 3 +- src/common/request/InsertOrUpdateBucketRequest.h | 3 +- src/common/request/ListRequest.cpp | 4 +-- src/common/request/ListRequest.h | 3 +- src/common/request/RemoveBucketRequest.cpp | 4 +-- src/common/request/RemoveBucketRequest.h | 3 +- src/common/request/Request.h | 3 +- src/common/request/RequestContext.h | 7 ++--- src/common/request/SetPoliciesRequest.cpp | 4 +-- src/common/request/SetPoliciesRequest.h | 3 +- src/common/request/SignalRequest.cpp | 4 +-- src/common/request/SignalRequest.h | 3 +- src/common/request/SimpleCheckRequest.cpp | 4 +-- src/common/request/SimpleCheckRequest.h | 3 +- src/common/response/AdminCheckResponse.cpp | 4 +-- src/common/response/AdminCheckResponse.h | 3 +- src/common/response/AgentActionResponse.cpp | 4 +-- src/common/response/AgentActionResponse.h | 3 +- src/common/response/AgentRegisterResponse.cpp | 4 +-- src/common/response/AgentRegisterResponse.h | 3 +- src/common/response/CancelResponse.cpp | 4 +-- src/common/response/CancelResponse.h | 3 +- src/common/response/CheckResponse.cpp | 4 +-- src/common/response/CheckResponse.h | 3 +- src/common/response/CodeResponse.cpp | 4 +-- src/common/response/CodeResponse.h | 3 +- src/common/response/DescriptionListResponse.cpp | 4 +-- src/common/response/DescriptionListResponse.h | 3 +- src/common/response/ListResponse.cpp | 4 +-- src/common/response/ListResponse.h | 3 +- src/common/response/Response.h | 3 +- src/common/response/SimpleCheckResponse.cpp | 4 +-- src/common/response/SimpleCheckResponse.h | 3 +- src/common/sockets/SocketClient.cpp | 2 +- src/service/agent/AgentTalker.cpp | 2 +- src/service/logic/Logic.cpp | 35 +++++++++++----------- src/service/sockets/SocketManager.cpp | 2 +- test/common/protocols/RequestTestHelper.h | 6 ++-- test/common/protocols/ResponseTestHelper.h | 6 ++-- 56 files changed, 77 insertions(+), 148 deletions(-) diff --git a/src/agent/logic/Logic.cpp b/src/agent/logic/Logic.cpp index c1c6eb4..fe3cb3f 100644 --- a/src/agent/logic/Logic.cpp +++ b/src/agent/logic/Logic.cpp @@ -139,7 +139,7 @@ int Logic::putResponse(const AgentResponseType responseType, AgentActionRequest request(responseType, pluginData, sequenceNumber); m_responseBuffer->clear(); RequestContext context(ResponseTakerPtr(), m_responseBuffer); - request.execute(request, *m_responseTakerPtr, context); + request.execute(*m_responseTakerPtr, context); return m_agentSocket->sendDataToServer(*m_responseBuffer) ? CYNARA_API_SUCCESS : CYNARA_API_SERVICE_NOT_AVAILABLE; } diff --git a/src/agent/socket/AgentSocketClient.cpp b/src/agent/socket/AgentSocketClient.cpp index 31e30b2..3710c6d 100644 --- a/src/agent/socket/AgentSocketClient.cpp +++ b/src/agent/socket/AgentSocketClient.cpp @@ -44,7 +44,7 @@ AgentSocketClient::AgentSocketClient(const std::string &socketPath, ProtocolPtr ResponsePtr AgentSocketClient::askCynaraServer(RequestPtr request) { //pass request to protocol RequestContext context(ResponseTakerPtr(), m_writeQueue); - request->execute(*request, *m_protocol, context); + request->execute(*m_protocol, context); //send request to cynara if (!sendDataToServer(*m_writeQueue)) { diff --git a/src/client-async/sockets/SocketClientAsync.cpp b/src/client-async/sockets/SocketClientAsync.cpp index fa2cef0..c72e255 100644 --- a/src/client-async/sockets/SocketClientAsync.cpp +++ b/src/client-async/sockets/SocketClientAsync.cpp @@ -58,7 +58,7 @@ bool SocketClientAsync::isConnected(void) { void SocketClientAsync::appendRequest(RequestPtr request) { RequestContext context(ResponseTakerPtr(), m_writeQueue); - request->execute(*request, *m_protocol, context); + request->execute(*m_protocol, context); } bool SocketClientAsync::isDataToSend(void) { diff --git a/src/common/request/AdminCheckRequest.cpp b/src/common/request/AdminCheckRequest.cpp index f0fb3c3..637f1ae 100644 --- a/src/common/request/AdminCheckRequest.cpp +++ b/src/common/request/AdminCheckRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements admin check request class */ -#include #include #include "AdminCheckRequest.h" namespace Cynara { -void AdminCheckRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void AdminCheckRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/AdminCheckRequest.h b/src/common/request/AdminCheckRequest.h index 04db2a0..664ab37 100644 --- a/src/common/request/AdminCheckRequest.h +++ b/src/common/request/AdminCheckRequest.h @@ -57,8 +57,7 @@ public: return m_recursive; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/AgentActionRequest.cpp b/src/common/request/AgentActionRequest.cpp index 9ea3c78..09cb14a 100644 --- a/src/common/request/AgentActionRequest.cpp +++ b/src/common/request/AgentActionRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements agent action request class */ -#include #include #include "AgentActionRequest.h" namespace Cynara { -void AgentActionRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void AgentActionRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/AgentActionRequest.h b/src/common/request/AgentActionRequest.h index 7c53ebe..d752c66 100644 --- a/src/common/request/AgentActionRequest.h +++ b/src/common/request/AgentActionRequest.h @@ -48,8 +48,7 @@ public: return m_type; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; private: const AgentRequestType m_type; diff --git a/src/common/request/AgentRegisterRequest.cpp b/src/common/request/AgentRegisterRequest.cpp index 4749b2e..38c1e1f 100644 --- a/src/common/request/AgentRegisterRequest.cpp +++ b/src/common/request/AgentRegisterRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements agent register request class */ -#include #include #include "AgentRegisterRequest.h" namespace Cynara { -void AgentRegisterRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void AgentRegisterRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/AgentRegisterRequest.h b/src/common/request/AgentRegisterRequest.h index b5e93dc..e8b1c20 100644 --- a/src/common/request/AgentRegisterRequest.h +++ b/src/common/request/AgentRegisterRequest.h @@ -42,8 +42,7 @@ public: return m_agentType; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; private: AgentType m_agentType; diff --git a/src/common/request/CancelRequest.cpp b/src/common/request/CancelRequest.cpp index 2d50ebf..2eb44d2 100644 --- a/src/common/request/CancelRequest.cpp +++ b/src/common/request/CancelRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements cancel request class */ -#include #include #include "CancelRequest.h" namespace Cynara { -void CancelRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void CancelRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/CancelRequest.h b/src/common/request/CancelRequest.h index ffe9ab5..d7294a4 100644 --- a/src/common/request/CancelRequest.h +++ b/src/common/request/CancelRequest.h @@ -35,8 +35,7 @@ public: virtual ~CancelRequest() {}; - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/CheckRequest.cpp b/src/common/request/CheckRequest.cpp index c40fff3..77dba20 100644 --- a/src/common/request/CheckRequest.cpp +++ b/src/common/request/CheckRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements check request class */ -#include #include #include "CheckRequest.h" namespace Cynara { -void CheckRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void CheckRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/CheckRequest.h b/src/common/request/CheckRequest.h index 594b81b..c8bf2a4 100644 --- a/src/common/request/CheckRequest.h +++ b/src/common/request/CheckRequest.h @@ -45,8 +45,7 @@ public: return m_key; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/DescriptionListRequest.cpp b/src/common/request/DescriptionListRequest.cpp index 879b03d..b56b2a6 100644 --- a/src/common/request/DescriptionListRequest.cpp +++ b/src/common/request/DescriptionListRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements plugin description list request class */ -#include #include #include "DescriptionListRequest.h" namespace Cynara { -void DescriptionListRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void DescriptionListRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/DescriptionListRequest.h b/src/common/request/DescriptionListRequest.h index 8b33026..72ebaa1 100644 --- a/src/common/request/DescriptionListRequest.h +++ b/src/common/request/DescriptionListRequest.h @@ -36,8 +36,7 @@ public: virtual ~DescriptionListRequest() {}; - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/EraseRequest.cpp b/src/common/request/EraseRequest.cpp index 2465d04..2068f41 100644 --- a/src/common/request/EraseRequest.cpp +++ b/src/common/request/EraseRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements policies erase request class */ -#include #include #include "EraseRequest.h" namespace Cynara { -void EraseRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void EraseRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/EraseRequest.h b/src/common/request/EraseRequest.h index c2b3393..536b4ef 100644 --- a/src/common/request/EraseRequest.h +++ b/src/common/request/EraseRequest.h @@ -53,8 +53,7 @@ public: return m_filter; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; private: PolicyBucketId m_startBucket; diff --git a/src/common/request/InsertOrUpdateBucketRequest.cpp b/src/common/request/InsertOrUpdateBucketRequest.cpp index 1279f17..77d0e90 100644 --- a/src/common/request/InsertOrUpdateBucketRequest.cpp +++ b/src/common/request/InsertOrUpdateBucketRequest.cpp @@ -20,14 +20,13 @@ * @brief This file implements request class for inserting or updating policy bucket */ -#include #include #include "InsertOrUpdateBucketRequest.h" namespace Cynara { -void InsertOrUpdateBucketRequest::execute(const Request &self UNUSED, RequestTaker &taker, +void InsertOrUpdateBucketRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/InsertOrUpdateBucketRequest.h b/src/common/request/InsertOrUpdateBucketRequest.h index 7983c57..6a4ed2c 100644 --- a/src/common/request/InsertOrUpdateBucketRequest.h +++ b/src/common/request/InsertOrUpdateBucketRequest.h @@ -52,8 +52,7 @@ public: return m_result; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/ListRequest.cpp b/src/common/request/ListRequest.cpp index 01d93c6..127e0bd 100644 --- a/src/common/request/ListRequest.cpp +++ b/src/common/request/ListRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements policies list request class */ -#include #include #include "ListRequest.h" namespace Cynara { -void ListRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void ListRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/ListRequest.h b/src/common/request/ListRequest.h index b77a772..e7eeb33 100644 --- a/src/common/request/ListRequest.h +++ b/src/common/request/ListRequest.h @@ -52,8 +52,7 @@ public: return m_filter; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/RemoveBucketRequest.cpp b/src/common/request/RemoveBucketRequest.cpp index f15397b..a965d09 100644 --- a/src/common/request/RemoveBucketRequest.cpp +++ b/src/common/request/RemoveBucketRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements request class for bucket removal */ -#include #include #include "RemoveBucketRequest.h" namespace Cynara { -void RemoveBucketRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void RemoveBucketRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/RemoveBucketRequest.h b/src/common/request/RemoveBucketRequest.h index 876c302..2291514 100644 --- a/src/common/request/RemoveBucketRequest.h +++ b/src/common/request/RemoveBucketRequest.h @@ -45,8 +45,7 @@ public: return m_bucketId; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/Request.h b/src/common/request/Request.h index bb311ef..489f04f 100644 --- a/src/common/request/Request.h +++ b/src/common/request/Request.h @@ -34,8 +34,7 @@ public: } virtual ~Request() {}; - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const = 0; + virtual void execute(RequestTaker &taker, const RequestContext &context) const = 0; ProtocolFrameSequenceNumber sequenceNumber(void) const { return m_sequenceNumber; diff --git a/src/common/request/RequestContext.h b/src/common/request/RequestContext.h index be70bda..f95f03d 100644 --- a/src/common/request/RequestContext.h +++ b/src/common/request/RequestContext.h @@ -23,9 +23,6 @@ #ifndef SRC_COMMON_REQUEST_REQUESTCONTEXT_H_ #define SRC_COMMON_REQUEST_REQUESTCONTEXT_H_ -#include - -#include #include #include #include @@ -45,10 +42,10 @@ public: : m_responseTaker(responseTaker), m_responseQueue(responseQueue) { } - void returnResponse(const RequestContext &self UNUSED, const Response &response) const { + void returnResponse(const Response &response) const { ResponseTakerPtr taker = m_responseTaker.lock(); if (taker) - response.execute(response, *taker, *this); + response.execute(*taker, *this); } BinaryQueuePtr responseQueue(void) const { diff --git a/src/common/request/SetPoliciesRequest.cpp b/src/common/request/SetPoliciesRequest.cpp index bad86a9..46592b6 100644 --- a/src/common/request/SetPoliciesRequest.cpp +++ b/src/common/request/SetPoliciesRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements request class for modifying policies */ -#include #include #include "SetPoliciesRequest.h" namespace Cynara { -void SetPoliciesRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void SetPoliciesRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/SetPoliciesRequest.h b/src/common/request/SetPoliciesRequest.h index e98f6b8..3b6e6b3 100644 --- a/src/common/request/SetPoliciesRequest.h +++ b/src/common/request/SetPoliciesRequest.h @@ -58,8 +58,7 @@ public: return m_removePolicies; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/request/SignalRequest.cpp b/src/common/request/SignalRequest.cpp index 4229fae..91807e1 100644 --- a/src/common/request/SignalRequest.cpp +++ b/src/common/request/SignalRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements signal request class */ -#include #include #include "SignalRequest.h" namespace Cynara { -void SignalRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void SignalRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/SignalRequest.h b/src/common/request/SignalRequest.h index 1be5101..3fcde27 100644 --- a/src/common/request/SignalRequest.h +++ b/src/common/request/SignalRequest.h @@ -40,8 +40,7 @@ public: virtual ~SignalRequest() {}; - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; uint32_t signalNumber(void) const { return m_sigInfo.ssi_signo; diff --git a/src/common/request/SimpleCheckRequest.cpp b/src/common/request/SimpleCheckRequest.cpp index 7e03392..b1c58af 100644 --- a/src/common/request/SimpleCheckRequest.cpp +++ b/src/common/request/SimpleCheckRequest.cpp @@ -20,15 +20,13 @@ * @brief This file implements simple check request class */ -#include #include #include "SimpleCheckRequest.h" namespace Cynara { -void SimpleCheckRequest::execute(const Request &self UNUSED, RequestTaker &taker, - const RequestContext &context) const { +void SimpleCheckRequest::execute(RequestTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/request/SimpleCheckRequest.h b/src/common/request/SimpleCheckRequest.h index 9c75ade..c694e45 100644 --- a/src/common/request/SimpleCheckRequest.h +++ b/src/common/request/SimpleCheckRequest.h @@ -44,8 +44,7 @@ public: return m_key; } - virtual void execute(const Request &self, RequestTaker &taker, - const RequestContext &context) const; + virtual void execute(RequestTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/AdminCheckResponse.cpp b/src/common/response/AdminCheckResponse.cpp index d7fa8ab..7db0310 100644 --- a/src/common/response/AdminCheckResponse.cpp +++ b/src/common/response/AdminCheckResponse.cpp @@ -20,15 +20,13 @@ * @brief This file implements admin check response class */ -#include #include #include "AdminCheckResponse.h" namespace Cynara { -void AdminCheckResponse::execute(const Response &self UNUSED, ResponseTaker &taker, - const RequestContext &context) const { +void AdminCheckResponse::execute(ResponseTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/response/AdminCheckResponse.h b/src/common/response/AdminCheckResponse.h index fd9fd4e..09149f1 100644 --- a/src/common/response/AdminCheckResponse.h +++ b/src/common/response/AdminCheckResponse.h @@ -42,8 +42,7 @@ public: virtual ~AdminCheckResponse() {} - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const; const PolicyResult &result(void) const { return m_result; diff --git a/src/common/response/AgentActionResponse.cpp b/src/common/response/AgentActionResponse.cpp index e0bc260..1b96c4e 100644 --- a/src/common/response/AgentActionResponse.cpp +++ b/src/common/response/AgentActionResponse.cpp @@ -20,15 +20,13 @@ * @brief This file implements common class for sending a request to agent */ -#include #include #include "AgentActionResponse.h" namespace Cynara { -void AgentActionResponse::execute(const Response &self UNUSED, ResponseTaker &taker, - const RequestContext &context) const { +void AgentActionResponse::execute(ResponseTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/response/AgentActionResponse.h b/src/common/response/AgentActionResponse.h index 7403e1d..2f1e627 100644 --- a/src/common/response/AgentActionResponse.h +++ b/src/common/response/AgentActionResponse.h @@ -39,8 +39,7 @@ public: ~AgentActionResponse() {} - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const; const RawBuffer &data(void) const { return m_data; diff --git a/src/common/response/AgentRegisterResponse.cpp b/src/common/response/AgentRegisterResponse.cpp index 8855731..a06426f 100644 --- a/src/common/response/AgentRegisterResponse.cpp +++ b/src/common/response/AgentRegisterResponse.cpp @@ -20,15 +20,13 @@ * @brief This file implements class for responding to agent register request */ -#include #include #include "AgentRegisterResponse.h" namespace Cynara { -void AgentRegisterResponse::execute(const Response &self UNUSED, ResponseTaker &taker, - const RequestContext &context) const { +void AgentRegisterResponse::execute(ResponseTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/response/AgentRegisterResponse.h b/src/common/response/AgentRegisterResponse.h index 71f1563..fab9c40 100644 --- a/src/common/response/AgentRegisterResponse.h +++ b/src/common/response/AgentRegisterResponse.h @@ -45,8 +45,7 @@ public: virtual ~AgentRegisterResponse() {}; - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/CancelResponse.cpp b/src/common/response/CancelResponse.cpp index 7b61f9f..e52cce5 100644 --- a/src/common/response/CancelResponse.cpp +++ b/src/common/response/CancelResponse.cpp @@ -20,15 +20,13 @@ * @brief This file implements cancel response class */ -#include #include #include "CancelResponse.h" namespace Cynara { -void CancelResponse::execute(const Response &self UNUSED, ResponseTaker &taker, - const RequestContext &context) const { +void CancelResponse::execute(ResponseTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/response/CancelResponse.h b/src/common/response/CancelResponse.h index 61d3c3d..f92a1e7 100644 --- a/src/common/response/CancelResponse.h +++ b/src/common/response/CancelResponse.h @@ -36,8 +36,7 @@ public: virtual ~CancelResponse() {}; - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/CheckResponse.cpp b/src/common/response/CheckResponse.cpp index 3ac43ae..1eec145 100644 --- a/src/common/response/CheckResponse.cpp +++ b/src/common/response/CheckResponse.cpp @@ -20,15 +20,13 @@ * @brief This file implements check response class */ -#include #include #include "CheckResponse.h" namespace Cynara { -void CheckResponse::execute(const Response &self UNUSED, ResponseTaker &taker, - const RequestContext &context) const { +void CheckResponse::execute(ResponseTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/response/CheckResponse.h b/src/common/response/CheckResponse.h index b3ad83e..02b4251 100644 --- a/src/common/response/CheckResponse.h +++ b/src/common/response/CheckResponse.h @@ -41,8 +41,7 @@ public: virtual ~CheckResponse() {}; - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/CodeResponse.cpp b/src/common/response/CodeResponse.cpp index c9ebe40..1cb0a45 100644 --- a/src/common/response/CodeResponse.cpp +++ b/src/common/response/CodeResponse.cpp @@ -20,15 +20,13 @@ * @brief This file implements class for responding to a request with a code */ -#include #include #include "CodeResponse.h" namespace Cynara { -void CodeResponse::execute(const Response &self UNUSED, ResponseTaker &taker, - const RequestContext &context) const { +void CodeResponse::execute(ResponseTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/response/CodeResponse.h b/src/common/response/CodeResponse.h index fa346e0..c6b8c6c 100644 --- a/src/common/response/CodeResponse.h +++ b/src/common/response/CodeResponse.h @@ -49,8 +49,7 @@ public: virtual ~CodeResponse() {}; - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const; }; } // namespace Cynara diff --git a/src/common/response/DescriptionListResponse.cpp b/src/common/response/DescriptionListResponse.cpp index 129ba5c..222c634 100644 --- a/src/common/response/DescriptionListResponse.cpp +++ b/src/common/response/DescriptionListResponse.cpp @@ -20,15 +20,13 @@ * @brief This file implements plugins description list response class */ -#include #include #include "DescriptionListResponse.h" namespace Cynara { -void DescriptionListResponse::execute(const Response &self UNUSED, ResponseTaker &taker, - const RequestContext &context) const { +void DescriptionListResponse::execute(ResponseTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/response/DescriptionListResponse.h b/src/common/response/DescriptionListResponse.h index 4c55c8c..871e69e 100644 --- a/src/common/response/DescriptionListResponse.h +++ b/src/common/response/DescriptionListResponse.h @@ -42,8 +42,7 @@ public: virtual ~DescriptionListResponse() {}; - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const; bool isDbCorrupted(void) const { return m_dbCorrupted; diff --git a/src/common/response/ListResponse.cpp b/src/common/response/ListResponse.cpp index e14dff3..1cf8c63 100644 --- a/src/common/response/ListResponse.cpp +++ b/src/common/response/ListResponse.cpp @@ -20,15 +20,13 @@ * @brief This file implements policies list response class */ -#include #include #include "ListResponse.h" namespace Cynara { -void ListResponse::execute(const Response &self UNUSED, ResponseTaker &taker, - const RequestContext &context) const { +void ListResponse::execute(ResponseTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/response/ListResponse.h b/src/common/response/ListResponse.h index 2ce0f55..7fee04c 100644 --- a/src/common/response/ListResponse.h +++ b/src/common/response/ListResponse.h @@ -44,8 +44,7 @@ public: virtual ~ListResponse() {}; - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const; bool isBucketValid(void) const { return m_bucketValid; diff --git a/src/common/response/Response.h b/src/common/response/Response.h index d5fc114..981bc04 100644 --- a/src/common/response/Response.h +++ b/src/common/response/Response.h @@ -34,8 +34,7 @@ public: }; virtual ~Response() {}; - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const = 0; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const = 0; ProtocolFrameSequenceNumber sequenceNumber(void) const { return m_sequenceNumber; diff --git a/src/common/response/SimpleCheckResponse.cpp b/src/common/response/SimpleCheckResponse.cpp index 1e256d9..7f43007 100644 --- a/src/common/response/SimpleCheckResponse.cpp +++ b/src/common/response/SimpleCheckResponse.cpp @@ -20,15 +20,13 @@ * @brief This file implements simple check response class */ -#include #include #include "SimpleCheckResponse.h" namespace Cynara { -void SimpleCheckResponse::execute(const Response &self UNUSED, ResponseTaker &taker, - const RequestContext &context) const { +void SimpleCheckResponse::execute(ResponseTaker &taker, const RequestContext &context) const { taker.execute(context, *this); } diff --git a/src/common/response/SimpleCheckResponse.h b/src/common/response/SimpleCheckResponse.h index 49888fb..76c8fa2 100644 --- a/src/common/response/SimpleCheckResponse.h +++ b/src/common/response/SimpleCheckResponse.h @@ -51,8 +51,7 @@ public: } virtual ~SimpleCheckResponse() {} - virtual void execute(const Response &self, ResponseTaker &taker, - const RequestContext &context) const; + virtual void execute(ResponseTaker &taker, const RequestContext &context) const; private: const PolicyResult m_resultRef; const int32_t m_retValue; diff --git a/src/common/sockets/SocketClient.cpp b/src/common/sockets/SocketClient.cpp index 81698a2..9f96a43 100644 --- a/src/common/sockets/SocketClient.cpp +++ b/src/common/sockets/SocketClient.cpp @@ -63,7 +63,7 @@ bool SocketClient::isConnected(void) { ResponsePtr SocketClient::askCynaraServer(RequestPtr request) { //pass request to protocol RequestContext context(ResponseTakerPtr(), m_writeQueue); - request->execute(*request, *m_protocol, context); + request->execute(*m_protocol, context); //send request to cynara if (m_socket.sendToServer(*m_writeQueue) == Socket::SendStatus::CONNECTION_LOST) { diff --git a/src/service/agent/AgentTalker.cpp b/src/service/agent/AgentTalker.cpp index afcb2ec..392929e 100644 --- a/src/service/agent/AgentTalker.cpp +++ b/src/service/agent/AgentTalker.cpp @@ -35,7 +35,7 @@ namespace Cynara { void AgentTalker::sendMessage(const AgentResponseType type, const RawBuffer &data) { ResponseTakerPtr responseTaker = std::make_shared(); RequestContext context(responseTaker, m_linkId); - context.returnResponse(context, AgentActionResponse(type, data, m_checkId)); + context.returnResponse(AgentActionResponse(type, data, m_checkId)); } void AgentTalker::send(const PluginData &agentData) { diff --git a/src/service/logic/Logic.cpp b/src/service/logic/Logic.cpp index ae04539..23d2f06 100644 --- a/src/service/logic/Logic.cpp +++ b/src/service/logic/Logic.cpp @@ -110,8 +110,8 @@ void Logic::execute(const RequestContext &context, const AdminCheckRequest &requ } } - context.returnResponse(context, AdminCheckResponse(result, bucketValid, m_dbCorrupted, - request.sequenceNumber())); + context.returnResponse(AdminCheckResponse(result, bucketValid, m_dbCorrupted, + request.sequenceNumber())); } void Logic::execute(const RequestContext &context, const AgentActionRequest &request) { @@ -150,7 +150,7 @@ void Logic::execute(const RequestContext &context, const AgentActionRequest &req void Logic::execute(const RequestContext &context, const AgentRegisterRequest &request) { auto result = m_agentManager->registerAgent(request.agentType(), context.responseQueue()); - context.returnResponse(context, AgentRegisterResponse(result, request.sequenceNumber())); + context.returnResponse(AgentRegisterResponse(result, request.sequenceNumber())); } void Logic::execute(const RequestContext &context, const CancelRequest &request) { @@ -169,14 +169,14 @@ void Logic::execute(const RequestContext &context, const CancelRequest &request) checkContextPtr->m_agentTalker->cancel(); LOGD("Returning response for cancel request id: [%" PRIu16 "].", request.sequenceNumber()); - context.returnResponse(context, CancelResponse(request.sequenceNumber())); + context.returnResponse(CancelResponse(request.sequenceNumber())); } void Logic::execute(const RequestContext &context, const CheckRequest &request) { PolicyResult result(PredefinedPolicyType::DENY); if (check(context, request.key(), request.sequenceNumber(), result)) { m_auditLog.log(request.key(), result); - context.returnResponse(context, CheckResponse(result, request.sequenceNumber())); + context.returnResponse(CheckResponse(result, request.sequenceNumber())); } } @@ -279,7 +279,7 @@ bool Logic::update(const PolicyKey &key, ProtocolFrameSequenceNumber checkId, if (answerReady && context.responseQueue()) { m_auditLog.log(key, result); - context.returnResponse(context, CheckResponse(result, checkId)); + context.returnResponse(CheckResponse(result, checkId)); return true; } @@ -290,8 +290,8 @@ void Logic::execute(const RequestContext &context, const DescriptionListRequest auto descriptions = m_pluginManager->getPolicyDescriptions(); descriptions.insert(descriptions.begin(), predefinedPolicyDescr.begin(), predefinedPolicyDescr.end()); - context.returnResponse(context, DescriptionListResponse(descriptions, m_dbCorrupted, - request.sequenceNumber())); + context.returnResponse(DescriptionListResponse(descriptions, m_dbCorrupted, + request.sequenceNumber())); } void Logic::execute(const RequestContext &context, const EraseRequest &request) { @@ -310,7 +310,7 @@ void Logic::execute(const RequestContext &context, const EraseRequest &request) } } - context.returnResponse(context, CodeResponse(code, request.sequenceNumber())); + context.returnResponse(CodeResponse(code, request.sequenceNumber())); } void Logic::execute(const RequestContext &context, const InsertOrUpdateBucketRequest &request) { @@ -334,7 +334,7 @@ void Logic::execute(const RequestContext &context, const InsertOrUpdateBucketReq } } - context.returnResponse(context, CodeResponse(code, request.sequenceNumber())); + context.returnResponse(CodeResponse(code, request.sequenceNumber())); } void Logic::execute(const RequestContext &context, const ListRequest &request) { @@ -351,8 +351,8 @@ void Logic::execute(const RequestContext &context, const ListRequest &request) { } } - context.returnResponse(context, ListResponse(policies, bucketValid, m_dbCorrupted, - request.sequenceNumber())); + context.returnResponse(ListResponse(policies, bucketValid, m_dbCorrupted, + request.sequenceNumber())); } void Logic::execute(const RequestContext &context, const RemoveBucketRequest &request) { @@ -372,7 +372,7 @@ void Logic::execute(const RequestContext &context, const RemoveBucketRequest &re code = CodeResponse::Code::NOT_ALLOWED; } } - context.returnResponse(context, CodeResponse(code, request.sequenceNumber())); + context.returnResponse(CodeResponse(code, request.sequenceNumber())); } void Logic::execute(const RequestContext &context, const SetPoliciesRequest &request) { @@ -395,7 +395,7 @@ void Logic::execute(const RequestContext &context, const SetPoliciesRequest &req } } - context.returnResponse(context, CodeResponse(code, request.sequenceNumber())); + context.returnResponse(CodeResponse(code, request.sequenceNumber())); } void Logic::execute(const RequestContext &context, const SimpleCheckRequest &request) { @@ -449,8 +449,8 @@ void Logic::execute(const RequestContext &context, const SimpleCheckRequest &req } } m_auditLog.log(request.key(), result); - context.returnResponse(context, SimpleCheckResponse(retValue, result, - request.sequenceNumber())); + context.returnResponse(SimpleCheckResponse(retValue, result, + request.sequenceNumber())); } void Logic::checkPoliciesTypes(const std::map> &policies, @@ -505,8 +505,7 @@ void Logic::handleAgentTalkerDisconnection(const AgentTalkerPtr &agentTalkerPtr) if (!checkContextPtr->cancelled() && context.responseQueue()) { PolicyResult result(PredefinedPolicyType::DENY); m_auditLog.log(checkContextPtr->m_key, result); - context.returnResponse(checkContextPtr->m_requestContext, - CheckResponse(result, checkContextPtr->m_checkId)); + context.returnResponse(CheckResponse(result, checkContextPtr->m_checkId)); } m_checkRequestManager.removeRequest(checkContextPtr); diff --git a/src/service/sockets/SocketManager.cpp b/src/service/sockets/SocketManager.cpp index c7866c0..f1200a5 100644 --- a/src/service/sockets/SocketManager.cpp +++ b/src/service/sockets/SocketManager.cpp @@ -242,7 +242,7 @@ bool SocketManager::handleRead(int fd, const RawBuffer &readbuffer) { //build context RequestContext context(desc.responseTaker(), desc.writeQueue()); //pass request to request taker - req->execute(*req, *requestTaker(), context); + req->execute(*requestTaker(), context); } } catch (const Exception &ex) { LOGE("Error handling request <%s>. Closing socket", ex.what()); diff --git a/test/common/protocols/RequestTestHelper.h b/test/common/protocols/RequestTestHelper.h index 7788fc4..894ddd0 100644 --- a/test/common/protocols/RequestTestHelper.h +++ b/test/common/protocols/RequestTestHelper.h @@ -44,7 +44,7 @@ void testRequest(std::shared_ptr request, Cynara::ProtocolPtr protocol) { auto queue = std::make_shared(); Cynara::RequestContext context(Cynara::ResponseTakerPtr(), queue); - request->execute(*request, *protocol, context); + request->execute(*protocol, context); auto extractedRequest = protocol->extractRequestFromBuffer(queue); ASSERT_TRUE(bool(extractedRequest)); @@ -57,7 +57,7 @@ void binaryTestRequest(Cynara::RequestPtr request, Cynara::ProtocolPtr protocol) auto queue = std::make_shared(); Cynara::RequestContext context(Cynara::ResponseTakerPtr(), queue); - request->execute(*request, *protocol, context); + request->execute(*protocol, context); Cynara::RawBuffer data(queue->size()); queue->flatten(data.data(), queue->size()); @@ -65,7 +65,7 @@ void binaryTestRequest(Cynara::RequestPtr request, Cynara::ProtocolPtr protocol) ASSERT_TRUE(bool(extractedRequest)); ASSERT_EQ(queue->size(), 0); - extractedRequest->execute(*extractedRequest, *protocol, context); + extractedRequest->execute(*protocol, context); Cynara::RawBuffer data2(queue->size()); queue->flatten(data2.data(), queue->size()); diff --git a/test/common/protocols/ResponseTestHelper.h b/test/common/protocols/ResponseTestHelper.h index aa80ee3..66d1a5b 100644 --- a/test/common/protocols/ResponseTestHelper.h +++ b/test/common/protocols/ResponseTestHelper.h @@ -44,7 +44,7 @@ void testResponse(std::shared_ptr response, Cynara::ProtocolPtr protocol) { auto queue = std::make_shared(); auto context = Cynara::RequestContext(Cynara::ResponseTakerPtr(), queue); - response->execute(*response, *protocol, context); + response->execute(*protocol, context); auto extractedResponse = protocol->extractResponseFromBuffer(queue); ASSERT_TRUE(bool(extractedResponse)); @@ -57,7 +57,7 @@ void binaryTestResponse(Cynara::ResponsePtr response, Cynara::ProtocolPtr protoc auto queue = std::make_shared(); auto context = Cynara::RequestContext(Cynara::ResponseTakerPtr(), queue); - response->execute(*response, *protocol, context); + response->execute(*protocol, context); Cynara::RawBuffer data(queue->size()); queue->flatten(data.data(), queue->size()); @@ -65,7 +65,7 @@ void binaryTestResponse(Cynara::ResponsePtr response, Cynara::ProtocolPtr protoc ASSERT_TRUE(bool(extractedResponse)); ASSERT_EQ(queue->size(), 0); - extractedResponse->execute(*extractedResponse, *protocol, context); + extractedResponse->execute(*protocol, context); Cynara::RawBuffer data2(queue->size()); queue->flatten(data2.data(), queue->size()); -- 2.7.4 From d06a6f695b40d365664c5fb1feb270b5e47220af Mon Sep 17 00:00:00 2001 From: Zofia Abramowska Date: Mon, 9 Mar 2015 13:28:28 +0100 Subject: [PATCH 13/16] Remove shared_ptr from logic/clients Remove shared_ptr members and arguments from Logic* Socket* classes, where no shared ownership takes place. Change-Id: I0fa3594c2acdb5468d324890d475e7bbd56ccbfe --- src/admin/logic/OnlineLogic.cpp | 16 ++--- src/admin/logic/OnlineLogic.h | 6 +- src/agent/logic/Logic.cpp | 18 ++--- src/agent/logic/Logic.h | 2 +- src/agent/socket/AgentSocketClient.cpp | 4 +- src/agent/socket/AgentSocketClient.h | 4 +- src/client-async/logic/Logic.cpp | 96 ++++++++++++-------------- src/client-async/logic/Logic.h | 15 ++-- src/client-async/sockets/SocketClientAsync.cpp | 4 +- src/client-async/sockets/SocketClientAsync.h | 2 +- src/client/logic/Logic.cpp | 29 ++++---- src/client/logic/Logic.h | 6 +- src/common/sockets/SocketClient.cpp | 10 +-- src/common/sockets/SocketClient.h | 4 +- 14 files changed, 102 insertions(+), 114 deletions(-) diff --git a/src/admin/logic/OnlineLogic.cpp b/src/admin/logic/OnlineLogic.cpp index e8964b0..88c73fb 100644 --- a/src/admin/logic/OnlineLogic.cpp +++ b/src/admin/logic/OnlineLogic.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -54,9 +55,8 @@ namespace Cynara { -OnlineLogic::OnlineLogic() { - m_socketClient = std::make_shared(PathConfig::SocketPath::admin, - std::make_shared()); +OnlineLogic::OnlineLogic() : m_socketClient(PathConfig::SocketPath::admin, + std::make_shared()) { } 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 -int OnlineLogic::getResponse(std::shared_ptr &retResponse, ReqArgs... args) { +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; @@ -77,10 +77,10 @@ int OnlineLogic::getResponse(std::shared_ptr &retResponse, ReqArgs... args) ProtocolFrameSequenceNumber sequenceNumber = generateSequenceNumber(); - RequestPtr request = std::make_shared(args..., sequenceNumber); + Req request(std::forward(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; } diff --git a/src/admin/logic/OnlineLogic.h b/src/admin/logic/OnlineLogic.h index fbcbc48..f1ac5a8 100644 --- a/src/admin/logic/OnlineLogic.h +++ b/src/admin/logic/OnlineLogic.h @@ -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 - int getResponse(std::shared_ptr &retResponse, ReqArgs... args); + int getResponse(std::shared_ptr &retResponse, ReqArgs&&... args); public: OnlineLogic(); diff --git a/src/agent/logic/Logic.cpp b/src/agent/logic/Logic.cpp index fe3cb3f..f652868 100644 --- a/src/agent/logic/Logic.cpp +++ b/src/agent/logic/Logic.cpp @@ -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(PathConfig::SocketPath::agent, - std::make_shared()); +Logic::Logic(const AgentType &agentType) : m_agentType(agentType), + m_socketClient(PathConfig::SocketPath::agent, std::make_shared()), + m_registered(false) { m_responseTakerPtr = std::make_shared(); m_responseBuffer = std::make_shared(); } @@ -63,8 +63,8 @@ int Logic::registerInCynara(void) { //Ask cynara service AgentRegisterResponsePtr registerResponsePtr; - RequestPtr request = std::make_shared(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; } diff --git a/src/agent/logic/Logic.h b/src/agent/logic/Logic.h index f6c9d42..5a6b02c 100644 --- a/src/agent/logic/Logic.h +++ b/src/agent/logic/Logic.h @@ -48,7 +48,7 @@ public: private: AgentType m_agentType; - AgentSocketPtr m_agentSocket; + AgentSocketClient m_socketClient; bool m_registered; RequestTakerPtr m_responseTakerPtr; BinaryQueuePtr m_responseBuffer; diff --git a/src/agent/socket/AgentSocketClient.cpp b/src/agent/socket/AgentSocketClient.cpp index 3710c6d..38f5891 100644 --- a/src/agent/socket/AgentSocketClient.cpp +++ b/src/agent/socket/AgentSocketClient.cpp @@ -41,10 +41,10 @@ AgentSocketClient::AgentSocketClient(const std::string &socketPath, ProtocolPtr m_readQueue = std::make_shared(); } -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)) { diff --git a/src/agent/socket/AgentSocketClient.h b/src/agent/socket/AgentSocketClient.h index ee58c49..741ff56 100644 --- a/src/agent/socket/AgentSocketClient.h +++ b/src/agent/socket/AgentSocketClient.h @@ -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; diff --git a/src/client-async/logic/Logic.cpp b/src/client-async/logic/Logic.cpp index 91769da..41b1cec 100644 --- a/src/client-async/logic/Logic.cpp +++ b/src/client-async/logic/Logic.cpp @@ -45,16 +45,13 @@ 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()), m_operationPermitted(true), m_inAnswerCancelResponseCallback(false) { - m_socketClient = std::make_shared( - PathConfig::SocketPath::client, std::make_shared()); - - m_cache = std::make_shared(conf.getCacheSize()); auto naiveInterpreter = std::make_shared(); 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(key, sequenceNumber)); + m_socketClient.appendRequest(SimpleCheckRequest(key, sequenceNumber)); else - m_socketClient->appendRequest(std::make_shared(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(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(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(it->second.key(), - it->first)); + m_socketClient.appendRequest(SimpleCheckRequest(it->second.key(), it->first)); else - m_socketClient->appendRequest(std::make_shared(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(checkResponse->sequenceNumber()), result); + static_cast(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(response->sequenceNumber()), result); + static_cast(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(response); if (checkResponse) { - processCheckResponse(checkResponse); + processCheckResponse(*checkResponse); continue; } cancelResponse = std::dynamic_pointer_cast(response); if (cancelResponse) { - processCancelResponse(cancelResponse); + processCancelResponse(*cancelResponse); continue; } simpleResponse = std::dynamic_pointer_cast(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; } diff --git a/src/client-async/logic/Logic.h b/src/client-async/logic/Logic.h index 911215c..5ad4364 100644 --- a/src/client-async/logic/Logic.h +++ b/src/client-async/logic/Logic.h @@ -32,6 +32,7 @@ #include #include +#include #include #include #include @@ -67,8 +68,8 @@ private: typedef std::pair 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); diff --git a/src/client-async/sockets/SocketClientAsync.cpp b/src/client-async/sockets/SocketClientAsync.cpp index c72e255..a13fc29 100644 --- a/src/client-async/sockets/SocketClientAsync.cpp +++ b/src/client-async/sockets/SocketClientAsync.cpp @@ -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) { diff --git a/src/client-async/sockets/SocketClientAsync.h b/src/client-async/sockets/SocketClientAsync.h index 511221b..b257b4e 100644 --- a/src/client-async/sockets/SocketClientAsync.h +++ b/src/client-async/sockets/SocketClientAsync.h @@ -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); diff --git a/src/client/logic/Logic.cpp b/src/client/logic/Logic.cpp index 9f738fb..b9d590e 100644 --- a/src/client/logic/Logic.cpp +++ b/src/client/logic/Logic.cpp @@ -50,13 +50,12 @@ static ProtocolFrameSequenceNumber generateSequenceNumber(void) { return ++sequenceNumber; } -Logic::Logic(const Configuration &conf) { - m_socket = std::make_shared(PathConfig::SocketPath::client, - std::make_shared()); - m_cache = std::make_shared(conf.getCacheSize()); +Logic::Logic(const Configuration &conf) : + m_socketClient(PathConfig::SocketPath::client, std::make_shared()), + m_cache(conf.getCacheSize()) { auto naiveInterpreter = std::make_shared(); 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 Logic::requestResponse(const PolicyKey &key) { //Ask cynara service std::shared_ptr reqResponse; - RequestPtr request = std::make_shared(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 diff --git a/src/client/logic/Logic.h b/src/client/logic/Logic.h index e98f950..35af3e7 100644 --- a/src/client/logic/Logic.h +++ b/src/client/logic/Logic.h @@ -34,7 +34,7 @@ #include #include -#include +#include 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); diff --git a/src/common/sockets/SocketClient.cpp b/src/common/sockets/SocketClient.cpp index 9f96a43..2ec8d62 100644 --- a/src/common/sockets/SocketClient.cpp +++ b/src/common/sockets/SocketClient.cpp @@ -20,15 +20,9 @@ * @brief This file contains implementation of cynara's socket client */ -#include -#include - #include -#include -#include #include #include -#include #include #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) { diff --git a/src/common/sockets/SocketClient.h b/src/common/sockets/SocketClient.h index c313b13..2924392 100644 --- a/src/common/sockets/SocketClient.h +++ b/src/common/sockets/SocketClient.h @@ -24,12 +24,12 @@ #define SRC_COMMON_SOCKETS_SOCKETCLIENT_H_ #include +#include #include #include #include #include -#include #include 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 -- 2.7.4 From 73c8e3730ece21062a69d70157b5adf2f34f660f Mon Sep 17 00:00:00 2001 From: Zofia Abramowska Date: Mon, 16 Mar 2015 16:46:59 +0100 Subject: [PATCH 14/16] Fix loops on streams Checking eof bit of stream will cause one invalid read as this bit is only set after first attempt to read after end of file. Change-Id: I79f936e6e4e7b7862c507f47f4d8788b033e2062 --- src/cyad/AdminPolicyParser.cpp | 8 ++++---- src/storage/BucketDeserializer.cpp | 8 ++++---- src/storage/StorageDeserializer.cpp | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/cyad/AdminPolicyParser.cpp b/src/cyad/AdminPolicyParser.cpp index 4f42a87..4b8d42e 100644 --- a/src/cyad/AdminPolicyParser.cpp +++ b/src/cyad/AdminPolicyParser.cpp @@ -55,10 +55,9 @@ CynaraAdminPolicies parse(const std::shared_ptr &input, return std::string(); }; - for (std::size_t lineNum = 1; !input->eof(); ++lineNum) { - std::string line; - std::getline(*input, line, PathConfig::StoragePath::recordSeparator); - + std::string line; + std::size_t lineNum = 1; + while (std::getline(*input, line, PathConfig::StoragePath::recordSeparator)) { if (line.empty()) break; @@ -73,6 +72,7 @@ CynaraAdminPolicies parse(const std::shared_ptr &input, } catch (const BucketRecordCorruptedException &ex) { throw ex.withLineNumber(lineNum); } + lineNum++; } policies.seal(); diff --git a/src/storage/BucketDeserializer.cpp b/src/storage/BucketDeserializer.cpp index 610e527..6c4a88b 100644 --- a/src/storage/BucketDeserializer.cpp +++ b/src/storage/BucketDeserializer.cpp @@ -41,10 +41,9 @@ PolicyCollection BucketDeserializer::loadPolicies(void) { PolicyCollection policies; // TODO: Get someone smart to do error checking on stream - for (std::size_t lineNum = 1; !m_inStream->eof(); ++lineNum) { - std::string line; - std::getline(*m_inStream, line, PathConfig::StoragePath::recordSeparator); - + std::string line; + std::size_t lineNum = 1; + while(std::getline(*m_inStream, line, PathConfig::StoragePath::recordSeparator)) { if (line.empty()) break; @@ -58,6 +57,7 @@ PolicyCollection BucketDeserializer::loadPolicies(void) { } catch (const BucketRecordCorruptedException &ex) { throw ex.withLineNumber(lineNum); } + ++lineNum; } return policies; diff --git a/src/storage/StorageDeserializer.cpp b/src/storage/StorageDeserializer.cpp index 5d9933e..3a8c913 100644 --- a/src/storage/StorageDeserializer.cpp +++ b/src/storage/StorageDeserializer.cpp @@ -44,10 +44,9 @@ StorageDeserializer::StorageDeserializer(std::shared_ptr inStream, void StorageDeserializer::initBuckets(Buckets &buckets) { buckets.clear(); - for (std::size_t lineNum = 1; !m_inStream->eof(); ++lineNum) { - std::string line; - std::getline(*m_inStream, line, PathConfig::StoragePath::recordSeparator); - + std::size_t lineNum = 1; + std::string line; + while (std::getline(*m_inStream, line, PathConfig::StoragePath::recordSeparator)) { if (line.empty()) break; @@ -58,6 +57,7 @@ void StorageDeserializer::initBuckets(Buckets &buckets) { //it's safe to simply insert; buckets were cleared earlier, all ids should be unique buckets.insert({ bucketId, PolicyBucket(bucketId, PolicyResult(policyType, metadata)) }); + ++lineNum; } } -- 2.7.4 From 5e9b6ecdf1224dcaa8a51f08e0521e49e6be1331 Mon Sep 17 00:00:00 2001 From: Zofia Abramowska Date: Mon, 16 Mar 2015 17:53:15 +0100 Subject: [PATCH 15/16] Remove shared_ptr from storage/parsers Remove unnecessary shared pointer parameters/memebers from storage/serialization where no shared ownership takes place Change-Id: I5292058da94180d3f7ebd19cf6c464d84b56b862 --- src/cyad/AdminPolicyParser.cpp | 4 ++-- src/cyad/AdminPolicyParser.h | 3 +-- src/cyad/CommandsDispatcher.cpp | 2 +- src/storage/InMemoryStorageBackend.cpp | 24 ++++++++++++------------ src/storage/InMemoryStorageBackend.h | 12 +++++------- test/cyad/policy_parser.cpp | 8 ++++---- 6 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/cyad/AdminPolicyParser.cpp b/src/cyad/AdminPolicyParser.cpp index 4b8d42e..0649123 100644 --- a/src/cyad/AdminPolicyParser.cpp +++ b/src/cyad/AdminPolicyParser.cpp @@ -30,7 +30,7 @@ namespace Cynara { namespace AdminPolicyParser { -CynaraAdminPolicies parse(const std::shared_ptr &input, +CynaraAdminPolicies parse(std::istream &input, std::function translatePolicy) { CynaraAdminPolicies policies; @@ -57,7 +57,7 @@ CynaraAdminPolicies parse(const std::shared_ptr &input, std::string line; std::size_t lineNum = 1; - while (std::getline(*input, line, PathConfig::StoragePath::recordSeparator)) { + while (std::getline(input, line, PathConfig::StoragePath::recordSeparator)) { if (line.empty()) break; diff --git a/src/cyad/AdminPolicyParser.h b/src/cyad/AdminPolicyParser.h index 0fb1b93..53dde23 100644 --- a/src/cyad/AdminPolicyParser.h +++ b/src/cyad/AdminPolicyParser.h @@ -32,8 +32,7 @@ namespace Cynara { namespace AdminPolicyParser { -CynaraAdminPolicies parse(const std::shared_ptr &input, - std::function); +CynaraAdminPolicies parse(std::istream &input, std::function); } /* namespace AdminPolicyParser */ diff --git a/src/cyad/CommandsDispatcher.cpp b/src/cyad/CommandsDispatcher.cpp index ef36654..d385dd6 100644 --- a/src/cyad/CommandsDispatcher.cpp +++ b/src/cyad/CommandsDispatcher.cpp @@ -137,7 +137,7 @@ int CommandsDispatcher::execute(SetPolicyBulkCyadCommand &result) { try { using Cynara::AdminPolicyParser::parse; - auto policies = parse(input, std::bind(&PolicyTypeTranslator::translate, + auto policies = parse(*input, std::bind(&PolicyTypeTranslator::translate, &m_policyTranslator, std::placeholders::_1)); auto ret = m_adminApiWrapper.cynara_admin_set_policies(m_cynaraAdmin, policies.data()); if (ret != CYNARA_API_SUCCESS) diff --git a/src/storage/InMemoryStorageBackend.cpp b/src/storage/InMemoryStorageBackend.cpp index 141f006..15f6a8a 100644 --- a/src/storage/InMemoryStorageBackend.cpp +++ b/src/storage/InMemoryStorageBackend.cpp @@ -77,12 +77,12 @@ void InMemoryStorageBackend::load(void) { } try { - auto chsStream = std::make_shared(); + std::ifstream chsStream; openFileStream(chsStream, chsFilename, isBackupValid); - m_checksum.load(*chsStream); + m_checksum.load(chsStream); auto indexStream = std::make_shared(); - openFileStream(indexStream, indexFilename, isBackupValid); + openFileStream(*indexStream, indexFilename, isBackupValid); StorageDeserializer storageDeserializer(indexStream, std::bind(&InMemoryStorageBackend::bucketStreamOpener, this, @@ -108,7 +108,7 @@ void InMemoryStorageBackend::load(void) { void InMemoryStorageBackend::save(void) { std::string checksumFilename = m_dbPath + m_chsFilename; auto chsStream = std::make_shared(); - openDumpFileStream(chsStream, checksumFilename + m_backupFilenameSuffix); + openDumpFileStream(*chsStream, checksumFilename + m_backupFilenameSuffix); dumpDatabase(chsStream); @@ -232,24 +232,24 @@ void InMemoryStorageBackend::erasePolicies(const PolicyBucketId &bucketId, bool void InMemoryStorageBackend::dumpDatabase(const std::shared_ptr &chsStream) { auto indexStream = std::make_shared(m_indexFilename, chsStream); std::string indexFilename = m_dbPath + m_indexFilename; - openDumpFileStream(indexStream, indexFilename + m_backupFilenameSuffix); + openDumpFileStream(*indexStream, indexFilename + m_backupFilenameSuffix); StorageSerializer storageSerializer(indexStream); storageSerializer.dump(buckets(), std::bind(&InMemoryStorageBackend::bucketDumpStreamOpener, this, std::placeholders::_1, chsStream)); } -void InMemoryStorageBackend::openFileStream(const std::shared_ptr &stream, - const std::string &filename, bool isBackupValid) { +void InMemoryStorageBackend::openFileStream(std::ifstream &stream, const std::string &filename, + bool isBackupValid) { // TODO: Consider adding exceptions to streams and handling them: // stream.exceptions(std::ifstream::failbit | std::ifstream::badbit); - stream->open(filename); + stream.open(filename); - if (!stream->is_open()) { + if (!stream.is_open()) { throw FileNotFoundException(filename); } - m_checksum.compare(*stream, filename, isBackupValid); + m_checksum.compare(stream, filename, isBackupValid); } std::shared_ptr InMemoryStorageBackend::bucketStreamOpener( @@ -257,7 +257,7 @@ std::shared_ptr InMemoryStorageBackend::bucketStreamOpener( std::string bucketFilename = m_dbPath + m_bucketFilenamePrefix + bucketId + filenameSuffix; auto bucketStream = std::make_shared(); try { - openFileStream(bucketStream, bucketFilename, isBackupValid); + openFileStream(*bucketStream, bucketFilename, isBackupValid); return std::make_shared(bucketStream); } catch (const FileNotFoundException &) { return nullptr; @@ -273,7 +273,7 @@ std::shared_ptr > InMemoryStorageBackend::buck auto bucketStream = std::make_shared(m_bucketFilenamePrefix + bucketId, chsStream); - openDumpFileStream(bucketStream, bucketFilename); + openDumpFileStream(*bucketStream, bucketFilename); return std::make_shared >(bucketStream); } diff --git a/src/storage/InMemoryStorageBackend.h b/src/storage/InMemoryStorageBackend.h index ea1f2bd..80a505c 100644 --- a/src/storage/InMemoryStorageBackend.h +++ b/src/storage/InMemoryStorageBackend.h @@ -69,15 +69,13 @@ public: protected: void dumpDatabase(const std::shared_ptr &chsStream); - void openFileStream(const std::shared_ptr &stream, const std::string &filename, - bool isBackupValid); + void openFileStream(std::ifstream &stream, const std::string &filename, bool isBackupValid); std::shared_ptr bucketStreamOpener(const PolicyBucketId &bucketId, const std::string &fileNameSuffix, bool isBackupValid); template - void openDumpFileStream(const std::shared_ptr &stream, - const std::string &filename); + void openDumpFileStream(StreamType &stream, const std::string &filename); std::shared_ptr > bucketDumpStreamOpener( const PolicyBucketId &bucketId, const std::shared_ptr &chsStream); @@ -103,11 +101,11 @@ protected: }; template -void InMemoryStorageBackend::openDumpFileStream(const std::shared_ptr &stream, +void InMemoryStorageBackend::openDumpFileStream(StreamType &stream, const std::string &filename) { - stream->open(filename, std::ofstream::out | std::ofstream::trunc); + stream.open(filename, std::ofstream::out | std::ofstream::trunc); - if (!stream->is_open()) { + if (!stream.is_open()) { throw CannotCreateFileException(filename); } } diff --git a/test/cyad/policy_parser.cpp b/test/cyad/policy_parser.cpp index a3e2f5e..73f439f 100644 --- a/test/cyad/policy_parser.cpp +++ b/test/cyad/policy_parser.cpp @@ -43,7 +43,7 @@ TEST(AdminPolicyParser, parseInvalid) { *input << "invalid input" << std::endl; - ASSERT_THROW(Cynara::AdminPolicyParser::parse(input, translatePolicy), + ASSERT_THROW(Cynara::AdminPolicyParser::parse(*input, translatePolicy), Cynara::BucketRecordCorruptedException); } @@ -53,7 +53,7 @@ TEST(AdminPolicyParser, parse0) { Cynara::CynaraAdminPolicies expectedPolicies; expectedPolicies.seal(); - auto policies = Cynara::AdminPolicyParser::parse(input, translatePolicy); + auto policies = Cynara::AdminPolicyParser::parse(*input, translatePolicy); ASSERT_TRUE(policies.sealed()); ASSERT_THAT(policies.data(), AdmPolicyListEq(expectedPolicies.data())); @@ -68,7 +68,7 @@ TEST(AdminPolicyParser, parse1) { expectedPolicies.add("b", { 0, "m" }, { "c", "u", "p" }); expectedPolicies.seal(); - auto policies = Cynara::AdminPolicyParser::parse(input, translatePolicy); + auto policies = Cynara::AdminPolicyParser::parse(*input, translatePolicy); ASSERT_TRUE(policies.sealed()); ASSERT_THAT(policies.data(), AdmPolicyListEq(expectedPolicies.data())); @@ -85,7 +85,7 @@ TEST(AdminPolicyParser, parse2) { expectedPolicies.add("b2", { 0, "m2" }, { "c2", "u2", "p2" }); expectedPolicies.seal(); - auto policies = Cynara::AdminPolicyParser::parse(input, translatePolicy); + auto policies = Cynara::AdminPolicyParser::parse(*input, translatePolicy); ASSERT_TRUE(policies.sealed()); ASSERT_THAT(policies.data(), AdmPolicyListEq(expectedPolicies.data())); -- 2.7.4 From a757e34eec365f0092f10ab6dedb349f02b1a717 Mon Sep 17 00:00:00 2001 From: Jacek Bukarewicz Date: Wed, 8 Apr 2015 11:17:46 +0200 Subject: [PATCH 16/16] Add missing dependencies in spec and pc files Change-Id: Id88a48053904308fdb9873d312165303ef4ccf89 --- packaging/cynara.spec | 3 +++ pkgconfig/cynara-admin/cynara-admin.pc.in | 2 +- pkgconfig/cynara-agent/cynara-agent.pc.in | 2 +- pkgconfig/cynara-client-async/cynara-client-async.pc.in | 2 +- pkgconfig/cynara-client/cynara-client.pc.in | 2 +- pkgconfig/cynara-creds-commons/cynara-creds-commons.pc.in | 2 +- pkgconfig/cynara-creds-dbus/cynara-creds-dbus.pc.in | 2 +- pkgconfig/cynara-creds-socket/cynara-creds-socket.pc.in | 2 +- pkgconfig/cynara-session/cynara-session.pc.in | 2 +- 9 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packaging/cynara.spec b/packaging/cynara.spec index 9d56c9c..2b87a55 100644 --- a/packaging/cynara.spec +++ b/packaging/cynara.spec @@ -133,18 +133,21 @@ Base library for cynara credentials helpers Summary: Cynara credentials helpers library for dbus clients BuildRequires: pkgconfig(dbus-1) Requires: dbus +Requires: libcynara-creds-commons = %{version}-%{release} %description -n libcynara-creds-dbus Cynara credentials helpers library for dbus clients %package -n libcynara-creds-socket Summary: Cynara credentials helpers library for socket clients +Requires: libcynara-creds-commons = %{version}-%{release} %description -n libcynara-creds-socket Cynara credentials helpers library for socket clients %package -n libcynara-session Summary: Cynara helper client session string creation library +Requires: libcynara-commons = %{version}-%{release} %description -n libcynara-session Cynara helper client session string creation library diff --git a/pkgconfig/cynara-admin/cynara-admin.pc.in b/pkgconfig/cynara-admin/cynara-admin.pc.in index faa6c47..c0c7d1a 100644 --- a/pkgconfig/cynara-admin/cynara-admin.pc.in +++ b/pkgconfig/cynara-admin/cynara-admin.pc.in @@ -7,5 +7,5 @@ Name: cynara-admin Description: cynara-admin package Version: @CYNARA_VERSION@ Requires: -Libs: -L${libdir} -lcynara-admin +Libs: -L${libdir} -lcynara-admin -lcynara-commons Cflags: -I${includedir}/cynara diff --git a/pkgconfig/cynara-agent/cynara-agent.pc.in b/pkgconfig/cynara-agent/cynara-agent.pc.in index 363a75c..2012d77 100644 --- a/pkgconfig/cynara-agent/cynara-agent.pc.in +++ b/pkgconfig/cynara-agent/cynara-agent.pc.in @@ -7,5 +7,5 @@ Name: cynara-agent Description: cynara-agent package Version: @CYNARA_VERSION@ Requires: -Libs: -L${libdir} -lcynara-agent +Libs: -L${libdir} -lcynara-agent -lcynara-commons Cflags: -I${includedir}/cynara diff --git a/pkgconfig/cynara-client-async/cynara-client-async.pc.in b/pkgconfig/cynara-client-async/cynara-client-async.pc.in index cf38a83..46536e0 100644 --- a/pkgconfig/cynara-client-async/cynara-client-async.pc.in +++ b/pkgconfig/cynara-client-async/cynara-client-async.pc.in @@ -7,5 +7,5 @@ Name: cynara-client-async Description: cynara-client-async package Version: @CYNARA_VERSION@ Requires: -Libs: -L${libdir} -lcynara-client-async +Libs: -L${libdir} -lcynara-client-async -lcynara-commons Cflags: -I${includedir}/cynara diff --git a/pkgconfig/cynara-client/cynara-client.pc.in b/pkgconfig/cynara-client/cynara-client.pc.in index e1505a0..2ba3f37 100644 --- a/pkgconfig/cynara-client/cynara-client.pc.in +++ b/pkgconfig/cynara-client/cynara-client.pc.in @@ -7,5 +7,5 @@ Name: cynara-client Description: cynara-client package Version: @CYNARA_VERSION@ Requires: -Libs: -L${libdir} -lcynara-client +Libs: -L${libdir} -lcynara-client -lcynara-commons Cflags: -I${includedir}/cynara diff --git a/pkgconfig/cynara-creds-commons/cynara-creds-commons.pc.in b/pkgconfig/cynara-creds-commons/cynara-creds-commons.pc.in index 7d6e3c4..6e61f69 100644 --- a/pkgconfig/cynara-creds-commons/cynara-creds-commons.pc.in +++ b/pkgconfig/cynara-creds-commons/cynara-creds-commons.pc.in @@ -7,5 +7,5 @@ Name: cynara-creds-commons Description: Base package for all cynara-creds packages Version: @CYNARA_VERSION@ Requires: -Libs: -L${libdir} -lcynara-creds-commons +Libs: -L${libdir} -lcynara-creds-commons -lcynara-commons Cflags: -I${includedir}/cynara diff --git a/pkgconfig/cynara-creds-dbus/cynara-creds-dbus.pc.in b/pkgconfig/cynara-creds-dbus/cynara-creds-dbus.pc.in index eb09848..4932c9b 100644 --- a/pkgconfig/cynara-creds-dbus/cynara-creds-dbus.pc.in +++ b/pkgconfig/cynara-creds-dbus/cynara-creds-dbus.pc.in @@ -7,5 +7,5 @@ Name: cynara-creds-dbus Description: cynara-creds package for dbus clients Version: @CYNARA_VERSION@ Requires: dbus-1 -Libs: -L${libdir} -lcynara-creds-dbus +Libs: -L${libdir} -lcynara-creds-dbus -lcynara-creds-commons -lcynara-commons Cflags: -I${includedir}/cynara diff --git a/pkgconfig/cynara-creds-socket/cynara-creds-socket.pc.in b/pkgconfig/cynara-creds-socket/cynara-creds-socket.pc.in index 3c53f53..1d8ac23 100644 --- a/pkgconfig/cynara-creds-socket/cynara-creds-socket.pc.in +++ b/pkgconfig/cynara-creds-socket/cynara-creds-socket.pc.in @@ -7,5 +7,5 @@ Name: cynara-creds-socket Description: cynara-creds package for socket clients Version: @CYNARA_VERSION@ Requires: -Libs: -L${libdir} -lcynara-creds-socket +Libs: -L${libdir} -lcynara-creds-socket -lcynara-creds-commons -lcynara-commons Cflags: -I${includedir}/cynara diff --git a/pkgconfig/cynara-session/cynara-session.pc.in b/pkgconfig/cynara-session/cynara-session.pc.in index e734739..88df86a 100644 --- a/pkgconfig/cynara-session/cynara-session.pc.in +++ b/pkgconfig/cynara-session/cynara-session.pc.in @@ -7,5 +7,5 @@ Name: cynara-session Description: cynara-session package Version: @CYNARA_VERSION@ Requires: -Libs: -L${libdir} -lcynara-session +Libs: -L${libdir} -lcynara-session -lcynara-commons Cflags: -I${includedir}/cynara -- 2.7.4