Comparison

plugins/mod_pep.lua @ 3132:4d2251242ac1

mod_pep: Corrected and optimized handling of non-available presence stanzas.
author Waqas Hussain <waqas20@gmail.com>
date Wed, 02 Jun 2010 01:54:17 +0500
parent 3130:80e630e60f06
child 3290:1eec2bd19bf7
comparison
equal deleted inserted replaced
3131:5c116a10ff0b 3132:4d2251242ac1
115 115
116 module:hook("presence/bare", function(event) 116 module:hook("presence/bare", function(event)
117 -- inbound presence to bare JID recieved 117 -- inbound presence to bare JID recieved
118 local origin, stanza = event.origin, event.stanza; 118 local origin, stanza = event.origin, event.stanza;
119 local user = stanza.attr.to or (origin.username..'@'..origin.host); 119 local user = stanza.attr.to or (origin.username..'@'..origin.host);
120 120 local t = stanza.attr.type;
121 if not stanza.attr.to or subscription_presence(user, stanza.attr.from) then 121
122 local recipient = stanza.attr.from; 122 if not t then -- available presence
123 local current = recipients[user] and recipients[user][recipient]; 123 if not stanza.attr.to or subscription_presence(user, stanza.attr.from) then
124 local hash = get_caps_hash_from_presence(stanza, current); 124 local recipient = stanza.attr.from;
125 if current == hash then return; end 125 local current = recipients[user] and recipients[user][recipient];
126 if not hash then 126 local hash = get_caps_hash_from_presence(stanza, current);
127 if recipients[user] then recipients[user][recipient] = nil; end 127 if current == hash then return; end
128 else 128 if not hash then
129 recipients[user] = recipients[user] or {}; 129 if recipients[user] then recipients[user][recipient] = nil; end
130 if hash_map[hash] then
131 recipients[user][recipient] = hash_map[hash];
132 publish_all(user, recipient, origin);
133 else 130 else
134 recipients[user][recipient] = hash; 131 recipients[user] = recipients[user] or {};
135 origin.send( 132 if hash_map[hash] then
136 st.stanza("iq", {from=stanza.attr.to, to=stanza.attr.from, id="disco", type="get"}) 133 recipients[user][recipient] = hash_map[hash];
137 :query("http://jabber.org/protocol/disco#info") 134 publish_all(user, recipient, origin);
138 ); 135 else
139 end 136 recipients[user][recipient] = hash;
140 end 137 origin.send(
138 st.stanza("iq", {from=stanza.attr.to, to=stanza.attr.from, id="disco", type="get"})
139 :query("http://jabber.org/protocol/disco#info")
140 );
141 end
142 end
143 end
144 elseif t == "unavailable" then
145 if recipients[user] then recipients[user][stanza.attr.from] = nil; end
141 end 146 end
142 end, 10); 147 end, 10);
143 148
144 module:hook("iq/bare/http://jabber.org/protocol/pubsub:pubsub", function(event) 149 module:hook("iq/bare/http://jabber.org/protocol/pubsub:pubsub", function(event)
145 local session, stanza = event.origin, event.stanza; 150 local session, stanza = event.origin, event.stanza;