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
это другие тагсет
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 шифрование?
onon
4
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
Ещё не делал*
onon
?
orignal
счас будет
onon
Не торопись просто спросил
orignal
лови
orignal
понимаешь у меня не вылазит эта ошибка
onon
Ты значит плохо тестируешь
onon
Поверхностно и без энтузиазма =)
orignal
ну так а как по другому
orignal
я гоню поток а не вылазит
onon
Ну оно на старте ломается
onon
Ты клиента, откуда поток гонишь перезагружай роутер
orignal
так я же говорю я на одном и том
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
первый гонит поток мы его не трогаем
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
И чего там логировать