Implement plugin description listing in admin protocol layer 68/32768/3
authorZofia Abramowska <z.abramowska@samsung.com>
Tue, 23 Dec 2014 12:51:36 +0000 (13:51 +0100)
committerLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Mon, 29 Dec 2014 08:04:31 +0000 (09:04 +0100)
Change-Id: Id8de44b255234fec8a4bd85091283db2f00be205

src/common/protocol/ProtocolAdmin.cpp
src/common/protocol/ProtocolAdmin.h
src/common/protocol/ProtocolOpCode.h
src/service/logic/Logic.cpp
test/CMakeLists.txt

index ccbf589..238374b 100644 (file)
@@ -29,6 +29,7 @@
 #include <protocol/ProtocolFrame.h>
 #include <protocol/ProtocolFrameSerializer.h>
 #include <request/AdminCheckRequest.h>
+#include <request/DescriptionListRequest.h>
 #include <request/EraseRequest.h>
 #include <request/InsertOrUpdateBucketRequest.h>
 #include <request/ListRequest.h>
@@ -37,6 +38,7 @@
 #include <request/SetPoliciesRequest.h>
 #include <response/AdminCheckResponse.h>
 #include <response/CodeResponse.h>
+#include <response/DescriptionListResponse.h>
 #include <response/ListResponse.h>
 #include <types/PolicyKey.h>
 
@@ -74,6 +76,11 @@ RequestPtr ProtocolAdmin::deserializeAdminCheckRequest(void) {
                                                m_frameHeader.sequenceNumber());
 }
 
+RequestPtr ProtocolAdmin::deserializeDescriptionListRequest(void) {
+    LOGD("Deserialized DescriptionListRequest");
+    return std::make_shared<DescriptionListRequest>(m_frameHeader.sequenceNumber());
+}
+
 RequestPtr ProtocolAdmin::deserializeEraseRequest(void) {
     PolicyBucketId startBucket;
     bool recursive;
@@ -201,6 +208,8 @@ RequestPtr ProtocolAdmin::extractRequestFromBuffer(BinaryQueuePtr bufferQueue) {
         switch (opCode) {
         case OpAdminCheckRequest:
             return deserializeAdminCheckRequest();
+        case OpDescriptionListRequest:
+            return deserializeDescriptionListRequest();
         case OpEraseRequest:
             return deserializeEraseRequest();
         case OpInsertOrUpdateBucket:
@@ -248,6 +257,24 @@ ResponsePtr ProtocolAdmin::deserializeCodeResponse(void) {
                                           m_frameHeader.sequenceNumber());
 }
 
+ResponsePtr ProtocolAdmin::deserializeDescriptionListResponse(void) {
+    ProtocolFrameFieldsCount descriptionsCount;
+
+    ProtocolDeserialization::deserialize(m_frameHeader, descriptionsCount);
+    std::vector<PolicyDescription> descriptions(descriptionsCount,
+                                                PolicyDescription(PredefinedPolicyType::NONE));
+
+    for (ProtocolFrameFieldsCount fields = 0; fields < descriptionsCount; fields++) {
+        ProtocolDeserialization::deserialize(m_frameHeader, descriptions[fields].type);
+        ProtocolDeserialization::deserialize(m_frameHeader, descriptions[fields].name);
+    }
+
+    LOGD("Deserialized DescriptionListResponse: number of descriptions [%" PRIu16 "]",
+         descriptionsCount);
+
+    return std::make_shared<DescriptionListResponse>(descriptions, m_frameHeader.sequenceNumber());
+}
+
 ResponsePtr ProtocolAdmin::deserializeListResponse(void) {
     ProtocolFrameFieldsCount policiesCount;
     PolicyKeyFeature::ValueType client, user, privilege;
@@ -294,6 +321,8 @@ ResponsePtr ProtocolAdmin::extractResponseFromBuffer(BinaryQueuePtr bufferQueue)
             return deserializeAdminCheckResponse();
         case OpCodeResponse:
             return deserializeCodeResponse();
+        case OpDescriptionListResponse:
+            return deserializeDescriptionListResponse();
         case OpListResponse:
             return deserializeListResponse();
         default:
@@ -323,6 +352,15 @@ void ProtocolAdmin::execute(RequestContextPtr context, AdminCheckRequestPtr requ
     ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue()));
 }
 
+void ProtocolAdmin::execute(RequestContextPtr context, DescriptionListRequestPtr request) {
+    LOGD("Serializing DescriptionListRequest");
+    ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(request->sequenceNumber());
+
+    ProtocolSerialization::serialize(frame, OpDescriptionListRequest);
+
+    ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue()));
+}
+
 void ProtocolAdmin::execute(RequestContextPtr context, EraseRequestPtr request) {
     LOGD("Serializing EraseRequest: sequenceNumber [%" PRIu16 "], startBucket <%s>, "
          "recursive [%d], filter client <%s> filter user <%s> filter privilege <%s>",
@@ -461,6 +499,25 @@ void ProtocolAdmin::execute(RequestContextPtr context, CodeResponsePtr response)
     ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue()));
 }
 
+void ProtocolAdmin::execute(RequestContextPtr context, DescriptionListResponsePtr response) {
+    ProtocolFrameFieldsCount descriptionsSize
+        = static_cast<ProtocolFrameFieldsCount>(response->descriptions().size());
+
+    LOGD("Serializing DescriptionListResponse: op [%" PRIu8 "], sequenceNumber [%" PRIu16 "], "
+         "number of descriptions [%" PRIu16 "]", OpDescriptionListResponse,
+         response->sequenceNumber(), descriptionsSize);
+
+    ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response->sequenceNumber());
+
+    ProtocolSerialization::serialize(frame, OpDescriptionListResponse);
+    ProtocolSerialization::serialize(frame, descriptionsSize);
+    for (auto &desc : response->descriptions()) {
+        ProtocolSerialization::serialize(frame, desc.type);
+        ProtocolSerialization::serialize(frame, desc.name);
+    }
+    ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue()));
+}
+
 void ProtocolAdmin::execute(RequestContextPtr context, ListResponsePtr response) {
     ProtocolFrameFieldsCount policiesSize
         = static_cast<ProtocolFrameFieldsCount>(response->policies().size());
index f1db4e4..254dd33 100644 (file)
@@ -39,6 +39,7 @@ public:
     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);
@@ -47,10 +48,12 @@ public:
 
     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);
 
 private:
     RequestPtr deserializeAdminCheckRequest(void);
+    RequestPtr deserializeDescriptionListRequest(void);
     RequestPtr deserializeEraseRequest(void);
     RequestPtr deserializeInsertOrUpdateBucketRequest(void);
     RequestPtr deserializeListRequest(void);
@@ -59,6 +62,7 @@ private:
 
     ResponsePtr deserializeAdminCheckResponse(void);
     ResponsePtr deserializeCodeResponse(void);
+    ResponsePtr deserializeDescriptionListResponse(void);
     ResponsePtr deserializeListResponse(void);
 };
 
index 42289ac..6aefb10 100644 (file)
@@ -49,8 +49,10 @@ enum ProtocolOpCode : uint8_t {
     OpListResponse,
     OpAdminCheckPolicyResponse,
     OpEraseRequest,
+    OpDescriptionListRequest,
+    OpDescriptionListResponse,
 
-    /** Opcodes 29 - 39 are reserved for future use */
+    /** Opcodes 31 - 39 are reserved for future use */
 
     /** Agent operations */
     OpAgentRegisterRequest = 40,
index 4a547a0..c6a045f 100644 (file)
@@ -277,7 +277,6 @@ void Logic::execute(RequestContextPtr context, DescriptionListRequestPtr request
     auto descriptions = m_pluginManager->getPolicyDescriptions();
     descriptions.insert(descriptions.begin(), predefinedPolicyDescr.begin(),
                         predefinedPolicyDescr.end());
-
     context->returnResponse(context, std::make_shared<DescriptionListResponse>(descriptions,
                             request->sequenceNumber()));
 }
index 99097cc..f0c3736 100644 (file)
@@ -29,6 +29,7 @@ SET(CYNARA_SOURCES_FOR_TESTS
     ${CYNARA_SRC}/common/protocol/ProtocolFrameHeader.cpp
     ${CYNARA_SRC}/common/protocol/ProtocolFrameSerializer.cpp
     ${CYNARA_SRC}/common/request/AdminCheckRequest.cpp
+    ${CYNARA_SRC}/common/request/DescriptionListRequest.cpp
     ${CYNARA_SRC}/common/request/EraseRequest.cpp
     ${CYNARA_SRC}/common/request/InsertOrUpdateBucketRequest.cpp
     ${CYNARA_SRC}/common/request/ListRequest.cpp
@@ -36,6 +37,7 @@ SET(CYNARA_SOURCES_FOR_TESTS
     ${CYNARA_SRC}/common/request/RequestTaker.cpp
     ${CYNARA_SRC}/common/request/SetPoliciesRequest.cpp
     ${CYNARA_SRC}/common/response/AdminCheckResponse.cpp
+    ${CYNARA_SRC}/common/response/DescriptionListResponse.cpp
     ${CYNARA_SRC}/common/response/CheckResponse.cpp
     ${CYNARA_SRC}/common/response/CodeResponse.cpp
     ${CYNARA_SRC}/common/response/ListResponse.cpp
@@ -43,6 +45,7 @@ SET(CYNARA_SOURCES_FOR_TESTS
     ${CYNARA_SRC}/common/types/PolicyBucket.cpp
     ${CYNARA_SRC}/common/types/PolicyKey.cpp
     ${CYNARA_SRC}/common/types/PolicyKeyHelpers.cpp
+    ${CYNARA_SRC}/common/types/PolicyDescription.cpp
     ${CYNARA_SRC}/common/types/PolicyResult.cpp
     ${CYNARA_SRC}/common/types/PolicyType.cpp
     ${CYNARA_SRC}/helpers/creds-commons/CredsCommonsInner.cpp