1 #include "../../include/freenet/trustlistxml.h"
\r
2 #include "../../include/stringfunctions.h"
\r
10 TrustListXML::TrustListXML()
\r
15 void TrustListXML::AddTrust(const std::string &identity, const long messagetrust, const long trustlisttrust, const std::string &messagetrustcomment, const std::string &trustlisttrustcomment)
\r
17 m_trust.push_back(trust(identity,messagetrust,trustlisttrust,messagetrustcomment,trustlisttrustcomment));
\r
20 std::string TrustListXML::GetIdentity(const long index)
\r
22 if(index>=0 && index<m_trust.size())
\r
24 return m_trust[index].m_identity;
\r
32 long TrustListXML::GetMessageTrust(const long index)
\r
34 if(index>=0 && index<m_trust.size())
\r
36 return m_trust[index].m_messagetrust;
\r
44 std::string TrustListXML::GetMessageTrustComment(const long index)
\r
46 if(index>=0 && index<m_trust.size())
\r
48 return m_trust[index].m_messagetrustcomment;
\r
56 long TrustListXML::GetTrustListTrust(const long index)
\r
58 if(index>=0 && index<m_trust.size())
\r
60 return m_trust[index].m_trustlisttrust;
\r
68 std::string TrustListXML::GetTrustListTrustComment(const long index)
\r
70 if(index>=0 && index<m_trust.size())
\r
72 return m_trust[index].m_trustlisttrustcomment;
\r
80 std::string TrustListXML::GetXML()
\r
82 Poco::AutoPtr<Poco::XML::Document> doc=new Poco::XML::Document;
\r
83 Poco::AutoPtr<Poco::XML::Element> root=doc->createElement("TrustList");
\r
85 doc->appendChild(root);
\r
87 for(std::vector<trust>::iterator i=m_trust.begin(); i!=m_trust.end(); i++)
\r
89 std::string messagetrust;
\r
90 std::string trustlisttrust;
\r
91 StringFunctions::Convert((*i).m_messagetrust,messagetrust);
\r
92 StringFunctions::Convert((*i).m_trustlisttrust,trustlisttrust);
\r
93 Poco::AutoPtr<Poco::XML::Element> tr=doc->createElement("Trust");
\r
94 root->appendChild(tr);
\r
95 tr->appendChild(XMLCreateCDATAElement(doc,"Identity",(*i).m_identity));
\r
96 if((*i).m_messagetrust>=0)
\r
98 tr->appendChild(XMLCreateTextElement(doc,"MessageTrustLevel",messagetrust));
\r
100 if((*i).m_trustlisttrust>=0)
\r
102 tr->appendChild(XMLCreateTextElement(doc,"TrustListTrustLevel",trustlisttrust));
\r
104 if((*i).m_messagetrustcomment!="")
\r
106 tr->appendChild(XMLCreateTextElement(doc,"MessageTrustComment",(*i).m_messagetrustcomment));
\r
108 if((*i).m_trustlisttrustcomment!="")
\r
110 tr->appendChild(XMLCreateTextElement(doc,"TrustListTrustComment",(*i).m_trustlisttrustcomment));
\r
114 return GenerateXML(doc);
\r
117 void TrustListXML::Initialize()
\r
122 const bool TrustListXML::ParseXML(const std::string &xml)
\r
126 Poco::XML::DOMParser dp;
\r
132 Poco::AutoPtr<Poco::XML::Document> doc=dp.parseString(FixCDATA(xml));
\r
133 Poco::XML::Element *root=XMLGetFirstChild(doc,"TrustList");
\r
134 Poco::XML::Element *trustel=NULL;
\r
135 Poco::XML::Element *txt=NULL;
\r
137 std::vector<std::string> foundkeys;
\r
139 trustel=XMLGetFirstChild(root,"Trust");
\r
142 std::string identity="";
\r
143 int messagetrust=-1;
\r
144 int trustlisttrust=-1;
\r
145 std::string messagetrustcomment="";
\r
146 std::string trustlisttrustcomment="";
\r
148 txt=XMLGetFirstChild(trustel,"Identity");
\r
151 if(txt->firstChild())
\r
153 identity=SanitizeSingleString(txt->firstChild()->getNodeValue());
\r
156 txt=XMLGetFirstChild(trustel,"MessageTrustLevel");
\r
159 if(txt->firstChild())
\r
161 std::string mtl=txt->firstChild()->getNodeValue();
\r
162 StringFunctions::Convert(mtl,messagetrust);
\r
165 txt=XMLGetFirstChild(trustel,"TrustListTrustLevel");
\r
168 if(txt->firstChild())
\r
170 std::string tltl=txt->firstChild()->getNodeValue();
\r
171 StringFunctions::Convert(tltl,trustlisttrust);
\r
174 txt=XMLGetFirstChild(trustel,"MessageTrustComment");
\r
177 if(txt->firstChild())
\r
179 messagetrustcomment=SanitizeSingleString(txt->firstChild()->getNodeValue());
\r
182 txt=XMLGetFirstChild(trustel,"TrustListTrustComment");
\r
185 if(txt->firstChild())
\r
187 trustlisttrustcomment=SanitizeSingleString(txt->firstChild()->getNodeValue());
\r
191 if(identity!="" && messagetrust>=-1 && messagetrust<=100 && trustlisttrust>=-1 && trustlisttrust<=100)
\r
193 // check so we don't add the same identity multiple times from a trust list
\r
194 if(std::find(foundkeys.begin(),foundkeys.end(),identity)==foundkeys.end())
\r
196 foundkeys.push_back(identity);
\r
197 m_trust.push_back(trust(identity,messagetrust,trustlisttrust,messagetrustcomment,trustlisttrustcomment));
\r
202 m_log->error("TrustListXML::ParseXML malformed Trust in TrustList.xml");
\r
205 trustel=XMLGetNextSibling(trustel,"Trust");
\r