2012-10-23 3 views
1

Я получаю офлайн-сообщение с сервера openfire, но содержит пустой jabber: x: delay extension.Openfire отправляет пустые (без маркера attr) jabber: x: расширение задержки для smack

сообщение я получаю это:

<message id="qU7N8-64" to="[email protected]" from="[email protected]/4847791" type="chat"> 
     <body>test message</body> 
     <delay xmlns="urn:xmpp:delay"></delay> 
     <x xmlns="jabber:x:delay"></x> 
</message> 

Это сообщение я получаю с привкусом библиотеки.

Но когда я подключаюсь к openfire с помощью Miranda IM, openfire отправляет расширение jabber: x: задержка с данными.

Почему openfire посылает пустой jabber: x: задержка только для того, чтобы прикрыть библиотеку?

ответ

1

Добавить эту строку после подключения.

ProviderManager.getInstance()addExtensionProvider("x","jabber:x:delay", new DelayInformationProvider()); 
1

Openfire не делает ничего другого, поскольку он не знает (или не заботится) о том, какой клиент подключен. Пакет, который вы показываете, очень своеобразен, поскольку содержит как устаревшие, так и текущие версии Delayed Delivery, но с отсутствующими атрибутами в обоих.

Попробуйте использовать аргумент VM -Dsmack.debugEnabled = true set. Затем проверьте входящие пакеты raw для получения фактического содержимого сообщения. Скорее всего, одна из двух вещей происходит.

  1. Не хватает времени, поэтому Миранда компенсирует его по умолчанию, как текущая дата.
  2. Формат времени не соответствует спецификации, поэтому анализатор в Smack опускает его.
+0

Smack не анализировать атрибут штампа в сообщении. – Nik