Software /
code /
prosody
File
plugins/mod_private.lua @ 11740:b92f2abe0bda
mod_s2s: Fire 's2s-ondrain' event, mirroring mod_c2s
Signals that any pending outgoing stanzas that were in the write buffer
have at least been sent off to the Kernel and maybe even sent out over
the network.
See 7a703af90c9c for mod_c2s commit
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 16 Aug 2021 11:37:51 +0200 |
parent | 9228:e2e2aa76ea31 |
child | 12977:74b9e05af71e |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- local st = require "util.stanza" local private_storage = module:open_store("private", "map"); module:add_feature("jabber:iq:private"); module:hook("iq/self/jabber:iq:private:query", function(event) local origin, stanza = event.origin, event.stanza; local query = stanza.tags[1]; if #query.tags ~= 1 then origin.send(st.error_reply(stanza, "modify", "bad-format")); return true; end local tag = query.tags[1]; local key = tag.name..":"..tag.attr.xmlns; if stanza.attr.type == "get" then local data, err = private_storage:get(origin.username, key); if data then origin.send(st.reply(stanza):query("jabber:iq:private"):add_child(st.deserialize(data))); elseif err then origin.send(st.error_reply(stanza, "wait", "internal-server-error", err)); else origin.send(st.reply(stanza):add_child(query)); end return true; else -- stanza.attr.type == "set" local data; if #tag ~= 0 then data = st.preserialize(tag); end -- TODO delete datastore if empty local ok, err = private_storage:set(origin.username, key, data); if not ok then origin.send(st.error_reply(stanza, "wait", "internal-server-error", err)); return true; end origin.send(st.reply(stanza)); return true; end end);