diff options
18 files changed, 58 insertions, 45 deletions
diff --git a/Userland/DevTools/HackStudio/LanguageServers/ClientConnection.cpp b/Userland/DevTools/HackStudio/LanguageServers/ClientConnection.cpp index 567268a994..f7e21a2d36 100644 --- a/Userland/DevTools/HackStudio/LanguageServers/ClientConnection.cpp +++ b/Userland/DevTools/HackStudio/LanguageServers/ClientConnection.cpp @@ -14,10 +14,10 @@ namespace LanguageServers { static HashMap<int, RefPtr<ClientConnection>> s_connections; -ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id) - : IPC::ClientConnection<LanguageClientEndpoint, LanguageServerEndpoint>(*this, move(socket), client_id) +ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket) + : IPC::ClientConnection<LanguageClientEndpoint, LanguageServerEndpoint>(*this, move(socket), 1) { - s_connections.set(client_id, *this); + s_connections.set(1, *this); } ClientConnection::~ClientConnection() diff --git a/Userland/DevTools/HackStudio/LanguageServers/ClientConnection.h b/Userland/DevTools/HackStudio/LanguageServers/ClientConnection.h index 1901743463..951da34cac 100644 --- a/Userland/DevTools/HackStudio/LanguageServers/ClientConnection.h +++ b/Userland/DevTools/HackStudio/LanguageServers/ClientConnection.h @@ -20,7 +20,7 @@ namespace LanguageServers { class ClientConnection : public IPC::ClientConnection<LanguageClientEndpoint, LanguageServerEndpoint> { public: - explicit ClientConnection(NonnullRefPtr<Core::LocalSocket>, int client_id); + explicit ClientConnection(NonnullRefPtr<Core::LocalSocket>); ~ClientConnection() override; virtual void die() override; diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/ClientConnection.h b/Userland/DevTools/HackStudio/LanguageServers/Cpp/ClientConnection.h index f67e888015..c2fae04cca 100644 --- a/Userland/DevTools/HackStudio/LanguageServers/Cpp/ClientConnection.h +++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/ClientConnection.h @@ -15,8 +15,8 @@ class ClientConnection final : public LanguageServers::ClientConnection { C_OBJECT(ClientConnection); private: - ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id) - : LanguageServers::ClientConnection(move(socket), client_id) + ClientConnection(NonnullRefPtr<Core::LocalSocket> socket) + : LanguageServers::ClientConnection(move(socket)) { m_autocomplete_engine = make<CppComprehensionEngine>(m_filedb); m_autocomplete_engine->set_declarations_of_document_callback = [this](const String& filename, Vector<GUI::AutocompleteProvider::Declaration>&& declarations) { diff --git a/Userland/DevTools/HackStudio/LanguageServers/Cpp/main.cpp b/Userland/DevTools/HackStudio/LanguageServers/Cpp/main.cpp index b40b972a92..3fd711bbc2 100644 --- a/Userland/DevTools/HackStudio/LanguageServers/Cpp/main.cpp +++ b/Userland/DevTools/HackStudio/LanguageServers/Cpp/main.cpp @@ -6,14 +6,12 @@ #include "ClientConnection.h" #include "Tests.h" -#include <AK/LexicalPath.h> #include <LibCore/ArgsParser.h> #include <LibCore/EventLoop.h> #include <LibCore/LocalServer.h> #include <LibCore/System.h> -#include <LibIPC/ClientConnection.h> +#include <LibIPC/SingleServer.h> #include <LibMain/Main.h> -#include <unistd.h> static ErrorOr<int> mode_server(); @@ -36,8 +34,7 @@ ErrorOr<int> mode_server() Core::EventLoop event_loop; TRY(Core::System::pledge("stdio unix recvfd rpath")); - auto socket = TRY(Core::LocalSocket::take_over_accepted_socket_from_system_server()); - (void)IPC::new_client_connection<LanguageServers::Cpp::ClientConnection>(move(socket), 1); + auto client = TRY(IPC::take_over_accepted_client_from_system_server<LanguageServers::Cpp::ClientConnection>()); TRY(Core::System::pledge("stdio recvfd rpath")); TRY(Core::System::unveil("/usr/include", "r")); diff --git a/Userland/DevTools/HackStudio/LanguageServers/Shell/ClientConnection.h b/Userland/DevTools/HackStudio/LanguageServers/Shell/ClientConnection.h index 3eb2adbde6..bedce254d9 100644 --- a/Userland/DevTools/HackStudio/LanguageServers/Shell/ClientConnection.h +++ b/Userland/DevTools/HackStudio/LanguageServers/Shell/ClientConnection.h @@ -16,8 +16,8 @@ class ClientConnection final : public LanguageServers::ClientConnection { C_OBJECT(ClientConnection); private: - ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id) - : LanguageServers::ClientConnection(move(socket), client_id) + ClientConnection(NonnullRefPtr<Core::LocalSocket> socket) + : LanguageServers::ClientConnection(move(socket)) { m_autocomplete_engine = make<ShellComprehensionEngine>(m_filedb); m_autocomplete_engine->set_declarations_of_document_callback = [this](const String& filename, Vector<GUI::AutocompleteProvider::Declaration>&& declarations) { diff --git a/Userland/DevTools/HackStudio/LanguageServers/Shell/main.cpp b/Userland/DevTools/HackStudio/LanguageServers/Shell/main.cpp index 7b4c4b8a69..a36673ca6c 100644 --- a/Userland/DevTools/HackStudio/LanguageServers/Shell/main.cpp +++ b/Userland/DevTools/HackStudio/LanguageServers/Shell/main.cpp @@ -8,7 +8,7 @@ #include <LibCore/EventLoop.h> #include <LibCore/LocalServer.h> #include <LibCore/System.h> -#include <LibIPC/ClientConnection.h> +#include <LibIPC/SingleServer.h> #include <LibMain/Main.h> ErrorOr<int> serenity_main(Main::Arguments) @@ -16,8 +16,8 @@ ErrorOr<int> serenity_main(Main::Arguments) Core::EventLoop event_loop; TRY(Core::System::pledge("stdio unix rpath recvfd")); - auto socket = TRY(Core::LocalSocket::take_over_accepted_socket_from_system_server()); - (void)IPC::new_client_connection<LanguageServers::Shell::ClientConnection>(move(socket), 1); + auto client = TRY(IPC::take_over_accepted_client_from_system_server<LanguageServers::Shell::ClientConnection>()); + TRY(Core::System::pledge("stdio rpath recvfd")); TRY(Core::System::unveil("/etc/passwd", "r")); diff --git a/Userland/Libraries/LibIPC/SingleServer.h b/Userland/Libraries/LibIPC/SingleServer.h new file mode 100644 index 0000000000..36477ae40a --- /dev/null +++ b/Userland/Libraries/LibIPC/SingleServer.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <LibIPC/ClientConnection.h> + +namespace IPC { + +template<typename ClientConnectionType> +ErrorOr<NonnullRefPtr<ClientConnectionType>> take_over_accepted_client_from_system_server() +{ + auto socket = TRY(Core::LocalSocket::take_over_accepted_socket_from_system_server()); + return IPC::new_client_connection<ClientConnectionType>(move(socket)); +} + +} diff --git a/Userland/Services/FileSystemAccessServer/ClientConnection.cpp b/Userland/Services/FileSystemAccessServer/ClientConnection.cpp index b72a15bc11..0c045b33ba 100644 --- a/Userland/Services/FileSystemAccessServer/ClientConnection.cpp +++ b/Userland/Services/FileSystemAccessServer/ClientConnection.cpp @@ -20,10 +20,10 @@ namespace FileSystemAccessServer { static HashMap<int, NonnullRefPtr<ClientConnection>> s_connections; -ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id) - : IPC::ClientConnection<FileSystemAccessClientEndpoint, FileSystemAccessServerEndpoint>(*this, move(socket), client_id) +ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket) + : IPC::ClientConnection<FileSystemAccessClientEndpoint, FileSystemAccessServerEndpoint>(*this, move(socket), 1) { - s_connections.set(client_id, *this); + s_connections.set(1, *this); } ClientConnection::~ClientConnection() diff --git a/Userland/Services/FileSystemAccessServer/ClientConnection.h b/Userland/Services/FileSystemAccessServer/ClientConnection.h index a62676a180..ed86b40c9d 100644 --- a/Userland/Services/FileSystemAccessServer/ClientConnection.h +++ b/Userland/Services/FileSystemAccessServer/ClientConnection.h @@ -25,7 +25,7 @@ public: virtual void die() override; private: - explicit ClientConnection(NonnullRefPtr<Core::LocalSocket>, int client_id); + explicit ClientConnection(NonnullRefPtr<Core::LocalSocket>); virtual void request_file_read_only_approved(i32, i32, String const&) override; virtual void request_file(i32, i32, String const&, Core::OpenMode const&) override; diff --git a/Userland/Services/FileSystemAccessServer/main.cpp b/Userland/Services/FileSystemAccessServer/main.cpp index 9136fc0fc2..ecdcc984ba 100644 --- a/Userland/Services/FileSystemAccessServer/main.cpp +++ b/Userland/Services/FileSystemAccessServer/main.cpp @@ -5,10 +5,9 @@ */ #include <FileSystemAccessServer/ClientConnection.h> -#include <LibCore/LocalServer.h> #include <LibCore/System.h> #include <LibGUI/Application.h> -#include <LibIPC/ClientConnection.h> +#include <LibIPC/SingleServer.h> #include <LibMain/Main.h> ErrorOr<int> serenity_main(Main::Arguments) @@ -18,7 +17,6 @@ ErrorOr<int> serenity_main(Main::Arguments) auto app = GUI::Application::construct(0, nullptr); app->set_quit_when_last_window_deleted(false); - auto socket = TRY(Core::LocalSocket::take_over_accepted_socket_from_system_server()); - (void)IPC::new_client_connection<FileSystemAccessServer::ClientConnection>(move(socket), 1); + auto client = TRY(IPC::take_over_accepted_client_from_system_server<FileSystemAccessServer::ClientConnection>()); return app->exec(); } diff --git a/Userland/Services/ImageDecoder/main.cpp b/Userland/Services/ImageDecoder/main.cpp index a273ce20ae..d43f16f650 100644 --- a/Userland/Services/ImageDecoder/main.cpp +++ b/Userland/Services/ImageDecoder/main.cpp @@ -6,9 +6,8 @@ #include <ImageDecoder/ClientConnection.h> #include <LibCore/EventLoop.h> -#include <LibCore/LocalServer.h> #include <LibCore/System.h> -#include <LibIPC/ClientConnection.h> +#include <LibIPC/SingleServer.h> #include <LibMain/Main.h> ErrorOr<int> serenity_main(Main::Arguments) @@ -17,8 +16,8 @@ ErrorOr<int> serenity_main(Main::Arguments) TRY(Core::System::pledge("stdio recvfd sendfd unix")); TRY(Core::System::unveil(nullptr, nullptr)); - auto socket = TRY(Core::LocalSocket::take_over_accepted_socket_from_system_server()); - auto client = IPC::new_client_connection<ImageDecoder::ClientConnection>(move(socket)); + auto client = TRY(IPC::take_over_accepted_client_from_system_server<ImageDecoder::ClientConnection>()); + TRY(Core::System::pledge("stdio recvfd sendfd")); return event_loop.exec(); } diff --git a/Userland/Services/RequestServer/ClientConnection.cpp b/Userland/Services/RequestServer/ClientConnection.cpp index 75762628e6..31ba16406c 100644 --- a/Userland/Services/RequestServer/ClientConnection.cpp +++ b/Userland/Services/RequestServer/ClientConnection.cpp @@ -15,10 +15,10 @@ namespace RequestServer { static HashMap<int, RefPtr<ClientConnection>> s_connections; -ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id) - : IPC::ClientConnection<RequestClientEndpoint, RequestServerEndpoint>(*this, move(socket), client_id) +ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket) + : IPC::ClientConnection<RequestClientEndpoint, RequestServerEndpoint>(*this, move(socket), 1) { - s_connections.set(client_id, *this); + s_connections.set(1, *this); } ClientConnection::~ClientConnection() diff --git a/Userland/Services/RequestServer/ClientConnection.h b/Userland/Services/RequestServer/ClientConnection.h index 2ec60c54c8..5a4c1ab829 100644 --- a/Userland/Services/RequestServer/ClientConnection.h +++ b/Userland/Services/RequestServer/ClientConnection.h @@ -29,7 +29,7 @@ public: void did_request_certificates(Badge<Request>, Request&); private: - explicit ClientConnection(NonnullRefPtr<Core::LocalSocket>, int client_id); + explicit ClientConnection(NonnullRefPtr<Core::LocalSocket>); virtual Messages::RequestServer::IsSupportedProtocolResponse is_supported_protocol(String const&) override; virtual Messages::RequestServer::StartRequestResponse start_request(String const&, URL const&, IPC::Dictionary const&, ByteBuffer const&) override; diff --git a/Userland/Services/RequestServer/main.cpp b/Userland/Services/RequestServer/main.cpp index a97f26bc9b..e7da16b52c 100644 --- a/Userland/Services/RequestServer/main.cpp +++ b/Userland/Services/RequestServer/main.cpp @@ -8,7 +8,7 @@ #include <LibCore/EventLoop.h> #include <LibCore/LocalServer.h> #include <LibCore/System.h> -#include <LibIPC/ClientConnection.h> +#include <LibIPC/SingleServer.h> #include <LibMain/Main.h> #include <LibTLS/Certificate.h> #include <RequestServer/ClientConnection.h> @@ -36,8 +36,8 @@ ErrorOr<int> serenity_main(Main::Arguments) [[maybe_unused]] auto http = make<RequestServer::HttpProtocol>(); [[maybe_unused]] auto https = make<RequestServer::HttpsProtocol>(); - auto socket = TRY(Core::LocalSocket::take_over_accepted_socket_from_system_server()); - (void)IPC::new_client_connection<RequestServer::ClientConnection>(move(socket), 1); + auto client = TRY(IPC::take_over_accepted_client_from_system_server<RequestServer::ClientConnection>()); + auto result = event_loop.exec(); // FIXME: We exit instead of returning, so that protocol destructors don't get called. diff --git a/Userland/Services/WebContent/main.cpp b/Userland/Services/WebContent/main.cpp index 275c22697f..a636c78d81 100644 --- a/Userland/Services/WebContent/main.cpp +++ b/Userland/Services/WebContent/main.cpp @@ -7,7 +7,7 @@ #include <LibCore/EventLoop.h> #include <LibCore/LocalServer.h> #include <LibCore/System.h> -#include <LibIPC/ClientConnection.h> +#include <LibIPC/SingleServer.h> #include <LibMain/Main.h> #include <WebContent/ClientConnection.h> @@ -21,7 +21,6 @@ ErrorOr<int> serenity_main(Main::Arguments) TRY(Core::System::unveil("/tmp/portal/websocket", "rw")); TRY(Core::System::unveil(nullptr, nullptr)); - auto socket = TRY(Core::LocalSocket::take_over_accepted_socket_from_system_server()); - auto client = IPC::new_client_connection<WebContent::ClientConnection>(move(socket)); + auto client = IPC::take_over_accepted_client_from_system_server<WebContent::ClientConnection>(); return event_loop.exec(); } diff --git a/Userland/Services/WebSocket/ClientConnection.cpp b/Userland/Services/WebSocket/ClientConnection.cpp index 96cd7a8e2b..c4af86dfbd 100644 --- a/Userland/Services/WebSocket/ClientConnection.cpp +++ b/Userland/Services/WebSocket/ClientConnection.cpp @@ -13,10 +13,10 @@ namespace WebSocket { static HashMap<int, RefPtr<ClientConnection>> s_connections; -ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket, int client_id) - : IPC::ClientConnection<WebSocketClientEndpoint, WebSocketServerEndpoint>(*this, move(socket), client_id) +ClientConnection::ClientConnection(NonnullRefPtr<Core::LocalSocket> socket) + : IPC::ClientConnection<WebSocketClientEndpoint, WebSocketServerEndpoint>(*this, move(socket), 1) { - s_connections.set(client_id, *this); + s_connections.set(1, *this); } ClientConnection::~ClientConnection() diff --git a/Userland/Services/WebSocket/ClientConnection.h b/Userland/Services/WebSocket/ClientConnection.h index 49008d6369..8897ab030c 100644 --- a/Userland/Services/WebSocket/ClientConnection.h +++ b/Userland/Services/WebSocket/ClientConnection.h @@ -24,7 +24,7 @@ public: virtual void die() override; private: - explicit ClientConnection(NonnullRefPtr<Core::LocalSocket>, int client_id); + explicit ClientConnection(NonnullRefPtr<Core::LocalSocket>); virtual Messages::WebSocketServer::ConnectResponse connect(URL const&, String const&, Vector<String> const&, Vector<String> const&, IPC::Dictionary const&) override; virtual Messages::WebSocketServer::ReadyStateResponse ready_state(i32) override; diff --git a/Userland/Services/WebSocket/main.cpp b/Userland/Services/WebSocket/main.cpp index 9c29622fc2..b457eddf06 100644 --- a/Userland/Services/WebSocket/main.cpp +++ b/Userland/Services/WebSocket/main.cpp @@ -7,7 +7,7 @@ #include <LibCore/EventLoop.h> #include <LibCore/LocalServer.h> #include <LibCore/System.h> -#include <LibIPC/ClientConnection.h> +#include <LibIPC/SingleServer.h> #include <LibMain/Main.h> #include <LibTLS/Certificate.h> #include <WebSocket/ClientConnection.h> @@ -25,7 +25,7 @@ ErrorOr<int> serenity_main(Main::Arguments) TRY(Core::System::unveil("/tmp/portal/lookup", "rw")); TRY(Core::System::unveil(nullptr, nullptr)); - auto socket = TRY(Core::LocalSocket::take_over_accepted_socket_from_system_server()); - (void)IPC::new_client_connection<WebSocket::ClientConnection>(move(socket), 1); + auto client = TRY(IPC::take_over_accepted_client_from_system_server<WebSocket::ClientConnection>()); + return event_loop.exec(); } |