#include <anna/diameter.comm/ApplicationMessageOamModule.hpp>
#include <anna/testing/defines.hpp>
#include <anna/xml/xml.hpp>
+#include <anna/diameter.comm/OriginHost.hpp>
+#include <anna/diameter.comm/OriginHostManager.hpp>
#include <Procedure.hpp>
// Process
#include <Launcher.hpp>
#include <MyDiameterEngine.hpp>
-#include <anna/diameter.comm/OriginHost.hpp>
#include <anna/testing/TestManager.hpp>
#include <anna/testing/TestCase.hpp>
//a_admlMinResolution = (anna::Millisecond)100;
a_counterRecorderClock = NULL;
- // a_originHosts.clear();
a_workingNode = NULL;
a_httpServerSocket = NULL;
burstLog = (*it)->getAttribute("burstLog", false /* no exception */); // (yes | no)
// Basic checkings:
- origin_hosts_it nodeIt = a_originHosts.find(originHost->getValue());
- if (nodeIt != a_originHosts.end()) {
+ anna::diameter::comm::OriginHostManager &ohm = anna::diameter::comm::OriginHostManager::instantiate();
+ anna::diameter::comm::OriginHost *oh = ohm.getOriginHost(originHost->getValue());
+ if (oh) {
std::string msg = "Already registered such Origin-Host: "; msg += originHost->getValue();
throw anna::RuntimeException(msg, ANNA_FILE_LOCATION);
}
if (eventOperation) commEngine->lazyInitialize();
// Node and Codec Engine registration ///////////////////////////////////////////////////////
- a_originHosts[originHost->getValue()] = a_workingNode;
+ ohm.registerOriginHost(originHost->getValue(), a_workingNode);
/////////////////////////////////////////////////////////////////////////////////////////////
}
}
bool Launcher::setWorkingNode(const std::string &name) throw() {
bool result = false;
- origin_hosts_it nodeIt = a_originHosts.find(name);
- if (nodeIt == a_originHosts.end()) {
- LOGWARNING(
- std::string msg = "Unknown node with name '"; msg += name; msg += "'. Ignoring ...";
- anna::Logger::warning(msg, ANNA_FILE_LOCATION);
- );
- }
- else {
- a_workingNode = const_cast<anna::diameter::comm::OriginHost*>(nodeIt->second);
+ anna::diameter::comm::OriginHostManager &ohm = anna::diameter::comm::OriginHostManager::instantiate();
+ anna::diameter::comm::OriginHost *oh = ohm.getOriginHost(name);
+
+ if (oh) {
+ a_workingNode = const_cast<anna::diameter::comm::OriginHost*>(oh);
result = true;
}
return result;
}
-anna::diameter::comm::OriginHost *Launcher::getOriginHost(const std::string &oh) const throw(anna::RuntimeException) {
- origin_hosts_it it = a_originHosts.find(oh);
- if (it != a_originHosts.end()) return it->second;
- throw anna::RuntimeException(anna::functions::asString("There is no origin host registered as '%s' (set Origin-Host avp correctly or force a specific host with 'node' operation)", oh.c_str()), ANNA_FILE_LOCATION);
+anna::diameter::comm::OriginHost *Launcher::getOriginHost(const std::string &name) const throw(anna::RuntimeException) {
+ anna::diameter::comm::OriginHostManager &ohm = anna::diameter::comm::OriginHostManager::instantiate();
+ anna::diameter::comm::OriginHost *result = ohm.getOriginHost(name);
+
+ if (!result)
+ throw anna::RuntimeException(anna::functions::asString("There is no origin host registered as '%s' (set Origin-Host avp correctly or force a specific host with 'node' operation)", name.c_str()), ANNA_FILE_LOCATION);
+
+ return result;
}
anna::diameter::comm::OriginHost *Launcher::getOriginHost(const anna::diameter::codec::Message &message) const throw(anna::RuntimeException) {
return (getOriginHost(originHost));
}
+bool Launcher::uniqueOriginHost() const throw() {
+ anna::diameter::comm::OriginHostManager &ohm = anna::diameter::comm::OriginHostManager::instantiate();
+ return (ohm.size() == 1);
+}
+
+
void Launcher::updateOperatedOriginHostWithMessage(const anna::diameter::codec::Message &message) throw(anna::RuntimeException) {
if (!a_operatedHost) // priority for working node by mean 'node' operation
a_operatedHost = getOriginHost(message);
// Start client connections //////////////////////////////////////////////////////////////////////////////////
MyDiameterEntity *entity;
- for (origin_hosts_it it = a_originHosts.begin(); it != a_originHosts.end(); it++) {
+ anna::diameter::comm::OriginHostManager &ohm = anna::diameter::comm::OriginHostManager::instantiate();
+ for (diameter::comm::origin_hosts_it it = ohm.begin(); it != ohm.end(); it++) {
entity = (MyDiameterEntity *)(it->second->getEntity());
if (entity) entity->bind();
}
a_workingNode->getCommEngine()->resetStatistics();
}
else {
- for (origin_hosts_it it = a_originHosts.begin(); it != a_originHosts.end(); it++) {
+ anna::diameter::comm::OriginHostManager &ohm = anna::diameter::comm::OriginHostManager::instantiate();
+ for (diameter::comm::origin_hosts_it it = ohm.begin(); it != ohm.end(); it++) {
it->second->getCommEngine()->resetStatistics();
}
}
if (args == "" && op_size != 7)
throw anna::RuntimeException("Wrong body content format on HTTP Request. Use 'help' management command to see more information.", ANNA_FILE_LOCATION);
try {
- p.execute(args, response_content, getWorkingNode());
+ p.execute(args, response_content);
}
catch(anna::RuntimeException &ex) {
ex.trace();
result->createAttribute("InitialWorkingDirectory", a_initialWorkingDirectory);
result->createAttribute("SecondsLifeTime", anna::time::functions::lapsedMilliseconds() / 1000);
// Diameter:
- for (origin_hosts_it it = a_originHosts.begin(); it != a_originHosts.end(); it++) {
+ anna::diameter::comm::OriginHostManager &ohm = anna::diameter::comm::OriginHostManager::instantiate();
+ for (diameter::comm::origin_hosts_it it = ohm.begin(); it != ohm.end(); it++) {
it->second->asXML(result);
}