Software /
code /
prosody
Annotate
plugins/mod_presence.lua @ 5877:615a0774e4cc
util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Wed, 30 Oct 2013 17:44:42 -0400 |
parent | 5776:bd0ff8ae98a8 |
child | 6281:8dc01fa767e0 |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1508
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2643
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2643
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5416
diff
changeset
|
4 -- |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
6 -- COPYING file in the source package for more information. |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
7 -- |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
8 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
9 local log = module._log; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
10 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
11 local require = require; |
5416
0ba3a49d3863
mod_presence: Remove some unused variables
Matthew Wild <mwild1@gmail.com>
parents:
5370
diff
changeset
|
12 local pairs = pairs; |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
13 local t_concat, t_insert = table.concat, table.insert; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
14 local s_find = string.find; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
15 local tonumber = tonumber; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
16 |
5013
ab693eea0869
mod_admin_adhoc, mod_admin_telnet, mod_bosh, mod_c2s, mod_component, mod_pep, mod_presence, mod_roster, mod_s2s: Import core_post_stanza from the global prosody table.
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
17 local core_post_stanza = prosody.core_post_stanza; |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
18 local st = require "util.stanza"; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
19 local jid_split = require "util.jid".split; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
20 local jid_bare = require "util.jid".bare; |
5297
7453245f16e7
mod_presence: Put a timestamp on presence we store for probes
Kim Alvefur <zash@zash.se>
parents:
5171
diff
changeset
|
21 local datetime = require "util.datetime"; |
5370
7838acadb0fa
mod_announce, mod_auth_anonymous, mod_c2s, mod_c2s, mod_component, mod_iq, mod_message, mod_presence, mod_tls: Access prosody.{hosts,bare_sessions,full_sessions} instead of the old globals
Kim Alvefur <zash@zash.se>
parents:
5297
diff
changeset
|
22 local hosts = prosody.hosts; |
7838acadb0fa
mod_announce, mod_auth_anonymous, mod_c2s, mod_c2s, mod_component, mod_iq, mod_message, mod_presence, mod_tls: Access prosody.{hosts,bare_sessions,full_sessions} instead of the old globals
Kim Alvefur <zash@zash.se>
parents:
5297
diff
changeset
|
23 local bare_sessions = prosody.bare_sessions; |
7838acadb0fa
mod_announce, mod_auth_anonymous, mod_c2s, mod_c2s, mod_component, mod_iq, mod_message, mod_presence, mod_tls: Access prosody.{hosts,bare_sessions,full_sessions} instead of the old globals
Kim Alvefur <zash@zash.se>
parents:
5297
diff
changeset
|
24 local full_sessions = prosody.full_sessions; |
2592
3af266f7037f
mod_presence: Don't depend on sessions array existing for a user when handling outgoing presence broadcast.
Waqas Hussain <waqas20@gmail.com>
parents:
2532
diff
changeset
|
25 local NULL = {}; |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
26 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
27 local rostermanager = require "core.rostermanager"; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
28 local sessionmanager = require "core.sessionmanager"; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
29 |
3082
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
30 local function select_top_resources(user) |
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
31 local priority = 0; |
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
32 local recipients = {}; |
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
33 for _, session in pairs(user.sessions) do -- find resource with greatest priority |
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
34 if session.presence then |
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
35 -- TODO check active privacy list for session |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
36 local p = session.priority; |
3082
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
37 if p > priority then |
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
38 priority = p; |
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
39 recipients = {session}; |
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
40 elseif p == priority then |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
41 t_insert(recipients, session); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
42 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
43 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
44 end |
3082
920cd9667c7b
Backed out changeset c75c22c316d6 (the XMPP spec now gives a better way to do this)
Matthew Wild <mwild1@gmail.com>
parents:
2644
diff
changeset
|
45 return recipients; |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
46 end |
2593
06995c8bfe80
mod_presence: Don't depend on user being online when calculating top resources.
Waqas Hussain <waqas20@gmail.com>
parents:
2592
diff
changeset
|
47 local function recalc_resource_map(user) |
06995c8bfe80
mod_presence: Don't depend on user being online when calculating top resources.
Waqas Hussain <waqas20@gmail.com>
parents:
2592
diff
changeset
|
48 if user then |
06995c8bfe80
mod_presence: Don't depend on user being online when calculating top resources.
Waqas Hussain <waqas20@gmail.com>
parents:
2592
diff
changeset
|
49 user.top_resources = select_top_resources(user); |
06995c8bfe80
mod_presence: Don't depend on user being online when calculating top resources.
Waqas Hussain <waqas20@gmail.com>
parents:
2592
diff
changeset
|
50 if #user.top_resources == 0 then user.top_resources = nil; end |
06995c8bfe80
mod_presence: Don't depend on user being online when calculating top resources.
Waqas Hussain <waqas20@gmail.com>
parents:
2592
diff
changeset
|
51 end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
52 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
53 |
3084
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
54 local ignore_presence_priority = module:get_option("ignore_presence_priority"); |
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
55 |
3153
fd435cab928f
mod_presence: Removed unnecessary parameter 'core_route_stanza' from various functions.
Waqas Hussain <waqas20@gmail.com>
parents:
3112
diff
changeset
|
56 function handle_normal_presence(origin, stanza) |
3084
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
57 if ignore_presence_priority then |
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
58 local priority = stanza:child_with_name("priority"); |
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
59 if priority and priority[1] ~= "0" then |
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
60 for i=#priority.tags,1,-1 do priority.tags[i] = nil; end |
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
61 for i=#priority,1,-1 do priority[i] = nil; end |
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
62 priority[1] = "0"; |
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
63 end |
9b17449fb5f4
mod_presence: Added option 'ignore_presence_priority'.
Waqas Hussain <waqas20@gmail.com>
parents:
3083
diff
changeset
|
64 end |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
65 local priority = stanza:child_with_name("priority"); |
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
66 if priority and #priority > 0 then |
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
67 priority = t_concat(priority); |
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
68 if s_find(priority, "^[+-]?[0-9]+$") then |
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
69 priority = tonumber(priority); |
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
70 if priority < -128 then priority = -128 end |
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
71 if priority > 127 then priority = 127 end |
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
72 else priority = 0; end |
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
73 else priority = 0; end |
2643
21eb99b06f4d
mod_presence: Reflect the user's own presence back to them.
Waqas Hussain <waqas20@gmail.com>
parents:
2593
diff
changeset
|
74 if full_sessions[origin.full_jid] then -- if user is still connected |
21eb99b06f4d
mod_presence: Reflect the user's own presence back to them.
Waqas Hussain <waqas20@gmail.com>
parents:
2593
diff
changeset
|
75 origin.send(stanza); -- reflect their presence back to them |
21eb99b06f4d
mod_presence: Reflect the user's own presence back to them.
Waqas Hussain <waqas20@gmail.com>
parents:
2593
diff
changeset
|
76 end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
77 local roster = origin.roster; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
78 local node, host = origin.username, origin.host; |
2592
3af266f7037f
mod_presence: Don't depend on sessions array existing for a user when handling outgoing presence broadcast.
Waqas Hussain <waqas20@gmail.com>
parents:
2532
diff
changeset
|
79 local user = bare_sessions[node.."@"..host]; |
3af266f7037f
mod_presence: Don't depend on sessions array existing for a user when handling outgoing presence broadcast.
Waqas Hussain <waqas20@gmail.com>
parents:
2532
diff
changeset
|
80 for _, res in pairs(user and user.sessions or NULL) do -- broadcast to all resources |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
81 if res ~= origin and res.presence then -- to resource |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
82 stanza.attr.to = res.full_jid; |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
83 core_post_stanza(origin, stanza, true); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
84 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
85 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
86 for jid, item in pairs(roster) do -- broadcast to all interested contacts |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
87 if item.subscription == "both" or item.subscription == "from" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
88 stanza.attr.to = jid; |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
89 core_post_stanza(origin, stanza, true); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
90 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
91 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
92 if stanza.attr.type == nil and not origin.presence then -- initial presence |
2532
b1b1b4a7db26
mod_presence: Quick fix to make probes from local users to local hosts work.
Waqas Hussain <waqas20@gmail.com>
parents:
2531
diff
changeset
|
93 origin.presence = stanza; -- FIXME repeated later |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
94 local probe = st.presence({from = origin.full_jid, type = "probe"}); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
95 for jid, item in pairs(roster) do -- probe all contacts we are subscribed to |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
96 if item.subscription == "both" or item.subscription == "to" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
97 probe.attr.to = jid; |
3183
28a5c0bda928
mod_presence: Enable firing of pre-events for probes.
Waqas Hussain <waqas20@gmail.com>
parents:
3182
diff
changeset
|
98 core_post_stanza(origin, probe, true); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
99 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
100 end |
2592
3af266f7037f
mod_presence: Don't depend on sessions array existing for a user when handling outgoing presence broadcast.
Waqas Hussain <waqas20@gmail.com>
parents:
2532
diff
changeset
|
101 for _, res in pairs(user and user.sessions or NULL) do -- broadcast from all available resources |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
102 if res ~= origin and res.presence then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
103 res.presence.attr.to = origin.full_jid; |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
104 core_post_stanza(res, res.presence, true); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
105 res.presence.attr.to = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
106 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
107 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
108 if roster.pending then -- resend incoming subscription requests |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
109 for jid in pairs(roster.pending) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
110 origin.send(st.presence({type="subscribe", from=jid})); -- TODO add to attribute? Use original? |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
111 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
112 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
113 local request = st.presence({type="subscribe", from=origin.username.."@"..origin.host}); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
114 for jid, item in pairs(roster) do -- resend outgoing subscription requests |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
115 if item.ask then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
116 request.attr.to = jid; |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
117 core_post_stanza(origin, request, true); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
118 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
119 end |
3518
d3399d1b484a
Don't send offline messages to resource with negative priorities
Robert Hoelz <rob@hoelz.ro>
parents:
3235
diff
changeset
|
120 |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
121 if priority >= 0 then |
5171 | 122 local event = { origin = origin } |
123 module:fire_event('message/offline/broadcast', event); | |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3518
diff
changeset
|
124 end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
125 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
126 if stanza.attr.type == "unavailable" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
127 origin.presence = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
128 if origin.priority then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
129 origin.priority = nil; |
2593
06995c8bfe80
mod_presence: Don't depend on user being online when calculating top resources.
Waqas Hussain <waqas20@gmail.com>
parents:
2592
diff
changeset
|
130 recalc_resource_map(user); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
131 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
132 if origin.directed then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
133 for jid in pairs(origin.directed) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
134 stanza.attr.to = jid; |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
135 core_post_stanza(origin, stanza, true); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
136 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
137 origin.directed = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
138 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
139 else |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
140 origin.presence = stanza; |
5297
7453245f16e7
mod_presence: Put a timestamp on presence we store for probes
Kim Alvefur <zash@zash.se>
parents:
5171
diff
changeset
|
141 stanza:tag("delay", { xmlns = "urn:xmpp:delay", from = host, stamp = datetime.datetime() }):up(); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
142 if origin.priority ~= priority then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
143 origin.priority = priority; |
2593
06995c8bfe80
mod_presence: Don't depend on user being online when calculating top resources.
Waqas Hussain <waqas20@gmail.com>
parents:
2592
diff
changeset
|
144 recalc_resource_map(user); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
145 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
146 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
147 stanza.attr.to = nil; -- reset it |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
148 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
149 |
3153
fd435cab928f
mod_presence: Removed unnecessary parameter 'core_route_stanza' from various functions.
Waqas Hussain <waqas20@gmail.com>
parents:
3112
diff
changeset
|
150 function send_presence_of_available_resources(user, host, jid, recipient_session, stanza) |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
151 local h = hosts[host]; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
152 local count = 0; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
153 if h and h.type == "local" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
154 local u = h.sessions[user]; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
155 if u then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
156 for k, session in pairs(u.sessions) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
157 local pres = session.presence; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
158 if pres then |
2038
4ab83f96585a
mod_presence: Send unavailable presence when sending unsubscribed presence stanzas (some legacy clients continue to display unsubscribed contacts as available).
Waqas Hussain <waqas20@gmail.com>
parents:
1731
diff
changeset
|
159 if stanza then pres = stanza; pres.attr.from = session.full_jid; end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
160 pres.attr.to = jid; |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
161 core_post_stanza(session, pres, true); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
162 pres.attr.to = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
163 count = count + 1; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
164 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
165 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
166 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
167 end |
4993
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4967
diff
changeset
|
168 log("debug", "broadcasted presence of %d resources from %s@%s to %s", count, user, host, jid); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
169 return count; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
170 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
171 |
3153
fd435cab928f
mod_presence: Removed unnecessary parameter 'core_route_stanza' from various functions.
Waqas Hussain <waqas20@gmail.com>
parents:
3112
diff
changeset
|
172 function handle_outbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare) |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
173 local node, host = jid_split(from_bare); |
3235
651139e831b1
mod_presence: Fixed a traceback on outgoing subscriptions from offline users.
Waqas Hussain <waqas20@gmail.com>
parents:
3215
diff
changeset
|
174 if to_bare == from_bare then return; end -- No self contacts |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
175 local st_from, st_to = stanza.attr.from, stanza.attr.to; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
176 stanza.attr.from, stanza.attr.to = from_bare, to_bare; |
4993
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4967
diff
changeset
|
177 log("debug", "outbound presence %s from %s for %s", stanza.attr.type, from_bare, to_bare); |
3182
a19dbb6446a0
mod_presence: Don't stop pre-event for outgoing probes.
Waqas Hussain <waqas20@gmail.com>
parents:
3181
diff
changeset
|
178 if stanza.attr.type == "probe" then |
a19dbb6446a0
mod_presence: Don't stop pre-event for outgoing probes.
Waqas Hussain <waqas20@gmail.com>
parents:
3181
diff
changeset
|
179 stanza.attr.from, stanza.attr.to = st_from, st_to; |
a19dbb6446a0
mod_presence: Don't stop pre-event for outgoing probes.
Waqas Hussain <waqas20@gmail.com>
parents:
3181
diff
changeset
|
180 return; |
a19dbb6446a0
mod_presence: Don't stop pre-event for outgoing probes.
Waqas Hussain <waqas20@gmail.com>
parents:
3181
diff
changeset
|
181 elseif stanza.attr.type == "subscribe" then |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
182 -- 1. route stanza |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
183 -- 2. roster push (subscription = none, ask = subscribe) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
184 if rostermanager.set_contact_pending_out(node, host, to_bare) then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
185 rostermanager.roster_push(node, host, to_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
186 end -- else file error |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
187 core_post_stanza(origin, stanza); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
188 elseif stanza.attr.type == "unsubscribe" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
189 -- 1. route stanza |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
190 -- 2. roster push (subscription = none or from) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
191 if rostermanager.unsubscribe(node, host, to_bare) then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
192 rostermanager.roster_push(node, host, to_bare); -- FIXME do roster push when roster has in fact not changed? |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
193 end -- else file error |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
194 core_post_stanza(origin, stanza); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
195 elseif stanza.attr.type == "subscribed" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
196 -- 1. route stanza |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
197 -- 2. roster_push () |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
198 -- 3. send_presence_of_available_resources |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
199 if rostermanager.subscribed(node, host, to_bare) then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
200 rostermanager.roster_push(node, host, to_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
201 end |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
202 core_post_stanza(origin, stanza); |
3153
fd435cab928f
mod_presence: Removed unnecessary parameter 'core_route_stanza' from various functions.
Waqas Hussain <waqas20@gmail.com>
parents:
3112
diff
changeset
|
203 send_presence_of_available_resources(node, host, to_bare, origin); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
204 elseif stanza.attr.type == "unsubscribed" then |
5060
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
205 -- 1. send unavailable |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
206 -- 2. route stanza |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
207 -- 3. roster push (subscription = from or both) |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
208 local success, pending_in, subscribed = rostermanager.unsubscribed(node, host, to_bare); |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
209 if success then |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
210 if subscribed then |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
211 rostermanager.roster_push(node, host, to_bare); |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
212 end |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
213 core_post_stanza(origin, stanza); |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
214 if subscribed then |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
215 send_presence_of_available_resources(node, host, to_bare, origin, st.presence({ type = "unavailable" })); |
b0e36777f715
mod_presence, rostermanager: Bring outbound subscription cancellation in line with RFC6121.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
216 end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
217 end |
4139
eef75a0c85e3
mod_presence: Bounce errors for invalid presence types (thanks nolan/Astro)
Matthew Wild <mwild1@gmail.com>
parents:
3969
diff
changeset
|
218 else |
eef75a0c85e3
mod_presence: Bounce errors for invalid presence types (thanks nolan/Astro)
Matthew Wild <mwild1@gmail.com>
parents:
3969
diff
changeset
|
219 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid presence type")); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
220 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
221 stanza.attr.from, stanza.attr.to = st_from, st_to; |
3181
1f73b3a960cf
mod_presence: Small refactoring.
Waqas Hussain <waqas20@gmail.com>
parents:
3156
diff
changeset
|
222 return true; |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
223 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
224 |
3153
fd435cab928f
mod_presence: Removed unnecessary parameter 'core_route_stanza' from various functions.
Waqas Hussain <waqas20@gmail.com>
parents:
3112
diff
changeset
|
225 function handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare) |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
226 local node, host = jid_split(to_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
227 local st_from, st_to = stanza.attr.from, stanza.attr.to; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
228 stanza.attr.from, stanza.attr.to = from_bare, to_bare; |
4993
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4967
diff
changeset
|
229 log("debug", "inbound presence %s from %s for %s", stanza.attr.type, from_bare, to_bare); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5416
diff
changeset
|
230 |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
231 if stanza.attr.type == "probe" then |
3112
c311fdffccce
mod_presence: Don't send 'unsubscribed' in response to probes when roster loading fails.
Waqas Hussain <waqas20@gmail.com>
parents:
3109
diff
changeset
|
232 local result, err = rostermanager.is_contact_subscribed(node, host, from_bare); |
c311fdffccce
mod_presence: Don't send 'unsubscribed' in response to probes when roster loading fails.
Waqas Hussain <waqas20@gmail.com>
parents:
3109
diff
changeset
|
233 if result then |
3153
fd435cab928f
mod_presence: Removed unnecessary parameter 'core_route_stanza' from various functions.
Waqas Hussain <waqas20@gmail.com>
parents:
3112
diff
changeset
|
234 if 0 == send_presence_of_available_resources(node, host, st_from, origin) then |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
235 core_post_stanza(hosts[host], st.presence({from=to_bare, to=st_from, type="unavailable"}), true); -- TODO send last activity |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
236 end |
3112
c311fdffccce
mod_presence: Don't send 'unsubscribed' in response to probes when roster loading fails.
Waqas Hussain <waqas20@gmail.com>
parents:
3109
diff
changeset
|
237 elseif not err then |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
238 core_post_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unsubscribed"}), true); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
239 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
240 elseif stanza.attr.type == "subscribe" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
241 if rostermanager.is_contact_subscribed(node, host, from_bare) then |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
242 core_post_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="subscribed"}), true); -- already subscribed |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
243 -- Sending presence is not clearly stated in the RFC, but it seems appropriate |
3153
fd435cab928f
mod_presence: Removed unnecessary parameter 'core_route_stanza' from various functions.
Waqas Hussain <waqas20@gmail.com>
parents:
3112
diff
changeset
|
244 if 0 == send_presence_of_available_resources(node, host, from_bare, origin) then |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
245 core_post_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unavailable"}), true); -- TODO send last activity |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
246 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
247 else |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
248 core_post_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unavailable"}), true); -- acknowledging receipt |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
249 if not rostermanager.is_contact_pending_in(node, host, from_bare) then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
250 if rostermanager.set_contact_pending_in(node, host, from_bare) then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
251 sessionmanager.send_to_available_resources(node, host, stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
252 end -- TODO else return error, unable to save |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
253 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
254 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
255 elseif stanza.attr.type == "unsubscribe" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
256 if rostermanager.process_inbound_unsubscribe(node, host, from_bare) then |
2143
13ac68e8760b
mod_presence: Route incoming presence subscription stanzas (types unsubscribe, subscribed and unsubscribed) to the user before roster pushes.
Waqas Hussain <waqas20@gmail.com>
parents:
2142
diff
changeset
|
257 sessionmanager.send_to_interested_resources(node, host, stanza); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
258 rostermanager.roster_push(node, host, from_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
259 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
260 elseif stanza.attr.type == "subscribed" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
261 if rostermanager.process_inbound_subscription_approval(node, host, from_bare) then |
2143
13ac68e8760b
mod_presence: Route incoming presence subscription stanzas (types unsubscribe, subscribed and unsubscribed) to the user before roster pushes.
Waqas Hussain <waqas20@gmail.com>
parents:
2142
diff
changeset
|
262 sessionmanager.send_to_interested_resources(node, host, stanza); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
263 rostermanager.roster_push(node, host, from_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
264 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
265 elseif stanza.attr.type == "unsubscribed" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
266 if rostermanager.process_inbound_subscription_cancellation(node, host, from_bare) then |
2143
13ac68e8760b
mod_presence: Route incoming presence subscription stanzas (types unsubscribe, subscribed and unsubscribed) to the user before roster pushes.
Waqas Hussain <waqas20@gmail.com>
parents:
2142
diff
changeset
|
267 sessionmanager.send_to_interested_resources(node, host, stanza); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
268 rostermanager.roster_push(node, host, from_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
269 end |
4139
eef75a0c85e3
mod_presence: Bounce errors for invalid presence types (thanks nolan/Astro)
Matthew Wild <mwild1@gmail.com>
parents:
3969
diff
changeset
|
270 else |
eef75a0c85e3
mod_presence: Bounce errors for invalid presence types (thanks nolan/Astro)
Matthew Wild <mwild1@gmail.com>
parents:
3969
diff
changeset
|
271 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid presence type")); |
eef75a0c85e3
mod_presence: Bounce errors for invalid presence types (thanks nolan/Astro)
Matthew Wild <mwild1@gmail.com>
parents:
3969
diff
changeset
|
272 end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
273 stanza.attr.from, stanza.attr.to = st_from, st_to; |
3181
1f73b3a960cf
mod_presence: Small refactoring.
Waqas Hussain <waqas20@gmail.com>
parents:
3156
diff
changeset
|
274 return true; |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
275 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
276 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
277 local outbound_presence_handler = function(data) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
278 -- outbound presence recieved |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
279 local origin, stanza = data.origin, data.stanza; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
280 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
281 local to = stanza.attr.to; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
282 if to then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
283 local t = stanza.attr.type; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
284 if t ~= nil and t ~= "unavailable" and t ~= "error" then -- check for subscriptions and probes |
3181
1f73b3a960cf
mod_presence: Small refactoring.
Waqas Hussain <waqas20@gmail.com>
parents:
3156
diff
changeset
|
285 return handle_outbound_presence_subscriptions_and_probes(origin, stanza, jid_bare(stanza.attr.from), jid_bare(stanza.attr.to)); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
286 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
287 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
288 local to_bare = jid_bare(to); |
3215
e55782f20679
mod_presence: Fixed a traceback.
Waqas Hussain <waqas20@gmail.com>
parents:
3198
diff
changeset
|
289 local roster = origin.roster; |
e55782f20679
mod_presence: Fixed a traceback.
Waqas Hussain <waqas20@gmail.com>
parents:
3198
diff
changeset
|
290 if roster and not(roster[to_bare] and (roster[to_bare].subscription == "both" or roster[to_bare].subscription == "from")) then -- directed presence |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
291 origin.directed = origin.directed or {}; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
292 if t then -- removing from directed presence list on sending an error or unavailable |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
293 origin.directed[to] = nil; -- FIXME does it make more sense to add to_bare rather than to? |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
294 else |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
295 origin.directed[to] = true; -- FIXME does it make more sense to add to_bare rather than to? |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
296 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
297 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
298 end -- TODO maybe handle normal presence here, instead of letting it pass to incoming handlers? |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
299 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
300 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
301 module:hook("pre-presence/full", outbound_presence_handler); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
302 module:hook("pre-presence/bare", outbound_presence_handler); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
303 module:hook("pre-presence/host", outbound_presence_handler); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
304 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
305 module:hook("presence/bare", function(data) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
306 -- inbound presence to bare JID recieved |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
307 local origin, stanza = data.origin, data.stanza; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
308 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
309 local to = stanza.attr.to; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
310 local t = stanza.attr.type; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
311 if to then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
312 if t ~= nil and t ~= "unavailable" and t ~= "error" then -- check for subscriptions and probes sent to bare JID |
3181
1f73b3a960cf
mod_presence: Small refactoring.
Waqas Hussain <waqas20@gmail.com>
parents:
3156
diff
changeset
|
313 return handle_inbound_presence_subscriptions_and_probes(origin, stanza, jid_bare(stanza.attr.from), jid_bare(stanza.attr.to)); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
314 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5416
diff
changeset
|
315 |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
316 local user = bare_sessions[to]; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
317 if user then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
318 for _, session in pairs(user.sessions) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
319 if session.presence then -- only send to available resources |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
320 session.send(stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
321 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
322 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
323 end -- no resources not online, discard |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
324 elseif not t or t == "unavailable" then |
3153
fd435cab928f
mod_presence: Removed unnecessary parameter 'core_route_stanza' from various functions.
Waqas Hussain <waqas20@gmail.com>
parents:
3112
diff
changeset
|
325 handle_normal_presence(origin, stanza); |
4139
eef75a0c85e3
mod_presence: Bounce errors for invalid presence types (thanks nolan/Astro)
Matthew Wild <mwild1@gmail.com>
parents:
3969
diff
changeset
|
326 else |
eef75a0c85e3
mod_presence: Bounce errors for invalid presence types (thanks nolan/Astro)
Matthew Wild <mwild1@gmail.com>
parents:
3969
diff
changeset
|
327 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid presence type")); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
328 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
329 return true; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
330 end); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
331 module:hook("presence/full", function(data) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
332 -- inbound presence to full JID recieved |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
333 local origin, stanza = data.origin, data.stanza; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
334 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
335 local t = stanza.attr.type; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
336 if t ~= nil and t ~= "unavailable" and t ~= "error" then -- check for subscriptions and probes sent to full JID |
3181
1f73b3a960cf
mod_presence: Small refactoring.
Waqas Hussain <waqas20@gmail.com>
parents:
3156
diff
changeset
|
337 return handle_inbound_presence_subscriptions_and_probes(origin, stanza, jid_bare(stanza.attr.from), jid_bare(stanza.attr.to)); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
338 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
339 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
340 local session = full_sessions[stanza.attr.to]; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
341 if session then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
342 -- TODO fire post processing event |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
343 session.send(stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
344 end -- resource not online, discard |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
345 return true; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
346 end); |
2531
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
347 module:hook("presence/host", function(data) |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
348 -- inbound presence to the host |
5416
0ba3a49d3863
mod_presence: Remove some unused variables
Matthew Wild <mwild1@gmail.com>
parents:
5370
diff
changeset
|
349 local stanza = data.stanza; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5416
diff
changeset
|
350 |
2531
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
351 local from_bare = jid_bare(stanza.attr.from); |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
352 local t = stanza.attr.type; |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
353 if t == "probe" then |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
354 core_post_stanza(hosts[module.host], st.presence({ from = module.host, to = from_bare, id = stanza.attr.id })); |
2531
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
355 elseif t == "subscribe" then |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
356 core_post_stanza(hosts[module.host], st.presence({ from = module.host, to = from_bare, id = stanza.attr.id, type = "subscribed" })); |
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
357 core_post_stanza(hosts[module.host], st.presence({ from = module.host, to = from_bare, id = stanza.attr.id })); |
2531
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
358 end |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
359 return true; |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
360 end); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
361 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
362 module:hook("resource-unbind", function(event) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
363 local session, err = event.session, event.error; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
364 -- Send unavailable presence |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
365 if session.presence then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
366 local pres = st.presence{ type = "unavailable" }; |
4967
b7bcf088e723
mod_presence: Handle nil disconnection error
Matthew Wild <mwild1@gmail.com>
parents:
4139
diff
changeset
|
367 if err then |
b7bcf088e723
mod_presence: Handle nil disconnection error
Matthew Wild <mwild1@gmail.com>
parents:
4139
diff
changeset
|
368 pres:tag("status"):text("Disconnected: "..err):up(); |
b7bcf088e723
mod_presence: Handle nil disconnection error
Matthew Wild <mwild1@gmail.com>
parents:
4139
diff
changeset
|
369 end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
370 session:dispatch_stanza(pres); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
371 elseif session.directed then |
1606
bbadcaab0036
mod_presence: Tag outgoing unavailables generated by a disconnect with a from attribute
Matthew Wild <mwild1@gmail.com>
parents:
1568
diff
changeset
|
372 local pres = st.presence{ type = "unavailable", from = session.full_jid }; |
4967
b7bcf088e723
mod_presence: Handle nil disconnection error
Matthew Wild <mwild1@gmail.com>
parents:
4139
diff
changeset
|
373 if err then |
b7bcf088e723
mod_presence: Handle nil disconnection error
Matthew Wild <mwild1@gmail.com>
parents:
4139
diff
changeset
|
374 pres:tag("status"):text("Disconnected: "..err):up(); |
b7bcf088e723
mod_presence: Handle nil disconnection error
Matthew Wild <mwild1@gmail.com>
parents:
4139
diff
changeset
|
375 end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
376 for jid in pairs(session.directed) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
377 pres.attr.to = jid; |
3198
5a4e766a3577
mod_presence: Enable firing of pre-events for all outbound stanzas, and switching completely to core_post_stanza.
Waqas Hussain <waqas20@gmail.com>
parents:
3196
diff
changeset
|
378 core_post_stanza(session, pres, true); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
379 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
380 session.directed = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
381 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
382 end); |