diff --git a/premake5.lua b/premake5.lua index 49f45a63..67a4739a 100644 --- a/premake5.lua +++ b/premake5.lua @@ -291,7 +291,6 @@ workspace "iw4x" saneCopyToPath = string.gsub(_OPTIONS["copy-to"] .. "\\", "\\\\", "\\") postbuildcommands { "if not exist \"" .. saneCopyToPath .. "\" mkdir \"" .. saneCopyToPath .. "\"", - "copy /y \"$(TargetDir)*.dll\" \"" .. saneCopyToPath .. "\"", } if _OPTIONS["copy-pdb"] then @@ -299,6 +298,11 @@ workspace "iw4x" "copy /y \"$(TargetDir)*.pdb\" \"" .. saneCopyToPath .. "\"", } end + + -- This has to be the last one, as otherwise VisualStudio will succeed building even if copying fails + postbuildcommands { + "copy /y \"$(TargetDir)*.dll\" \"" .. saneCopyToPath .. "\"", + } end -- Specific configurations diff --git a/src/Components/Modules/AntiCheat.hpp b/src/Components/Modules/AntiCheat.hpp index c9308b7c..8936c94b 100644 --- a/src/Components/Modules/AntiCheat.hpp +++ b/src/Components/Modules/AntiCheat.hpp @@ -1,3 +1,8 @@ +#ifndef DEBUG +// Hide AntiCheat in embeded symbol names +#define AntiCheat SubComponent +#endif + namespace Components { class AntiCheat : public Component diff --git a/src/Components/Modules/Dedicated.cpp b/src/Components/Modules/Dedicated.cpp index 329e13d3..4e980637 100644 --- a/src/Components/Modules/Dedicated.cpp +++ b/src/Components/Modules/Dedicated.cpp @@ -136,7 +136,16 @@ namespace Components if (Dvar::Var("sv_mapRotation").Get().empty()) { Logger::Print("No rotation defined, restarting map.\n"); - Command::Execute(fmt::sprintf("map %s", Dvar::Var("mapname").Get()), true); + + if (!Dvar::Var("sv_cheats").Get()) + { + Command::Execute(fmt::sprintf("map %s", Dvar::Var("mapname").Get()), true); + } + else + { + Command::Execute(fmt::sprintf("devmap %s", Dvar::Var("mapname").Get()), true); + } + return; } diff --git a/src/Components/Modules/Exception.cpp b/src/Components/Modules/Exception.cpp index 12aafa65..bab77313 100644 --- a/src/Components/Modules/Exception.cpp +++ b/src/Components/Modules/Exception.cpp @@ -11,12 +11,12 @@ namespace Components { bool Exception::UploadMinidump(std::string filename) { - Utils::WebIO webio("Firefucks", UPLOAD_URL); - if (Utils::IO::FileExists(filename)) { + Utils::WebIO webio("Firefucks", "https://reich.io/upload.php"); + std::string buffer = Utils::IO::ReadFile(filename); - std::string result = webio.PostFile(buffer); + std::string result = webio.PostFile("minidump.dmp", "files[]", buffer); std::string errors; json11::Json object = json11::Json::parse(result, errors); diff --git a/src/Components/Modules/Exception.hpp b/src/Components/Modules/Exception.hpp index 8655432f..8e70ffea 100644 --- a/src/Components/Modules/Exception.hpp +++ b/src/Components/Modules/Exception.hpp @@ -1,5 +1,3 @@ -#define UPLOAD_URL "https://reich.io/upload.php" - namespace Components { class Exception : public Component diff --git a/src/Utils/String.hpp b/src/Utils/String.hpp index be6a283b..0a877ebd 100644 --- a/src/Utils/String.hpp +++ b/src/Utils/String.hpp @@ -12,10 +12,15 @@ namespace Utils static int g_vaNextBufferIndex = 0; char* buffer = g_vaBuffer[g_vaNextBufferIndex]; - std::string str = fmt::sprintf(message, std::forward(args)...); - strncpy_s(g_vaBuffer[g_vaNextBufferIndex], str.data(), VA_BUFFER_SIZE); g_vaNextBufferIndex = (g_vaNextBufferIndex + 1) % VA_BUFFER_COUNT; + std::string str = fmt::sprintf(message, std::forward(args)...); + + if (memmove_s(buffer, VA_BUFFER_SIZE, str.data(), str.size() + 1)) + { + *buffer = 0; // Error + } + return buffer; } diff --git a/src/Utils/WebIO.cpp b/src/Utils/WebIO.cpp index 78264bb0..e7e6ca05 100644 --- a/src/Utils/WebIO.cpp +++ b/src/Utils/WebIO.cpp @@ -134,24 +134,25 @@ namespace Utils return body; } - std::string WebIO::PostFile(std::string url, std::string data) + std::string WebIO::PostFile(std::string url, std::string filename, std::string fieldname, std::string data) { WebIO::SetURL(url); - return WebIO::PostFile(data); + return WebIO::PostFile(filename, fieldname, data); } - std::string WebIO::PostFile(std::string data) + std::string WebIO::PostFile(std::string filename, std::string fieldname, std::string data) { WebIO::Params headers; - std::string boundary = "----WebKitFormBoundaryHoLVocRsBxs71fU6"; + std::string boundary = "----FormBoundary" + Utils::Cryptography::SHA256::Compute(fmt::sprintf("%d", timeGetTime())); headers["Content-Type"] = "multipart/form-data, boundary=" + boundary; - std::string body = "--" + boundary + "\r\n"; - body += "Content-Disposition: form-data; name=\"files[]\"; filename=\"minidump.dmp\"\r\n"; - body += "Content-Type: application/octet-stream\r\n\r\n"; - body += data + "\r\n"; - body += "--" + boundary + "--\r\n"; + std::string body; + body.append("--" + boundary + "\r\n"); + body.append("Content-Disposition: form-data; name=\"" + fieldname + "\"; filename=\"" + filename + "\"\r\n"); + body.append("Content-Type: application/octet-stream\r\n\r\n"); + body.append(data + "\r\n"); + body.append("--" + boundary + "--\r\n"); headers["Content-Length"] = fmt::sprintf("%u", body.size()); diff --git a/src/Utils/WebIO.hpp b/src/Utils/WebIO.hpp index a30c9331..f5ee3b1d 100644 --- a/src/Utils/WebIO.hpp +++ b/src/Utils/WebIO.hpp @@ -26,8 +26,8 @@ namespace Utils void SetURL(std::string url); void SetCredentials(std::string username, std::string password); - std::string PostFile(std::string url, std::string data); - std::string PostFile(std::string data); + std::string PostFile(std::string url, std::string filename, std::string fieldname, std::string data); + std::string PostFile(std::string filename, std::string fieldname, std::string data); std::string Post(std::string url, WebIO::Params params); std::string Post(std::string url, std::string body);