X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fdiameter%2Fcodec%2FAvp.cpp;h=3a2c9b0732e9cd8335556adc61436d75b430de22;hb=ad7fdc865803176f1dd1696960073f616cfa3fda;hp=1a4378d2df8023bf6ae4702cac6b605b4588cb1f;hpb=08bdffbddf4bc0938eadec51af88de18734beda3;p=anna.git diff --git a/source/diameter/codec/Avp.cpp b/source/diameter/codec/Avp.cpp index 1a4378d..3a2c9b0 100644 --- a/source/diameter/codec/Avp.cpp +++ b/source/diameter/codec/Avp.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include @@ -686,7 +687,6 @@ void Avp::decodeDataPart(const char * buffer, int size, const parent_t & parent, int avpPos = 0; Avp* avp; anna::DataBlock db; - // Me as parent: parent_t me = parent; me.addAvp(a_id); @@ -785,13 +785,12 @@ void Avp::decode(const anna::DataBlock &db, const parent_t & parent, Message *an // 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 @@ -1313,6 +1312,16 @@ std::string Avp::getXMLdata(bool & isHex, const stack::Format *stackFormat) cons } +//------------------------------------------------------------------------------ +//---------------------------------------------------------------- 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() //------------------------------------------------------------------------------ @@ -1585,6 +1594,7 @@ anna::xml::Node* Avp::asXML(anna::xml::Node* parent) const throw() { return result; } + //------------------------------------------------------------------------------ //----------------------------------------------------------- Avp::asXMLString() //------------------------------------------------------------------------------ @@ -1593,3 +1603,11 @@ std::string Avp::asXMLString() const throw() { 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()); +}