version 0.3.2
[fms.git] / src / freenet / identityxml.cpp
1 #include "../../include/freenet/identityxml.h"\r
2 \r
3 #ifdef XMEM\r
4         #include <xmem.h>\r
5 #endif\r
6 \r
7 IdentityXML::IdentityXML()\r
8 {\r
9         Initialize();\r
10 }\r
11 \r
12 std::string IdentityXML::GetXML()\r
13 {\r
14         Poco::AutoPtr<Poco::XML::Document> doc=new Poco::XML::Document;\r
15         Poco::AutoPtr<Poco::XML::Element> root=doc->createElement("Identity");\r
16 \r
17         doc->appendChild(root);\r
18 \r
19         root->appendChild(XMLCreateCDATAElement(doc,"Name",m_name));\r
20 \r
21         root->appendChild(XMLCreateBooleanElement(doc,"SingleUse",m_singleuse));\r
22 \r
23         root->appendChild(XMLCreateBooleanElement(doc,"PublishTrustList",m_publishtrustlist));\r
24 \r
25         root->appendChild(XMLCreateBooleanElement(doc,"PublishBoardList",m_publishboardlist));\r
26 \r
27         // freesite edition will be -1 if identity isn't publishing a freesite\r
28         if(m_freesiteedition>=0)\r
29         {\r
30                 root->appendChild(XMLCreateTextElement(doc,"FreesiteEdition",m_freesiteedition));\r
31         }\r
32 \r
33         return GenerateXML(doc);\r
34 }\r
35 \r
36 void IdentityXML::Initialize()\r
37 {\r
38         m_name="";\r
39         m_publishtrustlist=false;\r
40         m_publishboardlist=false;\r
41         m_singleuse=false;\r
42         m_freesiteedition=-1;\r
43 }\r
44 \r
45 const bool IdentityXML::ParseXML(const std::string &xml)\r
46 {\r
47 \r
48         bool parsed=false;\r
49         Poco::XML::DOMParser dp;\r
50 \r
51         Initialize();\r
52 \r
53         try\r
54         {\r
55                 Poco::AutoPtr<Poco::XML::Document> doc=dp.parseString(FixCDATA(xml));\r
56                 Poco::XML::Element *root=XMLGetFirstChild(doc,"Identity");\r
57                 Poco::XML::Element *txt=NULL;\r
58 \r
59                 txt=XMLGetFirstChild(root,"Name");\r
60                 if(txt)\r
61                 {\r
62                         if(txt->firstChild())\r
63                         {\r
64                                 m_name=txt->firstChild()->getNodeValue();\r
65                                 if(m_name.size()>40)\r
66                                 {\r
67                                         m_name.erase(40);\r
68                                 }\r
69                         }\r
70                 }\r
71                 \r
72                 m_singleuse=XMLGetBooleanElement(root,"SingleUse");\r
73                 m_publishtrustlist=XMLGetBooleanElement(root,"PublishTrustList");\r
74                 m_publishboardlist=XMLGetBooleanElement(root,"PublishBoardList");\r
75                 \r
76                 txt=XMLGetFirstChild(root,"FreesiteEdition");\r
77                 if(txt)\r
78                 {\r
79                         if(txt->firstChild())\r
80                         {\r
81                                 std::string editionstr=txt->firstChild()->getNodeValue();\r
82                                 StringFunctions::Convert(editionstr,m_freesiteedition);\r
83                         }\r
84                 }\r
85 \r
86                 parsed=true;\r
87 \r
88         }\r
89         catch(...)\r
90         {\r
91         }\r
92 \r
93         return parsed;\r
94 }\r