New features
[anna.git] / source / diameter / stack / Engine.cpp
index 7a0f799..07daa79 100644 (file)
@@ -204,19 +204,38 @@ std::string anna::diameter::stack::Engine::asString(void) const throw() {
 
 
 //------------------------------------------------------------------------------
-//--------------------------------------------------- Engine::createDictionary()
+//------------------------------------------------- Engine::registerDictionary()
 //------------------------------------------------------------------------------
-anna::diameter::stack::Dictionary *  anna::diameter::stack::Engine::createDictionary(int stackId, const std::string & xmlPathFile) throw(anna::RuntimeException) {
+anna::diameter::stack::Dictionary * anna::diameter::stack::Engine::registerDictionary(int stackId, Dictionary *dictionary) throw(anna::RuntimeException) {
   Dictionary * result = const_cast<Dictionary *>(getDictionary(stackId));
 
+  if(!dictionary)
+    throw anna::RuntimeException("Cannot provide a NULL dictionary. It must be previously allocated", ANNA_FILE_LOCATION);
+
   if(result) {  // if exists, launch exception
     throw anna::RuntimeException("Such provided stack id has already been created. Removes it before call this method", ANNA_FILE_LOCATION);
   } else { // new stack
-    a_stacks[stackId] = new Dictionary(); // no need for singleton destructor
+    a_stacks[stackId] = dictionary; // no need for singleton destructor
     const_stack_iterator it = a_stacks.find(stackId);
-    result = (Dictionary *)(*it).second;
+    //result = (Dictionary *)(*it).second;
+    result = dictionary;
   }
 
+  return result;
+}
+
+//------------------------------------------------------------------------------
+//--------------------------------------------------- Engine::createDictionary()
+//------------------------------------------------------------------------------
+anna::diameter::stack::Dictionary *  anna::diameter::stack::Engine::createDictionary(int stackId, const std::string & xmlPathFile) throw(anna::RuntimeException) {
+  Dictionary * result = const_cast<Dictionary *>(getDictionary(stackId));
+
+  if(result)  // if exists, launch exception
+    throw anna::RuntimeException("Such provided stack id has already been created. Removes it before call this method", ANNA_FILE_LOCATION);
+
+  // Register a new dictionary:
+  result = registerDictionary(stackId, new Dictionary());
+
   if(xmlPathFile != "") {
     try {
       result->load(xmlPathFile);