From facc8534cbd287665bf03484365857784177da92 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Tue, 16 Dec 2014 12:52:04 +0100 Subject: [PATCH] Add serialization of EraseRequest with ProtocolAdmin Add serialization and deserialization of request for erasing multiple policies matching filter key. Provide new OpCode (28) for EraseRequest. Change-Id: Ib2370e98e6edae3fbb6a6457ebc5c58590f27580 --- src/common/protocol/ProtocolAdmin.cpp | 42 +++++++++++++++++++++++++++++++++++ src/common/protocol/ProtocolAdmin.h | 2 ++ src/common/protocol/ProtocolOpCode.h | 3 ++- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/common/protocol/ProtocolAdmin.cpp b/src/common/protocol/ProtocolAdmin.cpp index 293db97..ccbf589 100644 --- a/src/common/protocol/ProtocolAdmin.cpp +++ b/src/common/protocol/ProtocolAdmin.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -73,6 +74,26 @@ RequestPtr ProtocolAdmin::deserializeAdminCheckRequest(void) { m_frameHeader.sequenceNumber()); } +RequestPtr ProtocolAdmin::deserializeEraseRequest(void) { + PolicyBucketId startBucket; + bool recursive; + PolicyKeyFeature::ValueType client, user, privilege; + + ProtocolDeserialization::deserialize(m_frameHeader, startBucket); + ProtocolDeserialization::deserialize(m_frameHeader, recursive); + ProtocolDeserialization::deserialize(m_frameHeader, client); + ProtocolDeserialization::deserialize(m_frameHeader, user); + ProtocolDeserialization::deserialize(m_frameHeader, privilege); + + LOGD("Deserialized EraseRequest: startBucket <%s>, recursive [%d], filter client <%s> " + "filter user <%s>, filter privilege <%s>", startBucket.c_str(), + static_cast(recursive), client.c_str(), user.c_str(), privilege.c_str()); + + return std::make_shared(startBucket, recursive, + PolicyKey(client, user, privilege), + m_frameHeader.sequenceNumber()); +} + RequestPtr ProtocolAdmin::deserializeInsertOrUpdateBucketRequest(void) { PolicyBucketId policyBucketId; PolicyType policyType; @@ -180,6 +201,8 @@ RequestPtr ProtocolAdmin::extractRequestFromBuffer(BinaryQueuePtr bufferQueue) { switch (opCode) { case OpAdminCheckRequest: return deserializeAdminCheckRequest(); + case OpEraseRequest: + return deserializeEraseRequest(); case OpInsertOrUpdateBucket: return deserializeInsertOrUpdateBucketRequest(); case OpListRequest: @@ -300,6 +323,25 @@ void ProtocolAdmin::execute(RequestContextPtr context, AdminCheckRequestPtr requ 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>", + 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()); + + 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()); + + ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); +} + void ProtocolAdmin::execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request) { LOGD("Serializing InsertOrUpdateBucketRequest: sequenceNumber [%" PRIu16 "], bucketId <%s>, " "result.type [%" PRIu16 "], result.meta <%s>", request->sequenceNumber(), diff --git a/src/common/protocol/ProtocolAdmin.h b/src/common/protocol/ProtocolAdmin.h index b9c7e17..f1db4e4 100644 --- a/src/common/protocol/ProtocolAdmin.h +++ b/src/common/protocol/ProtocolAdmin.h @@ -39,6 +39,7 @@ public: virtual ResponsePtr extractResponseFromBuffer(BinaryQueuePtr bufferQueue); virtual void execute(RequestContextPtr context, AdminCheckRequestPtr 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); @@ -50,6 +51,7 @@ public: private: RequestPtr deserializeAdminCheckRequest(void); + RequestPtr deserializeEraseRequest(void); RequestPtr deserializeInsertOrUpdateBucketRequest(void); RequestPtr deserializeListRequest(void); RequestPtr deserializeRemoveBucketRequest(void); diff --git a/src/common/protocol/ProtocolOpCode.h b/src/common/protocol/ProtocolOpCode.h index 984ddef..42289ac 100644 --- a/src/common/protocol/ProtocolOpCode.h +++ b/src/common/protocol/ProtocolOpCode.h @@ -48,8 +48,9 @@ enum ProtocolOpCode : uint8_t { OpListRequest, OpListResponse, OpAdminCheckPolicyResponse, + OpEraseRequest, - /** Opcodes 28 - 39 are reserved for future use */ + /** Opcodes 29 - 39 are reserved for future use */ /** Agent operations */ OpAgentRegisterRequest = 40, -- 2.7.4