IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2022/10/18
~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+relaybot
DUHOVKIN_
Guest7184
Most2
Nausicaa
Nikat
Ruskoye_911
Vort
Xeha
anon3
b3t4f4c3
fidoid
nemiga
not_bob_afk
onon
plap
poriori
profetikla
qend
segfault
soos
teeth
tetrimer_
uis
un
unlike
user
vade
weko
whothefuckami
weko As of SAM 3.2, multiple concurrent pending STREAM ACCEPTs are allowed on the same session ID (even with the same port). Prior to 3.2, concurrent accepts would fail with ALREADY_ACCEPTING.
weko i2pd пишет что версия 3.1, но при попытке наскольких accept'ов ошибки не выдаёт
weko Это кншн хорошо, но с версиями хуня какая-то)
polistern orignal, R4SAS, утро начинается не с кофе :3 Вот буквально вчера пофиксила)) После добавления сети в control он у меня тоже баговать стал. Сделала нормальную инициализацию вектора по GetFullLen, вроде всё ок.
polistern R4SAS, картинка шик)
polistern orignal, магические числа скоро уйдут, всё руки не доходят
orignal weko у нас нет 3.2
orignal то есть оно частично реализовано там но не до коннца
R4SAS polistern: насчет наполнения полей виндового бинарника чего скажешь?
R4SAS конкретно описание, имя организации и прочее
weko orignal: я примерно так и понял, ну окей
polistern R4SAS, выглядит ок
orignal weko я начал делать так и не доделал ))
orignal я чисто потроллить кое кого с мастер сессией
R4SAS polistern: а откуда у тебя такой выравниватель кода? почему не классические табы и определение блока { ... } на другом уровне?
R4SAS я уж сижу и думаю как писать, ибо notepad++ так не делает
R4SAS приходится вручную подгонять
polistern emacs, у него GNU стиль кода.
polistern Иногда в SublimeText что-то смотрю
R4SAS бггг
R4SAS ты можешь записать файл в репу с конфигурацией форматирования кода, если такое возможно?
polistern Ок, посмотрю что да как
R4SAS как пример, в PrivateBin такое: github.com/PrivateBin/PrivateBin/blob/master/.editorconfig
R4SAS и да, вероятно остановка приложения долгая ибо ты в while петле Daemon::Run спишь 10 секунд
polistern Не только, там несколько задач есть, которые выполняются по 5 минут, надо везде повтыкать проверку флага на останов, где можно. А так я по логам смотрю он просто долго завершается. Это я ещё сразу сеть тушу, а то продолжал бы паке
polistern ты обрабатывать)
R4SAS throw udp_client_server_runtime_error ... + char(errcode) + ...
R4SAS char?
R4SAS там тогда не число напечатает, а букву
polistern Боже, там всё плохо, я этот код не трогала очень давно)) Можешь не удивляться вообще ничему)
polistern Ну ничего, дочитаю умную книжку и всё сделаю как правильно)
R4SAS проверяю как ловит SIGINT
R4SAS ощущение что никак
R4SAS 17:51:11@196 WARN Daemon: signal received
R4SAS 17:51:12@830 WARN Relay: No responses
R4SAS 17:51:12@471 INFO Daemon: Start shutting down
R4SAS 17:51:12@471 INFO Daemon: Stopping SMTP server
R4SAS 17:51:12@471 INFO SMTP: Stopped
R4SAS 17:51:12@471 INFO SMTP: Stopped
R4SAS и продолжает работать как ни в чем не бывало
R4SAS хз почему
polistern Похоже в accept залип, FIONBIO точно non-blocking?
orignal polistern тебе совет
orignal магические числа не оставляй на потом
orignal а сразу объявляй константы в момент написания кода
orignal просто возьми это за правило
R4SAS polistern: тут немного по другому с этими FIONBIO
polistern orignal, теперь то да, а старые надо сесть и переделать под константы.
orignal polistern а чего не повесишь accept на epoll ?
polistern Так вот этим и занимаюсь))
R4SAS orignal: ты прям наровишься убить меня?)))
orignal гыыы
polistern orignal, я думала через select делать, не стоит?
orignal select забудь
orignal это говно мамнта которое никто уже не использует
orignal или poll или epoll
orignal epoll предпочительнее
orignal если R4SAS сможет завести его пол виндой ))
orignal хочу могу код дать из whitei2p
polistern Погодь, а что более кроссплатформенное?
R4SAS он ответит epoll
R4SAS линей много, а вынь одна )))
orignal poll кроссплтаформенный
orignal epoll чисто лиунксовая вещь
orignal но якобы есть порты на другие платформы
orignal а вообще буст ))))
polistern Ну понятно)
R4SAS 18:05:30@471 INFO Daemon: Stopping network worker
R4SAS 18:05:30@471 INFO Network: UDPReceiver: 1
R4SAS 18:05:30@471 INFO Network: UDPReceiver: 2
R4SAS huh?
polistern R4SAS, тогда сделаю сеть через poll и должно стать намного лучше всё) Пока висит получается
R4SAS а чего должно после m_recv_thread->join (); происходить?
polistern Это винда?
R4SAS да
R4SAS яж довести до умы пытаюсь её
R4SAS ума*
polistern Мде, сколько интересных открытий то, я даже и не знаю чего он там ждёт)
polistern Ну видимо recv блокирует
postsolarpunk_hypn t1->join в жаве ждёт пока t1 завершится
polistern Он по SAM пакеты получал в этом запуске?
R4SAS примерно такое же есть в NetDB
R4SAS polistern: не знаю
polistern В лог должен писать на каждую
polistern Если дебаг уровень
polistern Он наверное и на линухе тут зависнет, если пакеты идти не будут.
polistern Во дела
R4SAS сейчас посмотрю кой чего
R4SAS не, нету ничего
polistern Ок, значит poll летит на всю сеть)
R4SAS попробую хендлер отрубить и глянуть
astralEscapist задача интересная
astralEscapist как сделать мультикаст, отправить пакет каждой ноде в сети, но при этом не нагрузить сеть, если этим занимается каждая нода в ней?
R4SAS да, handle_receive вешает
polistern Ну так он recv и вызывает
R4SAS конечно плохо называть еще функции такими же именами, что и доступные
R4SAS тот же recv
orignal я оказывается ацеторы в отдельном треде гоняю
R4SAS а что если я перед m_recv_thread->join () буду закрывать сокет?
orignal ой лол
orignal тут ты и попал на линукс ))
R4SAS ну а какого хрена recv висит то?
orignal потому что линукс ацтой
orignal если ты закрываешь сокет в другом треде
orignal то recv там и будет висеть вечно ))
orignal я почему и прикалываюсь
uis Звучит как баг. А recv glibc или boost какой?
orignal на эти грабли наступют все
polistern А на BSD как кто пробовал?
orignal uis это не баг это фича линукс
orignal polistern на bsd не пробовали
orignal на солярисе порядок
orignal если закрываешь сокет в другом треде то recv вылетает
postsolarpunk_hypn orignal, а как на линухе быть?
R4SAS так если я вызываю в stop() закрытие сокета, а далее просто цепляюсь к треду, то все завершается
R4SAS "как было задуманно"
polistern По идее через select, poll и т.д. тоже должен хорошо отрабатывать, если дескриптор закрыть. Он же как раз состояние его смотрит, если я правильно поняла его.
orignal polistern вызывать poll
orignal а потом read
polistern Ну да
polistern Я о том же
orignal под линуксом всегда так делают как раз из-за этого
uis orignal: а что strace говорит в таком случае?
orignal uis не знаю
orignal но про эту особенность лиункса знают все
polistern Ну понятно, если не стрелять себе в ногу, то вы не выстрелите себе в ногу))
orignal там проблема что под лиуксом треды вовсе не треды а процессы
uis Просто у меня подозрение, что где-то есть цикл если recv возвращает ноль
orignal и типа сокеты между ними незваисимые
orignal ну так напиши тестовую прогармму и проверь
uis Ну треды там таки треды, но независимые
R4SAS uis: recv возвращает 0 в винде при успешном завершении сокета
polistern Ну не, если через fork, то открытые до него сокеты он вроде как в окружении унаследует.
orignal так везде так кроме лиункса ))
uis Есть отдельно pid и отдельно tid(или ppid, не помню как называется)
uis Не, не ppid
uis tid
orignal короче я тебе сказал напиши тестовую прогу и сам увидишь
orignal R4SAS но там врподе из другого треда можно вызывать shutdown
orignal тогда завершится
polistern *** пошла чинить сеть ***
R4SAS устроили тут polistern безысходность ))))
uis shutdown(fd, SHUT_RDWR); close(fd);
uis Так?
orignal я не помню
orignal наверное
polistern Я просто криво написала основной стек, а потом его же и копипастила)
orignal короче я всегда с poll-ом делаю
R4SAS 19:32:08@471 DEBUG Relay: Stopping
R4SAS 19:33:53@830 DEBUG Relay: Waiting finished
R4SAS 19:33:53@471 DEBUG Relay: Stopped
R4SAS Blinded message
R4SAS а в остальном оно корректно останавливается уже
weko astralEscapist: никак. Количество сообщений равно O(n²), подставляй количество узлов и смотри на результат. На каждый узел приходится O(n) сообщений. Спрашиваешь почему? Полную анонимность не получится сделать, потому пропускная способность
weko и производительность узлов низкая.
weko Гипотетически одно сообщение даже на 100к узлов можно отправить, но полноценная сеть не заработает
weko Например, есть 10000 узлов, каждый использует 5 кбит трафика. Тоесть на каждом узле будет минимум 50 мбит трафика.
orignal weko мульткаст же работает
orignal сколько в мире терминалов получают котировки с NYSE
astralEscapist 5 кбит вполне возволяет скачать и отправить 50 мбит, не очень быстро но впринципе возможно
weko Но это на 10000 узлов
astralEscapist собственно одно сообщение в секунду
weko Хотя вполне можно ограничить кол-во узлов на каждое сообщение. При этом анонимность снизится, но не критично
weko Ну по моим догадкам
weko Нет, нельзя
weko Иначе можно будет строить кареляции по типу "этот адрес всегда в пуле адересов, на который отправляется сообщение"
weko Можно попробовать придумать хитрую криптографию для избежания вычисления, но возможно ли такое, я не знаю
weko Тоесть например, брать какой-то range адресов рядом с целевым и делать случайные отклонения
weko И нельзя понять, на какой адрес из, например 1000, целевой
weko Но производительность всего этого будет оставлять лучшего
weko Да и кареляции всё равно будут, откинем эту идею
weko Потому что range популярного ресурса будет использоваться больше, чем другие rangeмы
weko range'ы
astralEscapist Это уже усложнение задачи
astralEscapist надо разобраться хотя бы просто с мультикастом в сети из Х нод
orignal мультикаст он только локальный
weko Ну это не сильно сложно. Просто нужно отправить пакет на каждый адрес
astralEscapist вот как работают DHT? Там же куча нод и все должны знать что у кого хранится
orignal чтобы его прокинуть в другую сеть это надо делать явным образом
astralEscapist речь скорее о самодельном мешнете с децентрализованным поиском, где мультикаст нужен для этого самого поиска
orignal ну вот ygg так и работает
orignal ищет соседей мультикастом
weko Он про поиск данных опросом всех нод
weko Как я понял
astralEscapist да, нужен мультикаст по нодам меша, а не в локалке для поиска соседей
weko Тоесть ты хочешь сделать DHT, но с опросом всех нод каждый раз?
orignal глобальный мультикаст моментально засрет всю сеть
weko Это же не имеет смысла, когда есть DHT
weko orignal: такое ничего не выдержит.
astralEscapist А DHT не опрашивает каждый раз?
astralEscapist вдруг новые данные появились
orignal к нам например мультикаст с NYSE приходит по отлельной отоволоконной линии в 10 гигабит
weko DHT работает так, что ты даёшь ему info hash, он находит ноды, которые ближайшие в логическом смысле, и спрашивает у них, где инфа
astralEscapist То есть если они обязаны хранить даже чужую инфу, если она им подходит по логике адреса?
weko А ноды, которые инфу держат, сообщают нодам ближайшим по info hash о том, что у них есть та самая информация
weko astralEscapist: это ip адреса и инфохеш, тоесть совсем немного. И в среднем каждый хранит одинаково
astralEscapist Ну просто вдруг какая-то прыступная информация, которую я хранить не хочу
astralEscapist пускай даже просто хеш от нее
weko Ну ты и не хрвнишь саму информацию
weko Максимум адреса, где она есть
weko Поиск лиссетов в i2p похож на DHT
R4SAS polistern: кстати
R4SAS учти что на винде нет толковых доменных сокетов
R4SAS это к контексту CTL тебе
polistern Вот я и думала сделать для сокетов везде ifndef _WIN32, типа UNIX-only функционал. Но посмотрела, что ты инклудишь какие-то и подумала они есть))
R4SAS они есть
R4SAS но 10+
R4SAS это одно
R4SAS win10+
polistern Ааа, вин 10
R4SAS а второе - хз как они работают)))
R4SAS я сейчас начал под сервис пилить
polistern Ну короче на потом) Пока без них тогда
R4SAS и увидал что --daemon заставляет запускаться
R4SAS а вообще - надо сделать как в ygg, возможность указать каким образом работать - через TCP или UNIX
polistern Уже переделала на конфиг с ifndef, если включены, то в логе скажет, что в винде не включены, только TCP
R4SAS я сейчас попробую разобраться, запустит ли оно вообще их
R4SAS буду по дефу пытаться поднять в папке приложения
R4SAS а то винде точно не по нраву такй путь)))
R4SAS std::make_unique<bote::BoteControl>("/run/pboted/pboted.sock")
orignal а что std::filesystem религия не позволяет использовать?))
R4SAS всм?
polistern Да божечки, я уже сделала))
orignal пути обычно делают с помощью std::filesystem
orignal поскольку там корректно склеиваются под данную ось
polistern Это просто для проверки было, хотела потестить.
R4SAS orignal: да это есть
R4SAS она же FS.cpp унесла к себе, там это реализовано
polistern Я закончила с poll для POP3, немного обкатаю и сделаю также для SMTP и control. В датаграммах думаю всё-таки select сделать, там так сложно не нужно.
R4SAS я про путь /run/pboted/pboted.sock в винде))
polistern R4SAS, не было винды, я и не переживала особо)
R4SAS скоро залью еще своих правок в PR
polistern Красота :3
R4SAS BoteControl: creating new socket for control connection
R4SAS вроде пашет
R4SAS у тебя логгер не асинхронно чтоль работает?
R4SAS чет такую фигню делает:
R4SAS 23:01:42@471INFODaemon: Stopped
R4SAS rker stopped
R4SAS opped
R4SAS иногда бывает что 2 сообщения слепливает в строку
polistern Его почти не ковыряла, надо смотреть
R4SAS просто еще видно что почти всё работает в одном треде
R4SAS путь до сокета (/run/pboted/pboted.sock) в конфиг вынеси лучше
polistern Да не, не должно, там на каждый чих треды. Может не стартует чего?
polistern Вынесла уже))
R4SAS @656DEBUGDaemon: Start services
R4SAS @656INFONetwork: Starting SAM session
R4SAS @656INFORelay: Load peers from FS
R4SAS @656INFODHT: readNodes:
R4SAS @656DEBUGDHTStorage: set_storage_limit
R4SAS всё на треде @656
polistern Ааа, это да, инициализация да. Там потом ветвление.
polistern Буквально сразу после этих сообщений должны треды уже писать
orignal R4SAS только там бустовский
orignal а в новых g++ есть и в std
orignal начиная с g++8
R4SAS залил правки
R4SAS Blinded message