Software /
code /
prosody
Comparison
core/moduleapi.lua @ 11822:bdabb0425d77
core.moduleapi: Enable full JID origin queries with module:send_iq()
Since we don't currently have hooks that includes type and id here, we
need to check those attributes in the handlers.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 24 Sep 2021 20:17:31 +0200 |
parent | 11821:a9ad287c3388 |
child | 11823:36a7a3137d41 |
comparison
equal
deleted
inserted
replaced
11821:a9ad287c3388 | 11822:bdabb0425d77 |
---|---|
18 local errors = require "util.error"; | 18 local errors = require "util.error"; |
19 local promise = require "util.promise"; | 19 local promise = require "util.promise"; |
20 local time_now = require "util.time".now; | 20 local time_now = require "util.time".now; |
21 local format = require "util.format".format; | 21 local format = require "util.format".format; |
22 local jid_node = require "util.jid".node; | 22 local jid_node = require "util.jid".node; |
23 local jid_resource = require "util.jid".resource; | |
23 | 24 |
24 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat; | 25 local t_insert, t_remove, t_concat = table.insert, table.remove, table.concat; |
25 local error, setmetatable, type = error, setmetatable, type; | 26 local error, setmetatable, type = error, setmetatable, type; |
26 local ipairs, pairs, select = ipairs, pairs, select; | 27 local ipairs, pairs, select = ipairs, pairs, select; |
27 local tonumber, tostring = tonumber, tostring; | 28 local tonumber, tostring = tonumber, tostring; |
380 end | 381 end |
381 | 382 |
382 local event_type; | 383 local event_type; |
383 if not jid_node(stanza.attr.from) then | 384 if not jid_node(stanza.attr.from) then |
384 event_type = "host"; | 385 event_type = "host"; |
386 elseif jid_resource(stanza.attr.from) then | |
387 event_type = "full"; | |
385 else -- assume bare since we can't hook full jids | 388 else -- assume bare since we can't hook full jids |
386 event_type = "bare"; | 389 event_type = "bare"; |
387 end | 390 end |
388 local result_event = "iq-result/"..event_type.."/"..stanza.attr.id; | 391 local result_event = "iq-result/"..event_type.."/"..stanza.attr.id; |
389 local error_event = "iq-error/"..event_type.."/"..stanza.attr.id; | 392 local error_event = "iq-error/"..event_type.."/"..stanza.attr.id; |
390 local cache_key = event_type.."/"..stanza.attr.id; | 393 local cache_key = event_type.."/"..stanza.attr.id; |
394 if event_type == "full" then | |
395 result_event = "iq/" .. event_type; | |
396 error_event = "iq/" .. event_type; | |
397 end | |
391 | 398 |
392 local p = promise.new(function (resolve, reject) | 399 local p = promise.new(function (resolve, reject) |
393 local function result_handler(event) | 400 local function result_handler(event) |
394 if event.stanza.attr.from == stanza.attr.to then | 401 local response = event.stanza; |
402 if response.attr.type == "result" and response.attr.from == stanza.attr.to and response.attr.id == stanza.attr.id then | |
395 resolve(event); | 403 resolve(event); |
396 return true; | 404 return true; |
397 end | 405 end |
398 end | 406 end |
399 | 407 |
400 local function error_handler(event) | 408 local function error_handler(event) |
401 if event.stanza.attr.from == stanza.attr.to then | 409 local response = event.stanza; |
410 if response.attr.type == "error" and response.attr.from == stanza.attr.to and response.attr.id == stanza.attr.id then | |
402 reject(errors.from_stanza(event.stanza, event)); | 411 reject(errors.from_stanza(event.stanza, event)); |
403 return true; | 412 return true; |
404 end | 413 end |
405 end | 414 end |
406 | 415 |