From 2e1bbcb0faeae92d7595b8e0b022a8cdcecca07e Mon Sep 17 00:00:00 2001 From: sin-ack Date: Fri, 14 Jan 2022 13:12:49 +0000 Subject: LibCore+LibIPC+Everywhere: Return Stream::LocalSocket from LocalServer This change unfortunately cannot be atomically made without a single commit changing everything. Most of the important changes are in LibIPC/Connection.cpp, LibIPC/ServerConnection.cpp and LibCore/LocalServer.cpp. The notable changes are: - IPCCompiler now generates the decode and decode_message functions such that they take a Core::Stream::LocalSocket instead of the socket fd. - IPC::Decoder now uses the receive_fd method of LocalSocket instead of doing system calls directly on the fd. - IPC::ConnectionBase and related classes now use the Stream API functions. - IPC::ServerConnection no longer constructs the socket itself; instead, a convenience macro, IPC_CLIENT_CONNECTION, is used in place of C_OBJECT and will generate a static try_create factory function for the ServerConnection subclass. The subclass is now responsible for passing the socket constructed in this function to its ServerConnection base; the socket is passed as the first argument to the constructor (as a NonnullOwnPtr) before any other arguments. - The functionality regarding taking over sockets from SystemServer has been moved to LibIPC/SystemServerTakeover.cpp. The Core::LocalSocket implementation of this functionality hasn't been deleted due to my intention of removing this class in the near future and to reduce noise on this (already quite noisy) PR. --- Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Meta/Lagom') diff --git a/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp b/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp index 069507f49b..78de3ca3ce 100644 --- a/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/IPCCompiler/main.cpp @@ -368,9 +368,9 @@ public: static i32 static_message_id() { return (int)MessageID::@message.pascal_name@; } virtual const char* message_name() const override { return "@endpoint.name@::@message.pascal_name@"; } - static OwnPtr<@message.pascal_name@> decode(InputMemoryStream& stream, [[maybe_unused]] int sockfd) + static OwnPtr<@message.pascal_name@> decode(InputMemoryStream& stream, Core::Stream::LocalSocket& socket) { - IPC::Decoder decoder { stream, sockfd }; + IPC::Decoder decoder { stream, socket }; )~~~"); for (auto& parameter : parameters) { @@ -632,7 +632,7 @@ public: static u32 static_magic() { return @endpoint.magic@; } - static OwnPtr decode_message(ReadonlyBytes buffer, [[maybe_unused]] int sockfd) + static OwnPtr decode_message(ReadonlyBytes buffer, [[maybe_unused]] Core::Stream::LocalSocket& socket) { InputMemoryStream stream { buffer }; u32 message_endpoint_magic = 0; @@ -685,7 +685,7 @@ public: message_generator.append(R"~~~( case (int)Messages::@endpoint.name@::MessageID::@message.pascal_name@: - message = Messages::@endpoint.name@::@message.pascal_name@::decode(stream, sockfd); + message = Messages::@endpoint.name@::@message.pascal_name@::decode(stream, socket); break; )~~~"); }; -- cgit v1.2.3