+// 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 //
+
+
+#ifndef example_diameter_launcher_MyDiameterEngine_hpp
+#define example_diameter_launcher_MyDiameterEngine_hpp
+
+// Project
+#include <anna/diameter.comm/Engine.hpp>
+
+// Process
+#include <MyDiameterEntity.hpp>
+#include <MyLocalServer.hpp>
+
+// Standard
+#include <string>
+
+
+namespace anna {
+ namespace diameter {
+ namespace stack {
+ class Dictionary;
+ }
+ }
+}
+
+class MyDiameterEngine : public anna::diameter::comm::Engine {
+public:
+
+ MyDiameterEngine(const char *className, const anna::diameter::stack::Dictionary *baseProtocolDictionary) : Engine(className, baseProtocolDictionary) {;}
+
+// Default implementation is enough
+// void readDPA(anna::DataBlock &dpa, const anna::DataBlock & dpr) throw() {;} // DPA is not replied
+ void setCEA(const std::string &ceaPathfile) throw() { a_ceaPathfile = ceaPathfile; }
+ void readCEA(anna::DataBlock &cea, const anna::DataBlock & cer) throw();
+// void readDWA(anna::DataBlock &dwa, const anna::DataBlock & dwr) throw() {;} // DWA is not replied
+
+private:
+ anna::Recycler<MyDiameterEntity> a_entitiesRecycler;
+
+ anna::diameter::comm::Entity* allocateEntity() throw() { return a_entitiesRecycler.create(); }
+
+ void releaseEntity(anna::diameter::comm::Entity* entity) throw() {
+ MyDiameterEntity* aux = static_cast <MyDiameterEntity*>(entity);
+ a_entitiesRecycler.release(aux);
+ }
+
+ anna::Recycler<MyLocalServer> a_localServersRecycler;
+
+ anna::diameter::comm::LocalServer* allocateLocalServer() throw() { return a_localServersRecycler.create(); }
+
+ void releaseLocalServer(anna::diameter::comm::LocalServer* localServer) throw() {
+ MyLocalServer* aux = static_cast <MyLocalServer*>(localServer);
+ a_localServersRecycler.release(aux);
+ }
+
+ std::string a_ceaPathfile; // path file to optional CEA (diameter local server configuration)
+};
+
+#endif