#include <anna/diameter/stack/Engine.hpp>
#include <anna/diameter/codec/Engine.hpp>
#include <anna/core/functions.hpp>
+#include <anna/core/util/RegularExpression.hpp>
#include <anna/core/tracing/Logger.hpp>
#include <anna/core/functions.hpp>
int avpPos = 0;
Avp* avp;
anna::DataBlock db;
-
// Me as parent:
parent_t me = parent;
me.addAvp(a_id);
// a Diameter client, server, proxy, or translation agent and either the AVP or its value is unrecognized, the message MUST be rejected.
// Diameter Relay and redirect agents MUST NOT reject messages with unrecognized AVPs.
if(!getStackAvp() && mandatoryBit()) {
+ if(answer) {
+ answer->setResultCode(helpers::base::AVPVALUES__Result_Code::DIAMETER_AVP_UNSUPPORTED);
+ answer->setFailedAvp(parent, a_id);
+ }
- if(answer) {
- answer->setResultCode(helpers::base::AVPVALUES__Result_Code::DIAMETER_AVP_UNSUPPORTED);
- answer->setFailedAvp(parent, a_id);
- }
-
- unknownAvpWithMandatoryBit();
+ unknownAvpWithMandatoryBit();
}
// Avp Length
if(answer) {
answer->setResultCode(helpers::base::AVPVALUES__Result_Code::DIAMETER_INVALID_AVP_BITS);
- answer->setFailedAvp(parent, a_id); // RFC 6733 says nothing about Failed-AVP in this case...
+ answer->setFailedAvp(parent, a_id, stackAvp->getName().c_str()); // RFC 6733 says nothing about Failed-AVP in this case...
}
getEngine()->validationAnomaly(anna::functions::asString("The AVP %s flags (%d) does not fulfill the defined flag rules: %s", STRING_WITH_QUOTATION_MARKS__C_STR(me.asString()), (int)a_flags, STRING_WITH_QUOTATION_MARKS__C_STR(stackAvp->getFlagRulesDescription())));
if(answer) {
answer->setResultCode(helpers::base::AVPVALUES__Result_Code::DIAMETER_INVALID_AVP_VALUE);
- answer->setFailedAvp(parent, a_id);
+ answer->setFailedAvp(parent, a_id, stackAvp->getName().c_str());
}
getEngine()->validationAnomaly(anna::functions::asString("Enumerated AVP %s with value %d does not comply to restriction: %s", STRING_WITH_QUOTATION_MARKS__C_STR(me.asString()), a_Enumerated->getValue(), stackAvp->getEnums()));
}
+//------------------------------------------------------------------------------
+//---------------------------------------------------------------- Avp::decode()
+//------------------------------------------------------------------------------
+void Avp::decode(const anna::DataBlock &db) throw(anna::RuntimeException) {
+ parent_t parent;
+ parent.setMessage(CommandId(0, false), "No-Parent");
+ decode(db, parent, NULL);
+}
+
+
//------------------------------------------------------------------------------
//--------------------------------------------------------------- Avp::fromXML()
//------------------------------------------------------------------------------
return result;
}
+
//------------------------------------------------------------------------------
//----------------------------------------------------------- Avp::asXMLString()
//------------------------------------------------------------------------------
return anna::xml::Compiler().apply(asXML(&root));
}
+
+//------------------------------------------------------------------------------
+//---------------------------------------------------------------- Avp::isLike()
+//------------------------------------------------------------------------------
+bool Avp::isLike(const std::string &pattern) const throw() {
+ anna::RegularExpression re(pattern);
+ return re.isLike(asXMLString());
+}