diff options
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 |