summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacobkeeler <jacob.keeler@livioradio.com>2019-04-24 13:32:16 -0400
committerjacobkeeler <jacob.keeler@livioradio.com>2019-04-24 13:50:32 -0400
commit6b17dfb03929789ca246cda31887c7eb9e1d8eb5 (patch)
tree54e12da9737c04b5b8f9085d54683f10a465eccf
parent873d1b6b503371c50a69a1c9e8ce7453e91e960b (diff)
downloadsdl_core-6b17dfb03929789ca246cda31887c7eb9e1d8eb5.tar.gz
Add check for duplicate service names
-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_);