version 0.2.18
[fms.git] / src / freenet / messagexml.cpp
index 8f5006e..ebba5f5 100644 (file)
@@ -51,6 +51,20 @@ std::string MessageXML::GetXML()
                }\r
        }\r
 \r
+       // add attachemnt node if we have attachments\r
+       if(m_fileattachments.size()>0)\r
+       {\r
+               TiXmlElement *attachments=new TiXmlElement("Attachments");\r
+               tid->LinkEndChild(attachments);\r
+               for(std::vector<fileattachment>::iterator j=m_fileattachments.begin(); j!=m_fileattachments.end(); j++)\r
+               {\r
+                       TiXmlElement *f=new TiXmlElement("File");\r
+                       attachments->LinkEndChild(f);\r
+                       f->LinkEndChild(XMLCreateCDATAElement("Key",(*j).m_key));\r
+                       f->LinkEndChild(XMLCreateTextElement("Size",(*j).m_size));\r
+               }\r
+       }\r
+\r
        td.Accept(&tp);\r
        return std::string(tp.CStr());\r
 }\r
@@ -64,6 +78,7 @@ void MessageXML::Initialize()
        m_replyboard="";\r
        m_inreplyto.clear();\r
        m_body="";\r
+       m_fileattachments.clear();\r
 }\r
 \r
 const bool MessageXML::ParseXML(const std::string &xml)\r
@@ -82,28 +97,32 @@ const bool MessageXML::ParseXML(const std::string &xml)
                txt=hnd.FirstChild("Message").FirstChild("Date").FirstChild().ToText();\r
                if(txt)\r
                {\r
-                       m_date=txt->ValueStr();\r
+                       m_date=SanitizeSingleString(txt->ValueStr());\r
                }\r
                txt=hnd.FirstChild("Message").FirstChild("Time").FirstChild().ToText();\r
                if(txt)\r
                {\r
-                       m_time=txt->ValueStr();\r
+                       m_time=SanitizeSingleString(txt->ValueStr());\r
                }\r
                txt=hnd.FirstChild("Message").FirstChild("Subject").FirstChild().ToText();\r
                if(txt)\r
                {\r
-                       m_subject=txt->ValueStr();\r
+                       m_subject=SanitizeSingleString(txt->ValueStr());\r
                }\r
                txt=hnd.FirstChild("Message").FirstChild("MessageID").FirstChild().ToText();\r
                if(txt)\r
                {\r
-                       m_messageid=txt->ValueStr();\r
+                       m_messageid=SanitizeSingleString(txt->ValueStr());\r
                }\r
                txt=hnd.FirstChild("Message").FirstChild("ReplyBoard").FirstChild().ToText();\r
                if(txt)\r
                {\r
-                       m_replyboard=txt->ValueStr();\r
+                       m_replyboard=SanitizeSingleString(txt->ValueStr());\r
                        StringFunctions::LowerCase(m_replyboard,m_replyboard);\r
+                       if(m_replyboard.size()>40)\r
+                       {\r
+                               m_replyboard.erase(40);\r
+                       }\r
                }\r
                txt=hnd.FirstChild("Message").FirstChild("Body").FirstChild().ToText();\r
                if(txt)\r
@@ -116,8 +135,12 @@ const bool MessageXML::ParseXML(const std::string &xml)
                {\r
                        if(node2->FirstChild())\r
                        {\r
-                               std::string boardname=node2->FirstChild()->ValueStr();\r
+                               std::string boardname=SanitizeSingleString(node2->FirstChild()->ValueStr());\r
                                StringFunctions::LowerCase(boardname,boardname);\r
+                               if(boardname.size()>40)\r
+                               {\r
+                                       boardname.erase(40);\r
+                               }\r
                                m_boards.push_back(boardname);\r
                        }\r
                        node2=node2->NextSibling("Board");\r
@@ -133,13 +156,13 @@ const bool MessageXML::ParseXML(const std::string &xml)
                        txt=hnd2.FirstChild("Order").FirstChild().ToText();\r
                        if(txt)\r
                        {\r
-                               orderstr=txt->ValueStr();\r
+                               orderstr=SanitizeSingleString(txt->ValueStr());\r
                                StringFunctions::Convert(orderstr,order);\r
                        }\r
                        txt=hnd2.FirstChild("MessageID").FirstChild().ToText();\r
                        if(txt)\r
                        {\r
-                               messageid=txt->ValueStr();\r
+                               messageid=SanitizeSingleString(txt->ValueStr());\r
                        }\r
 \r
                        if(order!=-1 && messageid!="")\r
@@ -150,6 +173,36 @@ const bool MessageXML::ParseXML(const std::string &xml)
                        node2=node2->NextSibling("Message");\r
                }\r
 \r
+               node2=hnd.FirstChild("Message").FirstChild("Attachments").FirstChild("File").ToNode();\r
+               while(node2)\r
+               {\r
+                       std::string key="";\r
+                       std::string sizestr="-1";\r
+                       int size=-1;\r
+\r
+                       TiXmlHandle hnd2(node2);\r
+\r
+                       txt=hnd2.FirstChild("Key").FirstChild().ToText();\r
+                       if(txt)\r
+                       {\r
+                               key=SanitizeSingleString(txt->ValueStr());\r
+                       }\r
+\r
+                       txt=hnd2.FirstChild("Size").FirstChild().ToText();\r
+                       if(txt)\r
+                       {\r
+                               sizestr=SanitizeSingleString(txt->ValueStr());\r
+                               StringFunctions::Convert(sizestr,size);\r
+                       }\r
+\r
+                       if(key!="" && size>0)\r
+                       {\r
+                               m_fileattachments.push_back(fileattachment(key,size));\r
+                       }\r
+\r
+                       node2=node2->NextSibling("File");\r
+               }\r
+\r
                return true;\r
        }\r
        else\r