1 #include "xml-config.h"
2 #include "attribute-default-iterator.h"
3 #include "attribute-iterator.h"
4 #include "ns3/fatal-error.h"
6 #include "ns3/global-value.h"
7 #include "ns3/string.h"
8 #include "ns3/config.h"
9 #include <libxml/encoding.h>
10 #include <libxml/xmlwriter.h>
16 XmlConfigSave::XmlConfigSave ()
22 XmlConfigSave::SetFilename (std::string filename)
32 m_writer = xmlNewTextWriterFilename (filename.c_str (), 0);
37 rc = xmlTextWriterSetIndent (m_writer, 1);
45 rc = xmlTextWriterStartDocument (m_writer, NULL,
"utf-8", NULL);
53 rc = xmlTextWriterStartElement (m_writer, BAD_CAST
"ns3");
59 XmlConfigSave::~XmlConfigSave ()
71 rc = xmlTextWriterEndDocument (m_writer);
77 xmlFreeTextWriter (m_writer);
81 XmlConfigSave::Default (
void)
83 class XmlDefaultIterator :
public AttributeDefaultIterator
86 XmlDefaultIterator (xmlTextWriterPtr writer) {
90 virtual void StartVisitTypeId (std::string name) {
93 virtual void DoVisitAttribute (std::string name, std::string defaultValue) {
95 rc = xmlTextWriterStartElement (m_writer, BAD_CAST
"default");
100 std::string fullname = m_typeid +
"::" + name;
101 rc = xmlTextWriterWriteAttribute (m_writer, BAD_CAST
"name",
102 BAD_CAST fullname.c_str ());
107 rc = xmlTextWriterWriteAttribute (m_writer, BAD_CAST
"value",
108 BAD_CAST defaultValue.c_str ());
113 rc = xmlTextWriterEndElement (m_writer);
119 xmlTextWriterPtr m_writer;
120 std::string m_typeid;
122 XmlDefaultIterator iterator = XmlDefaultIterator (m_writer);
127 XmlConfigSave::Attributes (
void)
129 class XmlTextAttributeIterator :
public AttributeIterator
132 XmlTextAttributeIterator (xmlTextWriterPtr writer)
133 : m_writer (writer) {}
135 virtual void DoVisitAttribute (Ptr<Object>
object, std::string name) {
137 object->GetAttribute (name, str);
139 rc = xmlTextWriterStartElement (m_writer, BAD_CAST
"value");
144 rc = xmlTextWriterWriteAttribute (m_writer, BAD_CAST
"path",
145 BAD_CAST GetCurrentPath ().c_str ());
150 rc = xmlTextWriterWriteAttribute (m_writer, BAD_CAST
"value",
151 BAD_CAST str.Get ().c_str ());
156 rc = xmlTextWriterEndElement (m_writer);
162 xmlTextWriterPtr m_writer;
165 XmlTextAttributeIterator iter = XmlTextAttributeIterator (m_writer);
170 XmlConfigSave::Global (
void)
176 (*i)->GetValue (value);
178 rc = xmlTextWriterStartElement (m_writer, BAD_CAST
"global");
183 rc = xmlTextWriterWriteAttribute (m_writer, BAD_CAST
"name",
184 BAD_CAST (*i)->GetName ().c_str ());
189 rc = xmlTextWriterWriteAttribute (m_writer, BAD_CAST
"value",
190 BAD_CAST value.Get ().c_str ());
195 rc = xmlTextWriterEndElement (m_writer);
203 XmlConfigLoad::XmlConfigLoad ()
207 XmlConfigLoad::~XmlConfigLoad ()
213 XmlConfigLoad::SetFilename (std::string filename)
216 m_filename = filename;
219 XmlConfigLoad::Default (
void)
221 xmlTextReaderPtr reader = xmlNewTextReaderFilename (m_filename.c_str ());
227 rc = xmlTextReaderRead (reader);
230 const xmlChar *type = xmlTextReaderConstName (reader);
235 if (std::string ((
char*)type) ==
"default")
237 xmlChar *name = xmlTextReaderGetAttribute (reader, BAD_CAST
"name");
242 xmlChar *value = xmlTextReaderGetAttribute (reader, BAD_CAST
"value");
247 NS_LOG_DEBUG (
"default="<<(
char*)name<<
", value=" <<value);
252 rc = xmlTextReaderRead (reader);
254 xmlFreeTextReader (reader);
257 XmlConfigLoad::Global (
void)
259 xmlTextReaderPtr reader = xmlNewTextReaderFilename (m_filename.c_str ());
265 rc = xmlTextReaderRead (reader);
268 const xmlChar *type = xmlTextReaderConstName (reader);
273 if (std::string ((
char*)type) ==
"global")
275 xmlChar *name = xmlTextReaderGetAttribute (reader, BAD_CAST
"name");
280 xmlChar *value = xmlTextReaderGetAttribute (reader, BAD_CAST
"value");
285 NS_LOG_DEBUG (
"global="<<(
char*)name<<
", value=" <<value);
290 rc = xmlTextReaderRead (reader);
292 xmlFreeTextReader (reader);
295 XmlConfigLoad::Attributes (
void)
297 xmlTextReaderPtr reader = xmlNewTextReaderFilename (m_filename.c_str ());
303 rc = xmlTextReaderRead (reader);
306 const xmlChar *type = xmlTextReaderConstName (reader);
311 if (std::string ((
char*)type) ==
"value")
313 xmlChar *path = xmlTextReaderGetAttribute (reader, BAD_CAST
"path");
318 xmlChar *value = xmlTextReaderGetAttribute (reader, BAD_CAST
"value");
323 NS_LOG_DEBUG (
"path="<<(
char*)path <<
", value=" << (
char*)value);
324 Config::Set ((
char*)path, StringValue ((
char*)value));
328 rc = xmlTextReaderRead (reader);
330 xmlFreeTextReader (reader);
#define NS_LOG_FUNCTION(parameters)
#define NS_LOG_COMPONENT_DEFINE(name)
void Set(std::string path, const AttributeValue &value)
#define NS_FATAL_ERROR(msg)
fatal error handling
static Iterator Begin(void)
void SetDefault(std::string name, const AttributeValue &value)
static Iterator End(void)
#define NS_LOG_DEBUG(msg)
void SetGlobal(std::string name, const AttributeValue &value)