ProtocolServer: Turn this into a multi-instance service
Everyone who connects to ProtocolServer now gets his own instance. This means that different users can no longer talk to the same exact ProtocolServer process, enhanching security and stability.
This commit is contained in:
parent
a122a544da
commit
6f059ee830
Notes:
sideshowbarker
2024-07-19 05:06:58 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/6f059ee8305
3 changed files with 8 additions and 15 deletions
|
@ -2,10 +2,10 @@
|
|||
Socket=/tmp/portal/protocol
|
||||
SocketPermissions=660
|
||||
Lazy=1
|
||||
Priority=low
|
||||
KeepAlive=1
|
||||
User=protocol
|
||||
BootModes=text,graphical
|
||||
MultiInstance=1
|
||||
AcceptSocketConnections=1
|
||||
|
||||
[WebContent]
|
||||
Socket=/tmp/portal/webcontent
|
||||
|
|
|
@ -48,6 +48,8 @@ ClientConnection::~ClientConnection()
|
|||
void ClientConnection::die()
|
||||
{
|
||||
s_connections.remove(client_id());
|
||||
if (s_connections.is_empty())
|
||||
Core::EventLoop::current().quit(0);
|
||||
}
|
||||
|
||||
OwnPtr<Messages::ProtocolServer::IsSupportedProtocolResponse> ClientConnection::handle(const Messages::ProtocolServer::IsSupportedProtocol& message)
|
||||
|
|
|
@ -56,18 +56,9 @@ int main(int, char**)
|
|||
(void)*new ProtocolServer::GeminiProtocol;
|
||||
(void)*new ProtocolServer::HttpProtocol;
|
||||
(void)*new ProtocolServer::HttpsProtocol;
|
||||
auto server = Core::LocalServer::construct();
|
||||
bool ok = server->take_over_from_system_server();
|
||||
ASSERT(ok);
|
||||
server->on_ready_to_accept = [&] {
|
||||
auto client_socket = server->accept();
|
||||
if (!client_socket) {
|
||||
dbg() << "ProtocolServer: accept failed.";
|
||||
return;
|
||||
}
|
||||
static int s_next_client_id = 0;
|
||||
int client_id = ++s_next_client_id;
|
||||
IPC::new_client_connection<ProtocolServer::ClientConnection>(*client_socket, client_id);
|
||||
};
|
||||
|
||||
auto socket = Core::LocalSocket::take_over_accepted_socket_from_system_server();
|
||||
ASSERT(socket);
|
||||
IPC::new_client_connection<ProtocolServer::ClientConnection>(socket.release_nonnull(), 1);
|
||||
return event_loop.exec();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue