X-Git-Url: https://git.teslayout.com/public/public/public/?p=anna.git;a=blobdiff_plain;f=example%2Fdiameter%2Flauncher%2FProgrammedAnswers.cpp;fp=example%2Fdiameter%2Flauncher%2FProgrammedAnswers.cpp;h=b2b89b2e2030226bee87bc6e12ea4d74f1a2bb33;hp=3f64a3504c504931857c11a0792beebdb271e8b0;hb=5e4f1d9d5902d86a37ecf88b372d9089d417e663;hpb=028006fc5ee34967fcfffff24a2b1c8b410c26c3 diff --git a/example/diameter/launcher/ProgrammedAnswers.cpp b/example/diameter/launcher/ProgrammedAnswers.cpp index 3f64a35..b2b89b2 100644 --- a/example/diameter/launcher/ProgrammedAnswers.cpp +++ b/example/diameter/launcher/ProgrammedAnswers.cpp @@ -21,10 +21,18 @@ void ProgrammedAnswers::clear() throw () { try { anna::diameter::codec::EngineManager &em = anna::diameter::codec::EngineManager::instantiate(); + anna::diameter::codec::Engine *engine; + for (reacting_answers_const_iterator it = a_deques.begin(); it != a_deques.end(); it++) { anna::diameter::codec::Message *message = *(it->second->begin()); - em.getCodecEngine(message->getApplicationId())->releaseMessage(message); - delete (it->second); + engine = em.getCodecEngine(message->getApplicationId()); + if (engine) { + engine->releaseMessage(message); + delete (it->second); + } + else { + LOGWARNING(anna::Logger::warning("Cannot release a message for which i don't know the codec engine (check the registered stack id regarding the message application id) !", ANNA_FILE_LOCATION)); + } } a_deques.clear(); } @@ -79,16 +87,24 @@ anna::diameter::codec::Message* ProgrammedAnswers::getMessage(int code) const th } void ProgrammedAnswers::nextMessage(int code) throw () { //pops the deque and release the message (when deque is not empty: deque::empty) + anna::diameter::codec::Engine *engine; + try { reacting_answers_const_iterator it = a_deques.find(code); if (it != a_deques.end()) { if (!it->second->empty()) { + anna::diameter::codec::Message *message = *(it->second->begin()); if (a_rotate) { - addMessage(code, *(it->second->begin())); + addMessage(code, message); } else { - anna::diameter::codec::EngineManager &em = anna::diameter::codec::EngineManager::instantiate(); - anna::diameter::codec::Message *message = *(it->second->begin()); - em.getCodecEngine(message->getApplicationId())->releaseMessage(message); + engine = anna::diameter::codec::EngineManager::instantiate().getCodecEngine(message->getApplicationId()); + if (engine) { + engine->releaseMessage(message); + } + else { + LOGWARNING(anna::Logger::warning("Cannot release a message for which i don't know the codec engine (check the registered stack id regarding the message application id) !", ANNA_FILE_LOCATION)); + return; + } } it->second->pop_front(); }