diff options
author | Florent Le Coz <louiz@louiz.org> | 2014-03-28 01:47:48 +0100 |
---|---|---|
committer | Florent Le Coz <louiz@louiz.org> | 2014-03-28 01:47:48 +0100 |
commit | e971f64f92c640d3ee634b01eeba7fbf056fdaac (patch) | |
tree | 104296df08f9645578215cf826796c8c9e954792 /src | |
parent | 44b72b743e68168e0ab55a74719d57971fe81aa3 (diff) | |
download | biboumi-e971f64f92c640d3ee634b01eeba7fbf056fdaac.tar.gz biboumi-e971f64f92c640d3ee634b01eeba7fbf056fdaac.tar.bz2 biboumi-e971f64f92c640d3ee634b01eeba7fbf056fdaac.tar.xz biboumi-e971f64f92c640d3ee634b01eeba7fbf056fdaac.zip |
Catch all exception produced by a received message (irc or xmpp)
Diffstat (limited to 'src')
-rw-r--r-- | src/irc/irc_client.cpp | 8 | ||||
-rw-r--r-- | src/xmpp/xmpp_parser.cpp | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp index 3737b91..884f214 100644 --- a/src/irc/irc_client.cpp +++ b/src/irc/irc_client.cpp @@ -93,7 +93,13 @@ void IrcClient::parse_in_buffer(const size_t) this->in_buf = this->in_buf.substr(pos + 2, std::string::npos); auto cb = irc_callbacks.find(message.command); if (cb != irc_callbacks.end()) - (this->*(cb->second))(message); + { + try { + (this->*(cb->second))(message); + } catch (const std::exception& e) { + log_error("Unhandled exception: " << e.what()); + } + } else log_info("No handler for command " << message.command); } diff --git a/src/xmpp/xmpp_parser.cpp b/src/xmpp/xmpp_parser.cpp index 867648b..536d9da 100644 --- a/src/xmpp/xmpp_parser.cpp +++ b/src/xmpp/xmpp_parser.cpp @@ -131,7 +131,13 @@ void XmppParser::char_data(const XML_Char* data, int len) void XmppParser::stanza_event(const Stanza& stanza) const { for (const auto& callback: this->stanza_callbacks) - callback(stanza); + { + try { + callback(stanza); + } catch (const std::exception& e) { + log_debug("Unhandled exception: " << e.what()); + } + } } void XmppParser::stream_open_event(const XmlNode& node) const |