Base protocol codec for comm::Engine. Supported retransmissions
[anna.git] / source / diameter.comm / ServerSession.cpp
index 3c493d0..a615c78 100644 (file)
@@ -215,11 +215,18 @@ const Response* ServerSession::send(const Message* message) throw(anna::RuntimeE
     // Trace non-application messages:
     LOGDEBUG(
 
-      if((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&) {;}
-    }
+      if( (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(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);
+        }
+      }
     );
 
     // Restore sequences:
@@ -306,6 +313,11 @@ void ServerSession::eventPeerShutdown() throw() {
   a_parent->eventPeerShutdown(this);
 }
 
+void ServerSession::eventRequestRetransmission(Message *request) throw() {
+  // Inform father server:
+  a_parent->eventRequestRetransmission(this, request);
+}
+
 void ServerSession::eventResponse(const Response& response) throw(anna::RuntimeException) {
   // Inform father server:
   a_parent->eventResponse(response);
@@ -344,9 +356,18 @@ throw(anna::RuntimeException) {
     msg += anna::diameter::functions::commandIdAsPairString(cid);
     anna::Logger::debug(msg, ANNA_FILE_LOCATION);
 
-    if((cid == helpers::base::COMMANDID__Capabilities_Exchange_Request) || (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_Request) ||
+        (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);
@@ -571,7 +592,7 @@ throw(anna::RuntimeException) {
 
   if(cea.isEmpty()) {
     LOGDEBUG(anna::Logger::debug("Empty CEA message. Remote client never will bound this connection at application level", ANNA_FILE_LOCATION));
-    LOGWARNING(anna::Logger::warning("Discarding received CER without sending CEA (consider to send CEA with Result-Code DIAMETER_UNKNOWN_PEER)", ANNA_FILE_LOCATION));
+    LOGWARNING(anna::Logger::warning("Discarding received CER: cannot send empty CEA (consider to send CEA with Result-Code DIAMETER_UNKNOWN_PEER)", ANNA_FILE_LOCATION));
     return;
   }