//------------------------------------------------------------------------------
//------------------------------------------------------ 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);
//------------------------------------------------------------------------------
//----------------------------------------------------------- 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 ");
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";
}
}
//------------------------------------------------------------------------------
-//--------------------------------------------------- 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<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(unsigned 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);
}
-void anna::diameter::stack::Engine::loadDictionary(const std::vector<int> & stacks, const std::string & xmlPathFile) throw(anna::RuntimeException) {
- std::vector<int>::const_iterator it;
+void anna::diameter::stack::Engine::loadDictionary(const std::vector<unsigned int> & stacks, const std::string & xmlPathFile) throw(anna::RuntimeException) {
+ std::vector<unsigned int>::const_iterator it;
Dictionary *d;
if(xmlPathFile == "")
//------------------------------------------------------------------------------
//-------------------------------------------------------- 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