aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/presencemanager.lua17
1 files changed, 10 insertions, 7 deletions
diff --git a/core/presencemanager.lua b/core/presencemanager.lua
index 8fdf3612..f94ffd55 100644
--- a/core/presencemanager.lua
+++ b/core/presencemanager.lua
@@ -95,13 +95,16 @@ function handle_normal_presence(origin, stanza, core_route_stanza)
end
origin.priority = 0;
if stanza.attr.type == "unavailable" then
- origin.presence = nil;
- if origin.directed then
- for jid in pairs(origin.directed) do
- stanza.attr.to = jid;
- core_route_stanza(origin, stanza);
- end
- origin.directed = nil;
+ origin.presence = nil;
+ if origin.directed then
+ local old_from = stanza.attr.from;
+ stanza.attr.from = origin.full_jid;
+ for jid in pairs(origin.directed) do
+ stanza.attr.to = jid;
+ core_route_stanza(origin, stanza);
+ end
+ stanza.attr.from = old_from;
+ origin.directed = nil;
end
else
origin.presence = stanza;