Software /
code /
prosody
Annotate
plugins/mod_iq.lua @ 10302:4c53e58d2468
mod_csi_simple: Try not to flush buffer while already flushing it
Reduces log noice
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 05 Oct 2019 16:50:41 +0200 |
parent | 8728:41c959c5c84b |
child | 12977:74b9e05af71e |
rev | line source |
---|---|
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1421
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5370
diff
changeset
|
4 -- |
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1421
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1421
diff
changeset
|
6 -- COPYING file in the source package for more information. |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1421
diff
changeset
|
7 -- |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1421
diff
changeset
|
8 |
1265
3f3c62e45eeb
mod_iq: Error reply for IQ to non-existing session. mod_iq now handles all 'iq/full' cases
Waqas Hussain <waqas20@gmail.com>
parents:
1260
diff
changeset
|
9 |
3f3c62e45eeb
mod_iq: Error reply for IQ to non-existing session. mod_iq now handles all 'iq/full' cases
Waqas Hussain <waqas20@gmail.com>
parents:
1260
diff
changeset
|
10 local st = require "util.stanza"; |
1234
0ff02499f05c
mod_message, mod_iq: A little cleanup
Waqas Hussain <waqas20@gmail.com>
parents:
1233
diff
changeset
|
11 |
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:
4966
diff
changeset
|
12 local full_sessions = prosody.full_sessions; |
1233 | 13 |
3679
afdce92d07be
mod_iq: Fix an extra character in previous commit...
Waqas Hussain <waqas20@gmail.com>
parents:
3678
diff
changeset
|
14 if module:get_host_type() == "local" then |
3678
ce04b8b144de
mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents:
3673
diff
changeset
|
15 module:hook("iq/full", function(data) |
8728
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
16 -- IQ to full JID received |
3678
ce04b8b144de
mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents:
3673
diff
changeset
|
17 local origin, stanza = data.origin, data.stanza; |
1233 | 18 |
3678
ce04b8b144de
mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents:
3673
diff
changeset
|
19 local session = full_sessions[stanza.attr.to]; |
4966
073eff2853a1
mod_iq: Don't treat an iq as handled if session.send() returns false
Matthew Wild <mwild1@gmail.com>
parents:
4870
diff
changeset
|
20 if not (session and session.send(stanza)) then |
3678
ce04b8b144de
mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents:
3673
diff
changeset
|
21 if stanza.attr.type == "get" or stanza.attr.type == "set" then |
ce04b8b144de
mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents:
3673
diff
changeset
|
22 origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); |
ce04b8b144de
mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents:
3673
diff
changeset
|
23 end |
1265
3f3c62e45eeb
mod_iq: Error reply for IQ to non-existing session. mod_iq now handles all 'iq/full' cases
Waqas Hussain <waqas20@gmail.com>
parents:
1260
diff
changeset
|
24 end |
3678
ce04b8b144de
mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents:
3673
diff
changeset
|
25 return true; |
ce04b8b144de
mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents:
3673
diff
changeset
|
26 end); |
ce04b8b144de
mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents:
3673
diff
changeset
|
27 end |
1233 | 28 |
29 module:hook("iq/bare", function(data) | |
8728
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
30 -- IQ to bare JID received |
4760
55501fc4394b
mod_iq: Remove unused import of jid.split, bare_sessions and don't unpack event.origin when it isn't used. Waqas.
Matthew Wild <mwild1@gmail.com>
parents:
3679
diff
changeset
|
31 local stanza = data.stanza; |
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
32 local type = stanza.attr.type; |
1233 | 33 |
34 -- TODO fire post processing events | |
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
35 if type == "get" or type == "set" then |
3658
13600f0d56b5
mod_iq: Optimized a bit more (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3657
diff
changeset
|
36 local child = stanza.tags[1]; |
4870
ca39f9b4cc8e
mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
Waqas Hussain <waqas20@gmail.com>
parents:
4760
diff
changeset
|
37 local xmlns = child.attr.xmlns or "jabber:client"; |
ca39f9b4cc8e
mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
Waqas Hussain <waqas20@gmail.com>
parents:
4760
diff
changeset
|
38 local ret = module:fire_event("iq/bare/"..xmlns..":"..child.name, data); |
3656
71fd1582f01b
mod_iq: Extra IQ get and set sub-events are now fired: "iq-{get,set}/{host,self,bare}/xmlns:tag" (when "iq/{host,self,bare}/xmlns:tag" is unhandled).
Waqas Hussain <waqas20@gmail.com>
parents:
3647
diff
changeset
|
39 if ret ~= nil then return ret; end |
4870
ca39f9b4cc8e
mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
Waqas Hussain <waqas20@gmail.com>
parents:
4760
diff
changeset
|
40 return module:fire_event("iq-"..type.."/bare/"..xmlns..":"..child.name, data); |
1260
04c1fae0eb03
mod_iq: Fire sub-events for IQs directed at bare JIDs and hosts
Waqas Hussain <waqas20@gmail.com>
parents:
1234
diff
changeset
|
41 else |
3673
43b854062206
mod_iq: Don't stop event dispatch for unhandled IQ errors and results (this lets negative priority handlers intercept the events).
Waqas Hussain <waqas20@gmail.com>
parents:
3658
diff
changeset
|
42 return module:fire_event("iq-"..type.."/bare/"..stanza.attr.id, data); |
1260
04c1fae0eb03
mod_iq: Fire sub-events for IQs directed at bare JIDs and hosts
Waqas Hussain <waqas20@gmail.com>
parents:
1234
diff
changeset
|
43 end |
1233 | 44 end); |
45 | |
2686
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
46 module:hook("iq/self", function(data) |
8728
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
47 -- IQ to self JID received |
4760
55501fc4394b
mod_iq: Remove unused import of jid.split, bare_sessions and don't unpack event.origin when it isn't used. Waqas.
Matthew Wild <mwild1@gmail.com>
parents:
3679
diff
changeset
|
48 local stanza = data.stanza; |
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
49 local type = stanza.attr.type; |
2686
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
50 |
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
51 if type == "get" or type == "set" then |
3658
13600f0d56b5
mod_iq: Optimized a bit more (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3657
diff
changeset
|
52 local child = stanza.tags[1]; |
4870
ca39f9b4cc8e
mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
Waqas Hussain <waqas20@gmail.com>
parents:
4760
diff
changeset
|
53 local xmlns = child.attr.xmlns or "jabber:client"; |
ca39f9b4cc8e
mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
Waqas Hussain <waqas20@gmail.com>
parents:
4760
diff
changeset
|
54 local ret = module:fire_event("iq/self/"..xmlns..":"..child.name, data); |
3656
71fd1582f01b
mod_iq: Extra IQ get and set sub-events are now fired: "iq-{get,set}/{host,self,bare}/xmlns:tag" (when "iq/{host,self,bare}/xmlns:tag" is unhandled).
Waqas Hussain <waqas20@gmail.com>
parents:
3647
diff
changeset
|
55 if ret ~= nil then return ret; end |
4870
ca39f9b4cc8e
mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
Waqas Hussain <waqas20@gmail.com>
parents:
4760
diff
changeset
|
56 return module:fire_event("iq-"..type.."/self/"..xmlns..":"..child.name, data); |
2686
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
57 else |
3673
43b854062206
mod_iq: Don't stop event dispatch for unhandled IQ errors and results (this lets negative priority handlers intercept the events).
Waqas Hussain <waqas20@gmail.com>
parents:
3658
diff
changeset
|
58 return module:fire_event("iq-"..type.."/self/"..stanza.attr.id, data); |
2686
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
59 end |
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
60 end); |
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
61 |
1233 | 62 module:hook("iq/host", function(data) |
8728
41c959c5c84b
Fix spelling throughout the codebase [codespell]
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
63 -- IQ to a local host received |
4760
55501fc4394b
mod_iq: Remove unused import of jid.split, bare_sessions and don't unpack event.origin when it isn't used. Waqas.
Matthew Wild <mwild1@gmail.com>
parents:
3679
diff
changeset
|
64 local stanza = data.stanza; |
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
65 local type = stanza.attr.type; |
1233 | 66 |
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
67 if type == "get" or type == "set" then |
3658
13600f0d56b5
mod_iq: Optimized a bit more (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3657
diff
changeset
|
68 local child = stanza.tags[1]; |
4870
ca39f9b4cc8e
mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
Waqas Hussain <waqas20@gmail.com>
parents:
4760
diff
changeset
|
69 local xmlns = child.attr.xmlns or "jabber:client"; |
ca39f9b4cc8e
mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
Waqas Hussain <waqas20@gmail.com>
parents:
4760
diff
changeset
|
70 local ret = module:fire_event("iq/host/"..xmlns..":"..child.name, data); |
3656
71fd1582f01b
mod_iq: Extra IQ get and set sub-events are now fired: "iq-{get,set}/{host,self,bare}/xmlns:tag" (when "iq/{host,self,bare}/xmlns:tag" is unhandled).
Waqas Hussain <waqas20@gmail.com>
parents:
3647
diff
changeset
|
71 if ret ~= nil then return ret; end |
4870
ca39f9b4cc8e
mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
Waqas Hussain <waqas20@gmail.com>
parents:
4760
diff
changeset
|
72 return module:fire_event("iq-"..type.."/host/"..xmlns..":"..child.name, data); |
1260
04c1fae0eb03
mod_iq: Fire sub-events for IQs directed at bare JIDs and hosts
Waqas Hussain <waqas20@gmail.com>
parents:
1234
diff
changeset
|
73 else |
3673
43b854062206
mod_iq: Don't stop event dispatch for unhandled IQ errors and results (this lets negative priority handlers intercept the events).
Waqas Hussain <waqas20@gmail.com>
parents:
3658
diff
changeset
|
74 return module:fire_event("iq-"..type.."/host/"..stanza.attr.id, data); |
1260
04c1fae0eb03
mod_iq: Fire sub-events for IQs directed at bare JIDs and hosts
Waqas Hussain <waqas20@gmail.com>
parents:
1234
diff
changeset
|
75 end |
1233 | 76 end); |