From 9138bd1a8352b8a55ac54505455a409acf09e160 Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Sat, 29 Nov 2014 16:34:05 +0100 Subject: [PATCH] Handle ListRequest by AdminProtocol Add serialziation and deserialization of ListRequest to AdminProtocol. Change-Id: Id1fadae22333acba6caec905d82c8e214c2560e9 --- src/common/protocol/ProtocolAdmin.cpp | 37 +++++++++++++++++++++++++++++++++++ src/common/protocol/ProtocolAdmin.h | 2 ++ src/common/protocol/ProtocolOpCode.h | 4 +++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/common/protocol/ProtocolAdmin.cpp b/src/common/protocol/ProtocolAdmin.cpp index 8d792f9..60341bc 100644 --- a/src/common/protocol/ProtocolAdmin.cpp +++ b/src/common/protocol/ProtocolAdmin.cpp @@ -30,11 +30,13 @@ #include #include #include +#include #include #include #include #include #include +#include #include "ProtocolAdmin.h" @@ -87,6 +89,22 @@ RequestPtr ProtocolAdmin::deserializeInsertOrUpdateBucketRequest(void) { PolicyResult(policyType, policyMetaData), m_frameHeader.sequenceNumber()); } +RequestPtr ProtocolAdmin::deserializeListRequest(void) { + PolicyBucketId bucketId; + PolicyKeyFeature::ValueType client, user, privilege; + + ProtocolDeserialization::deserialize(m_frameHeader, bucketId); + ProtocolDeserialization::deserialize(m_frameHeader, client); + ProtocolDeserialization::deserialize(m_frameHeader, user); + ProtocolDeserialization::deserialize(m_frameHeader, privilege); + + LOGD("Deserialized ListRequest: bucketId <%s>, filter client <%s> filter user <%s>, filter " + "privilege <%s>", bucketId.c_str(), client.c_str(), user.c_str(), privilege.c_str()); + + return std::make_shared(bucketId, PolicyKey(client, user, privilege), + m_frameHeader.sequenceNumber()); +} + RequestPtr ProtocolAdmin::deserializeRemoveBucketRequest(void) { PolicyBucketId policyBucketId; @@ -163,6 +181,8 @@ RequestPtr ProtocolAdmin::extractRequestFromBuffer(BinaryQueuePtr bufferQueue) { return deserializeAdminCheckRequest(); case OpInsertOrUpdateBucket: return deserializeInsertOrUpdateBucketRequest(); + case OpListRequest: + return deserializeListRequest(); case OpRemoveBucket: return deserializeRemoveBucketRequest(); case OpSetPolicies: @@ -258,6 +278,23 @@ void ProtocolAdmin::execute(RequestContextPtr context, InsertOrUpdateBucketReque ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); } +void ProtocolAdmin::execute(RequestContextPtr context, ListRequestPtr 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()); + + 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()); + + ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue())); +} + void ProtocolAdmin::execute(RequestContextPtr context, RemoveBucketRequestPtr request) { LOGD("Serializing RemoveBucketRequest: sequenceNumber [%" PRIu16 "], bucketId <%s>", request->sequenceNumber(), request->bucketId().c_str()); diff --git a/src/common/protocol/ProtocolAdmin.h b/src/common/protocol/ProtocolAdmin.h index 9d2c6ac..f5b2c96 100644 --- a/src/common/protocol/ProtocolAdmin.h +++ b/src/common/protocol/ProtocolAdmin.h @@ -40,6 +40,7 @@ public: virtual void execute(RequestContextPtr context, AdminCheckRequestPtr 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); @@ -49,6 +50,7 @@ public: private: RequestPtr deserializeAdminCheckRequest(void); RequestPtr deserializeInsertOrUpdateBucketRequest(void); + RequestPtr deserializeListRequest(void); RequestPtr deserializeRemoveBucketRequest(void); RequestPtr deserializeSetPoliciesRequest(void); diff --git a/src/common/protocol/ProtocolOpCode.h b/src/common/protocol/ProtocolOpCode.h index 7bd67ae..36670c9 100644 --- a/src/common/protocol/ProtocolOpCode.h +++ b/src/common/protocol/ProtocolOpCode.h @@ -18,6 +18,7 @@ /** * @file src/common/protocol/ProtocolOpCode.h * @author Adam Malinowski + * @author Lukasz Wojciechowski * @version 1.0 * @brief Decalaration of protocol frame operation codes. */ @@ -44,8 +45,9 @@ enum ProtocolOpCode : uint8_t { OpSetPolicies, OpCodeResponse, OpAdminCheckRequest, + OpListRequest, - /** Opcodes 25 - 39 are reserved for future use */ + /** Opcodes 26 - 39 are reserved for future use */ /** Agent operations */ OpAgentRegisterRequest = 40, -- 2.7.4