Comparison

core/modulemanager.lua @ 590:54afe37cccbf

Combined and merged similar code
author Waqas Hussain <waqas20@gmail.com>
date Sun, 07 Dec 2008 03:10:47 +0500
parent 589:d564f94d5727
child 591:980ded4c60ef
comparison
equal deleted inserted replaced
589:d564f94d5727 590:54afe37cccbf
145 -- Returns the host that the current module is serving 145 -- Returns the host that the current module is serving
146 function api:get_host() 146 function api:get_host()
147 return self.host; 147 return self.host;
148 end 148 end
149 149
150 150 local function _add_handler(module, origin_type, tag, xmlns, handler)
151 local function _add_iq_handler(module, origin_type, xmlns, handler) 151 local handlers = m_stanza_handlers:get(module.host, origin_type, tag, xmlns);
152 local handlers = m_stanza_handlers:get(module.host, origin_type, "iq", xmlns); 152 local msg = (tag == "iq") and "namespace" or "payload namespace";
153 if not handlers then 153 if not handlers then
154 m_stanza_handlers:add(module.host, origin_type, "iq", xmlns, handler); 154 m_stanza_handlers:add(module.host, origin_type, tag, xmlns, handler);
155 handler_info[handler] = module; 155 handler_info[handler] = module;
156 module:log("debug", "I now handle tag 'iq' [%s] with payload namespace '%s'", origin_type, xmlns); 156 module:log("debug", "I now handle tag '%s' [%s] with %s '%s'", tag, origin_type, msg, xmlns);
157 else 157 else
158 module:log("warn", "I wanted to handle tag 'iq' [%s] with payload namespace '%s' but mod_%s already handles that", origin_type, xmlns, handler_info[handlers[1]].name); 158 module:log("warn", "I wanted to handle tag '%s' [%s] with %s '%s' but mod_%s already handles that", tag, origin_type, msg, xmlns, handler_info[handlers[1]].module.name);
159 end 159 end
160 end 160 end
161 161
162 function api:add_iq_handler(origin_type, xmlns, handler) 162 function api:add_handler(origin_type, tag, xmlns, handler)
163 if not (origin_type and handler and xmlns) then return false; end 163 if not (origin_type and tag and xmlns and handler) then return false; end
164 if type(origin_type) == "table" then 164 if type(origin_type) == "table" then
165 for _, origin_type in ipairs(origin_type) do 165 for _, origin_type in ipairs(origin_type) do
166 _add_iq_handler(self, origin_type, xmlns, handler); 166 _add_handler(self, origin_type, tag, xmlns, handler);
167 end 167 end
168 return; 168 else
169 _add_handler(self, origin_type, tag, xmlns, handler);
169 end 170 end
170 _add_iq_handler(self, origin_type, xmlns, handler); 171 end
172 function api:add_iq_handler(origin_type, xmlns, handler)
173 self:add_handler(origin_type, "iq", xmlns, handler);
171 end 174 end
172 175
173 function api:add_feature(xmlns) 176 function api:add_feature(xmlns)
174 addDiscoInfoHandler(self.host, function(reply, to, from, node) 177 addDiscoInfoHandler(self.host, function(reply, to, from, node)
175 if #node == 0 then 178 if #node == 0 then
179 end); 182 end);
180 end 183 end
181 184
182 function api:add_event_hook (...) return eventmanager.add_event_hook(...); end 185 function api:add_event_hook (...) return eventmanager.add_event_hook(...); end
183 186
184 local function _add_handler(module, origin_type, tag, xmlns, handler)
185 local handlers = m_stanza_handlers:get(module.host, origin_type, tag, xmlns);
186 if not handlers then
187 m_stanza_handlers:add(module.host, origin_type, tag, xmlns, handler);
188 handler_info[handler] = module;
189 module:log("debug", "I now handle tag '%s' [%s] with xmlns '%s'", tag, origin_type, xmlns);
190 else
191 module:log("warning", "I wanted to handle tag '%s' [%s] but mod_%s already handles that", tag, origin_type, handler_info[handlers[1]].module.name);
192 end
193 end
194
195 function api:add_handler(origin_type, tag, xmlns, handler)
196 if not (origin_type and tag and xmlns and handler) then return false; end
197 if type(origin_type) == "table" then
198 for _, origin_type in ipairs(origin_type) do
199 _add_handler(self, origin_type, tag, xmlns, handler);
200 end
201 return;
202 end
203 _add_handler(self, origin_type, tag, xmlns, handler);
204 end
205
206 -------------------------------------------------------------------- 187 --------------------------------------------------------------------
207 188
208 return _M; 189 return _M;