mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-01 23:35:41 +00:00
Fix segfault in http
This commit is contained in:
parent
62cc1e9ce4
commit
279c93179c
@ -26,7 +26,7 @@ const std::string ErrorString = "-1";
|
||||
namespace Server {
|
||||
void SetupEnvironment();
|
||||
// todo: Add non TLS Server Instance, this one is TLS only
|
||||
class THttpServerInstance : IThreaded {
|
||||
class THttpServerInstance {
|
||||
public:
|
||||
THttpServerInstance();
|
||||
static fs::path KeyFilePath;
|
||||
@ -42,6 +42,7 @@ namespace Server {
|
||||
* So we need to able to start the server (make it "listen()") in a single Thread.
|
||||
*/
|
||||
std::shared_ptr<httplib::SSLServer> mHttpLibServerInstancePtr;
|
||||
std::thread mThread;
|
||||
};
|
||||
// todo: all of these functions are likely unsafe,
|
||||
// todo: replace with something that's managed by a domain specific crypto library
|
||||
|
@ -8,11 +8,11 @@ public:
|
||||
IThreaded()
|
||||
// invokes operator() on this object
|
||||
: mThread() { }
|
||||
~IThreaded() noexcept {
|
||||
if (mThread.joinable()) {
|
||||
mThread.join();
|
||||
}
|
||||
~IThreaded() noexcept {
|
||||
if (mThread.joinable()) {
|
||||
mThread.join();
|
||||
}
|
||||
}
|
||||
|
||||
virtual void Start() final {
|
||||
mThread = std::thread([this] { (*this)(); });
|
||||
|
14
src/Http.cpp
14
src/Http.cpp
@ -233,6 +233,7 @@ void Http::Server::Tx509KeypairGenerator::GenerateAndWriteToDisk(const fs::path&
|
||||
X509_free(x509);
|
||||
return;
|
||||
}
|
||||
|
||||
bool Http::Server::Tx509KeypairGenerator::EnsureTLSConfigExists() {
|
||||
if (fs::is_regular_file(Application::Settings.SSLKeyPath)
|
||||
&& fs::is_regular_file(Application::Settings.SSLCertPath)) {
|
||||
@ -263,17 +264,20 @@ void Http::Server::SetupEnvironment() {
|
||||
}
|
||||
|
||||
Http::Server::THttpServerInstance::THttpServerInstance() {
|
||||
Start();
|
||||
mThread = std::thread(&Http::Server::THttpServerInstance::operator(), this);
|
||||
mThread.detach();
|
||||
}
|
||||
|
||||
void Http::Server::THttpServerInstance::operator()() {
|
||||
beammp_info("HTTPS Server started on port " + std::to_string(Application::Settings.HTTPServerPort));
|
||||
// todo: make this IP agnostic so people can set their own IP
|
||||
this->mHttpLibServerInstancePtr = std::make_shared<httplib::SSLServer>(Application::Settings.SSLCertPath.c_str(), Application::Settings.SSLKeyPath.c_str());
|
||||
this->mHttpLibServerInstancePtr->Get("/", [](const httplib::Request&, httplib::Response& res) {
|
||||
mHttpLibServerInstancePtr = std::make_shared<httplib::SSLServer>(Application::Settings.SSLCertPath.c_str(), Application::Settings.SSLKeyPath.c_str());
|
||||
mHttpLibServerInstancePtr->Get("/", [](const httplib::Request&, httplib::Response& res) {
|
||||
res.set_content("<!DOCTYPE html><article><h1>Hello World!</h1><section><p>BeamMP Server can now serve HTTP requests!</p></section></article></html>", "text/html");
|
||||
});
|
||||
this->mHttpLibServerInstancePtr->Get("/health", [](const httplib::Request& req, httplib::Response& res) {
|
||||
mHttpLibServerInstancePtr->Get("/health", [](const httplib::Request&, httplib::Response& res) {
|
||||
res.set_content("0", "text/plain");
|
||||
res.status = 200;
|
||||
});
|
||||
this->mHttpLibServerInstancePtr->listen("0.0.0.0", Application::Settings.HTTPServerPort);
|
||||
mHttpLibServerInstancePtr->listen("0.0.0.0", Application::Settings.HTTPServerPort);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user