X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fdiameter%2Fstack%2FEngine.cpp;h=bb46cbec08d3d5b6c02b5f5824dbb3c572feb7dc;hb=1a7a2591d75aef76173a0e8f80bf0183b3b72e82;hp=80e6a0068a72efbadef14cb56e18d641d4a8d3f6;hpb=4e12ac57e93c052f716a6305ad8fc099c45899d1;p=anna.git diff --git a/source/diameter/stack/Engine.cpp b/source/diameter/stack/Engine.cpp index 80e6a00..bb46cbe 100644 --- a/source/diameter/stack/Engine.cpp +++ b/source/diameter/stack/Engine.cpp @@ -1,8 +1,8 @@ -// ANNA - Anna is Not 'N' Anymore +// ANNA - Anna is Not Nothingness Anymore // // (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo // -// https://bitbucket.org/testillano/anna +// http://redmine.teslayout.com/projects/anna-suite // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions @@ -14,7 +14,7 @@ // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. -// * Neither the name of Google Inc. nor the names of its +// * Neither the name of the copyright holder nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // @@ -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