Testing library separation: now not in launcher but isolated
[anna.git] / example / diameter / launcher / MyDiameterEntity.cpp
index 5e78ab3..6027bf0 100644 (file)
@@ -12,6 +12,7 @@
 #include <anna/time/functions.hpp>
 #include <anna/diameter.comm/Response.hpp>
 #include <anna/diameter.comm/ClientSession.hpp>
+#include <anna/diameter.comm/OriginHost.hpp>
 #include <anna/diameter/helpers/base/functions.hpp>
 #include <anna/diameter/helpers/dcca/functions.hpp>
 
@@ -20,8 +21,7 @@
 #include <MyDiameterEntity.hpp>
 #include <MyLocalServer.hpp>
 #include <Launcher.hpp>
-#include <OriginHost.hpp>
-#include <TestManager.hpp>
+#include <anna/testing/TestManager.hpp>
 
 
 void MyDiameterEntity::eventRequestRetransmission(const anna::diameter::comm::ClientSession* clientSession, anna::diameter::comm::Message *request) throw() {
@@ -33,7 +33,7 @@ void MyDiameterEntity::eventRequestRetransmission(const anna::diameter::comm::Cl
 
   // Performance stats:
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
-  OriginHost * my_node = my_app.getOriginHost(getEngine()->getOriginHost());
+  anna::diameter::comm::OriginHost * my_node = my_app.getOriginHost(getEngine()->getOriginHostName());
   // CommandId:
   anna::diameter::CommandId cid = anna::diameter::codec::functions::getCommandId(request->getBody());
   LOGDEBUG
@@ -52,54 +52,12 @@ void MyDiameterEntity::eventRequestRetransmission(const anna::diameter::comm::Cl
 }
 
 
-int MyDiameterEntity::readSocketId(const anna::diameter::comm::Message* message, int maxClientSessions) const throw() {
-
-  if(a_sessionBasedModelsType == "RoundRobin") return -1;  // IEC also would return -1
-
-  try {
-    // Service-Context-Id:
-    anna::diameter::helpers::dcca::ChargingContext::_v chargingContext;
-    std::string scid = anna::diameter::helpers::dcca::functions::getServiceContextId(message->getBody(), chargingContext);
-
-    switch(chargingContext) {
-    case anna::diameter::helpers::dcca::ChargingContext::Data:
-    case anna::diameter::helpers::dcca::ChargingContext::Voice:
-    case anna::diameter::helpers::dcca::ChargingContext::Content: {
-      // Session-Id: '<DiameterIdentity>;<high 32 bits>;<low 32 bits>[;<optional value>="">]'
-      std::string sid = anna::diameter::helpers::base::functions::getSessionId(message->getBody());
-      std::string diameterIdentity, optional;
-      anna::U32 high, low;
-      anna::diameter::helpers::base::functions::decodeSessionId(sid, diameterIdentity, high, low /* context-teid */, optional);
-
-      if(a_sessionBasedModelsType == "SessionIdLowPart") return (low % maxClientSessions);
-
-      if(a_sessionBasedModelsType == "SessionIdHighPart") return (high % maxClientSessions);
-
-      if(a_sessionBasedModelsType == "SessionIdOptionalPart") return (atoi(optional.c_str()) % maxClientSessions);
-    }
-    case anna::diameter::helpers::dcca::ChargingContext::SMS:
-    case anna::diameter::helpers::dcca::ChargingContext::MMS:
-    case anna::diameter::helpers::dcca::ChargingContext::Unknown:
-    default:
-       return -1; // IEC model and Unknown traffic types
-    }
-  } catch(anna::RuntimeException &ex) {
-    LOGDEBUG(
-      std::string msg = ex.getText();
-      msg += " | Round-robin between sessions will be used to send";
-      anna::Logger::debug(msg, ANNA_FILE_LOCATION);
-    );
-  }
-
-  return -1;
-}
-
 void MyDiameterEntity::eventRequest(anna::diameter::comm::ClientSession *clientSession, const anna::DataBlock &message)
 throw(anna::RuntimeException) {
   LOGMETHOD(anna::TraceMethod tm("launcher::MyDiameterEntity", "eventRequest", ANNA_FILE_LOCATION));
   // Performance stats:
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
-  OriginHost * my_node = my_app.getOriginHost(getEngine()->getOriginHost());
+  anna::diameter::comm::OriginHost * my_node = my_app.getOriginHost(getEngine()->getOriginHostName());
 
   // CommandId:
   anna::diameter::CommandId cid = anna::diameter::codec::functions::getCommandId(message);
@@ -154,7 +112,7 @@ throw(anna::RuntimeException) {
 
   // not found: forward to client (if exists)
   // Forward to client:
-  MyLocalServer *localServer = my_node->getDiameterServer();
+  MyLocalServer *localServer = (MyLocalServer *)my_node->getDiameterServer();
 
   if(localServer && (cid != anna::diameter::helpers::base::COMMANDID__Capabilities_Exchange_Request) /* don't forward CER */) {
     try {
@@ -176,14 +134,14 @@ throw(anna::RuntimeException) {
   }
 
   // Testing:
-  TestManager::instantiate().receiveMessage(message, my_node, clientSession);
+  anna::testing::TestManager::instantiate().receiveMessage(message, clientSession);
 }
 
 void MyDiameterEntity::eventResponse(const anna::diameter::comm::Response &response)
 throw(anna::RuntimeException) {
   LOGMETHOD(anna::TraceMethod tm("launcher::MyDiameterEntity", "eventResponse", ANNA_FILE_LOCATION));
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
-  OriginHost * my_node = my_app.getOriginHost(getEngine()->getOriginHost());
+  anna::diameter::comm::OriginHost *my_node = my_app.getOriginHost(getEngine()->getOriginHostName());
   anna::diameter::comm::ClassCode::_v code = response.getClassCode();
   anna::diameter::comm::Response::ResultCode::_v result = response.getResultCode();
   anna::diameter::comm::Message* request = const_cast<anna::diameter::comm::Message*>(response.getRequest());
@@ -239,7 +197,7 @@ throw(anna::RuntimeException) {
     }
 
     // Forward to client:
-    MyLocalServer *localServer = my_node->getDiameterServer();
+    MyLocalServer *localServer = (MyLocalServer *)my_node->getDiameterServer();
 
     if(localServer && (request_cid != anna::diameter::helpers::base::COMMANDID__Capabilities_Exchange_Request) /* don't forward CEA */) {
       anna::diameter::comm::Message *msg;
@@ -251,7 +209,7 @@ throw(anna::RuntimeException) {
         bool success = localServer->send(msg, request->getRequestServerSessionKey());
 
         // Detailed log:
-        anna::diameter::comm::ServerSession *usedServerSession = my_node->getMyDiameterEngine()->findServerSession(request->getRequestServerSessionKey());
+        anna::diameter::comm::ServerSession *usedServerSession = my_node->getCommEngine()->findServerSession(request->getRequestServerSessionKey());
         std::string detail = usedServerSession ? usedServerSession->asString() : "<null server session>"; // esto no deberia ocurrir
 
         if(my_node->logEnabled()) {
@@ -271,7 +229,7 @@ throw(anna::RuntimeException) {
   if(isOK || contextExpired) my_node->sendBurstMessage();
 
   // Testing:
-  TestManager::instantiate().receiveMessage(*message, my_node, clientSession);
+  if(isOK) anna::testing::TestManager::instantiate().receiveMessage(*message, clientSession);
 }
 
 void MyDiameterEntity::eventUnknownResponse(anna::diameter::comm::ClientSession *clientSession, const anna::DataBlock &message)
@@ -279,7 +237,7 @@ throw(anna::RuntimeException) {
   LOGMETHOD(anna::TraceMethod tm("launcher::MyDiameterEntity", "eventUnknownResponse", ANNA_FILE_LOCATION));
   // Performance stats:
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
-  OriginHost * my_node = my_app.getOriginHost(getEngine()->getOriginHost());
+  anna::diameter::comm::OriginHost * my_node = my_app.getOriginHost(getEngine()->getOriginHostName());
   // CommandId:
   anna::diameter::CommandId cid = anna::diameter::codec::functions::getCommandId(message);
   LOGDEBUG
@@ -302,7 +260,7 @@ throw(anna::RuntimeException) {
   LOGMETHOD(anna::TraceMethod tm("launcher::MyDiameterEntity", "eventDPA", ANNA_FILE_LOCATION));
   // Performance stats:
   Launcher& my_app = static_cast <Launcher&>(anna::app::functions::getApp());
-  OriginHost * my_node = my_app.getOriginHost(getEngine()->getOriginHost());
+  anna::diameter::comm::OriginHost * my_node = my_app.getOriginHost(getEngine()->getOriginHostName());
   // CommandId:
   anna::diameter::CommandId cid = anna::diameter::codec::functions::getCommandId(message);
   LOGDEBUG
@@ -320,5 +278,5 @@ throw(anna::RuntimeException) {
   if(my_node->logEnabled()) my_node->writeLogFile(message, "recvfe", clientSession->asString());
 
   // Testing:
-  TestManager::instantiate().receiveMessage(message, my_node, clientSession);
+  anna::testing::TestManager::instantiate().receiveMessage(message, clientSession);
 }