Messages sent to offline users is published in pubsub node, from where that message is sent to all the node subscribers as a pubsub notification.
<message from='pubsub.coffeebean.local' to='bard@shakespeare.lit' id='foo'> <event xmlns='http://jabber.org/protocol/pubsub#event'> <items node='message_sink'> <item id='ae890ac52d0df67ed7cfdf51b644e901'> <message type="chat" xmlns="jabber:client" id="x2ps6u0004" to="userB_h6x1bt0002@coffeebean.local" from="userA_uyhx8p0001@coffeebean.local/1149352695-tigase-20"> <body>Hello</body> </message> </item> </items> </event> </message>
The pubsub node must be created and configured beforehand:
<iq type='set' to='pubsub.coffeebean.local' id='create1'> <pubsub xmlns='http://jabber.org/protocol/pubsub'> <create node='message_sink'/> </pubsub> </iq>
After that is done, you need to add SessionManager as a publisher:
<iq type='set' to='pubsub.coffeebean.local' id='ent2'> <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> <affiliations node='message_sink'> <affiliation jid='sess-man@coffeebean.local' affiliation='publisher'/> </affiliations> </pubsub> </iq>
Finally, the 'msgoffline' offline messages processor must be configured as well
Because these sinks use a standard pubsub component, administration of the sink node is identical to any other pubsub node. XEP-0060 defines standard pubsub usage and management.
<iq type='set' to='pubsub.coffeebean.local' id='subman2'> <pubsub xmlns='http://jabber.org/protocol/pubsub#owner'> <subscriptions node='message_sink'> <subscription jid='bard@shakespeare.lit' subscription='subscribed'/> </subscriptions> </pubsub> </iq>