summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacobkeeler <jacob.keeler@livioradio.com>2019-03-05 18:45:53 -0500
committerjacobkeeler <jacob.keeler@livioradio.com>2019-03-05 18:45:53 -0500
commit00a12837cc8f2b334eeeed1fd033826fe772c362 (patch)
tree91cbee948a53f019c44c6294bb986d88228e059d
parentc2f835cffa63fe1c5ac37c28a8c3e89acb30e086 (diff)
downloadsdl_core-00a12837cc8f2b334eeeed1fd033826fe772c362.tar.gz
Add logic for handling `allowAppConsumers`
-rw-r--r--src/components/application_manager/include/application_manager/app_service_manager.h3
-rw-r--r--src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/commands/mobile/on_app_service_data_notification.cc24
-rw-r--r--src/components/application_manager/src/app_service_manager.cc13
-rw-r--r--src/components/application_manager/src/commands/command_request_impl.cc4
-rw-r--r--src/components/application_manager/src/commands/request_from_hmi.cc4
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) {