Bob is offline, Alice sends him a message using Conversations 1.23.8 as a client. The server is running ejabberd 18.01 on debian.
Bob is considered offline, when
ejabberdctl connected_users
does not list his name.
The message is then stored in the offline message storage by ejabberd. This is checked by:
ejabberdctl get_offline_count bob example.com
In /etc/ejabberd/ejabberd.yml
mod_offline is configured:
access:
max_user_offline_messages:
admin: 5000
all: 100
...
modules:
mod_offline:
access_max_user_messages: max_user_offline_messages
...
Bob connects to the server using gajim 1.0.0. He receives the offline messages and
ejabberdctl get_offline_count bob example.com
returns 0 (it was >0 before he connected) and the log (/var/log/ejabberd/ejabberd.log
) says:
2018-03-24 17:32:10.132 [debug] <0.4422.0>@xmpp_socket:send:218 (tls|<0.4422.0>) Send XML on stream = <<"<message xml:lang='en' to='bob@example.com/gajim.8FNGJDH5' from='alice@example.com/phone' type='chat' id='643ah4c3-8920-4c52-82b1-89s6f759vff7'><request xmlns='urn:xmpp:receipts'/><markable xmlns='urn:xmpp:chat-markers:0'/><origin-id xmlns='urn:xmpp:sid:0' id='643ah4c3-8920-4c52-82b1-89s6f759vff7'/><active xmlns='http://jabber.org/protocol/chatstates'/><delay from='example.com' stamp='2018-03-24T16:31:54.745016Z' xmlns='urn:xmpp:delay'>Offline storage</delay><body>This is my message.</body></message>">>
so far, so good.
Bob connects to the server using Conversations 1.23.8. He does not receive the offline messages, but
ejabberdctl get_offline_count bob example.com
returns 0 anyway (it was >0 before he connected) and the log (/var/log/ejabberd/ejabberd.log
) does not have an entry like in Case A.
I am working on this for a few days now. I looked into the server's configuration as well as the client's. Based on my experience I'd say it's an issue with the Conversations client, but I don't know where to look now. What log message should I look for in the ejabberd.log?
It seems Conversations 1.23.8 does not support offline messages (XEP-0160), but it does support message archive management (MAM - XEP-0313).
My solution is now to redirect offline messages to the MAM and the clients synchronize with their mams upon connecting to the server. Hint: MAM is disabled in ejabberd 18.01 by default.
My MAM configuration is:
mod_mam:
iqdisc: one_queue
default: always
assume_mam_usage: true
I did not change my mod_offline configuration.
Hints: When you do this, you need also mod_ping and mod_stream_mgmt to detect lost connections and kill the sessions, such that offline messages are catched by mod_offline and resend to the mam.