Dynamic lib selection and deployment
[anna.git] / example / diameter / launcher / OriginHost.cpp
index 32044b9..195edad 100644 (file)
@@ -36,7 +36,7 @@ OriginHost::OriginHost(const std::string &originHost, unsigned int applicationId
   std::string commEngineName = a_originHost + "_DiameterCommEngine";
   a_commEngine = new MyDiameterEngine(commEngineName.c_str(), baseProtocolDictionary);
   a_commEngine->setAutoBind(false);  // allow to create client-sessions without binding them, in order to set timeouts.
-  a_codecEngine = anna::diameter::codec::EngineManager::instantiate().getCodecEngine(applicationId);
+  a_codecEngine = anna::diameter::codec::EngineManager::instantiate().getCodecEngine(applicationId); // i know, this is going to exist (getCodecEngine is not null)
 
   a_logFile = "";
   a_burstLogFile = "";
@@ -74,19 +74,21 @@ void OriginHost::createEntity(const std::string &entityRepresentation, const ann
   a_entity->setClassCodeTimeout(anna::diameter::comm::ClassCode::ApplicationMessage, applicationTimeout);
 }
 
-void OriginHost::startDiameterServer(const std::string &serverRepresentation, int sessions, const anna::Millisecond &inactivityTimeout) throw(anna::RuntimeException) {
+void OriginHost::startDiameterServer(const std::string &serverRepresentation, int sessions, const anna::Millisecond &inactivityTimeout, const anna::Millisecond &applicationTimeout, const std::string &ceaPathfile) throw(anna::RuntimeException) {
 
   //if(sessions <= 0) return; negative implies no limit for accepted connections
 
   std::string address; int port;
   anna::functions::getAddressAndPortFromSocketLiteral(serverRepresentation, address, port);
   std::string serverDescription = "Launcher diameter local server for "; serverDescription += a_originHost;
+  a_commEngine->setCEA(ceaPathfile);
   a_diameterServer = (MyLocalServer*)(a_commEngine->createLocalServer(address, port, sessions));
           // we could set sessions = 0, and after application run(), use setMaxConnections(real sessions)
           // over the local server in order to start it.
 
   a_diameterServer->setDescription(serverDescription);
   a_diameterServer->setAllowedInactivityTime(inactivityTimeout);
+  a_diameterServer->setClassCodeTimeout(anna::diameter::comm::ClassCode::ApplicationMessage, applicationTimeout);
 }
 
 anna::diameter::comm::Message *OriginHost::createCommMessage() throw(anna::RuntimeException) {
@@ -147,7 +149,10 @@ void OriginHost::writeLogFile(const anna::diameter::codec::Message &decodedMessa
   }
 
   if(a_dumpLog) {
-    std::string name = getMyDiameterEngine()->getOriginHost();
+    // <unix ms timestamp>.<originHost>.<hop by hop>.<end to end>.<message code>.<request|answer>.<type of event>.xml
+    std::string name = anna::functions::asString((anna::Millisecond)anna::functions::millisecond());
+    name += ".";
+    name += getMyDiameterEngine()->getOriginHost();
     name += ".";
     name += anna::functions::asString(decodedMessage.getHopByHop());
     name += ".";