Mercurial > prosody-modules
comparison mod_mam/mod_mam.lua @ 799:53917d98d411
mod_mam: Change storage format to store bare JID + resource.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 16 Aug 2012 21:31:46 +0200 |
| parents | 2b8ceb4d1a73 |
| children | 966993356d2b |
comparison
equal
deleted
inserted
replaced
| 798:2b8ceb4d1a73 | 799:53917d98d411 |
|---|---|
| 133 return true | 133 return true |
| 134 end | 134 end |
| 135 qstart, qend = vstart, vend; | 135 qstart, qend = vstart, vend; |
| 136 end | 136 end |
| 137 | 137 |
| 138 local qres; | |
| 138 if qwith then -- Validate the 'with' jid | 139 if qwith then -- Validate the 'with' jid |
| 139 local pwith = qwith and jid_prep(qwith); | 140 local pwith = qwith and jid_prep(qwith); |
| 140 if pwith and not qwith then -- it failed prepping | 141 if pwith and not qwith then -- it failed prepping |
| 141 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid JID")) | 142 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid JID")) |
| 142 return true | 143 return true |
| 143 end | 144 end |
| 144 qwith = pwith; | 145 local _, _, resource = jid_split(qwith); |
| 146 qwith = jid_bare(pwith); | |
| 147 qres = resource; | |
| 145 end | 148 end |
| 146 | 149 |
| 147 -- Load all the data! | 150 -- Load all the data! |
| 148 local data, err = dm_list_load(origin.username, origin.host, archive_store); | 151 local data, err = dm_list_load(origin.username, origin.host, archive_store); |
| 149 if not data then | 152 if not data then |
| 164 local start = qset and qset.index or 1; | 167 local start = qset and qset.index or 1; |
| 165 | 168 |
| 166 module:log("debug", "Loaded %d items, about to filter", #data); | 169 module:log("debug", "Loaded %d items, about to filter", #data); |
| 167 for i=start,#data do | 170 for i=start,#data do |
| 168 local item = data[i]; | 171 local item = data[i]; |
| 169 local when, with, with_bare = item.when, item.with, item.with_bare; | 172 local when, with, resource = item.when, item.with, item.resource; |
| 170 local id = item.id; | 173 local id = item.id; |
| 171 --module:log("debug", "id is %s", id); | 174 --module:log("debug", "id is %s", id); |
| 172 | 175 |
| 173 -- RSM pre-send-checking | 176 -- RSM pre-send-checking |
| 174 if qset then | 177 if qset then |
| 179 end | 182 end |
| 180 end | 183 end |
| 181 | 184 |
| 182 --module:log("debug", "message with %s at %s", with, when or "???"); | 185 --module:log("debug", "message with %s at %s", with, when or "???"); |
| 183 -- Apply query filter | 186 -- Apply query filter |
| 184 if (not qwith or ((qwith == with) or (qwith == with_bare))) | 187 if (not qwith or ((qwith == with) and (not qres or qres == resource))) |
| 185 and (not qstart or when >= qstart) | 188 and (not qstart or when >= qstart) |
| 186 and (not qend or when <= qend) | 189 and (not qend or when <= qend) |
| 187 and (not qset or qset_matches) then | 190 and (not qset or qset_matches) then |
| 188 local fwd_st = st.message{ to = origin.full_jid } | 191 local fwd_st = st.message{ to = origin.full_jid } |
| 189 :tag("result", { xmlns = xmlns_mam, queryid = qid, id = id }):up() | 192 :tag("result", { xmlns = xmlns_mam, queryid = qid, id = id }):up() |
| 279 end | 282 end |
| 280 | 283 |
| 281 local store_user, store_host = jid_split(c2s and orig_from or orig_to); | 284 local store_user, store_host = jid_split(c2s and orig_from or orig_to); |
| 282 local target_jid = c2s and orig_to or orig_from; | 285 local target_jid = c2s and orig_to or orig_from; |
| 283 local target_bare = jid_bare(target_jid); | 286 local target_bare = jid_bare(target_jid); |
| 287 local _, _, target_resource = jid_split(target_jid); | |
| 284 | 288 |
| 285 if shall_store(store_user, target_bare) then | 289 if shall_store(store_user, target_bare) then |
| 286 module:log("debug", "Archiving stanza: %s", stanza:top_tag()); | 290 module:log("debug", "Archiving stanza: %s", stanza:top_tag()); |
| 287 | 291 |
| 288 local id = uuid(); | 292 local id = uuid(); |
| 290 -- And stash it | 294 -- And stash it |
| 291 local ok, err = dm_list_append(store_user, store_host, archive_store, { | 295 local ok, err = dm_list_append(store_user, store_host, archive_store, { |
| 292 -- WARNING This format may change. | 296 -- WARNING This format may change. |
| 293 id = id, | 297 id = id, |
| 294 when = when, | 298 when = when, |
| 295 with = target_jid, | 299 with = target_bare, |
| 296 with_bare = target_bare, -- Optimization, to avoid loads of jid_bare() calls when filtering. | 300 resource = target_resource, |
| 297 stanza = st.preserialize(stanza) | 301 stanza = st.preserialize(stanza) |
| 298 }); | 302 }); |
| 299 --[[ This was dropped from the spec | 303 --[[ This was dropped from the spec |
| 300 if ok then | 304 if ok then |
| 301 stanza:tag("archived", { xmlns = xmlns_mam, by = host, id = id }):up(); | 305 stanza:tag("archived", { xmlns = xmlns_mam, by = host, id = id }):up(); |
