summaryrefslogtreecommitdiff
path: root/src/xmpp/xmpp_parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/xmpp/xmpp_parser.cpp')
-rw-r--r--src/xmpp/xmpp_parser.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/xmpp/xmpp_parser.cpp b/src/xmpp/xmpp_parser.cpp
index 064453e..867648b 100644
--- a/src/xmpp/xmpp_parser.cpp
+++ b/src/xmpp/xmpp_parser.cpp
@@ -31,6 +31,11 @@ XmppParser::XmppParser():
level(0),
current_node(nullptr)
{
+ this->init_xml_parser();
+}
+
+void XmppParser::init_xml_parser()
+{
// Create the expat parser
this->parser = XML_ParserCreateNS("UTF-8", ':');
XML_SetUserData(this->parser, static_cast<void*>(this));
@@ -65,6 +70,16 @@ int XmppParser::parse(const int len, const bool is_final)
return res;
}
+void XmppParser::reset()
+{
+ XML_ParserFree(this->parser);
+ this->init_xml_parser();
+ if (this->current_node)
+ delete this->current_node;
+ this->current_node = nullptr;
+ this->level = 0;
+}
+
void* XmppParser::get_buffer(const size_t size) const
{
return XML_GetBuffer(this->parser, static_cast<int>(size));