X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=example%2Fdiameter%2Flauncher%2FRealmNode.cpp;h=d2276504858d7bd3bc9115a8364075fbba509da4;hb=603b76b5dc02acdfd87c58c51b6d48ae1858f58d;hp=c61bbe418ad63907de64de1d695b2bd14c36901f;hpb=c82a3818b279727e943a76343f3cf1a278ac9e19;p=anna.git diff --git a/example/diameter/launcher/RealmNode.cpp b/example/diameter/launcher/RealmNode.cpp index c61bbe4..d227650 100644 --- a/example/diameter/launcher/RealmNode.cpp +++ b/example/diameter/launcher/RealmNode.cpp @@ -11,23 +11,32 @@ // Project #include +#include +#include #include #include #include // Process -#include "RealmNode.hpp" -#include "MyDiameterEngine.hpp" +#include +#include +namespace anna { + namespace diameter { + namespace stack { + class Dictionary; + } + } +} -RealmNode::RealmNode(const std::string &originRealm, unsigned int applicationId, anna::diameter::codec::Engine *codecEngine) : - a_originRealm(originRealm), a_applicationId(applicationId), a_codecEngine(codecEngine) { +RealmNode::RealmNode(const std::string &originRealm, unsigned int applicationId, const anna::diameter::stack::Dictionary *baseProtocolDictionary) : + a_originRealm(originRealm), a_applicationId(applicationId) { std::string commEngineName = a_originRealm + "_DiameterCommEngine"; - a_commEngine = new MyDiameterEngine(commEngineName.c_str()); + a_commEngine = new MyDiameterEngine(commEngineName.c_str(), baseProtocolDictionary); a_commEngine->setAutoBind(false); // allow to create client-sessions without binding them, in order to set timeouts. - a_commEngine->setBaseProtocolCodecEngine(getCodecEngine()); + a_codecEngine = anna::diameter::codec::EngineManager::instantiate().getCodecEngine(applicationId); a_logFile = ""; a_burstLogFile = ""; @@ -56,16 +65,13 @@ RealmNode::RealmNode(const std::string &originRealm, unsigned int applicationId, } -void RealmNode::createEntity(const std::string &entityRepresentation, const anna::Millisecond &bindTimeout, const anna::Millisecond &applicationTimeout) throw() { +void RealmNode::createEntity(const std::string &entityRepresentation, const anna::Millisecond &bindTimeout, const anna::Millisecond &applicationTimeout) throw(anna::RuntimeException) { anna::socket_v servers = anna::functions::getSocketVectorFromString(entityRepresentation); std::string entityDescription = "Launcher diameter entity for "; entityDescription += a_originRealm; a_entity = (MyDiameterEntity*)(a_commEngine->createEntity(servers, entityDescription)); a_entity->setClassCodeTimeout(anna::diameter::comm::ClassCode::Bind, bindTimeout); a_entity->setClassCodeTimeout(anna::diameter::comm::ClassCode::ApplicationMessage, applicationTimeout); - - // Codec engine for reacting answers (failed-avp): - a_entity->setCodecEngine(getCodecEngine()); } void RealmNode::startDiameterServer(const std::string &serverRepresentation, int sessions, const anna::Millisecond &inactivityTimeout) throw(anna::RuntimeException) { @@ -81,9 +87,6 @@ void RealmNode::startDiameterServer(const std::string &serverRepresentation, int a_diameterServer->setDescription(serverDescription); a_diameterServer->setAllowedInactivityTime(inactivityTimeout); - - // Codec engine for reacting answers (failed-avp): - a_diameterServer->setCodecEngine(getCodecEngine()); } anna::diameter::comm::Message *RealmNode::createCommMessage() throw(anna::RuntimeException) { @@ -100,16 +103,13 @@ void RealmNode::releaseCommMessage(anna::diameter::comm::Message *msg) throw() { void RealmNode::writeLogFile(const anna::DataBlock & db, const std::string &logExtension, const std::string &detail) const throw() { -// if (!logEnabled()) return; - anna::diameter::codec::Message codecMsg(getCodecEngine()); + anna::diameter::codec::Message codecMsg; try { codecMsg.decode(db); } catch(anna::RuntimeException &ex) { ex.trace(); } writeLogFile(codecMsg, logExtension, detail); - } -// Si ya lo tengo decodificado: -void RealmNode::writeLogFile(const anna::diameter::codec::Message & decodedMessage, const std::string &logExtension, const std::string &detail) const throw() { -// if (!logEnabled()) return; +// Already decoded: +void RealmNode::writeLogFile(const anna::diameter::codec::Message &decodedMessage, const std::string &logExtension, const std::string &detail) const throw() { // Open target file: std::string targetFile = a_logFile; @@ -365,16 +365,17 @@ bool RealmNode::sendBurstMessage(bool anyway) throw() { } std::string RealmNode::lookBurst(int order) const throw() { + + if (order == -1) order = a_burstDeliveryIt->first; + std::string result = "No message found for order provided ("; result += anna::functions::asString(order); result += ")"; std::map::const_iterator it = a_burstMessages.find(order - 1); if(it != a_burstMessages.end()) { - // Decode - anna::diameter::codec::Message codecMsg(getCodecEngine()); - try { codecMsg.decode((*it).second->getBody()); } catch(anna::RuntimeException &ex) { ex.trace(); } - result = codecMsg.asXMLString(); + anna::diameter::codec::Message codecMsg; + try { codecMsg.decode((*it).second->getBody()); result = codecMsg.asXMLString(); } catch(anna::RuntimeException &ex) { ex.trace(); } } return result;