Status on-line do ejabberd quando o usuário perde a conexão

Eu tenho ejabberd configuração para ser o servidor xmpp entre aplicativos móveis, ou seja. iPhone personalizado e aplicativo para Android.

Mas, aparentemente, me deparo com uma limitação do modo como o ejabberd lida com o status on-line.

Cenário:

O usuário A está enviando mensagens ao usuário B por meio de seus celulares.O usuário B perde toda a conectividade, portanto, o cliente não pode se desconectar do servidor.O ejabberd ainda lista o usuário B como on-line.Como o ejabberd assume que o Usuário B ainda está online, qualquer mensagem do Usuário A é passada para a conexão inativa.Assim, o usuário B não receberá a mensagem nem será salvo como uma mensagem offline, pois o ejabberd supõe que o usuário esteja on-line.Mensagem perdida.Até o ejabberd perceber que a conexão é obsoleta, ela é tratada como um usuário on-line.

E jogue em mudanças de conexão de dados (wi-fi para 3G a 4G para ...) e você verá isso acontecendo bastante.

mod_ping:

Eu tentei implementar mod_ping em um intervalo de 10 segundos.
https://www.process-one.net/docs/ejabberd/guide_en.html#modping
Mas, como a documentação afirma, o ping aguardará 32 segundos por uma resposta antes de desconectar o usuário.
Isso significa que haverá uma janela de 42 segundos em que o usuário poderá perder suas mensagens.

Solução Ideal:

Mesmo que o tempo de espera do ping seja reduzido, ainda não é uma solução perfeita.
Existe uma maneira que ejabberd pode esperar por uma resposta 200 do cliente antes de descartar a mensagem? Se não houver resposta, salve-a offline.
É possível escrever um gancho para resolver este problema?
Ou há uma configuração simples que eu perdi em algum lugar?

FYI: Eu não estou usando o BOSH.

questionAnswers(6)

yourAnswerToTheQuestion