Add CEA on server session configuration for services
[anna.git] / example / diameter / launcher / MyDiameterEngine.cpp
diff --git a/example/diameter/launcher/MyDiameterEngine.cpp b/example/diameter/launcher/MyDiameterEngine.cpp
new file mode 100644 (file)
index 0000000..e5700c0
--- /dev/null
@@ -0,0 +1,49 @@
+// ANNA - Anna is Not Nothingness Anymore                                                         //
+//                                                                                                //
+// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
+//                                                                                                //
+// See project site at http://redmine.teslayout.com/projects/anna-suite                           //
+// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
+
+
+// Project
+#include <anna/core/core.hpp>
+#include <anna/diameter/codec/functions.hpp>
+
+//#include <anna/time/functions.hpp>
+//#include <anna/diameter.comm/Response.hpp>
+//#include <anna/diameter.comm/ClientSession.hpp>
+//#include <anna/diameter/helpers/base/functions.hpp>
+//#include <anna/diameter/helpers/dcca/functions.hpp>
+
+// Process
+#include <MyDiameterEngine.hpp>
+
+
+void MyDiameterEngine::readCEA(anna::DataBlock &cea, const anna::DataBlock & cer) throw() {
+
+  LOGMETHOD(anna::TraceMethod tm("launcher::MyDiameterEngine", "readCEA", ANNA_FILE_LOCATION));
+
+  // Default implementation:
+  if (a_ceaPathfile == "")
+    return anna::diameter::comm::Engine::readCEA(cea, cer);
+
+//  if(codec::functions::getCommandId(cer) != helpers::base::COMMANDID__Capabilities_Exchange_Answer) {
+//throw anna::RuntimeException("The message provided as 'CEA' is not a Capabilities-Exchange-Answer", 
+//}
+
+  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
+  }
+}
+