The absence of a from attribute is an unrecoverable error, just ignore it
This commit is contained in:
@@ -255,12 +255,16 @@ void XmppComponent::handle_handshake(const Stanza& stanza)
|
|||||||
|
|
||||||
void XmppComponent::handle_presence(const Stanza& stanza)
|
void XmppComponent::handle_presence(const Stanza& stanza)
|
||||||
{
|
{
|
||||||
|
std::string from;
|
||||||
std::string id;
|
std::string id;
|
||||||
try {
|
try {
|
||||||
id = stanza["id"];
|
id = stanza["id"];
|
||||||
|
from = stanza["from"];
|
||||||
} catch (const AttributeNotFound&) {}
|
} catch (const AttributeNotFound&) {}
|
||||||
utils::ScopeGuard malformed_stanza_error([this, &id](){
|
if (from.empty())
|
||||||
this->send_stanza_error("presence", "", this->served_hostname, id,
|
return;
|
||||||
|
utils::ScopeGuard malformed_stanza_error([&](){
|
||||||
|
this->send_stanza_error("presence", from, this->served_hostname, id,
|
||||||
"modify", "bad-request", "");
|
"modify", "bad-request", "");
|
||||||
});
|
});
|
||||||
Bridge* bridge = this->get_user_bridge(stanza["from"]);
|
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.
|
// stanza_error.disable() call at the end of the function.
|
||||||
std::string error_type("cancel");
|
std::string error_type("cancel");
|
||||||
std::string error_name("internal-server-error");
|
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,
|
this->send_stanza_error("presence", stanza["from"], stanza["to"], id,
|
||||||
error_type, error_name, "");
|
error_type, error_name, "");
|
||||||
});
|
});
|
||||||
@@ -312,12 +316,16 @@ void XmppComponent::handle_presence(const Stanza& stanza)
|
|||||||
|
|
||||||
void XmppComponent::handle_message(const Stanza& stanza)
|
void XmppComponent::handle_message(const Stanza& stanza)
|
||||||
{
|
{
|
||||||
|
std::string from;
|
||||||
std::string id;
|
std::string id;
|
||||||
try {
|
try {
|
||||||
id = stanza["id"];
|
id = stanza["id"];
|
||||||
|
from = stanza["from"];
|
||||||
} catch (const AttributeNotFound&) {}
|
} catch (const AttributeNotFound&) {}
|
||||||
utils::ScopeGuard malformed_stanza_error([this, &id](){
|
if (from.empty())
|
||||||
this->send_stanza_error("message", "", this->served_hostname, id,
|
return;
|
||||||
|
utils::ScopeGuard malformed_stanza_error([&](){
|
||||||
|
this->send_stanza_error("message", from, this->served_hostname, id,
|
||||||
"modify", "bad-request", "");
|
"modify", "bad-request", "");
|
||||||
});
|
});
|
||||||
Bridge* bridge = this->get_user_bridge(stanza["from"]);
|
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_type("cancel");
|
||||||
std::string error_name("internal-server-error");
|
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,
|
this->send_stanza_error("message", stanza["from"], stanza["to"], id,
|
||||||
error_type, error_name, "");
|
error_type, error_name, "");
|
||||||
});
|
});
|
||||||
@@ -357,11 +365,15 @@ void XmppComponent::handle_message(const Stanza& stanza)
|
|||||||
void XmppComponent::handle_iq(const Stanza& stanza)
|
void XmppComponent::handle_iq(const Stanza& stanza)
|
||||||
{
|
{
|
||||||
std::string id;
|
std::string id;
|
||||||
|
std::string from;
|
||||||
try {
|
try {
|
||||||
id = stanza["id"];
|
id = stanza["id"];
|
||||||
|
from = stanza["from"];
|
||||||
} catch (const AttributeNotFound&) {}
|
} catch (const AttributeNotFound&) {}
|
||||||
utils::ScopeGuard malformed_stanza_error([this, &id](){
|
if (from.empty())
|
||||||
this->send_stanza_error("iq", "", this->served_hostname, id,
|
return;
|
||||||
|
utils::ScopeGuard malformed_stanza_error([&](){
|
||||||
|
this->send_stanza_error("iq", from, this->served_hostname, id,
|
||||||
"modify", "bad-request", "");
|
"modify", "bad-request", "");
|
||||||
});
|
});
|
||||||
Bridge* bridge = this->get_user_bridge(stanza["from"]);
|
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_type("cancel");
|
||||||
std::string error_name("internal-server-error");
|
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,
|
this->send_stanza_error("iq", stanza["from"], stanza["to"], id,
|
||||||
error_type, error_name, "");
|
error_type, error_name, "");
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user