Fix local server for multiple applications
[anna.git] / example / diameter / launcher / Launcher.cpp
index d3a9373..54fb750 100644 (file)
@@ -362,7 +362,7 @@ void Launcher::servicesFromXML(const anna::xml::Node* servicesNode, bool bindRes
       }
 
       /////////////////////////////////////////////////////////////////////////////////////////////
-      // Diameter communication engine:
+      // Diameter communication engine: ONE ENGINE PER OWN ORIGIN HOST
       std::string commEngineName = originHost->getValue() + "_DiameterCommEngine";
       MyDiameterEngine *commEngine = new MyDiameterEngine(commEngineName.c_str(), bpd);
       commEngine->setAutoBind(false);  // allow to create client-sessions without binding them, in order to set timeouts.
@@ -372,7 +372,7 @@ void Launcher::servicesFromXML(const anna::xml::Node* servicesNode, bool bindRes
       if (originRealm) commEngine->setOriginRealmName(originRealm->getValue());
 
       // Origin host node:
-      a_workingNode = new anna::diameter::comm::OriginHost((anna::diameter::comm::Engine*)commEngine, applicationId);
+      a_workingNode = new anna::diameter::comm::OriginHost((anna::diameter::comm::Engine*)commEngine, applicationId /* OriginHost constructor extracts corresponding stack codec engine */);
       a_workingNode->setRequestRetransmissions(retransmissions);
       /////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -386,9 +386,13 @@ void Launcher::servicesFromXML(const anna::xml::Node* servicesNode, bool bindRes
           commEngine->setNumberOfClientSessionsPerServer(sessions);
 
           // Client CER and DWR
-          std::string cerPathfile = cer ? cer->getValue() : "";
-          std::string dwrPathfile = dwr ? dwr->getValue() : "";
-          commEngine->setClientCERandDWR(cerPathfile, dwrPathfile);
+          if (cer) { // pathfile provided
+            commEngine->setClientCER(cer->getValue());
+          }
+          else {
+            commEngine->setClientCER(applicationId); // default engine CER
+          }
+          commEngine->setClientDWR(dwr ? dwr->getValue() : "" /* default DWR */);
 
           // Register one entity for this engine:
           a_workingNode->createEntity(entity->getValue(), ceaTimeoutMs, answersTimeoutMs);
@@ -1236,16 +1240,16 @@ bool Launcher::eventOperation(const std::string &operation, std::string &respons
   } else if(opType == "answerxml2e") {
 
     if(param1 == "") { // programmed answers FIFO's to stdout
-      response = getOperatedEntity()->getReactingAnswers()->asString("ANSWERS TO ENTITY");
+      response = getOperatedHost()->getReactingAnswers()->asString("ANSWERS TO ENTITY");
       return true; // OK
     } else if (param1 == "rotate") {
-      getOperatedEntity()->getReactingAnswers()->rotate(true);
+      getOperatedHost()->getReactingAnswers()->rotate(true);
     } else if (param1 == "exhaust") {
-      getOperatedEntity()->getReactingAnswers()->rotate(false);
+      getOperatedHost()->getReactingAnswers()->rotate(false);
     } else if (param1 == "clear") {
-      getOperatedEntity()->getReactingAnswers()->clear();
+      getOperatedHost()->getReactingAnswers()->clear();
     } else if (param1 == "dump") {
-      getOperatedEntity()->getReactingAnswers()->dump("programmed_answer");
+      getOperatedHost()->getReactingAnswers()->dump("programmed_answer");
     } else {
       codecMsg.loadXMLFile(param1);
       updateOperatedOriginHostWithMessage(codecMsg);
@@ -1257,21 +1261,21 @@ bool Launcher::eventOperation(const std::string &operation, std::string &respons
 
       int code = message->getId().first;
       LOGDEBUG(anna::Logger::debug("Adding a new programed 'answer to entity' to the FIFO queue corresponding to its message code ...", ANNA_FILE_LOCATION));
-      getOperatedEntity()->getReactingAnswers()->addMessage(code, message);
+      getOperatedHost()->getReactingAnswers()->addMessage(code, message);
     }
   } else if(opType == "answerxml2c") {
 
     if(param1 == "") { // programmed answers FIFO's to stdout
-      response = getOperatedServer()->getReactingAnswers()->asString("ANSWERS TO CLIENT");
+      response = getOperatedHost()->getReactingAnswers()->asString("ANSWERS TO CLIENT");
       return true; // OK
     } else if (param1 == "rotate") {
-      getOperatedServer()->getReactingAnswers()->rotate(true);
+      getOperatedHost()->getReactingAnswers()->rotate(true);
     } else if (param1 == "exhaust") {
-      getOperatedServer()->getReactingAnswers()->rotate(false);
+      getOperatedHost()->getReactingAnswers()->rotate(false);
     } else if (param1 == "clear") {
-      getOperatedServer()->getReactingAnswers()->clear();
+      getOperatedHost()->getReactingAnswers()->clear();
     } else if (param1 == "dump") {
-      getOperatedServer()->getReactingAnswers()->dump("programmed_answer");
+      getOperatedHost()->getReactingAnswers()->dump("programmed_answer");
     } else {
       codecMsg.loadXMLFile(param1);
       updateOperatedOriginHostWithMessage(codecMsg);
@@ -1283,7 +1287,7 @@ bool Launcher::eventOperation(const std::string &operation, std::string &respons
 
       int code = message->getId().first;
       LOGDEBUG(anna::Logger::debug("Adding a new programed 'answer to client' to the FIFO queue corresponding to its message code ...", ANNA_FILE_LOCATION));
-      getOperatedServer()->getReactingAnswers()->addMessage(code, message);
+      getOperatedHost()->getReactingAnswers()->addMessage(code, message);
     }
   } else if((opType == "burst")) {