What steps will reproduce the problem?
1. A sends subscription request to B
2. B acknowledges subscription request and in turn send subscription request to A
3. A accepts subscription request
What is the expected output? What do you see instead?
I would expect both A and B to receive each others PEP events upon subscribing. But Only A receives B's PEP events.
When B logs out and in again it will receive A's events as well.
What version of the product are you using? On what operating system?
I actually tested this on jabber.de which runs 0.9 on Linux but I'm fairly certain I've seen this in trunk as well.
Please provide any additional information below.
I have a log file from Conversations that somewhat documents the process. (The IQ roster pushes are in it by chance. null is the server and only the IQ child elements are being logged)
05-15 18:27:56.787 12665 23915 D conversations: inputnice2@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="2"><item subscription="none" xmlns="jabber:iq:roster" jid="inputnice@jabber.de"/></query>
05-15 18:27:56.839 12665 23915 D conversations: inputnice2@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="3"><item subscription="from" xmlns="jabber:iq:roster" jid="inputnice@jabber.de"/></query>
05-15 18:27:56.845 12665 23823 D conversations: inputnice@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="3"><item subscription="to" xmlns="jabber:iq:roster" jid="inputnice2@jabber.de"/></query>
05-15 18:27:56.850 12665 23915 D conversations: inputnice2@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="4"><item subscription="from" xmlns="jabber:iq:roster" jid="inputnice@jabber.de" ask="subscribe"/></query>
05-15 18:27:56.956 12665 23823 D conversations: inputnice@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="5"><item subscription="both" xmlns="jabber:iq:roster" jid="inputnice2@jabber.de"/></query>
05-15 18:27:56.958 12665 23915 D conversations: inputnice2@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="5"><item subscription="both" xmlns="jabber:iq:roster" jid="inputnice@jabber.de"/></query>
05-15 18:27:56.974 12665 23823 D conversations: AxolotlService (inputnice@jabber.de): Received PEP device list update from inputnice2@jabber.de, processing...
Zash
on
Confirmed (on trunk, but mod_pep hasn't changed that much).
I believe this is because 1) PEP requires mutual presence and 2) presence is exchanged in one direction in the "middle" of the process for creating a mutual subscription and mod_pep doesn't act on this because they are not subscribed in the other direction.
Changes
tags Status-Accepted Milestone-0.9
owner Zash
Zash
on
This patch appeared to fix the issue:
diff -r bf43a08e5a74 plugins/mod_presence.lua
--- a/plugins/mod_presence.lua Sun May 15 16:55:19 2016 +0200
+++ b/plugins/mod_presence.lua Sat May 21 18:30:06 2016 +0200
@@ -178,6 +178,7 @@ function handle_outbound_presence_subscr
end
core_post_stanza(origin, stanza);
send_presence_of_available_resources(node, host, to_bare, origin);
+ core_post_stanza(origin, st.presence({ type = "probe", from = from_bare, to = to_bare }));
elseif stanza.attr.type == "unsubscribed" then
-- 1. send unavailable
-- 2. route stanza
What steps will reproduce the problem? 1. A sends subscription request to B 2. B acknowledges subscription request and in turn send subscription request to A 3. A accepts subscription request What is the expected output? What do you see instead? I would expect both A and B to receive each others PEP events upon subscribing. But Only A receives B's PEP events. When B logs out and in again it will receive A's events as well. What version of the product are you using? On what operating system? I actually tested this on jabber.de which runs 0.9 on Linux but I'm fairly certain I've seen this in trunk as well. Please provide any additional information below. I have a log file from Conversations that somewhat documents the process. (The IQ roster pushes are in it by chance. null is the server and only the IQ child elements are being logged) 05-15 18:27:56.787 12665 23915 D conversations: inputnice2@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="2"><item subscription="none" xmlns="jabber:iq:roster" jid="inputnice@jabber.de"/></query> 05-15 18:27:56.839 12665 23915 D conversations: inputnice2@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="3"><item subscription="from" xmlns="jabber:iq:roster" jid="inputnice@jabber.de"/></query> 05-15 18:27:56.845 12665 23823 D conversations: inputnice@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="3"><item subscription="to" xmlns="jabber:iq:roster" jid="inputnice2@jabber.de"/></query> 05-15 18:27:56.850 12665 23915 D conversations: inputnice2@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="4"><item subscription="from" xmlns="jabber:iq:roster" jid="inputnice@jabber.de" ask="subscribe"/></query> 05-15 18:27:56.956 12665 23823 D conversations: inputnice@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="5"><item subscription="both" xmlns="jabber:iq:roster" jid="inputnice2@jabber.de"/></query> 05-15 18:27:56.958 12665 23915 D conversations: inputnice2@jabber.de: IQ request from null <query xmlns="jabber:iq:roster" ver="5"><item subscription="both" xmlns="jabber:iq:roster" jid="inputnice@jabber.de"/></query> 05-15 18:27:56.974 12665 23823 D conversations: AxolotlService (inputnice@jabber.de): Received PEP device list update from inputnice2@jabber.de, processing...
Confirmed (on trunk, but mod_pep hasn't changed that much). I believe this is because 1) PEP requires mutual presence and 2) presence is exchanged in one direction in the "middle" of the process for creating a mutual subscription and mod_pep doesn't act on this because they are not subscribed in the other direction.
ChangesThis patch appeared to fix the issue: diff -r bf43a08e5a74 plugins/mod_presence.lua --- a/plugins/mod_presence.lua Sun May 15 16:55:19 2016 +0200 +++ b/plugins/mod_presence.lua Sat May 21 18:30:06 2016 +0200 @@ -178,6 +178,7 @@ function handle_outbound_presence_subscr end core_post_stanza(origin, stanza); send_presence_of_available_resources(node, host, to_bare, origin); + core_post_stanza(origin, st.presence({ type = "probe", from = from_bare, to = to_bare })); elseif stanza.attr.type == "unsubscribed" then -- 1. send unavailable -- 2. route stanza
ChangesCommitted as https://hg.prosody.im/0.9/rev/ad0b15f253ee
ChangesThis somehow breaks PEP (automatic) feature subscriptions. If I revert the patch, they are working again.
How can I re-open the issue?
That commit broke subscribes if the stanzas are sent in a certain order, filed as #899