X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ffreenet%2Fmessagexml.cpp;h=ebba5f570d3873514d09bef04d0d1fd2df66575f;hb=1230cc420c955e75051d011d964bc68f061ba08c;hp=8de30771d35b69cdfb9a3e3a28bdd5df0b3260ae;hpb=b9c3763a932cebaa015a27fe111017f6f34dfbaa;p=fms.git diff --git a/src/freenet/messagexml.cpp b/src/freenet/messagexml.cpp index 8de3077..ebba5f5 100644 --- a/src/freenet/messagexml.cpp +++ b/src/freenet/messagexml.cpp @@ -25,13 +25,17 @@ std::string MessageXML::GetXML() tid->LinkEndChild(XMLCreateCDATAElement("Subject",m_subject)); tid->LinkEndChild(XMLCreateCDATAElement("MessageID",m_messageid)); tid->LinkEndChild(XMLCreateCDATAElement("ReplyBoard",m_replyboard)); - tid->LinkEndChild(XMLCreateCDATAElement("Body",m_body)); + // a little hack because TinyXML doesn't handle ]]> inside a CDATA section - manually separate into multiple CDATA sections + // TinyXML still won't be able to parse past the 1st CDATA section, but other implementations might + tid->LinkEndChild(XMLCreateCDATAElement("Body",StringFunctions::Replace(m_body,"]]>","]]]]>"))); TiXmlElement *brds=new TiXmlElement("Boards"); tid->LinkEndChild(brds); for(std::vector::iterator i=m_boards.begin(); i!=m_boards.end(); i++) { - brds->LinkEndChild(XMLCreateCDATAElement("Board",(*i))); + std::string boardname=(*i); + StringFunctions::Convert(boardname,boardname); + brds->LinkEndChild(XMLCreateCDATAElement("Board",boardname)); } if(m_inreplyto.size()>0) @@ -47,6 +51,20 @@ std::string MessageXML::GetXML() } } + // add attachemnt node if we have attachments + if(m_fileattachments.size()>0) + { + TiXmlElement *attachments=new TiXmlElement("Attachments"); + tid->LinkEndChild(attachments); + for(std::vector::iterator j=m_fileattachments.begin(); j!=m_fileattachments.end(); j++) + { + TiXmlElement *f=new TiXmlElement("File"); + attachments->LinkEndChild(f); + f->LinkEndChild(XMLCreateCDATAElement("Key",(*j).m_key)); + f->LinkEndChild(XMLCreateTextElement("Size",(*j).m_size)); + } + } + td.Accept(&tp); return std::string(tp.CStr()); } @@ -60,6 +78,7 @@ void MessageXML::Initialize() m_replyboard=""; m_inreplyto.clear(); m_body=""; + m_fileattachments.clear(); } const bool MessageXML::ParseXML(const std::string &xml) @@ -78,27 +97,32 @@ const bool MessageXML::ParseXML(const std::string &xml) txt=hnd.FirstChild("Message").FirstChild("Date").FirstChild().ToText(); if(txt) { - m_date=txt->ValueStr(); + m_date=SanitizeSingleString(txt->ValueStr()); } txt=hnd.FirstChild("Message").FirstChild("Time").FirstChild().ToText(); if(txt) { - m_time=txt->ValueStr(); + m_time=SanitizeSingleString(txt->ValueStr()); } txt=hnd.FirstChild("Message").FirstChild("Subject").FirstChild().ToText(); if(txt) { - m_subject=txt->ValueStr(); + m_subject=SanitizeSingleString(txt->ValueStr()); } txt=hnd.FirstChild("Message").FirstChild("MessageID").FirstChild().ToText(); if(txt) { - m_messageid=txt->ValueStr(); + m_messageid=SanitizeSingleString(txt->ValueStr()); } txt=hnd.FirstChild("Message").FirstChild("ReplyBoard").FirstChild().ToText(); if(txt) { - m_replyboard=txt->ValueStr(); + m_replyboard=SanitizeSingleString(txt->ValueStr()); + StringFunctions::LowerCase(m_replyboard,m_replyboard); + if(m_replyboard.size()>40) + { + m_replyboard.erase(40); + } } txt=hnd.FirstChild("Message").FirstChild("Body").FirstChild().ToText(); if(txt) @@ -111,7 +135,13 @@ const bool MessageXML::ParseXML(const std::string &xml) { if(node2->FirstChild()) { - m_boards.push_back(node2->FirstChild()->ValueStr()); + std::string boardname=SanitizeSingleString(node2->FirstChild()->ValueStr()); + StringFunctions::LowerCase(boardname,boardname); + if(boardname.size()>40) + { + boardname.erase(40); + } + m_boards.push_back(boardname); } node2=node2->NextSibling("Board"); } @@ -126,13 +156,13 @@ const bool MessageXML::ParseXML(const std::string &xml) txt=hnd2.FirstChild("Order").FirstChild().ToText(); if(txt) { - orderstr=txt->ValueStr(); + orderstr=SanitizeSingleString(txt->ValueStr()); StringFunctions::Convert(orderstr,order); } txt=hnd2.FirstChild("MessageID").FirstChild().ToText(); if(txt) { - messageid=txt->ValueStr(); + messageid=SanitizeSingleString(txt->ValueStr()); } if(order!=-1 && messageid!="") @@ -143,6 +173,36 @@ const bool MessageXML::ParseXML(const std::string &xml) node2=node2->NextSibling("Message"); } + node2=hnd.FirstChild("Message").FirstChild("Attachments").FirstChild("File").ToNode(); + while(node2) + { + std::string key=""; + std::string sizestr="-1"; + int size=-1; + + TiXmlHandle hnd2(node2); + + txt=hnd2.FirstChild("Key").FirstChild().ToText(); + if(txt) + { + key=SanitizeSingleString(txt->ValueStr()); + } + + txt=hnd2.FirstChild("Size").FirstChild().ToText(); + if(txt) + { + sizestr=SanitizeSingleString(txt->ValueStr()); + StringFunctions::Convert(sizestr,size); + } + + if(key!="" && size>0) + { + m_fileattachments.push_back(fileattachment(key,size)); + } + + node2=node2->NextSibling("File"); + } + return true; } else