JRuDevels

Jabber Russian Developers Forum.
Log in Register FAQ Memberlist Search JRuDevels Forum Index

JRuDevels Forum Index » Разработка и проектирование [Devel] » Подключение к jabber с помощью TJabberClient
Post new topic  Reply to topic View previous topic :: View next topic 
Подключение к jabber с помощью TJabberClient
PostPosted: Sun Mar 11, 2012 1:24 pm Reply with quote
Владислав
Отметившийся
Отметившийся
Joined: 11 Mar 2012
Posts: 12




Здравствуйте.
В качестве jabber сервера использую OpenFire.
Клиентская часть написана на delphi + TJabberClient.

OpenFire стоит на vps от rec.ru

Раньше, когда open fire стоял на vps от агавы, клиент подключался нормально, но после переноса на другой vps начались проблемы.

Авторизация проходит, но в онлайн не выходит. Непонятно почему пакеты перестают отправляться.

Подключаюсь стандартно
Code:
JabberClient1.Connect(1);

сервер, порт, jid и пароль указаны (проверял в отладчике пошагово);


не встречалось ли у кого таких проблем, или быть может есть соображения почему так происходит?

Ниже лог входящих и исходящих пакетов:
Code:

Исходящий пакет: <?xml version="1.0"?> <stream:stream xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xmlns="jabber:client" to="alternativa.intrumnet.com" xml:lang="en" xmlns:xml="http://www.w3.org/XML/1998/namespace">
Входящий пакет: <stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="alternativa.intrumnet.com" id="5250db49" xml:lang="en" version="1.0"/>
Входящий пакет: <stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism><mechanism>JIVE-SHAREDSECRET</mechanism><mechanism>PLAIN</mechanism><mechanism>CRAM-MD5</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><auth xmlns="http://jabber.org/features/iq-auth"/></stream:features>
Исходящий пакет: <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="DIGEST-MD5"/>
Входящий пакет: <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">cmVhbG09ImFsdGVybmF0aXZhLmludHJ1bW5ldC5jb20iLG5vbmNlPSJIekUyVTVNaEYzMDVlOUw1YWtLazhZU0J2K1JvRG1sY0ZuVDBGQ3RRIixxb3A9ImF1dGgiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNz</challenge>
Исходящий пакет: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dXNlcm5hbWU9ImdlbmEiLHJlYWxtPSJhbHRlcm5hdGl2YS5pbnRydW1uZXQuY29tIixub25jZT0iSHpFMlU1TWhGMzA1ZTlMNWFrS2s4WVNCditSb0RtbGNGblQwRkN0USIsY25vbmNlPSJiYjFkNGZmNmJhODVmMDA0ZGE1Njk3ZjViMWVmNjE0YyIsbmM9MDAwMDAwMDEscW9wPWF1dGgsZGlnZXN0LXVyaT0ieG1wcC9hbHRlcm5hdGl2YS5pbnRydW1uZXQuY29tIixjaGFyc2V0PXV0Zi04LHJlc3BvbnNlPTYwZjZhYWE5YjNlZmIwNDBmZDRjMWE2NGVlNjc3OTE5</response>
Входящий пакет: <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl">cnNwYXV0aD1hOTFjZWZmODJjNTAxZTkyNTYzMWNlNjVkZTY4ZTVkNQ==</success>
Исходящий пакет: <?xml version="1.0"?> <stream:stream xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xmlns="jabber:client" to="yyyy.zzz" xml:lang="en" xmlns:xml="http://www.w3.org/XML/1998/namespace">
Входящий пакет: <stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="yyyy.zzz" id="5250db49" xml:lang="en" version="1.0"/>
Входящий пакет: <stream:features><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features>
Исходящий пакет: <iq type="set" id="bind_1" ><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource></resource></bind></iq>
Входящий пакет: <iq type="result" id="bind_1" to="yyyy.zzz/5250db49"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>xxx@yyyy.zzz/5250db49</jid></bind></iq>
Исходящий пакет: <iq type="set" id="4d8b7807f3" ><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>
Входящий пакет: <iq type="result" id="4d8b7807f3" to="xxx@yyyy.zzz/5250db49"/>
View user's profile Send private message
PostPosted: Sun Mar 11, 2012 1:58 pm Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




Смотрели ли логи Openfire? Пробовали ли подключаться другими клиентами?

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Sun Mar 11, 2012 2:12 pm Reply with quote
Владислав
Отметившийся
Отметившийся
Joined: 11 Mar 2012
Posts: 12




Spark подключается.
В OpenFire есть сессия подключения со статусом offline.
Код подключения к jabber не менялся.
Настройки openfire идентичны, что на нашем сервере, что на vps.

Встает вопрос, JabberClient криво написан или проблемы в настройках vps?

error log openfire
Code:
at org.jivesoftware.openfire.http.HttpSession.closeConnection(HttpSession.java:919)
   at org.jivesoftware.openfire.http.HttpSession.access$200(HttpSession.java:73)
   at org.jivesoftware.openfire.http.HttpSession$HttpVirtualConnection.closeVirtualConnection(HttpSession.java:992)
   at org.jivesoftware.openfire.net.VirtualConnection.close(VirtualConnection.java:179)
   at org.jivesoftware.openfire.http.HttpSession.close(HttpSession.java:196)
   at org.jivesoftware.openfire.handler.IQBindHandler.handleIQ(IQBindHandler.java:139)
   at org.jivesoftware.openfire.handler.IQHandler.process(IQHandler.java:65)
   at org.jivesoftware.openfire.IQRouter.handle(IQRouter.java:372)
   at org.jivesoftware.openfire.IQRouter.route(IQRouter.java:121)
   at org.jivesoftware.openfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:76)
   at org.jivesoftware.openfire.SessionPacketRouter.route(SessionPacketRouter.java:108)
   at org.jivesoftware.openfire.SessionPacketRouter.route(SessionPacketRouter.java:69)
   at org.jivesoftware.openfire.http.HttpSession.sendPendingPackets(HttpSession.java:636)
   at org.jivesoftware.openfire.http.HttpSessionManager$HttpPacketSender.run(HttpSessionManager.java:390)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
   at java.lang.Thread.run(Thread.java:662)
2012.03.11 10:25:28 org.jivesoftware.openfire.spi.PresenceManagerImpl - Error storing offline presence of user: bot
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry 'bot' for key 'PRIMARY'
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
   at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
   at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
   at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
   at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
   at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:882)
   at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100)
   at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57)
   at $java.sql.PreparedStatement$$EnhancerByProxool$$94b925d5.execute(<generated>)
   at org.jivesoftware.openfire.spi.PresenceManagerImpl.userUnavailable(PresenceManagerImpl.java:290)
   at org.jivesoftware.openfire.handler.PresenceUpdateHandler.process(PresenceUpdateHandler.java:168)
   at org.jivesoftware.openfire.handler.PresenceUpdateHandler.process(PresenceUpdateHandler.java:135)
   at org.jivesoftware.openfire.handler.PresenceUpdateHandler.process(PresenceUpdateHandler.java:199)
   at org.jivesoftware.openfire.PresenceRouter.handle(PresenceRouter.java:149)
   at org.jivesoftware.openfire.PresenceRouter.route(PresenceRouter.java:85)
   at org.jivesoftware.openfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:84)
   at org.jivesoftware.openfire.SessionManager$ClientSessionListener.onConnectionClose(SessionManager.java:1164)
   at org.jivesoftware.openfire.net.VirtualConnection.notifyCloseListeners(VirtualConnection.java:214)
   at org.jivesoftware.openfire.net.VirtualConnection.close(VirtualConnection.java:190)
   at org.jivesoftware.openfire.http.HttpSession.close(HttpSession.java:196)
   at org.jivesoftware.openfire.http.HttpSessionManager$HttpSessionReaper.run(HttpSessionManager.java:372)
   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
   at java.util.concurrent.FutureTask.run(FutureTask.java:138)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
   at java.lang.Thread.run(Thread.java:662)
View user's profile Send private message
PostPosted: Sun Mar 11, 2012 3:01 pm Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




Похоже, что вы снимали дамп базы на работающем openfire, а потом перенесли на новый, отчего теперь случается Constraint Violation.

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Sun Mar 11, 2012 3:17 pm Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




Попробуйте подключиться другим клиентом, но на этот же (bot) аккаунт.

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Sun Mar 11, 2012 3:32 pm Reply with quote
Владислав
Отметившийся
Отметившийся
Joined: 11 Mar 2012
Posts: 12




подключился через Spark на аккаунт bot, затем отключился.
Openfire перезапустил на всякий случай.
errorlog пуст. Проблема осталась.
View user's profile Send private message
PostPosted: Sun Mar 11, 2012 3:38 pm Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




Владислав wrote:
подключился через Spark на аккаунт bot, затем отключился.
Openfire перезапустил на всякий случай.
errorlog пуст. Проблема осталась.


По вашему XML-логу у вас нормально устанавливается сессия, а вот начальный презенс не отправляется. Это проблема клиента. Попробуйте насильно отправить пустой <presence/> после установки сессии. (К сожалению, не знаю тонкостей реализации вашей библиотеки, можете дать ссылку на её документацию, если нужны более подробные объяснения).

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Sun Mar 11, 2012 3:42 pm Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




Владислав wrote:
подключился через Spark на аккаунт bot, затем отключился.
Openfire перезапустил на всякий случай.
errorlog пуст. Проблема осталась.


Кстати, похоже, вы нашли баг, не относящийся к первоначальной проблеме. Неплохо бы воспроизвести и написать багрепорт.

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Sun Mar 11, 2012 3:58 pm Reply with quote
Владислав
Отметившийся
Отметившийся
Joined: 11 Mar 2012
Posts: 12




http://jawiki.ru/TJabberClient - ссылка на библиотеку.[/url]
View user's profile Send private message
PostPosted: Sun Mar 11, 2012 4:35 pm Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




Не могу там найти документацию. Есть прямая ссылка?

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Sun Mar 11, 2012 5:09 pm Reply with quote
Владислав
Отметившийся
Отметившийся
Joined: 11 Mar 2012
Posts: 12




там есть ссылка на исходники этой библиотеки.
Как делал я:
скачал, просмотрел демо и дальше все методами научного тыка, просмотра исходников других клиентов с этой библиотекой, и чтением rfc.
View user's profile Send private message
PostPosted: Sun Mar 11, 2012 7:28 pm Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




Владислав wrote:
там есть ссылка на исходники этой библиотеки.
Как делал я:
скачал, просмотрел демо и дальше все методами научного тыка, просмотра исходников других клиентов с этой библиотекой, и чтением rfc.


Зачем вообще такая библиотека, качество кода ну не очень.

Я бы попробовал на TOnConnect повесить вызов SetPresence.

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Mon Mar 12, 2012 7:45 am Reply with quote
Владислав
Отметившийся
Отметившийся
Joined: 11 Mar 2012
Posts: 12




Спасибо за ответы!

Пробовал на событии onConnect ставить setPresence, пробовал и SendStr('<presence/>'), к результату не привело.

Больше никаких идей?

Upd:
сверял логи jabber с работающим и не работающим подключением. нашел разницу. После биндинга джида к ресурсу должна же сессия стартануть?

рабочий вариант:
Code:
Исходящий пакет: <iq type="set" id="bind_1" ><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource></resource></bind></iq>
Входящий пакет: <iq type="result" id="bind_1" to="xxx@yyy.zzz/eb37fd54"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>vanya@xxx@yyy.zzz/eb37fd54</jid></bind></iq>
Исходящий пакет: <iq type="set" id="38c830321f" ><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>
Входящий пакет: <iq type="result" id="38c830321f" to="myjid@xxx@yyy.zzz/eb37fd54"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>
Исходящий пакет: <presence>
<priority>5</priority>
</presence>


не рабочий:
Code:
Исходящий пакет: <iq type="set" id="bind_1" ><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource></resource></bind></iq>
Входящий пакет: <iq type="result" id="bind_1" to="xxx@yyy.zzz/4021ccdb"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>gena@xxx@yyy.zzz/4021ccdb</jid></bind></iq>
Исходящий пакет: <iq type="set" id="e1b2e4222e" ><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>
Входящий пакет: <iq type="result" id="e1b2e4222e" to="gena@xxx@yyy.zzz/4021ccdb"/>


получается что сервер не начинает сессию?
View user's profile Send private message
PostPosted: Mon Mar 12, 2012 11:47 am Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




Начинает, <iq type="result"> же есть, <session> туда вкладывать не обязательно. Если библиотека его (тег session внутри iq) требует, то это несоответствие RFC.

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Mon Mar 12, 2012 3:44 pm Reply with quote
Владислав
Отметившийся
Отметившийся
Joined: 11 Mar 2012
Posts: 12




Спасибо!
Проблема решена путем правки кода библиотеки.

файл Jabber.pas строка 446

Меняем
Code:
if XMLItem.Params.Values['type'] = 'result' then begin
          // все мы в ONLINE
          if XMLItem.Children.NodeByName['session'] <> nil then
            if XMLItem.Children.NodeByName['session'].Params.Values['xmlns'] = XMLNS_XMPP_SESSION then
              if not FJabberOnLine then begin
                //устанавливаем состояние
                SetPresence;
                FJabberOnLine := True;
                _OnJabberOnline(Self);
              end;
        end;


на

Code:
if XMLItem.Params.Values['type'] = 'result' then begin
    SetPresence;
          FJabberOnLine := True;
          _OnJabberOnline(Self);
        end;
View user's profile Send private message
Подключение к jabber с помощью TJabberClient
JRuDevels Forum Index » Разработка и проектирование [Devel]
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
All times are GMT + 3 Hours  
Page 1 of 1  

  
  
 Post new topic  Reply to topic  


Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin