Mercurial > prosody-hg
annotate plugins/mod_iq.lua @ 3657:07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sun, 28 Nov 2010 02:37:18 +0500 |
| parents | 71fd1582f01b |
| children | 13600f0d56b5 |
| 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 |
|
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1421
diff
changeset
|
4 -- |
|
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"; |
|
1267
1bf897de6c24
mod_iq: Immediately return an error for IQs to non-existing bare JIDs
Waqas Hussain <waqas20@gmail.com>
parents:
1266
diff
changeset
|
11 local jid_split = require "util.jid".split; |
|
1234
0ff02499f05c
mod_message, mod_iq: A little cleanup
Waqas Hussain <waqas20@gmail.com>
parents:
1233
diff
changeset
|
12 |
|
0ff02499f05c
mod_message, mod_iq: A little cleanup
Waqas Hussain <waqas20@gmail.com>
parents:
1233
diff
changeset
|
13 local full_sessions = full_sessions; |
|
0ff02499f05c
mod_message, mod_iq: A little cleanup
Waqas Hussain <waqas20@gmail.com>
parents:
1233
diff
changeset
|
14 local bare_sessions = bare_sessions; |
| 1233 | 15 |
| 16 module:hook("iq/full", function(data) | |
| 17 -- IQ to full JID recieved | |
| 18 local origin, stanza = data.origin, data.stanza; | |
| 19 | |
| 20 local session = full_sessions[stanza.attr.to]; | |
| 21 if session then | |
| 22 -- TODO fire post processing event | |
| 23 session.send(stanza); | |
| 24 else -- resource not online | |
|
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
|
25 if stanza.attr.type == "get" or stanza.attr.type == "set" then |
|
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
|
26 origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); |
|
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
|
27 end |
| 1233 | 28 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
|
29 return true; |
| 1233 | 30 end); |
| 31 | |
| 32 module:hook("iq/bare", function(data) | |
| 33 -- IQ to bare JID recieved | |
| 34 local origin, stanza = data.origin, data.stanza; | |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
35 local type = stanza.attr.type; |
| 1233 | 36 |
| 37 -- TODO fire post processing events | |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
38 if type == "get" or type == "set" then |
|
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 local ret = module:fire_event("iq/bare/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data); |
|
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
|
40 if ret ~= nil then return ret; end |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
41 return module:fire_event("iq-"..type.."/bare/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].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
|
42 else |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
43 module:fire_event("iq-"..type.."/bare/"..stanza.attr.id, data); |
|
1403
a1762cfd4d83
mod_iq: Fire sub-events for IQ results and errors
Waqas Hussain <waqas20@gmail.com>
parents:
1288
diff
changeset
|
44 return true; |
|
1260
04c1fae0eb03
mod_iq: Fire sub-events for IQs directed at bare JIDs and hosts
Waqas Hussain <waqas20@gmail.com>
parents:
1234
diff
changeset
|
45 end |
| 1233 | 46 end); |
| 47 | |
|
2686
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
48 module:hook("iq/self", function(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
|
49 -- IQ to self JID recieved |
|
2686
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
50 local origin, stanza = data.origin, data.stanza; |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
51 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
|
52 |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
53 if type == "get" or type == "set" then |
|
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
|
54 local ret = module:fire_event("iq/self/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data); |
|
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 |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
56 return module:fire_event("iq-"..type.."/self/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data); |
|
2686
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
57 else |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
58 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 return true; |
|
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 end); |
|
d0d38fcaade0
mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents:
1522
diff
changeset
|
62 |
| 1233 | 63 module:hook("iq/host", function(data) |
| 64 -- IQ to a local host recieved | |
| 65 local origin, stanza = data.origin, data.stanza; | |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
66 local type = stanza.attr.type; |
| 1233 | 67 |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
68 if type == "get" or type == "set" then |
|
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
|
69 local ret = module:fire_event("iq/host/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data); |
|
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
|
70 if ret ~= nil then return ret; end |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
71 return module:fire_event("iq-"..type.."/host/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].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
|
72 else |
|
3657
07f0c2ef16cb
mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents:
3656
diff
changeset
|
73 module:fire_event("iq-"..type.."/host/"..stanza.attr.id, data); |
|
1403
a1762cfd4d83
mod_iq: Fire sub-events for IQ results and errors
Waqas Hussain <waqas20@gmail.com>
parents:
1288
diff
changeset
|
74 return true; |
|
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); |
