~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest7184
Leopold
Nausicaa
Ruskoye_911
Vort
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
nick_kramer_117
orignal: "Переписать с ипозованием boost::asio и std, вместо прямых системных вызывов.
nick_kramer_117
Дублирование кода из HTTPServer.h/.cpp - такой сервер уже там есть." - Возьму на вооружение/изучение boost::asio. Про дублирования кода - хотел сделать не зависимый TCP сервер от HTTP
orignal
nick_kramer_117 ты объясни нам что за задачу решаешь снчала
orignal
мы целый день гадаем
orignal
разумеется в любом случае без пряммых вызвов как ты сделал а через буст как везде чтобы переносимость была
orignal
для тредов используй std::thread
orignal
Vort в TunnelEndpoind.cpp
orignal
и в NTCP2.cpp
nick_kramer_117
Просто хотел сделать изночально консольный вывод информации об i2pd роутере.
orignal
там создаются они
orignal
а сервер отдельынй зачем?
nick_kramer_117
Чтобы вдальнейшем можно было сделать проброс инфы удалённо, как вэбконсоль (грубо говоря аналог вэб консоли).
orignal
а чем тебе I2PControl не устраивает как говорит polistern
orignal
он как раз для этого запросы и ответы в JSON
orignal
может добавлять свои команды какие надо
nick_kramer_117
Так Я хотел изучить этот момент, но почему то переходя по ссылке на сайте i2p, на тему I2PControl мне писало что "ресурс временно не лоступен".
Словесник-Былинник
не нравится мне ваши идеи. На пятки наступаете
nick_kramer_117
не доступен*
orignal
так ты бы код поизучал
orignal
не смысла городить еще один сервер
orignal
кстати вся инфа о роутере давно уже отдается
nick_kramer_117
itoopie.i2p.xyz - вот тут пологаю должно было быть подробности про i2pcontrol
nick_kramer_117
Но эта ссылка не работает. Хотелось бы посмотреть пример как актевировать ш2зконтрол
nick_kramer_117
Всё подразобрался) приношу извинения запотраченное время, проще реально работать через JSONRPC
nick_kramer_117
Чем как Я нагородил корявый тсп сервер
orignal
itoopie это малый кусок
nick_kramer_117
Я уже понял, на днях заюзаю ш2зконтрол
Vort
натыкал логирование в TunnelEndpoint.cpp и NTCP2.cpp
Vort
теперь полно в логах вот такого: TunnelMessage: I2NP message size 2106 is not enough, msg.data->len: 2052
Vort
то есть, 62к создаётся задолго до пересечения границы в 4096 байт
Vort
а вот что именно создаётся при пике - это ещё надо выловить
orignal
я там не помню
Vort
интересно, там хоть иногда бывает enough. а то что-то часто пишет в лог
Vort
(немного наугад спрашиваю) может, туда можно 4096 блоки втыкать когда 2106 не хватает?
orignal
может и правда кося
orignal
почему 2106 не хватает для 2052?
Vort
ну там ещё size должен влезть
orignal
разбираться надо
Vort
я так и не понял, как он считается
orignal
посомотрю я
Vort
if (msg.data->len + size > msg.data->maxLen)
orignal
ну это смещение
orignal
там сложно все
Vort
у меня дурацкая идея воткнуть туда тупо NewI2NPShortMessage вместо NewI2NPMessage. сломается всё или нет? )
Vort
хотя там наверно два уровня проверки в таком случае должно быть
Vort
что если в 4к не влезет, тогда уже 62к делать
Vort
сейчас узнаю, сломал или нет
Vort
да вроде прожевало 4к блок нормально )
Vort
интересно, получится ли ситуация, когда и 4к не хватит
orignal
смотри в чем идея
orignal
2K там не просто так а с расетом на стандартный пакет стримов
orignal
который 1700 с чем то байт
orignal
плюс всякие там заголовки
orignal
и вот на конеце тоннеля расчет такой что как правило будет такой пакет
Vort
там два места с NewI2NPMessage. и в том и в том случае ожидается стандартный размер?
Vort
я просто в одном случае вижу много невлезаний, а в другом - мало
orignal
с этим надо разбираться
orignal
я говорю просто в чем идея
Vort
в ConcatFollowOnFragment невлезает чаще, а в ConcatNextOutOfSequenceFragment - реже
orignal
я прнояду чего там
ovril
orignal: а есть какие-то способы весь трафик системы завернуть в i2p принудительно?
HidUserZ
Вроде был
weko
Ну примерно тоже самое что и с торификацией
HidUserZ
Ну в торификации вроде transparent proxy
weko
[23:29:07] <nick_kramer_117> Я уже понял, на днях заюзаю ш2зконтрол
weko
Если за это взялся, напиши, чтобы было как аналог вебконсоли! Там придётся команды дописать, но это я и прошу. Там ещё иссуй от ацетона висит, с запросом команд для ш2з-контрол
weko
HTTPServer: Duplicate remote endpoint detected: <ip>
weko
Это что? Вебконсоль?
weko
Я там какие то айпишки левые увидел
weko
Хотя у меня консоль не доступна всем подряд
Vort
и опять добавленных логов не хватило чтобы понять, где во время пика создаются 62к сообщения :(
Vort
всякие странности и интересности понаходились, но мне надо именно то, что я ищу, а не что попало
Vort
вот одна из интересностей к примеру: paste.i2pd.xyz/?086a515d4c51600b#4JDiwjg1wfqbUcR8BzvkcsSb58xFKXpoppNf85xZf1Wo
Vort
ну понятно. посмотрел я самостоятельно, откуда могут идти вызовы NewI2NPMessage(). в коде столько мест, что отладочные сообщения растыкивать задолбаешься
Vort
придётся делать то, что надо было делать сразу - печатать стеки в конструкторе. точнее, в NewI2NPMessage ()
orignal
так тебе не надо твои тебе надо только приходящие
Vort
мне надо понять, что даёт пик. а мои или не мои покажут трассировки стеков. если удастся словить пик
orignal
ты в NTCP2 смотрел?
orignal
нет оснований полагать что длинные сообщения не передаются и через NTCP2
weko
orignal:
weko
[06:31:08] <b39775weko> HTTPServer: Duplicate remote endpoint detected: <ip>
weko
[06:31:08] <b39775weko> Это что? Вебконсоль?
weko
[06:31:27] <b39775weko> Я там какие то айпишки левые увидел
weko
[06:31:44] <b39775weko> Хотя у меня консоль не доступна всем подряд
Vort
"ты в NTCP2 смотрел?" смотрел. но поставил немного неверное условие. надо было не size > 4096, а size >= 4078 ставить
orignal
я не знаю о чем это
weko
orignal: это о логах
weko
В логах такое
Vort
а, это я добавлял кажется
Vort
да, точно
Vort
забей )
weko
И что оно значит
orignal
а самому то в код глянуть не судьба? ))
weko
Почему в логах про вебконсоль левые айпи
weko
Хотя их там быть не может
Vort
чтобы это починить, надо делать потокобезопасность вебконсоли
Vort
это вылазит, когда ты смотришь список адресов
Vort
через консоль
orignal
это транспорты
weko
Аа
weko
Ясно
orignal
очевидно же по коду
weko
Понятно
weko
Я могу код и неверно понять, а потом окажется что это реально кто-то стучиться
polistern
orignal, пока ничего лучше не придумала, чтобы Ping добавить в i2pcontrol. Есть возражения?
orignal
у меня есть лучше идея: добавить команду в боб
orignal
но можно и в i2pcontrol но тогда он всегда пойдет с shared local destination
orignal
кстати боб мы можем менять как хотим ибо джава его уже не поддерживает
weko
ну я понимаю что вы держите боб для совместимости
weko
но зачем его дополнять
weko
есть же новый SAM
weko
ну "новый"
orignal
потому что в боб проще
weko
<~orignal> но можно и в i2pcontrol но тогда он всегда пойдет с shared local destination
weko
так можно сделать выбор дестинейшена.
orignal
и боб не только для совместимости
orignal
он для технических нужд типа lookup
weko
а что там есть что нету в sam?
orignal
потому ping в дполнение к lookup смотрится огичным
weko
в сам есть же lookup
weko
ну по сути то да
orignal
i2pcontrol на данный момент не умеет создавать дестинейг=гины
orignal
в отличие от боба
weko
мне не нравится вот это зоопарк протоколов
weko
этот*
weko
orignal: в SAM есть же lookup вроде, так что боб в этом смысле не уникален
orignal
по мне вот сэм это какой то набор костялей
orignal
там другой
weko
реализация или сам протокол?
orignal
там не ищет лизсет
orignal
сам протокол дурацкий
orignal
боб по моему мнению много перспективнее
orignal
и разуменее сделан
weko
а боб чем плох что его в джаве слили
weko
просто лень было его поддерживать?
orignal
он не угодил лично деду
orignal
там какие то разборки были с его автором
weko
лол
weko
опять из-за разборок страдает продукт
orignal
там не то что разборки
orignal
тот чувак свалил а дед не стал его развивать
orignal
там наример была подпись DSA толлько
orignal
боб с EDDSA есть только у нас
orignal
у них никогда не было
weko
весело
orignal
там нет датаграм
weko
может стоит навести порядок, это мягко говоря странно
orignal
которые можно сделать легко
orignal
ну так я о чем и говорю мы ты от боба отказываться не планиурем
weko
хорошо тогда нужна к нему документация полноценная
orignal
у нас еще есть команда lookuolocal которая ищет лизсет в нетб если фулфдфил
weko
у джавистов же старая
weko
а всё остальное также ?
orignal
да
polistern
Как передавать в него параметры можно потом докрутить отдельно. Хоть во всю троицу его добавить. Главное первый шаг сделать. Ну и плюс пинг то это утилита по сути, и вот в CLI смотрелся бы органично.
orignal
полностью аналогично lookup
orignal
lookup только возращает адрес а ping должен время в милисекундах
orignal
короче делай как считаешь лучше
weko
при чём время именно запроса наверное, с вычетом lookup
orignal
естествено
weko
а что не нравится в SAM именно
orignal
команданая сессия
weko
всмысле?
orignal
ты для поддержания сессии должен держать открытым сокет
orignal
отдельный
weko
да, и чем это плохо
weko
если программа не может держать сокет значит и данные слать не выйдет
weko
а если ссесия не нужна то она закроется даже если если по какой то причине этого не произошло
orignal
а если просто лаганула сеть то дестинейшин сдохнет
weko
палка о двух концах...
weko
ну лаганула как ? на таймаут сокета?
weko
этож надо сокет закрыть намеренно
orignal
собака провод выдернула ))
weko
ну там и данные передать не выйдет
orignal
так ты воткнул обратно и все надо создавать по новой
orignal
дестинейшин тоннели лизсеты
weko
на такой случай нужен умный роутер который будет не удалять дестинейшен, а замораживать его ))
weko
типо оставлять туннели, но новые не создавать
orignal
ну так надо логику сэма менять
orignal
но никто ж этого не сделал
weko
мне кажется задумка хорошая
weko
что зачем нужен б32 если программа которая его использует не может с ним работать
weko
при этом программа забагала и не закрывает б32
weko
да даже если и не багала
weko
соединение порвалось и дестинейшен остался висеть на веки вечные
orignal
ну у боба есть команда его прибить
weko
ну вот, а если её не выполнить
weko
будет висеть вечность
polistern
Наверное тогда пока в боб, хоть тестить проще будет. Там считай всё готово для этого. Сегодня-завтра скажу что да как с пингом.
orignal
ну да вот давай попробуем
Vort
по поводу пиков. такое ощущение, что пакеты просто где-то зависают. и всё
orignal
в хэше в TunnelEndpoint где же еще
Vort
есть несколько подозреваемых создателей таких пакетов. основные: i2p::garlic::WrapECIESX25519Message, i2p::CreateRouterInfoDatabaseLookupMsg и i2p::garlic::ElGamalAESSession::WrapSingleMessage
Vort
с количеством созданий аномалий нет вообще никаких
Vort
правда, особо большой пик я пока что не словил. но похоже это всё не на атаку, а просто на какой-то глюк
orignal
да ты прав
orignal
auto m = NewI2NPMessage ();
orignal
в std::shared_ptr<I2NPMessage> WrapECIESX25519MessageForRouter (std::shared_ptr<const I2NPMessage> msg, const uint8_t * routerPublicKey)
orignal
{
Vort
ну я же все эти места и смотрю
orignal
вот нахуя я так делаю?
Vort
это отдельный вопрос :)
Vort
такс, мне надо рестарт. место закончилось. придётся стеки удалять :(
Vort
почему оно создаётся - это отдельный вопрос. меня же интересует почему оно не удаляется вовремя, а зависает в памяти. ну и какой из перечисленных типов так делает надо бы узнать
orignal
я думаю зависает потому что висит в очереди на отправку
Vort
у какой-то из разновидностей (по месту создания) выше шанс так зависнуть? или примерно одинаково?
orignal
одинаково
Vort
как я понимаю, самый простой вариант - попробовать обернуть эти сообщения в буферы размером поменьше
Vort
даже если и будет зависать, то не так много
orignal
да так
orignal
<orignal> auto m = NewI2NPMessage ();
orignal
вот это никуда не годится
orignal
но надо учитывать размер обертки
orignal
чем я и займусь
Vort
ну и глянь если можешь почему слишком часто не влазят сообщения в TunnelEndpoint::ConcatFollowOnFragment
Vort
может, это и норма, я не знаю, но у меня вызывает подозрение
Vort
кстати, мой вариант запихнуть в 4к сработал. очень редко и 4к не хватало, но в целом было норм
orignal
насколько часто по сравнению с тем когда влазит?
orignal
*** ушел ***
Vort
вот этого не глянул. но чтобы каждую секунду по несколько раз не влазило - это постоянно
Vort
ещё и размер подозрительно гуляет. 2048, 2050, 2052
Vort
других вариантов невлезания не замечал
Vort
отключу логирование стеков. похоже, ничего ценного больше я из них сейчас не выжму. заодно поставлю логирование размеров в TunnelEndpoint
Vort
уже вижу паттерн относительно TunnelEndpoint::ConcatFollowOnFragment
Vort
всегда влазит, когда 1к (логично), никогда не влазит когда 2к (почему?)
Vort
я видел по истории коммитов, что когда-то было сделано удвоение размера буфера. ну так вот, видимо, сделано не до конца
Vort
ну это так кажется по результатам поверхностного анализа
Vort
1052, 1054, 1056 - влазят, 2048, 2050, 2052 - не влазят
Vort
а нет, я не прав!
Vort
иногда 2048, 2050, 2052 тоже влазят
Vort
так что надо разбираться с условиями, когда они влезть не могут. явно "size" другой. но каким он бывает - я пока не разобрался
Vort
добавлю ка его печать, чтобы уже было однозначно
Vort
в общем, этот +size бывает примерно до килобайта
Vort
2k+1k понятно, что не влезет
Vort
orignal: посчитал за 10 минут аптайма: влезло 1166 раз, не влезло 107 раз
Vort
за 20 минут аптайма: влезло 2394 раз, не влезло 217 раз
Vort
9% невлезаний получается
Vort
ещё одну вещь надо отметить (чуть по другой теме):
Vort
похоже, что пул для IdentityEx таки притормозил раздувание кучи
orignal
ага все так обычно влезает
Vort
то есть, 9% невлезаний - это типа норма?
Vort
даже если и так, то всё равно сомневаюсь, что аж 62к надо выделять
Vort
хотя может это и не страшно, хз
orignal
ну я это чиню счас
Vort
окей
orignal
я к тому что это не бага
orignal
сделал
polistern
orignal, базово сделала, но ответы не получаю. Вызываю Stream::SendPing и потом жду ответ через Receive. Видимо как-то по другому нужно понги отлавливать.
orignal
а как сделано для keepalive?
polistern
Только отправка
orignal
надо посмотреть мы вообще ответы обрабатывыаем?
polistern
Неа
orignal
возможно этого кода просто нет ))
polistern
Тоже думала подсмотреть, но ничего не нашла))
orignal
надо его написать значит ))
orignal
ну не написал как обычно
polistern
Так я о чём, они по особенному приходят?
orignal
так посмотри как они отправляются
orignal
отправляться то они точно отправляются ибо notbob с i2pd работает
orignal
ну соотвесвенно надо ловить их получаение
orignal
в том месте где мы ловим пинги
polistern
Формируется ECHO пакет и шлётся через SendPackets.
orignal
а какие там номера стримов?
polistern
Где там?
orignal
строка 1214 Streaming.cpp смотри
orignal
там просто в лог пишется
orignal
а надо какой то коллбык там вызывать
orignal
/ pong
orignal
LogPrint (eLogInfo, "Streaming: Pong received rSID=", packet->GetReceiveStreamID ());
orignal
DeletePacket (packet);
orignal
return;
orignal
то есть понимаешь мы его просто дропаем хотя и получаем
polistern
Аааа, всё, ща что-нибудь придумаю
orignal
смотри как сделан коллэк для ацептора
orignal
примерно также
polistern
В кои то веки в нутро этого нашего I2P полезла))
orignal
подверишашь коллбэк ддя пинга и его вызываешь там если есть
orignal
а в твоем коллбэке уже что надо делаешь
orignal
естесвенно туда номер передаешь чтобы знать какому пингу соотвествеует
polistern
Ага
orignal
я просто не доделал ибо не знал что с ним делать
polistern
Можно просто сделать SetPongCallback, и вызывать его в HandlePong
orignal
можно
Vort
orignal: так а в тех функциях, которые, собственно, участвуют в создании пиков потребления RAM, блоки настраиваемого размера сделать можно?
Vort
"i2p::garlic::WrapECIESX25519Message, i2p::CreateRouterInfoDatabaseLookupMsg и i2p::garlic::ElGamalAESSession::WrapSingleMessage"
orignal
это следубщий шаг
Vort
ок
orignal
там надо уметь вычиислять длину
orignal
потмоу что там же всякие заголовки
orignal
и ее надо посчитать там аккаунтно