/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2014-2015 Samsung Electronics Co., Ltd All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* @file src/common/protocol/ProtocolAdmin.cpp
* @author Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
* @author Adam Malinowski <a.malinowsk2@partner.samsung.com>
+ * @author Pawel Wieczorek <p.wieczorek2@samsung.com>
* @version 1.0
* @brief This file implements protocol class for administration
*/
#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:
PolicyType result;
PolicyResult::PolicyMetadata additionalInfo;
bool bucketValid;
+ bool dbCorrupted;
ProtocolDeserialization::deserialize(m_frameHeader, result);
ProtocolDeserialization::deserialize(m_frameHeader, additionalInfo);
ProtocolDeserialization::deserialize(m_frameHeader, bucketValid);
+ ProtocolDeserialization::deserialize(m_frameHeader, dbCorrupted);
const PolicyResult policyResult(result, additionalInfo);
- LOGD("Deserialized AdminCheckResponse: result [%" PRIu16 "], metadata <%s>, bucketValid [%d]",
- policyResult.policyType(), policyResult.metadata().c_str(), static_cast<int>(bucketValid));
+ LOGD("Deserialized AdminCheckResponse: result [%" PRIu16 "], metadata <%s>, bucketValid [%d], "
+ "dbCorrupted [%d]", policyResult.policyType(), policyResult.metadata().c_str(),
+ static_cast<int>(bucketValid), static_cast<int>(dbCorrupted));
- return std::make_shared<AdminCheckResponse>(policyResult, bucketValid,
+ return std::make_shared<AdminCheckResponse>(policyResult, bucketValid, dbCorrupted,
m_frameHeader.sequenceNumber());
}
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);
+ }
+
+ bool dbCorrupted;
+ ProtocolDeserialization::deserialize(m_frameHeader, dbCorrupted);
+
+ LOGD("Deserialized DescriptionListResponse: number of descriptions [%" PRIu16 "], "
+ "dbCorrupted [%d]", descriptionsCount, static_cast<int>(dbCorrupted));
+
+ return std::make_shared<DescriptionListResponse>(descriptions, dbCorrupted,
+ m_frameHeader.sequenceNumber());
+}
+
ResponsePtr ProtocolAdmin::deserializeListResponse(void) {
ProtocolFrameFieldsCount policiesCount;
PolicyKeyFeature::ValueType client, user, privilege;
PolicyResult(policyType, metadata)));
}
- bool isBucketValid;
- ProtocolDeserialization::deserialize(m_frameHeader, isBucketValid);
+ bool bucketValid;
+ bool dbCorrupted;
+ ProtocolDeserialization::deserialize(m_frameHeader, bucketValid);
+ ProtocolDeserialization::deserialize(m_frameHeader, dbCorrupted);
- LOGD("Deserialized ListResponse: number of policies [%" PRIu16 "], isBucketValid [%d]",
- policiesCount, isBucketValid);
+ LOGD("Deserialized ListResponse: number of policies [%" PRIu16 "], bucketValid [%d], "
+ "dbCorrupted [%d]", policiesCount, static_cast<int>(bucketValid),
+ static_cast<int>(dbCorrupted));
+
+ return std::make_shared<ListResponse>(policies, bucketValid, dbCorrupted,
+ m_frameHeader.sequenceNumber());
- return std::make_shared<ListResponse>(policies, isBucketValid, m_frameHeader.sequenceNumber());
}
ResponsePtr ProtocolAdmin::extractResponseFromBuffer(BinaryQueuePtr bufferQueue) {
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>",
void ProtocolAdmin::execute(RequestContextPtr context, AdminCheckResponsePtr response) {
LOGD("Serializing AdminCheckResponse: op [%" PRIu8 "], sequenceNumber [%" PRIu16 "], "
- "policyType [%" PRIu16 "], metadata <%s>, bucketValid [%d]", OpAdminCheckPolicyResponse,
- response->sequenceNumber(), response->result().policyType(),
- response->result().metadata().c_str(), static_cast<int>(response->isBucketValid()));
+ "policyType [%" PRIu16 "], metadata <%s>, bucketValid [%d], dbCorrupted [%d]",
+ OpAdminCheckPolicyResponse, response->sequenceNumber(), response->result().policyType(),
+ response->result().metadata().c_str(), static_cast<int>(response->isBucketValid()),
+ static_cast<int>(response->isDbCorrupted()));
ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(
response->sequenceNumber());
ProtocolSerialization::serialize(frame, response->result().policyType());
ProtocolSerialization::serialize(frame, response->result().metadata());
ProtocolSerialization::serialize(frame, response->isBucketValid());
+ ProtocolSerialization::serialize(frame, response->isDbCorrupted());
ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue()));
}
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 "], dbCorrupted [%d]", OpDescriptionListResponse,
+ response->sequenceNumber(), descriptionsSize, static_cast<int>(response->isDbCorrupted()));
+
+ 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);
+ }
+ ProtocolSerialization::serialize(frame, response->isDbCorrupted());
+
+ ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue()));
+}
+
void ProtocolAdmin::execute(RequestContextPtr context, ListResponsePtr response) {
ProtocolFrameFieldsCount policiesSize
= static_cast<ProtocolFrameFieldsCount>(response->policies().size());
LOGD("Serializing ListResponse: op [%" PRIu8 "], sequenceNumber [%" PRIu16 "], "
- "number of policies [%" PRIu16 "], isBucketValid [%d]", OpListResponse,
- response->sequenceNumber(), policiesSize, response->isBucketValid());
+ "number of policies [%" PRIu16 "], bucketValid [%d], dbCorrupted [%d]", OpListResponse,
+ response->sequenceNumber(), policiesSize, static_cast<int>(response->isBucketValid()),
+ static_cast<int>(response->isDbCorrupted()));
ProtocolFrame frame = ProtocolFrameSerializer::startSerialization(response->sequenceNumber());
ProtocolSerialization::serialize(frame, policy.result().metadata());
}
ProtocolSerialization::serialize(frame, response->isBucketValid());
+ ProtocolSerialization::serialize(frame, response->isDbCorrupted());
ProtocolFrameSerializer::finishSerialization(frame, *(context->responseQueue()));
}