Fix local server for multiple applications
[anna.git] / source / diameter.comm / OriginHostManager.cpp
index d821a7a..d5482c1 100644 (file)
@@ -15,7 +15,7 @@
 
 using namespace anna::diameter::comm;
 
-OriginHost *OriginHostManager::getOriginHost(const std::string &name) const throw() {
+OriginHost *OriginHostManager::getOriginHost(const std::string &name) const {
   origin_hosts_it it = a_origin_hosts.find(name);
   if (it != a_origin_hosts.end())
     return it->second;
@@ -23,13 +23,17 @@ OriginHost *OriginHostManager::getOriginHost(const std::string &name) const thro
   return NULL;
 }
 
-void OriginHostManager::registerOriginHost(const std::string &name, OriginHost* originHost) throw() {
+void OriginHostManager::registerOriginHost(const std::string &name, OriginHost* originHost) {
   if (!originHost) return; // nothing done
   a_origin_hosts[name] = originHost;
 }
 
+void OriginHostManager::registerRemoteOriginHost(const std::string &remoteName, const std::string &ownName) {
+  a_remote_to_own_origin_hosts[remoteName] = ownName;
+}
+
 anna::xml::Node* OriginHostManager::asXML(anna::xml::Node* parent) const
-throw() {
+{
   anna::xml::Node* result = parent->createChild("OriginHostManager");
   origin_hosts_it it_min(a_origin_hosts.begin());
   origin_hosts_it it_max(a_origin_hosts.end());
@@ -39,3 +43,25 @@ throw() {
   return result;
 }
 
+
+OriginHost *OriginHostManager::getOriginHost(const anna::U32 &applicationId) const {
+
+  OriginHost *result{};
+
+  for (auto it: a_origin_hosts) {
+    result = it.second;
+    if (result->getApplicationId() == applicationId) return result;
+  }
+
+  return NULL;
+}
+
+OriginHost *OriginHostManager::getOriginHostForRemoteOriginHost(const std::string &name) const {
+   auto it = a_remote_to_own_origin_hosts.find(name);
+
+   if (it != a_remote_to_own_origin_hosts.end())
+     return getOriginHost(it->second);
+
+  return NULL;
+}
+