From 01f5de0fe08905bad974d5793df79e870d11ab35 Mon Sep 17 00:00:00 2001 From: JackLivio Date: Wed, 17 Jul 2019 16:51:57 -0400 Subject: Fix check for duplicate name --- .../application_manager/src/app_service_manager.cc | 28 ++++++++++++++++------ 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/components/application_manager/src/app_service_manager.cc b/src/components/application_manager/src/app_service_manager.cc index 4d4dde76a6..09bdb9ea69 100644 --- a/src/components/application_manager/src/app_service_manager.cc +++ b/src/components/application_manager/src/app_service_manager.cc @@ -70,19 +70,27 @@ smart_objects::SmartObject AppServiceManager::PublishAppService( std::string str_to_hash = ""; std::string service_id = ""; - if (manifest.keyExists(strings::service_name) && - FindServiceByName(manifest[strings::service_name].asString())) { - LOG4CXX_WARN(logger_, "A service already exists with this name, rejecting"); - return smart_objects::SmartObject(); - } - std::string service_type = manifest[strings::service_type].asString(); AppService* found_service = FindServiceByProvider(connection_key, service_type); if (found_service) { + // Check if there is a different existing service with the same updated + // name. + if (manifest.keyExists(strings::service_name)) { + auto service_by_name = + FindServiceByName(manifest[strings::service_name].asString()); + auto service_by_name_id = + service_by_name->record[strings::service_id].asString(); + auto found_service_id = + service_by_name->record[strings::service_id].asString(); + if (service_by_name_id != found_service_id) { + LOG4CXX_WARN(logger_, + "A service already exists with this name, rejecting"); + return smart_objects::SmartObject(); + } + } LOG4CXX_WARN(logger_, "Service already exists for this provider, updating"); - published_services_lock_.Acquire(); found_service->record[strings::service_manifest] = manifest; found_service->record[strings::service_published] = true; @@ -102,6 +110,12 @@ smart_objects::SmartObject AppServiceManager::PublishAppService( return updated_service_record; } + if (manifest.keyExists(strings::service_name) && + FindServiceByName(manifest[strings::service_name].asString())) { + LOG4CXX_WARN(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() + -- cgit v1.2.1