diff --git a/.gitignore b/.gitignore index 19dcf3e..5761bbb 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ *.exe *.out *.app -*.ipch \ No newline at end of file +*.ipch +*.IPCH \ No newline at end of file diff --git a/src/client_backend/.vs/client_backend/FileContentIndex/241364ba-939a-421e-95da-bddcc335f6a2.vsidx b/src/client_backend/.vs/client_backend/FileContentIndex/241364ba-939a-421e-95da-bddcc335f6a2.vsidx new file mode 100644 index 0000000..60083c6 Binary files /dev/null and b/src/client_backend/.vs/client_backend/FileContentIndex/241364ba-939a-421e-95da-bddcc335f6a2.vsidx differ diff --git a/src/client_backend/.vs/client_backend/FileContentIndex/3111ad5a-13d3-43b9-83fa-19dda700dcbe.vsidx b/src/client_backend/.vs/client_backend/FileContentIndex/3111ad5a-13d3-43b9-83fa-19dda700dcbe.vsidx new file mode 100644 index 0000000..d239228 Binary files /dev/null and b/src/client_backend/.vs/client_backend/FileContentIndex/3111ad5a-13d3-43b9-83fa-19dda700dcbe.vsidx differ diff --git a/src/client_backend/.vs/client_backend/FileContentIndex/374d371f-e365-43bf-ba37-50a869040065.vsidx b/src/client_backend/.vs/client_backend/FileContentIndex/374d371f-e365-43bf-ba37-50a869040065.vsidx deleted file mode 100644 index d261849..0000000 Binary files a/src/client_backend/.vs/client_backend/FileContentIndex/374d371f-e365-43bf-ba37-50a869040065.vsidx and /dev/null differ diff --git a/src/client_backend/.vs/client_backend/FileContentIndex/7f931e1d-eaa2-4eda-9f37-1841d9653338.vsidx b/src/client_backend/.vs/client_backend/FileContentIndex/7f931e1d-eaa2-4eda-9f37-1841d9653338.vsidx new file mode 100644 index 0000000..0aacfe6 Binary files /dev/null and b/src/client_backend/.vs/client_backend/FileContentIndex/7f931e1d-eaa2-4eda-9f37-1841d9653338.vsidx differ diff --git a/src/client_backend/.vs/client_backend/FileContentIndex/cdcdff32-362e-467b-b6b0-c6f03995c29f.vsidx b/src/client_backend/.vs/client_backend/FileContentIndex/cdcdff32-362e-467b-b6b0-c6f03995c29f.vsidx deleted file mode 100644 index 1af1117..0000000 Binary files a/src/client_backend/.vs/client_backend/FileContentIndex/cdcdff32-362e-467b-b6b0-c6f03995c29f.vsidx and /dev/null differ diff --git a/src/client_backend/.vs/client_backend/FileContentIndex/d49360ce-81c5-4fd1-963e-f96afcec7651.vsidx b/src/client_backend/.vs/client_backend/FileContentIndex/d49360ce-81c5-4fd1-963e-f96afcec7651.vsidx deleted file mode 100644 index 94c9fbc..0000000 Binary files a/src/client_backend/.vs/client_backend/FileContentIndex/d49360ce-81c5-4fd1-963e-f96afcec7651.vsidx and /dev/null differ diff --git a/src/client_backend/.vs/client_backend/FileContentIndex/eafbb085-e538-4b7d-987e-10230d812223.vsidx b/src/client_backend/.vs/client_backend/FileContentIndex/eafbb085-e538-4b7d-987e-10230d812223.vsidx new file mode 100644 index 0000000..c3de881 Binary files /dev/null and b/src/client_backend/.vs/client_backend/FileContentIndex/eafbb085-e538-4b7d-987e-10230d812223.vsidx differ diff --git a/src/client_backend/.vs/client_backend/v17/.suo b/src/client_backend/.vs/client_backend/v17/.suo index 49729df..627b5cc 100644 Binary files a/src/client_backend/.vs/client_backend/v17/.suo and b/src/client_backend/.vs/client_backend/v17/.suo differ diff --git a/src/client_backend/.vs/client_backend/v17/Browse.VC.db b/src/client_backend/.vs/client_backend/v17/Browse.VC.db index 22bf2ea..fa55a64 100644 Binary files a/src/client_backend/.vs/client_backend/v17/Browse.VC.db and b/src/client_backend/.vs/client_backend/v17/Browse.VC.db differ diff --git a/src/client_backend/check_dir.cpp b/src/client_backend/check_dir.cpp index 1e6acaa..581cad1 100644 --- a/src/client_backend/check_dir.cpp +++ b/src/client_backend/check_dir.cpp @@ -161,10 +161,10 @@ void process_changes(const FILE_NOTIFY_INFORMATION* pInfo) { return; } else { - std::thread scan_thread(action_scanfile_t, filename_str); + std::thread scan_thread(scan_file_t, filename_str); scan_thread.detach(); } - log(LOGLEVEL::INFO, "[process_changes()]: File change: ", filename_str.c_str(), " while monitoring directory for changes"); + //log(LOGLEVEL::INFO, "[process_changes()]: File change: ", filename_str.c_str(), " while monitoring directory for changes"); } /* this was the old algorithm. it was slower and used up more resources, because it used a database to track which files have been modified instead of using the windows internal functions void monitor_directory(LPCSTR directory) { diff --git a/src/client_backend/client_backend.vcxproj b/src/client_backend/client_backend.vcxproj index 12c31a3..7462ffc 100644 --- a/src/client_backend/client_backend.vcxproj +++ b/src/client_backend/client_backend.vcxproj @@ -150,6 +150,7 @@ + @@ -165,6 +166,7 @@ + diff --git a/src/client_backend/client_backend.vcxproj.filters b/src/client_backend/client_backend.vcxproj.filters index 0e2bae4..eb3dd59 100644 --- a/src/client_backend/client_backend.vcxproj.filters +++ b/src/client_backend/client_backend.vcxproj.filters @@ -60,6 +60,9 @@ Headerdateien + + Headerdateien + @@ -104,6 +107,9 @@ Headerdateien + + Headerdateien + diff --git a/src/client_backend/connect.cpp b/src/client_backend/connect.cpp index aa2fc5d..87b735d 100644 --- a/src/client_backend/connect.cpp +++ b/src/client_backend/connect.cpp @@ -41,7 +41,7 @@ size_t write_callback(void* contents, size_t size, size_t nmemb, void* userp) { return totalSize; } -int download_file_from_srv(const char* url, const char* outputFileName) { +int download_file_from_srv(const char* url, const char* output_file_path) { //use curl to download a file from a server CURL* curl; @@ -57,7 +57,7 @@ int download_file_from_srv(const char* url, const char* outputFileName) { curl_easy_setopt(curl, CURLOPT_URL, url); // Create a file to write the downloaded data - output_file = fopen(outputFileName, "wb"); + output_file = fopen(output_file_path, "wb"); if (!output_file) { curl_easy_cleanup(curl); return 1; diff --git a/src/client_backend/local_schedule.cpp b/src/client_backend/local_schedule.cpp index 6b879ff..807e3f7 100644 --- a/src/client_backend/local_schedule.cpp +++ b/src/client_backend/local_schedule.cpp @@ -64,7 +64,7 @@ bool is_task_due(const std::string& task_name, const std::string& cron_expressio is_valid_field(fields[3], current_time.tm_mon + 1) && is_valid_field(fields[4], current_time.tm_wday + 1)) { - // Check if the task has already been executed in this minute + // Check if the task has already been executed if (!task_states[task_name]) { // Set the flag to indicate that the task has been executed task_states[task_name] = true; @@ -72,7 +72,7 @@ bool is_task_due(const std::string& task_name, const std::string& cron_expressio } } else { - // Reset the flag for a new minute + // Reset the flag task_states[task_name] = false; } diff --git a/src/client_backend/log.cpp b/src/client_backend/log.cpp index eca71dd..29a75eb 100644 --- a/src/client_backend/log.cpp +++ b/src/client_backend/log.cpp @@ -19,46 +19,6 @@ std::string get_loglevel(LOGLEVEL level) { return "UNKNOWN"; } } -/* -template -void log(LOGLEVEL level, const std::string& message, Args&&... args) { - std::string prefix = get_loglevel(level); - std::time_t now = std::time(nullptr); - std::tm tm = *std::localtime(&now); - std::ostringstream logStream; - logStream << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << " " << prefix << message; - if constexpr (sizeof...(args) > 0) { - ((logStream << ' ' << std::forward(args)), ...); - } - logStream << std::endl; - std::string logString = logStream.str(); - - // Open the file based on log level - std::ofstream logFile; - switch (level) { - case LOGLEVEL::INFO: - logFile.open(INFOFILE, std::ios_base::app); - break; - case LOGLEVEL::WARNING: - logFile.open(WARNFILE, std::ios_base::app); - break; - case LOGLEVEL::ERROR: - logFile.open(ERRORFILE, std::ios_base::app); - break; - } - - // Write the log to the file - if (logFile.is_open()) { - logFile << logString.c_str(); - logFile.close(); - } - //write the log to the general file - logFile.open(LOGFILE, std::ios_base::app); - if (logFile.is_open()) { - logFile << logString.c_str(); - logFile.close(); - } -}*/ #endif \ No newline at end of file diff --git a/src/client_backend/log.h b/src/client_backend/log.h index 7f4dcb8..4ee232a 100644 --- a/src/client_backend/log.h +++ b/src/client_backend/log.h @@ -24,12 +24,17 @@ void log(LOGLEVEL level, const std::string& message, Args&&... args) { localtime_s(&tm, &now); int error = 0; std::ostringstream logStream; + std::ostringstream to_srv; + to_srv << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << ";" << prefix << ";" << message; logStream << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << " " << prefix << " " << message; if constexpr (sizeof...(args) > 0) { ((logStream << ' ' << std::forward(args)), ...); + ((to_srv << ' ' << std::forward(args)), ...); } logStream << std::endl; + to_srv << std::endl; std::string logString = logStream.str(); + std::string to_srv_string = to_srv.str(); printf("info from logger: %s", logString.c_str()); // Open the file based on log level FILE* fp; @@ -86,6 +91,10 @@ void log(LOGLEVEL level, const std::string& message, Args&&... args) { fprintf_s(fp, "%s", logString.c_str()); fclose(fp); } + if (fopen_s(&fp, SRV_LOGFILE, "a") == 0) { + fprintf_s(fp, "%s", to_srv_string.c_str()); + fclose(fp); + } } } diff --git a/src/client_backend/scan.cpp b/src/client_backend/scan.cpp index bbe3832..2bf42e2 100644 --- a/src/client_backend/scan.cpp +++ b/src/client_backend/scan.cpp @@ -12,6 +12,7 @@ #include "well_known.h" #include "log.h" #include "virus_ctrl.h" +#include "app_ctrl.h" #ifndef SCAN_CPP #define SCAN_CPP std::unordered_map fileHandles; @@ -121,7 +122,7 @@ bool file_exists(const std::string& filePath) { } //this is the main function to scan folders. it will then start multuiple threads based on the number of cores / settings -void scan_folder_recursive(const std::string& directory) { +void scan_folder(const std::string& directory) { std::string search_path = directory + "\\*.*"; WIN32_FIND_DATA find_file_data; HANDLE hFind = FindFirstFile(search_path.c_str(), &find_file_data); @@ -140,7 +141,7 @@ void scan_folder_recursive(const std::string& directory) { const std::string full_path = directory + "\\" + find_file_data.cFileName; if (find_file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // If it's a directory, recurse into it - scan_folder_recursive(full_path); + scan_folder(full_path); } else { //action scanfile_t will start the trheads for scanning the hashes @@ -151,7 +152,7 @@ void scan_folder_recursive(const std::string& directory) { Sleep(10); } num_threads++; - std::thread scan_thread(action_scanfile_t, full_path); + std::thread scan_thread(scan_file_t, full_path); scan_thread.detach(); cnt++; @@ -169,10 +170,12 @@ void scan_folder_recursive(const std::string& directory) { //for singlethreaded scans void action_scanfile(const char*filepath) { + thread_init(); char* db_path = new char[300]; //log(LOGLEVEL::INFO, "[action_scanfile_t()]: Scanning file: ", filepath); if (strlen(filepath) == 0 or strcmp("", filepath) == 0 or file_exists(filepath) == false) { + thread_shutdown(); return; //no filepath given or file not accessible } else { @@ -184,35 +187,15 @@ void action_scanfile(const char*filepath) { delete[] hash; } delete[] db_path; - + thread_shutdown(); +} +void action_scanfolder(const char* folderpath) { + thread_init(); + scan_folder(folderpath); + thread_shutdown(); } -/* -void action_scanfile_t( const char*filepath) { - char* db_path = new char[300]; - int max_threads = std::thread::hardware_concurrency(); - //log(LOGLEVEL::INFO, "[action_scanfile_t()]: Scanning file: ", filepath); - if (strlen(filepath) == 0 or strcmp("", filepath) == 0 or file_exists(filepath) == false) { - return; //no filepath given or file not accessible - } - else { - char* hash = new char[300]; - hash[0] = '\0'; - hash = md5_file_t(filepath); - sprintf_s(db_path, 295, "%s\\%c%c.jdbf", DB_DIR, hash[0], hash[1]); - while (num_threads >= max_threads) { - Sleep(10); - } - num_threads++; - std::thread search_thread(search_hash,db_path, hash, filepath); - search_thread.detach(); - - std::this_thread::sleep_for(std::chrono::microseconds(50)); - delete[] hash; - } - delete[] db_path; -}*/ -void action_scanfile_t(const std::string& filepath_) { +void scan_file_t(const std::string& filepath_) { thread_local const std::string filepath (filepath_); thread_local char* db_path = new char[300]; thread_local char*hash = new char[300]; diff --git a/src/client_backend/scan.h b/src/client_backend/scan.h index 2d2e579..8c4bd42 100644 --- a/src/client_backend/scan.h +++ b/src/client_backend/scan.h @@ -10,9 +10,10 @@ #include #include #include -void scan_folder_recursive(const std::string& directory); +void scan_folder(const std::string& directory); void action_scanfile(const char* filepath); +void action_scanfolder(const char* folderpath); //void action_scanfile_t(const char* filepath); -void action_scanfile_t(const std::string& filepath_); +void scan_file_t(const std::string& filepath_); void initialize(const std::string& folderPath); void cleanup(); \ No newline at end of file diff --git a/src/client_backend/thread_ctrl.cpp b/src/client_backend/thread_ctrl.cpp index c5fcf87..dfea0b6 100644 --- a/src/client_backend/thread_ctrl.cpp +++ b/src/client_backend/thread_ctrl.cpp @@ -4,6 +4,7 @@ #include "log.h" #include "well_known.h" #include "scan.h" +#include "app_ctrl.h" void split(char* input,char*delimiter, char* out1, char* out2) { //split a string at the delimiter. the delimiter only occurs once. so the first part is out1 and the second part is out2 int i = 0; @@ -28,22 +29,26 @@ void split(char* input,char*delimiter, char* out1, char* out2) { } } } -int start_thread(const char*command) { - char*out2= new char[100]; //for the command - char*out1 = new char[300]; //for the arguments - split((char*)command, (char*)";", (char*)out1, (char*)out2); +int start_thread(const char* command) { + if (can_run_thread()) { + char* out2 = new char[100]; //for the command + char* out1 = new char[300]; //for the arguments + split((char*)command, (char*)";", (char*)out1, (char*)out2); - //printf("out1: %s\n", out1); - //printf("out2: %s\n", out2); - //determine what should be executed - if(strcmp(out1,"scanfile")==0){ - //start a new thread with the scanfile function - std::thread t1(action_scanfile, out2); + //printf("out1: %s\n", out1); + //printf("out2: %s\n", out2); + //determine what should be executed + if (strcmp(out1, "scanfile") == 0) { + //start a new thread with the scanfile function + std::thread t1(action_scanfile, out2); + } + else if (strcmp(out1, "scanfolder") == 0) { + //start a new thread with the scanfolder function + std::thread t1(action_scanfolder, out2); + } + delete[] out1; + delete[] out2; } - - - delete[] out1; - delete[] out2; return 0; } diff --git a/src/client_backend/update.cpp b/src/client_backend/update.cpp new file mode 100644 index 0000000..10ee946 --- /dev/null +++ b/src/client_backend/update.cpp @@ -0,0 +1,58 @@ +#ifndef UPDATE_CPP +#define UPDATE_CPP +#include "update.h" +#include "log.h" +#include "connect.h" +#include "settings.h" + + +int update_db(const std::string& folder_path) { + //download the databases from the server + for (char firstChar = '0'; firstChar <= 'f'; ++firstChar) { + for (char secondChar = '0'; secondChar <= 'f'; ++secondChar) { + // Ensure that the characters are valid hexadecimal digits + if (!std::isxdigit(firstChar) || !std::isxdigit(secondChar) or std::isupper(firstChar) or std::isupper(secondChar)) { + continue; + } + + // Create the filename based on the naming convention + std::string file_path = folder_path + "\\" + firstChar + secondChar + ".jdbf"; + std::string file_name = firstChar + secondChar + ".jdbf"; + //create the strings to download the files + char*url=new char[300]; + char*output_path=new char[300]; + get_setting("server:server_url", url); + strcat_s(url, 295,"/database/"); + strcat_s(url, 295,file_name.c_str() ); + strcpy_s(output_path, 295, file_path.c_str()); + + int res = download_file_from_srv(url, output_path); + if (res != 0) { + log(LOGLEVEL::ERR, "[update_db()]: Error downloading database file from server", url); + return 1; + } + + + delete[] url; + delete[] output_path; + + } + } + return 0; +} +int update_settings(const std::string& folder_path) { + //create the strings to download the files + char* url = new char[300]; + get_setting("server:server_url", url); + strcat_s(url, 295, "/database/"); + strcat_s(url, 295, "settings_db.txt"); + int res = download_file_from_srv(url, SETTINGS_DB); + if (res != 0) { + log(LOGLEVEL::ERR, "[update_db()]: Error downloading settings database file from server", url); + return 1; + } + + delete[] url; + return 0; +} +#endif \ No newline at end of file diff --git a/src/client_backend/update.h b/src/client_backend/update.h new file mode 100644 index 0000000..ff05d93 --- /dev/null +++ b/src/client_backend/update.h @@ -0,0 +1,7 @@ +#pragma once +#ifndef UPDATE_H +#define UPDATE_H +#include +int update_db(const std::string& folder_path); +int update_settings(const std::string& folder_path); +#endif \ No newline at end of file diff --git a/src/client_backend/well_known.h b/src/client_backend/well_known.h index bcbaa1c..f8bdff7 100644 --- a/src/client_backend/well_known.h +++ b/src/client_backend/well_known.h @@ -16,6 +16,7 @@ #define ERRORFILE "C:\\Program Files\\cyberhex\\secure\\log\\error.txt" #define VIRUSFILE "C:\\Program Files\\cyberhex\\secure\\log\\virus.txt" #define RISKFILE "C:\\Program Files\\cyberhex\\secure\\log\\risk.txt" +#define SRV_LOGFILE "C:\\Program Files\\cyberhex\\secure\\log\\srv_log.txt" #define FOLDER_DATABASE_DIR "C:\\Program Files\\cyberhex\\secure\\database\\folder" diff --git a/src/client_backend/x64/Debug/client_backend.ilk b/src/client_backend/x64/Debug/client_backend.ilk index 7fdb230..1723806 100644 Binary files a/src/client_backend/x64/Debug/client_backend.ilk and b/src/client_backend/x64/Debug/client_backend.ilk differ diff --git a/src/client_backend/x64/Debug/client_backend.log b/src/client_backend/x64/Debug/client_backend.log index 861eac4..adad5d4 100644 --- a/src/client_backend/x64/Debug/client_backend.log +++ b/src/client_backend/x64/Debug/client_backend.log @@ -1,8 +1,3 @@  Quellen werden auf Modulabhängigkeiten überprüft... - client_backend.cpp -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(70,24): warning C4244: "Argument": Konvertierung von "_Rep" in "DWORD", möglicher Datenverlust -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(70,24): warning C4244: with -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(70,24): warning C4244: [ -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(70,24): warning C4244: _Rep=__int64 -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(70,24): warning C4244: ] + update.cpp client_backend.vcxproj -> C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\x64\Debug\client_backend.exe diff --git a/src/client_backend/x64/Debug/client_backend.pdb b/src/client_backend/x64/Debug/client_backend.pdb index 9ebe9ba..ae13911 100644 Binary files a/src/client_backend/x64/Debug/client_backend.pdb and b/src/client_backend/x64/Debug/client_backend.pdb differ diff --git a/src/client_backend/x64/Debug/client_backend.tlog/CL.command.1.tlog b/src/client_backend/x64/Debug/client_backend.tlog/CL.command.1.tlog index 023852d..9987c18 100644 Binary files a/src/client_backend/x64/Debug/client_backend.tlog/CL.command.1.tlog and b/src/client_backend/x64/Debug/client_backend.tlog/CL.command.1.tlog differ diff --git a/src/client_backend/x64/Debug/client_backend.tlog/CL.read.1.tlog b/src/client_backend/x64/Debug/client_backend.tlog/CL.read.1.tlog index b132327..c6cef75 100644 Binary files a/src/client_backend/x64/Debug/client_backend.tlog/CL.read.1.tlog and b/src/client_backend/x64/Debug/client_backend.tlog/CL.read.1.tlog differ diff --git a/src/client_backend/x64/Debug/client_backend.tlog/CL.write.1.tlog b/src/client_backend/x64/Debug/client_backend.tlog/CL.write.1.tlog index d6f84f2..7b2d8be 100644 Binary files a/src/client_backend/x64/Debug/client_backend.tlog/CL.write.1.tlog and b/src/client_backend/x64/Debug/client_backend.tlog/CL.write.1.tlog differ diff --git a/src/client_backend/x64/Debug/client_backend.tlog/Cl.items.tlog b/src/client_backend/x64/Debug/client_backend.tlog/Cl.items.tlog index 9b6686e..ffdd0ee 100644 --- a/src/client_backend/x64/Debug/client_backend.tlog/Cl.items.tlog +++ b/src/client_backend/x64/Debug/client_backend.tlog/Cl.items.tlog @@ -12,4 +12,5 @@ C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\queue _ctrl.cpp C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\scan.cpp;C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\x64\Debug\scan.obj C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\settings.cpp;C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\x64\Debug\settings.obj C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\thread_ctrl.cpp;C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\x64\Debug\thread_ctrl.obj +C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\update.cpp;C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\x64\Debug\update.obj C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\virus_ctrl.cpp;C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\x64\Debug\virus_ctrl.obj diff --git a/src/client_backend/x64/Debug/client_backend.tlog/client_backend.write.1u.tlog b/src/client_backend/x64/Debug/client_backend.tlog/client_backend.write.1u.tlog index 19e5ceb..a51977a 100644 Binary files a/src/client_backend/x64/Debug/client_backend.tlog/client_backend.write.1u.tlog and b/src/client_backend/x64/Debug/client_backend.tlog/client_backend.write.1u.tlog differ diff --git a/src/client_backend/x64/Debug/client_backend.tlog/link.command.1.tlog b/src/client_backend/x64/Debug/client_backend.tlog/link.command.1.tlog index c30eeb2..bbbc686 100644 Binary files a/src/client_backend/x64/Debug/client_backend.tlog/link.command.1.tlog and b/src/client_backend/x64/Debug/client_backend.tlog/link.command.1.tlog differ diff --git a/src/client_backend/x64/Debug/client_backend.tlog/link.read.1.tlog b/src/client_backend/x64/Debug/client_backend.tlog/link.read.1.tlog index 0ac9874..0d97af3 100644 Binary files a/src/client_backend/x64/Debug/client_backend.tlog/link.read.1.tlog and b/src/client_backend/x64/Debug/client_backend.tlog/link.read.1.tlog differ diff --git a/src/client_backend/x64/Debug/client_backend.tlog/link.write.1.tlog b/src/client_backend/x64/Debug/client_backend.tlog/link.write.1.tlog index 040e790..ed6ece5 100644 Binary files a/src/client_backend/x64/Debug/client_backend.tlog/link.write.1.tlog and b/src/client_backend/x64/Debug/client_backend.tlog/link.write.1.tlog differ diff --git a/src/client_backend/x64/Debug/vc143.idb b/src/client_backend/x64/Debug/vc143.idb index 577e37d..acddec2 100644 Binary files a/src/client_backend/x64/Debug/vc143.idb and b/src/client_backend/x64/Debug/vc143.idb differ diff --git a/src/client_backend/x64/Debug/vc143.pdb b/src/client_backend/x64/Debug/vc143.pdb index b4d5713..2665dae 100644 Binary files a/src/client_backend/x64/Debug/vc143.pdb and b/src/client_backend/x64/Debug/vc143.pdb differ