#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>
#include <request/SetPoliciesRequest.h>
#include <response/AdminCheckResponse.h>
#include <response/CodeResponse.h>
+#include <response/DescriptionListResponse.h>
#include <response/ListResponse.h>
#include <types/PolicyKey.h>
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;
switch (opCode) {
case OpAdminCheckRequest:
return deserializeAdminCheckRequest();
+ case OpDescriptionListRequest:
+ return deserializeDescriptionListRequest();
case OpEraseRequest:
return deserializeEraseRequest();
case OpInsertOrUpdateBucket:
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;
return deserializeAdminCheckResponse();
case OpCodeResponse:
return deserializeCodeResponse();
+ case OpDescriptionListResponse:
+ return deserializeDescriptionListResponse();
case OpListResponse:
return deserializeListResponse();
default:
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>",
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());
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, 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);
ResponsePtr deserializeAdminCheckResponse(void);
ResponsePtr deserializeCodeResponse(void);
+ ResponsePtr deserializeDescriptionListResponse(void);
ResponsePtr deserializeListResponse(void);
};
${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
${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
${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