Sat, 22 May 2010 01:48:31 +0200
util.sasl.scram: Check nonce in client final message. Check channel binding flag in client first message. Adding some TODOs on more strict parsing. (thanks Marc Santamaria)
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 |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
4 | -- |
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; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
12 | local pairs, ipairs = pairs, ipairs; |
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 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
17 | local st = require "util.stanza"; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
18 | local jid_split = require "util.jid".split; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
19 | local jid_bare = require "util.jid".bare; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
20 | local hosts = hosts; |
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
|
21 | local NULL = {}; |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
22 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
23 | local rostermanager = require "core.rostermanager"; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
24 | local sessionmanager = require "core.sessionmanager"; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
25 | local offlinemanager = require "core.offlinemanager"; |
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 _core_route_stanza = core_route_stanza; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
28 | local core_route_stanza; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
29 | function core_route_stanza(origin, stanza) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
30 | if stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
31 | local node, host = jid_split(stanza.attr.to); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
32 | host = hosts[host]; |
1731
38d87682cb4a
mod_presence: Fixed: Don't recursively handle inbound presence directed at local host
Waqas Hussain <waqas20@gmail.com>
parents:
1641
diff
changeset
|
33 | if node and host and host.type == "local" then |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
34 | handle_inbound_presence_subscriptions_and_probes(origin, stanza, jid_bare(stanza.attr.from), jid_bare(stanza.attr.to), core_route_stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
35 | return; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
36 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
37 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
38 | _core_route_stanza(origin, stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
39 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
40 | |
2644
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
41 | local select_top_resources; |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
42 | local bare_message_delivery_policy = module:get_option("bare_message_delivery_policy") or "priority"; |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
43 | if bare_message_delivery_policy == "broadcast" then |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
44 | function select_top_resources(user) |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
45 | local recipients = {}; |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
46 | for _, session in pairs(user.sessions) do -- find resources with non-negative priority |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
47 | local p = session.priority; |
2644
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
48 | if p and p >= 0 then |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
49 | t_insert(recipients, session); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
50 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
51 | end |
2644
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
52 | return recipients; |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
53 | end |
2644
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
54 | else |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
55 | if bare_message_delivery_policy ~= "priority" then |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
56 | module:log("warn", "Invalid value for config option bare_message_delivery_policy"); |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
57 | end |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
58 | function select_top_resources(user) |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
59 | local priority = 0; |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
60 | local recipients = {}; |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
61 | for _, session in pairs(user.sessions) do -- find resource with greatest priority |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
62 | if session.presence then |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
63 | -- TODO check active privacy list for session |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
64 | local p = session.priority; |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
65 | if p > priority then |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
66 | priority = p; |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
67 | recipients = {session}; |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
68 | elseif p == priority then |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
69 | t_insert(recipients, session); |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
70 | end |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
71 | end |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
72 | end |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
73 | return recipients; |
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
74 | end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
75 | end |
2644
c75c22c316d6
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
Waqas Hussain <waqas20@gmail.com>
parents:
2643
diff
changeset
|
76 | |
2593
06995c8bfe80
mod_presence: Don't depend on user being online when calculating top resources.
Waqas Hussain <waqas20@gmail.com>
parents:
2592
diff
changeset
|
77 | 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
|
78 | 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
|
79 | 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
|
80 | 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
|
81 | end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
82 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
83 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
84 | function handle_normal_presence(origin, stanza, core_route_stanza) |
2643
21eb99b06f4d
mod_presence: Reflect the user's own presence back to them.
Waqas Hussain <waqas20@gmail.com>
parents:
2593
diff
changeset
|
85 | 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
|
86 | 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
|
87 | end |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
88 | local roster = origin.roster; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
89 | 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
|
90 | 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
|
91 | 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
|
92 | 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
|
93 | stanza.attr.to = res.full_jid; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
94 | core_route_stanza(origin, stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
95 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
96 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
97 | 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
|
98 | 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
|
99 | stanza.attr.to = jid; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
100 | core_route_stanza(origin, stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
101 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
102 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
103 | 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
|
104 | origin.presence = stanza; -- FIXME repeated later |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
105 | 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
|
106 | 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
|
107 | 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
|
108 | probe.attr.to = jid; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
109 | core_route_stanza(origin, probe); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
110 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
111 | 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
|
112 | 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
|
113 | if res ~= origin and res.presence then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
114 | res.presence.attr.to = origin.full_jid; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
115 | core_route_stanza(res, res.presence); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
116 | res.presence.attr.to = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
117 | end |
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 | 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
|
120 | for jid in pairs(roster.pending) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
121 | 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
|
122 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
123 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
124 | 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
|
125 | 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
|
126 | if item.ask then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
127 | request.attr.to = jid; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
128 | core_route_stanza(origin, request); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
129 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
130 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
131 | local offline = offlinemanager.load(node, host); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
132 | if offline then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
133 | for _, msg in ipairs(offline) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
134 | origin.send(msg); -- FIXME do we need to modify to/from in any way? |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
135 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
136 | offlinemanager.deleteAll(node, host); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
137 | end |
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 | if stanza.attr.type == "unavailable" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
140 | origin.presence = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
141 | if origin.priority then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
142 | 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
|
143 | recalc_resource_map(user); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
144 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
145 | if origin.directed then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
146 | for jid in pairs(origin.directed) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
147 | stanza.attr.to = jid; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
148 | core_route_stanza(origin, stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
149 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
150 | origin.directed = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
151 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
152 | else |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
153 | origin.presence = stanza; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
154 | local priority = stanza:child_with_name("priority"); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
155 | if priority and #priority > 0 then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
156 | priority = t_concat(priority); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
157 | if s_find(priority, "^[+-]?[0-9]+$") then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
158 | priority = tonumber(priority); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
159 | if priority < -128 then priority = -128 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
160 | if priority > 127 then priority = 127 end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
161 | else priority = 0; end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
162 | else priority = 0; end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
163 | if origin.priority ~= priority then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
164 | 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
|
165 | recalc_resource_map(user); |
1508
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 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
168 | stanza.attr.to = nil; -- reset it |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
169 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
170 | |
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
|
171 | function send_presence_of_available_resources(user, host, jid, recipient_session, core_route_stanza, stanza) |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
172 | local h = hosts[host]; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
173 | local count = 0; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
174 | if h and h.type == "local" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
175 | local u = h.sessions[user]; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
176 | if u then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
177 | 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
|
178 | local pres = session.presence; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
179 | 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
|
180 | 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
|
181 | pres.attr.to = jid; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
182 | core_route_stanza(session, pres); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
183 | pres.attr.to = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
184 | count = count + 1; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
185 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
186 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
187 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
188 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
189 | log("debug", "broadcasted presence of "..count.." resources from "..user.."@"..host.." to "..jid); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
190 | return count; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
191 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
192 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
193 | function handle_outbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
194 | local node, host = jid_split(from_bare); |
1641
af962e6ae781
Fixed: Outbound subscription requests silently dropped (regression in hg:7f17d0d00fbb)
Waqas Hussain <waqas20@gmail.com>
parents:
1626
diff
changeset
|
195 | if to_bare == origin.username.."@"..origin.host then return; end -- No self contacts |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
196 | 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
|
197 | stanza.attr.from, stanza.attr.to = from_bare, to_bare; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
198 | log("debug", "outbound presence "..stanza.attr.type.." from "..from_bare.." for "..to_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
199 | if stanza.attr.type == "subscribe" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
200 | -- 1. route stanza |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
201 | -- 2. roster push (subscription = none, ask = subscribe) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
202 | 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
|
203 | rostermanager.roster_push(node, host, to_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
204 | end -- else file error |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
205 | core_route_stanza(origin, stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
206 | elseif stanza.attr.type == "unsubscribe" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
207 | -- 1. route stanza |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
208 | -- 2. roster push (subscription = none or from) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
209 | 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
|
210 | 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
|
211 | end -- else file error |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
212 | core_route_stanza(origin, stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
213 | elseif stanza.attr.type == "subscribed" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
214 | -- 1. route stanza |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
215 | -- 2. roster_push () |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
216 | -- 3. send_presence_of_available_resources |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
217 | 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
|
218 | rostermanager.roster_push(node, host, to_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
219 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
220 | core_route_stanza(origin, stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
221 | send_presence_of_available_resources(node, host, to_bare, origin, core_route_stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
222 | elseif stanza.attr.type == "unsubscribed" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
223 | -- 1. route stanza |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
224 | -- 2. roster push (subscription = none or to) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
225 | if rostermanager.unsubscribed(node, host, to_bare) then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
226 | rostermanager.roster_push(node, host, to_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
227 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
228 | core_route_stanza(origin, stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
229 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
230 | stanza.attr.from, stanza.attr.to = st_from, st_to; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
231 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
232 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
233 | function handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
234 | local node, host = jid_split(to_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
235 | 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
|
236 | stanza.attr.from, stanza.attr.to = from_bare, to_bare; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
237 | log("debug", "inbound presence "..stanza.attr.type.." from "..from_bare.." for "..to_bare); |
1568
b11bac42d56f
mod_presence: Ignore presence sent to host and invalid JIDs, fixes traceback (thanks Deepspawn)
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
238 | |
b11bac42d56f
mod_presence: Ignore presence sent to host and invalid JIDs, fixes traceback (thanks Deepspawn)
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
239 | if not node then |
b11bac42d56f
mod_presence: Ignore presence sent to host and invalid JIDs, fixes traceback (thanks Deepspawn)
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
240 | log("debug", "dropping presence sent to host or invalid address '%s'", tostring(to_bare)); |
b11bac42d56f
mod_presence: Ignore presence sent to host and invalid JIDs, fixes traceback (thanks Deepspawn)
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
241 | end |
b11bac42d56f
mod_presence: Ignore presence sent to host and invalid JIDs, fixes traceback (thanks Deepspawn)
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
242 | |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
243 | if stanza.attr.type == "probe" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
244 | if rostermanager.is_contact_subscribed(node, host, from_bare) then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
245 | if 0 == send_presence_of_available_resources(node, host, st_from, origin, core_route_stanza) then |
2525
e385511b3a54
mod_presence: Respond with an unavailable presence when subscribers probe and no resources are available.
Waqas Hussain <waqas20@gmail.com>
parents:
2461
diff
changeset
|
246 | core_route_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unavailable"})); -- TODO send last activity |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
247 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
248 | else |
2259
22417227d2ce
mod_presence: Use the local host object as the origin for auto-generated subscription approvals and cancellations.
Waqas Hussain <waqas20@gmail.com>
parents:
2229
diff
changeset
|
249 | core_route_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unsubscribed"})); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
250 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
251 | elseif stanza.attr.type == "subscribe" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
252 | if rostermanager.is_contact_subscribed(node, host, from_bare) then |
2259
22417227d2ce
mod_presence: Use the local host object as the origin for auto-generated subscription approvals and cancellations.
Waqas Hussain <waqas20@gmail.com>
parents:
2229
diff
changeset
|
253 | core_route_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="subscribed"})); -- already subscribed |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
254 | -- Sending presence is not clearly stated in the RFC, but it seems appropriate |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
255 | if 0 == send_presence_of_available_resources(node, host, from_bare, origin, core_route_stanza) then |
2525
e385511b3a54
mod_presence: Respond with an unavailable presence when subscribers probe and no resources are available.
Waqas Hussain <waqas20@gmail.com>
parents:
2461
diff
changeset
|
256 | core_route_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unavailable"})); -- TODO send last activity |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
257 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
258 | else |
2229
3b38ec879076
mod_presence: Use the local host as origin for subscription request acks.
Waqas Hussain <waqas20@gmail.com>
parents:
2228
diff
changeset
|
259 | core_route_stanza(hosts[host], st.presence({from=to_bare, to=from_bare, type="unavailable"})); -- acknowledging receipt |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
260 | 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
|
261 | 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
|
262 | 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
|
263 | 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
|
264 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
265 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
266 | elseif stanza.attr.type == "unsubscribe" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
267 | 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
|
268 | 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
|
269 | rostermanager.roster_push(node, host, from_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
270 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
271 | elseif stanza.attr.type == "subscribed" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
272 | 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
|
273 | 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
|
274 | rostermanager.roster_push(node, host, from_bare); |
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 | elseif stanza.attr.type == "unsubscribed" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
277 | 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
|
278 | 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
|
279 | rostermanager.roster_push(node, host, from_bare); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
280 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
281 | end -- discard any other type |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
282 | stanza.attr.from, stanza.attr.to = st_from, st_to; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
283 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
284 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
285 | local outbound_presence_handler = function(data) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
286 | -- outbound presence recieved |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
287 | local origin, stanza = data.origin, data.stanza; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
288 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
289 | local to = stanza.attr.to; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
290 | if to then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
291 | local t = stanza.attr.type; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
292 | if t ~= nil and t ~= "unavailable" and t ~= "error" then -- check for subscriptions and probes |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
293 | handle_outbound_presence_subscriptions_and_probes(origin, stanza, jid_bare(stanza.attr.from), jid_bare(stanza.attr.to), core_route_stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
294 | return true; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
295 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
296 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
297 | local to_bare = jid_bare(to); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
298 | if not(origin.roster[to_bare] and (origin.roster[to_bare].subscription == "both" or origin.roster[to_bare].subscription == "from")) then -- directed presence |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
299 | origin.directed = origin.directed or {}; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
300 | 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
|
301 | 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
|
302 | else |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
303 | 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
|
304 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
305 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
306 | 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
|
307 | end |
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 | 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
|
310 | 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
|
311 | 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
|
312 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
313 | module:hook("presence/bare", function(data) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
314 | -- inbound presence to bare JID recieved |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
315 | local origin, stanza = data.origin, data.stanza; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
316 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
317 | local to = stanza.attr.to; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
318 | local t = stanza.attr.type; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
319 | if to then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
320 | if t ~= nil and t ~= "unavailable" and t ~= "error" then -- check for subscriptions and probes sent to bare JID |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
321 | handle_inbound_presence_subscriptions_and_probes(origin, stanza, jid_bare(stanza.attr.from), jid_bare(stanza.attr.to), core_route_stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
322 | return true; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
323 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
324 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
325 | local user = bare_sessions[to]; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
326 | if user then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
327 | for _, session in pairs(user.sessions) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
328 | 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
|
329 | session.send(stanza); |
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 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
332 | end -- no resources not online, discard |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
333 | elseif not t or t == "unavailable" then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
334 | handle_normal_presence(origin, stanza, core_route_stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
335 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
336 | return true; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
337 | end); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
338 | module:hook("presence/full", function(data) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
339 | -- inbound presence to full JID recieved |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
340 | local origin, stanza = data.origin, data.stanza; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
341 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
342 | local t = stanza.attr.type; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
343 | if t ~= nil and t ~= "unavailable" and t ~= "error" then -- check for subscriptions and probes sent to full JID |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
344 | handle_inbound_presence_subscriptions_and_probes(origin, stanza, jid_bare(stanza.attr.from), jid_bare(stanza.attr.to), core_route_stanza); |
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 |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
347 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
348 | local session = full_sessions[stanza.attr.to]; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
349 | if session then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
350 | -- TODO fire post processing event |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
351 | session.send(stanza); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
352 | end -- resource not online, discard |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
353 | return true; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
354 | end); |
2531
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
355 | 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
|
356 | -- inbound presence to the host |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
357 | local origin, stanza = data.origin, data.stanza; |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
358 | |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
359 | 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
|
360 | 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
|
361 | if t == "probe" then |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
362 | core_route_stanza(hosts[module.host], st.presence({ from = module.host, to = from_bare, id = stanza.attr.id })); |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
363 | elseif t == "subscribe" then |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
364 | core_route_stanza(hosts[module.host], st.presence({ from = module.host, to = from_bare, id = stanza.attr.id, type = "subscribed" })); |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
365 | core_route_stanza(hosts[module.host], st.presence({ from = module.host, to = from_bare, id = stanza.attr.id })); |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
366 | end |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
367 | return true; |
697ff4f98033
mod_presence: Added handler for presence subscriptions and probes to local hosts.
Waqas Hussain <waqas20@gmail.com>
parents:
2525
diff
changeset
|
368 | end); |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
369 | |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
370 | module:hook("resource-unbind", function(event) |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
371 | local session, err = event.session, event.error; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
372 | -- Send unavailable presence |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
373 | if session.presence then |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
374 | local pres = st.presence{ type = "unavailable" }; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
375 | if not(err) or err == "closed" then err = "connection closed"; end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
376 | pres:tag("status"):text("Disconnected: "..err):up(); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
377 | session:dispatch_stanza(pres); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
378 | 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
|
379 | local pres = st.presence{ type = "unavailable", from = session.full_jid }; |
1508
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
380 | if not(err) or err == "closed" then err = "connection closed"; end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
381 | pres:tag("status"):text("Disconnected: "..err):up(); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
382 | for jid in pairs(session.directed) do |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
383 | pres.attr.to = jid; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
384 | core_route_stanza(session, pres); |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
385 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
386 | session.directed = nil; |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
387 | end |
762d758e116a
mod_presence: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1488
diff
changeset
|
388 | end); |