From: Lukasz Wojciechowski Date: Sat, 29 Nov 2014 23:19:55 +0000 (+0100) Subject: Implement listPolicies() in libcynara-admin Logic X-Git-Tag: accepted/tizen/common/20150119.084431~72 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2deb5d0f10c156a80c2d453a99b898dcbbcff944;p=platform%2Fcore%2Fsecurity%2Fcynara.git Implement listPolicies() in libcynara-admin Logic Implementation sends ListRequest object to cynara service and expects ListResponse. Change-Id: I5602e815a0b5070b79a02538b1823290380d66c8 --- diff --git a/src/admin/logic/Logic.cpp b/src/admin/logic/Logic.cpp index 1bf8a8a..6648189 100644 --- a/src/admin/logic/Logic.cpp +++ b/src/admin/logic/Logic.cpp @@ -33,11 +33,13 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include #include @@ -154,9 +156,39 @@ int Logic::adminCheck(const PolicyBucketId &startBucket, bool recursive, const P return CYNARA_API_SUCCESS; } -int Logic::listPolicies(const PolicyBucketId &bucket UNUSED, const PolicyKey &filter UNUSED, - std::vector &policies UNUSED) { - //stub +int Logic::listPolicies(const PolicyBucketId &bucket, const PolicyKey &filter, + std::vector &policies) { + if (!ensureConnection()) { + LOGE("Cannot connect to cynara. Service not available."); + return CYNARA_API_SERVICE_NOT_AVAILABLE; + } + + ProtocolFrameSequenceNumber sequenceNumber = generateSequenceNumber(); + + //Ask cynara service + ListResponsePtr listResponse; + + RequestPtr request = std::make_shared(bucket, filter, sequenceNumber); + ResponsePtr response; + while (!(response = m_socketClient->askCynaraServer(request))) { + if (!m_socketClient->connect()) + return CYNARA_API_SERVICE_NOT_AVAILABLE; + } + + listResponse = std::dynamic_pointer_cast(response); + if (!listResponse) { + LOGC("Casting Response to ListResponse failed."); + return CYNARA_API_UNKNOWN_ERROR; + } + + LOGD("listResponse: number of policies [%zu], bucketValid [%d]", + listResponse->policies().size(), listResponse->isBucketValid()); + + if (!listResponse->isBucketValid()) { + return CYNARA_API_BUCKET_NOT_FOUND; + } + + policies = listResponse->policies(); return CYNARA_API_SUCCESS; }