+ bpd = d; // base protocol dictionary in case of monostack. If multistack, will be calculated later
+
+ // Create codec engine and register it in the codec engine manager:
+ codecEngineName = anna::functions::asString("CodecEngineForStackId_%llu", id_value);
+ ce = new anna::diameter::codec::Engine(codecEngineName.c_str(), d);
+ em.registerCodecEngine(id_value, ce);
+
+ // Codec engine configuration:
+ const anna::xml::Attribute *vm_attr = (*it)->getAttribute("validationMode", false /* no exception */);
+ const anna::xml::Attribute *vd_attr = (*it)->getAttribute("validationDepth", false /* no exception */);
+ const anna::xml::Attribute *fm_attr = (*it)->getAttribute("fixMode", false /* no exception */);
+ const anna::xml::Attribute *if_attr = (*it)->getAttribute("ignoreFlags", false /* no exception */);
+
+ std::string vm_value = vm_attr ? vm_attr->getValue() : "AfterDecoding";
+ std::string vd_value = vd_attr ? vd_attr->getValue() : "FirstError";
+ std::string fm_value = fm_attr ? fm_attr->getValue() : "BeforeEncoding";
+
+ anna::diameter::codec::Engine::ValidationMode::_v vm;
+ if (vm_value == "BeforeEncoding") vm = anna::diameter::codec::Engine::ValidationMode::BeforeEncoding;
+ else if (vm_value == "AfterDecoding") vm = anna::diameter::codec::Engine::ValidationMode::AfterDecoding;
+ else if (vm_value == "Always") vm = anna::diameter::codec::Engine::ValidationMode::Always;
+ else if (vm_value == "Never") vm = anna::diameter::codec::Engine::ValidationMode::Never;
+ ce->setValidationMode(vm);
+
+ anna::diameter::codec::Engine::ValidationDepth::_v vd;
+ if (vd_value == "Complete") vd = anna::diameter::codec::Engine::ValidationDepth::Complete;
+ else if (vd_value == "FirstError") vd = anna::diameter::codec::Engine::ValidationDepth::FirstError;
+ ce->setValidationDepth(vd);
+
+ anna::diameter::codec::Engine::FixMode::_v fm;
+ if (fm_value == "BeforeEncoding") fm = anna::diameter::codec::Engine::FixMode::BeforeEncoding;
+ else if (fm_value == "AfterDecoding") fm = anna::diameter::codec::Engine::FixMode::AfterDecoding;
+ else if (fm_value == "Always") fm = anna::diameter::codec::Engine::FixMode::Always;
+ else if (fm_value == "Never") fm = anna::diameter::codec::Engine::FixMode::Never;
+ ce->setFixMode(fm);
+
+ bool if_value = (if_attr ? (if_attr->getValue() == "yes") : false);
+ ce->ignoreFlagsOnValidation(if_value);