diff options
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, |