Miranda NG Official Community Forum

Miranda NG русскоязычный форум => Плагины => Topic started by: laris on 09 01 2020, 11:20:55

Title: Обновление ICQ.dll поломало Status manager
Post by: laris on 09 01 2020, 11:20:55
После последнего обновления  icq.dll перестал нормально работать Status manager. При пропадании сети соединение не переподключается, хотя визуально миранда в сети, так же, как и те контакты, что были в сети до разрыва. Так же при изменении статуса на "Не в сети" и последующем подключении, миранда остается оффлайн, контакты не в сети, хотя значек миранды загорается зеленым. В принципе этот глюк заметен и без Status manager, повторное подключение вручную не дает результата, приходится только перезапускать программу. Miranda NG 0.95.11 x86 Windows 7
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: Apollo2k4 on 09 01 2020, 12:05:26
laris, хорошо бы нетлог (https://wiki.miranda-ng.org/index.php?title=Network_log/ru) этого момента, протокол особо не меняли после того как адаптировали весной 2019
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 09 01 2020, 12:45:05
Сделал. Выбираю статус "Не в сети", потом "В сети".
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: ghazan on 09 01 2020, 13:15:00
laris,
HttpPeekFirstResponseLine Failed (1460 10)
1460 - это таймаут, скорее всего, в вашей организации перекрыт доступ к ICQ
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 09 01 2020, 13:19:40
Обычный домашний интернет, не организация. Аська работает и подключается нормально при запуске. А вот при разрыве связи не может обратно ее восстановить и то же самое при ручном изменении статусов. Кстати, со старым  icq.dll, недельной давности, все ок.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: Apollo2k4 on 09 01 2020, 14:22:01
laris, судя по коммитам (https://github.com/miranda-ng/miranda-ng/commits/master/protocols/ICQ-WIM) ничего сильно не изменилось, проверьте корректность системного времени на ПК
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 09 01 2020, 14:41:29
А что со временем? Со временем все ок вроде.
Вот нетлог аналогичных действий с icq.dll от 16.12.2019 Здесь переподключение не сразу, но происходит.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: ghazan on 09 01 2020, 15:03:34
laris,
тут всё нормально, да
[17:39:18 1FC0] [ICQ] Connection request to u.icq.net:443 (Flags 11)....
[17:39:18 1FC0] [ICQ] (03220CF8) Connecting to server u.icq.net:443....
[17:39:18 1FC0] [ICQ] (03220CF8) Connecting to ip 178.237.20.123:443 ....
[17:39:18 1FC0] [ICQ] (1208) Connected to u.icq.net:443
[17:39:18 1FC0] [ICQ] (1208 u.icq.net) Starting SSL negotiation
[17:39:18 1FC0] [ICQ] (1208 u.icq.net) SSL negotiation successful
[17:39:18 1FC0] [ICQ] (03220CF8:1208) Data received

а в том логе всё не так хорошо, и это от Миранды никак, увы, не зависит
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 09 01 2020, 15:29:34
Ну так программа одна, система одна, я только подкинул старый icq.dll в папку плагины и получил нормальный результат. А при обновлении на новый icq.dll все плохо. В чем же дело?
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: dartraiden on 10 01 2020, 12:25:27
Дело, очевидно, в том, что Status Manager тут не при чём.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 10 01 2020, 13:05:36
Да, он ни при чем. Глючит и без него.
В общем вернул декабрьский  icq.dll и отключил обновления. Надеюсь почините.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: Apollo2k4 on 10 01 2020, 16:56:55
Надеюсь почините.
Вот в этом то и проблема, что проблема проявилась только у вас, ну или по крайней мере только вы о ней заявили, а фиксить проблему которой нет у остальных странное занятие. Так что без вашей помощи не обойдёмся.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 11 01 2020, 07:58:39
Так а чем я могу помочь? Если что, пишите.Кстати, насчет системного времени. Я пользуюсь программой KRT для сброса лицензии Kaspersky Internet Security. В последних версиях она делает что-то с системным временем, оно тоже сбрасывается, но после перезагрузки восстанавливается. Может это как то влияет? Но опять же, с предыдущим icq.dll все нормально, стоит его закинуть в папку плагины.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: Apollo2k4 on 11 01 2020, 09:18:03
Так а чем я могу помочь?
Сейчас два человека говорят о двух разных проблемах которые проявляются только у них, никто не может воспроизвести их у себя, решите проблему которая у меня есть но какая я не понимаю. Попробуйте поиграться с настройками фаервола может он считает что миранда подозрительная.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 11 01 2020, 10:58:25
Не, я отключал это все, не влияет.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: dartraiden on 11 01 2020, 16:46:05
А какой конкретно билд ICQ.dll работает корректно? Понятно, что декабрьский, а точнее? Покажите информацию о версиях (https://wiki.miranda-ng.org/index.php?title=Version_information)
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: -SM- on 12 01 2020, 07:11:09
С каким-то из ночников пришло странное поведение при коннекте. При первом запуске миранды все отлично соединяется. В дальнейшем, после любого попадания в оффлайн независимо от причины, хоть руками, хоть от ухода ноута в спячку, хоть от пропадания коннекта, при переходе заново в онлайн оно просто мгновенно меняет статус  на "онлайн", вероятно, ничего при этом другого не делая (не "крутится" процесс коннекта перед этим). Ну и не появляются статусы контактов, и ничего не работает. Выход из миранды целиком и вход обратно - и опять все ОК до ближайшего перехода в оффлайн.
Это что-то в каких-то настройках у меня, или это вообще так на текущих нескольких последних сборках аськи?
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 12 01 2020, 08:28:41
Сделал. На этой версии ICQ.dll все работает.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: Apollo2k4 on 12 01 2020, 09:18:09
-SM-, проблема известна, сейчас собираем информацию, уточните на какой версии последний раз было нормально.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: -SM- on 12 01 2020, 10:43:46
уточните на какой версии последний раз было нормально.
Знать бы. Я это сначала списывал на тупой и тормозной канал связи, так как был далеко на просторах Родины через модем. А когда понял, что дело не в этом, уже обновился, и не факт, что один раз. А есть где нибудь архив обновлений, чтобы пооткатываться?

UPD:
IMHO, на коммите, где OnLoggedOut переносили... Где-то в самом начале января. Но не уверен
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 12 01 2020, 11:17:53
-SM-, Закиньте этот ICQ.dll в папку Plugins и проверьте, должно работать.

А что со временем на сайте? Отстает на пару часов, это нормально?
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: -SM- on 12 01 2020, 11:48:34
Закиньте этот ICQ.dll
Увы, гранаты не той системы - мне нужны 64-битные....
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: Apollo2k4 on 12 01 2020, 12:34:23
А что со временем на сайте? Отстает на пару часов, это нормально?
В настройках профиля поставьте правильный часовой пояс.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: -SM- on 12 01 2020, 20:46:51
Закиньте этот ICQ.dll в папку
А не могли бы Вы diff выложить, чтобы я сам себе собрал 64-битную версию? Или оно вот-вот в коммиты попадет ?
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: Apollo2k4 on 12 01 2020, 22:27:13
-SM-, в архиве лежит версия от 16.12.2019 01:03:08, скорее всего это коммит c296f490370ae3c727d8679b70e025838047d82f (https://github.com/miranda-ng/miranda-ng/commit/0a779cd8a38b07d39832adf27b39e8a673b69251#diff-fa40e2dede5229b328a6e2b10729fc77) от 15 числа или около того +- 1-2 коммита, смотреть и пробовать можно тут (https://github.com/miranda-ng/miranda-ng/commits/master/protocols/ICQ-WIM), всё на свой страх и риск.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: -SM- on 13 01 2020, 09:28:42
смотреть и пробовать можно тут,
Спасибо. О "там" то я знаю... Придется ставить VS 2019. А то для всех моих задач я пользуюсь VS2008 (я пишу драйвера железа и прочее внутреннее-системное, невидимое пользователю), а это им просто так не собирается.Я надеялся на то, что где-то есть архив того, что через апдейтер приходило, хотя бы за год последний.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: -SM- on 13 01 2020, 10:07:32
Объясняю суть проблемы.
При смене статуса с онлайна на оффлайн (после того самого коммита) перестал вызываться CIcqProto::OnLoggedOut(). Вызывается CIcqProto::ShutdownSession, но, из-за того, что из него вызов OnLoggedOut убран, флаг m_bOnline не снимается (это делается в OnLoggedOut). Далее, при следующем онлайне, в CIcqProto::SetStatus просто все обходится к чертям собачьим, так как m_bOnline == true.

Это поведение отлично видно сразу же из нетлога:

Code: [Select]
[13:01:25 1860] SSL established with ECDHE-RSA-AES256-GCM-SHA384
[13:01:25 1860] [ICQ] (1532 u.icq.net) SSL negotiation successful
[13:01:25 1B98] [ICQ] Executing request 3cbac721-dfa6-4a68-b1d3-762395eaaacb:
https://u.icq.net/bos/bos-d013g/aim/fetchEvents?aimsid=091.0444317533.0687774958:300659245&rnd=1578909688.796512&seqNum=531&timeout=25000
[13:01:25 1860] [ICQ] Executing request 92e41be6-d8d9-4c44-8829-451c7d517693:
https://u.icq.net/wim/aim/endSession?f=json&aimsid=091.0444317533.0687774958%3A300659245&r=92e41be6-d8d9-4c44-8829-451c7d517693
[13:01:25 1B98] [ICQ] Executing request e6dcd7b6-311b-45c0-b590-cf434d561e48:
https://u.icq.net/bos/bos-d013g/aim/fetchEvents?aimsid=091.0444317533.0687774958:300659245&rnd=1578909688.803627&seqNum=541&timeout=25000
[13:01:25 1B98] [ICQ] CIcqProto::ShutdownSession
[13:01:25 1B98] [ICQ] Polling thread ended
[13:02:05 2A08] [ICQ] CIcqProto::SetStatus iNewStatus = 40072, m_iStatus = 40071, m_iDesiredStatus = 40071 m_hWorkerThread = 0000000000000360
[13:02:05 2A08] [ICQ] setting server online status to 40072


PS
как это корректно устранить, я не знаю, так как не знаю все модели софтины в целом. Но если в CIcqProto::ShutdownSession добавить m_bOnline = false; то все начинает работать. Но я не знаю, достаточно ли этого, и не надо ли делать что-то еще из OnLoggedOut при этом.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: ghazan on 13 01 2020, 10:48:02
-SM-,
Жесть, сейчас гляну, спасибо. Там идея в том, что CIcqProto::OnLoggedOut() отрабатывает при разрушении служебного потока, который обслуживает сессию, и как при окончании сессии может не разваливаться поток - это загадка.

PS: твоя правда, не вызывается. Щас будет
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: -SM- on 13 01 2020, 11:12:54
Жесть
Так ИМХО потому, что m_bTerminated никогда не ставится, потому что CIcqProto::OnShutdown() ниоткуда не вызывается.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: ghazan on 13 01 2020, 12:32:22
m_bTerminated ставится, когда Миранда разваливается на выходе.

Я просто зря скопировал код из Фейсбука, потому что в миранде поток, обслуживающий аськины http requests, живет постоянно, даже в оффлайне, чтобы грузить аватары, например, или кидать файлы в оффлайн. Есть, кстати, сомнение, что оно будет работать, ибо без идентификатора сессии никаких чудес происходить не будет...

Вернул пока эту дурь на место, потом будем разбираться. Билд вылился на сервер, можно обновляться
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: -SM- on 13 01 2020, 12:43:28
Есть, кстати, сомнение, что оно будет работать
А оно и не может работать в принципе - когда в оффлайне я - я и не могу ничего и никому писать или кидать по определению. А когда кто-то в оффлайне, кому надо написать или кинуть файл, а не я, то этого потока это не касается от слова совсем.


Post Merge: 13 01 2020, 13:01:02
Билд вылился на сервер, можно обновляться
Спасибо.
Как-то полу-работает... То срабатывает, то нет. Кажется, зависит от времени того, сколько продержать ее в оффлайне. А может и не от этого.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: ghazan on 13 01 2020, 14:18:36
А оно и не может работать в принципе - когда в оффлайне я
Разумеется, может, если сессию не прерывать при выходе. Вообще для протокола ICQ-WIM нет такого понятия - оффлайн или онлайн, от того, что ты передал какой-то статус на сервер, никому не тепло и не холодно. Если есть session key, всегда можно что-то послать.

А вот если прервать сессию при выходе в оффлайн, чтобы не конфликтовать с мобильными клиентами, то запомненный session key становится невалидным, и дальше пока его обновить, то счастья не будет.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: -SM- on 13 01 2020, 15:21:26
А вот если прервать сессию при выходе в оффлайн, чтобы не конфликтовать с мобильными клиентами, то запомненный session key становится невалидным, и дальше пока его обновить, то счастья не будет.
Ну я это и имел ввиду, что под "оффлайн" подразумевается именно завершенная сессия, и смысл оффлайна конкретно в этом. А некое виртуальное изменение статуса на сервере - получается, похоже, не оффлайном в его физическом смысле, а неким эквивалентом "невидимости".
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: dartraiden on 13 01 2020, 20:08:34
Придется ставить VS 2019
Если что, мы собираем Миранду 2017-й студией из-за необходимости поддержки XP. 2019-й, конечно, собирать можно, но я предпочитаю 2017, чтобы билд не отличались от тех, которые мы вываливаем пользователям.
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: laris on 14 01 2020, 08:59:06
Ну все работает отлично, после сегодняшнего обновления, всем спасибо. )
Title: Re: Обновление ICQ.dll поломало Status manager
Post by: Apollo2k4 on 14 01 2020, 09:08:08
laris, только вот другие протоколы так не думают, два протокола пришлось править, третий потенциально :)