diff options
author | Florent Le Coz <louiz@louiz.org> | 2014-03-24 20:31:02 +0100 |
---|---|---|
committer | Florent Le Coz <louiz@louiz.org> | 2014-03-24 20:31:02 +0100 |
commit | ffc820e234ebba39a0f04607f9a0fb044fe31b73 (patch) | |
tree | 66ece312b85f89b15e10c9f91444641d8e07c552 /src/xmpp | |
parent | e196d2f1f400f5c9634ed42fcbdf5c5fb63a13fb (diff) | |
download | biboumi-ffc820e234ebba39a0f04607f9a0fb044fe31b73.tar.gz biboumi-ffc820e234ebba39a0f04607f9a0fb044fe31b73.tar.bz2 biboumi-ffc820e234ebba39a0f04607f9a0fb044fe31b73.tar.xz biboumi-ffc820e234ebba39a0f04607f9a0fb044fe31b73.zip |
Reconnected immediately to the XMPP whenever it closes the connection
Diffstat (limited to 'src/xmpp')
-rw-r--r-- | src/xmpp/xmpp_component.cpp | 5 | ||||
-rw-r--r-- | src/xmpp/xmpp_component.hpp | 4 | ||||
-rw-r--r-- | src/xmpp/xmpp_parser.cpp | 15 | ||||
-rw-r--r-- | src/xmpp/xmpp_parser.hpp | 8 |
4 files changed, 32 insertions, 0 deletions
diff --git a/src/xmpp/xmpp_component.cpp b/src/xmpp/xmpp_component.cpp index d30f778..5400535 100644 --- a/src/xmpp/xmpp_component.cpp +++ b/src/xmpp/xmpp_component.cpp @@ -167,6 +167,11 @@ void XmppComponent::on_remote_stream_close(const XmlNode& node) this->doc_open = false; } +void XmppComponent::reset() +{ + this->parser.reset(); +} + void XmppComponent::on_stanza(const Stanza& stanza) { log_debug("XMPP RECEIVING: " << stanza.to_string()); diff --git a/src/xmpp/xmpp_component.hpp b/src/xmpp/xmpp_component.hpp index 0c040f4..3e401e5 100644 --- a/src/xmpp/xmpp_component.hpp +++ b/src/xmpp/xmpp_component.hpp @@ -42,6 +42,10 @@ public: */ void start(); /** + * Reset the component so we can use the component on a new XMPP stream + */ + void reset(); + /** * Serialize the stanza and add it to the out_buf to be sent to the * server. */ 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)); diff --git a/src/xmpp/xmpp_parser.hpp b/src/xmpp/xmpp_parser.hpp index df9cda7..b87ee6d 100644 --- a/src/xmpp/xmpp_parser.hpp +++ b/src/xmpp/xmpp_parser.hpp @@ -35,6 +35,10 @@ public: public: /** + * Init the XML parser and install the callbacks + */ + void init_xml_parser(); + /** * Feed the parser with some XML data */ int feed(const char* data, const int len, const bool is_final); @@ -43,6 +47,10 @@ public: */ int parse(const int size, const bool is_final); /** + * Reset the parser, so it can be used from scratch afterward + */ + void reset(); + /** * Get a buffer provided by the xml parser. */ void* get_buffer(const size_t size) const; |