summaryrefslogtreecommitdiff
path: root/src/components/application_manager/src/commands/command_request_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/application_manager/src/commands/command_request_impl.cc')
-rw-r--r--src/components/application_manager/src/commands/command_request_impl.cc201
1 files changed, 104 insertions, 97 deletions
diff --git a/src/components/application_manager/src/commands/command_request_impl.cc b/src/components/application_manager/src/commands/command_request_impl.cc
index 544b12a290..b3b463328f 100644
--- a/src/components/application_manager/src/commands/command_request_impl.cc
+++ b/src/components/application_manager/src/commands/command_request_impl.cc
@@ -33,7 +33,7 @@
#include <algorithm>
#include <string>
#include "application_manager/commands/command_request_impl.h"
-#include "application_manager/application_manager_impl.h"
+#include "application_manager/application_manager.h"
#include "application_manager/message_helper.h"
#include "smart_objects/smart_object.h"
@@ -44,9 +44,7 @@ namespace commands {
struct DisallowedParamsInserter {
DisallowedParamsInserter(smart_objects::SmartObject& response,
mobile_apis::VehicleDataResultCode::eType code)
- : response_(response),
- code_(code) {
- }
+ : response_(response), code_(code) {}
bool operator()(const std::string& param) {
const VehicleData& vehicle_data =
@@ -62,18 +60,19 @@ struct DisallowedParamsInserter {
}
return false;
}
-private:
+
+ private:
smart_objects::SmartObject& response_;
mobile_apis::VehicleDataResultCode::eType code_;
};
-CommandRequestImpl::CommandRequestImpl(const MessageSharedPtr& message)
- : CommandImpl(message),
- current_state_(kAwaitingHMIResponse) {
-}
+CommandRequestImpl::CommandRequestImpl(const MessageSharedPtr& message,
+ ApplicationManager& application_manager)
+ : CommandImpl(message, application_manager)
+ , EventObserver(application_manager.event_dispatcher())
+ , current_state_(kAwaitingHMIResponse) {}
-CommandRequestImpl::~CommandRequestImpl() {
-}
+CommandRequestImpl::~CommandRequestImpl() {}
bool CommandRequestImpl::Init() {
return true;
@@ -87,8 +86,7 @@ bool CommandRequestImpl::CleanUp() {
return true;
}
-void CommandRequestImpl::Run() {
-}
+void CommandRequestImpl::Run() {}
void CommandRequestImpl::onTimeOut() {
LOG4CXX_AUTO_TRACE(logger_);
@@ -107,19 +105,21 @@ void CommandRequestImpl::onTimeOut() {
}
smart_objects::SmartObjectSPtr response =
- MessageHelper::CreateNegativeResponse(connection_key(), function_id(),
- correlation_id(), mobile_api::Result::GENERIC_ERROR);
+ MessageHelper::CreateNegativeResponse(connection_key(),
+ function_id(),
+ correlation_id(),
+ mobile_api::Result::GENERIC_ERROR);
- ApplicationManagerImpl::instance()->ManageMobileCommand(response);
+ application_manager_.ManageMobileCommand(response, ORIGIN_SDL);
}
-void CommandRequestImpl::on_event(const event_engine::Event& event) {
-}
+void CommandRequestImpl::on_event(const event_engine::Event& event) {}
void CommandRequestImpl::SendResponse(
- const bool success, const mobile_apis::Result::eType& result_code,
- const char* info, const smart_objects::SmartObject* response_params) {
-
+ const bool success,
+ const mobile_apis::Result::eType& result_code,
+ const char* info,
+ const smart_objects::SmartObject* response_params) {
{
sync_primitives::AutoLock auto_lock(state_lock_);
if (kTimedOut == current_state_) {
@@ -154,12 +154,13 @@ void CommandRequestImpl::SendResponse(
response[strings::msg_params][strings::info] = std::string(info);
}
- // Add disallowed parameters and info from request back to response with appropriate
+ // Add disallowed parameters and info from request back to response with
+ // appropriate
// reasons (VehicleData result codes)
if (result_code != mobile_apis::Result::APPLICATION_NOT_REGISTERED) {
const mobile_apis::FunctionID::eType& id =
static_cast<mobile_apis::FunctionID::eType>(function_id());
- if ((id == mobile_apis::FunctionID::SubscribeVehicleDataID) ||
+ if ((id == mobile_apis::FunctionID::SubscribeVehicleDataID) ||
(id == mobile_apis::FunctionID::UnsubscribeVehicleDataID)) {
AddDisallowedParameters(response);
AddDisallowedParametersToInfo(response);
@@ -171,10 +172,11 @@ void CommandRequestImpl::SendResponse(
response[strings::msg_params][strings::success] = success;
response[strings::msg_params][strings::result_code] = result_code;
- ApplicationManagerImpl::instance()->ManageMobileCommand(result);
+ application_manager_.ManageMobileCommand(result, ORIGIN_SDL);
}
-bool CommandRequestImpl::CheckSyntax(std::string str, bool allow_empty_line) {
+bool CommandRequestImpl::CheckSyntax(const std::string& str,
+ bool allow_empty_line) {
if (std::string::npos != str.find_first_of("\t\n")) {
LOG4CXX_ERROR(logger_, "CheckSyntax failed! :" << str);
return false;
@@ -194,14 +196,16 @@ bool CommandRequestImpl::CheckSyntax(std::string str, bool allow_empty_line) {
uint32_t CommandRequestImpl::SendHMIRequest(
const hmi_apis::FunctionID::eType& function_id,
- const smart_objects::SmartObject* msg_params, bool use_events) {
-
+ const smart_objects::SmartObject* msg_params,
+ bool use_events) {
smart_objects::SmartObjectSPtr result = new smart_objects::SmartObject;
const uint32_t hmi_correlation_id =
- ApplicationManagerImpl::instance()->GetNextHMICorrelationID();
+ application_manager_.GetNextHMICorrelationID();
if (use_events) {
- LOG4CXX_DEBUG(logger_, "subscribe_on_event " << function_id << " " << hmi_correlation_id);
+ LOG4CXX_DEBUG(logger_,
+ "subscribe_on_event " << function_id << " "
+ << hmi_correlation_id);
subscribe_on_event(function_id, hmi_correlation_id);
}
@@ -218,7 +222,7 @@ uint32_t CommandRequestImpl::SendHMIRequest(
request[strings::msg_params] = *msg_params;
}
- if (!ApplicationManagerImpl::instance()->ManageHMICommand(result)) {
+ if (!application_manager_.ManageHMICommand(result)) {
LOG4CXX_ERROR(logger_, "Unable to send request");
SendResponse(false, mobile_apis::Result::OUT_OF_MEMORY);
}
@@ -228,7 +232,6 @@ uint32_t CommandRequestImpl::SendHMIRequest(
void CommandRequestImpl::CreateHMINotification(
const hmi_apis::FunctionID::eType& function_id,
const NsSmart::SmartObject& msg_params) const {
-
smart_objects::SmartObjectSPtr result = new smart_objects::SmartObject;
if (!result) {
LOG4CXX_ERROR(logger_, "Memory allocation failed.");
@@ -245,14 +248,13 @@ void CommandRequestImpl::CreateHMINotification(
notify[strings::params][strings::function_id] = function_id;
notify[strings::msg_params] = msg_params;
- if (!ApplicationManagerImpl::instance()->ManageHMICommand(result)) {
+ if (!application_manager_.ManageHMICommand(result)) {
LOG4CXX_ERROR(logger_, "Unable to send HMI notification");
}
}
mobile_apis::Result::eType CommandRequestImpl::GetMobileResultCode(
const hmi_apis::Common_Result::eType& hmi_code) const {
-
mobile_apis::Result::eType mobile_result = mobile_apis::Result::GENERIC_ERROR;
switch (hmi_code) {
case hmi_apis::Common_Result::SUCCESS: {
@@ -351,6 +353,10 @@ mobile_apis::Result::eType CommandRequestImpl::GetMobileResultCode(
mobile_result = mobile_apis::Result::USER_DISALLOWED;
break;
}
+ case hmi_apis::Common_Result::SAVED: {
+ mobile_result = mobile_apis::Result::SAVED;
+ break;
+ }
default: {
LOG4CXX_ERROR(logger_, "Unknown HMI result code " << hmi_code);
break;
@@ -361,7 +367,7 @@ mobile_apis::Result::eType CommandRequestImpl::GetMobileResultCode(
}
bool CommandRequestImpl::CheckAllowedParameters() {
- LOG4CXX_INFO(logger_, "CheckAllowedParameters");
+ LOG4CXX_AUTO_TRACE(logger_);
// RegisterAppInterface should always be allowed
if (mobile_apis::FunctionID::RegisterAppInterfaceID ==
@@ -369,97 +375,96 @@ bool CommandRequestImpl::CheckAllowedParameters() {
return true;
}
- ApplicationManagerImpl::ApplicationListAccessor accessor;
- ApplicationManagerImpl::ApplictionSetConstIt it_app_list =
- accessor.begin();
- ApplicationManagerImpl::ApplictionSetConstIt it_app_list_end =
- accessor.end();
+ const ApplicationSet& accessor =
+ application_manager_.applications().GetData();
+ ApplicationSetConstIt it_app_list = accessor.begin();
+ ApplicationSetConstIt it_app_list_end = accessor.end();
for (; it_app_list != it_app_list_end; ++it_app_list) {
if (connection_key() == (*it_app_list).get()->app_id()) {
-
RPCParams params;
- const smart_objects::SmartObject& s_map = (*message_)[strings::msg_params];
+ const smart_objects::SmartObject& s_map =
+ (*message_)[strings::msg_params];
if (smart_objects::SmartType_Map == s_map.getType()) {
smart_objects::SmartMap::iterator iter = s_map.map_begin();
smart_objects::SmartMap::iterator iter_end = s_map.map_end();
for (; iter != iter_end; ++iter) {
if (true == iter->second.asBool()) {
- LOG4CXX_INFO(logger_, "Request's param: " << iter->first);
+ LOG4CXX_DEBUG(logger_, "Request's param: " << iter->first);
params.push_back(iter->first);
}
}
}
- CommandParametersPermissions params_permissions;
mobile_apis::Result::eType check_result =
- application_manager::ApplicationManagerImpl::instance()->
- CheckPolicyPermissions(
- (*it_app_list).get()->mobile_app_id(),
- (*it_app_list).get()->hmi_level(),
- static_cast<mobile_api::FunctionID::eType>(function_id()),
- params,
- &params_permissions);
+ application_manager_.CheckPolicyPermissions(
+ (*it_app_list).get()->policy_app_id(),
+ (*it_app_list).get()->hmi_level(),
+ static_cast<mobile_api::FunctionID::eType>(function_id()),
+ params,
+ &parameters_permissions_);
// Check, if RPC is allowed by policy
if (mobile_apis::Result::SUCCESS != check_result) {
smart_objects::SmartObjectSPtr response =
- MessageHelper::CreateBlockedByPoliciesResponse(
- static_cast<mobile_api::FunctionID::eType>(function_id()),
- check_result, correlation_id(), (*it_app_list)->app_id());
+ MessageHelper::CreateBlockedByPoliciesResponse(
+ static_cast<mobile_api::FunctionID::eType>(function_id()),
+ check_result,
+ correlation_id(),
+ (*it_app_list)->app_id());
- ApplicationManagerImpl::instance()->SendMessageToMobile(response);
+ application_manager_.SendMessageToMobile(response);
return false;
}
// If no parameters specified in policy table, no restriction will be
// applied for parameters
- if (params_permissions.allowed_params.empty() &&
- params_permissions.disallowed_params.empty() &&
- params_permissions.undefined_params.empty()) {
+ if (parameters_permissions_.allowed_params.empty() &&
+ parameters_permissions_.disallowed_params.empty() &&
+ parameters_permissions_.undefined_params.empty()) {
return true;
}
- RemoveDisallowedParameters(params_permissions);
+ RemoveDisallowedParameters();
}
}
return true;
}
-void CommandRequestImpl::RemoveDisallowedParameters(
- const CommandParametersPermissions& params_permissions) {
- LOG4CXX_INFO(logger_, "RemoveDisallowedParameters");
+void CommandRequestImpl::RemoveDisallowedParameters() {
+ LOG4CXX_AUTO_TRACE(logger_);
smart_objects::SmartObject& params = (*message_)[strings::msg_params];
// Remove from request all disallowed parameters
std::vector<std::string>::const_iterator it_disallowed =
- params_permissions.disallowed_params.begin();
+ parameters_permissions_.disallowed_params.begin();
std::vector<std::string>::const_iterator it_disallowed_end =
- params_permissions.disallowed_params.end();
- for (;it_disallowed != it_disallowed_end; ++it_disallowed) {
+ parameters_permissions_.disallowed_params.end();
+ for (; it_disallowed != it_disallowed_end; ++it_disallowed) {
if (params.keyExists(*it_disallowed)) {
params.erase(*it_disallowed);
- parameters_permissions_.disallowed_params.push_back(
- *it_disallowed);
- LOG4CXX_INFO(logger_, "Following parameter is disallowed by user: "
- << *it_disallowed);
+ removed_parameters_permissions_.disallowed_params.push_back(
+ *it_disallowed);
+ LOG4CXX_INFO(
+ logger_,
+ "Following parameter is disallowed by user: " << *it_disallowed);
}
}
// Remove from request all undefined yet parameters
std::vector<std::string>::const_iterator it_undefined =
- params_permissions.undefined_params.begin();
+ parameters_permissions_.undefined_params.begin();
std::vector<std::string>::const_iterator it_undefined_end =
- params_permissions.undefined_params.end();
- for (;it_undefined != it_undefined_end; ++it_undefined) {
+ parameters_permissions_.undefined_params.end();
+ for (; it_undefined != it_undefined_end; ++it_undefined) {
if (params.keyExists(*it_undefined)) {
params.erase(*it_undefined);
- parameters_permissions_.undefined_params.push_back(
- *it_undefined);
- LOG4CXX_INFO(logger_, "Following parameter is disallowed by policy: "
- << *it_undefined);
+ removed_parameters_permissions_.undefined_params.push_back(*it_undefined);
+ LOG4CXX_INFO(
+ logger_,
+ "Following parameter is disallowed by policy: " << *it_undefined);
}
}
@@ -469,19 +474,18 @@ void CommandRequestImpl::RemoveDisallowedParameters(
VehicleData::const_iterator it_vehicle_data = vehicle_data.begin();
VehicleData::const_iterator it_vehicle_data_end = vehicle_data.end();
- for (;it_vehicle_data != it_vehicle_data_end; ++it_vehicle_data) {
+ for (; it_vehicle_data != it_vehicle_data_end; ++it_vehicle_data) {
const std::string key = it_vehicle_data->first;
if (params.keyExists(key) &&
- params_permissions.allowed_params.end() ==
- std::find(params_permissions.allowed_params.begin(),
- params_permissions.allowed_params.end(),
- key)) {
+ parameters_permissions_.allowed_params.end() ==
+ std::find(parameters_permissions_.allowed_params.begin(),
+ parameters_permissions_.allowed_params.end(),
+ key)) {
params.erase(key);
- parameters_permissions_.undefined_params.push_back(key);
+ removed_parameters_permissions_.undefined_params.push_back(key);
LOG4CXX_INFO(logger_,
"Following parameter is not found among allowed parameters '"
- << key
- << "' and will be treated as disallowed.");
+ << key << "' and will be treated as disallowed.");
}
}
}
@@ -501,13 +505,13 @@ void CommandRequestImpl::AddDisallowedParametersToInfo(
std::string info;
std::vector<std::string>::const_iterator it =
- parameters_permissions_.disallowed_params.begin();
- for (; it != parameters_permissions_.disallowed_params.end(); ++it) {
+ removed_parameters_permissions_.disallowed_params.begin();
+ for (; it != removed_parameters_permissions_.disallowed_params.end(); ++it) {
AddDissalowedParameterToInfoString(info, (*it));
}
- it = parameters_permissions_.undefined_params.begin();
- for (; it != parameters_permissions_.undefined_params.end(); ++it) {
+ it = removed_parameters_permissions_.undefined_params.begin();
+ for (; it != removed_parameters_permissions_.undefined_params.end(); ++it) {
AddDissalowedParameterToInfoString(info, (*it));
}
@@ -527,23 +531,26 @@ void CommandRequestImpl::AddDisallowedParametersToInfo(
void CommandRequestImpl::AddDisallowedParameters(
smart_objects::SmartObject& response) {
DisallowedParamsInserter disallowed_inserter(
- response,
- mobile_apis::VehicleDataResultCode::VDRC_USER_DISALLOWED);
- std::for_each(parameters_permissions_.disallowed_params.begin(),
- parameters_permissions_.disallowed_params.end(),
+ response, mobile_apis::VehicleDataResultCode::VDRC_USER_DISALLOWED);
+ std::for_each(removed_parameters_permissions_.disallowed_params.begin(),
+ removed_parameters_permissions_.disallowed_params.end(),
disallowed_inserter);
DisallowedParamsInserter undefined_inserter(
- response,
- mobile_apis::VehicleDataResultCode::VDRC_DISALLOWED);
- std::for_each(parameters_permissions_.undefined_params.begin(),
- parameters_permissions_.undefined_params.end(),
+ response, mobile_apis::VehicleDataResultCode::VDRC_DISALLOWED);
+ std::for_each(removed_parameters_permissions_.undefined_params.begin(),
+ removed_parameters_permissions_.undefined_params.end(),
undefined_inserter);
}
bool CommandRequestImpl::HasDisallowedParams() const {
- return ((!parameters_permissions_.disallowed_params.empty()) ||
- (!parameters_permissions_.undefined_params.empty()));
+ return ((!removed_parameters_permissions_.disallowed_params.empty()) ||
+ (!removed_parameters_permissions_.undefined_params.empty()));
+}
+
+const CommandParametersPermissions& CommandRequestImpl::parameters_permissions()
+ const {
+ return parameters_permissions_;
}
} // namespace commands