IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2025/12/17
~AreEnn
~AreEnn_
~R4SAS
~acetone
~orignal
~villain
@onon
&N00B
+Xeha
onon 172c180
onon < if (it->first == seqn)
onon ---
onon > if (it->first == seqn && m_IsSendingAllowed) // ignore first ack after path change
onon Это добавить нужно проверку
orignal какой файл и стока?
onon В UDPTunnel.cpp
orignal счас закоммичу
onon А ещё нужно будет туда ещё один таймер добавить.
orignal закммитил
orignal потом расскажешь
onon Угу
orignal счас кое куда надо съездить
orignal реально что нам нужно это сделать чтобы зависание было вопроизводимым
onon Значит логика такая. При получении запроса на ACK if (flags & UDP_SESSION_FLAG_ACK_REQUESTED)
onon Вместо того чтобы сразу слать ACK m_LastSession->m_Destination->SendDatagram(m_LastSession->GetDatagramSession (),
onon nullptr, 0, m_LastSession->LocalPort, m_LastSession->RemotePort, &replyOptions); // Ack only, no payload
onon Заводим таймер на небольшой промежуток времени. Если таймер сработал - отправляем ACK.
onon Если в течении этого времени мы что-то отправляем, то шлём ACK вместе с данными а таймер делаем .cancel ()
onon Это нужно для двусторонней передачи чтобы не слать лишние пакеты.
onon Время таймера можно сделать параметром
onon По умолчанию 1мс думаю хватит
onon А ещё нам нужно сделать портабл версию i2pd, чтоб скачал, распаковал тыкнул бинарник и оно заработало.
onon И чтоб бравзер там встроенный был
onon Как в Торе
orignal ну это как у деда сделано
orignal так есть же портабл под винду
onon А надо под линух
orignal если i2pd.conf в той же папке где .exe лежит
orignal ну расскажи как
orignal в линуксе определить путь к бинарнику
onon Ну торбравзер же как-то сделал
onon Через шелл-скрипт
orignal ну можно
orignal сделай
onon Я не умею
onon У меня лапки
orignal pwd и передавать в параметр --datadir
onon Раскошелься на мемного монерок и попроси кого-то сделать
orignal о кстати да можно и под хайку сделать
orignal не вижу смысла
onon Не жадничай
onon Нам нужно юзерфрендли
onon А не вот это вот всё красноглазие
orignal есть же i2pdbrowser
orignal даже как то работает
onon Он обычный фуррифокс скачивает
orignal а какой смысл в этом таймере? что мы экономим?
onon Один лишний пакет
orignal с чего вдруг?
onon Если у нас обмен двусторонний
orignal там же он отпралвяется не сразу
orignal а только когда Flish
orignal *Flush
onon А какая разница
onon Лишний пакет всё равно будет
onon Просто у меня в логике было что если в буфере что-то лежит то ACK не отправляем потому что сами сейчас будем отправлять пакет и и там будет ACK
orignal разница что будет не пакет а лишь чесночина в пакете
onon А так как у тебя всё дропается то хз, отправим мы что-то или нет
orignal посмотрю
orignal кстати в стримых было также
orignal или ты переделал?
onon Нет не переделывал
orignal там по уму также надо
onon Надо
onon Вот сделай
orignal дополнительный деккриптор это
onon Тогда не делай...
orignal на каждый ебучий стрим в отличие от датаграм где поток общий
onon Ну придумай как мультиплексировать все стримы в один поток
onon Но тогда многопоточносто по разным маршрутам теряется
orignal ты давай думай как воспроизвести затык с шифрованием
onon А ты скажи куда и что логировать
onon Вот щас на 15-м пакете сломалось
orignal у тагсетов m_NextIndex
orignal это странно
onon Я там только GetNextIndex вижу
orignal вот его и распечатывать
orignal на отправителе и получателе
onon НУ вот сломалось на 42
onon На сервере
onon И дальше Can't handle...
onon Клиент при этом отправил 385 пакетов
onon На клиенте в это время Garlic: GetNextIndex 23
onon Ещё важный момент. После каждого UDP Connection: session->DropSharedRoutingPath () на клиенте Garlic: GetNextIndex сбрасыватся на 0
onon И начинается заново
orignal надо смотреть чем равно на отправителе и чему на получателе
orignal это гляну
onon Я ж написал на отправителе Garlic: GetNextIndex 23 на получателе Garlic: GetNextIndex 42
orignal значит непонятно
orignal ладно сам буду думать
onon Мне кажется он сбрасыват сессию при session->DropSharedRoutingPath ()
onon Но это только в начале, час в потоке когда уже давно работает, после session->DropSharedRoutingPath () продолжило считать так же
orignal не должно быть так
orignal проблема в том почему уменя то это не вопроизводится?
onon Не знаю, я поток шлю музыки
onon 434.7kbits/s
onon И поток я начинаю слать ещё до того как туннели построились
onon Вот щас на клиенте сломалось
onon Клиент шлёт запрос, ему серверотвечает а клиент не может расшифровать
onon Garlic: GetNextIndex 78 на клиенте
orignal а у тебя параметры выставлены?
onon Какие параметры
orignal чисто тагов
onon 800 по умолчанию
orignal нееее
orignal ты пойми
orignal что по умолчанию это не 800
orignal это максимум 800
orignal а там вначале 24 вроде
orignal короче выстави явно в 2000
onon А какой тогда смысл был делать окно?
onon Ну сделай чтоб оно по умолчанию 800 было
orignal ну так надо для датаграмм явно выставить
onon Или ещё раз объясни как это работатет
orignal надо не просто 800 а сразу 800
orignal счас
orignal const int ECIESX25519_MIN_NUM_GENERATED_TAGS = 24;
orignal const int ECIESX25519_MAX_NUM_GENERATED_TAGS = 800;
orignal там есть алгоритм который в зависимости от потока определяет сколько надо насчитатт
onon Ну тогда давай пили CC в датаграммы
orignal при старте только 24 а дальше може возрастать вплоть до 800
onon С медленным разгоном окна
orignal нет
orignal для датаграм надо просто явно выставить 800
onon Вот ты всегда ищешь самый лёгкий путь
orignal потому у меня это и не воспроизводится
onon Ладно сделаю 800 и погоняю
orignal потому что у меня явно стоит
onon Ну мы ж для того и делали чтоб со стандартными настроками работало
orignal неее вот вся эта ботва сделана под стримы под разгон окна
orignal с датаграммами такое даже не нужно
orignal ибо там сразу поток попрет потмоу как не TCP
onon Ну сразу поток не хотелось бы
onon Потому что сеть ляжет
onon Хотелось бы чтобы приложение уровнем выше само контролировало поток
onon Тот же WG
onon Чтоб не перегружало
orignal такое бывает далеко не всегда
onon Всё равно сломалось
orignal возьми тот же мультикаст он срет всем и сразу
onon Даже с 800
orignal тогда не знаю
orignal бага где то
onon Он догнал до 251
onon Потом сбросил в 0
onon Потом ещё раз сбросил в 0
onon Дошёл до 23
onon И дальше cant'handle
onon Видишь, в каких-то случаях при session->DropSharedRoutingPath () он сбрасывает сессию
onon Наверное когда там нету номера порта
orignal я думаю ты не то печтаешь для получателя
onon Почему не то
orignal порты к сессии не имеют отношения
onon Когда я ACK получаю то таги увеличиваются
orignal ты должен печатать когда пришло сообщение и то тагу нашелся тагсет вот из него
orignal это таги для отправки
orignal а еще есть таги на получение
orignal это другие тагсет
onon Куда ты сказал туда я лог и сделал
onon Garlic.cpp 1079 auto index = tagset->GetNextIndex ();
orignal bool GarlicDestination::HandleECIESx25519TagMessage (uint8_t * buf, size_t len)
orignal вот тут надо
orignal it->second.tagset
orignal если найдено вот оттуда GetNextIndex
orignal это индекс получателя
onon Ну там уже лог есть
onon LogPrint (eLogError, "Garlic: Can't handle ECIES-X25519-AEAD-Ratchet message");
onon А что туда написать
orignal нет
orignal это когда не найдено
onon Значит до if (!it->second.tagset || !it->second.tagset->HandleNextMessage (buf, len, it->second.index))
onon Добавить лог
orignal if (it->second.tagset) LogPrint ( it->second.tagset->GetNextIndex ())
orignal примерно так
orignal кстати у тебя именно это сообщение вылазит?
onon Ну когда ломается то да Garlic: Can't handle ECIES-X25519-AEAD-Ratchet message
orignal смотри
orignal получается что сам таг то находит
orignal надо разбираться почему
orignal и заметь что return true;
onon Там херня всякая
onon Garlic: GetNextIndex 1990280762
onon Garlic: GetNextIndex -67108720
onon Garlic: GetNextIndex 1077880173
orignal вот с этим надо разбираться
onon Когда поток нормально идёт то по порядку
onon А когда нет то рандомные числа
onon А на клиенте почему-то 1600
orignal ага то есть признак поломки эти числа?
onon Сначала было 800
orignal 1600 правильно
onon А сейчас 1600
orignal 2 по 800
onon Ну тут сложно сказать он же из всех сессий выводит туда
onon Может у меня там ещё что есть
onon А теперь на клиенте 2400
orignal так а ты по номеру треда смотри
orignal 2400 правильно
orignal доьавляется по 800
orignal а вот откуда мусор это совсем непразный вопрос
onon Да вначале при установке соединения там или нули или большие значения
onon Положительные или отрицательные
orignal это в любом случае не правильно
onon Сам залогируй посмотри
orignal это я буду чинить
orignal итак NextSessionTagRatchet ()
orignal где то не вызывается
onon Я смотрю он у тебя из памяти сразу читает memcpy
onon МОжет не то читает, если там такие числа вылазят
orignal он не инициализируется
orignal потому что не вызывается
onon Ааа
orignal или затирается
orignal кстати у тебя 4 или 6 шифрование?
orignal буду разбираться
orignal это то починим
onon Да время есть ещё
onon До релиза
orignal дохуя
orignal ты может тоже покопаешься с чего оно таким становится
orignal у тебя то оно воспризводится
onon У меня лапки
orignal нее
onon Я не умею в твоё шифрование
orignal так класс RatchetsTagset
orignal вот и надо понять откуда там мусор
orignal шифрование например
orignal лог в констукттор
orignal лог в NextSessionTagRatchet
onon Я логики не знаю, кто кого вызывать должен
onon Ты лучше сам наверное
orignal логика в том чтобы отследаить судьбу m_NextIndex
onon Тагов у себя поменьше сделай
onon И воспроизведётся
orignal так у меня наверное не воспроизведется
orignal воспроизвелось
orignal Garlic: tagset next index-869544426
onon Отож. Я не вру
orignal короче это не имеет отношения к делу
orignal это публикация самого роутера
onon Ничего не понял, но шифрование-то ломается
orignal и да это надо поправит
orignal оно ломается не из-за этого
orignal смотри
orignal когда ты публикуешь роутер
onon А я уж думал нашли...
orignal на флудфиле
orignal ты для него шифруешь себя
orignal а для ответа делаешь одноразовый тагсет
orignal короче счас починим
onon А ты подольше потестируй и вылезет не только там
orignal но это не бага
orignal это на самом деле SymmetricKeyTagSet
onon Ну ладно, убедил
onon Но шифрование всё равно ломается
orignal угу
orignal надо копать дальше
onon У меня оно и там где норм числа @804 и там где -1412692398 тоже @804
orignal разные тагсеты потому что
onon Ааа
orignal счас закоммичу
orignal никаких проблем больше нет
onon И не ломается шифрование?
orignal нет
orignal все четко
onon Может и стримы зависать перестанут...
orignal оно вообще никакого отноешния не имеет
orignal это чисто чтобы не смущать при печати
onon Значит в стримах что-т другое
orignal естествено
orignal weko кстати когда то пытался разобраться
onon Не вижу коммитов новых
onon Ещё не делал*
orignal счас будет
onon Не торопись просто спросил
orignal лови
orignal понимаешь у меня не вылазит эта ошибка
onon Ты значит плохо тестируешь
onon Поверхностно и без энтузиазма =)
orignal ну так а как по другому
orignal я гоню поток а не вылазит
onon Ну оно на старте ломается
onon Ты клиента, откуда поток гонишь перезагружай роутер
orignal так я же говорю я на одном и том
orignal а если не перезагружать
orignal или рестартовать черкз 5 минут?
onon А если не перезагружать то если сразу заработало то и будет дальше работать
onon У меня часа 3 работало без перерыва
orignal а бывает что сразу не работает?
onon Конечно
orignal давай отделим мух от котлет
orignal вот мне надо сценарий когда на одном и том же ломатеся
orignal без перезагрузки
onon У меня на разных....
orignal это не важно
onon Это вроде как более реальный сценарий
orignal главное без перезагрузки
orignal перезагрузка там понятно почему
onon Почему
orignal потому что сессию можно заменить только через 2 минуты
onon Так меняется же b32
onon После перезагрузки
orignal точно меняется?
onon 100%
orignal а сколько сессиий на сервере?
orignal в этот момент
onon Ну после перезагрузки 2
onon Старая и новая
orignal ну вот я думаю там путаница с сессиями
onon Потом старая закрывается
orignal если новый b32 то надо смотреть
orignal но для начала надо вопроизвести без преезагрузки
onon Без перезагрузки я думаю не воспроизведётся
onon Вот щас сделал перезагрузку сломалось
orignal надо точный ответ
onon А как мне это тестировать
orignal если это только при перезагрузке значит идет путаница с сессиями
orignal на одном роутере несоклько раз запустить и остановить
onon Ждать пока протухнет сессия на сервере?
orignal кстати да
orignal останови клиента
onon Так а на разных в чём отличие
orignal и снова минут через 5
onon Если поток включать и выключать то всё рабтает
orignal не в чем
onon Если например слать поток потом перестать и снова начать то нормально работает
orignal наща задача ответить на вопрос ломается ли без перезагрузки
orignal будем действовать методологически правильно
onon Нет, без перезагрузки у меня не ломалось
orignal вот
onon По крайней мере я такого не заметил
orignal теперь надо понять что при перезагрузке ломает шифрование
onon Ну перезагружается клиент, на сервере остаётся старая сессия
onon Клиент пытается подключиться
onon На сервере может он старую сессию к новому клиенту как-то пытается подсунуть?
orignal видимо да
orignal есть бага
onon Типа нет проверки на b32
orignal должа быть
onon Ты же что-то делал чтоб без дестинеёшна были датаграммы
orignal потому мы и должны понять что будет если дождаться протухания старой сессии
onon МОжет там косяк
onon Он же на тот же порт идёт
onon Новая сессия
onon А адресса нету
orignal у новой сессии то и статческий ключ другой будет
orignal сессия определяется статическим ключом
onon Ну тут я только предположения выдвигаю
orignal дестинейшин никакой роли не играет
orignal лучше проверить
orignal что проблема именно когда 2 сессии
onon Ну жду пока протухнет...
onon Лизсет
orignal а ксттаи
orignal а нет забей
orignal достаточно чтобы протух не лисет а сессия
onon А если LeaseSet: 0 а Tags sessions: 1
onon Это уже можно или ещё подождать
orignal подождать
orignal надо чтобы не было сесиий на сервере
onon Всё равно сломалось
onon Даже без старых сессий
onon Вот перезапустил щас
orignal а можно ли на один сервер натраивать два клиента
orignal первый гонит поток мы его не трогаем
orignal поключаем второй и смотрим
onon Щас попробую
onon Оно у меня и на одной машине сломалось
onon И клиент и сервер на одном роутере
orignal от второй сессии?
onon Нет вотрую я даже не запускал
orignal ну рассказывай сценарий
onon Просто сделал как в твоём сценарии
onon И клиент и сервер на одном роутере
orignal сломалось сразу или через время?
onon На клиент начал слать поток
onon Сразу
orignal а сервер что?
onon Ну на сервере сессия создалась
onon И на клиенте тоже
onon Но ничего не расшиыровывается
orignal ну а номера какие были?
orignal вообще ничего или хоть что то проходило?
onon 502
orignal потому что сессия же как то создалась
onon Не знаю, входящих UDP пакетов я не зафиксировал
orignal а должны быть
orignal потому что при создании сессии все равно пейлоад идет
onon Ну каждый раз по разному
onon Иногда может пакетов 300 пролезть
onon А потом ломается
orignal и все на одном роутере?
onon Иногда 7
onon ВОт щас наверное0
onon Или 1
onon Да
orignal ну так ты номера скажи на отправителе и на получателе
orignal а ошибка Garlic: Can't handle ECIES-X25519-AEAD-Ratchet message?
onon Да
orignal а перед ней что?
onon А перед ней GetNextIndex 0
orignal и больше ошибок нет?
onon На уровне error нет
orignal it->second.tagset->HandleNextMessage
orignal тут явно что должно быть
orignal чего то же фейлится
orignal эта ошибка постоянно лезет или разовая?
onon Ну когда клиент свой пакет шлёт
onon То на сервере она вылазит 1 раз
onon Потом таймайт
onon И снова клиент шлёт
onon И снова на сервере ошибка вылащит
orignal так один раз это может быть просто ответ на публикацию например
orignal ага на каждый пакет от клиента стало быть ошибка
onon Нет это ответ на GetDatagramDestination ()->SendDatagram (session, nullptr, 0, 0, 0, &options);
onon А так когда поток идёт то да на каждый пакет ошибка
onon Они тогда очень быстро и много такихх ошибок
orignal разбираться надо что в HandleNextMessage
orignal там ставь логи
onon Это где
onon В Garlic или ratchet
orignal ECIESX25519AEADRatchetSession.cpp
onon Там их несколько
orignal в тагсете разумеется
orignal но оно дальше вызовет из сессии
onon Ты строку скажи
onon И чего там логировать