version 0.2.11
[fms.git] / src / freenet / messagexml.cpp
index ec5946e..9652c76 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
@@ -158,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