mirror of
https://github.com/RGBCube/serenity
synced 2025-05-21 16:45:07 +00:00

I broke this when I made the protocol objects be wrapped by smart pointers to appease static analysis. The Protocol base class currently VERIFY's that it's never called. So to have the best of both worlds until someone actually fixes the code to do proper de-registration, just call `exit(..)` so the smart pointers never go out of scope.
55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/OwnPtr.h>
|
|
#include <LibCore/EventLoop.h>
|
|
#include <LibCore/LocalServer.h>
|
|
#include <LibIPC/ClientConnection.h>
|
|
#include <LibTLS/Certificate.h>
|
|
#include <RequestServer/ClientConnection.h>
|
|
#include <RequestServer/GeminiProtocol.h>
|
|
#include <RequestServer/HttpProtocol.h>
|
|
#include <RequestServer/HttpsProtocol.h>
|
|
|
|
int main(int, char**)
|
|
{
|
|
if (pledge("stdio inet accept unix rpath sendfd recvfd", nullptr) < 0) {
|
|
perror("pledge");
|
|
return 1;
|
|
}
|
|
|
|
// Ensure the certificates are read out here.
|
|
[[maybe_unused]] auto& certs = DefaultRootCACertificates::the();
|
|
|
|
Core::EventLoop event_loop;
|
|
// FIXME: Establish a connection to LookupServer and then drop "unix"?
|
|
if (pledge("stdio inet accept unix sendfd recvfd", nullptr) < 0) {
|
|
perror("pledge");
|
|
return 1;
|
|
}
|
|
if (unveil("/tmp/portal/lookup", "rw") < 0) {
|
|
perror("unveil");
|
|
return 1;
|
|
}
|
|
if (unveil(nullptr, nullptr) < 0) {
|
|
perror("unveil");
|
|
return 1;
|
|
}
|
|
|
|
[[maybe_unused]] auto gemini = make<RequestServer::GeminiProtocol>();
|
|
[[maybe_unused]] auto http = make<RequestServer::HttpProtocol>();
|
|
[[maybe_unused]] auto https = make<RequestServer::HttpsProtocol>();
|
|
|
|
auto socket = Core::LocalSocket::take_over_accepted_socket_from_system_server();
|
|
VERIFY(socket);
|
|
IPC::new_client_connection<RequestServer::ClientConnection>(socket.release_nonnull(), 1);
|
|
auto result = event_loop.exec();
|
|
|
|
// FIXME: We exit instead of returning, so that protocol destructors don't get called.
|
|
// The Protocol base class should probably do proper de-registration instead of
|
|
// just VERIFY_NOT_REACHED().
|
|
exit(result);
|
|
}
|