| | Подключение к jabber с помощью TJabberClient |
| |
Posted: Sun Mar 11, 2012 1:24 pm |
|
|
Владислав |
Отметившийся |
|
|
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"/>
|
|
|
|
|
|
| | |
Posted: Sun Mar 11, 2012 1:58 pm |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
Смотрели ли логи Openfire? Пробовали ли подключаться другими клиентами? |
|
_________________ And I'm feeling good! |
|
|
|
| | |
Posted: Sun Mar 11, 2012 2:12 pm |
|
|
Владислав |
Отметившийся |
|
|
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) |
|
|
|
|
|
| | |
Posted: Sun Mar 11, 2012 3:01 pm |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
Похоже, что вы снимали дамп базы на работающем openfire, а потом перенесли на новый, отчего теперь случается Constraint Violation. |
|
_________________ And I'm feeling good! |
|
|
|
Posted: Sun Mar 11, 2012 3:17 pm |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
Попробуйте подключиться другим клиентом, но на этот же (bot) аккаунт. |
|
_________________ And I'm feeling good! |
|
|
|
Posted: Sun Mar 11, 2012 3:32 pm |
|
|
Владислав |
Отметившийся |
|
|
Joined: 11 Mar 2012 |
Posts: 12 |
|
|
|
|
|
|
|
подключился через Spark на аккаунт bot, затем отключился.
Openfire перезапустил на всякий случай.
errorlog пуст. Проблема осталась. |
|
|
|
|
Posted: Sun Mar 11, 2012 3:38 pm |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
Владислав wrote: | подключился через Spark на аккаунт bot, затем отключился.
Openfire перезапустил на всякий случай.
errorlog пуст. Проблема осталась. |
По вашему XML-логу у вас нормально устанавливается сессия, а вот начальный презенс не отправляется. Это проблема клиента. Попробуйте насильно отправить пустой <presence/> после установки сессии. (К сожалению, не знаю тонкостей реализации вашей библиотеки, можете дать ссылку на её документацию, если нужны более подробные объяснения). |
|
_________________ And I'm feeling good! |
|
|
|
| | |
Posted: Sun Mar 11, 2012 3:42 pm |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
Владислав wrote: | подключился через Spark на аккаунт bot, затем отключился.
Openfire перезапустил на всякий случай.
errorlog пуст. Проблема осталась. |
Кстати, похоже, вы нашли баг, не относящийся к первоначальной проблеме. Неплохо бы воспроизвести и написать багрепорт. |
|
_________________ And I'm feeling good! |
|
|
|
Posted: Sun Mar 11, 2012 3:58 pm |
|
|
Владислав |
Отметившийся |
|
|
Joined: 11 Mar 2012 |
Posts: 12 |
|
|
|
|
|
|
|
|
|
|
|
Posted: Sun Mar 11, 2012 4:35 pm |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
Не могу там найти документацию. Есть прямая ссылка? |
|
_________________ And I'm feeling good! |
|
|
|
Posted: Sun Mar 11, 2012 5:09 pm |
|
|
Владислав |
Отметившийся |
|
|
Joined: 11 Mar 2012 |
Posts: 12 |
|
|
|
|
|
|
|
там есть ссылка на исходники этой библиотеки.
Как делал я:
скачал, просмотрел демо и дальше все методами научного тыка, просмотра исходников других клиентов с этой библиотекой, и чтением rfc. |
|
|
|
|
Posted: Sun Mar 11, 2012 7:28 pm |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
Владислав wrote: | там есть ссылка на исходники этой библиотеки.
Как делал я:
скачал, просмотрел демо и дальше все методами научного тыка, просмотра исходников других клиентов с этой библиотекой, и чтением rfc. |
Зачем вообще такая библиотека, качество кода ну не очень.
Я бы попробовал на TOnConnect повесить вызов SetPresence. |
|
_________________ And I'm feeling good! |
|
|
|
| | |
Posted: Mon Mar 12, 2012 7:45 am |
|
|
Владислав |
Отметившийся |
|
|
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"/> |
получается что сервер не начинает сессию? |
|
|
|
|
| | |
Posted: Mon Mar 12, 2012 11:47 am |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
Начинает, <iq type="result"> же есть, <session> туда вкладывать не обязательно. Если библиотека его (тег session внутри iq) требует, то это несоответствие RFC. |
|
_________________ And I'm feeling good! |
|
|
|
Posted: Mon Mar 12, 2012 3:44 pm |
|
|
Владислав |
Отметившийся |
|
|
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; |
|
|
|
|
|
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
|
|
|
|