// Session-Id if exists:
const Avp *reqSessionId = request.getAvp(helpers::base::AVPID__Session_Id, 1, anna::Exception::Mode::Ignore);
+ LOGDEBUG(anna::Logger::debug("Check answer message AVPs Session-Id, Origin-Host and Origin-Realm => replace them if missing, with request session-id & node configuration:", ANNA_FILE_LOCATION));
+
if(reqSessionId)
if(!getAvp(helpers::base::AVPID__Session_Id, 1, anna::Exception::Mode::Ignore))
addAvp(helpers::base::AVPID__Session_Id)->getUTF8String()->setValue(reqSessionId->getUTF8String()->getValue());
}
//------------------------------------------------------------------------------
-//----------------------------------------------------------- Message::loadXML()
+//------------------------------------------------------- Message::loadXMLFile()
//------------------------------------------------------------------------------
-void Message::loadXML(const std::string &xmlPathFile) throw(anna::RuntimeException) {
+void Message::loadXMLFile(const std::string &xmlPathFile) throw(anna::RuntimeException) {
anna::xml::DocumentFile xmlDocument;
anna::diameter::codec::functions::messageXmlDocumentFromXmlFile(xmlDocument, xmlPathFile);
fromXML(xmlDocument.getRootNode());
}
+//------------------------------------------------------------------------------
+//----------------------------------------------------- Message::loadXMLString()
+//------------------------------------------------------------------------------
+void Message::loadXMLString(const std::string &xmlString) throw(anna::RuntimeException) {
+
+ anna::xml::DocumentMemory xmlDocument;
+ anna::diameter::codec::functions::messageXmlDocumentFromXmlString(xmlDocument, xmlString);
+ fromXML(xmlDocument.getRootNode());
+}
+
//------------------------------------------------------------------------------
//----------------------------------------------------------- Message::fromXML()
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------- Message::asXMLString()
//------------------------------------------------------------------------------
-std::string Message::asXMLString() const throw() {
+std::string Message::asXMLString(bool normalize) const throw() {
anna::xml::Node root("root");
- return anna::xml::Compiler().apply(asXML(&root));
+
+ anna::xml::Compiler::Mode::_v mode = normalize ? anna::xml::Compiler::Mode::Sort : anna::xml::Compiler::Mode::Visual;
+ std::string result = anna::xml::Compiler().apply(asXML(&root), mode);
+
+ if (normalize)
+ result.erase(std::remove(result.begin(), result.end(), '\n'), result.end());
+
+ return result;
}
//------------------------------------------------------------------------------
bool Message::isLike(const std::string &pattern) const throw() {
anna::RegularExpression re(pattern);
- return re.isLike(asXMLString());
+ return re.isLike(asXMLString(true /* normalize by mean sorting attribute names and removing new lines */));
}
+