Annotate

plugins/mod_iq.lua @ 4870:ca39f9b4cc8e

mod_iq: Use "jabber:client" when the stanza payload namespace is nil.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 12 May 2012 21:39:30 +0500
parent 4760:55501fc4394b
child 4966:073eff2853a1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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";
1234
0ff02499f05c mod_message, mod_iq: A little cleanup
Waqas Hussain <waqas20@gmail.com>
parents: 1233
diff changeset
11
0ff02499f05c mod_message, mod_iq: A little cleanup
Waqas Hussain <waqas20@gmail.com>
parents: 1233
diff changeset
12 local full_sessions = full_sessions;
1233
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
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)
ce04b8b144de mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents: 3673
diff changeset
16 -- IQ to full JID recieved
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
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
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];
ce04b8b144de mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents: 3673
diff changeset
20 if session then
ce04b8b144de mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents: 3673
diff changeset
21 -- TODO fire post processing event
ce04b8b144de mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents: 3673
diff changeset
22 session.send(stanza);
ce04b8b144de mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents: 3673
diff changeset
23 else -- resource not online
ce04b8b144de mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents: 3673
diff changeset
24 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
25 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
26 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
27 end
3678
ce04b8b144de mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents: 3673
diff changeset
28 return true;
ce04b8b144de mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents: 3673
diff changeset
29 end);
ce04b8b144de mod_iq: Don't hook 'iq/full' on components.
Waqas Hussain <waqas20@gmail.com>
parents: 3673
diff changeset
30 end
1233
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
31
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
32 module:hook("iq/bare", function(data)
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
33 -- IQ to bare JID recieved
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
34 local stanza = 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
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
36
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
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
3658
13600f0d56b5 mod_iq: Optimized a bit more (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents: 3657
diff changeset
39 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
40 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
41 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
42 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
43 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
44 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
45 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
46 end
1233
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
47 end);
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
48
2686
d0d38fcaade0 mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
49 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
50 -- IQ to self JID recieved
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
51 local stanza = data.stanza;
3657
07f0c2ef16cb mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents: 3656
diff changeset
52 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
53
3657
07f0c2ef16cb mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents: 3656
diff changeset
54 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
55 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
56 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
57 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
58 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
59 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
60 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
61 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
62 end
d0d38fcaade0 mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
63 end);
d0d38fcaade0 mod_iq: Fire sub-events for iq/self events.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
64
1233
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
65 module:hook("iq/host", function(data)
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
66 -- IQ to a local host recieved
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
67 local stanza = data.stanza;
3657
07f0c2ef16cb mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents: 3656
diff changeset
68 local type = stanza.attr.type;
1233
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
69
3657
07f0c2ef16cb mod_iq: Optimized a bit (fewer table accesses).
Waqas Hussain <waqas20@gmail.com>
parents: 3656
diff changeset
70 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
71 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
72 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
73 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
74 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
75 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
76 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
77 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
78 end
1233
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
79 end);