Fix local server for multiple applications
[anna.git] / source / diameter.comm / OriginHostManager.cpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 // Project
10 #include <anna/diameter.comm/OriginHostManager.hpp>
11 #include <anna/diameter.comm/OriginHost.hpp>
12 #include <anna/core/tracing/Logger.hpp>
13 #include <anna/xml/Node.hpp>
14
15
16 using namespace anna::diameter::comm;
17
18 OriginHost *OriginHostManager::getOriginHost(const std::string &name) const {
19   origin_hosts_it it = a_origin_hosts.find(name);
20   if (it != a_origin_hosts.end())
21     return it->second;
22
23   return NULL;
24 }
25
26 void OriginHostManager::registerOriginHost(const std::string &name, OriginHost* originHost) {
27   if (!originHost) return; // nothing done
28   a_origin_hosts[name] = originHost;
29 }
30
31 void OriginHostManager::registerRemoteOriginHost(const std::string &remoteName, const std::string &ownName) {
32   a_remote_to_own_origin_hosts[remoteName] = ownName;
33 }
34
35 anna::xml::Node* OriginHostManager::asXML(anna::xml::Node* parent) const
36 {
37   anna::xml::Node* result = parent->createChild("OriginHostManager");
38   origin_hosts_it it_min(a_origin_hosts.begin());
39   origin_hosts_it it_max(a_origin_hosts.end());
40   for (origin_hosts_it it = it_min; it != it_max; it++)
41     it->second->asXML(result);
42
43   return result;
44 }
45
46
47 OriginHost *OriginHostManager::getOriginHost(const anna::U32 &applicationId) const {
48
49   OriginHost *result{};
50
51   for (auto it: a_origin_hosts) {
52     result = it.second;
53     if (result->getApplicationId() == applicationId) return result;
54   }
55
56   return NULL;
57 }
58
59 OriginHost *OriginHostManager::getOriginHostForRemoteOriginHost(const std::string &name) const {
60    auto it = a_remote_to_own_origin_hosts.find(name);
61
62    if (it != a_remote_to_own_origin_hosts.end())
63      return getOriginHost(it->second);
64
65   return NULL;
66 }
67