summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/application_manager/include/application_manager/app_service_manager.h1
-rw-r--r--src/components/application_manager/src/app_service_manager.cc23
2 files changed, 24 insertions, 0 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 90771ff3b0..548f6a5b50 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
@@ -257,6 +257,7 @@ class AppServiceManager {
*/
AppService* FindServiceByProvider(const uint32_t connection_key,
const std::string service_type);
+ AppService* FindServiceByName(std::string name);
std::string GetPolicyAppID(AppService service);
};
diff --git a/src/components/application_manager/src/app_service_manager.cc b/src/components/application_manager/src/app_service_manager.cc
index e2ec1d7dd4..397c4ee2fe 100644
--- a/src/components/application_manager/src/app_service_manager.cc
+++ b/src/components/application_manager/src/app_service_manager.cc
@@ -80,6 +80,16 @@ smart_objects::SmartObject AppServiceManager::PublishAppService(
return smart_objects::SmartObject();
}
+ if (manifest.keyExists(strings::service_name)) {
+ existing_service =
+ FindServiceByName(manifest[strings::service_name].asString());
+ if (existing_service) {
+ LOG4CXX_DEBUG(logger_,
+ "A service already exists with this name, rejecting");
+ return smart_objects::SmartObject();
+ }
+ }
+
published_services_lock_.Acquire();
do {
str_to_hash = manifest[strings::service_type].asString() +
@@ -480,6 +490,19 @@ AppService* AppServiceManager::FindServiceByProvider(
return NULL;
}
+AppService* AppServiceManager::FindServiceByName(std::string name) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ sync_primitives::AutoLock lock(published_services_lock_);
+ for (auto it = published_services_.begin(); it != published_services_.end();
+ ++it) {
+ if (it->second.record[strings::service_manifest][strings::service_name]
+ .asString() == name) {
+ return &(it->second);
+ }
+ }
+ return NULL;
+}
+
std::string AppServiceManager::DefaultServiceByType(
const std::string service_type) {
LOG4CXX_AUTO_TRACE(logger_);