X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ffreenet%2Fmessagelistxml.cpp;h=c35e10f7aea356761ff0265ff1e508168ee8f543;hb=dec33c63afafabf83c3039e916725cac6faef9b3;hp=c05bb665489c56f2f1b9a72200b0497bdb7a2ac7;hpb=6b896a9e1dc143bba86795be1e9336549db9b85f;p=fms.git diff --git a/src/freenet/messagelistxml.cpp b/src/freenet/messagelistxml.cpp index c05bb66..c35e10f 100644 --- a/src/freenet/messagelistxml.cpp +++ b/src/freenet/messagelistxml.cpp @@ -9,11 +9,21 @@ MessageListXML::MessageListXML() Initialize(); } -void MessageListXML::AddMessage(const std::string &date, const long index, const std::vector boards) +void MessageListXML::AddMessage(const std::string &date, const long index, const std::vector &boards) { m_messages.push_back(message(date,index,boards)); } +void MessageListXML::AddExternalMessage(const std::string &identity, const std::string &date, const long index, const std::vector &boards) +{ + m_externalmessages.push_back(externalmessage("Keyed",identity,date,index,boards)); +} + +void MessageListXML::AddExternalMessage(const std::string &messagekey, const std::string &date, const std::vector &boards) +{ + m_externalmessages.push_back(externalmessage("Anonymous",messagekey,date,boards)); +} + std::vector MessageListXML::GetBoards(const long index) { if(index>=0 && index MessageListXML::GetExternalBoards(const long index) +{ + if(index>=0 && index(); + } +} + +std::string MessageListXML::GetExternalDate(const long index) +{ + if(index>=0 && index=0 && index=0 && index=0 && index=0 && index=0 && index doc=new Poco::XML::Document; + //TiXmlDocument td; + //TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8",""); + Poco::XML::Element *root=doc->createElement("MessageList"); + //TiXmlElement *tid; + //TiXmlPrinter tp; - td.LinkEndChild(tdec); - tid=new TiXmlElement("MessageList"); - td.LinkEndChild(tid); + doc->appendChild(root); + //td.LinkEndChild(tdec); + //tid=new TiXmlElement("MessageList"); + //td.LinkEndChild(tid); for(std::vector::iterator i=m_messages.begin(); i!=m_messages.end(); i++) { - TiXmlElement *tr=new TiXmlElement("Message"); - tid->LinkEndChild(tr); - tr->LinkEndChild(XMLCreateTextElement("Date",(*i).m_date)); - tr->LinkEndChild(XMLCreateTextElement("Index",(*i).m_index)); - TiXmlElement *brds=new TiXmlElement("Boards"); - tr->LinkEndChild(brds); + Poco::XML::Element *tr=doc->createElement("Message"); + //TiXmlElement *tr=new TiXmlElement("Message"); + root->appendChild(tr); + //tid->LinkEndChild(tr); + tr->appendChild(XMLCreateTextElement(doc,"Date",(*i).m_date)); + //tr->LinkEndChild(XMLCreateTextElement("Date",(*i).m_date)); + tr->appendChild(XMLCreateTextElement(doc,"Index",(*i).m_index)); + //tr->LinkEndChild(XMLCreateTextElement("Index",(*i).m_index)); + Poco::XML::Element *boards=doc->createElement("Boards"); + //TiXmlElement *brds=new TiXmlElement("Boards"); + tr->appendChild(boards); + //tr->LinkEndChild(brds); + for(std::vector::iterator j=(*i).m_boards.begin(); j!=(*i).m_boards.end(); j++) + { + boards->appendChild(XMLCreateCDATAElement(doc,"Board",(*j))); + //brds->LinkEndChild(XMLCreateCDATAElement("Board",(*j))); + } + } + + for(std::vector::iterator i=m_externalmessages.begin(); i!=m_externalmessages.end(); i++) + { + Poco::XML::Element *tr=doc->createElement("ExternalMessage"); + //TiXmlElement *tr=new TiXmlElement("ExternalMessage"); + root->appendChild(tr); + //tid->LinkEndChild(tr); + tr->appendChild(XMLCreateTextElement(doc,"Type",(*i).m_type)); + //tr->LinkEndChild(XMLCreateTextElement("Type",(*i).m_type)); + if((*i).m_type=="Keyed") + { + tr->appendChild(XMLCreateCDATAElement(doc,"Identity",(*i).m_identity)); + //tr->LinkEndChild(XMLCreateCDATAElement("Identity",(*i).m_identity)); + tr->appendChild(XMLCreateTextElement(doc,"Index",(*i).m_index)); + //tr->LinkEndChild(XMLCreateTextElement("Index",(*i).m_index)); + } + else + { + tr->appendChild(XMLCreateCDATAElement(doc,"MessageKey",(*i).m_messagekey)); + //tr->LinkEndChild(XMLCreateCDATAElement("MessageKey",(*i).m_messagekey)); + } + tr->appendChild(XMLCreateTextElement(doc,"Date",(*i).m_date)); + //tr->LinkEndChild(XMLCreateTextElement("Date",(*i).m_date)); + Poco::XML::Element *boards=doc->createElement("Boards"); + //TiXmlElement *brds=new TiXmlElement("Boards"); + tr->appendChild(boards); + //tr->LinkEndChild(brds); for(std::vector::iterator j=(*i).m_boards.begin(); j!=(*i).m_boards.end(); j++) { - brds->LinkEndChild(XMLCreateCDATAElement("Board",(*j))); + boards->appendChild(XMLCreateCDATAElement(doc,"Board",(*j))); + //brds->LinkEndChild(XMLCreateCDATAElement("Board",(*j))); } } - td.Accept(&tp); - return std::string(tp.CStr()); + //td.Accept(&tp); + //return std::string(tp.CStr()); + return GenerateXML(doc); } void MessageListXML::Initialize() { m_messages.clear(); + m_externalmessages.clear(); } const bool MessageListXML::ParseXML(const std::string &xml) { + + bool parsed=false; + Poco::XML::DOMParser dp; + + Initialize(); + + try + { + Poco::AutoPtr doc=dp.parseString(FixCDATA(xml)); + Poco::XML::Element *root=XMLGetFirstChild(doc,"MessageList"); + + Poco::XML::Element *node=XMLGetFirstChild(root,"Message"); + while(node) + { + std::string date=""; + int index=-1; + std::vector boards; + + Poco::XML::Element *node2=XMLGetFirstChild(node,"Date"); + if(node2 && node2->firstChild()) + { + date=SanitizeSingleString(node2->firstChild()->getNodeValue()); + } + node2=XMLGetFirstChild(node,"Index"); + if(node2 && node2->firstChild()) + { + std::string indexstr=SanitizeSingleString(node2->firstChild()->getNodeValue()); + StringFunctions::Convert(indexstr,index); + } + node2=XMLGetFirstChild(node,"Boards"); + if(node2) + { + Poco::XML::Element *node3=XMLGetFirstChild(node2,"Board"); + while(node3) + { + if(node3 && node3->firstChild()) + { + std::string boardname=SanitizeSingleString(node3->firstChild()->getNodeValue()); + StringFunctions::LowerCase(boardname,boardname); + if(boardname.size()>40) + { + boardname.erase(40); + } + boards.push_back(boardname); + } + node3=XMLGetNextSibling(node3,"Board"); + } + } + + m_messages.push_back(message(date,index,boards)); + + node=XMLGetNextSibling(node,"Message"); + } + + node=XMLGetFirstChild(root,"ExternalMessage"); + while(node) + { + std::string type=""; + std::string identity=""; + std::string date=""; + int index=-1; + std::vector boards; + + Poco::XML::Element *node2=XMLGetFirstChild(node,"Type"); + if(node2 && node2->firstChild()) + { + type=SanitizeSingleString(node2->firstChild()->getNodeValue()); + } + + if(type=="Keyed") + { + node2=XMLGetFirstChild(node,"Identity"); + if(node2 && node2->firstChild()) + { + identity=SanitizeSingleString(node2->firstChild()->getNodeValue()); + } + node2=XMLGetFirstChild(node,"Date"); + if(node2 && node2->firstChild()) + { + date=SanitizeSingleString(node2->firstChild()->getNodeValue()); + } + node2=XMLGetFirstChild(node,"Index"); + if(node2 && node2->firstChild()) + { + std::string indexstr=SanitizeSingleString(node2->firstChild()->getNodeValue()); + StringFunctions::Convert(indexstr,index); + } + node2=XMLGetFirstChild(node,"Boards"); + if(node2) + { + Poco::XML::Element *node3=XMLGetFirstChild(node2,"Board"); + while(node3) + { + if(node3 && node3->firstChild()) + { + std::string boardname=SanitizeSingleString(node3->firstChild()->getNodeValue()); + StringFunctions::LowerCase(boardname,boardname); + if(boardname.size()>40) + { + boardname.erase(40); + } + boards.push_back(boardname); + } + node3=XMLGetNextSibling(node3,"Board"); + } + } + m_externalmessages.push_back(externalmessage("Keyed",identity,date,index,boards)); + } + + node=XMLGetNextSibling(node,"ExternalMessage"); + } + parsed=true; + } + catch(...) + { + } + + return parsed; + + /* TiXmlDocument td; td.Parse(xml.c_str()); @@ -113,12 +360,12 @@ const bool MessageListXML::ParseXML(const std::string &xml) txt=hnd2.FirstChild("Date").FirstChild().ToText(); if(txt) { - date=txt->ValueStr(); + date=SanitizeSingleString(txt->ValueStr()); } txt=hnd2.FirstChild("Index").FirstChild().ToText(); if(txt) { - tempstr=txt->ValueStr(); + tempstr=SanitizeSingleString(txt->ValueStr()); StringFunctions::Convert(tempstr,index); } node2=hnd2.FirstChild("Boards").FirstChild("Board").ToNode(); @@ -126,7 +373,9 @@ const bool MessageListXML::ParseXML(const std::string &xml) { if(node2->FirstChild()) { - boards.push_back(node2->FirstChild()->ValueStr()); + std::string boardname=SanitizeSingleString(node2->FirstChild()->ValueStr()); + StringFunctions::LowerCase(boardname,boardname); + boards.push_back(boardname); } node2=node2->NextSibling("Board"); } @@ -136,10 +385,62 @@ const bool MessageListXML::ParseXML(const std::string &xml) node=node->NextSibling("Message"); } + node=hnd.FirstChild("MessageList").FirstChild("ExternalMessage").ToNode(); + while(node) + { + std::string type=""; + std::string identity=""; + date=""; + index=-1; + boards.clear(); + + TiXmlHandle hnd2(node); + txt=hnd2.FirstChild("Type").FirstChild().ToText(); + if(txt) + { + type=SanitizeSingleString(txt->ValueStr()); + } + + if(type=="Keyed") + { + txt=hnd2.FirstChild("Identity").FirstChild().ToText(); + if(txt) + { + identity=SanitizeSingleString(txt->ValueStr()); + } + txt=hnd2.FirstChild("Date").FirstChild().ToText(); + if(txt) + { + date=SanitizeSingleString(txt->ValueStr()); + } + txt=hnd2.FirstChild("Index").FirstChild().ToText(); + if(txt) + { + tempstr=SanitizeSingleString(txt->ValueStr()); + StringFunctions::Convert(tempstr,index); + } + node2=hnd2.FirstChild("Boards").FirstChild("Board").ToNode(); + while(node2) + { + if(node2->FirstChild()) + { + std::string boardname=SanitizeSingleString(node2->FirstChild()->ValueStr()); + StringFunctions::LowerCase(boardname,boardname); + boards.push_back(boardname); + } + node2=node2->NextSibling("Board"); + } + m_externalmessages.push_back(externalmessage("Keyed",identity,date,index,boards)); + } + + node=node->NextSibling("ExternalMessage"); + } + return true; } else { return false; } + */ }