X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fdiameter%2Fstack%2FEngine.cpp;h=bb46cbec08d3d5b6c02b5f5824dbb3c572feb7dc;hb=42f606f1c76bfbef24e7e772b6939d69d5ea970e;hp=7a0f799fb971b3a9dd958ddd336ea3b3148d0efd;hpb=39033fd99e58e994a5e98c1060dcc79e0d81f9c9;p=anna.git diff --git a/source/diameter/stack/Engine.cpp b/source/diameter/stack/Engine.cpp index 7a0f799..bb46cbe 100644 --- a/source/diameter/stack/Engine.cpp +++ b/source/diameter/stack/Engine.cpp @@ -163,7 +163,7 @@ anna::diameter::stack::Engine::Engine(void) { //------------------------------------------------------------------------------ //------------------------------------------------------ Engine::getDictionary() //------------------------------------------------------------------------------ -const anna::diameter::stack::Dictionary * anna::diameter::stack::Engine::getDictionary(int stackId) const throw() { +const anna::diameter::stack::Dictionary * anna::diameter::stack::Engine::getDictionary(unsigned int stackId) const throw() { const Dictionary * result = NULL; const_stack_iterator it = a_stacks.find(stackId); @@ -176,12 +176,12 @@ const anna::diameter::stack::Dictionary * anna::diameter::stack::Engine::getDict //------------------------------------------------------------------------------ //----------------------------------------------------------- Engine::asString() //------------------------------------------------------------------------------ -std::string anna::diameter::stack::Engine::asString(void) const throw() { +std::string anna::diameter::stack::Engine::asString(bool all) const throw() { std::string trace; - int stackId; + unsigned int stackId; if(isEmpty()) { - trace = "No diameter dictionaries found"; + trace = "No diameter stacks found"; } else { int numberOfStacks = stack_size(); trace = ((numberOfStacks > 1) ? "Multi-stack " : "Mono-stack "); @@ -194,7 +194,11 @@ std::string anna::diameter::stack::Engine::asString(void) const throw() { std::string title = "Diameter stack id = "; title += anna::functions::asString((*it).first); trace += anna::functions::highlightJustify(title); - trace += (*it).second->asString(); trace += "\n"; + + if(all) trace += (*it).second->asString(); + else trace += (*it).second->getName(); + + trace += "\n"; } } @@ -204,19 +208,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(unsigned int stackId, Dictionary *dictionary) throw(anna::RuntimeException) { Dictionary * result = const_cast(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(unsigned int stackId, const std::string & xmlPathFile) throw(anna::RuntimeException) { + Dictionary * result = const_cast(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); @@ -230,8 +253,8 @@ anna::diameter::stack::Dictionary * anna::diameter::stack::Engine::createDictio } -void anna::diameter::stack::Engine::loadDictionary(const std::vector & stacks, const std::string & xmlPathFile) throw(anna::RuntimeException) { - std::vector::const_iterator it; +void anna::diameter::stack::Engine::loadDictionary(const std::vector & stacks, const std::string & xmlPathFile) throw(anna::RuntimeException) { + std::vector::const_iterator it; Dictionary *d; if(xmlPathFile == "") @@ -270,7 +293,7 @@ void anna::diameter::stack::Engine::loadDictionary(const std::string & xmlPathFi //------------------------------------------------------------------------------ //-------------------------------------------------------- Engine::removeStack() //------------------------------------------------------------------------------ -void anna::diameter::stack::Engine::removeStack(int stackId) throw() { +void anna::diameter::stack::Engine::removeStack(unsigned int stackId) throw() { stack_iterator it = a_stacks.find(stackId); if(it != stack_end()) { // if exists, clear