2
votes

Basic Scenario

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
...

Case A:

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='[email protected]/gajim.8FNGJDH5' from='[email protected]/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.

Case B:

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.

Question:

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?

1

1 Answers

1
votes

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.