diff options
Diffstat (limited to 'src/components/application_manager/src/application_manager_impl.cc')
-rw-r--r-- | src/components/application_manager/src/application_manager_impl.cc | 177 |
1 files changed, 90 insertions, 87 deletions
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index 3ead8fe65e..0431aca41a 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -32,58 +32,58 @@ #include <stdlib.h> // for rand() +#include <bson_object.h> #include <climits> -#include <string> #include <fstream> +#include <string> #include <utility> -#include <bson_object.h> +#include "application_manager/app_launch/app_launch_ctrl_impl.h" +#include "application_manager/app_launch/app_launch_data_db.h" +#include "application_manager/app_launch/app_launch_data_json.h" #include "application_manager/application_manager_impl.h" -#include "application_manager/mobile_command_factory.h" +#include "application_manager/command_holder_impl.h" #include "application_manager/commands/command_impl.h" #include "application_manager/commands/command_notification_impl.h" +#include "application_manager/helpers/application_helper.h" +#include "application_manager/hmi_capabilities_impl.h" #include "application_manager/message_helper.h" +#include "application_manager/mobile_command_factory.h" #include "application_manager/mobile_message_handler.h" #include "application_manager/policies/policy_handler.h" -#include "application_manager/hmi_capabilities_impl.h" #include "application_manager/resumption/resume_ctrl_impl.h" -#include "application_manager/app_launch/app_launch_ctrl_impl.h" -#include "application_manager/app_launch/app_launch_data_db.h" -#include "application_manager/app_launch/app_launch_data_json.h" -#include "application_manager/helpers/application_helper.h" -#include "protocol_handler/protocol_handler.h" -#include "hmi_message_handler/hmi_message_handler.h" -#include "application_manager/command_holder_impl.h" #include "connection_handler/connection_handler_impl.h" -#include "formatters/formatter_json_rpc.h" -#include "formatters/CFormatterJsonSDLRPCv2.h" #include "formatters/CFormatterJsonSDLRPCv1.h" +#include "formatters/CFormatterJsonSDLRPCv2.h" +#include "formatters/formatter_json_rpc.h" +#include "hmi_message_handler/hmi_message_handler.h" #include "protocol/bson_object_keys.h" +#include "protocol_handler/protocol_handler.h" -#include "utils/threads/thread.h" -#include "utils/file_system.h" -#include "utils/helpers.h" -#include "utils/make_shared.h" -#include "utils/timer_task_impl.h" -#include "smart_objects/enum_schema_item.h" -#include "interfaces/HMI_API_schema.h" +#include <time.h> #include "application_manager/application_impl.h" +#include "interfaces/HMI_API_schema.h" #include "media_manager/media_manager.h" #include "policy/usage_statistics/counter.h" +#include "smart_objects/enum_schema_item.h" #include "utils/custom_string.h" -#include <time.h> +#include "utils/file_system.h" +#include "utils/helpers.h" +#include "utils/make_shared.h" +#include "utils/threads/thread.h" +#include "utils/timer_task_impl.h" #ifdef SDL_REMOTE_CONTROL -#include "policy/usage_statistics/counter.h" -#include "functional_module/plugin_manager.h" #include "application_manager/core_service.h" +#include "functional_module/plugin_manager.h" +#include "policy/usage_statistics/counter.h" #endif // SDL_REMOTE_CONTROL namespace { int get_rand_from_range(uint32_t from = 0, int to = RAND_MAX) { return std::rand() % to + from; } -} +} // namespace namespace application_manager { @@ -141,7 +141,8 @@ ApplicationManagerImpl::ApplicationManagerImpl( const ApplicationManagerSettings& am_settings, const policy::PolicySettings& policy_settings) : settings_(am_settings) - , applications_list_lock_(true) + , applications_list_lock_ptr_(std::make_shared<sync_primitives::Lock>(true)) + , apps_to_register_list_lock_ptr_(std::make_shared<sync_primitives::Lock>()) , audio_pass_thru_active_(false) , audio_pass_thru_app_id_(0) , driver_distraction_state_( @@ -230,7 +231,8 @@ ApplicationManagerImpl::~ApplicationManagerImpl() { } DataAccessor<ApplicationSet> ApplicationManagerImpl::applications() const { - DataAccessor<ApplicationSet> accessor(applications_, applications_list_lock_); + DataAccessor<ApplicationSet> accessor(applications_, + applications_list_lock_ptr_); return accessor; } @@ -373,7 +375,7 @@ std::vector<ApplicationSharedPtr> ApplicationManagerImpl::IviInfoUpdated( void ApplicationManagerImpl::OnApplicationRegistered(ApplicationSharedPtr app) { LOG4CXX_AUTO_TRACE(logger_); DCHECK_OR_RETURN_VOID(app); - sync_primitives::AutoLock lock(applications_list_lock_); + sync_primitives::AutoLock lock(applications_list_lock_ptr_); const mobile_apis::HMILevel::eType default_level = GetDefaultHmiLevel(app); state_ctrl_.OnApplicationRegistered(app, default_level); @@ -576,11 +578,13 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication( Version version; int32_t min_version = message[strings::msg_params][strings::sync_msg_version] - [strings::minor_version].asInt(); + [strings::minor_version] + .asInt(); version.min_supported_api_version = static_cast<APIVersion>(min_version); int32_t max_version = message[strings::msg_params][strings::sync_msg_version] - [strings::major_version].asInt(); + [strings::major_version] + .asInt(); version.max_supported_api_version = static_cast<APIVersion>(max_version); application->set_version(version); @@ -601,13 +605,13 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication( } // Keep HMI add id in case app is present in "waiting for registration" list - apps_to_register_list_lock_.Acquire(); + apps_to_register_list_lock_ptr_->Acquire(); AppsWaitRegistrationSet::iterator it = apps_to_register_.find(application); if (apps_to_register_.end() != it) { application->set_hmi_application_id((*it)->hmi_app_id()); apps_to_register_.erase(application); } - apps_to_register_list_lock_.Release(); + apps_to_register_list_lock_ptr_->Release(); if (!application->hmi_app_id()) { const bool is_saved = @@ -640,11 +644,11 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication( // Add application to registered app list and set appropriate mark. // Lock has to be released before adding app to policy DB to avoid possible // deadlock with simultaneous PTU processing - applications_list_lock_.Acquire(); + applications_list_lock_ptr_->Acquire(); application->MarkRegistered(); applications_.insert(application); apps_size_ = applications_.size(); - applications_list_lock_.Release(); + applications_list_lock_ptr_->Release(); return application; } @@ -995,12 +999,12 @@ ApplicationConstSharedPtr ApplicationManagerImpl::WaitingApplicationByID( DataAccessor<AppsWaitRegistrationSet> ApplicationManagerImpl::AppsWaitingForRegistration() const { return DataAccessor<AppsWaitRegistrationSet>(apps_to_register_, - apps_to_register_list_lock_); + apps_to_register_list_lock_ptr_); } bool ApplicationManagerImpl::IsAppsQueriedFrom( const connection_handler::DeviceHandle handle) const { - sync_primitives::AutoLock lock(apps_to_register_list_lock_); + sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_); AppsWaitRegistrationSet::iterator it = apps_to_register_.begin(); AppsWaitRegistrationSet::const_iterator it_end = apps_to_register_.end(); for (; it != it_end; ++it) { @@ -1021,7 +1025,7 @@ const ApplicationManagerSettings& ApplicationManagerImpl::get_settings() const { void application_manager::ApplicationManagerImpl::MarkAppsGreyOut( const connection_handler::DeviceHandle handle, bool is_greyed_out) { - sync_primitives::AutoLock lock(apps_to_register_list_lock_); + sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_); AppsWaitRegistrationSet::iterator it = apps_to_register_.begin(); AppsWaitRegistrationSet::const_iterator it_end = apps_to_register_.end(); for (; it != it_end; ++it) { @@ -1191,7 +1195,7 @@ void ApplicationManagerImpl::SwitchApplication(ApplicationSharedPtr app, const std::string& mac_address) { LOG4CXX_AUTO_TRACE(logger_); DCHECK_OR_RETURN_VOID(app); - sync_primitives::AutoLock lock(applications_list_lock_); + sync_primitives::AutoLock lock(applications_list_lock_ptr_); DCHECK_OR_RETURN_VOID(1 == applications_.erase(app)); LOG4CXX_DEBUG(logger_, @@ -1514,9 +1518,9 @@ bool ApplicationManagerImpl::OnServiceStartedCallback( using namespace helpers; using namespace protocol_handler; LOG4CXX_AUTO_TRACE(logger_); - LOG4CXX_DEBUG(logger_, - "ServiceType = " << type << ". Session = " << std::hex - << session_key); + LOG4CXX_DEBUG( + logger_, + "ServiceType = " << type << ". Session = " << std::hex << session_key); if (type == kRpc) { LOG4CXX_DEBUG(logger_, "RPC service is about to be started."); @@ -1524,9 +1528,9 @@ bool ApplicationManagerImpl::OnServiceStartedCallback( } ApplicationSharedPtr app = application(session_key); if (!app) { - LOG4CXX_WARN(logger_, - "The application with id:" << session_key - << " doesn't exists."); + LOG4CXX_WARN( + logger_, + "The application with id:" << session_key << " doesn't exists."); return false; } @@ -1552,9 +1556,9 @@ void ApplicationManagerImpl::OnServiceStartedCallback( using namespace helpers; using namespace protocol_handler; LOG4CXX_AUTO_TRACE(logger_); - LOG4CXX_DEBUG(logger_, - "ServiceType = " << type << ". Session = " << std::hex - << session_key); + LOG4CXX_DEBUG( + logger_, + "ServiceType = " << type << ". Session = " << std::hex << session_key); std::vector<std::string> empty; if (type == kRpc) { @@ -1564,9 +1568,9 @@ void ApplicationManagerImpl::OnServiceStartedCallback( } ApplicationSharedPtr app = application(session_key); if (!app) { - LOG4CXX_WARN(logger_, - "The application with id:" << session_key - << " doesn't exists."); + LOG4CXX_WARN( + logger_, + "The application with id:" << session_key << " doesn't exists."); connection_handler().NotifyServiceStartedResult(session_key, false, empty); return; } @@ -2366,9 +2370,9 @@ bool ApplicationManagerImpl::ConvertMessageToSO( rpc::ValidationReport report("RPC"); if (output.validate(&report) != smart_objects::Errors::OK) { - LOG4CXX_ERROR(logger_, - "Incorrect parameter from HMI" - << rpc::PrettyFormat(report)); + LOG4CXX_ERROR( + logger_, + "Incorrect parameter from HMI" << rpc::PrettyFormat(report)); output.erase(strings::msg_params); output[strings::params][hmi_response::code] = @@ -2826,9 +2830,8 @@ void ApplicationManagerImpl::CreateApplications(SmartArray& obj_array, connection_handler::DeviceHandle device_id = 0; - if (-1 == - connection_handler().get_session_observer().GetDataOnSessionKey( - connection_key, NULL, NULL, &device_id)) { + if (-1 == connection_handler().get_session_observer().GetDataOnSessionKey( + connection_key, NULL, NULL, &device_id)) { LOG4CXX_ERROR(logger_, "Failed to create application: no connection info."); continue; @@ -2862,7 +2865,7 @@ void ApplicationManagerImpl::CreateApplications(SmartArray& obj_array, app->set_vr_synonyms(vrSynonym); app->set_tts_name(ttsName); - sync_primitives::AutoLock lock(apps_to_register_list_lock_); + sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_); LOG4CXX_DEBUG( logger_, "apps_to_register_ size before: " << apps_to_register_.size()); apps_to_register_.insert(app); @@ -3128,20 +3131,20 @@ void ApplicationManagerImpl::UnregisterAllApplications() { void ApplicationManagerImpl::RemoveAppsWaitingForRegistration( const connection_handler::DeviceHandle handle) { DevicePredicate device_finder(handle); - apps_to_register_list_lock_.Acquire(); + apps_to_register_list_lock_ptr_->Acquire(); AppsWaitRegistrationSet::iterator it_app = std::find_if( apps_to_register_.begin(), apps_to_register_.end(), device_finder); while (apps_to_register_.end() != it_app) { - LOG4CXX_DEBUG(logger_, - "Waiting app: " << (*it_app)->name().c_str() - << " is removed."); + LOG4CXX_DEBUG( + logger_, + "Waiting app: " << (*it_app)->name().c_str() << " is removed."); apps_to_register_.erase(it_app); it_app = std::find_if( apps_to_register_.begin(), apps_to_register_.end(), device_finder); } - apps_to_register_list_lock_.Release(); + apps_to_register_list_lock_ptr_->Release(); } void ApplicationManagerImpl::UnregisterApplication( @@ -3212,7 +3215,7 @@ void ApplicationManagerImpl::UnregisterApplication( ApplicationSharedPtr app_to_remove; connection_handler::DeviceHandle handle = 0; { - sync_primitives::AutoLock lock(applications_list_lock_); + sync_primitives::AutoLock lock(applications_list_lock_ptr_); auto it_app = applications_.begin(); while (applications_.end() != it_app) { if (app_id == (*it_app)->app_id()) { @@ -3659,21 +3662,21 @@ void ApplicationManagerImpl::ProcessPostponedMessages(const uint32_t app_id) { } MobileMessageQueue messages; app->SwapMobileMessageQueue(messages); - auto push_allowed_messages = - [this, &app](smart_objects::SmartObjectSPtr message) { - const std::string function_id = MessageHelper::StringifiedFunctionID( - static_cast<mobile_apis::FunctionID::eType>( - (*message)[strings::params][strings::function_id].asUInt())); - const RPCParams params; - const mobile_apis::Result::eType check_result = - CheckPolicyPermissions(app, function_id, params); - if (mobile_api::Result::SUCCESS == check_result) { - ManageMobileCommand(message, - commands::Command::CommandOrigin::ORIGIN_SDL); - } else { - app->PushMobileMessage(message); - } - }; + auto push_allowed_messages = [this, + &app](smart_objects::SmartObjectSPtr message) { + const std::string function_id = MessageHelper::StringifiedFunctionID( + static_cast<mobile_apis::FunctionID::eType>( + (*message)[strings::params][strings::function_id].asUInt())); + const RPCParams params; + const mobile_apis::Result::eType check_result = + CheckPolicyPermissions(app, function_id, params); + if (mobile_api::Result::SUCCESS == check_result) { + ManageMobileCommand(message, + commands::Command::CommandOrigin::ORIGIN_SDL); + } else { + app->PushMobileMessage(message); + } + }; std::for_each(messages.begin(), messages.end(), push_allowed_messages); } @@ -3976,9 +3979,9 @@ bool ApplicationManagerImpl::IsHMICooperating() const { void ApplicationManagerImpl::OnApplicationListUpdateTimer() { LOG4CXX_DEBUG(logger_, "Application list update timer finished"); - apps_to_register_list_lock_.Acquire(); + apps_to_register_list_lock_ptr_->Acquire(); const bool trigger_ptu = apps_size_ != applications_.size(); - apps_to_register_list_lock_.Release(); + apps_to_register_list_lock_ptr_->Release(); SendUpdateAppList(); GetPolicyHandler().OnAppsSearchCompleted(trigger_ptu); } @@ -4270,9 +4273,9 @@ bool ApplicationManagerImpl::InitDirectory( LOG4CXX_WARN(logger_, directory_type << " directory doesn't exist."); // if storage directory doesn't exist try to create it if (!file_system::CreateDirectoryRecursively(path)) { - LOG4CXX_ERROR(logger_, - "Unable to create " << directory_type << " directory " - << path); + LOG4CXX_ERROR( + logger_, + "Unable to create " << directory_type << " directory " << path); return false; } LOG4CXX_DEBUG(logger_, @@ -4287,9 +4290,9 @@ bool ApplicationManagerImpl::IsReadWriteAllowed(const std::string& path, const std::string directory_type = DirectoryTypeToString(type); if (!(file_system::IsWritingAllowed(path) && file_system::IsReadingAllowed(path))) { - LOG4CXX_ERROR(logger_, - directory_type - << " directory doesn't have read/write permissions."); + LOG4CXX_ERROR( + logger_, + directory_type << " directory doesn't have read/write permissions."); return false; } @@ -4465,10 +4468,10 @@ std::vector<std::string> ApplicationManagerImpl::ConvertRejectedParamList( #ifdef BUILD_TESTS void ApplicationManagerImpl::AddMockApplication(ApplicationSharedPtr mock_app) { - applications_list_lock_.Acquire(); + applications_list_lock_ptr_->Acquire(); applications_.insert(mock_app); apps_size_ = applications_.size(); - applications_list_lock_.Release(); + applications_list_lock_ptr_->Release(); } void ApplicationManagerImpl::SetMockMediaManager( |