Mercurial > prosody-modules
comparison mod_delegation/mod_delegation.lua @ 3317:36a9170352b5
mod_delegation: Update to generate own iq ids
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 13 Sep 2018 16:28:10 +0100 |
parents | 7504f765e767 |
children | c5e8042b174c |
comparison
equal
deleted
inserted
replaced
3316:9d8098f4b652 | 3317:36a9170352b5 |
---|---|
10 -- TODO: client mode | 10 -- TODO: client mode |
11 | 11 |
12 local jid = require("util.jid") | 12 local jid = require("util.jid") |
13 local st = require("util.stanza") | 13 local st = require("util.stanza") |
14 local set = require("util.set") | 14 local set = require("util.set") |
15 | |
16 local new_id = require("util.id").short; | |
15 | 17 |
16 local delegation_session = module:shared("/*/delegation/session") | 18 local delegation_session = module:shared("/*/delegation/session") |
17 | 19 |
18 -- FIXME: temporarily needed for disco_items_hook, to be removed when clean implementation is done | 20 -- FIXME: temporarily needed for disco_items_hook, to be removed when clean implementation is done |
19 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; | 21 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed; |
250 end | 252 end |
251 | 253 |
252 local function forward_iq(stanza, ns_data) | 254 local function forward_iq(stanza, ns_data) |
253 local to_jid = ns_data.connected | 255 local to_jid = ns_data.connected |
254 stanza.attr.xmlns = 'jabber:client' | 256 stanza.attr.xmlns = 'jabber:client' |
255 local iq_stanza = st.iq({ from=module.host, to=to_jid, type="set" }) | 257 local iq_id = new_id(); |
258 local iq_stanza = st.iq({ from=module.host, to=to_jid, type="set", id = iq_id }) | |
256 :tag("delegation", { xmlns=_DELEGATION_NS }) | 259 :tag("delegation", { xmlns=_DELEGATION_NS }) |
257 :tag("forwarded", { xmlns=_FORWARDED_NS }) | 260 :tag("forwarded", { xmlns=_FORWARDED_NS }) |
258 :add_child(stanza) | 261 :add_child(stanza) |
259 local iq_id = iq_stanza.attr.id | |
260 -- we save the original stanza to check the managing entity result | 262 -- we save the original stanza to check the managing entity result |
261 if not stanza_cache[to_jid] then stanza_cache[to_jid] = {} end | 263 if not stanza_cache[to_jid] then stanza_cache[to_jid] = {} end |
262 stanza_cache[to_jid][iq_id] = stanza | 264 stanza_cache[to_jid][iq_id] = stanza |
263 module:hook("iq-result/host/"..iq_id, managing_ent_result) | 265 module:hook("iq-result/host/"..iq_id, managing_ent_result) |
264 module:hook("iq-error/host/"..iq_id, managing_ent_error) | 266 module:hook("iq-error/host/"..iq_id, managing_ent_error) |
473 end | 475 end |
474 | 476 |
475 for _, prefix in ipairs(_PREFIXES) do | 477 for _, prefix in ipairs(_PREFIXES) do |
476 local node = prefix..namespace | 478 local node = prefix..namespace |
477 | 479 |
478 local iq = st.iq({from=module.host, to=entity_jid, type='get'}) | 480 local iq_id = new_id(); |
481 local iq = st.iq({from=module.host, to=entity_jid, type='get', id = iq_id }) | |
479 :tag('query', {xmlns=_DISCO_INFO_NS, node=node}) | 482 :tag('query', {xmlns=_DISCO_INFO_NS, node=node}) |
480 | |
481 local iq_id = iq.attr.id | |
482 | 483 |
483 module:hook("iq-result/host/"..iq_id, disco_result) | 484 module:hook("iq-result/host/"..iq_id, disco_result) |
484 module:hook("iq-error/host/"..iq_id, disco_error) | 485 module:hook("iq-error/host/"..iq_id, disco_error) |
485 module:send(iq) | 486 module:send(iq) |
486 end | 487 end |