IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2022/10/21
~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+relaybot
DUHOVKIN_
Guest7184
Most2
Nausicaa
Nikat
Ruskoye_911
Vort
Xeha
anon3
b3t4f4c3
fidoid
karamba_i2p
nemiga
not_bob_afk
onon
plap
poriori
profetikla
qend
segfault
soos
teeth
tetrimer_
uis
un
unlike
user
vade
weko
whothefuckami
orignal weko объясни как получается что оба клиента с одного порта идут?
weko Хороший вопрос, игра mindustry, был один тунель - мы могли оба зайти, но только первый кто зашёл мог строить. Стало 2 туннеля- всё стало норм. Конфиги надо у reloaded спрашивать
weko Похоже на то, что с TCP всё адекватно, а с UDP нет
weko Возможно проблема не конкретно в портах, а в реализации, но факт - 2 туннеля ситуацию исправили
orignal weko понимаешь в чем дело
orignal там соединяется с того порта который приходит от клинта
orignal дурость конечно и я это переделаю
orignal но вопрос почему с двух клиентов один порт приходит
weko orignal: пытаюсь найти что нибудь в исходниках игры
orignal да пока не надо я это поправлю
orignal я еще в коде посмотрю может на клиенской стороне бага
orignal я просто пытаюсь разобраться в коде психа ))
weko Окей
orignal в лююом случае это надо переделывать
orignal потому что порты на клиенте и на сервере имеют мало связи
reloaded orignal: На счет ошибки, суть что игра использует и TCP и UDP, TCP для подключения к серверу и чата, UDP непосредственно для игры. И как можно было понять, подключение приходит, чат работает, но тот кто зашел
reloaded вторым не может ничего сделать, действия не отображаются на сервере. Что приводит к мысли что что-то не так с UDP, и так и произашло, когда я продублировал тоннель, и один из играков заменил b32 адрес в
reloaded тоннеле на новый (а второй остался со старым) - все заработало. Единственное обяснение к которому мы пришли это то что UDP тоннель слал пакеты обоих клиентов с одного клиентского порта, можно
reloaded попробовать это протестировать, но код в любом случае нужно исправлять, так что думаю логичнее будет протестировать оригинальный конфиг после внесения изменений в i2pd, заработает - предположения
reloaded подтвердятся
orignal так вот этот клинский порт приходит от клиенского приложения
reloaded Тоесть это тот же клиентский порт который используется самим приложением? (Игрой на компютере клиента)
orignal смотри по коду получается так что клиентсий тоннель передает порт клиента серерву
orignal а серверный тоннель соединяется имнно этого порта
orignal что конечно же неправильно
orignal но вот почему клиенский порт с разных экземляров приложения один и тот же это непотнятно
orignal в любом случае я это переделаю
weko orignal: reloaded вроде тестировал с одного адреса и всё работало у него
orignal а как работало? через разные тоннели?
orignal клинтские или серверные?
reloaded orignal: Как работало: Создал серверный TCP и UDP тоннели два человека подключаются - играть не могут при этом если я на одной и той же VM запускаю 4 клиента и подключаюсь локально с одного IP - работает
reloaded По идее клиентские порты выдаются ОС, так что не думаю что это проблема с клиентом
acetone i2pd падает, если "crypto.tagsToSend = 20" добавить в i2pd.conf (в секцию httpproxy)
acetone i2pd падает, если "crypto.tagsToSend = 20" добавить в i2pd.conf (в секцию httpproxy) * только что пришлось проверить)))
orignal а оно там вообще есть?
orignal reloaded серверный тоннель делает явную привязку
orignal потому и падает
orignal reloaded ладно я разберуюсь в чем дело
weko orignal: если смогу, я потестерую и скажу что вышло, чтобы точно понимать
orignal спс
R4SAS о, порнография
R4SAS нинада так делОть
polistern пОчему?)
polistern Они что-то не то оптимизируют?
R4SAS по умолчанию уже -O2 используется
R4SAS у нас так убунта 21.04+ сломалась
R4SAS далее
R4SAS поднимать надо версии. GCC 8+ умеет filesystem
R4SAS если я правильно помню
polistern Ага, ну ок, убрала оптимизацию. Версии подняла, ещё не отправила. У меня вопрос, как билду DEB пакета передать control для другой?
R4SAS другой чего?
polistern Версии ОС
R4SAS туда надо минимальные писать
R4SAS т.е. сейчас это deb 10
polistern Ну смотри, сек
R4SAS для генерации пакетов под другие релизы делается changelog с указанием релиза
R4SAS у меня для этого скрипт присутствует
polistern А если зависимость в новой версии ОС отпадает, т.к. не нужна?
R4SAS например?
R4SAS тогда универсальный пакет
R4SAS но я сомневаюсь что так будет
R4SAS у тебя openssl везде разный
polistern Например на старой GCC нужно будет с бустом filesystem делать, а в новой, с С++17, можно без него.
orignal а зачем тебе старый?
orignal делай сразу под 17
R4SAS а ты все таки собираешься тянуть старые системы?
orignal кому надо те gcc7 везде поставят
R4SAS псс8
orignal правда для filesystem надо 8
orignal короче забей на старые
orignal это же не i2pd где "дань традициям"
polistern Да не знаю, пока поддержка выглядит как пара if-else то почему бы и нет. Я сейчас проверила, собирается у меня и с С++11 и с 17
orignal до сих пор 4.8 поддерживается
orignal так не нужен 11
orignal у меня 11 потому что я начинал когда был 11
R4SAS polistern: у тебя на stretch врядли соберется
R4SAS это 9й
R4SAS там псс 6.3 вроде
orignal так я думаю можно и 8 поставить из репы
R4SAS нет
R4SAS откуда он там возьмется?
orignal тады ой
orignal полключить репу gcc
R4SAS стретч уже как бы всё
orignal отдельную
R4SAS еще в июле
orignal а ну тогда зачем тянуть eol?
R4SAS даже LTS закончился
R4SAS незачем
orignal единственная стоящая вещь это сентос 7
R4SAS его тоже в топку)))
orignal я не согласен
R4SAS сколько можно это говно мамонта тянуть
orignal он до сих пор поддерживается
R4SAS знаю, но он поддерживается не в офф ветке
R4SAS а так же LTS
orignal официально поддреживается вообще то
orignal именно сентос 7
orignal не 8
polistern Должен собраться на стретч, там нужный буст есть и GCC норм.
orignal а нафиге тебе стретч?
orignal обнови уже до 10
orignal хотя бы
polistern Да у меня то 11))
orignal ну так а тогда зачем?
orignal а у меня распбиан а он 10 ))
polistern Так R4SAS сказал, что не соберётся, я говорю нет причин не собраться))
R4SAS polistern: попробую попозже
orignal так если ты передйешь на std::filesystem
polistern Я ifdef налепила и хитрый cmake
orignal ну вот тебе и гвоорят что старое за борт современности ))
polistern Понятно если весь код нужно так обмазывать, то ну его. А так то не сложно.
R4SAS ну так весь и придется
R4SAS а это точно так нужно подключать?
R4SAS и да, "lib" не нужно писать
R4SAS -lstdc++fs
polistern На 8 да, на 9 нет.
polistern В общем есть у меня одна центось 7, если с её пакетами без плясок соберётся, то едут изменения мои с поддержкой. Как вам вариант?
R4SAS попробуй
polistern Если нет, то С++17 минимум тогда.
R4SAS сразу в мастер
R4SAS лол мелкомягкие на гх прилепили vscode
polistern Блин, Cmake подвёл на CentOS, там 2.8 ))
polistern Но на stretch 3.7 как раз) Ладно, едем на C++17
R4SAS бугагага
R4SAS поэтому мы ставим туда 3й
R4SAS там он есть в репах
R4SAS yum install cmake3
R4SAS polistern:
polistern Сейчас гляну тогда
polistern Обычная OpenSSL у них старовата, а которая openssl11 не линкуется. По итогу мои EVP* всякие не работаю ((
polistern Хз ковырять дальше или забить уже
R4SAS всм не линкуется?
R4SAS EVP да, не будут
orignal на сентос?
orignal собери вручную
orignal и поставь
orignal я так сделал
R4SAS orignal: и че
orignal ну у меня там openssl 1.1.1 счас
R4SAS ты будешь всех заставлять руками собирать?
R4SAS она пакет слепить хочет
orignal ну у кого centos 7 да ))
orignal а в пакет его нельзя добавить?
R4SAS нет
orignal или статически слинковать?
R4SAS нет [2]
orignal не надо пакет под сентос 7
R4SAS ты лучше ей объясни как EVP у нас работает
R4SAS там
polistern Так, ну он собрался и даже работает.
polistern Сейчас подкину ему почтовый адрес, пусть запросы поделает, на всякий.
weko как обновить туннели без рестарта роутера?
orignal kill -s HUP
orignal но работет не всегда
weko пишет не хватает аргументов
orignal так номер процесса разумеется
weko угу
weko_ orignal точно не работает с udp
orignal R4SAS
orignal чинил вроде
weko_ не, tcp обновляет, udp нет
weko_ не сервер, ни клиент
orignal я в курсе
orignal вот R4SAS udp и чинил
weko_ ну вот я и говорю, что теперь не работает
orignal ну а спрорю что ли? ))
weko_ ладно, хер с ним
R4SAS логи видать не умеем читать
R4SAS без логов даже изучать не буду
polistern Получается на CentOS 7 только clang может билдить. GCC староват. А так всё работает. Сама придумала проблему, сама решила)
orignal polistern там можно 7 поставить
polistern Мне бы ещё понять как не так кустарно линковать openssl11
orignal не знаю
orignal как я сказал я просто его там собрал и поставил
R4SAS polistern: while (client_sockfd != -1)
R4SAS а незя нормально написать состояние? не -1 ?
R4SAS а то я не понимаю например чего тут ожидать
polistern Пропустила
R4SAS там должно быть INVALID_SOCKET?
R4SAS или чего?
orignal ну да чтобы константой
R4SAS client_sockfd < 0
orignal или все таки >= 0 ?
R4SAS вот это вообще меня убивает если честно
R4SAS как сокет можно с числом сравнивать
R4SAS if(fds[sid].fd >= 0)
R4SAS а тут как понимать?
R4SAS если он есть, или пуст?
R4SAS крч не ясно
R4SAS if (tcp_fd == (int)INVALID_SOCKET)
R4SAS а зачем приводить к int?
R4SAS он же все равно int
R4SAS или нет?
orignal там можнт unsigned
R4SAS в таком месте я вообще ловлю подобное:
R4SAS warning: comparison of integer expressions of different signedness: 'SOCKET' {aka 'long long unsigned int'} and 'int' [-Wsign-compare]
R4SAS мне приходится у сокета менять тип с int на SOCKER
R4SAS SOCKET*
R4SAS иначе не хочет
R4SAS #ifndef INVALID_SOCKET
R4SAS а такое бывает?
polistern По поводу if(fds[sid].fd >= 0 - по сути всё, что валидный сокет. Ну а в остальном я опиралась на то, что socket() возвращает int. Получается нужен define, где для линуха будет int, а для винды как есть подставит.
polistern В i2psam есть, равен ~0
R4SAS ну так под это условие тогда достаточно != INVALID_SOCKET
polistern Я вообще думаю вынести все эти ОС зависимые вещи в отдельный заголовок, по крайней мере константы. Ну и сделать их всё-таки константами.
polistern А то их собирать по всему коду приходится.
R4SAS да, я видал этот файл
weko orignal: я затестил вчерашнюю проблему, всё точно так же
orignal weko рассказывай конфигурацию
weko при чём это не проблема игры, так как если зайти с одного адреса не через i2p (в данном случае через локальную сеть), то всё работает
weko щас скину конфиг
orignal не надо
orignal объясни так
orignal у тебя есть серверный udp тоннель
orignal и как к нему происходит подключение клиентов
weko UDP работает адекватно, только если сделать туннель для каждого юзера отдельный
` weko, minetest гоняешь по udp?
orignal мне лень i2p запускать
weko нет, mindustry
` а, ок
orignal weko так отдельный тоннель клиентский или серверный?
weko серверный
R4SAS poll поддерживается в винде с 8.1
weko два клиентских там для меня, чтобы я затестил как будто я два юзера
R4SAS хотя может и на 7 будет
R4SAS хз
orignal weko теперь давай объясняй проблему
orignal значит два клиента обращаются к одному и тому же i2p адресу и порту. так?
polistern R4SAS, ну значит на 7 без POP3, SMTP и Control должно работать. Основная сеть на select()
weko 1. один серверный туннель. подключаюсь с разных адресов i2p - с одного не работает строительство (не работает udp)
weko 2. дублирую серверный туннель как в конфиге - всё работает нормально
weko 3. без i2p с одного адреса игра работает адеватно
orignal так а что происходит?
polistern R4SAS, Minimum supported client: Windows 8.1, Windows Vista [desktop apps | UWP apps]
orignal когда второй
orignal не приходя пакеты на клиента?
polistern Это для select()
orignal я хочу понять на какой стороне затык
weko при переходе с 1 на 2 у клиента меняется только адрес и серверный порт
R4SAS polistern: вот меня смущает эта запятая
weko так что проблема с серверным udp
polistern Возможно как сервис нельзя. Надо пробовать. Так конечно нифига не понятно)
R4SAS orignal: я думаю затык в том что для новых пакетов с нового адреса не открывается новый сокет для отправки
orignal проверю
R4SAS ш2зв шлет все udp с одного и того же порта
weko я щас
R4SAS ответы соответственно прилетают туда же и ш2зв не знает кому отослать
R4SAS либо шлет первому кто открыл соединение
R4SAS я так это понимаю
R4SAS хз честно
R4SAS придется курить этот poll
R4SAS а точнее wsapoll
orignal а как же мамбл тогда работает?
polistern nginx for windows через poll и select работает пишут, но не нашла пока минимально поддерживаемую.
orignal std::make_shared<UDPSession>(ep,
orignal boost::asio::ip::udp::endpoint ep(addr, 0);
orignal очевидно что это не так
orignal должке быть порт разный
orignal но возможно он сессию находит старую
orignal if (s->Identity.GetLL()[0] == ih.GetLL()[0] && remotePort == s->RemotePort)
orignal все ясно
orignal weko_ признавайся что у тебя клинтский тоннель тот же самый
weko_ всм
R4SAS weko_: ты к одному туннелю клиентскому пытаешься цепляться двумя копиями игры?
orignal или у тебя два разных клиентских
weko_ два разных клиентских, с рахных устройста в случае 2
R4SAS так... расковырял BoteControl
weko_ я же кинул конфиг, там 2 клиентских
R4SAS это ад
orignal ну я спрашиваю
orignal ты же видишь по коду
polistern R4SAS, в SMTP и POP3 такой же ад, только без POSIX сокета
orignal у тебя два клиенских точно не с одним и тем же адресом.
R4SAS polistern: дойду - узнаю )))
R4SAS теперь надо узнать вот что
weko_ orignal: разные
R4SAS для boost::filesystem::wpath есть замена или нет
weko_ mindustry.dat и mindustry-t2.dat
orignal тогда проблема в чем то другом
orignal weko_ откуда ты знаешл что приходят с одного порта?
weko_ я предполагаю
weko_ проблема два раза повторилась у меня и reloaded
orignal а надо убедиться
orignal запусти сниффер
polistern R4SAS, wpath deprecated since boost 1.60; Removed; use class path instead. Workaround provides typedef path wpath
polistern Возможно он в std уже так и переехал
weko_ я уже стёр эти конфиги, завтра могу убедится
orignal потому что там порты должны быть разные
weko_ логично)
R4SAS polistern: посмотрим. там могут быть проблемы если юзернейм или в путях не ASCII
weko_ или ты про код?
weko_ завтра проверю, скажи только чем
orignal я по коду вижу что будут разные
orignal потому и гвоорю что думаю что проблема не в этом
weko_ скажи какой утилитой проверять
orignal wireshark
orignal дамп снимай и смотрти заголовки
R4SAS polistern: посмотрим. там могут быть проблемы если юзернейм или в путях не ASCII
R4SAS ой
polistern Бывает)
R4SAS weko_: а с чем либо другим проверить можешь?
R4SAS (случайно вверх нажал перед отправкой)
R4SAS weko_: мамл же пашет как то
orignal то то и оно там явно причина в другом
R4SAS polistern: memset(sessions, 0, sizeof(sessions));
R4SAS 'void* memset(void*, int, size_t)' clearing an object of type 'struct bote::pop3::pop3_session'
R4SAS хз почему оно так думает конечно
polistern Ааа, ну так то он и должен очищать нулями. Это как варнинг или прям ошибка?
R4SAS варн
polistern Действительно хз почему они думают, что я тут что-то другое хочу. Это что за компилятор?
R4SAS gcc 12.1.0
orignal sizeof(sessions) будет равен 8
orignal вы чего?
orignal это же размер указателя
polistern (sizeof(*sessions)) * (sizeof(sessions)) получается?
orignal я не знаю что это
orignal это массив или указатель или что?
polistern Массив структур
polistern Взято из доки IBM))
orignal так надо длину его знать
orignal а ну если прямо там массив объявлен тогда можно
polistern Грубо говоря sessions[5], не указатель.
orignal да там будет полный размер
orignal но только если он объявлен именно там
polistern Именно так
R4SAS крч че делать то?
R4SAS в SMTP такого нет
R4SAS либо есть... сейчас перепроверю
R4SAS да, там тишина
polistern Есть, там одинакого сессии сделаны. Надо кстати оптимизировать будет их потом, много памяти жрут.
polistern А если нет, то странно.
R4SAS крч э
R4SAS это хрень в конпеляторе
R4SAS а это уже в имеющемся коде
R4SAS тоже int и SOCKET ))
R4SAS свой я сейчас в PR залил (дважды), собирается уже
polistern Круто)