version 0.2.3
[fms.git] / src / freenet / trustlistxml.cpp
index 1b36aa3..ebe0b60 100644 (file)
@@ -1,6 +1,8 @@
 #include "../../include/freenet/trustlistxml.h"\r
 #include "../../include/stringfunctions.h"\r
 \r
+#include <algorithm>\r
+\r
 #ifdef XMEM\r
        #include <xmem.h>\r
 #endif\r
@@ -10,9 +12,9 @@ TrustListXML::TrustListXML()
        Initialize();\r
 }\r
 \r
-void TrustListXML::AddTrust(const std::string &identity, const long messagetrust, const long trustlisttrust)\r
+void TrustListXML::AddTrust(const std::string &identity, const long messagetrust, const long trustlisttrust, const std::string &messagetrustcomment, const std::string &trustlisttrustcomment)\r
 {\r
-       m_trust.push_back(trust(identity,messagetrust,trustlisttrust));\r
+       m_trust.push_back(trust(identity,messagetrust,trustlisttrust,messagetrustcomment,trustlisttrustcomment));\r
 }\r
 \r
 std::string TrustListXML::GetIdentity(const long index)\r
@@ -39,6 +41,18 @@ long TrustListXML::GetMessageTrust(const long index)
        }       \r
 }\r
 \r
+std::string TrustListXML::GetMessageTrustComment(const long index)\r
+{\r
+       if(index>=0 && index<m_trust.size())\r
+       {\r
+               return m_trust[index].m_messagetrustcomment;\r
+       }\r
+       else\r
+       {\r
+               return "";\r
+       }       \r
+}\r
+\r
 long TrustListXML::GetTrustListTrust(const long index)\r
 {\r
        if(index>=0 && index<m_trust.size())\r
@@ -51,6 +65,18 @@ long TrustListXML::GetTrustListTrust(const long index)
        }\r
 }\r
 \r
+std::string TrustListXML::GetTrustListTrustComment(const long index)\r
+{\r
+       if(index>=0 && index<m_trust.size())\r
+       {\r
+               return m_trust[index].m_trustlisttrustcomment;\r
+       }\r
+       else\r
+       {\r
+               return "";\r
+       }\r
+}\r
+\r
 std::string TrustListXML::GetXML()\r
 {\r
        TiXmlDocument td;\r
@@ -71,8 +97,22 @@ std::string TrustListXML::GetXML()
                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
+               if((*i).m_messagetrust>=0)\r
+               {\r
+                       tr->LinkEndChild(XMLCreateTextElement("MessageTrustLevel",messagetrust));\r
+               }\r
+               if((*i).m_trustlisttrust>=0)\r
+               {\r
+                       tr->LinkEndChild(XMLCreateTextElement("TrustListTrustLevel",trustlisttrust));\r
+               }\r
+               if((*i).m_messagetrustcomment!="")\r
+               {\r
+                       tr->LinkEndChild(XMLCreateCDATAElement("MessageTrustComment",(*i).m_messagetrustcomment));\r
+               }\r
+               if((*i).m_trustlisttrustcomment!="")\r
+               {\r
+                       tr->LinkEndChild(XMLCreateCDATAElement("TrustListTrustComment",(*i).m_trustlisttrustcomment));\r
+               }\r
        }\r
 \r
        td.Accept(&tp);\r
@@ -94,11 +134,14 @@ const bool TrustListXML::ParseXML(const std::string &xml)
                std::string identity;\r
                std::string messagetruststr;\r
                std::string trustlisttruststr;\r
+               std::string messagetrustcomment="";\r
+               std::string trustlisttrustcomment="";\r
                long messagetrust;\r
                long trustlisttrust;\r
                TiXmlText *txt;\r
                TiXmlHandle hnd(&td);\r
                TiXmlNode *node;\r
+               std::vector<std::string> m_foundkeys;\r
 \r
                Initialize();\r
 \r
@@ -108,6 +151,8 @@ const bool TrustListXML::ParseXML(const std::string &xml)
                        identity="";\r
                        messagetrust=-1;\r
                        trustlisttrust=-1;\r
+                       messagetrustcomment="";\r
+                       trustlisttrustcomment="";\r
 \r
                        TiXmlHandle hnd2(node);\r
                        txt=hnd2.FirstChild("Identity").FirstChild().ToText();\r
@@ -119,22 +164,43 @@ const bool TrustListXML::ParseXML(const std::string &xml)
                        if(txt)\r
                        {\r
                                messagetruststr=txt->ValueStr();\r
-                               StringFunctions::Convert(messagetruststr,messagetrust);\r
+                               if(messagetruststr!="")\r
+                               {\r
+                                       StringFunctions::Convert(messagetruststr,messagetrust);\r
+                               }\r
                        }\r
                        txt=hnd2.FirstChild("TrustListTrustLevel").FirstChild().ToText();\r
                        if(txt)\r
                        {\r
                                trustlisttruststr=txt->ValueStr();\r
-                               StringFunctions::Convert(trustlisttruststr,trustlisttrust);\r
+                               if(trustlisttruststr!="")\r
+                               {\r
+                                       StringFunctions::Convert(trustlisttruststr,trustlisttrust);\r
+                               }\r
+                       }\r
+                       txt=hnd2.FirstChild("MessageTrustComment").FirstChild().ToText();\r
+                       if(txt)\r
+                       {\r
+                               messagetrustcomment=txt->ValueStr();\r
+                       }\r
+                       txt=hnd2.FirstChild("TrustListTrustComment").FirstChild().ToText();\r
+                       if(txt)\r
+                       {\r
+                               trustlisttrustcomment=txt->ValueStr();\r
                        }\r
 \r
-                       if(identity!="" && messagetrust>=0 && messagetrust<=100 && trustlisttrust>=0 && trustlisttrust<=100)\r
+                       if(identity!="" && messagetrust>=-1 && messagetrust<=100 && trustlisttrust>=-1 && trustlisttrust<=100)\r
                        {\r
-                               m_trust.push_back(trust(identity,messagetrust,trustlisttrust));\r
+                               // check so we don't add the same identity multiple times from a trust list\r
+                               if(std::find(m_foundkeys.begin(),m_foundkeys.end(),identity)==m_foundkeys.end())\r
+                               {\r
+                                       m_foundkeys.push_back(identity);\r
+                                       m_trust.push_back(trust(identity,messagetrust,trustlisttrust,messagetrustcomment,trustlisttrustcomment));\r
+                               }\r
                        }\r
                        else\r
                        {\r
-                               m_log->WriteLog(LogFile::LOGLEVEL_ERROR,__FUNCTION__," malformed Trust in TrustList.xml");\r
+                               m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"TrustListXML::ParseXML malformed Trust in TrustList.xml");\r
                        }\r
                        \r
                        node=node->NextSibling("Trust");\r