version 0.0.2
[fms.git] / src / freenet / trustlistxml.cpp
diff --git a/src/freenet/trustlistxml.cpp b/src/freenet/trustlistxml.cpp
new file mode 100644 (file)
index 0000000..45af43e
--- /dev/null
@@ -0,0 +1,148 @@
+#include "../../include/freenet/trustlistxml.h"\r
+#include "../../include/stringfunctions.h"\r
+\r
+#ifdef XMEM\r
+       #include <xmem.h>\r
+#endif\r
+\r
+TrustListXML::TrustListXML()\r
+{\r
+       Initialize();\r
+}\r
+\r
+void TrustListXML::AddTrust(const std::string &identity, const long messagetrust, const long trustlisttrust)\r
+{\r
+       m_trust.push_back(trust(identity,messagetrust,trustlisttrust));\r
+}\r
+\r
+std::string TrustListXML::GetIdentity(const long index)\r
+{\r
+       if(index>=0 && index<m_trust.size())\r
+       {\r
+               return m_trust[index].m_identity;\r
+       }\r
+       else\r
+       {\r
+               return "";\r
+       }\r
+}\r
+\r
+long TrustListXML::GetMessageTrust(const long index)\r
+{\r
+       if(index>=0 && index<m_trust.size())\r
+       {\r
+               return m_trust[index].m_messagetrust;\r
+       }\r
+       else\r
+       {\r
+               return -1;\r
+       }       \r
+}\r
+\r
+long TrustListXML::GetTrustListTrust(const long index)\r
+{\r
+       if(index>=0 && index<m_trust.size())\r
+       {\r
+               return m_trust[index].m_trustlisttrust;\r
+       }\r
+       else\r
+       {\r
+               return -1;\r
+       }\r
+}\r
+\r
+std::string TrustListXML::GetXML()\r
+{\r
+       TiXmlDocument td;\r
+       TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8","");\r
+       TiXmlElement *tid;\r
+       TiXmlPrinter tp;\r
+\r
+       td.LinkEndChild(tdec);\r
+       tid=new TiXmlElement("TrustList");\r
+       td.LinkEndChild(tid);\r
+\r
+       for(std::vector<trust>::iterator i=m_trust.begin(); i!=m_trust.end(); i++)\r
+       {\r
+               std::string messagetrust;\r
+               std::string trustlisttrust;\r
+               StringFunctions::Convert((*i).m_messagetrust,messagetrust);\r
+               StringFunctions::Convert((*i).m_trustlisttrust,trustlisttrust);\r
+               TiXmlElement *tr=new TiXmlElement("Trust");\r
+               tid->LinkEndChild(tr);\r
+               tr->LinkEndChild(XMLCreateCDATAElement("Identity",(*i).m_identity));\r
+               tr->LinkEndChild(XMLCreateTextElement("MessageTrustLevel",messagetrust));\r
+               tr->LinkEndChild(XMLCreateTextElement("TrustListTrustLevel",trustlisttrust));\r
+       }\r
+\r
+       td.Accept(&tp);\r
+       return std::string(tp.CStr());\r
+}\r
+\r
+void TrustListXML::Initialize()\r
+{\r
+       m_trust.clear();\r
+}\r
+\r
+const bool TrustListXML::ParseXML(const std::string &xml)\r
+{\r
+       TiXmlDocument td;\r
+       td.Parse(xml.c_str());\r
+\r
+       if(!td.Error())\r
+       {\r
+               std::string identity;\r
+               std::string messagetruststr;\r
+               std::string trustlisttruststr;\r
+               long messagetrust;\r
+               long trustlisttrust;\r
+               TiXmlText *txt;\r
+               TiXmlHandle hnd(&td);\r
+               TiXmlNode *node;\r
+\r
+               Initialize();\r
+\r
+               node=hnd.FirstChild("TrustList").FirstChild("Trust").ToElement();\r
+               while(node)\r
+               {\r
+                       identity="";\r
+                       messagetrust=-1;\r
+                       trustlisttrust=-1;\r
+\r
+                       TiXmlHandle hnd2(node);\r
+                       txt=hnd2.FirstChild("Identity").FirstChild().ToText();\r
+                       if(txt)\r
+                       {\r
+                               identity=txt->ValueStr();\r
+                       }\r
+                       txt=hnd2.FirstChild("MessageTrustLevel").FirstChild().ToText();\r
+                       if(txt)\r
+                       {\r
+                               messagetruststr=txt->ValueStr();\r
+                               StringFunctions::Convert(messagetruststr,messagetrust);\r
+                       }\r
+                       txt=hnd2.FirstChild("TrustListTrustLevel").FirstChild().ToText();\r
+                       if(txt)\r
+                       {\r
+                               trustlisttruststr=txt->ValueStr();\r
+                               StringFunctions::Convert(trustlisttruststr,trustlisttrust);\r
+                       }\r
+\r
+                       if(identity!="" && messagetrust>=0 && messagetrust<=100 && trustlisttrust>=0 && trustlisttrust<=100)\r
+                       {\r
+                               m_trust.push_back(trust(identity,messagetrust,trustlisttrust));\r
+                       }\r
+                       else\r
+                       {\r
+                               m_log->WriteLog(LogFile::LOGLEVEL_ERROR,__FUNCTION__," malformed Trust in TrustList.xml");\r
+                       }\r
+                       \r
+                       node=node->NextSibling("Trust");\r
+               }\r
+\r
+       }\r
+       else\r
+       {\r
+               return false;\r
+       }\r
+}\r