0d0df5c00a58711862aa06e62d3ed01a28333970
[fms.git] / src / freenet / trustlistxml.cpp
1 #include "../../include/freenet/trustlistxml.h"\r
2 #include "../../include/stringfunctions.h"\r
3 \r
4 #ifdef XMEM\r
5         #include <xmem.h>\r
6 #endif\r
7 \r
8 TrustListXML::TrustListXML()\r
9 {\r
10         Initialize();\r
11 }\r
12 \r
13 void TrustListXML::AddTrust(const std::string &identity, const long messagetrust, const long trustlisttrust)\r
14 {\r
15         m_trust.push_back(trust(identity,messagetrust,trustlisttrust));\r
16 }\r
17 \r
18 std::string TrustListXML::GetIdentity(const long index)\r
19 {\r
20         if(index>=0 && index<m_trust.size())\r
21         {\r
22                 return m_trust[index].m_identity;\r
23         }\r
24         else\r
25         {\r
26                 return "";\r
27         }\r
28 }\r
29 \r
30 long TrustListXML::GetMessageTrust(const long index)\r
31 {\r
32         if(index>=0 && index<m_trust.size())\r
33         {\r
34                 return m_trust[index].m_messagetrust;\r
35         }\r
36         else\r
37         {\r
38                 return -1;\r
39         }       \r
40 }\r
41 \r
42 long TrustListXML::GetTrustListTrust(const long index)\r
43 {\r
44         if(index>=0 && index<m_trust.size())\r
45         {\r
46                 return m_trust[index].m_trustlisttrust;\r
47         }\r
48         else\r
49         {\r
50                 return -1;\r
51         }\r
52 }\r
53 \r
54 std::string TrustListXML::GetXML()\r
55 {\r
56         TiXmlDocument td;\r
57         TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8","");\r
58         TiXmlElement *tid;\r
59         TiXmlPrinter tp;\r
60 \r
61         td.LinkEndChild(tdec);\r
62         tid=new TiXmlElement("TrustList");\r
63         td.LinkEndChild(tid);\r
64 \r
65         for(std::vector<trust>::iterator i=m_trust.begin(); i!=m_trust.end(); i++)\r
66         {\r
67                 std::string messagetrust;\r
68                 std::string trustlisttrust;\r
69                 StringFunctions::Convert((*i).m_messagetrust,messagetrust);\r
70                 StringFunctions::Convert((*i).m_trustlisttrust,trustlisttrust);\r
71                 TiXmlElement *tr=new TiXmlElement("Trust");\r
72                 tid->LinkEndChild(tr);\r
73                 tr->LinkEndChild(XMLCreateCDATAElement("Identity",(*i).m_identity));\r
74                 tr->LinkEndChild(XMLCreateTextElement("MessageTrustLevel",messagetrust));\r
75                 tr->LinkEndChild(XMLCreateTextElement("TrustListTrustLevel",trustlisttrust));\r
76         }\r
77 \r
78         td.Accept(&tp);\r
79         return std::string(tp.CStr());\r
80 }\r
81 \r
82 void TrustListXML::Initialize()\r
83 {\r
84         m_trust.clear();\r
85 }\r
86 \r
87 const bool TrustListXML::ParseXML(const std::string &xml)\r
88 {\r
89         TiXmlDocument td;\r
90         td.Parse(xml.c_str());\r
91 \r
92         if(!td.Error())\r
93         {\r
94                 std::string identity;\r
95                 std::string messagetruststr;\r
96                 std::string trustlisttruststr;\r
97                 long messagetrust;\r
98                 long trustlisttrust;\r
99                 TiXmlText *txt;\r
100                 TiXmlHandle hnd(&td);\r
101                 TiXmlNode *node;\r
102 \r
103                 Initialize();\r
104 \r
105                 node=hnd.FirstChild("TrustList").FirstChild("Trust").ToElement();\r
106                 while(node)\r
107                 {\r
108                         identity="";\r
109                         messagetrust=-1;\r
110                         trustlisttrust=-1;\r
111 \r
112                         TiXmlHandle hnd2(node);\r
113                         txt=hnd2.FirstChild("Identity").FirstChild().ToText();\r
114                         if(txt)\r
115                         {\r
116                                 identity=txt->ValueStr();\r
117                         }\r
118                         txt=hnd2.FirstChild("MessageTrustLevel").FirstChild().ToText();\r
119                         if(txt)\r
120                         {\r
121                                 messagetruststr=txt->ValueStr();\r
122                                 StringFunctions::Convert(messagetruststr,messagetrust);\r
123                         }\r
124                         txt=hnd2.FirstChild("TrustListTrustLevel").FirstChild().ToText();\r
125                         if(txt)\r
126                         {\r
127                                 trustlisttruststr=txt->ValueStr();\r
128                                 StringFunctions::Convert(trustlisttruststr,trustlisttrust);\r
129                         }\r
130 \r
131                         if(identity!="" && messagetrust>=0 && messagetrust<=100 && trustlisttrust>=0 && trustlisttrust<=100)\r
132                         {\r
133                                 m_trust.push_back(trust(identity,messagetrust,trustlisttrust));\r
134                         }\r
135                         else\r
136                         {\r
137                                 m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"TrustListXML::ParseXML malformed Trust in TrustList.xml");\r
138                         }\r
139                         \r
140                         node=node->NextSibling("Trust");\r
141                 }\r
142                 return true;\r
143 \r
144         }\r
145         else\r
146         {\r
147                 return false;\r
148         }\r
149 }\r