--- /dev/null
+#include "../../include/freenet/messagexml.h"\r
+\r
+#ifdef XMEM\r
+ #include <xmem.h>\r
+#endif\r
+\r
+MessageXML::MessageXML()\r
+{\r
+ Initialize();\r
+}\r
+\r
+std::string MessageXML::GetXML()\r
+{\r
+ TiXmlDocument td;\r
+ TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8","");\r
+ TiXmlElement *tid;\r
+ TiXmlPrinter tp;\r
+\r
+ td.LinkEndChild(tdec);\r
+ tid=new TiXmlElement("Message");\r
+ td.LinkEndChild(tid);\r
+\r
+ tid->LinkEndChild(XMLCreateTextElement("Date",m_date));\r
+ tid->LinkEndChild(XMLCreateTextElement("Time",m_time));\r
+ tid->LinkEndChild(XMLCreateCDATAElement("Subject",m_subject));\r
+ tid->LinkEndChild(XMLCreateCDATAElement("MessageID",m_messageid));\r
+ tid->LinkEndChild(XMLCreateCDATAElement("ReplyBoard",m_replyboard));\r
+ tid->LinkEndChild(XMLCreateCDATAElement("Body",m_body));\r
+\r
+ TiXmlElement *brds=new TiXmlElement("Boards");\r
+ tid->LinkEndChild(brds);\r
+ for(std::vector<std::string>::iterator i=m_boards.begin(); i!=m_boards.end(); i++)\r
+ {\r
+ brds->LinkEndChild(XMLCreateCDATAElement("Board",(*i)));\r
+ }\r
+\r
+ if(m_inreplyto.size()>0)\r
+ {\r
+ TiXmlElement *rply=new TiXmlElement("InReplyTo");\r
+ tid->LinkEndChild(rply);\r
+ for(std::map<long,std::string>::iterator j=m_inreplyto.begin(); j!=m_inreplyto.end(); j++)\r
+ {\r
+ TiXmlElement *mess=new TiXmlElement("Message");\r
+ rply->LinkEndChild(mess);\r
+ mess->LinkEndChild(XMLCreateTextElement("Order",(*j).first));\r
+ mess->LinkEndChild(XMLCreateCDATAElement("MessageID",(*j).second));\r
+ }\r
+ }\r
+\r
+ td.Accept(&tp);\r
+ return std::string(tp.CStr());\r
+}\r
+\r
+void MessageXML::Initialize()\r
+{\r
+ m_date="";\r
+ m_time="";\r
+ m_subject="";\r
+ m_boards.clear();\r
+ m_replyboard="";\r
+ m_inreplyto.clear();\r
+ m_body="";\r
+}\r
+\r
+const bool MessageXML::ParseXML(const std::string &xml)\r
+{\r
+ TiXmlDocument td;\r
+ td.Parse(xml.c_str());\r
+\r
+ if(!td.Error())\r
+ {\r
+ TiXmlHandle hnd(&td);\r
+ TiXmlNode *node1;\r
+ TiXmlNode *node2;\r
+ TiXmlText *txt;\r
+\r
+ Initialize();\r
+\r
+ txt=hnd.FirstChild("Message").FirstChild("Date").FirstChild().ToText();\r
+ if(txt)\r
+ {\r
+ m_date=txt->ValueStr();\r
+ }\r
+ txt=hnd.FirstChild("Message").FirstChild("Time").FirstChild().ToText();\r
+ if(txt)\r
+ {\r
+ m_time=txt->ValueStr();\r
+ }\r
+ txt=hnd.FirstChild("Message").FirstChild("Subject").FirstChild().ToText();\r
+ if(txt)\r
+ {\r
+ m_subject=txt->ValueStr();\r
+ }\r
+ txt=hnd.FirstChild("Message").FirstChild("MessageID").FirstChild().ToText();\r
+ if(txt)\r
+ {\r
+ m_messageid=txt->ValueStr();\r
+ }\r
+ txt=hnd.FirstChild("Message").FirstChild("ReplyBoard").FirstChild().ToText();\r
+ if(txt)\r
+ {\r
+ m_replyboard=txt->ValueStr();\r
+ }\r
+ txt=hnd.FirstChild("Message").FirstChild("Body").FirstChild().ToText();\r
+ if(txt)\r
+ {\r
+ m_body=txt->ValueStr();\r
+ }\r
+\r
+ node2=hnd.FirstChild("Message").FirstChild("Boards").FirstChild("Board").ToNode();\r
+ while(node2)\r
+ {\r
+ if(node2->FirstChild())\r
+ {\r
+ m_boards.push_back(node2->FirstChild()->ValueStr());\r
+ }\r
+ node2=node2->NextSibling("Board");\r
+ }\r
+\r
+ node2=hnd.FirstChild("Message").FirstChild("InReplyTo").FirstChild("Message").ToNode();\r
+ while(node2)\r
+ {\r
+ std::string orderstr;\r
+ long order=-1;\r
+ std::string messageid="";\r
+ TiXmlHandle hnd2(node2);\r
+ txt=hnd2.FirstChild("Order").FirstChild().ToText();\r
+ if(txt)\r
+ {\r
+ orderstr=txt->ValueStr();\r
+ StringFunctions::Convert(orderstr,order);\r
+ }\r
+ txt=hnd2.FirstChild("MessageID").FirstChild().ToText();\r
+ if(txt)\r
+ {\r
+ messageid=txt->ValueStr();\r
+ }\r
+\r
+ if(order!=-1 && messageid!="")\r
+ {\r
+ m_inreplyto[order]=messageid;\r
+ }\r
+\r
+ node2=node2->NextSibling("Message");\r
+ }\r
+\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+}\r