annotate mod_sms_clickatell/mod_sms_clickatell.lua @ 363:72a5778579c5

mod_register_json: Let's call it the first commit, fixed all code errors (aka it works).
author Marco Cirillo <maranda@lightwitch.org>
date Tue, 12 Apr 2011 22:40:26 +0000
parents cd838419a85d
children ac9bf3fcbcfe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
1 -- mod_sms_clickatell
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
2 --
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
3 -- A Prosody module for sending SMS text messages from XMPP using the
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
4 -- Clickatell gateway's HTTP API
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
5 --
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
6 -- Hacked from mod_twitter by Phil Stewart, March 2011. Anything from
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
7 -- mod_twitter copyright The Guy Who Wrote mod_twitter. Everything else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
8 -- copyright 2011 Phil Stewart. Licensed under the same terms as Prosody
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
9 -- (MIT license, as per below)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
10 --
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
11 --[[
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
12 Permission is hereby granted, free of charge, to any person obtaining a copy
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
13 of this software and associated documentation files (the "Software"), to deal
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
14 in the Software without restriction, including without limitation the rights
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
15 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
16 copies of the Software, and to permit persons to whom the Software is
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
17 furnished to do so, subject to the following conditions:
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
18
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
19 The above copyright notice and this permission notice shall be included in
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
20 all copies or substantial portions of the Software.
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
21
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
23 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
24 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
25 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
26 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
27 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
28 THE SOFTWARE.
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
29 --]]
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
30
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
31 -- Raise an error if the modules hasn't been loaded as a component in prosody's config
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
32 if module:get_host_type() ~= "component" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
33 error(module.name.." should be loaded as a component, check out http://prosody.im/doc/components", 0);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
34 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
35
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
36 local jid_split = require "util.jid".split;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
37 local st = require "util.stanza";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
38 local componentmanager = require "core.componentmanager";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
39 local datamanager = require "util.datamanager";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
40 local timer = require "util.timer";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
41 local config_get = require "core.configmanager".get;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
42 local http = require "net.http";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
43 local base64 = require "util.encodings".base64;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
44 local serialize = require "util.serialization".serialize;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
45 local pairs, ipairs = pairs, ipairs;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
46 local setmetatable = setmetatable;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
47
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
48 local component_host = module:get_host();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
49 local component_name = module.name;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
50 local data_cache = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
51
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
52 --local clickatell_api_id = module:get_option_string("clickatell_api_id");
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
53 local sms_message_prefix = module:get_option_string("sms_message_prefix") or "";
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
54 --local sms_source_number = module:get_option_string("sms_source_number") or "";
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
55
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
56 --local users = setmetatable({}, {__mode="k"});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
57
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
58 -- User data is held in smsuser objects
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
59 local smsuser = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
60 smsuser.__index = smsuser;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
61
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
62 -- Users table is used to store user data in the form of smsuser objects.
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
63 -- It is indexed by the base jid of the user, so when a non-extant entry in the
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
64 -- table is referenced, we pass the jid to smsuser:register to load the user
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
65 local users = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
66 setmetatable(users, { __index = function (table, key)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
67 return smsuser:register(key);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
68 end });
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
69
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
70 -- Create a new smsuser object
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
71 function smsuser:new()
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
72 newuser = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
73 setmetatable(newuser, self);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
74 return newuser;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
75 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
76
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
77 -- Store (save) the user object
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
78 function smsuser:store()
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
79 datamanager.store(self.jid, component_host, "data", self.data);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
80 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
81
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
82 -- For debug
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
83 function smsuser:logjid()
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
84 module:log("logjid: ", self.jid);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
85 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
86
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
87 -- Register a user against the base jid of the client. If a user entry for the
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
88 -- bjid is already stored in the Prosody data manager, retrieve its data
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
89 function smsuser:register(bjid)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
90 reguser = smsuser:new();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
91 reguser.jid = bjid;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
92 reguser.data = datamanager.load(bjid, component_host, "data") or {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
93 return reguser;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
94 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
95
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
96 -- Add a roster entry for the user
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
97 -- SMS users must me of the form number@component_host
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
98 function smsuser:roster_add(sms_number)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
99 if self.data.roster == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
100 self.data.roster = {}
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
101 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
102 if self.data.roster[sms_number] == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
103 self.data.roster[sms_number] = {screen_name=sms_number, subscription=nil};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
104 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
105 self:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
106 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
107
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
108 -- Update the roster entry of sms_number with new screen name
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
109 function smsuser:roster_update_screen_name(sms_number, screen_name)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
110 if self.data.roster[sms_number] == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
111 smsuser:roster_add(sms_number);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
112 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
113 self.data.roster[sms_number].screen_name = screen_name;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
114 self:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
115 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
116
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
117 -- Update the roster entry of sms_number with new subscription detail
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
118 function smsuser:roster_update_subscription(sms_number, subscription)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
119 if self.data.roster[sms_number] == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
120 smsuser:roster_add(sms_number);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
121 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
122 self.data.roster[sms_number].subscription = subscription;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
123 self:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
124 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
125
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
126 -- Delete an entry from the roster
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
127 function smsuser:roster_delete(sms_number)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
128 self.data.roster[sms_number] = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
129 self:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
130 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
131
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
132 --
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
133 function smsuser:roster_stanza_args(sms_number)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
134 if self.data.roster[sms_number] == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
135 return nil
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
136 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
137 local args = {jid=sms_number.."@"..component_host, name=self.data.roster[sms_number].screen_name}
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
138 if self.data.roster[sms_number].subscription ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
139 args.subscription = self.data.roster[sms_number].subscription
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
140 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
141 return args
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
142 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
143
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
144 --[[ From mod_twitter, keeping 'cos I might use it later :-)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
145 function send_stanza(stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
146 if stanza ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
147 core_route_stanza(prosody.hosts[component_host], stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
148 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
149 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
150
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
151 function dmsg(jid, msg)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
152 module:log("debug", msg or "nil");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
153 if jid ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
154 send_stanza(st.message({to=jid, from=component_host, type='chat'}):tag("body"):text(msg or "nil"):up());
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
155 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
156 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
157
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
158 function substring(string, start_string, ending_string)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
159 local s_value_start, s_value_finish = nil, nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
160 if start_string ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
161 _, s_value_start = string:find(start_string);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
162 if s_value_start == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
163 -- error
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
164 return nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
165 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
166 else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
167 return nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
168 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
169 if ending_string ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
170 _, s_value_finish = string:find(ending_string, s_value_start+1);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
171 if s_value_finish == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
172 -- error
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
173 return nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
174 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
175 else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
176 s_value_finish = string:len()+1;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
177 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
178 return string:sub(s_value_start+1, s_value_finish-1);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
179 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
180 --]]
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
181
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
182 local http_timeout = 30;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
183 local http_queue = setmetatable({}, { __mode = "k" }); -- auto-cleaning nil elements
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
184 data_cache['prosody_os'] = prosody.platform;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
185 data_cache['prosody_version'] = prosody.version;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
186 local http_headers = {
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
187 ["user-Agent"] = "Prosody ("..data_cache['prosody_version'].."; "..data_cache['prosody_os']..")" --"ELinks (0.4pre5; Linux 2.4.27 i686; 80x25)",
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
188 };
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
189
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
190 function http_action_callback(response, code, request, xcallback)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
191 if http_queue == nil or http_queue[request] == nil then return; end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
192 local id = http_queue[request];
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
193 http_queue[request] = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
194 if xcallback == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
195 dmsg(nil, "http_action_callback reports that xcallback is nil");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
196 else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
197 xcallback(id, response, request);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
198 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
199 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
200 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
201
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
202 function http_add_action(tid, url, method, post, fcallback)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
203 local request = http.request(url, { headers = http_headers or {}, body = "", method = method or "GET" }, function(response, code, request) http_action_callback(response, code, request, fcallback) end);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
204 http_queue[request] = tid;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
205 timer.add_task(http_timeout, function() http.destroy_request(request); end);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
206 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
207 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
208
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
209 -- Clickatell SMS HTTP API interaction function
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
210 function clickatell_send_sms(user, number, message)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
211 module.log("info", "Clickatell API interaction function triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
212 -- Don't attempt to send an SMS with a null or empty message
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
213 if message == nil or message == "" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
214 return false;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
215 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
216
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
217 local sms_message = sms_message_prefix..message;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
218 local clickatell_base_url = "https://api.clickatell.com/http/sendmsg";
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
219 local params = {user=user.data.username, password=user.data.password, api_id=user.data.api_id, from=user.data.source_number, to=number, text=sms_message};
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
220 local query_string = "";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
221
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
222 for param, data in pairs(params) do
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
223 --module:log("info", "Inside query constructor: "..param..data);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
224 if query_string ~= "" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
225 query_string = query_string.."&";
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
226 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
227 query_string = query_string..param.."="..http.urlencode(data);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
228 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
229 local url = clickatell_base_url.."?"..query_string;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
230 module:log("info", "Clickatell SMS URL: "..url);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
231 http_add_action(message, url, "GET", params, nil);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
232 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
233 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
234
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
235 function iq_success(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
236 local reply = data_cache.success;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
237 if reply == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
238 reply = st.iq({type='result', from=stanza.attr.to or component_host});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
239 data_cache.success = reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
240 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
241 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
242 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
243 origin.send(reply);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
244 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
245 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
246
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
247 -- XMPP Service Discovery (disco) info callback
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
248 -- When a disco info query comes in, returns the identity and feature
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
249 -- information as per XEP-0030
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
250 function iq_disco_info(stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
251 module:log("info", "Disco info triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
252 local from = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
253 from.node, from.host, from.resource = jid_split(stanza.attr.from);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
254 local bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
255 local reply = data_cache.disco_info;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
256 if reply == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
257 --reply = st.iq({type='result', from=stanza.attr.to or component_host}):query("http://jabber.org/protocol/disco#info");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
258 reply = st.reply(stanza):query("http://jabber.org/protocol/disco#info");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
259 reply:tag("identity", {category='gateway', type='sms', name=component_name}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
260 reply:tag("feature", {var="urn:xmpp:receipts"}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
261 reply:tag("feature", {var="jabber:iq:register"}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
262 reply:tag("feature", {var="http://jabber.org/protocol/rosterx"}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
263 --reply = reply:tag("feature", {var="http://jabber.org/protocol/commands"}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
264 --reply = reply:tag("feature", {var="jabber:iq:time"}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
265 --reply = reply:tag("feature", {var="jabber:iq:version"}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
266 data_cache.disco_info = reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
267 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
268 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
269 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
270 return reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
271 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
272
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
273 -- XMPP Service Discovery (disco) items callback
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
274 -- When a disco info query comes in, returns the items
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
275 -- information as per XEP-0030
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
276 -- (Nothing much happening here at the moment)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
277 --[[
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
278 function iq_disco_items(stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
279 module:log("info", "Disco items triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
280 local reply = data_cache.disco_items;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
281 if reply == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
282 reply = st.iq({type='result', from=stanza.attr.to or component_host}):query("http://jabber.org/protocol/disco#items")
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
283 :tag("item", {jid='testuser'..'@'..component_host, name='SMS Test Target'}):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
284 data_cache.disco_items = reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
285 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
286 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
287 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
288 return reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
289 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
290 --]]
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
291
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
292 -- XMPP Register callback
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
293 -- The client must register with the gateway. In this case, the gateway is
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
294 -- Clickatell's http api, so we
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
295 function iq_register(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
296 module:log("info", "Register event triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
297 if stanza.attr.type == "get" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
298 local reply = data_cache.registration_form;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
299 if reply == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
300 reply = st.iq({type='result', from=stanza.attr.to or component_host})
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
301 :tag("query", {xmlns="jabber:iq:register"})
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
302 :tag("instructions"):text("Use the enclosed form to register."):up();
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
303 reply:tag("x", {xmlns="jabber:x:data", type='form'});
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
304 reply:tag("title"):text('SMS Gateway Registration: Clickatell'):up();
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
305 reply:tag("instructions"):text("Enter your Clickatell username, password, API ID, and a source number for your text messages in international format (phone field)"):up();
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
306 reply:tag("field", {type='hidden', var='FORM_TYPE'})
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
307 :tag("value"):text('jabber:iq:register'):up():up();
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
308 reply:tag("field", {type='text-single', label='Username', var='username'})
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
309 :tag("required"):up():up();
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
310 reply:tag("field", {type='text-private', label='Password', var='password'})
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
311 :tag("required"):up():up();
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
312 reply:tag("field", {type='text-single', label='API ID', var='api_id'})
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
313 :tag("required"):up():up();
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
314 reply:tag("field", {type='text-single', label='Source Number', var='source_number'})
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
315 :tag("required"):up():up();
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
316 data_cache.registration_form = reply;
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
317 --module:log("info", "Register stanza to go: "..reply:pretty_print());
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
318 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
319 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
320 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
321 origin.send(reply);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
322 elseif stanza.attr.type == "set" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
323 local from = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
324 from.node, from.host, from.resource = jid_split(stanza.attr.from);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
325 local bjid = from.node.."@"..from.host;
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
326 local username, password, api_id, source_number = "", "", "", "";
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
327 local reply;
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
328 for tag in stanza.tags[1].tags[1]:childtags() do
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
329 -- if tag.name == "remove" then
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
330 -- iq_success(origin, stanza);
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
331 -- return true;
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
332 -- end
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
333 if tag.attr.var == "username" then
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
334 username = tag.tags[1][1];
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
335 end
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
336 if tag.attr.var == "password" then
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
337 password = tag.tags[1][1];
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
338 end
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
339 if tag.attr.var == "api_id" then
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
340 api_id = tag.tags[1][1];
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
341 end
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
342 if tag.attr.var == "source_number" then
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
343 source_number = tag.tags[1][1];
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
344 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
345 end
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
346 if username ~= nil and password ~= nil and api_id ~= nil then
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
347 users[bjid] = smsuser:register(bjid);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
348 users[bjid].data.username = username;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
349 users[bjid].data.password = password;
347
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
350 users[bjid].data.api_id = api_id;
cd838419a85d mod_sms_clickatell: moved clickatell API ID and source number settings to component registration
Phil Stewart <phil.stewart@lichp.co.uk>
parents: 346
diff changeset
351 users[bjid].data.source_number = source_number;
346
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
352 users[bjid]:store();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
353 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
354 iq_success(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
355 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
356 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
357 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
358
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
359 -- XMPP Roster callback
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
360 -- When the client requests the roster associated with the gateway, returns
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
361 -- the users accessible via text to the client's roster
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
362 function iq_roster(stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
363 module:log("info", "Roster request triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
364 local from = {}
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
365 from.node, from.host, from.resource = jid_split(stanza.attr.from);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
366 local from_bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
367 if from.node ~= nil and from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
368 from_bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
369 elseif from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
370 from_bjid = from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
371 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
372 local reply = st.iq({type='result', from=stanza.attr.to or component_host}):query("")
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
373 if users[from_bjid].data.roster ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
374 for sms_number, sms_data in pairs(users[from_bjid].data.roster) do
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
375 reply:tag("item", users[from_bjid]:roster_stanza_args(sms_number)):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
376 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
377 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
378 reply.attr.id = stanza.attr.id;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
379 reply.attr.to = stanza.attr.from;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
380 return reply;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
381 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
382
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
383 -- Roster Exchange: iq variant
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
384 -- Sends sms targets to client's roster
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
385 function iq_roster_push(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
386 module:log("info", "Sending Roster iq");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
387 local from = {}
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
388 from.node, from.host, from.resource = jid_split(stanza.attr.from);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
389 local from_bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
390 if from.node ~= nil and from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
391 from_bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
392 elseif from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
393 from_bjid = from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
394 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
395 reply = st.iq({to=stanza.attr.from, type='set'});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
396 reply:tag("query", {xmlns="jabber:iq:roster"});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
397 if users[from_bjid].data.roster ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
398 for sms_number, sms_data in pairs(users[from_bjid].data.roster) do
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
399 reply:tag("item", users[from_bjid]:roster_stanza_args(sms_number)):up();
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
400 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
401 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
402 origin.send(reply);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
403 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
404
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
405 -- XMPP Presence handling
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
406 function presence_stanza_handler(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
407 module:log("info", "Presence handler triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
408 local to = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
409 local from = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
410 local pres = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
411 to.node, to.host, to.resource = jid_split(stanza.attr.to);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
412 from.node, from.host, from.resource = jid_split(stanza.attr.from);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
413 pres.type = stanza.attr.type;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
414 for _, tag in ipairs(stanza.tags) do pres[tag.name] = tag[1]; end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
415 local from_bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
416 if from.node ~= nil and from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
417 from_bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
418 elseif from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
419 from_bjid = from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
420 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
421 local to_bjid = nil
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
422 if to.node ~= nil and to.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
423 to_bjid = to.node.."@"..to.host
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
424 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
425
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
426 if to.node == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
427 -- Component presence
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
428 -- If the client is subscribing, send a 'subscribed' presence
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
429 if pres.type == 'subscribe' then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
430 origin.send(st.presence({to=from_bjid, from=component_host, type='subscribed'}));
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
431 --origin.send(st.presence{to=from_bjid, type='subscribed'});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
432 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
433
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
434 -- The component itself is online, so send component's presence
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
435 origin.send(st.presence({to=from_bjid, from=component_host}));
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
436
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
437 -- Do roster item exchange: send roster items to client
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
438 iq_roster_push(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
439 else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
440 -- SMS user presence
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
441 if pres.type == 'subscribe' then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
442 users[from_bjid]:roster_add(to.node);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
443 origin.send(st.presence({to=from_bjid, from=to_bjid, type='subscribed'}));
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
444 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
445 if pres.type == 'unsubscribe' then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
446 users[from_bjid]:roster_update_subscription(to.node, 'none');
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
447 iq_roster_push(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
448 origin.send(st.presence({to=from_bjid, from=to_bjid, type='unsubscribed'}));
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
449 users[from_bjid]:roster_delete(to.node)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
450 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
451 if users[from_bjid].data.roster[to.node] ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
452 origin.send(st.presence({to=from_bjid, from=to_bjid}));
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
453 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
454 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
455
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
456
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
457 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
458 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
459
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
460 --[[ Not using this ATM
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
461 function confirm_message_delivery(event)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
462 local reply = st.message({id=event.stanza.attr.id, to=event.stanza.attr.from, from=event.stanza.attr.to or component_host}):tag("received", {xmlns = "urn:xmpp:receipts"});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
463 origin.send(reply);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
464 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
465 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
466 --]]
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
467
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
468 -- XMPP Message handler - this is the bit that Actually Does Things (TM)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
469 -- bjid = base JID i.e. without resource identifier
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
470 function message_stanza_handler(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
471 module:log("info", "Message handler triggered");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
472 local to = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
473 local from = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
474 local msg = {};
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
475 to.node, to.host, to.resource = jid_split(stanza.attr.to);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
476 from.node, from.host, from.resource = jid_split(stanza.attr.from);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
477 local bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
478 if from.node ~= nil and from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
479 from_bjid = from.node.."@"..from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
480 elseif from.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
481 from_bjid = from.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
482 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
483 local to_bjid = nil;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
484 if to.node ~= nil and to.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
485 to_bjid = to.node.."@"..to.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
486 elseif to.host ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
487 to_bjid = to.host;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
488 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
489
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
490 -- This bit looks like it confirms message receipts to the client
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
491 for _, tag in ipairs(stanza.tags) do
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
492 msg[tag.name] = tag[1];
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
493 if tag.attr.xmlns == "urn:xmpp:receipts" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
494 confirm_message_delivery({origin=origin, stanza=stanza});
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
495 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
496 -- can handle more xmlns
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
497 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
498
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
499 -- Now parse the message
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
500 if stanza.attr.to == component_host then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
501 -- Messages directly to the component jget echoed
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
502 origin.send(st.message({to=stanza.attr.from, from=component_host, type='chat'}):tag("body"):text(msg.body):up());
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
503 elseif users[from_bjid].data.roster[to.node] ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
504 -- If message contains a body, send message to SMS Test User
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
505 if msg.body ~= nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
506 clickatell_send_sms(users[from_bjid], to.node, msg.body);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
507 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
508 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
509 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
510 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
511 --]]
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
512
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
513 -- Component event handler
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
514 function sms_event_handler(origin, stanza)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
515 module:log("debug", "Received stanza: "..stanza:pretty_print());
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
516 local to_node, to_host, to_resource = jid_split(stanza.attr.to);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
517
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
518 -- Handle component internals (stanzas directed to component host, mainly iq stanzas)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
519 if to_node == nil then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
520 local type = stanza.attr.type;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
521 if type == "error" or type == "result" then return; end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
522 if stanza.name == "presence" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
523 presence_stanza_handler(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
524 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
525 if stanza.name == "iq" and type == "get" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
526 local xmlns = stanza.tags[1].attr.xmlns
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
527 if xmlns == "http://jabber.org/protocol/disco#info" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
528 origin.send(iq_disco_info(stanza));
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
529 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
530 --[[
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
531 elseif xmlns == "http://jabber.org/protocol/disco#items" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
532 origin.send(iq_disco_items(stanza));
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
533 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
534 --]]
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
535 elseif xmlns == "jabber:iq:register" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
536 iq_register(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
537 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
538 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
539 elseif stanza.name == "iq" and type == "set" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
540 local xmlns = stanza.tags[1].attr.xmlns
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
541 if xmlns == "jabber:iq:roster" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
542 origin.send(iq_roster(stanza));
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
543 elseif xmlns == "jabber:iq:register" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
544 iq_register(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
545 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
546 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
547 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
548 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
549
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
550 -- Handle presence (both component and SMS users)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
551 if stanza.name == "presence" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
552 presence_stanza_handler(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
553 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
554
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
555 -- Handle messages (both component and SMS users)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
556 if stanza.name == "message" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
557 message_stanza_handler(origin, stanza);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
558 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
559 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
560
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
561 -- Prosody hooks: links our handler functions with the relevant events
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
562 --module:hook("presence/host", presence_stanza_handler);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
563 --module:hook("message/host", message_stanza_handler);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
564
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
565 --module:hook("iq/host/jabber:iq:register:query", iq_register);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
566 module:add_feature("http://jabber.org/protocol/disco#info");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
567 module:add_feature("http://jabber.org/protocol/disco#items");
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
568 --module:hook("iq/self/http://jabber.org/protocol/disco#info:query", iq_disco_info);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
569 --module:hook("iq/host/http://jabber.org/protocol/disco#items:query", iq_disco_items);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
570 --module:hook("account-disco-info", iq_disco_info);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
571 --module:hook("account-disco-items", iq_disco_items);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
572 --[[
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
573 module:hook("iq/host", function(data)
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
574 -- IQ to a local host recieved
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
575 local origin, stanza = data.origin, data.stanza;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
576 if stanza.attr.type == "get" or stanza.attr.type == "set" then
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
577 return module:fire_event("iq/host/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
578 else
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
579 module:fire_event("iq/host/"..stanza.attr.id, data);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
580 return true;
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
581 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
582 end);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
583 --]]
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
584
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
585 -- Component registration hooks: these hook in with the Prosody component
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
586 -- manager
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
587 module.unload = function()
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
588 componentmanager.deregister_component(component_host);
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
589 end
2e6a74842c00 mod_sms_clickatell: initial import
Phil Stewart <phil.stewart@lichp.co.uk>
parents:
diff changeset
590 component = componentmanager.register_component(component_host, sms_event_handler);