diff options
-rw-r--r-- | src/components/application_manager/include/application_manager/app_service_manager.h | 1 | ||||
-rw-r--r-- | src/components/application_manager/src/app_service_manager.cc | 23 |
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_); |