diff options
5 files changed, 40 insertions, 8 deletions
diff --git a/src/components/application_manager/include/application_manager/app_service_manager.h b/src/components/application_manager/include/application_manager/app_service_manager.h index 80e6b5521f..d6d13a209a 100644 --- a/src/components/application_manager/include/application_manager/app_service_manager.h +++ b/src/components/application_manager/include/application_manager/app_service_manager.h @@ -126,10 +126,12 @@ class AppServiceManager { std::vector<smart_objects::SmartObject> GetAllServices(); void GetProviderByType(const std::string& service_type, + bool mobile_consumer, ApplicationSharedPtr& app, bool& hmi_service); void GetProviderByID(const std::string& service_id, + bool mobile_consumer, ApplicationSharedPtr& app, bool& hmi_service); @@ -169,6 +171,7 @@ class AppServiceManager { const mobile_apis::ServiceUpdateReason::eType update_reason, smart_objects::SmartObject& msg_params); void GetProviderFromService(const AppService& service, + bool mobile_consumer, ApplicationSharedPtr& app, bool& hmi_service); AppService* FindServiceByPolicyAppID(std::string policy_app_id, diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/commands/mobile/on_app_service_data_notification.cc b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/commands/mobile/on_app_service_data_notification.cc index a016d1fe16..e198cc0fcd 100644 --- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/commands/mobile/on_app_service_data_notification.cc +++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/commands/mobile/on_app_service_data_notification.cc @@ -61,10 +61,30 @@ OnAppServiceDataNotification::~OnAppServiceDataNotification() {} void OnAppServiceDataNotification::Run() { LOG4CXX_AUTO_TRACE(logger_); LOG4CXX_DEBUG(logger_, "Sending OnAppServiceData to consumer"); - MessageHelper::PrintSmartObject(*message_); + + std::string service_id = + (*message_)[strings::msg_params][strings::service_data] + [strings::service_id] + .asString(); + auto service = application_manager_.GetAppServiceManager().FindServiceByID(service_id); + + if (!service) { + LOG4CXX_ERROR(logger_, "Service sending OnAppServiceData is not published"); + return; + } else if (!service + ->record[strings::service_manifest] + [strings::allow_app_consumers] + .asBool()) { + LOG4CXX_ERROR(logger_, + "Service does not allow for app consumers, skipping mobile " + "OnAppServiceData notification"); + return; + } std::string service_type = - (*message_)[strings::msg_params][strings::service_type].asString(); + (*message_)[strings::msg_params][strings::service_data] + [strings::service_type] + .asString(); auto subscribed_to_app_service_predicate = [service_type](const ApplicationSharedPtr app) { diff --git a/src/components/application_manager/src/app_service_manager.cc b/src/components/application_manager/src/app_service_manager.cc index dcdcd0e66f..494d3d61bf 100644 --- a/src/components/application_manager/src/app_service_manager.cc +++ b/src/components/application_manager/src/app_service_manager.cc @@ -201,6 +201,7 @@ std::vector<smart_objects::SmartObject> AppServiceManager::GetAllServices() { } void AppServiceManager::GetProviderByType(const std::string& service_type, + bool mobile_consumer, ApplicationSharedPtr& app, bool& hmi_service) { LOG4CXX_AUTO_TRACE(logger_); @@ -213,10 +214,11 @@ void AppServiceManager::GetProviderByType(const std::string& service_type, } LOG4CXX_DEBUG(logger_, "Found provider for service type: " << service_type); - GetProviderFromService(*active_service, app, hmi_service); + GetProviderFromService(*active_service, mobile_consumer, app, hmi_service); } void AppServiceManager::GetProviderByID(const std::string& service_id, + bool mobile_consumer, ApplicationSharedPtr& app, bool& hmi_service) { LOG4CXX_AUTO_TRACE(logger_); @@ -228,13 +230,20 @@ void AppServiceManager::GetProviderByID(const std::string& service_id, } LOG4CXX_DEBUG(logger_, "Found provider with service ID: " << service_id); - GetProviderFromService(it->second, app, hmi_service); + GetProviderFromService(it->second, mobile_consumer, app, hmi_service); } void AppServiceManager::GetProviderFromService(const AppService& service, + bool mobile_consumer, ApplicationSharedPtr& app, bool& hmi_service) { LOG4CXX_AUTO_TRACE(logger_); + if (mobile_consumer && + !service.record[strings::service_manifest][strings::allow_app_consumers] + .asBool()) { + LOG4CXX_ERROR(logger_, "Service does not support app consumers"); + return; + } bool mobile_service = service.mobile_service; if (mobile_service) { app = app_manager_.application(service.connection_key); 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 c6dbe6972f..8d339d4d14 100644 --- a/src/components/application_manager/src/commands/command_request_impl.cc +++ b/src/components/application_manager/src/commands/command_request_impl.cc @@ -431,12 +431,12 @@ void CommandRequestImpl::SendProviderRequest( std::string service_type = (*msg)[strings::msg_params][strings::service_type].asString(); application_manager_.GetAppServiceManager().GetProviderByType( - service_type, app, hmi_destination); + service_type, true, app, hmi_destination); } else if ((*msg)[strings::msg_params].keyExists(strings::service_id)) { std::string service_id = (*msg)[strings::msg_params][strings::service_id].asString(); application_manager_.GetAppServiceManager().GetProviderByID( - service_id, app, hmi_destination); + service_id, true, app, hmi_destination); } if (hmi_destination) { diff --git a/src/components/application_manager/src/commands/request_from_hmi.cc b/src/components/application_manager/src/commands/request_from_hmi.cc index 823e93cb5e..3c8e75141a 100644 --- a/src/components/application_manager/src/commands/request_from_hmi.cc +++ b/src/components/application_manager/src/commands/request_from_hmi.cc @@ -173,12 +173,12 @@ void RequestFromHMI::SendProviderRequest( std::string service_type = (*msg)[strings::msg_params][strings::service_type].asString(); application_manager_.GetAppServiceManager().GetProviderByType( - service_type, app, hmi_destination); + service_type, false, app, hmi_destination); } else if ((*msg)[strings::msg_params].keyExists(strings::service_id)) { std::string service_id = (*msg)[strings::msg_params][strings::service_id].asString(); application_manager_.GetAppServiceManager().GetProviderByID( - service_id, app, hmi_destination); + service_id, false, app, hmi_destination); } if (hmi_destination) { |