Skip to content

Commit

Permalink
Userland: Make IPC handlers return void if they don't have any outputs
Browse files Browse the repository at this point in the history
  • Loading branch information
gunnarbeutner authored and awesomekling committed May 2, 2021
1 parent 7cf2839 commit 889359b
Show file tree
Hide file tree
Showing 30 changed files with 179 additions and 224 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ void ClientConnection::die()
exit(0);
}

Messages::LanguageServer::GreetResponse ClientConnection::handle(const Messages::LanguageServer::Greet& message)
void ClientConnection::handle(const Messages::LanguageServer::Greet& message)
{
m_filedb.set_project_root(message.project_root());
if (unveil(message.project_root().characters(), "r") < 0) {
Expand All @@ -41,7 +41,6 @@ Messages::LanguageServer::GreetResponse ClientConnection::handle(const Messages:
perror("unveil");
exit(1);
}
return {};
}

void ClientConnection::handle(const Messages::LanguageServer::FileOpened& message)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class ClientConnection
virtual void die() override;

protected:
virtual Messages::LanguageServer::GreetResponse handle(const Messages::LanguageServer::Greet&) override;
virtual void handle(const Messages::LanguageServer::Greet&) override;
virtual void handle(const Messages::LanguageServer::FileOpened&) override;
virtual void handle(const Messages::LanguageServer::FileEditInsertText&) override;
virtual void handle(const Messages::LanguageServer::FileEditRemoveText&) override;
Expand Down
30 changes: 23 additions & 7 deletions Userland/DevTools/IPCCompiler/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -370,8 +370,12 @@ class @message.name@ final : public IPC::Message {
)~~~");

message_generator.append(R"~~~(
virtual bool valid() const { return m_ipc_message_valid; }
virtual IPC::MessageBuffer encode() const override
{
VERIFY(valid());
IPC::MessageBuffer buffer;
IPC::Encoder stream(buffer);
stream << endpoint_magic();
Expand Down Expand Up @@ -536,30 +540,42 @@ class @endpoint.name@Endpoint : public IPC::Endpoint {
switch (message.message_id()) {
)~~~");
for (auto& message : endpoint.messages) {
auto do_decode_message = [&](const String& name, bool returns_something) {
auto do_handle_message = [&](const String& name, bool returns_something) {
auto message_generator = endpoint_generator.fork();

message_generator.set("message.name", name);
message_generator.set("message.response_type", message.response_name());
message_generator.append(R"~~~(
case (int)Messages::@endpoint.name@::MessageID::@message.name@: {
)~~~");
if (returns_something) {
message_generator.append(R"~~~(
if (message.outputs.is_empty()) {
message_generator.append(R"~~~(
handle(static_cast<const Messages::@endpoint.name@::@message.name@&>(message));
auto response = Messages::@endpoint.name@::@message.response_type@ { };
return make<IPC::MessageBuffer>(response.encode());
)~~~");
} else {
message_generator.append(R"~~~(
auto response = handle(static_cast<const Messages::@endpoint.name@::@message.name@&>(message));
if (!response.valid())
return {};
return make<IPC::MessageBuffer>(response.encode());
}
)~~~");
}
} else {
message_generator.append(R"~~~(
handle(static_cast<const Messages::@endpoint.name@::@message.name@&>(message));
return {};
}
)~~~");
}
message_generator.append(R"~~~(
}
)~~~");
};
do_decode_message(message.name, message.is_synchronous);
do_handle_message(message.name, message.is_synchronous);
if (message.is_synchronous)
do_decode_message(message.response_name(), false);
do_handle_message(message.response_name(), false);
}
endpoint_generator.append(R"~~~(
default:
Expand All @@ -574,7 +590,7 @@ class @endpoint.name@Endpoint : public IPC::Endpoint {
message_generator.set("message.name", message.name);

String return_type = "void";
if (message.is_synchronous) {
if (message.is_synchronous && !message.outputs.is_empty()) {
StringBuilder builder;
builder.append("Messages::");
builder.append(endpoint.name);
Expand Down
1 change: 1 addition & 0 deletions Userland/Libraries/LibIPC/Message.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class Message {
virtual u32 endpoint_magic() const = 0;
virtual int message_id() const = 0;
virtual const char* message_name() const = 0;
virtual bool valid() const = 0;
virtual MessageBuffer encode() const = 0;

protected:
Expand Down
4 changes: 1 addition & 3 deletions Userland/Libraries/LibProtocol/RequestClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,11 @@ void RequestClient::handle(const Messages::RequestClient::HeadersBecameAvailable
}
}

Messages::RequestClient::CertificateRequestedResponse RequestClient::handle(const Messages::RequestClient::CertificateRequested& message)
void RequestClient::handle(const Messages::RequestClient::CertificateRequested& message)
{
if (auto request = const_cast<Request*>(m_requests.get(message.request_id()).value_or(nullptr))) {
request->did_request_certificates({});
}

return {};
}

}
Expand Down
2 changes: 1 addition & 1 deletion Userland/Libraries/LibProtocol/RequestClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class RequestClient

virtual void handle(const Messages::RequestClient::RequestProgress&) override;
virtual void handle(const Messages::RequestClient::RequestFinished&) override;
virtual Messages::RequestClient::CertificateRequestedResponse handle(const Messages::RequestClient::CertificateRequested&) override;
virtual void handle(const Messages::RequestClient::CertificateRequested&) override;
virtual void handle(const Messages::RequestClient::HeadersBecameAvailable&) override;

HashMap<i32, RefPtr<Request>> m_requests;
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/WebContentClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,9 @@ void WebContentClient::handle(const Messages::WebContentClient::DidJSConsoleOutp
m_view.notify_server_did_js_console_output(message.method(), message.line());
}

Messages::WebContentClient::DidRequestAlertResponse WebContentClient::handle(const Messages::WebContentClient::DidRequestAlert& message)
void WebContentClient::handle(const Messages::WebContentClient::DidRequestAlert& message)
{
m_view.notify_server_did_request_alert({}, message.message());
return {};
}

Messages::WebContentClient::DidRequestConfirmResponse WebContentClient::handle(const Messages::WebContentClient::DidRequestConfirm& message)
Expand Down
2 changes: 1 addition & 1 deletion Userland/Libraries/LibWeb/WebContentClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class WebContentClient final
virtual void handle(const Messages::WebContentClient::DidGetSource&) override;
virtual void handle(const Messages::WebContentClient::DidJSConsoleOutput&) override;
virtual void handle(const Messages::WebContentClient::DidChangeFavicon&) override;
virtual Messages::WebContentClient::DidRequestAlertResponse handle(const Messages::WebContentClient::DidRequestAlert&) override;
virtual void handle(const Messages::WebContentClient::DidRequestAlert&) override;
virtual Messages::WebContentClient::DidRequestConfirmResponse handle(const Messages::WebContentClient::DidRequestConfirm&) override;
virtual Messages::WebContentClient::DidRequestPromptResponse handle(const Messages::WebContentClient::DidRequestPrompt&) override;
virtual Messages::WebContentClient::DidRequestCookieResponse handle(const Messages::WebContentClient::DidRequestCookie&) override;
Expand Down
15 changes: 5 additions & 10 deletions Userland/Services/AudioServer/ClientConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,20 +59,18 @@ void ClientConnection::did_change_main_mix_volume(Badge<Mixer>, int volume)
post_message(Messages::AudioClient::MainMixVolumeChanged(volume));
}

Messages::AudioServer::GreetResponse ClientConnection::handle(const Messages::AudioServer::Greet&)
void ClientConnection::handle(const Messages::AudioServer::Greet&)
{
return {};
}

Messages::AudioServer::GetMainMixVolumeResponse ClientConnection::handle(const Messages::AudioServer::GetMainMixVolume&)
{
return m_mixer.main_volume();
}

Messages::AudioServer::SetMainMixVolumeResponse ClientConnection::handle(const Messages::AudioServer::SetMainMixVolume& message)
void ClientConnection::handle(const Messages::AudioServer::SetMainMixVolume& message)
{
m_mixer.set_main_volume(message.volume());
return {};
}

Messages::AudioServer::EnqueueBufferResponse ClientConnection::handle(const Messages::AudioServer::EnqueueBuffer& message)
Expand Down Expand Up @@ -105,18 +103,16 @@ Messages::AudioServer::GetPlayedSamplesResponse ClientConnection::handle(const M
return played;
}

Messages::AudioServer::SetPausedResponse ClientConnection::handle(const Messages::AudioServer::SetPaused& message)
void ClientConnection::handle(const Messages::AudioServer::SetPaused& message)
{
if (m_queue)
m_queue->set_paused(message.paused());
return {};
}

Messages::AudioServer::ClearBufferResponse ClientConnection::handle(const Messages::AudioServer::ClearBuffer& message)
void ClientConnection::handle(const Messages::AudioServer::ClearBuffer& message)
{
if (m_queue)
m_queue->clear(message.paused());
return {};
}

Messages::AudioServer::GetPlayingBufferResponse ClientConnection::handle(const Messages::AudioServer::GetPlayingBuffer&)
Expand All @@ -132,9 +128,8 @@ Messages::AudioServer::GetMutedResponse ClientConnection::handle(const Messages:
return m_mixer.is_muted();
}

Messages::AudioServer::SetMutedResponse ClientConnection::handle(const Messages::AudioServer::SetMuted& message)
void ClientConnection::handle(const Messages::AudioServer::SetMuted& message)
{
m_mixer.set_muted(message.muted());
return {};
}
}
10 changes: 5 additions & 5 deletions Userland/Services/AudioServer/ClientConnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,17 @@ class ClientConnection final : public IPC::ClientConnection<AudioClientEndpoint,
static void for_each(Function<void(ClientConnection&)>);

private:
virtual Messages::AudioServer::GreetResponse handle(const Messages::AudioServer::Greet&) override;
virtual void handle(const Messages::AudioServer::Greet&) override;
virtual Messages::AudioServer::GetMainMixVolumeResponse handle(const Messages::AudioServer::GetMainMixVolume&) override;
virtual Messages::AudioServer::SetMainMixVolumeResponse handle(const Messages::AudioServer::SetMainMixVolume&) override;
virtual void handle(const Messages::AudioServer::SetMainMixVolume&) override;
virtual Messages::AudioServer::EnqueueBufferResponse handle(const Messages::AudioServer::EnqueueBuffer&) override;
virtual Messages::AudioServer::GetRemainingSamplesResponse handle(const Messages::AudioServer::GetRemainingSamples&) override;
virtual Messages::AudioServer::GetPlayedSamplesResponse handle(const Messages::AudioServer::GetPlayedSamples&) override;
virtual Messages::AudioServer::SetPausedResponse handle(const Messages::AudioServer::SetPaused&) override;
virtual Messages::AudioServer::ClearBufferResponse handle(const Messages::AudioServer::ClearBuffer&) override;
virtual void handle(const Messages::AudioServer::SetPaused&) override;
virtual void handle(const Messages::AudioServer::ClearBuffer&) override;
virtual Messages::AudioServer::GetPlayingBufferResponse handle(const Messages::AudioServer::GetPlayingBuffer&) override;
virtual Messages::AudioServer::GetMutedResponse handle(const Messages::AudioServer::GetMuted&) override;
virtual Messages::AudioServer::SetMutedResponse handle(const Messages::AudioServer::SetMuted&) override;
virtual void handle(const Messages::AudioServer::SetMuted&) override;

Mixer& m_mixer;
RefPtr<BufferQueue> m_queue;
Expand Down
6 changes: 2 additions & 4 deletions Userland/Services/Clipboard/ClientConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,13 @@ void ClientConnection::die()
s_connections.remove(client_id());
}

Messages::ClipboardServer::GreetResponse ClientConnection::handle(const Messages::ClipboardServer::Greet&)
void ClientConnection::handle(const Messages::ClipboardServer::Greet&)
{
return {};
}

Messages::ClipboardServer::SetClipboardDataResponse ClientConnection::handle(const Messages::ClipboardServer::SetClipboardData& message)
void ClientConnection::handle(const Messages::ClipboardServer::SetClipboardData& message)
{
Storage::the().set_data(message.data(), message.mime_type(), message.metadata().entries());
return {};
}

Messages::ClipboardServer::GetClipboardDataResponse ClientConnection::handle(const Messages::ClipboardServer::GetClipboardData&)
Expand Down
4 changes: 2 additions & 2 deletions Userland/Services/Clipboard/ClientConnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ class ClientConnection final
void notify_about_clipboard_change();

private:
virtual Messages::ClipboardServer::GreetResponse handle(const Messages::ClipboardServer::Greet&) override;
virtual void handle(const Messages::ClipboardServer::Greet&) override;
virtual Messages::ClipboardServer::GetClipboardDataResponse handle(const Messages::ClipboardServer::GetClipboardData&) override;
virtual Messages::ClipboardServer::SetClipboardDataResponse handle(const Messages::ClipboardServer::SetClipboardData&) override;
virtual void handle(const Messages::ClipboardServer::SetClipboardData&) override;
};

}
3 changes: 1 addition & 2 deletions Userland/Services/ImageDecoder/ClientConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ void ClientConnection::die()
exit(0);
}

Messages::ImageDecoderServer::GreetResponse ClientConnection::handle(const Messages::ImageDecoderServer::Greet&)
void ClientConnection::handle(const Messages::ImageDecoderServer::Greet&)
{
return {};
}

Messages::ImageDecoderServer::DecodeImageResponse ClientConnection::handle(const Messages::ImageDecoderServer::DecodeImage& message)
Expand Down
2 changes: 1 addition & 1 deletion Userland/Services/ImageDecoder/ClientConnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class ClientConnection final
virtual void die() override;

private:
virtual Messages::ImageDecoderServer::GreetResponse handle(const Messages::ImageDecoderServer::Greet&) override;
virtual void handle(const Messages::ImageDecoderServer::Greet&) override;
virtual Messages::ImageDecoderServer::DecodeImageResponse handle(const Messages::ImageDecoderServer::DecodeImage&) override;
};

Expand Down
35 changes: 13 additions & 22 deletions Userland/Services/LaunchServer/ClientConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,8 @@ void ClientConnection::die()
s_connections.remove(client_id());
}

Messages::LaunchServer::GreetResponse ClientConnection::handle(const Messages::LaunchServer::Greet&)
void ClientConnection::handle(const Messages::LaunchServer::Greet&)
{
return {};
}

Messages::LaunchServer::OpenURLResponse ClientConnection::handle(const Messages::LaunchServer::OpenURL& request)
Expand Down Expand Up @@ -67,70 +66,62 @@ Messages::LaunchServer::GetHandlersWithDetailsForURLResponse ClientConnection::h
return Launcher::the().handlers_with_details_for_url(url);
}

Messages::LaunchServer::AddAllowedURLResponse ClientConnection::handle(const Messages::LaunchServer::AddAllowedURL& request)
void ClientConnection::handle(const Messages::LaunchServer::AddAllowedURL& request)
{
if (m_allowlist_is_sealed) {
did_misbehave("Got request to add more allowed handlers after list was sealed");
return {};
return;
}

if (!request.url().is_valid()) {
did_misbehave("Got request to allow invalid URL");
return {};
return;
}

m_allowlist.empend(String(), false, Vector<URL> { request.url() });

return {};
}

Messages::LaunchServer::AddAllowedHandlerWithAnyURLResponse ClientConnection::handle(const Messages::LaunchServer::AddAllowedHandlerWithAnyURL& request)
void ClientConnection::handle(const Messages::LaunchServer::AddAllowedHandlerWithAnyURL& request)
{
if (m_allowlist_is_sealed) {
did_misbehave("Got request to add more allowed handlers after list was sealed");
return {};
return;
}

if (request.handler_name().is_empty()) {
did_misbehave("Got request to allow empty handler name");
return {};
return;
}

m_allowlist.empend(request.handler_name(), true, Vector<URL>());

return {};
}

Messages::LaunchServer::AddAllowedHandlerWithOnlySpecificURLsResponse ClientConnection::handle(const Messages::LaunchServer::AddAllowedHandlerWithOnlySpecificURLs& request)
void ClientConnection::handle(const Messages::LaunchServer::AddAllowedHandlerWithOnlySpecificURLs& request)
{
if (m_allowlist_is_sealed) {
did_misbehave("Got request to add more allowed handlers after list was sealed");
return {};
return;
}

if (request.handler_name().is_empty()) {
did_misbehave("Got request to allow empty handler name");
return {};
return;
}

if (request.urls().is_empty()) {
did_misbehave("Got request to allow empty URL list");
return {};
return;
}

m_allowlist.empend(request.handler_name(), false, request.urls());

return {};
}

Messages::LaunchServer::SealAllowlistResponse ClientConnection::handle(const Messages::LaunchServer::SealAllowlist&)
void ClientConnection::handle(const Messages::LaunchServer::SealAllowlist&)
{
if (m_allowlist_is_sealed) {
did_misbehave("Got more than one request to seal the allowed handlers list");
return {};
return;
}

return {};
}

}
10 changes: 5 additions & 5 deletions Userland/Services/LaunchServer/ClientConnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ class ClientConnection final : public IPC::ClientConnection<LaunchClientEndpoint
private:
explicit ClientConnection(NonnullRefPtr<Core::LocalSocket>, int client_id);

virtual Messages::LaunchServer::GreetResponse handle(const Messages::LaunchServer::Greet&) override;
virtual void handle(const Messages::LaunchServer::Greet&) override;
virtual Messages::LaunchServer::OpenURLResponse handle(const Messages::LaunchServer::OpenURL&) override;
virtual Messages::LaunchServer::GetHandlersForURLResponse handle(const Messages::LaunchServer::GetHandlersForURL&) override;
virtual Messages::LaunchServer::GetHandlersWithDetailsForURLResponse handle(const Messages::LaunchServer::GetHandlersWithDetailsForURL&) override;
virtual Messages::LaunchServer::AddAllowedURLResponse handle(const Messages::LaunchServer::AddAllowedURL&) override;
virtual Messages::LaunchServer::AddAllowedHandlerWithAnyURLResponse handle(const Messages::LaunchServer::AddAllowedHandlerWithAnyURL&) override;
virtual Messages::LaunchServer::AddAllowedHandlerWithOnlySpecificURLsResponse handle(const Messages::LaunchServer::AddAllowedHandlerWithOnlySpecificURLs&) override;
virtual Messages::LaunchServer::SealAllowlistResponse handle(const Messages::LaunchServer::SealAllowlist&) override;
virtual void handle(const Messages::LaunchServer::AddAllowedURL&) override;
virtual void handle(const Messages::LaunchServer::AddAllowedHandlerWithAnyURL&) override;
virtual void handle(const Messages::LaunchServer::AddAllowedHandlerWithOnlySpecificURLs&) override;
virtual void handle(const Messages::LaunchServer::SealAllowlist&) override;

struct AllowlistEntry {
String handler_name;
Expand Down
Loading

0 comments on commit 889359b

Please sign in to comment.