LibIPC+LibWeb: Transfer IPC::Files using sendmsg/recvmsg directly

This refactor eliminates the need for a second "fd passing socket" on
Lagom, as it uses SCM_RIGHTS in the expected fashion, to send fds along
with the data of our Unix socket message.
This commit is contained in:
Andrew Kaster 2024-04-17 16:46:24 -06:00 committed by Tim Flynn
commit cb87725ec8
Notes: sideshowbarker 2024-07-17 03:03:44 +09:00
9 changed files with 109 additions and 53 deletions

View file

@ -372,9 +372,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 ErrorOr<NonnullOwnPtr<@message.pascal_name@>> decode(Stream& stream, Core::LocalSocket& socket)
static ErrorOr<NonnullOwnPtr<@message.pascal_name@>> decode(Stream& stream, Queue<IPC::File>& files)
{
IPC::Decoder decoder { stream, socket };)~~~");
IPC::Decoder decoder { stream, files };)~~~");
for (auto const& parameter : parameters) {
auto parameter_generator = message_generator.fork();
@ -620,7 +620,7 @@ public:
static u32 static_magic() { return @endpoint.magic@; }
static ErrorOr<NonnullOwnPtr<IPC::Message>> decode_message(ReadonlyBytes buffer, [[maybe_unused]] Core::LocalSocket& socket)
static ErrorOr<NonnullOwnPtr<IPC::Message>> decode_message(ReadonlyBytes buffer, [[maybe_unused]] Queue<IPC::File>& files)
{
FixedMemoryStream stream { buffer };
auto message_endpoint_magic = TRY(stream.read_value<u32>());)~~~");
@ -649,7 +649,7 @@ public:
message_generator.append(R"~~~(
case (int)Messages::@endpoint.name@::MessageID::@message.pascal_name@:
return TRY(Messages::@endpoint.name@::@message.pascal_name@::decode(stream, socket));)~~~");
return TRY(Messages::@endpoint.name@::@message.pascal_name@::decode(stream, files));)~~~");
};
do_decode_message(message.name);