Author Topic: Дубликаты сообщений при использовании XEP-0136  (Read 17741 times)

0 Members and 1 Guest are viewing this topic.

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Использую Openfire + Monitoring service в качестве сервера XMPP. Клиент - Miranda NG, 0.95.3 с доменным входом.
Проблема следующая - при использовании XEP-0136 вся история переписки дублируется, при первом подключении миранда скачивает всю историю с сервера. Если окно закрыть и открыть заново - все сообщения упорядочиваются и идут попарно.

Пытаясь избавиться от этой проблемы решил хранить историю только на сервере и получать за неделю при первом обращении. Возникла еще одна проблема - похоже, что сервер отдает историю единым пакетом, не слишком соблюдая последовательность разговоров. Из-за этого свежие сообщения оказываются между устаревшими, причем метки времени на них стоят верные - если окно закрыть и открыть, то история упорядочивается и последние сообщения оказываются там где и должны быть. До следующего скачивания с сервера.

У меня есть несколько вариантов решения этой проблемы, сгодится любой. Вопрос в следующем:
1. Возможно ли получать сообщения не при первом открытии окна контакта, а с помощью нажатия кнопки на панельке?
2. Возможно ли получать сообщения сразу при запуске миранды?
3. Заставить historyPP упорядочивать сообщения сразу после получения или по расписанию?
4. Удалять дубликаты в истории при первом запуске миранды?
 

Offline ghazan

хочу:
1. историю контакта перед заливкой
2. network log после заливки
3. историю контакта после заливки

или доступ к серверу
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Доступ к серверу предоставить сложновато, но возможно. Вам какого уровня доступ нужен, к серверу выполняющему openfire или только непосредственно к веб-интерфейсу openfire?

Проблема еще и в том, что история не сразу приходит нормальная. Ее миранда сортирует только если открыть и закрыть окно. Тоже не знаю, как с этим бороться.
 

Offline ghazan

мне нужно просто к этому серверу прилогиниться своей мирандой. желательно на выходных
за файлы спасибо, посмотрим
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Хорошо. Завтра я перенесу сервер на debian с kerberos в качестве аутентификатора, и тогда старый виндовый можно будет использовать в качестве тестовой площадки. Достаточно будет пробросить 5222 порт наружу?
 

Offline watcher

Достаточно будет пробросить 5222 порт наружу?

Да, лишь бы свободно войти.
Пожалуйста, внимательно прочтите правила постинга перед тем, как открыть новую тему.
Please read forum rules.
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
ghazan, я вам отправил в личку JID и пароль. Порт пробросил, но протестить не с чего. Будем надеяться, что все отработает нормально.
 

Offline ghazan

ghazan, я вам отправил в личку JID и пароль. Порт пробросил, но протестить не с чего. Будем надеяться, что все отработает нормально.
пока счастье не наступило. отправил лог
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Поправил, теперь должно войти без проблем.
 

Offline ghazan

Поправил, теперь должно войти без проблем.
Вошло, спасибо
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Обнаружил крайне интересную вещь! Попытался я получить историю сообщений с сервера, подключившись через тот же адрес, который дал вам. Сервер находится в локальной сети, его имя, допустим, server.one
Сервер выглядывающий в интернет имеет имя bridge.one
В Miranda я не могу указать имя пользователя отличающимся, от имени сервера - т.е. указать имя как я@server.one а хост для подключения - bridge.one
Miranda просто не дает набрать @ в поле имени.
В результате Miranda определяет меня как я@bridge.one и запускает на сервер server.one, но историю не пересылает.

При этом Vacuum IM, в котором тоже есть поддержка XEP-0136, но можно указать имя "другого сервера" подключаясь к хосту. В результате история моментально втянулась.
Тогда я проверил еще одну вещь - подредактировал hosts, указав IP-адрес bridge.one как server.one
Подключился Мирандой к серверу server.one - и история моментально появилась.

Может быть, дать возможность вводить полный JID? Хотя бы опционально.
 

Offline ghazan

В Miranda я не могу указать имя пользователя отличающимся, от имени сервера - т.е. указать имя как я@server.one а хост для подключения - bridge.one
Miranda просто не дает набрать @ в поле имени.
правильно не дает :) ибо нефиг
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
А-а, вон где магия зарыта :)
А я все никак не понимал - на кой нужон тот connection host
 

Offline Oneiron

  • Jr. Member
  • **
  • Posts: 62
Ну что, как там дела обстоят с выходными работами?
 

Offline ghazan

я вспомнил предыдущий заезд. краткое резюме - XEP-0136 говно :)

суть в том, что в жабере сервер не возвращает клиенту идентификатор отосланного сообщения.
соотв чистка дублей ведется исключительно по времени события, и, если время не совпадает, то заносится дубль.
а время на клиенте по atomic clock и у тебя на сервере расходится на 23 секунды, поэтому дубли исправно плодятся