IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2022/06/08
~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest41326
HackerMan
Most2
Nausicaa
Ruskoye_911
Vort
`
acetone_
ananas
anon3
b3t4f4c3
fidoid_
guest
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
R4SAS orignal: я помню что ты говорил что модули не должны иметь доступа к daemon
R4SAS но если я вынесу морду в отдельный модуль, то как быть?
R4SAS не делать же -Idaemon
orignal ниче не понял
orignal зачем морде обрашаться к демону я не понимаю
orignal он же только к конекстам обращается
relaybot 13R4SAS: грейсфул таймер там
relaybot 13R4SAS: остановка
orignal так сделай интерйес и фуннктор
orignal который будешь ставить ему из демона в качестве коллбэка
orignal делов то
orignal в винде вроде бы сделано как раз по такой схеме
relaybot 13R4SAS: ты это с окошком ошибки путаешь
relaybot 13R4SAS: интерфейс на какой стороне?
yandere Привет, а можно ли как-то в коде C++ приложения пропускать трафик через сокс прокси?
HidUser0 yandere: можно
yandere HidUser0 либа есть нормальная? Я код proxychains смотрю
orignal я не путаю
orignal там же в меню тоже есть
orignal вызов кода демона из либы
yandere ~orignal это вы про что?
orignal это R4SAS-у
orignal он знает
zzz orignal, re: domain sockets, on my Ubuntu system, localhost MTU is 65536, so there's no fragmentation anyway
orignal most likely
orignal not sure
zzz I don't know if that's common on bsd, windows, mac, ...
orignal I doubt there are local sockets on windows
orignal need to think
orignal if we can gain something using local sockets
zzz Unix-domain sockets have long been a feature of most Unix platforms, and are now supported in Windows 10 and Windows Server 2019.
orignal we can save local port I guess
orignal as I said need to investigate
zzz there's potential security benefits
zzz ofc would need to support TCP domain sockets also
zzz I'm going to add some MTU notes to the SAM spec
orignal we did some mesurements at work
orignal and I can say that local TCP/IP is always faster than local sockets
orignal probably better optimization in kernel
zzz orignal, polistern, I reorganized the datagram section a little and added a MTU notes section: i2p-projekt.i2p/en/docs/api/samv3
polistern Nice, thank you, I'll check.
orignal thanks
orignal I think polistern is main user of SAM datagrams
orignal real datagrams
orignal not those for iMule
relaybot 13R4SAS: orignal: так там же оно работает ибо есть доступ к инклуду
relaybot 13R4SAS: а ту его не стало теперь
orignal R4SAS говорю тебе сделай интрефейс тем или иным образом
orignal используй в либе его
relaybot 13R4SAS: и да, мб i2pcontrol переделать потом
orignal а в демоне передавай в либу уже конкретную реилизацию
relaybot 13R4SAS: посмотри в бранч webconsole-inja
orignal пример подключение ацептора стрима
orignal стримы в libi2pd а сэм в libi2pd_client
relaybot 13R4SAS: если есть время
orignal стримы работают с некоторым абстрактым ацепотом
orignal а сэм просто его ставит
relaybot 13R4SAS: ну так там оно к объявленным функциям и классам доступ имеет
orignal как лябду
orignal нет
relaybot 13R4SAS: а я к daemon.h не имею доступа
orignal ты сам объявлешь интрефейс в своей либе
orignal так и не надо
relaybot 13R4SAS: м...
orignal ты объяслвешь нужный тебе в либе
orignal в демоне делаешь его реализацию
relaybot 13R4SAS: нужен конкретный пример
relaybot 13R4SAS: посмотрю
orignal можешщь через наследование можешь через std::function
orignal а можешь вообще шаблоном
orignal я тебе привел пример ацептора в стримах
orignal который передается в сэм когда надо
relaybot 13R4SAS: т.е мне надо в демоне на базе класса httpserver.h сделать объявление фукнции внутри класса вебморды
relaybot 13R4SAS: и из него вызывать daemon.stop например?
orignal можно так std::function m_Shutdown
orignal можно написать абстрактный класс class StopableInstnace
orignal в нем virtual void Shutdown() = 0;
orignal и демон унаследрвать от StoppableInstnce и реализовать функции
orignal а можно вообще template<typename Daemon>
orignal и работать с ним
relaybot 13R4SAS: не могу пока что представить, посмотрю как будет код на руках
orignal посмотри как в util.h сделаны шаблоны
` А 333 можно нубским вопросом попытать? Не обидится?)
orignal если по тематике i2p то конечно можно
orignal по английски разумеется
` zzz, how to "fast" (terminal, maybe step-by-step) update server/socks-proxy from "i2cp.leaseSetType=1" and "i2cp.leaseSetEncType=0" to 3 and 4.
orignal for Java you mean
orignal by editing config not UI I guess
` Of course.
zzz - stop i2p
zzz - cd ~/.i2p/i2ptunnel.config.d/
zzz - identify config file for the socks tunnel
zzz - edit xxxxx-i2ptunnel.config file
zzz - start i2p
orignal great
orignal *** have checked his ~/.i2p ***
zzz UI is easier, translated, don't have to stop router, don't have to guess the configuration values. But that's how you do it from terminal.
` zzz, are these same keys/parameters? And don't need to delete anything for update *.dat?
` *.dat if static
orignal zzz he meant you should persists encryption keys somweher
orignal and if he need to delete them
` OK, much obliged, zzz;) Many my "friends" (not much advanced user) have "old" configs. And I (user i2pd now) don't know/remember UI..
zzz encryption keys are persisted in the config file, but i2ptunnel will handle it automatically if you change the enc type
zzz not necessary to delete
zzz if you change sig type, and it's a persistent destination, you must delete the eepPriv.dat file
` signaturetype?
orignal what if one needs to change encryption keys explicitly for whatever reason?
zzz I guess delete the line in the config. The only reason it's persisted is so people can't identify when you restarted
` 7 is by default?
zzz 7 is the default in the UI, but I think 0 is the default in the config file
zzz the UI has different defaults than the router
` Oh, OK.
zzz if your "friends" are not "advanced", may be better to install java i2p and make UI screenshots :)
orignal people still like unix-way
orignal if you run your router on a VPS you must be "advanced" to get access to UI
orignal like ssh port forwarding
zzz I say anybody with a VPS is advanced!
R4SAS orignal: как делаются шаблоны я понимаю
orignal ну вот идея что ты исползуешь в либо демон как шаблон
orignal а из кода демона подставляешь настоящий демон в качестве параметра
R4SAS где я это должен описывать? в HTTPServer.h?
orignal ну если ты его вносишь в отдельную либо то да
R4SAS не догоняю все равно
R4SAS это описывается как функция класса HTTPServer?
R4SAS или новый класс?
R4SAS вот есть у нас в Daemon.cpp создаение указателя на объект работающий с классом
R4SAS d.httpServer = std::unique_ptr<i2p::http::HTTPServer>(new i2p::http::HTTPServer(httpAddr, httpPort));
R4SAS это ясно
orignal либо поле типа std::function в нем
orignal либо шаблонным параметром самого HTTPServer
orignal либо какой то отдельный класс
orignal ну вот d.httpServer->SetShudown (std::bind (&Daemon::Shutdown, this));
orignal типа такого если через std::function
R4SAS typedef std::function<void (const std::string&)> ThrowFunction;
R4SAS типа того что делали в качестве окошка для ThrowException?
orignal на примерно так да
R4SAS ThrowFatal*
orignal std::function<void ()> m_Shutdown;
R4SAS а потом как этот m_Shutdown вызывать?
orignal if (m_Shutdown) m_Shutdown();
orignal ну посмотри как ацептор сделан в Streaming.cpp
orignal это самое просто решение
R4SAS да, вижу
R4SAS сейчас попробую...
R4SAS получается придется прокидывать так команду stop, таймер
R4SAS который gracefulShutdownInterval
R4SAS сидел думал почему у меня на винде это все без таких правок работает
R4SAS как только убираешь, то сразу все ломается
` /offtopic Не больно на Windows вот это вот всё "прогромировай"?
R4SAS например 'i2p::util::DaemonWin32' has not been declared
R4SAS `: я же не на MVC пишу
R4SAS на классических гнушных плюсах
orignal вот потом я и предлагаю сделать интерйесный класс
R4SAS тогда лучше тебе это делать
R4SAS я наверчу
R4SAS чет не получается
R4SAS в паблике класса:
R4SAS typedef std::function<void ()> DaemonStop;
R4SAS void SetDaemonStop (DaemonStop& f);
R4SAS отдельный приват: DaemonStop m_DaemonStop;
orignal и что не так?
R4SAS d.httpServer->SetDaemonStop (std::bind (&Daemon_Singleton::stop, this));
R4SAS кстати, &Daemon или же &Daemon_Singleton?
R4SAS если &Daemon:
R4SAS error: expected ')' before '::' token
R4SAS 426 | d.httpServer->SetDaemonStop (std::bind (&Daemon::stop, this));
R4SAS | ~ ^~
R4SAS иначе:
R4SAS error: cannot bind non-const lvalue reference of type 'i2p::http::HTTPServer::DaemonStop&' {aka 'std::function<void()>&'} to an rvalue of type 'i2p::http::HTTPServer::DaemonStop' {aka 'std::function<void()>'}
R4SAS 426 | d.httpServer->SetDaemonStop (std::bind (&Daemon_Singleton::stop, this));
R4SAS | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
orignal да нет я примено сказал как
orignal SetDaemonStop (DaemonStop& f); или const поставь или & убери
R4SAS ужасно выглядит
orignal ну тогда сделай код и напиши где надо сделать комментарий что надо сделать то то и то то
orignal я сделаю
R4SAS виндовый тоже переделаешь?
R4SAS а то сейчас таймеры для линя и винды каждый свой, не в синглтоне
orignal не знаю
orignal ну ты там по аналогии сделаешь как я для лиункса
R4SAS так а как я должен из DaemonWin32 обращаться с синглтону, если инстанс i2p::util::DaemonWin32::Instance объявляется в Daemon.h?
orignal ну и что?
orignal ну так объяви его там со словом extern делов то
R4SAS эм, а как?
R4SAS вот такое используется в Daemon.h:
R4SAS #define Daemon i2p::util::DaemonWin32::Instance() class DaemonWin32 : public Daemon_Singleton
orignal счас
R4SAS #define Daemon i2p::util::DaemonWin32::Instance()
R4SAS class DaemonWin32 : public Daemon_Singleton
R4SAS я понимаю если тип указывать
orignal а все понял ты о чем
orignal какой то мудак использует Daemon как сингелтон
orignal а не как класс
orignal это уебище надо бы переделать
orignal к твоей задаче это не имеет отношения
R4SAS к текущей - нет
R4SAS но если делать отвязку от инклуда Daemon.h то я сразу в стенку упираюсь
orignal &Daemon_Singleton::stop короче надо
orignal где ты делаешь отязку?
orignal в win32?
R4SAS да
orignal покажи строку где ты его вызываешь
orignal что то сомневаюсь чтобы я такое написал ))
R4SAS но тогда это все было в одной папке и работало
R4SAS если переделывать, то капитально
R4SAS как обращаться колбэками я понял
R4SAS и из DaemonWin32 вызывать Win32App будет не такой проблемой
orignal вот и начни с этого
orignal через коллбэк
R4SAS блин
R4SAS у меня команда остановки вызывается из класса HTTPConnection
R4SAS а устанавливаю функцию в HTTPServer
orignal а у него ссылки на сервер нету?
orignal да нету
R4SAS ага, нет
orignal вот в этом и беда сингелтонов
orignal значит надо добавить
orignal в момент его конутркутор передавать ссылку на сервер
R4SAS или через конструктор передавать указатель на команду?
R4SAS на функцию*
R4SAS хотя не безопасно
orignal нет именно на север ссылкой
orignal не надо держать указатеои на фнукции в коннкешинах
R4SAS auto conn = std::make_shared<HTTPConnection> (m_Hostname, newSocket);
R4SAS и как самого себя туда передать?
R4SAS &this ?
orignal *this
orignal посмотри как сделаено в стримах ))
orignal только имей ввиду ссылку можно только иниицализировать другой а не копировтаь
R4SAS HTTPConnection (std::string serverhost, std::shared_ptr<boost::asio::ip::tcp::socket> socket, std::shared_ptr<const i2p::http::HTTPServer> server);
orignal & забыл
orignal так нельзя
orignal ты не знаешь какая природа server
orignal HTTPServer& server
orignal лучше так
orignal техничеки это тот же 8 байтный адрес
R4SAS т.е. не shared_ptr?
orignal нет
orignal потому что ты не знаешь что такое server
orignal может это просто локальная переменная
R4SAS теперь еще придется перемещением кода заниматься?
R4SAS говорит что знать не знает про HTTPServer
R4SAS оно объявлено ниже
orignal не надо ничего перемещать
orignal перед ним напиши class HTTPServer;
orignal это же в куче мест есть
R4SAS ок
R4SAS HTTPConnection (std::string serverhost, std::shared_ptr<boost::asio::ip::tcp::socket> socket, HTTPServer& server);
R4SAS const HTTPServer& m_Server;
R4SAS auto conn = std::make_shared<HTTPConnection> (m_Hostname, newSocket, *this);
R4SAS HTTPConnection::HTTPConnection (std::string hostname, std::shared_ptr<boost::asio::ip::tcp::socket> socket, HTTPServer& server): m_Socket (socket), m_BufferLen (0), expected_host(hostname), m_Server (server)
orignal нет не const
orignal ты еще переименную объявить должен
orignal m_Server
orignal ну так нормально вроде
R4SAS HTTPServer& m_Server; - так это оно и есть объявление, не?
orignal просто ты ему ссылкой с const инициализовать не сможешь
R4SAS понял
R4SAS а мне m_DaemonStop чтоль в паблик надо?
R4SAS error: 'i2p::http::HTTPServer::DaemonStop i2p::http::HTTPServer::m_DaemonStop' is private within this context
orignal естественно
R4SAS или делать функцию опять же, которая будет возвращать этот m_DaemonStop?
R4SAS ужос
orignal это где опять такое вызывается напрмямую?
orignal конечно функцию
orignal нельзя обрашаться к полям напрямую
R4SAS orignal: а как делается с всякими интами и булями
R4SAS указателями
orignal приведи пример
R4SAS например есть в DaemonWin32 bool isGraceful
orignal это тоже неправильно
R4SAS к которому надо получить доступ
R4SAS из Win32App
orignal написать методы Get и Set
R4SAS я знаю
orignal точно также через коллбэк
R4SAS из DaemonWin32
R4SAS я буду вызывать колбек, но что туда передавать?
R4SAS std::bind?
R4SAS внутри Win32App.h я так понимаю надо как и в тот раз писать подобное:
R4SAS void SetIsGraceful (const bool& b) { m_isGraceful = b; };
R4SAS bool m_isGraceful;
R4SAS а внутри DaemonWin32 как вызываю?
R4SAS i2p::win32::SetIsGraceful (&isGraceful) ?
orignal const bool& b
orignal это еще что за дичь?))
R4SAS а вот такая дичь
orignal не надо там по ссылке
R4SAS просто указателем?
orignal просто bool b
R4SAS так а оно разве не поставит единоразово?
orignal а вызов m_SetIsGraceful (true) например
orignal я тебе просто говорю как надо
R4SAS смотри в чем дело
orignal по ссылке только сложные типа передаются
R4SAS почему надо хранить в демоне - потому что этот буль надо получать и в морде, и в трее в меню
orignal логично
orignal короче такое во многих местах сделано
orignal вместо std::bind можно лямбду
R4SAS i2p::win32::SetIsGraceful (std::bind (isGraceful, this)); ?
orignal нет
orignal ты можешь привязку только методов делать
R4SAS напиши уже просто как должно быть)))
orignal i2p::win32::SetIsGraceful (std::bind (&Win32Daemon::SetIsGraceful, this, std::placeholders::_1))
orignal как то так
orignal посмотри I2PTunnels.cpp
R4SAS это сработает с чистым bool?
orignal тип не иммет значения
R4SAS стоп, это передача из демона в app, или установка указателя на значие в демоне?
R4SAS мне второе надо
orignal это установка коллбэка
R4SAS при запросе значения bool isGraceful что мне отдаст?
R4SAS из Win32App
R4SAS хотя я понял к чему ты ведешь
R4SAS добавление в демоне переменной внетренней, хранящей значение, set и get для него
orignal переменная геттер и сеттер
R4SAS и прокидывание функции get в win32фзз
orignal правильно
R4SAS извращенсво
orignal и если надо Set
R4SAS надо будет
orignal нет
orignal потому что win32 у тебя ничего не знает о демоне
orignal а знает только что он как тот суслик
orignal его не видит а он есть
R4SAS daemon:
R4SAS private bool m_isGraceful;
R4SAS bool GetIsGraceful() { return m_isGraceful; }
R4SAS void SetIsGraceful(bool state) { m_isGraceful = state; };
R4SAS DaemonWin32:
orignal Get надо const
R4SAS i2p::win32::SetIsGraceful (std::bind (&Win32Daemon::SetIsGraceful, this, std::placeholders::_1));
R4SAS i2p::win32::GetIsGraceful (std::bind (&Win32Daemon::GetIsGraceful, this));
R4SAS ок
orignal да примерно так
R4SAS далее в Win32App
R4SAS typedef std::function<void (bool)> DaemonSetIsGraceful;
R4SAS DaemonSetIsGraceful m_setIsGraceful;
orignal правильно
R4SAS а сам SetIsGraceful как описывать?
R4SAS и кого в дальнейшем вызывать то?
R4SAS не m_setIsGraceful же
orignal m_setIsGraceful надо вызывать
R4SAS void SetIsGraceful (const DaemonSetIsGraceful& f) { m_setIsGraceful = f; }; -- если брать то что до этого делал
R4SAS т.е. далее я в коде вызываю m_setIsGraceful(true) ?
orignal все правильно
orignal только с проверкой на nullptr
orignal что установлен
R4SAS а он может быть не установлен?
orignal так если нкто не вызвал SetIsGraceful то чему он будет равен?
R4SAS я сомневаюсь что такое произойдет в процессе работы
R4SAS оно же в демоне при старте устанавливается
orignal ты не имеешь право полагаться на это
orignal мало ли кто и как в дальнейшем будет твою либу использовать
R4SAS и что делать если оно не установлено?
R4SAS ладно если для set это еще приемлемо
R4SAS if (m_setIsGraceful) m_setIsGraceful(true);
orignal а для get надо m_getIsGracefuk ? m_getIsGraceful : false;
R4SAS if(m_getIsGraceful)
R4SAS if(m_getIsGraceful())
R4SAS InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING | MF_GRAYED, ID_ACCEPT_TRANSIT, "Accept &transit");
R4SAS } else
R4SAS InsertMenu (hPopup, -1, MF_BYPOSITION | MF_STRING, ID_ACCEPT_TRANSIT, "Accept &transit");
R4SAS так чтоли?
R4SAS логика что если грейсфул, то добавляется еще MF_GRAYED
R4SAS как пример
orignal да так
R4SAS что не так с этим классом?
R4SAS как я могу в него передать?
R4SAS функции уже описал
orignal а что там не так?
R4SAS если брать service-> то орет так: base operand of '->' has non-pointer type 'I2PService'
orignal так надо .
orignal I2PService service((PSTR)SERVICE_NAME);
R4SAS если . то начинает так орать: Win32/Win32Service.h:32:30: error: 'function' in namespace 'std' does not name a template type 32 | typedef std::function<bool ()> DaemonStart;
orignal видишь же его объявление
R4SAS вижу
R4SAS только почему когда я правильно использую он начинает орать что нет std
orignal я не знаю что ты далаешь
R4SAS typedef std::function<bool ()> DaemonStart; void SetDaemonStart (const DaemonStart& f) { m_daemonStart = f; };
R4SAS все как всегда
orignal и как вызываешь?
R4SAS service.SetDaemonStart (std::bind (&DaemonWin32::start, this));
R4SAS m_daemonStart ? m_daemonStart() : SetServiceStatus(SERVICE_STOPPED, "Unable to create callback");
orignal а у I2PService она есть?
R4SAS в нем и делаю
orignal возможно надо где то написать #include <functional>
orignal в Win32Service.g
R4SAS ага, так прокатило
R4SAS осталось только одно
R4SAS это тупость компилятора
R4SAS multiple definition of
R4SAS он почему то считает что я 2 раза дефайню SetIsGraceful, GetIsGraceful
R4SAS типа из Win32App и DaemonWin32
R4SAS оба инклудят Win32App.h
R4SAS и если верно помню, то фиксится это inline
orignal ты точно внутри класса их объявляешь?
R4SAS и если верно помню, то фиксится это inline
R4SAS ой
R4SAS Win32App не содержит классов
R4SAS даже не спрашивай почему
orignal тогда так нельзя
orignal надо писать или inline
orignal или внутри C++
R4SAS сделал inline
orignal будет работать
orignal а вот с переменнными так не прокатит
orignal надо C++17
R4SAS залил эту кучу в свою ветку
R4SAS далее надо пофиксить для лини обращение из морды....
R4SAS пока что просто затычка там
orignal дык