summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYaroslav Mamykin (GitHub) <ymamykin@luxoft.com>2019-09-05 14:03:34 +0300
committerYaroslav Mamykin (GitHub) <ymamykin@luxoft.com>2019-09-24 12:17:58 +0300
commit6a54a8f7938f938868864d96d10b1bf4aabc6ebf (patch)
treeb5d04fafe8fba24807fb6bb68c020bd4d362f19f
parent6b43b00cdcafb5bc386a9fac603b596b882b4c39 (diff)
downloadsdl_core-6a54a8f7938f938868864d96d10b1bf4aabc6ebf.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
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc6
-rw-r--r--src/components/application_manager/src/rpc_handler_impl.cc6
-rw-r--r--src/components/application_manager/src/rpc_service_impl.cc3
-rw-r--r--src/components/smart_objects/include/smart_objects/object_schema_item.h1
-rw-r--r--src/components/smart_objects/src/object_schema_item.cc37
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 c4bc5cb486..4d41f69b49 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 d1ca05e9a1..3fee1da9e4 100644
--- a/src/components/application_manager/src/rpc_handler_impl.cc
+++ b/src/components/application_manager/src/rpc_handler_impl.cc
@@ -294,11 +294,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 e29edd8f59..5bc4094f93 100644
--- a/src/components/application_manager/src/rpc_service_impl.cc
+++ b/src/components/application_manager/src/rpc_service_impl.cc
@@ -179,9 +179,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;
}