Comparison

client.lua @ 28:afe9e6d6c87a

verse.client: New stanza dispatcher to fire events based on the name (and in the case of iq, xmlns) of the stanza
author Matthew Wild <mwild1@gmail.com>
date Wed, 09 Dec 2009 20:55:34 +0000
parent 26:6c5fab6c11cf
child 30:9c96318913f7
comparison
equal deleted inserted replaced
27:a4a6a33a34c1 28:afe9e6d6c87a
31 if stanza.attr.xmlns == xmlns_stream then 31 if stanza.attr.xmlns == xmlns_stream then
32 return stream:event("stream-"..stanza.name, stanza); 32 return stream:event("stream-"..stanza.name, stanza);
33 elseif stanza.attr.xmlns then 33 elseif stanza.attr.xmlns then
34 return stream:event("stream/"..stanza.attr.xmlns, stanza); 34 return stream:event("stream/"..stanza.attr.xmlns, stanza);
35 end 35 end
36
37 stream:hook("stanza", function (stanza)
38 if stanza.attr.xmlns == nil or stanza.attr.xmlns == "jabber:client" then
39 if stanza.name == "iq" and (stanza.attr.type == "get" or stanza.attr.type == "set") then
40 local xmlns = stanza.tags[1] and stanza.tags[1].attr.xmlns;
41 if xmlns then
42 ret = stream:event("iq/"..xmlns, stanza);
43 if not ret then
44 ret = stream:event("iq", stanza);
45 end
46 end
47 else
48 ret = stream:event(stanza.name, stanza);
49 end
50 end
51 return ret;
52 end, -1);
53
36 return stream:event("stanza", stanza); 54 return stream:event("stanza", stanza);
37 end 55 end
38 56
39 local function reset_stream(stream) 57 local function reset_stream(stream)
40 -- Reset stream 58 -- Reset stream