X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fdiameter.comm%2FClientSession.cpp;h=c624155dd37ee0920a6416ece7bd9de790c80216;hb=eb446c670d53aa275d78b366ef1faf2b32ca964e;hp=7974ae75baf65741430027e9f1863949bab1f462;hpb=3d71e5185fa9c93bde7363a668aecf96240ae2e9;p=anna.git diff --git a/source/diameter.comm/ClientSession.cpp b/source/diameter.comm/ClientSession.cpp index 7974ae7..c624155 100644 --- a/source/diameter.comm/ClientSession.cpp +++ b/source/diameter.comm/ClientSession.cpp @@ -42,7 +42,6 @@ #include - using namespace std; using namespace anna::diameter; using namespace anna::diameter::comm; @@ -82,7 +81,7 @@ int ClientSession::getPort() const throw() { void ClientSession::setState(State::_v state) throw() { Session::setState(state); // Inform father server (availability changes): - bool changes = a_parent->refreshAvailability(); + a_parent->refreshAvailability(); } void ClientSession::bind() throw(anna::RuntimeException) { @@ -302,12 +301,18 @@ const Response* ClientSession::send(const Message* message) throw(anna::RuntimeE countSendings(cid, aid, true /* send ok */); // Trace non-application messages: LOGDEBUG( - if((cid == helpers::base::COMMANDID__Capabilities_Exchange_Request) || (cid == helpers::base::COMMANDID__Device_Watchdog_Request) || - (cid == helpers::base::COMMANDID__Disconnect_Peer_Request)) { - anna::Logger::debug("Sent DataBlock to XML representation:", ANNA_FILE_LOCATION); - try { anna::diameter::codec::Message msg; msg.decode(message->getBody()); /* decode to be traced */ } catch(anna::RuntimeException&) {;} + (cid == helpers::base::COMMANDID__Disconnect_Peer_Request)) { + anna::Logger::debug("Sent DataBlock to XML representation:", ANNA_FILE_LOCATION); + try { + anna::diameter::codec::Message msg(a_engine->getBaseProtocolCodecEngine()); msg.decode(message->getBody()); /* decode to be traced */ + } + catch(anna::RuntimeException &ex) { + std::string msg = ex.getText(); + msg += " | Use diameter::comm::Engine::setBaseProtocolCodecEngine() to allow internal base protocol messages full tracing"; + anna::Logger::debug(msg, ANNA_FILE_LOCATION); + } } ); @@ -442,6 +447,17 @@ void ClientSession::eventPeerShutdown() throw() { a_parent->eventPeerShutdown(this); } +void ClientSession::eventRequestRetransmission(Message *request) throw() { + + // OAM + OamModule &oamModule = OamModule::instantiate(); + oamModule.count(OamModule::Counter::RequestRetransmitted); + oamModule.count(OamModule::Counter::RequestRetransmittedOnClientSession); + + // Inform father server: + a_parent->eventRequestRetransmission(this, request); +} + void ClientSession::eventResponse(const Response& response) throw(anna::RuntimeException) { // Inform father server: a_parent->eventResponse(response); @@ -482,15 +498,25 @@ throw(anna::RuntimeException) { msg += anna::diameter::functions::commandIdAsPairString(cid); anna::Logger::debug(msg, ANNA_FILE_LOCATION); - if((cid == helpers::base::COMMANDID__Capabilities_Exchange_Answer) || (cid.first == helpers::base::COMMANDID__Device_Watchdog_Request.first)) - try { anna::diameter::codec::Message dmsg; dmsg.decode(db); /* decode to be traced */ } catch(anna::RuntimeException&) {;} + if( (cid == helpers::base::COMMANDID__Capabilities_Exchange_Answer) || + (cid.first == helpers::base::COMMANDID__Device_Watchdog_Request.first)) { + try { + anna::diameter::codec::Message dmsg(a_engine->getBaseProtocolCodecEngine()); dmsg.decode(db); /* decode to be traced */ + } + catch(anna::RuntimeException &ex) { + std::string msg = ex.getText(); + msg += " | Use diameter::comm::Engine::setBaseProtocolCodecEngine() to allow internal base protocol messages full tracing"; + anna::Logger::debug(msg, ANNA_FILE_LOCATION); + } + } ); + // Main counters: OamModule &oamModule = OamModule::instantiate(); oamModule.count(isRequest ? OamModule::Counter::RequestReceived : OamModule::Counter::AnswerReceived); oamModule.count(isRequest ? OamModule::Counter::RequestReceivedOnClientSession : OamModule::Counter::AnswerReceivedOnClientSession); // Statistic (size) - a_parent->updateReceivedMessageSizeStatisticConcept(message.getSize()); // only on reception (application could manage sent sizes) + a_parent->updateReceivedMessageSizeStatisticConcept(message.getSize(), cid); // only on reception (application could manage sent sizes) if(isRequest) { ///////////////////////////// @@ -528,7 +554,7 @@ throw(anna::RuntimeException) { try { // application message counters - ApplicationMessageOamModule::instantiate().count(cid.first, anna::diameter::codec::functions::getApplicationId(db), ApplicationMessageOamModule::Counter::Request_Received_AsClient); + ApplicationMessageOamModule::instantiate().count(cid.first, -1 /* no result code */, anna::diameter::codec::functions::getApplicationId(db), ApplicationMessageOamModule::Counter::Request_Received_AsClient); eventRequest(db); } catch(anna::RuntimeException& ex) { @@ -543,12 +569,13 @@ throw(anna::RuntimeException) { ///////////////////////////// bool doUnbind = false; bool immediateUnbind = false; - int resultCode = 0; + int resultCode = -1; try { resultCode = helpers::base::functions::getResultCode(db); } catch(anna::RuntimeException& ex) { - ex.trace(); + // Not always mandatory ... + //ex.trace(); } // Received CEA @@ -574,7 +601,7 @@ throw(anna::RuntimeException) { setState(State::Bound); //activateTimer(); // Ya se invoca al inicio de este metodo ::receive // Inform father server (availability changes): - bool changes = a_parent->refreshAvailability(); + a_parent->refreshAvailability(); //startClock(); } } @@ -632,7 +659,7 @@ throw(anna::RuntimeException) { oamModule.activateAlarm(OamModule::Alarm::AnswerReceivedOnClientSessionUnknown); // application message counters - ApplicationMessageOamModule::instantiate().count(cid.first, anna::diameter::codec::functions::getApplicationId(db), ApplicationMessageOamModule::Counter::Answer_UnknownReceived_AsClient); + ApplicationMessageOamModule::instantiate().count(cid.first, resultCode, anna::diameter::codec::functions::getApplicationId(db), ApplicationMessageOamModule::Counter::Answer_UnknownReceived_AsClient); eventUnknownResponse(db); string msg(asString()); @@ -653,14 +680,14 @@ throw(anna::RuntimeException) { anna::Millisecond current = (anna::Millisecond)anna::functions::millisecond(); anna::Millisecond request = response->getRequest()->getRequestTimestampMs(); anna::Millisecond timeToAnswerMs = current - request; - a_parent->updateProcessingTimeStatisticConcept(timeToAnswerMs); - LOGDEBUG - ( - std::string msg = "This diameter request context lasted "; - msg += anna::functions::asString(timeToAnswerMs); - msg += " milliseconds at diameter server (included network time)"; - anna::Logger::debug(msg, ANNA_FILE_LOCATION); - ); + a_parent->updateProcessingTimeStatisticConcept(timeToAnswerMs, cid); + //LOGDEBUG + //( + // std::string msg = "This diameter request context lasted "; + // msg += anna::functions::asString(timeToAnswerMs); + // msg += " milliseconds at diameter server (included network time)"; + // anna::Logger::debug(msg, ANNA_FILE_LOCATION); + //); // Progress origin for tracking purposes on asyncronous boxes with both diameter interfaces (entities and clients) Message * requestMessage = const_cast(response->getRequest()); requestMessage->setRequestServerSessionKey(response->getRequest()->getRequestServerSessionKey()); // -1 means unkown/unset @@ -682,7 +709,7 @@ throw(anna::RuntimeException) { // application message counters if(cid != helpers::base::COMMANDID__Capabilities_Exchange_Answer) - ApplicationMessageOamModule::instantiate().count(cid.first, anna::diameter::codec::functions::getApplicationId(db), ApplicationMessageOamModule::Counter::Answer_Received_AsClient); + ApplicationMessageOamModule::instantiate().count(cid.first, resultCode, anna::diameter::codec::functions::getApplicationId(db), ApplicationMessageOamModule::Counter::Answer_Received_AsClient); eventResponse(*response); } catch(anna::RuntimeException& ex) { @@ -705,10 +732,8 @@ throw(anna::RuntimeException) { void ClientSession::finalize() throw() { LOGMETHOD(anna::TraceMethod traceMethod(a_className, "finalize", ANNA_FILE_LOCATION)); Session::finalize(); - // Check deprecated entity: - const Entity *entity = getParent() /* server */ ->getParent() /* entity */; // Inform father server (availability changes): - bool changes = a_parent->refreshAvailability(); + a_parent->refreshAvailability(); // OAM const Server *server = getParent(); bool multipleConnections = (server->getMaxClientSessions() > 1); @@ -739,7 +764,7 @@ void ClientSession::recover() throw() { } // Inform father server (availability changes): - bool changes = a_parent->refreshAvailability(); + a_parent->refreshAvailability(); // OAM const Server *server = getParent(); bool multipleConnections = (server->getMaxClientSessions() > 1); @@ -955,7 +980,7 @@ void ClientSession::countSendings(const diameter::CommandId & cid, unsigned int else if(cid == helpers::base::COMMANDID__Disconnect_Peer_Answer) oamModule.count(OamModule::Counter::DPASentOK); // Application messages: else { - appMsgOamModule.count(cid.first, aid, isRequest ? ApplicationMessageOamModule::Counter::Request_SentOK_AsClient : ApplicationMessageOamModule::Counter::Answer_SentOK_AsClient); + appMsgOamModule.count(cid.first, -1 /* no result code */, aid, isRequest ? ApplicationMessageOamModule::Counter::Request_SentOK_AsClient : ApplicationMessageOamModule::Counter::Answer_SentOK_AsClient); } } else { // Main counters: @@ -969,7 +994,7 @@ void ClientSession::countSendings(const diameter::CommandId & cid, unsigned int else if(cid == helpers::base::COMMANDID__Disconnect_Peer_Answer) oamModule.count(OamModule::Counter::DPASentNOK); // Application messages: else { - appMsgOamModule.count(cid.first, aid, isRequest ? ApplicationMessageOamModule::Counter::Request_SentNOK_AsClient : ApplicationMessageOamModule::Counter::Answer_SentNOK_AsClient); + appMsgOamModule.count(cid.first, -1 /* no result code */, aid, isRequest ? ApplicationMessageOamModule::Counter::Request_SentNOK_AsClient : ApplicationMessageOamModule::Counter::Answer_SentNOK_AsClient); } } }