mod_smacks XEP-0198: Stream Management


By default XMPP is as reliable as your network is. Unfortunately in some cases that is not very reliable - in some network conditions disconnects can be frequent and message loss can occur.

To overcome this, XMPP has an optional extension (XEP-0198: Stream Management) which, when supported by both the client and server, can allow a client to resume a disconnected session, and prevent message loss.


When using XEP-0198 both the client and the server keep a queue of the most recently sent stanzas - this is cleared when the other end acknowledges they have received the stanzas. If the client disconnects, instead of marking the user offline the server pretends the client is still online for a short (configurable) period of time. If the client reconnects within this period, any stanzas in the queue that the client did not receive are re-sent.

If the client fails to reconnect before the timeout it will be marked as offline like prosody does on disconnect without mod_smacks. If the client is the last one for this JID, all message stanzas are added to the offline store and all other stanzas stanzas are returned with an “recipient-unavailable” error. If the client is not the last one with an open smacks session, all stanzas are returned with an “recipient-unavailable” error.

If you deliberately disabled mod_offline, all message stanzas of the last client are also returned with an “recipient-unavailable” error, because the can not be added to the offline storage.

This module also provides some events used by mod_cloud_notify. These events are: “smacks-ack-delayed”, “smacks-hibernation-start” and “smacks-hibernation-end”. See mod_cloud_notify for details on how these events are used there.


Option Default Description
smacks_hibernation_time 600 (10 minutes) The number of seconds a disconnected session should stay alive for (to allow reconnect)
smacks_max_queue_size 500 Maximum number of unacked stanzas kept in memory (not a hard limit, but resumption is not possible while exceeded)
smacks_enabled_s2s true Enable Stream Management on server connections? Experimental
smacks_s2s_resend false Attempt to re-send unacked messages on s2s disconnect Experimental
smacks_max_unacked_stanzas 0 How many stanzas to send before requesting acknowledgement
smacks_max_ack_delay 30 (1/2 minute) The number of seconds an ack must be unanswered to trigger an “smacks-ack-delayed” event
smacks_max_old_sessions 10 The number of allowed sessions with timed out hibernation for which the h-value is still kept (limited per user)