From 7b7396649970852a360255f1db2f044d13913e39 Mon Sep 17 00:00:00 2001 From: Eduardo Ramos Testillano Date: Tue, 1 Aug 2017 23:23:15 +0200 Subject: [PATCH] Improve flags uncertainty. Warning when provided with name attribute --- source/diameter/codec/Avp.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/source/diameter/codec/Avp.cpp b/source/diameter/codec/Avp.cpp index a956aae..be51349 100644 --- a/source/diameter/codec/Avp.cpp +++ b/source/diameter/codec/Avp.cpp @@ -1374,20 +1374,28 @@ void Avp::fromXML(const anna::xml::Node* avpNode) throw(anna::RuntimeException) // 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 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 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 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(); -- 2.20.1