diff options
author | Florent Le Coz <louiz@louiz.org> | 2014-03-28 01:47:05 +0100 |
---|---|---|
committer | Florent Le Coz <louiz@louiz.org> | 2014-03-28 01:47:05 +0100 |
commit | 44b72b743e68168e0ab55a74719d57971fe81aa3 (patch) | |
tree | 63d27dabf189ee3ddb90f06ec1052d0bb0aeb5dd /src | |
parent | 3c5f823621e170aaa5ae9f240335bea49d470da5 (diff) | |
download | biboumi-44b72b743e68168e0ab55a74719d57971fe81aa3.tar.gz biboumi-44b72b743e68168e0ab55a74719d57971fe81aa3.tar.bz2 biboumi-44b72b743e68168e0ab55a74719d57971fe81aa3.tar.xz biboumi-44b72b743e68168e0ab55a74719d57971fe81aa3.zip |
The absence of a from attribute is an unrecoverable error, just ignore it
Diffstat (limited to 'src')
-rw-r--r-- | src/xmpp/xmpp_component.cpp | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/src/xmpp/xmpp_component.cpp b/src/xmpp/xmpp_component.cpp index 1eea8ba..d849884 100644 --- a/src/xmpp/xmpp_component.cpp +++ b/src/xmpp/xmpp_component.cpp @@ -255,12 +255,16 @@ void XmppComponent::handle_handshake(const Stanza& stanza) void XmppComponent::handle_presence(const Stanza& stanza) { + std::string from; std::string id; try { id = stanza["id"]; + from = stanza["from"]; } catch (const AttributeNotFound&) {} - utils::ScopeGuard malformed_stanza_error([this, &id](){ - this->send_stanza_error("presence", "", this->served_hostname, id, + if (from.empty()) + return; + utils::ScopeGuard malformed_stanza_error([&](){ + this->send_stanza_error("presence", from, this->served_hostname, id, "modify", "bad-request", ""); }); Bridge* bridge = this->get_user_bridge(stanza["from"]); @@ -281,7 +285,7 @@ void XmppComponent::handle_presence(const Stanza& stanza) // stanza_error.disable() call at the end of the function. std::string error_type("cancel"); std::string error_name("internal-server-error"); - utils::ScopeGuard stanza_error([this, &stanza, &error_type, &error_name, &id](){ + utils::ScopeGuard stanza_error([&](){ this->send_stanza_error("presence", stanza["from"], stanza["to"], id, error_type, error_name, ""); }); @@ -312,12 +316,16 @@ void XmppComponent::handle_presence(const Stanza& stanza) void XmppComponent::handle_message(const Stanza& stanza) { + std::string from; std::string id; try { id = stanza["id"]; + from = stanza["from"]; } catch (const AttributeNotFound&) {} - utils::ScopeGuard malformed_stanza_error([this, &id](){ - this->send_stanza_error("message", "", this->served_hostname, id, + if (from.empty()) + return; + utils::ScopeGuard malformed_stanza_error([&](){ + this->send_stanza_error("message", from, this->served_hostname, id, "modify", "bad-request", ""); }); Bridge* bridge = this->get_user_bridge(stanza["from"]); @@ -332,7 +340,7 @@ void XmppComponent::handle_message(const Stanza& stanza) std::string error_type("cancel"); std::string error_name("internal-server-error"); - utils::ScopeGuard stanza_error([this, &stanza, &error_type, &error_name, &id](){ + utils::ScopeGuard stanza_error([&](){ this->send_stanza_error("message", stanza["from"], stanza["to"], id, error_type, error_name, ""); }); @@ -357,11 +365,15 @@ void XmppComponent::handle_message(const Stanza& stanza) void XmppComponent::handle_iq(const Stanza& stanza) { std::string id; + std::string from; try { id = stanza["id"]; + from = stanza["from"]; } catch (const AttributeNotFound&) {} - utils::ScopeGuard malformed_stanza_error([this, &id](){ - this->send_stanza_error("iq", "", this->served_hostname, id, + if (from.empty()) + return; + utils::ScopeGuard malformed_stanza_error([&](){ + this->send_stanza_error("iq", from, this->served_hostname, id, "modify", "bad-request", ""); }); Bridge* bridge = this->get_user_bridge(stanza["from"]); @@ -371,7 +383,7 @@ void XmppComponent::handle_iq(const Stanza& stanza) std::string error_type("cancel"); std::string error_name("internal-server-error"); - utils::ScopeGuard stanza_error([this, &stanza, &error_type, &error_name, &id](){ + utils::ScopeGuard stanza_error([&](){ this->send_stanza_error("iq", stanza["from"], stanza["to"], id, error_type, error_name, ""); }); |