~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+relaybot
Most2
Nausicaa
Vort
Xeha
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
poriori_
profetikla
soos
un
weko
whothefuckami_
НАТАШКА
Vort
orignal: глянь, какой RI я обнаружил ^
orignal
что там?
orignal
счас
Vort
мне кажется, это может быть одной из причин 0.0.0.0:0 в логах
Vort
но не главной, к сожалению
orignal
неее
orignal
мы просто будет считать такие адрес без IP и всн
Vort
мне кажется, что эти нули просачиваются куда-то
orignal
отсюда вряд ли
orignal
они берут из relay мне кажется
Vort
я просто увидел ошибку, намекающую на то, что такой нулевой адрес был в списке транспортов
Vort
ну и непосредственно SSU2 ошибки тоже в это время лезли
orignal
надо разбираться откуда он
orignal
начиная с RouterInfo.cpp
Vort
стал делать поиск по netdb и обнаружил всего один адрес с нулями
Vort
может, конечно, совпадение просто
orignal
думаю что да
Vort
надо попробовать к этому узлу подключиться через explicit peers
orignal
там проблема сложнее
orignal
просто не поключится я думаю
orignal
if (!ecode && !address->host.is_unspecified ())
orignal
{
orignal
if (!i2p::transport::transports.IsInReservedRange (address->host) ||
orignal
i2p::util::net::IsYggdrasilAddress (address->host))
orignal
isHost = true;
orignal
такое сразу отфильтруется
Vort
Tunnels: ElGamal router xnv8eiDNA~Q7QEyvj3n~xUOTu2ZIkpxwLhWEvIpDAhU= is not supported
Vort
хм. ладно. значит, надо искать дальше
orignal
логично
orignal
мы больше не поддреживаем элть-гамаль для тоннелей
Vort
то есть, к этому узлу никак коннект не инициировать?
Vort
только если кто-то другой запросит
orignal
так у других та же ситуация
Vort
ну как-то он в netdb ведь попал
Vort
опубликовался что ли?
orignal
ты ведь флудфил
orignal
он у тебя опубликовался
Vort
orignal: think-async.com/Asio/boost_asio_1_30_2/doc/html/boost_asio/reference/ip__address_v4/is_unspecified.html
Vort
This function tests whether the address is the unspecified address 0.0.0.0
Vort
"<~orignal> if (!ecode && !address->host.is_unspecified ())"
Vort
то есть, "// we consider such address as invalid " может не срабатывать
orignal
конечно
orignal
суть в то что isHost не станет true
Vort
а от простановки eTransportUnknown что зависит?
Vort
зачем-то же эта строка там нужна
orignal
я уже не помню для чего там такое
Vort
ну вот стоит проверить
orignal
это про адреса из диапазона
orignal
зарезевированного
orignal
влияет на то что адрес будет выброшен целиком
Vort
ну так 0.0.0.0 и надо бы целиком выбрасывать. а зачем его выбрасывать как-то иначе?
orignal
нет я считаю что там адрес есть просто у него публичного IP нет
orignal
заметь что это правда в этом случае
orignal
потому что иначе он бы с тобой не соединился
orignal
иначе говоря 0.0.0.0 означает правильный адрес с неправильным IP
orignal
а если адрес из левого диапазона то весь адрес негодный
Vort
тот брекпоинт, который я ставил, на отправку, так и не сработал. зато я поставил ещё и warn уровень логов и нашлось вот такое: SSU2: Session with 0.0.0.0:0 was not established after 5 seconds
flumental
вы как-то кросс-компилируете i2pd с помощью cmake?
Vort
flumental: да, смотри как на гитхабе сборка идёт
Vort
хотя я может путаю. сейчас проверю
flumental
ну вроде да, там как-то просто собирается
flumental
видимо я у себя чего-то сломал, что у меня хедеры берутся и из системы и из кросс-компилятора, перекрывая определения друг друга
Vort
главное, чтобы правильно название компилятора определялось
Vort
хочешь же собрать в линуксе для винды, да?
flumental
не у меня все сложно) я же через xmake делаю
flumental
вроде когда-то уже собирал но потерял тот рецепт
Vort
в общем, про гитхаб - то я с другим проектом попутал
Vort
там используются x86_64-w64-mingw32-gcc x86_64-w64-mingw32-g++ x86_64-w64-mingw32-windres и x86_64-w64-mingw32-dlltool
Vort
устанавливается sudo apt install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64
flumental
вот boost, openssl, zlib собираются и кросс-компилируются, а ш2з не хочет
flumental
вдруг идеи какие будут, от чего такое может быть
flumental
n file included from /usr/include/inttypes.h:27,
flumental
from /home/satori/.xmake/cache/packages/2408/i/i2pd/2.53.1/source/libi2pd/Base.h:12,
flumental
from /home/satori/.xmake/cache/packages/2408/i/i2pd/2.53.1/source/libi2pd/Base.cpp:12:
flumental
/usr/include/stdint.h:79:33: error: conflicting declaration 'typedef long unsigned int uintptr_t'
flumental
79 | typedef unsigned long int uintptr_t;
flumental
| ^~~~~~~~~
flumental
In file included from /usr/x86_64-w64-mingw32/sys-root/mingw/include/crtdefs.h:10,
flumental
from /usr/x86_64-w64-mingw32/sys-root/mingw/include/stddef.h:7,
flumental
from /usr/lib/gcc/x86_64-w64-mingw32/14.1.1/include/stddef.h:1,
flumental
from /usr/include/stdlib.h:32,
flumental
from /home/satori/.xmake/cache/packages/2408/i/i2pd/2.53.1/source/libi2pd/Base.cpp:9:
flumental
/usr/x86_64-w64-mingw32/sys-root/mingw/include/corecrt.h:75:44: note: previous declaration as 'typedef long long unsigned int uintptr_t'
flumental
75 | __MINGW_EXTENSION typedef unsigned __int64 uintptr_t;
Vort
похоже на баги в mingw
Vort
flumental: попробуй #include <inttypes.h> поменять на #include <stdint.h>
Vort
ну это я почти наугад советую ) в Википедии написано, что inttypes.h "включает в себя заголовочный файл stdint.h". может, сработает
Vort
inttypes, правда, дофига где по i2pd растыкан. но если сработает в одном месте, то может и в других сработать
flumental
я лучше попробую потыкать через cmake сборку а не через xmake
Vort
flumental: похоже? stackoverflow.com/questions/71598570/conflicting-typedefs-when-cross-compiling-for-windows-on-linux
Vort
ошибки в первую очередь гуглить стоит
flumental
как будто помогло
flumental
а как такое впихнешь в гугл-то
flumental
обычно оно просто красной рекой логов течет
flumental
так, теперь надо под андроид глянуть чего у меня ломается
Vort
"<flumental> как будто помогло" что помогло? смена xmake на cmake? или совет из stackoverflow ?
flumental
stackoverflow, я добавил -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER
flumental
при сборке openssl под андроид вот такое красное
flumental
CMake Error at /home/satori/Android/Sdk/ndk/27.0.12077973/build/cmake/flags.cmake:46 (if):
flumental
if given arguments:
flumental
"hwaddress" "IN_LIST" "ANDROID_SANITIZE"
flumental
Policy CMP0057 is not set: Support new IN_LIST if() operator. Run "cmake
flumental
--help-policy CMP0057" for policy details. Use the cmake_policy command to
flumental
set the policy and suppress this warning.
Vort
ну то я даже гуглить не рискну - с андроидом не знаком
flumental
cmake обещает скоро дропнуть поддержку языка cmake 3.5 и ниже
flumental
исправилось с помощью -DCMAKE_POLICY_DEFAULT_CMP0057=NEW
flumental
вот как человеки догадаться до такого должны
flumental
оно ведь чисто на удачу и магию
flumental
А вроде бы getifaddrs добавляли в i2pd под андроид?
flumental
ругается что не может найти такое
flumental
libi2pd/util.cpp:380:7: error: use of undeclared identifier 'getifaddrs'; did you mean 'ifaddrs'?
flumental
380 | if (getifaddrs(&ifaddr) == -1)
Vort
orignal: я частично понял, в каких ситуациях лезет "SSU2: Session with 0.0.0.0:0 was not established"
Vort
это сессия с интродьюсером, но не в состоянии eSSU2SessionStateIntroduced, а в eSSU2SessionStateTerminated (eSSU2TerminationReasonNormalClose)
Vort
но как такое возможно? SSU2Session::Terminate ведь должна отменить таймер (m_ConnectTimer.cancel ();)
Vort
из разных потоков вызов таймера и Terminate идут что ли? в таком случае это гонка и надо думать, какие ещё могут быть последствия
Vort
github.com/PurpleI2P/i2pd/blob/349c4e30b677436e73dca6e280468cdc1cbda5a9/libi2pd/SSU2Session.cpp#L263-L264
Vort
может, достаточно отменить таймер вначале, а только потом m_State = eSSU2SessionStateTerminated; делать?
orignal
так погоди а нули то откуда?
orignal
не так не поможет
orignal
тогда надо это делать на коллбэке аймера
Vort
orignal: я так понял, нули изначально, до ответа интродьюсера. но почему-то вместо ожидания срабатывания таймера, сработал Terminate
Vort
ну точнее я просто в структурах данных видел 3 интродьюсера
Vort
из чего сделал вывод
Vort
ты же что-то менял в системе интродьюсеров, может и досрочный Terminate тогда добавил?
Vort
типа "интродьюсеры обделались, нечего ждать 5 секунд"
Vort
вот только поток оказался другим. ну это я гадаю
orignal
ну так получается то всего лишь сообщение об ошибке
orignal
мы пытались установить сессию с тем с кем IP адрес не знаеми
Vort
ну из очевидного - да, а что ещё гонка может дать - это так сразу не скажешь
Vort
мне гонки в любом случае не нравятся
Vort
вторая ошибка, где порт ненулевой - интереснее, но она более редкая и пока что мне её выловить не удалось
orignal
гонка с чем?
orignal
там все в одном треде должно быть
Vort
а иначе ту ситуацию, которую я наблюдал, получить нельзя. или я что-то не так понял
Vort
как можно получить Terminate, а потом срабатывание таймера, если таймер отменяется внутри Terminate?
orignal
от не отменяется
orignal
там только создается запрос на отмену
orignal
асихронный
Vort
даже если в одном и том же треде что ли?
orignal
да
orignal
в этом смысл асихронных операций
orignal
даже если в том же треде то запрос встает в очередь и выполнится потом
Vort
получается, убедиться, что таймер таки отменился, нельзя?
orignal
у него эе коллбэк есть
orignal
так и не надо убеждаться
orignal
там же в коллюэке проверка кода есть
orignal
срабатывание или отмена
Vort
так раз я получил сообщение в логе, значит код был без отмены
Vort
у меня брекпоинт в средине сработал
Vort
вот здесь моя ловушка сработала: github.com/PurpleI2P/i2pd/blob/349c4e30b677436e73dca6e280468cdc1cbda5a9/libi2pd/SSU2Session.cpp#L153
Vort
и в этом самом месте был m_State = eSSU2SessionStateTerminated
orignal
ну значит поставился
orignal
это я погляжу
orignal
сотмри
Vort
eSSU2SessionStateTerminated ставится только внутри SSU2Session::Terminate, там же, где и отменяется таймер. поэтому я про гонку и подумал
orignal
мы поставили Terminated запросои отмену
orignal
запрос стал в очеоедь а в этот момент сразбота таймер
orignal
вот и все
orignal
в то место надо просто поставить проверку
Vort
таймер же тоже в очередь ставится, да? то есть, стал в очередь таймер первым, а следом за ним запрос отмены?
Vort
но вообще странно это. но если так буст сделан, то ничего не поделаешь
orignal
нет он не очередь
orignal
грубо говоря там epoll
Vort
но оба вызова - таймер и его отмена - асинхронны, верно?
Vort
и могут идти друг за другом
Vort
просто в таком механизме отмены, на мой взгляд, смысла мало
orignal
нет
orignal
либо срабатывание либо отмена
orignal
но тут произошло что ты запросил отмену
orignal
а пока очередь дошла до этого запроса
orignal
он сработал
Vort
ок, понятно
orignal
вот в коллбэек надо проевреять на IsTerminated
Vort
и просто сразу на выход без каких-либо сообщений в лог что ли?
orignal
там и Terminate вызывать не надо
Vort
ну я ж об этом, да
orignal
я передлеаю
Vort
ок
orignal
я просто занят был преездом на другую впс
orignal
сделал
Vort
хорошо
orignal
надо бы в остальных таймераз также сделать
RedFox
Здравствуйте. Сразу скажу что не сильно соображаю. Сегодня на sudo apt update получил:
RedFox
apt-listchanges: Новости
RedFox
------------------------
RedFox
i2pd (2.53.0-1) unstable; urgency=medium
RedFox
i2pd binary moved from /usr/sbin to /usr/bin. Please check your scripts if you used the old path.
RedFox
-- r4sas <r4sas@i2pmail.org> Fri, 19 Jul 2024 16:00:00 +0000
RedFox
(^@½^@°^@¶^@¼^@¸^@<U+0082>^@µ q ^@´^@»^@<U+008F> ^@²^@<U+008B>^@<U+0085>^@¾^@´^@°)
RedFox
Что нажать то надо?
RedFox2
Нажал q пошло обновление
flumental
пишут что статическая сборка может сломаться, может как-то эти флаги при статике выключить? Или я чего-то не понял? github.com/PurpleI2P/i2pd/blob/openssl/build/CMakeLists.txt#L152
orignal
собирай обычным make -ом