summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYaroslav Mamykin (GitHub) <ymamykin@luxoft.com>2019-10-23 22:07:37 +0300
committerYarik <ymamykin@gmail.com>2019-11-15 15:19:05 +0200
commit4f6aa3c44c01f99dceda2daa95f1b16cd5062f00 (patch)
treedb3f1a1c66900e4c245a5313614185ef29ec3a4f
parente3cff807d9714df707500330402f30af2aacffd3 (diff)
downloadsdl_core-4f6aa3c44c01f99dceda2daa95f1b16cd5062f00.tar.gz
fixup! Fix versioning appliance for vehicle data
-rw-r--r--src/components/application_manager/include/application_manager/rpc_service_impl.h11
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc15
-rw-r--r--src/components/application_manager/src/rpc_service_impl.cc56
-rw-r--r--src/components/smart_objects/include/smart_objects/object_schema_item.h7
-rw-r--r--src/components/smart_objects/src/object_schema_item.cc88
5 files changed, 39 insertions, 138 deletions
diff --git a/src/components/application_manager/include/application_manager/rpc_service_impl.h b/src/components/application_manager/include/application_manager/rpc_service_impl.h
index 6f3c1da6ba..3e3d83a519 100644
--- a/src/components/application_manager/include/application_manager/rpc_service_impl.h
+++ b/src/components/application_manager/include/application_manager/rpc_service_impl.h
@@ -157,17 +157,6 @@ class RPCServiceImpl : public RPCService,
Message& output,
const bool allow_unknown_parameters = false);
- /*
- * @brief Handles invalid VehicleData RPC responses from HMI
- * @param mobile_apis::FunctionID - id of function
- * @param MessageSharedPtr - message with payload
- * @return true, if validation of invalid response was done;
- * false, if nothing was done.
- */
- bool HandleInvalidVehicleDataRPC(
- const mobile_apis::FunctionID::eType& api_function_id,
- const application_manager::commands::MessageSharedPtr message);
-
EncryptionFlagCheckResult IsEncryptionRequired(
const smart_objects::SmartObject& message,
ApplicationSharedPtr app,
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc
index f613f3b0c9..9df6d922aa 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc
@@ -289,10 +289,7 @@ void CustomVehicleDataManagerImpl::UpdateVehicleDataItems() {
item.until.is_initialized() ? std::string(*item.until) : "",
bool(*item.deprecated),
bool(*item.removed),
- history,
- SMember::Type::OEM_SPECIFIC); // Mark member as custom as soon as
- // custom data is treated in
- // different way
+ history);
}
case SMemberType::SMEMBER_VDR_MOBILE: {
// valid since struct_schema_items is not used in
@@ -308,10 +305,7 @@ void CustomVehicleDataManagerImpl::UpdateVehicleDataItems() {
item.until.is_initialized() ? std::string(*item.until) : "",
bool(*item.deprecated),
bool(*item.removed),
- history,
- SMember::Type::OEM_SPECIFIC); // Mark member as custom as soon as
- // custom data is treated in
- // different way
+ history);
}
case SMemberType::SMEMBER_MOBILE: {
TSchemaItemParameter<VehicleDataItem> tschema_item(item);
@@ -324,10 +318,7 @@ void CustomVehicleDataManagerImpl::UpdateVehicleDataItems() {
item.until.is_initialized() ? std::string(*item.until) : "",
bool(*item.deprecated),
bool(*item.removed),
- history,
- SMember::Type::OEM_SPECIFIC); // Mark member as custom as soon as
- // custom data is treated in
- // different way
+ history);
}
case SMemberType::SMEMBER_BOOL_HMI: {
auto member_schema =
diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc
index 5413c45bbe..9a2d5d1118 100644
--- a/src/components/application_manager/src/rpc_service_impl.cc
+++ b/src/components/application_manager/src/rpc_service_impl.cc
@@ -463,38 +463,6 @@ void RPCServiceImpl::Handle(const impl::MessageToMobile message) {
}
}
-bool RPCServiceImpl::HandleInvalidVehicleDataRPC(
- const mobile_apis::FunctionID::eType& api_function_id,
- const application_manager::commands::MessageSharedPtr message) {
- switch (api_function_id) {
- case mobile_apis::FunctionID::GetVehicleDataID: {
- if (mobile_apis::Result::SUCCESS ==
- (*message)[strings::msg_params][strings::result_code].asUInt()) {
- smart_objects::SmartObjectSPtr response =
- MessageHelper::CreateNegativeResponse(
- (*message)[strings::params][strings::connection_key].asUInt(),
- api_function_id,
- (*message)[strings::params][strings::correlation_id].asUInt(),
- static_cast<int32_t>(mobile_apis::Result::GENERIC_ERROR));
-
- SendMessageToMobile(response);
- return true;
- }
- break;
- }
-
- case mobile_apis::FunctionID::OnVehicleDataID: {
- return true;
- break;
- }
-
- default:
- break;
- }
-
- return false;
-}
-
void RPCServiceImpl::SendMessageToMobile(
const application_manager::commands::MessageSharedPtr message,
bool final_message) {
@@ -570,26 +538,10 @@ void RPCServiceImpl::SendMessageToMobile(
const auto api_function_id = static_cast<mobile_apis::FunctionID::eType>(
(*message)[strings::params][strings::function_id].asUInt());
- if (app) {
- mobile_so_factory().attachSchema(*message, false, app->msg_version());
- rpc::ValidationReport report("RPC");
- auto validation_result = message->validate(&report, app->msg_version());
- LOG4CXX_DEBUG(logger_,
- "Attached schema to message, result if valid: "
- << validation_result
- << "\nError report: " << rpc::PrettyFormat(report));
-
- if (validation_result != smart_objects::errors::eType::OK) {
- if (HandleInvalidVehicleDataRPC(api_function_id, message)) {
- return;
- }
- }
- } else {
- mobile_so_factory().attachSchema(*message, false);
- LOG4CXX_DEBUG(
- logger_,
- "Attached schema to message, result if valid: " << message->isValid());
- }
+ mobile_so_factory().attachSchema(*message, false);
+ LOG4CXX_DEBUG(
+ logger_,
+ "Attached schema to message, result if valid: " << message->isValid());
if (!ConvertSOtoMessage(
(*message), (*message_to_send), allow_unknown_parameters)) {
diff --git a/src/components/smart_objects/include/smart_objects/object_schema_item.h b/src/components/smart_objects/include/smart_objects/object_schema_item.h
index 3f4481c088..3427a48da9 100644
--- a/src/components/smart_objects/include/smart_objects/object_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/object_schema_item.h
@@ -101,7 +101,6 @@ struct SMember {
boost::optional<utils::SemanticVersion> mUntil;
bool mIsDeprecated;
bool mIsRemoved;
- mutable bool mIsValid;
std::vector<SMember> mHistoryVector;
Type mType;
};
@@ -195,9 +194,11 @@ class CObjectSchemaItem : public ISchemaItem {
/**
* @brief Returns the correct schema item based on message version.
* @param member Schema member
- * @param MmessageVersion Semantic Version of mobile message.
+ * @param MessageVersion Semantic Version of mobile message.
+ * @return Pointer to correct schema item if item found or nullptr, if item
+ *was not found.
**/
- const SMember& GetCorrectMember(const SMember& member,
+ const SMember* GetCorrectMember(const SMember& member,
const utils::SemanticVersion& messageVersion);
/**
diff --git a/src/components/smart_objects/src/object_schema_item.cc b/src/components/smart_objects/src/object_schema_item.cc
index 491a455959..10f3ef96f3 100644
--- a/src/components/smart_objects/src/object_schema_item.cc
+++ b/src/components/smart_objects/src/object_schema_item.cc
@@ -52,9 +52,7 @@ SMember::SMember()
: mSchemaItem(CAlwaysFalseSchemaItem::create())
, mIsMandatory(true)
, mIsDeprecated(false)
- , mIsRemoved(false)
- , mIsValid(true)
- , mType(SMember::Type::RPC_SPECIFIC) {}
+ , mIsRemoved(false) {}
SMember::SMember(const ISchemaItemPtr SchemaItem,
const bool IsMandatory,
@@ -64,10 +62,7 @@ SMember::SMember(const ISchemaItemPtr SchemaItem,
const bool IsRemoved,
const std::vector<SMember>& history_vector,
const Type type)
- : mSchemaItem(SchemaItem)
- , mIsMandatory(IsMandatory)
- , mIsValid(true)
- , mType(type) {
+ : mSchemaItem(SchemaItem), mIsMandatory(IsMandatory) {
if (Since.size() > 0) {
utils::SemanticVersion since_struct(Since);
if (since_struct.isValid()) {
@@ -88,44 +83,17 @@ SMember::SMember(const ISchemaItemPtr SchemaItem,
bool SMember::CheckHistoryFieldVersion(
const utils::SemanticVersion& MessageVersion) const {
if (MessageVersion.isValid()) {
- if (mType == Type::OEM_SPECIFIC) {
- return CheckCustomVehicleData(MessageVersion);
- } else {
- return CheckAPIVehicleData(MessageVersion);
- }
- }
-
- return true; // Not enough version information. Default true.
-}
-
-bool SMember::CheckCustomVehicleData(
- const utils::SemanticVersion& MessageVersion) const {
- if (mSince != boost::none) {
- if (MessageVersion < mSince.get() && MessageVersion < kModuleVersion) {
- return false; // Msg version predates `since` field
+ if (mSince != boost::none) {
+ if (MessageVersion < mSince.get()) {
+ return false; // Msg version predates `since` field
+ }
}
- }
-
- if (mUntil != boost::none && (MessageVersion >= mUntil.get())) {
- return false; // Msg version newer than `until` field
- }
-
- return true;
-}
-
-bool SMember::CheckAPIVehicleData(
- const utils::SemanticVersion& MessageVersion) const {
- if (mSince != boost::none) {
- if (MessageVersion < mSince.get()) {
- return false; // Msg version predates `since` field
+ if (mUntil != boost::none && (MessageVersion >= mUntil.get())) {
+ return false; // Msg version newer than `until` field
}
}
- if (mUntil != boost::none && (MessageVersion >= mUntil.get())) {
- return false; // Msg version newer than `until` field
- }
-
- return true;
+ return true; // Not enough version information. Default true.
}
std::shared_ptr<CObjectSchemaItem> CObjectSchemaItem::create(
@@ -153,12 +121,12 @@ errors::eType CObjectSchemaItem::validate(
++it) {
const std::string& key = it->first;
const SMember& member = it->second;
- const SMember& correct_member = GetCorrectMember(member, MessageVersion);
+ const SMember* correct_member = GetCorrectMember(member, MessageVersion);
std::set<std::string>::const_iterator key_it = object_keys.find(key);
if (object_keys.end() == key_it) {
- if (correct_member.mIsMandatory == true &&
- correct_member.mIsRemoved == false) {
+ if (correct_member && correct_member->mIsMandatory == true &&
+ correct_member->mIsRemoved == false) {
std::string validation_info = "Missing mandatory parameter: " + key;
report__->set_validation_info(validation_info);
return errors::MISSING_MANDATORY_PARAMETER;
@@ -169,11 +137,16 @@ errors::eType CObjectSchemaItem::validate(
errors::eType result = errors::OK;
// Check if MessageVersion matches schema version
- result =
- correct_member.mSchemaItem->validate(field,
- &report__->ReportSubobject(key),
- MessageVersion,
- allow_unknown_enums);
+ if (correct_member) {
+ result =
+ correct_member->mSchemaItem->validate(field,
+ &report__->ReportSubobject(key),
+ MessageVersion,
+ allow_unknown_enums);
+ } else {
+ result = errors::ERROR;
+ }
+
if (errors::OK != result) {
return result;
}
@@ -283,9 +256,9 @@ void CObjectSchemaItem::RemoveFakeParams(
mMembers.find(key);
if (mMembers.end() != members_it) {
- const SMember& member =
+ const SMember* member =
GetCorrectMember(members_it->second, MessageVersion);
- if (member.mIsRemoved || !member.mIsValid) {
+ if (!member || member->mIsRemoved) {
Object.erase(key);
}
continue;
@@ -298,28 +271,23 @@ void CObjectSchemaItem::RemoveFakeParams(
}
}
-const SMember& CObjectSchemaItem::GetCorrectMember(
+const SMember* CObjectSchemaItem::GetCorrectMember(
const SMember& member, const utils::SemanticVersion& messageVersion) {
// Check if member is the correct version
if (member.CheckHistoryFieldVersion(messageVersion)) {
- member.mIsValid = true;
- return member;
+ return &member;
}
// Check for history tag items
if (!member.mHistoryVector.empty()) {
for (uint i = 0; i < member.mHistoryVector.size(); i++) {
if (member.mHistoryVector[i].CheckHistoryFieldVersion(messageVersion)) {
- member.mHistoryVector[i].mIsValid = true;
- return member.mHistoryVector[i];
+ return &member.mHistoryVector[i];
}
}
}
- // If member didn't pass checks above then
- // it becomes not valid and must be removed.
- member.mIsValid = false;
// Return member as default
- return member;
+ return nullptr;
}
} // namespace ns_smart_objects