summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Zhdanov (GitHub) <39907184+ZhdanovP@users.noreply.github.com>2020-01-21 23:25:44 +0200
committerCollin <iCollin@users.noreply.github.com>2020-01-21 16:25:44 -0500
commit8988054cb8408aa4b62bd5968cec3c823f61de62 (patch)
tree10a9e86a4e19aaba988e670d86d77dde846e965d
parent6710b2e04ba5417ce1c0e1794b473963bf51df08 (diff)
downloadsdl_core-8988054cb8408aa4b62bd5968cec3c823f61de62.tar.gz
Handle wrong message type from HMI was added (#2394)
* Handle wrong message type from HMI was added * Fixed ignored request from HMI in case of invalid data. utils::SharedPtr replaced with std::shared_ptr for ProcessMessageFromHMI and ProcessMessageFromMobile in rpc_handler. New parameter "report" in HandleWrongMessageType in order to get a proper error message in response. Redundant log message removed from sdl_activate_app_request. INVALID_DATA now will be sent as a response to HMI in case of wrong parameters in the request. Co-authored-by: Mykola Korniichuk (GitHub) <42380041+mkorniichuk@users.noreply.github.com>
-rw-r--r--src/components/application_manager/include/application_manager/rpc_handler_impl.h10
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc4
-rw-r--r--src/components/application_manager/src/rpc_handler_impl.cc49
3 files changed, 53 insertions, 10 deletions
diff --git a/src/components/application_manager/include/application_manager/rpc_handler_impl.h b/src/components/application_manager/include/application_manager/rpc_handler_impl.h
index b1e94ab331..11ac1745ee 100644
--- a/src/components/application_manager/include/application_manager/rpc_handler_impl.h
+++ b/src/components/application_manager/include/application_manager/rpc_handler_impl.h
@@ -162,8 +162,18 @@ class RPCHandlerImpl : public RPCHandler,
bool allow_unknown_parameters) OVERRIDE;
private:
+ /**
+ * @brief Checks if message has to be sent to mobile or not
+ * update output message according to checks
+ * @param output - message to check
+ * @returns true if message type is response otherwise false
+ */
+ bool HandleWrongMessageType(smart_objects::SmartObject& output,
+ rpc::ValidationReport report) const;
+
void ProcessMessageFromMobile(const std::shared_ptr<Message> message);
void ProcessMessageFromHMI(const std::shared_ptr<Message> message);
+
bool ConvertMessageToSO(const Message& message,
smart_objects::SmartObject& output,
const bool allow_unknown_parameters = false,
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
index 13690809bb..0a6632fca8 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
@@ -154,10 +154,6 @@ void SDLActivateAppRequest::Run() {
application_manager_.application(application_id);
if (!app_to_activate) {
- LOG4CXX_WARN(
- logger_,
- "Can't find application within regular apps: " << application_id);
-
// Here is the hack - in fact SDL gets hmi_app_id in appID field and
// replaces it with connection_key only for normally registered apps, but
// for apps_to_be_registered (waiting) it keeps original value (hmi_app_id)
diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc
index e8468e95cc..0a62bc8498 100644
--- a/src/components/application_manager/src/rpc_handler_impl.cc
+++ b/src/components/application_manager/src/rpc_handler_impl.cc
@@ -419,7 +419,7 @@ bool RPCHandlerImpl::ConvertMessageToSO(
"Convertion result: "
<< result << " function id "
<< output[jhs::S_PARAMS][jhs::S_FUNCTION_ID].asInt());
- if (!hmi_so_factory().attachSchema(output, false)) {
+ if (!hmi_so_factory().attachSchema(output, true)) {
LOG4CXX_WARN(logger_, "Failed to attach schema to object.");
return false;
}
@@ -435,11 +435,7 @@ bool RPCHandlerImpl::ConvertMessageToSO(
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;
+ return HandleWrongMessageType(output, report);
}
break;
}
@@ -492,6 +488,47 @@ bool RPCHandlerImpl::ConvertMessageToSO(
return true;
}
+bool RPCHandlerImpl::HandleWrongMessageType(
+ smart_objects::SmartObject& output, rpc::ValidationReport report) const {
+ LOG4CXX_AUTO_TRACE(logger_);
+ switch (output[strings::params][strings::message_type].asInt()) {
+ case application_manager::MessageType::kNotification: {
+ LOG4CXX_ERROR(logger_, "Ignore wrong HMI notification");
+ return false;
+ }
+ case application_manager::MessageType::kRequest: {
+ LOG4CXX_ERROR(logger_, "Received invalid data on HMI request");
+ output.erase(strings::msg_params);
+ output[strings::params].erase(hmi_response::message);
+ output[strings::params][hmi_response::code] =
+ hmi_apis::Common_Result::INVALID_DATA;
+ output[strings::params][strings::message_type] =
+ MessageType::kErrorResponse;
+ output[strings::params][strings::error_msg] = rpc::PrettyFormat(report);
+ return true;
+ }
+ case application_manager::MessageType::kResponse: {
+ LOG4CXX_ERROR(logger_, "Received invalid data on HMI response");
+ break;
+ }
+ case application_manager::MessageType::kUnknownType: {
+ LOG4CXX_ERROR(logger_, "Received unknown type data on HMI");
+ break;
+ }
+ default: {
+ LOG4CXX_ERROR(logger_, "Received error response on HMI");
+ break;
+ }
+ }
+ output.erase(strings::msg_params);
+ output[strings::params].erase(hmi_response::message);
+ output[strings::params][hmi_response::code] =
+ hmi_apis::Common_Result::GENERIC_ERROR;
+ output[strings::msg_params][strings::info] =
+ std::string("Invalid message received from vehicle");
+ return true;
+}
+
bool RPCHandlerImpl::ValidateRpcSO(smart_objects::SmartObject& message,
utils::SemanticVersion& msg_version,
rpc::ValidationReport& report_out,