// Check attributes exclusiveness
if(name) { // compact mode
- bool allowFlagsField = ( stackAvp->getVbit() == anna::diameter::stack::Avp::FlagRule::may || stackAvp->getVbit() == anna::diameter::stack::Avp::FlagRule::shouldnot
+
+ if(code || vendorCode) {
+ std::string msg = "Error processing avp <name '"; msg += name->getValue();
+ msg += "'>: avp attributes <'code' + 'vendorCode'> are not allowed if <'name'> is provided";
+ throw anna::RuntimeException(msg, ANNA_FILE_LOCATION);
+ }
+
+ // flags uncertainty:
+ bool flagsUncertainty = ( stackAvp->getVbit() == anna::diameter::stack::Avp::FlagRule::may || stackAvp->getVbit() == anna::diameter::stack::Avp::FlagRule::shouldnot
|| stackAvp->getMbit() == anna::diameter::stack::Avp::FlagRule::may || stackAvp->getMbit() == anna::diameter::stack::Avp::FlagRule::shouldnot
/* umm, perhaps we could omit for bit P, whic is deprecated ... */
/* || stackAvp->getPbit() == anna::diameter::stack::Avp::FlagRule::may || stackAvp->getPbit() == anna::diameter::stack::Avp::FlagRule::shouldnot*/ );
- if(code || (flags && !allowFlagsField) || vendorCode) {
- std::string msg = "Error processing avp <name '"; msg += name->getValue();
- if (flags) msg += "'>: avp attributes <'code' + 'flags' + 'vendorCode'> are not allowed if <'name'> is provided (also flags is not permitted: no may, no shouldnot)";
- else msg += "'>: avp attributes <'code' + 'vendorCode'> are not allowed if <'name'> is provided";
- throw anna::RuntimeException(msg, ANNA_FILE_LOCATION);
+ if(flags && !flagsUncertainty) {
+ std::string msg = "Be careful processing avp <name '"; msg += name->getValue();
+ msg += "'> together with avp 'flags' attribute, because may/shouldnot uncertainty was not specified";
+ LOGINFORMATION(Logger::information(msg, ANNA_FILE_LOCATION));
}
setId(stackAvp->getId());
- if (flags && allowFlagsField) {
+ //if (flags && flagsUncertainty) {
+ if (flags) {
// Flags check
int i_aux = flags->getIntegerValue();