Base protocol codec for comm::Engine. Supported retransmissions
[anna.git] / example / diameter / launcher / Launcher.cpp
index 710ebfe..05422f4 100644 (file)
@@ -58,7 +58,14 @@ void Launcher::releaseCommMessage(anna::diameter::comm::Message *msg) throw() {
   a_commMessages.release(msg);
 }
 
-void Launcher::baseProtocolSetupAsClient(anna::diameter::codec::Engine *codecEngine) throw(anna::RuntimeException) {
+void Launcher::baseProtocolSetupAsClient() throw(anna::RuntimeException) {
+
+  anna::diameter::codec::Engine *codecEngine;
+
+  codecEngine = getCodecEngine();
+  // XXXXXXXXXXXXXXXXXXXX codecEngine = a_myDiameterEngine->getBaseProtocolCodecEngine();
+
+
   // Build CER
   //   <CER> ::= < Diameter Header: 257, REQ >
   //             { Origin-Host } 264 diameterIdentity
@@ -339,7 +346,7 @@ throw(anna::RuntimeException) {
   std::string dictionaryParameter = cl.getValue("dictionary");
   lst.apply(dictionaryParameter, ",");
 
-  if(lst.size() >= 1) {  // always true (at least one, because -dictionary is mandatory)
+  if(lst.size() >= 1) {  // always true (at least one, because --dictionary is mandatory)
     anna::Tokenizer::const_iterator tok_min(lst.begin());
     anna::Tokenizer::const_iterator tok_max(lst.end());
     anna::Tokenizer::const_iterator tok_iter;
@@ -517,6 +524,10 @@ throw(anna::RuntimeException) {
 
   getCodecEngine()->ignoreFlagsOnValidation(cl.exists("ignoreFlags")); // XXXXXXXXXXXXXXXXXXXXXXX
 
+  // Base protocol for internal use (CEA, DWA, DPA and tracing:
+  a_myDiameterEngine->setBaseProtocolCodecEngine(getCodecEngine());
+
+
   // Diameter Server:
   if(cl.exists("diameterServer"))
     startDiameterServer(cl.exists("diameterServerSessions") ? cl.getIntegerValue("diameterServerSessions") : 1);
@@ -566,7 +577,7 @@ throw(anna::RuntimeException) {
     int entityServerSessions = cl.exists("entityServerSessions") ? cl.getIntegerValue("entityServerSessions") : 1;
 
     if(entityServerSessions > 0) {
-      baseProtocolSetupAsClient(getCodecEngine()); // Same CER/CEA, DWR/DWA for all diameter servers XXXXXXXXXXXXXXXXXXXXXXXXX
+      baseProtocolSetupAsClient();
       anna::socket_v servers = anna::functions::getSocketVectorFromString(cl.getValue("entity"));
       a_myDiameterEngine->setNumberOfClientSessionsPerServer(entityServerSessions);
       a_entity = (MyDiameterEntity*)(a_myDiameterEngine->createEntity(servers, "Launcher diameter entity"));
@@ -1303,6 +1314,9 @@ void Launcher::eventOperation(const std::string &operation, std::string &respons
 
     if(!entity) throw anna::RuntimeException("No entity configured to send the message", ANNA_FILE_LOCATION);
     anna::diameter::comm::Message *msg = createCommMessage();
+//xxxxxxxxxxxxx
+    msg->setRetries(4);
+    msg->setOnExpiry(anna::diameter::comm::Message::OnExpiry::Retransmit);
 
     if((opType == "sendxml") || (opType == "sendxml2e")) {
       codecMsg.loadXML(param1);
@@ -1635,10 +1649,12 @@ int MyDiameterEntity::readSocketId(const anna::diameter::comm::Message* message,
 
       if(sessionBasedModelsType == "SessionIdOptionalPart") return (atoi(optional.c_str()) % maxClientSessions);
     }
-    //case anna::diameter::helpers::dcca::ChargingContext::SMS:
-    //case anna::diameter::helpers::dcca::ChargingContext::MMS:
-    //default:
-    //   return -1; // IEC model and Unknown traffic types
+
+    case anna::diameter::helpers::dcca::ChargingContext::SMS:
+    case anna::diameter::helpers::dcca::ChargingContext::MMS:
+    case anna::diameter::helpers::dcca::ChargingContext::Unknown:
+    default:
+       return -1;
     }
   } catch(anna::RuntimeException &ex) {
     LOGDEBUG(