diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/HaikuDaemon.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/HaikuDaemon.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/daemon/HaikuDaemon.cpp 2026-06-17 17:47:58.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/daemon/HaikuDaemon.cpp 2026-06-17 17:29:33.000000000 +0000 @@ -19,4 +19,6 @@ #include #include +#include +//#include #include "version.h" @@ -35,5 +37,7 @@ M_DUMMY_COMMAND, C_GRACEFUL_SHUTDOWN_UPDATE, - C_MAIN_VIEW_UPDATE + C_MAIN_VIEW_UPDATE, + M_SHOW_TUNNEL, + C_OPENHTTP }; constexpr bigtime_t GRACEFUL_SHUTDOWN_UPDATE_INTERVAL = 1000*1100; // in microseconds, ~ 1 sec @@ -49,7 +53,8 @@ void MessageReceived (BMessage * msg) override; bool QuitRequested () override; - + void GetInfoAboutTunnel(BMessage * msg); void UpdateMainView (); - + void OpenHTTPInterface(void); + template void DrawTunnel(T tun); private: BMessenger m_Messenger; @@ -75,4 +80,5 @@ AddChild (menuBar); auto runMenu = new BMenu ("Run"); + runMenu->AddItem (new BMenuItem ("Open web interface", new BMessage(C_OPENHTTP))); runMenu->AddItem (new BMenuItem ("Graceful shutdown", new BMessage (M_GRACEFUL_SHUTDOWN), 'G')); runMenu->AddItem (new BMenuItem ("Quit", new BMessage (B_QUIT_REQUESTED), 'Q')); @@ -83,7 +89,17 @@ auto tunnelsMenu = new BMenu ("Tunnels"); for (auto& it: i2p::client::context.GetClientTunnels ()) - tunnelsMenu->AddItem (new BMenuItem (it.second->GetName (), new BMessage (M_DUMMY_COMMAND))); + { + auto msg = new BMessage{M_SHOW_TUNNEL}; + msg->AddString("tunnel_name", BString(it.second->GetName())); + msg->AddBool("is_client_tunnel", true); + tunnelsMenu->AddItem (new BMenuItem (it.second->GetName (), msg)); + } for (auto& it: i2p::client::context.GetServerTunnels ()) - tunnelsMenu->AddItem (new BMenuItem (it.second->GetName (), new BMessage (M_DUMMY_COMMAND))); + { + auto msg = new BMessage{M_SHOW_TUNNEL}; + msg->AddString("tunnel_name", BString(it.second->GetName())); + msg->AddBool("is_client_tunnel", false); + tunnelsMenu->AddItem (new BMenuItem (it.second->GetName (), msg)); + } menuBar->AddItem (tunnelsMenu); m_MainView = new BStringView (BRect (20, 21, 300, 250), nullptr, "Starting...", B_FOLLOW_ALL, B_WILL_DRAW); @@ -105,6 +121,64 @@ } +template +void MainWindow :: DrawTunnel(T tun) // idk about type, so todo: change to normal type +{ + m_MainView->SetText( i2p::client::context.GetAddressBook().ToAddress(tun).c_str() ); +} + +void MainWindow :: GetInfoAboutTunnel(BMessage * msg) +{ + if(!msg) return; + bool isClient = false; + BString name{}; + msg->FindString("tunnel_name", &name); + msg->FindBool("is_client_tunnel", &isClient); + if (isClient) + { + for(auto it :i2p::client::context.GetClientTunnels () ) + { + if( BString(it.second->GetName()) == name ) + { + auto & ident = it.second->GetLocalDestination()->GetIdentHash(); + return DrawTunnel(ident); + //TODO: + } + } + }else { + for(auto it: i2p::client::context.GetServerTunnels()) + { + if( BString(it.second->GetName()) == name) + { + auto & ident = it.second->GetLocalDestination()->GetIdentHash(); + return DrawTunnel(ident); + //TODO: + } + } + }// if not client tunnel +} + +void MainWindow :: OpenHTTPInterface() +{ + bool enabled; i2p::config::GetOption("http.enabled", enabled); + uint16_t port; i2p::config::GetOption("http.port", port); + std::string address; i2p::config::GetOption("http.address", address); + if(!enabled) + { + return m_MainView->SetText("Not enabled http server"); + } +// int pid; + std::ostringstream com; + com << "WebPositive http://" << address << ":" << port; + //char * argv[] = {(char*)url.str().c_str() , NULL, NULL}; + //BRoster{}.Launch( "application/x-vnd.Haiku-WebPositive", 2, argv); + std::string url_s{url.str()}; + std::thread ([url_s]() { + system(url_s.c_str()); + }).detach(); +} + void MainWindow::MessageReceived (BMessage * msg) { + if (!msg) return; switch (msg->what) @@ -113,4 +187,11 @@ UpdateMainView (); break; + case C_OPENHTTP: + OpenHTTPInterface(); + + break; + case M_SHOW_TUNNEL: + GetInfoAboutTunnel(msg); + break; case M_GRACEFUL_SHUTDOWN: if (!m_GracefulShutdownTimer)