version 0.2.11
[fms.git] / src / freenet / messagexml.cpp
index 4b3252a..9652c76 100644 (file)
@@ -33,7 +33,9 @@ std::string MessageXML::GetXML()
        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
+               std::string boardname=(*i);\r
+               StringFunctions::Convert(boardname,boardname);\r
+               brds->LinkEndChild(XMLCreateCDATAElement("Board",boardname));\r
        }\r
 \r
        if(m_inreplyto.size()>0)\r
@@ -49,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
@@ -62,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
@@ -101,6 +118,11 @@ const bool MessageXML::ParseXML(const std::string &xml)
                if(txt)\r
                {\r
                        m_replyboard=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
@@ -115,6 +137,10 @@ const bool MessageXML::ParseXML(const std::string &xml)
                        {\r
                                std::string boardname=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
@@ -147,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=txt->ValueStr();\r
+                       }\r
+\r
+                       txt=hnd2.FirstChild("Size").FirstChild().ToText();\r
+                       if(txt)\r
+                       {\r
+                               sizestr=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