+ bool parsed=false;\r
+ Poco::XML::DOMParser dp;\r
+\r
+ Initialize();\r
+\r
+ try\r
+ {\r
+ Poco::AutoPtr<Poco::XML::Document> doc=dp.parseString(FixCDATA(xml));\r
+ Poco::XML::Element *root=XMLGetFirstChild(doc,"Message");\r
+ Poco::XML::Element *txt=NULL;\r
+\r
+ txt=XMLGetFirstChild(root,"Date");\r
+ if(txt)\r
+ {\r
+ if(txt->firstChild())\r
+ {\r
+ m_date=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
+ }\r
+ }\r
+ txt=XMLGetFirstChild(root,"Time");\r
+ if(txt)\r
+ {\r
+ if(txt->firstChild())\r
+ {\r
+ m_time=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
+ }\r
+ }\r
+ txt=XMLGetFirstChild(root,"Subject");\r
+ if(txt)\r
+ {\r
+ if(txt->firstChild())\r
+ {\r
+ m_subject=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
+ }\r
+ }\r
+ txt=XMLGetFirstChild(root,"MessageID");\r
+ if(txt)\r
+ {\r
+ if(txt->firstChild())\r
+ {\r
+ m_messageid=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
+ }\r
+ }\r
+ txt=XMLGetFirstChild(root,"ReplyBoard");\r
+ if(txt)\r
+ {\r
+ if(txt->firstChild())\r
+ {\r
+ m_replyboard=SanitizeSingleString(txt->firstChild()->getNodeValue());\r
+ StringFunctions::LowerCase(m_replyboard,m_replyboard);\r
+ if(m_replyboard.size()>40)\r
+ {\r
+ m_replyboard.erase(40);\r
+ }\r
+ }\r
+ }\r
+ txt=XMLGetFirstChild(root,"Body");\r
+ if(txt)\r
+ {\r
+ if(txt->firstChild())\r
+ {\r
+ m_body=txt->firstChild()->getNodeValue();\r
+ }\r
+ }\r
+ Poco::XML::Element *boards=XMLGetFirstChild(root,"Boards");\r
+ if(boards)\r
+ {\r
+ Poco::XML::Element *board=XMLGetFirstChild(boards,"Board");\r
+ while(board)\r
+ {\r
+ if(board->firstChild())\r
+ {\r
+ std::string boardname=SanitizeSingleString(board->firstChild()->getNodeValue());\r
+ StringFunctions::LowerCase(boardname,boardname);\r
+ if(boardname.size()>40)\r
+ {\r
+ boardname.erase(40);\r
+ }\r
+ m_boards.push_back(boardname);\r
+ }\r
+ board=XMLGetNextSibling(board,"Board");\r
+ }\r
+ }\r
+ Poco::XML::Element *inreplyto=XMLGetFirstChild(root,"InReplyTo");\r
+ if(inreplyto)\r
+ {\r
+ Poco::XML::Element *message=XMLGetFirstChild(inreplyto,"Message");\r
+ while(message)\r
+ {\r
+ Poco::XML::Element *orderel=XMLGetFirstChild(message,"Order");\r
+ Poco::XML::Element *messageidel=XMLGetFirstChild(message,"MessageID");\r
+ if(orderel && orderel->firstChild() && messageidel && messageidel->firstChild())\r
+ {\r
+ int order=-1;\r
+ std::string messageid="";\r
+\r
+ StringFunctions::Convert(orderel->firstChild()->getNodeValue(),order);\r
+ messageid=messageidel->firstChild()->getNodeValue();\r
+\r
+ if(order!=-1 && messageid!="")\r
+ {\r
+ m_inreplyto[order]=messageid;\r
+ }\r
+ }\r
+ message=XMLGetNextSibling(message,"Message");\r
+ }\r
+ }\r
+ Poco::XML::Element *attachments=XMLGetFirstChild(root,"Attachments");\r
+ if(attachments)\r
+ {\r
+ Poco::XML::Element *file=XMLGetFirstChild(attachments,"File");\r
+ while(file)\r
+ {\r
+ Poco::XML::Element *keyel=XMLGetFirstChild(file,"Key");\r
+ Poco::XML::Element *sizeel=XMLGetFirstChild(file,"Size");\r
+\r
+ if(keyel && keyel->firstChild() && sizeel && sizeel->firstChild())\r
+ {\r
+ int size=-1;\r
+ std::string key="";\r
+ \r
+ StringFunctions::Convert(sizeel->firstChild()->getNodeValue(),size);\r
+ key=keyel->firstChild()->getNodeValue();\r
+\r
+ if(size!=-1 && key!="")\r
+ {\r
+ m_fileattachments.push_back(fileattachment(key,size));\r
+ }\r
+ }\r
+\r
+ file=XMLGetNextSibling(file,"File");\r
+ }\r
+ }\r
+\r
+ parsed=true;\r
+\r
+ }\r
+ catch(...)\r
+ {\r
+ }\r
+\r
+ return parsed;\r
+\r
+/*\r