mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-01 23:35:41 +00:00
Fix segfault by switching from rapidjson to nlohmann::json
This commit is contained in:
parent
cd29f25435
commit
2658d0f785
@ -24,12 +24,8 @@
|
|||||||
#include "Http.h"
|
#include "Http.h"
|
||||||
// #include "SocketIO.h"
|
// #include "SocketIO.h"
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
#include <rapidjson/document.h>
|
|
||||||
#include <rapidjson/rapidjson.h>
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
namespace json = rapidjson;
|
|
||||||
|
|
||||||
void THeartbeatThread::operator()() {
|
void THeartbeatThread::operator()() {
|
||||||
RegisterThread("Heartbeat");
|
RegisterThread("Heartbeat");
|
||||||
std::string Body;
|
std::string Body;
|
||||||
@ -63,7 +59,7 @@ void THeartbeatThread::operator()() {
|
|||||||
auto Target = "/heartbeat";
|
auto Target = "/heartbeat";
|
||||||
unsigned int ResponseCode = 0;
|
unsigned int ResponseCode = 0;
|
||||||
|
|
||||||
json::Document Doc;
|
nlohmann::json Doc;
|
||||||
bool Ok = false;
|
bool Ok = false;
|
||||||
for (const auto& Url : Application::GetBackendUrlsInOrder()) {
|
for (const auto& Url : Application::GetBackendUrlsInOrder()) {
|
||||||
T = Http::POST(Url + Target, Body, "application/json", &ResponseCode, { { "api-v", "2" } });
|
T = Http::POST(Url + Target, Body, "application/json", &ResponseCode, { { "api-v", "2" } });
|
||||||
@ -72,8 +68,8 @@ void THeartbeatThread::operator()() {
|
|||||||
beammp_debug("Backend response was: `" + T + "`");
|
beammp_debug("Backend response was: `" + T + "`");
|
||||||
}
|
}
|
||||||
|
|
||||||
Doc.Parse(T.data(), T.size());
|
Doc = nlohmann::json::parse(T, nullptr, false);
|
||||||
if (Doc.HasParseError() || !Doc.IsObject()) {
|
if (Doc.is_discarded() || !Doc.is_object()) {
|
||||||
if (!Application::Settings.getAsBool(Settings::Key::General_Private)) {
|
if (!Application::Settings.getAsBool(Settings::Key::General_Private)) {
|
||||||
beammp_trace("Backend response failed to parse as valid json");
|
beammp_trace("Backend response failed to parse as valid json");
|
||||||
}
|
}
|
||||||
@ -94,18 +90,18 @@ void THeartbeatThread::operator()() {
|
|||||||
const auto MessageKey = "msg";
|
const auto MessageKey = "msg";
|
||||||
|
|
||||||
if (Ok) {
|
if (Ok) {
|
||||||
if (Doc.HasMember(StatusKey) && Doc[StatusKey].IsString()) {
|
if (Doc.contains(StatusKey) && Doc[StatusKey].is_string()) {
|
||||||
Status = Doc[StatusKey].GetString();
|
Status = Doc[StatusKey];
|
||||||
} else {
|
} else {
|
||||||
Ok = false;
|
Ok = false;
|
||||||
}
|
}
|
||||||
if (Doc.HasMember(CodeKey) && Doc[CodeKey].IsString()) {
|
if (Doc.contains(CodeKey) && Doc[CodeKey].is_string()) {
|
||||||
Code = Doc[CodeKey].GetString();
|
Code = Doc[CodeKey];
|
||||||
} else {
|
} else {
|
||||||
Ok = false;
|
Ok = false;
|
||||||
}
|
}
|
||||||
if (Doc.HasMember(MessageKey) && Doc[MessageKey].IsString()) {
|
if (Doc.contains(MessageKey) && Doc[MessageKey].is_string()) {
|
||||||
Message = Doc[MessageKey].GetString();
|
Message = Doc[MessageKey];
|
||||||
} else {
|
} else {
|
||||||
Ok = false;
|
Ok = false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user