summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2014-03-28 01:47:05 +0100
committerFlorent Le Coz <louiz@louiz.org>2014-03-28 01:47:05 +0100
commit44b72b743e68168e0ab55a74719d57971fe81aa3 (patch)
tree63d27dabf189ee3ddb90f06ec1052d0bb0aeb5dd /src
parent3c5f823621e170aaa5ae9f240335bea49d470da5 (diff)
downloadbiboumi-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.cpp30
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, "");
});