Diff

mod_cloud_notify/business_rules.markdown @ 2609:6ab46ff685d0

mod_cloud_notify: Respect Daniel's business rules and remove endpoints on error Daniel's business rules can be found here: https://mail.jabber.org/pipermail/standards/2016-February/030925.html All implementation changes are documented in depth in the file business_rules.markdown
author tmolitor <thilo@eightysoft.de>
date Sat, 11 Mar 2017 01:42:45 +0100
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_cloud_notify/business_rules.markdown	Sat Mar 11 01:42:45 2017 +0100
@@ -0,0 +1,72 @@
+XEP-0357 Business rules implementation in prosody
+=================================================
+
+Daniel proposed some business rules for push notifications [^1]
+This document describes the various implementation details involved in
+implementing these rules in prosody.
+
+Point 3 of Daniel's mail is implemented by setting two attributes
+on the session table when a client enables push for a session:
+
+- push_identifier: this is push_jid .. "<" .. (push_node or "")
+  (this value is used as key of the user_push_services table)
+- push_settings: this is a reference to the user_push_services[push_identifier]
+
+
+Point 4 of Daniel's mail contains the actual business rules
+-----------------------------------------------------------
+
+**a)**  
+CSI is honoured in this scenario because messages hold back by csi don't even
+reach the smacks module. mod_smacks has 3 events:
+
+- smacks-ack-delayed: This event is triggered when the client doesn't respond to
+   a smacks <r> in a configurable amount of time (default: 60 seconds).
+   Mod_cloud_notify reacts on this event and sends out push notifications
+   to the push service registered for this session in point 3 (see above) for all
+   stanzas in the smacks queue (the queue is given in the event).
+
+- smacks-hibernation-start: This event is triggered when the smacks session
+  is put in hibernation state. The event contains the smacks queue, too.
+  Mod_cloud_notify uses this event to send push notifications for all
+  stanzas not already pushed and installs a "stanzas/out"-filter to
+  react on new stanzas coming in while the session is hibernated.
+  The push endpoint of the hibernated session is then also notified
+  for every new stanza.
+- smacks-hibernation-end: This event is triggered, when the smacks hibernation
+  is stopped (the smacks session is resumed) and used by Mod_cloud_notify
+  to remove the "stanzas/out"-filter.
+
+**b)**  
+Mod_mam already provides an event named "archive-message-added" which is
+triggered every time a stanza is saved into the mam store.
+Mod_cloud_notify uses this event to send out push notifications to all
+push services registered for the user the stanza is for, but *only*
+to those push services not having an active (or smacks hibernated) session.
+Only those stanzas are considered that contain the "for_user" event attribute
+of mod_mam as the user part of the jid.
+This is done to ensure that mam archiving rules are honoured.
+
+**c)**  
+The "message/offline/handle"-hook is used to send out push notifications to all
+registered push services belonging to the user the offline stanza is for.
+This was already implemented in the first version of mod_cloud_notify.
+
+
+Some statements to related technologies/XEPs/modules
+----------------------------------------------------
+
+- carbons: These are handled as usual and don't interfere with these business rules
+  at all. Smacks events are generated for carbon copies if needed and mod_cloud_notify
+  uses them to wake up the device in question if needed, as normal stanzas would do, too.
+
+- csi: Csi is honoured also, because every stanza hold back by mod_pump or other csi
+  modules is never seen by the smacks module, thus not added to its queue and not
+  forwarded to mod_cloud_notify by the smacks events.
+  Mod_cloud_notify does only notify devices having no active or smacks hibernated session
+  of new mam stored stanzas, so stanzas filtered by csi don't get to mod_cloud_notify
+  this way neither.
+
+- other technologies: There shouldn't be any issues with other technologies imho.
+
+[^1]: https://mail.jabber.org/pipermail/standards/2016-February/030925.html