diff options
author | Yaroslav Mamykin (GitHub) <ymamykin@luxoft.com> | 2019-09-05 14:03:34 +0300 |
---|---|---|
committer | Yarik <ymamykin@gmail.com> | 2019-11-15 15:16:38 +0200 |
commit | 6e01ff7ca921fd1d1af9a01cdb0cadfca14ea519 (patch) | |
tree | 9394d29e7e6e282409b4da723caa5f1c2eda204f | |
parent | 891497bc9fb23434242dbe92e1f13dd1273fcb21 (diff) | |
download | sdl_core-6e01ff7ca921fd1d1af9a01cdb0cadfca14ea519.tar.gz |
Fix versioning appliance for vehicle data
SDL applied SyncMsgVersion=4.5.1 in case mobile app version was < 5.0
With this commit SDL applies SyncMsgVersion respectively to mobile app
5 files changed, 26 insertions, 27 deletions
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc index 14a94fd1a2..b32f660bd2 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc @@ -383,11 +383,7 @@ void RegisterAppInterfaceRequest::Run() { // Version negotiation utils::SemanticVersion module_version( major_version, minor_version, patch_version); - if (mobile_version < utils::rpc_version_5) { - // Mobile versioning did not exist for - // versions before 5.0 - application->set_msg_version(utils::base_rpc_version); - } else if (mobile_version < module_version) { + if (mobile_version < module_version) { // Use mobile RPC version as negotiated version application->set_msg_version(mobile_version); } else { diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc index 695d94628d..afe0533d25 100644 --- a/src/components/application_manager/src/rpc_handler_impl.cc +++ b/src/components/application_manager/src/rpc_handler_impl.cc @@ -308,11 +308,11 @@ void RPCHandlerImpl::GetMessageVersion( if (sync_msg_version.keyExists(strings::patch_version)) { patch = sync_msg_version[strings::patch_version].asUInt(); } + + message_version = utils::base_rpc_version; utils::SemanticVersion temp_version(major, minor, patch); if (temp_version.isValid()) { - message_version = (temp_version >= utils::rpc_version_5) - ? temp_version - : utils::base_rpc_version; + message_version = temp_version; } } } diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc index 79b2cbd752..90ab105a2e 100644 --- a/src/components/application_manager/src/rpc_service_impl.cc +++ b/src/components/application_manager/src/rpc_service_impl.cc @@ -186,9 +186,6 @@ bool RPCServiceImpl::ManageMobileCommand( return false; } #endif // ENABLE_SECURITY - - // Message for "CheckPermission" must be with attached schema - mobile_so_factory().attachSchema(*message, false); } auto plugin = 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 ee42b36620..3ff8ada8c6 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 @@ -87,6 +87,7 @@ struct SMember { boost::optional<utils::SemanticVersion> mUntil; bool mIsDeprecated; bool mIsRemoved; + mutable bool mIsValid; std::vector<SMember> mHistoryVector; }; typedef std::map<std::string, SMember> Members; diff --git a/src/components/smart_objects/src/object_schema_item.cc b/src/components/smart_objects/src/object_schema_item.cc index 01e4ec46e0..876749b256 100644 --- a/src/components/smart_objects/src/object_schema_item.cc +++ b/src/components/smart_objects/src/object_schema_item.cc @@ -48,7 +48,8 @@ SMember::SMember() : mSchemaItem(CAlwaysFalseSchemaItem::create()) , mIsMandatory(true) , mIsDeprecated(false) - , mIsRemoved(false) {} + , mIsRemoved(false) + , mIsValid(true) {} SMember::SMember(const ISchemaItemPtr SchemaItem, const bool IsMandatory, @@ -57,7 +58,7 @@ SMember::SMember(const ISchemaItemPtr SchemaItem, const bool IsDeprecated, const bool IsRemoved, const std::vector<SMember>& history_vector) - : mSchemaItem(SchemaItem), mIsMandatory(IsMandatory) { + : mSchemaItem(SchemaItem), mIsMandatory(IsMandatory), mIsValid(true) { if (Since.size() > 0) { utils::SemanticVersion since_struct(Since); if (since_struct.isValid()) { @@ -251,25 +252,23 @@ CObjectSchemaItem::CObjectSchemaItem(const Members& members) void CObjectSchemaItem::RemoveFakeParams( SmartObject& Object, const utils::SemanticVersion& MessageVersion) { - for (SmartMap::const_iterator it = Object.map_begin(); - it != Object.map_end();) { + for (SmartMap::const_iterator it = Object.map_begin(); it != Object.map_end(); + ++it) { const std::string& key = it->first; std::map<std::string, SMember>::const_iterator members_it = mMembers.find(key); - if (mMembers.end() == members_it - // FIXME(EZamakhov): Remove illegal usage of filed in AM - && key.compare(connection_key) != 0 && key.compare(binary_data) != 0 && - key.compare(app_id) != 0) { - ++it; - Object.erase(key); - } else if (mMembers.end() != members_it && - GetCorrectMember(members_it->second, MessageVersion) - .mIsRemoved) { - ++it; + if (mMembers.end() == members_it && key.compare(connection_key) != 0 && + key.compare(binary_data) != 0 && key.compare(app_id) != 0) { Object.erase(key); - } else { - ++it; + } + + if (mMembers.end() != members_it) { + const SMember& member = + GetCorrectMember(members_it->second, MessageVersion); + if (member.mIsRemoved || !member.mIsValid) { + Object.erase(key); + } } } } @@ -278,16 +277,22 @@ 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; } // 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]; } } } + + // 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; } |