Testing library separation: now not in launcher but isolated
[anna.git] / source / diameter.comm / Engine.cpp
index d43da75..56aa1b6 100644 (file)
@@ -64,6 +64,7 @@ comm::Engine::Engine(const char *className, const stack::Dictionary *baseProtoco
   anna::diameter::sccs::activate();
   a_originRealm = anna::functions::getDomainname();
   a_originHost = anna::functions::getHostname();
+  a_ceaPathfile = "";
 
   // Internal base protocol codec engine:
   a_baseProtocolCodecEngine.setValidationMode(anna::diameter::codec::Engine::ValidationMode::Always); // default was: after decoding
@@ -115,8 +116,8 @@ void comm::Engine::setClientCERandDWR(const std::string & cer, const std::string
   //           * [Acct-Application-Id]  259 Unsigned32
   anna::diameter::codec::Message diameterCER(getBaseProtocolCodecEngine());
   int applicationId = 0 /*anna::diameter::helpers::APPID__3GPP_Rx*/; // Unsigned32
-  std::string OH = getOriginHost();
-  std::string OR = getOriginRealm();
+  std::string OH = getOriginHostName();
+  std::string OR = getOriginRealmName();
   std::string hostIP = anna::functions::getHostnameIP(); // Address
   int vendorId = anna::diameter::helpers::VENDORID__tgpp; // Unsigned32
   std::string productName = "ANNA Diameter Client"; // UTF8String
@@ -768,13 +769,13 @@ int comm::Engine::getOTARequestsForLocalServers() const throw() {
 }
 
 
-void comm::Engine::setOriginRealm(const std::string & originRealm) throw() {
-  a_originRealm = ((originRealm != "") ? originRealm : anna::functions::getDomainname());
+void comm::Engine::setOriginRealmName(const std::string & originRealmName) throw() {
+  a_originRealm = ((originRealmName != "") ? originRealmName : anna::functions::getDomainname());
 }
 
 
-void comm::Engine::setOriginHost(const std::string & originHost) throw() {
-  a_originHost = ((originHost != "") ? originHost : anna::functions::getHostname());
+void comm::Engine::setOriginHostName(const std::string & originHostName) throw() {
+  a_originHost = ((originHostName != "") ? originHostName : anna::functions::getHostname());
 }
 
 
@@ -927,9 +928,9 @@ void comm::Engine::availabilityLostForEntities() throw() {
   a_availableForEntities = false;
   LOGDEBUG(
     std::string msg = "diameter::comm::Engine { Origin-Realm: ";
-    msg += getOriginRealm();
+    msg += getOriginRealmName();
     msg += " | Origin-Host: ";
-    msg += getOriginHost();
+    msg += getOriginHostName();
     msg += " } has lost its availability for entities";
     anna::Logger::debug(msg, ANNA_FILE_LOCATION);
   );
@@ -946,9 +947,9 @@ void comm::Engine::availabilityRecoveredForEntities() throw() {
   a_availableForEntities = true;
   LOGDEBUG(
     std::string msg = "diameter::comm::Engine { Origin-Realm: ";
-    msg += getOriginRealm();
+    msg += getOriginRealmName();
     msg += " | Origin-Host: ";
-    msg += getOriginHost();
+    msg += getOriginHostName();
     msg += " } has recovered its availability for entities";
     anna::Logger::debug(msg, ANNA_FILE_LOCATION);
   );
@@ -965,9 +966,9 @@ void comm::Engine::availabilityLostForLocalServers() throw() {
   a_availableForLocalServers = false;
   LOGDEBUG(
     std::string msg = "diameter::comm::Engine { Origin-Realm: ";
-    msg += getOriginRealm();
+    msg += getOriginRealmName();
     msg += " | Origin-Host: ";
-    msg += getOriginHost();
+    msg += getOriginHostName();
     msg += " } has lost its availability for local servers";
     anna::Logger::debug(msg, ANNA_FILE_LOCATION);
   );
@@ -984,9 +985,9 @@ void comm::Engine::availabilityRecoveredForLocalServers() throw() {
   a_availableForLocalServers = true;
   LOGDEBUG(
     std::string msg = "diameter::comm::Engine { Origin-Realm: ";
-    msg += getOriginRealm();
+    msg += getOriginRealmName();
     msg += " | Origin-Host: ";
-    msg += getOriginHost();
+    msg += getOriginHostName();
     msg += " } has recovered its availability for local servers";
     anna::Logger::debug(msg, ANNA_FILE_LOCATION);
   );
@@ -1102,11 +1103,30 @@ void comm::Engine::readDPA(anna::DataBlock &dpa, const anna::DataBlock & dpr) th
 }
 
 
-void comm::Engine::readCEA(anna::DataBlock &cea, const anna::DataBlock & cer) throw() {
+void comm::Engine::readCEA(anna::DataBlock &cea, const anna::DataBlock &cer) throw() {
 
   // Check for base protocol codec engine health:
   assertBaseProtocolHealth();
 
+  if (a_ceaPathfile != "") {
+    anna::diameter::codec::Message diameterCEA(getBaseProtocolCodecEngine());
+
+    try {
+      diameterCEA.loadXML(a_ceaPathfile);
+      diameterCEA.setHopByHop(anna::diameter::codec::functions::getHopByHop(cer));
+      diameterCEA.setEndToEnd(anna::diameter::codec::functions::getEndToEnd(cer));
+      cea = diameterCEA.code();
+
+    } catch(anna::RuntimeException &ex) {
+      ex.trace();
+      LOGWARNING(anna::Logger::warning("CEA file not found or unable to parse. Encoding harcoded default version ...", ANNA_FILE_LOCATION));
+      //return anna::diameter::comm::Engine::readCEA(cea, cer);
+      // will fail with empty cea
+      }
+
+    return;
+  }
+
   // Default CEA implementation:
   //
   //   'Capabilities-Exchange-Answer' (257,answer)