~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 смотрю
HidUser0
Хз
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.
zzz
^^ from openjdk.java.net/jeps/380
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.
zzz
:)
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
ответ очевиден: github.com/PurpleI2P/i2pd/blob/openssl/Makefile.mingw#L7
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
R4SAS
***
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
да
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
да
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
да
orignal
только с проверкой на nullptr
orignal
что установлен
R4SAS
а он может быть не установлен?
orignal
так если нкто не вызвал SetIsGraceful то чему он будет равен?
R4SAS
я сомневаюсь что такое произойдет в процессе работы
R4SAS
оно же в демоне при старте устанавливается
orignal
ты не имеешь право полагаться на это
orignal
мало ли кто и как в дальнейшем будет твою либу использовать
R4SAS
и что делать если оно не установлено?
R4SAS
ладно если для set это еще приемлемо
R4SAS
if (m_setIsGraceful) m_setIsGraceful(true);
orignal
да
orignal
а для get надо m_getIsGracefuk ? m_getIsGraceful : false;
R4SAS
if(m_getIsGraceful)
R4SAS
{
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
дык