summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYaroslav Mamykin (GitHub) <ymamykin@luxoft.com>2019-10-10 15:13:41 +0300
committerYarik <ymamykin@gmail.com>2019-11-15 15:16:39 +0200
commitab57fa1a1bbc3f903e8af53ab7cde84c25fcd8eb (patch)
tree1b67ec1bae454308182767ab2fc2d43768e717c5
parent9faf9bff565c824e2bf277d69873770f870f38e5 (diff)
downloadsdl_core-ab57fa1a1bbc3f903e8af53ab7cde84c25fcd8eb.tar.gz
fixup! Fix versioning appliance for vehicle data
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc8
-rw-r--r--src/components/application_manager/src/rpc_handler_impl.cc34
-rw-r--r--src/components/application_manager/src/rpc_service_impl.cc44
-rw-r--r--src/components/smart_objects/include/smart_objects/object_schema_item.h13
-rw-r--r--src/components/smart_objects/src/object_schema_item.cc27
5 files changed, 92 insertions, 34 deletions
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 df401b8a44..490ff7696f 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
@@ -290,7 +290,7 @@ void CustomVehicleDataManagerImpl::UpdateVehicleDataItems() {
bool(*item.deprecated),
bool(*item.removed),
history,
- true); // Mark member as custom as soon as custom data is treated
+ SMember::Type::CUSTOM); // Mark member as custom as soon as custom data is treated
// in different way
}
case SMemberType::SMEMBER_VDR_MOBILE: {
@@ -308,8 +308,8 @@ void CustomVehicleDataManagerImpl::UpdateVehicleDataItems() {
bool(*item.deprecated),
bool(*item.removed),
history,
- true); // Mark member as custom as soon as custom data is treated
- // in different way
+ SMember::Type::CUSTOM); // Mark member as custom as soon as custom data is treated
+ // in different way
}
case SMemberType::SMEMBER_MOBILE: {
TSchemaItemParameter<VehicleDataItem> tschema_item(item);
@@ -323,7 +323,7 @@ void CustomVehicleDataManagerImpl::UpdateVehicleDataItems() {
bool(*item.deprecated),
bool(*item.removed),
history,
- true); // Mark member as custom as soon as custom data is treated
+ SMember::Type::CUSTOM); // Mark member as custom as soon as custom data is treated
// in different way
}
case SMemberType::SMEMBER_BOOL_HMI: {
diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc
index 9a1d815bb2..819236a485 100644
--- a/src/components/application_manager/src/rpc_handler_impl.cc
+++ b/src/components/application_manager/src/rpc_handler_impl.cc
@@ -425,23 +425,23 @@ bool RPCHandlerImpl::ConvertMessageToSO(
return false;
}
- rpc::ValidationReport report("RPC");
-
- utils::SemanticVersion empty_version;
- if (validate_params &&
- smart_objects::errors::OK !=
- output.validate(
- &report, empty_version, allow_unknown_parameters)) {
- LOG4CXX_ERROR(
- logger_,
- "Incorrect parameter from HMI - " << rpc::PrettyFormat(report));
-
- output.erase(strings::msg_params);
- output[strings::params][hmi_response::code] =
- hmi_apis::Common_Result::INVALID_DATA;
- output[strings::msg_params][strings::info] = rpc::PrettyFormat(report);
- return false;
- }
+ // rpc::ValidationReport report("RPC");
+
+ // utils::SemanticVersion empty_version;
+ // if (validate_params &&
+ // smart_objects::errors::OK !=
+ // output.validate(
+ // &report, empty_version, allow_unknown_parameters)) {
+ // LOG4CXX_ERROR(
+ // logger_,
+ // "Incorrect parameter from HMI - " << rpc::PrettyFormat(report));
+
+ // output.erase(strings::msg_params);
+ // output[strings::params][hmi_response::code] =
+ // hmi_apis::Common_Result::INVALID_DATA;
+ // output[strings::msg_params][strings::info] = rpc::PrettyFormat(report);
+ // return false;
+ // }
break;
}
case protocol_handler::MajorProtocolVersion::PROTOCOL_VERSION_1: {
diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc
index 90ab105a2e..bffb63ea72 100644
--- a/src/components/application_manager/src/rpc_service_impl.cc
+++ b/src/components/application_manager/src/rpc_service_impl.cc
@@ -508,11 +508,6 @@ void RPCServiceImpl::SendMessageToMobile(
app->usage_report().RecordRejectionsSyncOutOfMemory();
}
- mobile_so_factory().attachSchema(*message, false);
- LOG4CXX_DEBUG(
- logger_,
- "Attached schema to message, result if valid: " << message->isValid());
-
// Messages to mobile are not yet prioritized so use default priority value
std::shared_ptr<Message> message_to_send(
new Message(protocol_handler::MessagePriority::kDefault));
@@ -539,13 +534,43 @@ void RPCServiceImpl::SendMessageToMobile(
(*message)[jhs::S_PARAMS][jhs::S_MESSAGE_TYPE].asInt())) {
allow_unknown_parameters = false;
}
+
+
+ LOG4CXX_ERROR(logger_, "ALLOW UNKNOWN PARAMS = " << allow_unknown_parameters);
+ mobile_so_factory().attachSchema(*message, !allow_unknown_parameters, app->msg_version());
+ rpc::ValidationReport report("RPC");
+ auto validation_result = message->validate(&report, app->msg_version(), allow_unknown_parameters);
+ LOG4CXX_DEBUG(
+ logger_,
+ "Attached schema to message, result if valid: " << validation_result << "\nError report: " << rpc::PrettyFormat(report));
+
+ const auto api_function_id = static_cast<mobile_apis::FunctionID::eType>(
+ (*message)[strings::params][strings::function_id].asUInt());
+
+ if (api_function_id == mobile_apis::FunctionID::GetVehicleDataID) {
+ if (validation_result != smart_objects::errors::eType::OK) {
+ 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;
+ }
+ }
+ }
+
if (!ConvertSOtoMessage(
(*message), (*message_to_send), allow_unknown_parameters)) {
LOG4CXX_WARN(logger_, "Can't send msg to Mobile: failed to create string");
return;
}
- const auto api_function_id = static_cast<mobile_apis::FunctionID::eType>(
- (*message)[strings::params][strings::function_id].asUInt());
+
+ MessageHelper::PrintSmartObject(*message);
smart_objects::SmartObject& msg_to_mobile = *message;
// If correlation_id is not present, it is from-HMI message which should be
@@ -556,6 +581,11 @@ void RPCServiceImpl::SendMessageToMobile(
msg_to_mobile[strings::params][strings::connection_key].asUInt(),
msg_to_mobile[strings::params][strings::function_id].asInt());
} else if (app) {
+
+ if (validation_result != smart_objects::errors::eType::OK) {
+ return;
+ }
+
RPCParams params;
const smart_objects::SmartObject& s_map = (*message)[strings::msg_params];
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 cdd5368b76..7156a6dbc0 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
@@ -50,6 +50,12 @@ namespace ns_smart_objects {
* @brief Object member.
**/
struct SMember {
+
+ enum class Type {
+ CUSTOM = 0,
+ API = 1
+ };
+
/**
* @brief Default constructor.
**/
@@ -68,7 +74,8 @@ struct SMember {
const bool IsDeprecated = false,
const bool IsRemoved = false,
const std::vector<SMember>& history_vector = {},
- const bool IsCustom = false);
+ const Type type = Type::API);
+
/**
* @brief Checks the version a parameter was removed (until)
* If the mobile's msg version is greater than or
@@ -76,6 +83,8 @@ struct SMember {
bool CheckHistoryFieldVersion(
const utils::SemanticVersion& MessageVersion) const;
+ std::string to_string() const;
+
private:
bool CheckCustomVehicleData(
const utils::SemanticVersion& MessageVersion) const;
@@ -97,7 +106,7 @@ struct SMember {
bool mIsRemoved;
mutable bool mIsValid;
std::vector<SMember> mHistoryVector;
- bool mIsCustom;
+ Type mType;
};
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 02ba989ea0..14d602e2c1 100644
--- a/src/components/smart_objects/src/object_schema_item.cc
+++ b/src/components/smart_objects/src/object_schema_item.cc
@@ -32,6 +32,7 @@
#include "smart_objects/object_schema_item.h"
#include <algorithm>
+#include <sstream>
#include "generated_msg_version.h"
#include "smart_objects/always_false_schema_item.h"
@@ -55,7 +56,7 @@ SMember::SMember()
, mIsDeprecated(false)
, mIsRemoved(false)
, mIsValid(true)
- , mIsCustom(false) {}
+ , mType(SMember::Type::API) {}
SMember::SMember(const ISchemaItemPtr SchemaItem,
const bool IsMandatory,
@@ -64,11 +65,11 @@ SMember::SMember(const ISchemaItemPtr SchemaItem,
const bool IsDeprecated,
const bool IsRemoved,
const std::vector<SMember>& history_vector,
- const bool IsCustom)
+ const Type type)
: mSchemaItem(SchemaItem)
, mIsMandatory(IsMandatory)
, mIsValid(true)
- , mIsCustom(IsCustom) {
+ , mType(type) {
if (Since.size() > 0) {
utils::SemanticVersion since_struct(Since);
if (since_struct.isValid()) {
@@ -89,9 +90,11 @@ SMember::SMember(const ISchemaItemPtr SchemaItem,
bool SMember::CheckHistoryFieldVersion(
const utils::SemanticVersion& MessageVersion) const {
if (MessageVersion.isValid()) {
- if (mIsCustom) {
+ if (mType == Type::CUSTOM) {
+ LOG4CXX_ERROR(vehicle_log, "CHECKING CUSTOM DATA: ");
return CheckCustomVehicleData(MessageVersion);
} else {
+ LOG4CXX_ERROR(vehicle_log, "CHECKING API DATA: ");
return CheckAPIVehicleData(MessageVersion);
}
}
@@ -129,6 +132,20 @@ bool SMember::CheckAPIVehicleData(
return true;
}
+std::string SMember::to_string() const {
+ std::ostringstream out;
+
+ out << "Mandatory: " << mIsMandatory << "\n";
+ out << "Deprecated: " << mIsDeprecated << "\n";
+ out << "Removed: " << mIsRemoved << "\n";
+ out << "Valid: " << mIsValid << "\n";
+ out << "Type: " << (mType == Type::API ? "API" : "CUSTOM") << "\n";
+ out << "Since: " << (mSince != boost::none ? mSince.get().toString() : "NONE") << "\n";
+ out << "Until: " << (mUntil != boost::none ? mUntil.get().toString() : "NONE") << "\n";
+
+ return out.str();
+}
+
std::shared_ptr<CObjectSchemaItem> CObjectSchemaItem::create(
const Members& members) {
return std::shared_ptr<CObjectSchemaItem>(new CObjectSchemaItem(members));
@@ -156,6 +173,8 @@ errors::eType CObjectSchemaItem::validate(
const SMember& member = it->second;
const SMember& correct_member = GetCorrectMember(member, MessageVersion);
+ LOG4CXX_ERROR(vehicle_log, "" << key << " INFO: " << correct_member.to_string());
+
std::set<std::string>::const_iterator key_it = object_keys.find(key);
if (object_keys.end() == key_it) {
if (correct_member.mIsMandatory == true &&