Miranda NG Official Community Forum

Miranda NG русскоязычный форум => Плагины => Topic started by: eugeny on 03 07 2020, 13:35:41

Title: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 03 07 2020, 13:35:41
У меня наблюдается некорректное поведение модуля Startup status (входит в состав StatusManager) по отношению к закрытию сессии ICQ. Я установил галочку в пункте "Set status to offline before exit", но почему-то примерно в 50% случаев сессия ICQ остаётся открытой после выхода из программы (проверял список открытых сессий, заходя на https://icq.com/session/list/ru ). Операционная система - Windows 2003 Server R2 x86. Версия Миранды - последняя бета.

Впечатление такое, что программа настолько быстро закрывается, так что плагин не успевает отправить команду на закрытие сессии и получить подтверждение, что сессия закрыта. Тайм-аут бы какой-нибудь ввести тут не помешало, чтобы замедлить закрытие программы.

P.S. Опробовал на другом компьютере с Windows Server 2008 x86 на борту - та же картина (сессия ICQ закрывается не всегда).
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: dartraiden on 03 07 2020, 17:25:52
Наша реализация протокола ICQ сама завершает сессию (если пользователь влогинен через постоянный пароль, а не одноразовый), не нужно ничего делать через StatusManager.

Пробуйте на 0.95.12, там был фикс ошибки, из-за которой сессия не закрывалась иногда.

Если не закрывает, то это нужно исправлять в протоколе, понадобится на версии 0.95.12 сделать нетлог (https://wiki.miranda-ng.org/index.php?title=Network_log) протокола ICQ при выходе, чтобы в него попал момент, когда сессия должна была закрыться, но не закрылась.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 05 07 2020, 15:00:28
Я, собственно, плагин StatusManager подтянул, когда у меня часто не закрывалась сессия при выходе из программы.  Раз говорите, что пофиксили закрытие сессии в последних 0.95.12, то... 
В общем, галочку "Set status to offline before exit" в плагине снял, а нетлог включил - понаблюдаю за поведением протокола ICQ. Если что-то будет не так, то лог пришлю.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: dartraiden on 05 07 2020, 16:43:49
StatusManager тут вообще никак не поможет. Если протокол убивает сессию при уходе в оффлайн, то он её убивает и при завершении Миранды. А если не убивает при уходе в оффлайн (не умеет или из-за ошибки), то StatusManager уведет его в оффлайн и... ничего. Сам StatusManager про сессии вообще не знает, это не его дело.

В принципе, сессию вообще убивать не стоит, это костыль, введённый временно, пока разработчик Mandarin ICQ не реализует у себя работу с серверной историей. Без неё Mandarin не получает оффлайн-сообщения, если висит чужая открытая сессия. А пользователям, у которых учётка ICQ зарегана недавно и не имеет постоянного пароля (для новых учёток постоянный пароль установить невозможно), вынуждены жить с открытой сессией, закрытие сессии ведет к лютому для них геморрою.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 06 07 2020, 09:36:22
Вот пример сессии ICQ, которая не закрылась (netlog прилагаю). Логин ICQ у меня с 1997 года, пароль постоянный - не менял его уже несколько лет.

Кстати, есть ещё вопрос по коннектам с сервером по протоколу ICQ. Если ставлю галочку "Validate SSL certificate", то под 2003 Server программа не коннектится - пишет об ошибке "сертификат выдан другому серверу". Пришлось галочку снять несколько месяцев назад. А вот под 2008 Server нормально коннектится с проверкой сертификата.  Какой то новый алгоритм шифрования в обновлённом протоколе ICQ, несовместимый со старыми версиями Windows?
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: dartraiden on 06 07 2020, 09:39:04
TLS 1.2, вероятно. В вики (https://wiki.miranda-ng.org/index.php?title=Plugin:ICQ) написано, как поставить патчи от XP Embedded.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: Apollo2k4 on 06 07 2020, 09:39:27
Какой-то новый алгоритм шифрования, несовместимый со старыми версиями Windows, в обновлённом протоколе ICQ?
Или устаревшие корневые сертификаты т.к. не собирается цепочка доверия.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: dartraiden on 06 07 2020, 09:45:11
Да, корневые сертификаты желательно обновить.
http://media.kaspersky.com/utilities/CorporateUtilities/rootsupd.zip
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 06 07 2020, 10:05:23
корневые сертификаты желательно обновить
Точно таким файлом несколько лет назад обновлял сертификаты (хешсуммы совпадают).
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 06 07 2020, 11:18:26
патчи от XP Embedded

Патч от XP Embedded на 2003 Server не ставится - всё-таки это не XP!

Для включения TLS 1.2 на 2003 Server я пробовал алгоритм действий, описанный здесь (https://www.atraining.ru/beast-move-from-ssl-to-tls/), но ничего не вышло - сертификат сервера ICQ всё равно не валидится. А в прошлом году с его  валидацией проблем не было. Оновление корневых сертификатов не помогает - тут что-то другое. Я даже пробовал обновлять корневые сертификаты, взяв их из Windows 7,  где они всегда свежие (сгенерил список сертификатов с  помощью certutil, затем внедрил их на 2003 Server) - не помогло.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: dartraiden on 06 07 2020, 13:08:55
Quote
А в прошлом году с его  валидацией проблем не было.
В этом году на серверах ICQ включили TLS 1.2, видимо и ещё что-то поменяли.
Это не к нам, серверами рулит Mail.ru

Как вариант, поставьте плагин OpenSSL, тогда вместо WinCrypto шифрованием займётся OpenSSL.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 07 07 2020, 05:25:47
Как вариант, поставьте плагин OpenSSL
Этот вариант я тоже пробовал. Не работает под 2003 Server.
Собственно, это не так уж и важно - валидация сертификата. Снял галочку и коннекчусь без валидации. Это был дополнительный вопрос.

Я эту тему создал, поскольку неудобство доставляет именно то, что сессия ICQ не закрывается по выходу из программы. Приходится вручную переводить статус в Offline перед закрытием программы. А это - лишнее действие, которого можно было бы избежать.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: dartraiden on 07 07 2020, 13:22:24
Я эту тему создал, поскольку неудобство доставляет именно то, что сессия ICQ не закрывается по выходу из программы.
Судя по логу, протокол честно попытался закрыть сессию, но запрос нарвался на уже закрытый к этому моменту (завершение работы приложения идёт полным ходом) сокет. У вас интернет медленный?
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 07 07 2020, 15:37:09
У вас интернет медленный?
Вообще, должно быть 100 Mbit/s. Но по тестам 2ip.ru/speed реальная скорость в разные дни составляет 80-90 Mbit/s на приём/отправку данных. Тестировал с близко расположенными сайтами (Новосибирск, Барнаул, Красноярск).
 
Я так и понял, что приложение терминируется операционной системой быстрее, чем успевает отлогиниться от серверов ICQ. В первом посте об этом и писал. 

Не знаю, медленный интернет тут виноват или "слишком умный" компьютер, который выгружает процесс из памяти в долю секунды, а, может быть, это антивирус как-то процесс разлогинивания тормозит. Думал, что плагин StatusManager как-то тут поможет, ибо увидел там слово before в настройке "Set status to offline before exit". Увы!
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 08 07 2020, 07:49:44
Даже такую хитрость пробовал - включил autobackup с архивацией при выходе из Miranda. Думал, что так на пару секунд можно затормозить закрытие приложения, но обнаружил, что бэкап делается раньше, чем disconnect с сервером ICQ. В общем, это не помогло.
Можно ли эти два действия переставить местами в программном коде (чтоб сначала шёл дисконнект, а только потом аутобэкап)? Между этими двумя действиями можно было бы и тайм-аут, настраиваемый пользователем, ввести. Кажется, это решило бы все проблемы.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: dartraiden on 08 07 2020, 11:46:37
Возможно влияет антивирус или ещё какая-то сетевая приблуда. Очень похоже, что через неё идёт трафик.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: ghazan on 17 07 2020, 07:40:32
Я так и понял, что приложение терминируется операционной системой быстрее, чем успевает отлогиниться от серверов ICQ
Нет, там всё гораздо страннее. В миранде у плагина есть 5 секунд, чтобы закруглиться, прежде чем его пришибут автоматически, тут вообще не об этом история. Тут же получается так, что перевод учетки в оффлайн выплевывает два запроса на сервер (выставить статус в оффлайн и убить сессию), при этом параллельный поток, крутящий сессию, получает ошибку, закрывает сокеты и вываливается. И вот второй запрос, который должен убить сессию, внезапно получает ошибку, что это не сокет, а хрен пойми что, и сессию не закрывает...
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: ghazan on 17 07 2020, 08:27:06
eugeny,
а вот такой вопрос, к примеру: если просто отщелкнуть аську в оффлайн, не выходя из Миранды, то будет такой эффект?
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: dartraiden on 17 07 2020, 18:58:09
eugeny, можно обновляться до последнего билда девелоперской версии и тестировать, проблема должна уйти.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 20 07 2020, 04:41:34
если просто отщелкнуть аську в оффлайн, не выходя из Миранды
Сессия закрывается всегда в таком случае.

Post Merge: 20 07 2020, 04:49:17
можно обновляться до последнего билда девелоперской версии и тестировать
Для теста 5 раз открыл/закрыл программу - сессии терминировались корректно во всех пяти попытках.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 20 07 2020, 05:00:29
И ещё у меня появилось дополнение к обсуждению коннекта с сервером ICQ (на первой странице темы я писал, что не работает валидация SSL сертификатов при логине из-под Windows Server 2003). Валидация по-прежнему не работает, но с прошлого понедельника (13.07.2020) добавилась вторая особенность - логина на сервер ICQ вообще не происходит без плагина OpenSSL. Если отключить плагин OpenSSL, то выскакивает сообщение об ошибке "Сервер не найден". При этом сервер точно в зоне доступа, так как официальный клиент ICQ для Windows логинится вообще без проблем, да и Miranda NG спокойно логинится через плагин OpenSSL (но, конечно, со снятой галочкой "Validate SSL certificates" в настройках сети).
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: ghazan on 20 07 2020, 06:03:19
eugeny,
там включились ограничения по видам cyphers, которые применяются при SSL handshake, старые и короткие отсеялись
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: eugeny on 09 10 2020, 01:36:20
Обратил внимание, что произошел переход на OpenSSL 1.1.1 в версии 0.95.13-dev-build-23395.
Попробовал вновь установить галочку в пункте "Validate SSL Certificate" - теперь у меня Miranda нормально коннектится из-под Windows 2003 Server с проверкой подлинности сертификата!
Возможно, что ошибка проверки сертификата и раньше ушла - давно не пробовал включать эту настройку на девелоперских сборках.
Title: Re: StatusManager не закрывает сессию ICQ при выходе из Miranda
Post by: ghazan on 09 10 2020, 09:55:04
eugeny,
ну да, потому что 1.0.2, на которой мы сидели, была давно уже deprecated и не обновлялась с января.
соотв. никаких фиксов и обновлений для неё не выходило, а могли запросто что-то исправить