Annotate

plugins/mod_iq.lua @ 8529:257fd322fc9f

net.server_event: Better outgoing connection error handling Same as 67311cda0625. Check for readability. If a socket is readable after initial connection, it likely means an error, so we call the readcallback for that connection to handle it (and ultimately close).
author Matthew Wild <mwild1@gmail.com>
date Fri, 23 Feb 2018 15:33:02 +0000
parent 5776:bd0ff8ae98a8
child 8728:41c959c5c84b
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
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
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];
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
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
28
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
29 module:hook("iq/bare", function(data)
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
30 -- 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
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
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
33
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
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
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
44 end);
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
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)
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
47 -- 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
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
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
62 module:hook("iq/host", function(data)
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
63 -- 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
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
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
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
4c8c3d7d9c27 mod_iq: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
76 end);