[General] Small refactoring

This commit is contained in:
momo5502 2017-02-10 22:02:13 +01:00
parent 77bda3aea3
commit 9d08e84627
6 changed files with 27 additions and 45 deletions

View File

@ -202,7 +202,7 @@ namespace Components
return false; return false;
} }
Utils::IO::CreateDirectory(download->mod); Utils::IO::CreateDir(download->mod);
Utils::IO::WriteFile(path, fDownload.buffer); Utils::IO::WriteFile(path, fDownload.buffer);
return true; return true;

View File

@ -346,7 +346,7 @@ namespace Components
} }
} }
Utils::IO::CreateDirectory(Utils::String::VA("raw/mapdump/%s/textures", world->baseName)); Utils::IO::CreateDir(Utils::String::VA("raw/mapdump/%s/textures", world->baseName));
mtl.append(Utils::String::VA("# Material Count: %d\n", materialCount)); mtl.append(Utils::String::VA("# Material Count: %d\n", materialCount));
Logger::Print("Exporting materials and faces...\n"); Logger::Print("Exporting materials and faces...\n");

View File

@ -139,17 +139,17 @@ namespace Components
#pragma endregion #pragma endregion
#pragma region Minidump uploader class implementation #pragma region Minidump uploader class implementation
const std::string MinidumpUpload::queuedMinidumpsFolder = "minidumps\\"; const std::string MinidumpUpload::QueuedMinidumpsFolder = "minidumps\\";
#ifdef DISABLE_BITMESSAGE #ifdef DISABLE_BITMESSAGE
const std::vector<std::string> MinidumpUpload::targetUrls = const std::vector<std::string> MinidumpUpload::TargetUrls =
{ {
"https://reich.io/upload.php", "https://reich.io/upload.php",
"https://hitlers.kz/upload.php" "https://hitlers.kz/upload.php"
}; };
#else #else
const std::string MinidumpUpload::targetAddress = "BM-2cSksR7gyyFcNK7MaFoxGCjRJWxtoGckdj"; const std::string MinidumpUpload::TargetAddress = "BM-2cSksR7gyyFcNK7MaFoxGCjRJWxtoGckdj";
const unsigned int MinidumpUpload::maxSegmentSize = 200 * 1024; // 200 kB const unsigned int MinidumpUpload::MaxSegmentSize = 200 * 1024; // 200 kB
#endif #endif
MinidumpUpload::MinidumpUpload() MinidumpUpload::MinidumpUpload()
@ -168,24 +168,9 @@ namespace Components
} }
} }
bool MinidumpUpload::EnsureQueuedMinidumpsFolderExists()
{
BOOL success = CreateDirectoryA(MinidumpUpload::queuedMinidumpsFolder.data(), nullptr);
if (success != TRUE)
{
success = (GetLastError() == ERROR_ALREADY_EXISTS);
}
return (success == TRUE);
}
Minidump* MinidumpUpload::CreateQueuedMinidump(LPEXCEPTION_POINTERS exceptionInfo, int minidumpType) Minidump* MinidumpUpload::CreateQueuedMinidump(LPEXCEPTION_POINTERS exceptionInfo, int minidumpType)
{ {
// Note that most of the Path* functions are DEPRECATED and they have been replaced by Cch variants that only work on Windows 8+. Utils::IO::CreateDir(MinidumpUpload::QueuedMinidumpsFolder);
// If you plan to drop support for Windows 7, please upgrade these calls to prevent accidental buffer overflows!
if (!EnsureQueuedMinidumpsFolderExists()) return nullptr;
// Current executable name // Current executable name
char exeFileName[MAX_PATH]; char exeFileName[MAX_PATH];
@ -203,7 +188,7 @@ namespace Components
// Combine with queuedMinidumpsFolder // Combine with queuedMinidumpsFolder
char filename[MAX_PATH] = { 0 }; char filename[MAX_PATH] = { 0 };
PathCombineA(filename, MinidumpUpload::queuedMinidumpsFolder.data(), Utils::String::VA("%s-" VERSION "-%s.dmp", exeFileName, filenameFriendlyTime)); PathCombineA(filename, MinidumpUpload::QueuedMinidumpsFolder.data(), Utils::String::VA("%s-" VERSION "-%s.dmp", exeFileName, filenameFriendlyTime));
// Generate the dump // Generate the dump
return Minidump::Create(filename, exceptionInfo, minidumpType); return Minidump::Create(filename, exceptionInfo, minidumpType);
@ -214,28 +199,28 @@ namespace Components
#ifndef DISABLE_BITMESSAGE #ifndef DISABLE_BITMESSAGE
// Preload public key for our target that will receive minidumps // Preload public key for our target that will receive minidumps
Logger::Print("About to send request for public key for minidump upload address.\n"); Logger::Print("About to send request for public key for minidump upload address.\n");
if (!BitMessage::RequestPublicKey(MinidumpUpload::targetAddress)) if (!BitMessage::RequestPublicKey(MinidumpUpload::TargetAddress))
{ {
Logger::Error("Failed to request public key for minidump collection address.\n"); Logger::Error("Failed to request public key for minidump collection address.\n");
} }
Logger::Print("Waiting for public key for minidump upload address.\n"); Logger::Print("Waiting for public key for minidump upload address.\n");
if (!BitMessage::WaitForPublicKey(MinidumpUpload::targetAddress)) if (!BitMessage::WaitForPublicKey(MinidumpUpload::TargetAddress))
{ {
Logger::Error("Failed to fetch public key for minidump collection address.\n"); Logger::Error("Failed to fetch public key for minidump collection address.\n");
} }
#endif #endif
// Check if folder exists // Check if folder exists
if (!PathIsDirectoryA(MinidumpUpload::queuedMinidumpsFolder.data())) if (!PathIsDirectoryA(MinidumpUpload::QueuedMinidumpsFolder.data()))
{ {
// Nothing to upload // Nothing to upload
Logger::Print("No minidumps to upload.\n"); Logger::Print("No minidumps to upload.\n");
return PathFileExistsA(MinidumpUpload::queuedMinidumpsFolder.data()) == FALSE; return PathFileExistsA(MinidumpUpload::QueuedMinidumpsFolder.data()) == FALSE;
} }
// Walk through directory and search for valid minidumps // Walk through directory and search for valid minidumps
WIN32_FIND_DATAA ffd; WIN32_FIND_DATAA ffd;
HANDLE hFind = FindFirstFileA(Utils::String::VA("%s\\*.dmp", MinidumpUpload::queuedMinidumpsFolder.data()), &ffd); HANDLE hFind = FindFirstFileA(Utils::String::VA("%s\\*.dmp", MinidumpUpload::QueuedMinidumpsFolder.data()), &ffd);
if (hFind != INVALID_HANDLE_VALUE) if (hFind != INVALID_HANDLE_VALUE)
{ {
do do
@ -243,7 +228,7 @@ namespace Components
if ((ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) continue; // ignore directory if ((ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) continue; // ignore directory
char fullPath[MAX_PATH_SIZE]; char fullPath[MAX_PATH_SIZE];
PathCombineA(fullPath, MinidumpUpload::queuedMinidumpsFolder.data(), ffd.cFileName); PathCombineA(fullPath, MinidumpUpload::QueuedMinidumpsFolder.data(), ffd.cFileName);
// Only upload if less than 5MB // Only upload if less than 5MB
if(Utils::IO::FileSize(fullPath) > (5 * 1024 * 1024)) continue; if(Utils::IO::FileSize(fullPath) > (5 * 1024 * 1024)) continue;
@ -309,7 +294,7 @@ namespace Components
#ifdef DISABLE_BITMESSAGE #ifdef DISABLE_BITMESSAGE
for (auto& targetUrl : targetUrls) for (auto& targetUrl : TargetUrls)
{ {
Utils::WebIO webio("Firefucks", targetUrl); Utils::WebIO webio("Firefucks", targetUrl);
@ -348,19 +333,19 @@ namespace Components
return false; return false;
#else #else
// BitMessage has a max msg size that is somewhere around 220 KB, split it up as necessary! // BitMessage has a max msg size that is somewhere around 220 KB, split it up as necessary!
auto totalParts = compressedMinidump.size() / MinidumpUpload::maxSegmentSize + 1; auto totalParts = compressedMinidump.size() / MinidumpUpload::MaxSegmentSize + 1;
extraHeaders.insert({ "Parts", Utils::String::VA("%d", totalParts) }); extraHeaders.insert({ "Parts", Utils::String::VA("%d", totalParts) });
for (size_t offset = 0; offset < compressedMinidump.size(); offset += MinidumpUpload::maxSegmentSize) for (size_t offset = 0; offset < compressedMinidump.size(); offset += MinidumpUpload::MaxSegmentSize)
{ {
auto extraPartHeaders = extraHeaders; auto extraPartHeaders = extraHeaders;
auto part = compressedMinidump.substr(offset, std::min(MinidumpUpload::maxSegmentSize, compressedMinidump.size() - offset)); auto part = compressedMinidump.substr(offset, std::min(MinidumpUpload::MaxSegmentSize, compressedMinidump.size() - offset));
auto partNum = offset / MinidumpUpload::maxSegmentSize + 1; auto partNum = offset / MinidumpUpload::MaxSegmentSize + 1;
extraPartHeaders.insert({ "Part", Utils::String::VA("%d", partNum) }); extraPartHeaders.insert({ "Part", Utils::String::VA("%d", partNum) });
Logger::Print("Uploading minidump %s (part %d out of %d, %d bytes)...\n", id.data(), partNum, totalParts, part.size()); Logger::Print("Uploading minidump %s (part %d out of %d, %d bytes)...\n", id.data(), partNum, totalParts, part.size());
BitMessage::SendMsg(MinidumpUpload::targetAddress, MinidumpUpload::Encode(part, extraPartHeaders)); BitMessage::SendMsg(MinidumpUpload::TargetAddress, MinidumpUpload::Encode(part, extraPartHeaders));
} }
return true; return true;

View File

@ -57,17 +57,14 @@ namespace Components
// Internally, this will compress the minidump and decorate it with proper markers and first-look headers. // Internally, this will compress the minidump and decorate it with proper markers and first-look headers.
static std::string Encode(std::string data, std::map<std::string, std::string> extraHeaders = {}); static std::string Encode(std::string data, std::map<std::string, std::string> extraHeaders = {});
// Ensures the queued minidumps folder exists. Will return false if the directory can't be created and does not exist.
static bool EnsureQueuedMinidumpsFolderExists();
// Contains the path to the minidumps folder. // Contains the path to the minidumps folder.
static const std::string queuedMinidumpsFolder; static const std::string QueuedMinidumpsFolder;
#ifdef DISABLE_BITMESSAGE #ifdef DISABLE_BITMESSAGE
static const std::vector<std::string> targetUrls; static const std::vector<std::string> TargetUrls;
#else #else
static const std::string targetAddress; static const std::string TargetAddress;
static const unsigned int maxSegmentSize; static const unsigned int MaxSegmentSize;
#endif #endif
}; };
} }

View File

@ -14,7 +14,7 @@ namespace Utils
auto pos = file.find_last_of("/\\"); auto pos = file.find_last_of("/\\");
if (pos != std::string::npos) if (pos != std::string::npos)
{ {
CreateDirectory(file.substr(0, pos)); CreateDir(file.substr(0, pos));
} }
std::ofstream stream(file, std::ios::binary | std::ofstream::out | (append ? std::ofstream::app : std::ofstream::out)); std::ofstream stream(file, std::ios::binary | std::ofstream::out | (append ? std::ofstream::app : std::ofstream::out));
@ -78,7 +78,7 @@ namespace Utils
return 0; return 0;
} }
bool CreateDirectory(std::string dir) bool CreateDir(std::string dir)
{ {
return std::experimental::filesystem::create_directories(dir); return std::experimental::filesystem::create_directories(dir);
} }

View File

@ -9,7 +9,7 @@ namespace Utils
bool ReadFile(std::string file, std::string* data); bool ReadFile(std::string file, std::string* data);
size_t FileSize(std::string file); size_t FileSize(std::string file);
std::string ReadFile(std::string file); std::string ReadFile(std::string file);
bool CreateDirectory(std::string dir); bool CreateDir(std::string dir);
std::vector<std::string> ListFiles(std::string dir); std::vector<std::string> ListFiles(std::string dir);
} }
} }