X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=example%2Fdiameter%2Flauncher%2FMyLocalServer.cpp;h=7db0d8772640d81dcfd137f6b105b2f3b70367e3;hb=3d71e5185fa9c93bde7363a668aecf96240ae2e9;hp=dab87d1c024a55eb8efe4716ea9e4ad5e826fb9a;hpb=752438861433c3789eb1b0d9f2c15e15037595e6;p=anna.git diff --git a/example/diameter/launcher/MyLocalServer.cpp b/example/diameter/launcher/MyLocalServer.cpp index dab87d1..7db0d87 100644 --- a/example/diameter/launcher/MyLocalServer.cpp +++ b/example/diameter/launcher/MyLocalServer.cpp @@ -17,11 +17,6 @@ #include "MyLocalServer.hpp" #include "Launcher.hpp" -// Auxiliary message for sendings -extern anna::diameter::comm::Message G_commMsgSent2c, G_commMsgFwd2e; -extern anna::diameter::codec::Message G_codecMsg, G_codecAnsMsg; -extern anna::Recycler G_commMessages; // create on requests forwards without programmed answer / release in answers forward - void MyLocalServer::eventRequest(anna::diameter::comm::ServerSession *serverSession, const anna::DataBlock &message) throw(anna::RuntimeException) { @@ -52,7 +47,7 @@ throw(anna::RuntimeException) { anna::diameter::comm::Entity *entity = my_app.getEntity(); if(!programmed && entity) { // forward condition (no programmed answer + entity available) - anna::diameter::comm::Message *msg = G_commMessages.create(); + anna::diameter::comm::Message *msg = my_app.createCommMessage(); msg->updateEndToEnd(false); // end-to-end will be kept msg->setBody(message); msg->setRequestServerSessionKey(serverSession->getKey()); @@ -72,15 +67,17 @@ throw(anna::RuntimeException) { // Error analisys: bool analysisOK = true; // by default anna::diameter::codec::Message *answer_message = NULL; + anna::diameter::codec::Message *codecMsg = my_app.createCodecMessage(); if(!cl.exists("ignoreErrors")) { // Error analysis - answer_message = (anna::diameter::codec::Message*) & G_codecAnsMsg; + answer_message = my_app.createCodecMessage(); answer_message->clear(); // Decode - try { G_codecMsg.decode(message, answer_message); } catch(anna::RuntimeException &ex) { ex.trace(); } + try { codecMsg->decode(message, answer_message); } catch(anna::RuntimeException &ex) { ex.trace(); } - answer_message->setStandardToAnswer(G_codecMsg, my_app.getMyDiameterEngine()->getHost(), my_app.getMyDiameterEngine()->getRealm()); + answer_message->setStandardToAnswer(*codecMsg, my_app.getMyDiameterEngine()->getHost(), my_app.getMyDiameterEngine()->getRealm()); + my_app.releaseCodecMessage(codecMsg); analysisOK = (answer_message->getResultCode() == anna::diameter::helpers::base::AVPVALUES__Result_Code::DIAMETER_SUCCESS); } @@ -100,16 +97,20 @@ throw(anna::RuntimeException) { codecEngine->setValidationMode(anna::diameter::codec::Engine::ValidationMode::Never); try { - G_commMsgSent2c.setBody(answer_message->code()); - /* response = NULL =*/serverSession->send(&G_commMsgSent2c); + anna::diameter::comm::Message *msg = my_app.createCommMessage(); + msg->setBody(answer_message->code()); + /* response = NULL =*/serverSession->send(msg); + my_app.releaseCommMessage(msg); if(my_app.logEnabled()) my_app.writeLogFile(*answer_message, "sent2c", serverSession->asString()); } catch(anna::RuntimeException &ex) { ex.trace(); - if(my_app.logEnabled()) my_app.writeLogFile(*answer_message, "send2cError", serverSession->asString()); } + // Release auxiliary codec message + my_app.releaseCodecMessage(answer_message); + // Restore validation mode codecEngine->setValidationMode(backupVM); @@ -178,24 +179,26 @@ throw(anna::RuntimeException) { anna::diameter::comm::ClientSession *usedClientSession = my_app.getMyDiameterEngine()->findClientSession(request->getRequestClientSessionKey()); std::string detail; - if(my_app.logEnabled()) detail = usedClientSession ? usedClientSession->asString() : ""; // esto no deberia ocurrir + if(my_app.logEnabled()) detail = usedClientSession ? usedClientSession->asString() : ""; // this should not happen try { - G_commMsgFwd2e.updateEndToEnd(false); // end-to-end will be kept - G_commMsgFwd2e.setBody(*message); + anna::diameter::comm::Message *msg = my_app.createCommMessage(); + msg->updateEndToEnd(false); // end-to-end will be kept + msg->setBody(*message); // Metodo 1: - if(usedClientSession) /* response = NULL =*/usedClientSession->send(&G_commMsgFwd2e); + if(usedClientSession) /* response = NULL =*/usedClientSession->send(msg); // Metodo 2: - //G_commMsgFwd2e.setRequestClientSessionKey(request->getRequestClientSessionKey()); - //bool success = entity->send(G_commMsgFwd2e); - G_commMessages.release(request); + //msg->setRequestClientSessionKey(request->getRequestClientSessionKey()); + //bool success = entity->send(msg); + + my_app.releaseCommMessage(msg); + my_app.releaseCommMessage(request); if(my_app.logEnabled()) my_app.writeLogFile(*message, "fwd2e", detail); // forwarded } catch(anna::RuntimeException &ex) { ex.trace(); - if(my_app.logEnabled()) my_app.writeLogFile(*message, "fwd2eError", detail); // forwarded } }