summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYaroslav Mamykin (GitHub) <ymamykin@luxoft.com>2019-09-05 14:03:34 +0300
committerYarik <ymamykin@gmail.com>2019-11-15 15:16:38 +0200
commit6e01ff7ca921fd1d1af9a01cdb0cadfca14ea519 (patch)
tree9394d29e7e6e282409b4da723caa5f1c2eda204f
parent891497bc9fb23434242dbe92e1f13dd1273fcb21 (diff)
downloadsdl_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
-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 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;
}