Software /
code /
prosody-modules
File
mod_roster_allinall/mod_roster_allinall.lua @ 4629:0e60ce83205c
mod_s2s_keepalive: Ignore errors from the local server
If a stanza can't be delivered and instead an bounce is generated, the
origin of the error, when different from the stanza 'from' should be
indicated in the 'by' attribute of the <error>, which we look for here
so this doesn't count as a successful ping.
An error that does come from the remote means we have connectivity, but
probably no XEP-0199 handling. This is fine. We care about connectivity,
not protocol.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 21 Jul 2021 15:57:13 +0200 |
parent | 1798:3ae8c81a348b |
line wrap: on
line source
local rostermanager = require"core.rostermanager"; local jid_join = require"util.jid".join; local host = module.host; local sessions = prosody.hosts[host].sessions; -- Make a *one-way* subscription. User will see when contact is online, -- contact will not see when user is online. local function subscribe(user, contact) local user_jid, contact_jid = jid_join(user, host), jid_join(contact, host); -- Update user's roster to say subscription request is pending... rostermanager.set_contact_pending_out(user, host, contact_jid); -- Update contact's roster to say subscription request is pending... rostermanager.set_contact_pending_in(contact, host, user_jid); -- Update contact's roster to say subscription request approved... rostermanager.subscribed(contact, host, user_jid); -- Update user's roster to say subscription request approved... rostermanager.process_inbound_subscription_approval(user, host, contact_jid); -- Push updates to both rosters rostermanager.roster_push(user, host, contact_jid); rostermanager.roster_push(contact, host, user_jid); end module:hook("resource-bind", function(event) local session = event.session; local user = session.username; local user_jid = jid_join(user, host); for contact in pairs(sessions) do if contact ~= user then local contact_jid = jid_join(contact, host); if not rostermanager.is_contact_subscribed(user, host, contact_jid) then subscribe(contact, user); end if not rostermanager.is_contact_subscribed(contact, host, user_jid) then subscribe(user, contact); end end end end);