This commit is contained in:
UnknownObject
2026-06-30 17:49:51 +08:00
commit 292c09619e
200 changed files with 23718 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
{
"configurations": [
{
"type": "cmake",
"request": "launch",
"name": "Debug portfile(s)",
"cmakeDebugType": "external",
"pipeName": "/tmp/vcpkg_ext_portfile_dbg",
"preLaunchTask": "Debug vcpkg commands"
}
]
}
+91
View File
@@ -0,0 +1,91 @@
cmake_minimum_required(VERSION 3.10)
cmake_policy(SET CMP0074 NEW)
project(unswsc LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
# Force-fPIC (For .so libraries)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
add_compile_options(-Wno-literal-suffix)
endif()
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()
find_package(OpenSSL REQUIRED)
find_package(fmt CONFIG REQUIRED)
find_package(jsoncpp CONFIG REQUIRED)
find_package(unofficial-sodium CONFIG REQUIRED)
# find_package(stduuid CONFIG REQUIRED)
# find_package(ICU REQUIRED COMPONENTS i18n uc io tu data)
add_library(webcc STATIC IMPORTED)
set_target_properties(webcc PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lib/libwebcc.a"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/webcc"
)
add_library(uohash SHARED IMPORTED)
set_target_properties(uohash PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/so/libuohash.so"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/uohash"
)
add_library(utextcodec SHARED IMPORTED)
set_target_properties(utextcodec PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/so/libutextcodec.so"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/utextcodec"
)
add_library(unswsc SHARED
CORSConfig.cpp # 跨域访问配置
SessionManager.cpp # 会话管理器
WebFileInfo.cpp # 文件信息封装类
ServerProcessor.cpp # 原始业务处理类
CORSProcessor.cpp # 跨域访问处理器
UNSResponseBuilder.cpp # HTTP相应构造器
SyncFileReceiver.cpp # 同步文件上传
DateTime.cpp # 日期和时间
IPTable.cpp # IP表
IPList.cpp # IP列表
Global.cpp # 全局变量/函数
FileReceiver.cpp # 异步文件上传
#JsonUnicodeWriter.cpp # 关闭Unicode自动转义的Writer
DataTransfer.cpp # 数据转移器
ServerLogger.cpp # 服务器日志类
LogArg.cpp # 服务器日志参数类型转换
ServerCore.cpp # 服务器内核
SafeRNG.cpp # 安全随机数生成器
HTTPObjects.cpp # webcc对象包装兼容层
PathTraversal.cpp # 路径穿越防御
)
# target_link_libraries(unswsc PRIVATE stduuid)
target_link_libraries(unswsc PRIVATE webcc)
target_link_libraries(unswsc PRIVATE uohash)
target_link_libraries(unswsc PRIVATE utextcodec)
target_link_libraries(unswsc PRIVATE fmt::fmt)
target_link_libraries(unswsc PRIVATE OpenSSL::Crypto)
target_link_libraries(unswsc PRIVATE JsonCpp::JsonCpp)
target_link_libraries(unswsc PRIVATE unofficial-sodium::sodium)
# target_link_libraries(unswsc PRIVATE ICU::i18n ICU::uc ICU::io ICU::tu ICU::data)
add_executable(logger_test
ServerLogger.cpp # 服务器日志类
LogArg.cpp # 服务器日志参数类型转换
TestLogger.cpp # 服务器日志测试
)
target_link_libraries(logger_test PRIVATE utextcodec)
target_link_libraries(logger_test PRIVATE fmt::fmt)
if(NOT TARGET rebuild)
add_custom_target(rebuild
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --target clean
COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_BINARY_DIR}" --parallel 10 --config Release
COMMENT ">>> Rebuilding entire project (clean + all) <<<"
)
endif()
+181
View File
@@ -0,0 +1,181 @@
#include "CORSConfig.h"
#include <map>
#include <vector>
#include <sstream>
#include "Global.h"
CORSConfig GlobalCORSConfig;
CORSConfig::CORSConfig()
{
max_age = 86400;
allow_cookie = false;
validate_urls = {};
validate_hosts = {};
validate_methods = { "GET", "POST", "OPTIONS" };
validate_headers =
{
"Accept",
"Accept-Language",
"Content-Language",
"Content-Type",
"Authorization",
"X-Requested-With",
"X-CSRF-Token",
"X-Client-Version",
"X-App-Id",
"X-Request-ID"
};
}
int CORSConfig::GetMaxAge() const
{
return max_age;
}
bool CORSConfig::AllowCookie() const
{
return allow_cookie;
}
std::string CORSConfig::GetValidateMethods() const
{
if (validate_methods.empty())
return std::string();
std::ostringstream oss;
size_t index = 0;
for (const auto& method : validate_methods)
{
if (index++ > 0)
oss << ", ";
oss << uns::tools::ToUpper(method); // 统一大写方法名
}
return oss.str();
}
bool CORSConfig::UrlValidate(const std::string& url) const
{
return (validate_urls.find(url) != validate_urls.end());
}
bool CORSConfig::HostValidate(const std::string& host) const
{
return (validate_hosts.find(host) != validate_hosts.end());
}
bool CORSConfig::IsMethodAllowed(const std::string method) const
{
return (validate_methods.find(method) != validate_methods.end());
}
std::string CORSConfig::GetValidateHeaders(const std::set<std::string>& headers) const
{
// build map from lowercase(validate_headers) => original form (preserve casing)
std::map<std::string, std::string> lowerToOriginal;
for (const auto& h : validate_headers)
lowerToOriginal[uns::tools::ToLower(h)] = h;
std::vector<std::string> allowedOut;
if (headers.empty())
{
// 返回服务端全部允许的头(保持 validate_headers 中的原始展示形式)
for (const auto& kv : lowerToOriginal)
allowedOut.push_back(kv.second);
}
else
{
// 交集比较(headers 已经是小写的—为了健壮性,再转换一次)
for (const auto& reqLower : headers)
{
std::string reqNorm = uns::tools::ToLower(reqLower);
auto it = lowerToOriginal.find(reqNorm);
if (it != lowerToOriginal.end())
allowedOut.push_back(it->second); // 使用原始展示形式
}
// 如果客户端请求了头(headers 非空)但交集为空,返回空字符串
}
if (allowedOut.empty())
return std::string();
// join with ", "
std::ostringstream oss;
for (size_t i = 0; i < allowedOut.size(); ++i)
{
if (i)
oss << ", ";
oss << allowedOut[i];
}
return oss.str();
}
void CORSConfig::SetMaxAge(int max_age)
{
this->max_age = max_age;
}
void CORSConfig::SetAllowCookie(bool allow)
{
allow_cookie = allow;
}
void CORSConfig::ClearValidateUrls()
{
validate_urls.clear();
}
void CORSConfig::ClearValidateHosts()
{
validate_hosts.clear();
}
void CORSConfig::ClearValidateMethods()
{
validate_methods.clear();
}
void CORSConfig::ClearValidateHeaders()
{
validate_headers.clear();
}
void CORSConfig::AddValidateUrl(const std::string& url)
{
validate_urls.insert(url);
}
void CORSConfig::AddValidateHost(const std::string& host)
{
validate_hosts.insert(host);
}
void CORSConfig::AddValidateMethod(const std::string& method)
{
validate_methods.insert(uns::tools::ToUpper(method));
}
void CORSConfig::AddValidateHeader(const std::string& header)
{
validate_headers.insert(header);
}
void CORSConfig::AddValidateUrls(const std::set<std::string>& urls)
{
for(const auto& url : urls)
validate_urls.insert(url);
}
void CORSConfig::AddValidateHosts(const std::set<std::string>& hosts)
{
for(const auto& host : hosts)
validate_hosts.insert(host);
}
void CORSConfig::AddValidateMethods(const std::set<std::string>& methods)
{
for(const auto& method : methods)
validate_methods.insert(method);
}
void CORSConfig::AddValidateHeaders(const std::set<std::string>& headers)
{
for(const auto& header : headers)
validate_headers.insert(header);
}
+47
View File
@@ -0,0 +1,47 @@
#include <set>
#include <string>
#include "Export.h"
class UNSWSC_DLL_EXPORT CORSConfig
{
private:
int max_age;
bool allow_cookie;
std::set<std::string> validate_urls;
std::set<std::string> validate_hosts;
std::set<std::string> validate_headers;
std::set<std::string> validate_methods;
public:
CORSConfig();
public:
int GetMaxAge() const;
bool AllowCookie() const;
std::string GetValidateMethods() const;
bool UrlValidate(const std::string& url) const;
bool HostValidate(const std::string& host) const;
bool IsMethodAllowed(const std::string method) const;
std::string GetValidateHeaders(const std::set<std::string>& headers = {}) const;
public:
void SetMaxAge(int max_age);
void SetAllowCookie(bool allow);
void ClearValidateUrls();
void ClearValidateHosts();
void ClearValidateMethods();
void ClearValidateHeaders();
void AddValidateUrl(const std::string& url);
void AddValidateHost(const std::string& host);
void AddValidateMethod(const std::string& method);
void AddValidateHeader(const std::string& header);
void AddValidateUrls(const std::set<std::string>& urls);
void AddValidateHosts(const std::set<std::string>& hosts);
void AddValidateMethods(const std::set<std::string>& methods);
void AddValidateHeaders(const std::set<std::string>& headers);
};
extern UNSWSC_DLL_EXPORT CORSConfig GlobalCORSConfig;
+146
View File
@@ -0,0 +1,146 @@
#include "CORSProcessor.h"
#include "ServerLogger.h"
#include "CORSConfig.h"
#include "UNSResponseBuilder.h"
// ----- 辅助函数(文件作用域) -----
static inline std::string Trim(const std::string& s)
{
size_t start = 0;
while ((start < s.size()) && std::isspace(static_cast<unsigned char>(s[start])))
++start;
if (start == s.size())
return "";
size_t end = s.size() - 1;
while ((end > start) && std::isspace(static_cast<unsigned char>(s[end])))
--end;
return s.substr(start, end - start + 1);
}
static inline std::vector<std::string> SplitByComma(const std::string& raw)
{
std::vector<std::string> parts;
std::istringstream ss(raw);
std::string token;
while (std::getline(ss, token, ','))
parts.push_back(token);
return parts;
}
// 1) 解析请求头(Access-Control-Request-Headers)
// 返回小写形式的集合(用于比较/交集)
std::set<std::string> CORSProcessor::ParseHeaderList(const std::string& raw_headers)
{
std::set<std::string> out;
if (raw_headers.empty())
return out;
auto parts = SplitByComma(raw_headers);
for (const auto& p : parts)
{
std::string t = Trim(p);
if (t.empty())
continue;
out.insert(uns::tools::ToLower(t)); // 规范化为小写用于比较
}
return out;
}
// 2) 解析请求方法字符串(Access-Control-Request-Method 或逗号分隔的 Methods)
// 返回大写形式的集合(用于比较)
std::set<std::string> CORSProcessor::ParseMethodList(const std::string& raw_headers)
{
std::set<std::string> out;
if (raw_headers.empty())
return out;
auto parts = SplitByComma(raw_headers);
for (const auto& p : parts)
{
std::string t = Trim(p);
if (t.empty())
continue;
out.insert(uns::tools::ToUpper(t));
}
return out;
}
uns::ResponsePtr CORSProcessor::Processor(uns::RequestPtr request)
{
if(request->GetMethod() != "OPTIONS")
return uns::ResponseBuilder().MethodNotAllowed().EmptyBody()();
SCLOG_INFO("OPTIONS Request Catched!");
if((!request->HasHeader(uns::cors::reqh_acrm)) || (!request->HasHeader(uns::cors::reqh_o)))
return uns::ResponseBuilder().BadRequest().EmptyBody()();
std::string origin = Trim(request->GetHeader(uns::cors::reqh_o));
std::string acrm = Trim(request->GetHeader(uns::cors::reqh_acrm));
std::string acrh = request->HasHeader(uns::cors::reqh_acrh) ? Trim(request->GetHeader(uns::cors::reqh_acrh)) : std::string();
std::string host = request->HasHeader("Host") ? request->GetHeader("Host") : "";
if ((!host.empty()) && (!GlobalCORSConfig.HostValidate(host)))
{
SCLOG_WARNING("Rejected by Host check: %s", host.c_str());
return uns::ResponseBuilder().Forbidden().EmptyBody()();
}
if(!GlobalCORSConfig.UrlValidate(origin))
{
SCLOG_WARNING("Invalid CORS Origin: %s", origin.c_str());
return uns::ResponseBuilder().Forbidden().EmptyBody()();
}
auto acrm_values = ParseMethodList(acrm);
if (acrm_values.empty())
{
SCLOG_WARNING("Empty Access-Control-Request-Method");
return uns::ResponseBuilder().BadRequest().EmptyBody()();
}
for(const auto& method : acrm_values)
if(!GlobalCORSConfig.IsMethodAllowed(method))
{
SCLOG_WARNING("Invalid CORS Method: %s (All Methods: %d)", method.c_str(), acrm.c_str());
return uns::ResponseBuilder().NotAcceptable().EmptyBody()();
}
auto acrh_values = acrh.empty() ? std::set<std::string>() : ParseHeaderList(acrh);
if (!acrh_values.empty())
{
const size_t MAX_HDR_COUNT = 50;
const size_t MAX_HDR_TOTAL_LEN = 4096; // 可调整
if ((acrh_values.size() > MAX_HDR_COUNT) || (acrh.size() > MAX_HDR_TOTAL_LEN))
{
SCLOG_WARNING("ACRH too large or too many entries");
return uns::ResponseBuilder().BadRequest().EmptyBody()();
}
}
auto valid_headers = GlobalCORSConfig.GetValidateHeaders(acrh_values);
if((!acrh_values.empty()) && valid_headers.empty())
{
SCLOG_WARNING("Invalid CORS Header(s): %s", acrh.c_str());
return uns::ResponseBuilder().NotAcceptable().EmptyBody()();
}
std::string allow_methods_value = GlobalCORSConfig.GetValidateMethods();
if (allow_methods_value.empty())
{
SCLOG_WARNING("No allowed methods configured");
return uns::ResponseBuilder().Forbidden().EmptyBody()();
}
SCLOG_INFO("CORS preflight allow origin=%s methods=%s headers=%s cred=%d", origin.c_str(), allow_methods_value.c_str(), valid_headers.c_str(), GlobalCORSConfig.AllowCookie() ? 1 : 0);
return uns::ResponseBuilder().CORS_Full(origin, acrh_values).NoContent().EmptyBody()();
}
std::string CORSProcessor::UrlRegex()
{
return R"(/[\s\S]*)";
}
std::shared_ptr<CORSProcessor> CORSProcessor::SharedPtr()
{
return std::make_shared<CORSProcessor>();
}
+15
View File
@@ -0,0 +1,15 @@
#include "ServerProcessor.h"
class CORSProcessor : public ServerProcessor
{
private:
std::set<std::string> ParseHeaderList(const std::string& raw_headers);
std::set<std::string> ParseMethodList(const std::string& raw_headers);
public:
uns::ResponsePtr Processor(uns::RequestPtr request) override;
public:
static std::string UrlRegex();
static std::shared_ptr<CORSProcessor> SharedPtr();
};
+180
View File
@@ -0,0 +1,180 @@
#include "DataTransfer.h"
#include <filesystem>
#include "ServerLogger.h"
DataTransfer::DataTransfer(const std::string& tr)
{
temp_root = tr;
}
void DataTransfer::Init(const std::string& tr)
{
temp_root = tr;
SCLOG_DEBUG("GDT-TempRoot: %s", temp_root.c_str());
}
bool DataTransfer::ItemExist(const std::string& file)
{
return (files.find(file) != files.end());
}
bool DataTransfer::InsertItem(const std::string& file)
{
if (ItemExist(file))
return false;
files.insert({ file, true });
SCLOG_INFO("GDT: Item [%s] Inserted", file.c_str());
return true;
}
bool DataTransfer::RemoveItem(const std::string& file)
{
if (!ItemExist(file))
return false;
files.erase(file);
SCLOG_INFO("GDT: Item [%s] Removed", file.c_str());
return true;
}
bool DataTransfer::ItemValidate(const std::string& file)
{
if (!ItemExist(file))
return false;
return files[file];
}
void DataTransfer::DeactivateItem(const std::string& file)
{
if (!ItemExist(file))
return;
files[file] = false;
SCLOG_INFO("GDT: Item [%s] Deactivated", file.c_str());
}
bool DataTransfer::CopyItemTo(const std::string& file, const std::string& dest_path)
{
if (!ItemExist(file))
return false;
namespace fs = std::filesystem;
std::error_code error;
if(!fs::exists(dest_path))
{
SCLOG_ERROR("GDT: Can't Copy File (Target Path [%s] Not Exist)", dest_path.c_str());
return false;
}
fs::path dest(dest_path);
fs::path dest_file = dest / file;
if(fs::copy_file(MakePath(file), dest_file, fs::copy_options::overwrite_existing, error))
{
SCLOG_INFO("GDT: File Copied To [%s]", dest_file.c_str());
return true;
}
else
{
SCLOG_ERROR("Failed To Delete File [%s], Error: %s (%d)", dest_file.c_str(), error.message().c_str(), error.value());
return false;
}
}
bool DataTransfer::CopyItemAS(const std::string& file, const std::string& dest)
{
if (!ItemExist(file))
return false;
namespace fs = std::filesystem;
std::error_code error;
fs::path dest_file = dest;
if(fs::copy_file(MakePath(file), dest_file, fs::copy_options::overwrite_existing, error))
{
SCLOG_INFO("GDT: File Copied To [%s]", dest_file.c_str());
return true;
}
else
{
SCLOG_ERROR("Failed To Delete File [%s], Error: %s (%d)", dest_file.c_str(), error.message().c_str(), error.value());
return false;
}
}
bool DataTransfer::RemoveAllCacheFiles()
{
SCLOG_INFO("Begin Cache Clear");
namespace fs = std::filesystem;
bool result = true;
std::error_code error;
if (files.empty())
{
SCLOG_INFO("No Cache File Found, Skip GDT Clear");
goto fs_scan;
}
for (const auto& [file, status] : files)
{
std::string filepath = MakePath(file);
if (!fs::exists(filepath, error))
{
SCLOG_WARNING("File [%s] Not Exist, Skip", filepath.c_str());
continue;
}
if (fs::remove(filepath, error))
SCLOG_INFO("File [%s] Deleted", filepath.c_str());
else
{
SCLOG_ERROR("Failed To Delete File [%s], Error: %s (%d)", filepath.c_str(), error.message().c_str(), error.value());
result = false;
}
}
if (result)
files.clear();
fs_scan:
SCLOG_INFO("Cache Clear Process (GDT) Finished, Begin Filesystem Scan");
int dirs = 0, files = 0, dirs_deleted = 0, files_deleted = 0;
for (const auto& entry : fs::directory_iterator(temp_root, error))
{
if (entry.is_directory())
{
dirs++;
try
{
if (fs::remove_all(entry.path(), error))
{
dirs_deleted++;
SCLOG_WARNING("Found Directory [%s] In Cache Directory, Deleted", entry.path().string().c_str());
}
else
SCLOG_ERROR("Found Directory [%s] In Cache Directory, Failed To Delete. Error: %s (%d)", entry.path().string().c_str(), error.message().c_str(), error.value());
}
catch (const std::exception& e)
{
SCLOG_ERROR("Found Directory [%s] In Cache Directory, Failed To Delete. Exception: %s", entry.path().string().c_str(), e.what());
}
}
else if (entry.is_regular_file())
{
files++;
if (fs::remove(entry.path(), error))
{
files_deleted++;
SCLOG_INFO("File [%s] Deleted", entry.path().string().c_str());
}
else
{
SCLOG_ERROR("Failed To Delete File [%s], Error: %s (%d)", entry.path().string().c_str(), error.message().c_str(), error.value());
result = false;
}
}
}
SCLOG_INFO("Filesystem Scan Finished, %d/%d Dir(s) And %d/%d Files(s) Deleted", dirs_deleted, dirs, files_deleted, files);
SCLOG_INFO("Cache Clear Finished");
return result;
}
std::string DataTransfer::MakePath(const std::string& file)
{
if (temp_root.empty() || (!ItemExist(file)))
return "";
if (temp_root[temp_root.size() - 1] == '/')
return temp_root + file;
else
return temp_root + "/" + file;
}
DataTransfer GlobalDataTransfer;
+41
View File
@@ -0,0 +1,41 @@
#pragma once
#include <map>
#include <string>
#include "Export.h"
class UNSWSC_DLL_EXPORT DataTransfer
{
private:
std::string temp_root;
std::map<std::string, bool> files;
public:
DataTransfer(const std::string& tr = "");
public:
void Init(const std::string& tr);
bool ItemExist(const std::string& file);
bool InsertItem(const std::string& file);
bool RemoveItem(const std::string& file);
bool ItemValidate(const std::string& file);
void DeactivateItem(const std::string& file);
bool CopyItemTo(const std::string& file, const std::string& dest_path);
bool CopyItemAS(const std::string& file, const std::string& dest);
public:
bool RemoveAllCacheFiles();
std::string MakePath(const std::string& file);
};
extern UNSWSC_DLL_EXPORT DataTransfer GlobalDataTransfer;
#define GDT_INIT(__tr__) GlobalDataTransfer.Init(__tr__)
#define GDT_ADDITEM(__file__) GlobalDataTransfer.InsertItem(__file__)
#define GDT_DELETEITEM(__file__) GlobalDataTransfer.RemoveItem(__file__)
#define GDT_ITEMEXIST(__file__) GlobalDataTransfer.ItemExist(__file__)
#define GDT_ITEMVALIDATE(__file__) GlobalDataTransfer.ItemValidate(__file__)
#define GDT_DEACTIVEITEM(__file__) GlobalDataTransfer.DeactivateItem(__file__)
#define GDT_GETFULLPATH(__file__ ) GlobalDataTransfer.MakePath(__file__)
#define GDT_CLEAR_ALL_CACHE() GlobalDataTransfer.RemoveAllCacheFiles()
#define GDT_COPY_TO(__file__, __dest_path__) GlobalDataTransfer.CopyItemTo(__file__, __dest_path__)
#define GDT_COPY_AS(__file__, __dest_path__) GlobalDataTransfer.CopyItemAS(__file__, __dest_path__)
+505
View File
@@ -0,0 +1,505 @@
#include "DateTime.h"
#include <chrono>
#include <format>
#include <stdexcept>
void DateTime::UpdateDT()
{
namespace ch = std::chrono;
auto tp = ch::system_clock::from_time_t(storage);
try
{
// C++20 时区感知:将系统时间转换为本地时间
auto local_tp = ch::current_zone()->to_local(tp);
auto dp = ch::floor<ch::days>(local_tp);
ch::year_month_day ymd { dp };
ch::hh_mm_ss hms { local_tp - dp };
sep_time.year = static_cast<int>(ymd.year());
sep_time.month = static_cast<unsigned>(ymd.month());
sep_time.day = static_cast<unsigned>(ymd.day());
sep_time.hour = hms.hours().count();
sep_time.minute = hms.minutes().count();
sep_time.second = static_cast<int>(hms.seconds().count());
}
catch (...)
{
// 备用方案:如果系统未配置或不支持本地时区数据库,平滑降级到传统安全实现
std::tm ptm {};
#ifdef _WIN32
localtime_s(&ptm, &storage);
#else
localtime_r(&storage, &ptm);
#endif
sep_time.year = ptm.tm_year + 1900;
sep_time.month = ptm.tm_mon + 1;
sep_time.day = ptm.tm_mday;
sep_time.hour = ptm.tm_hour;
sep_time.minute = ptm.tm_min;
sep_time.second = ptm.tm_sec;
}
}
time_t DateTime::FormatConvert(int year, int month, int day, int hour, int minute, int second)
{
namespace ch = std::chrono;
try
{
ch::year_month_day ymd { ch::year{year}, ch::month{static_cast<unsigned>(month)}, ch::day{static_cast<unsigned>(day)} };
if (!ymd.ok())
return 0;
auto local_tp = ch::local_days { ymd } + ch::hours { hour } + ch::minutes { minute } + ch::seconds { second };
// 将本地时间根据当前系统时区转换为系统标准时间(UTC)
return ch::system_clock::to_time_t(ch::current_zone()->to_sys(local_tp));
}
catch (...)
{
std::tm stm {};
stm.tm_year = year - 1900;
stm.tm_mon = month - 1;
stm.tm_mday = day;
stm.tm_hour = hour;
stm.tm_min = minute;
stm.tm_sec = second;
stm.tm_isdst = -1;
return ::mktime(&stm);
}
}
time_t DateTime::SpanedSeconds(Span sp)
{
namespace ch = std::chrono;
auto total = ch::days { sp.days } + ch::hours { sp.hours } + ch::minutes { sp.minutes } + ch::seconds { sp.seconds };
return ch::duration_cast<ch::seconds>(total).count();
}
DateTime::Span DateTime::ToSpan(time_t tim)
{
// 修复了原代码中天数数额赋给秒、余数计算混乱的 Bug
namespace ch = std::chrono;
ch::seconds total_secs { tim };
auto d = ch::duration_cast<ch::days>(total_secs);
total_secs -= d;
auto h = ch::duration_cast<ch::hours>(total_secs);
total_secs -= h;
auto m = ch::duration_cast<ch::minutes>(total_secs);
total_secs -= m;
Span sp;
sp.days = static_cast<int>(d.count());
sp.hours = static_cast<int>(h.count());
sp.minutes = static_cast<int>(m.count());
sp.seconds = static_cast<int>(total_secs.count());
return sp;
}
DateTime::DateTime()
{
storage = ::time(nullptr);
UpdateDT();
}
DateTime::DateTime(time_t t)
{
storage = t;
UpdateDT();
}
DateTime::DateTime(const tm& stm)
{
storage = ::mktime(const_cast<tm*>(&stm));
UpdateDT();
}
DateTime::DateTime(const Full& ftm)
{
storage = FormatConvert(ftm.year, ftm.month, ftm.day, ftm.hour, ftm.minute, ftm.second);
UpdateDT();
}
DateTime::DateTime(int year, int month, int day, int hour, int minute, int second)
{
storage = FormatConvert(year, month, day, hour, minute, second);
UpdateDT();
}
DateTime::DateTime(const DateTime& obj)
{
storage = obj.storage;
sep_time = obj.sep_time;
}
DateTime DateTime::Now()
{
return DateTime(::time(nullptr));
}
time_t DateTime::GetTimeStamp() const
{
return storage;
}
int DateTime::GetYear() const
{
return sep_time.year;
}
int DateTime::GetMonth() const
{
return sep_time.month;
}
int DateTime::GetDay() const
{
return sep_time.day;
}
int DateTime::GetHour() const
{
return sep_time.hour;
}
int DateTime::GetMinute() const
{
return sep_time.minute;
}
int DateTime::GetSecond() const
{
return sep_time.second;
}
DateTime::Full DateTime::GetFullDateTime() const
{
return sep_time;
}
std::string DateTime::Format(std::string fmt_str)
{
namespace ch = std::chrono;
try
{
// 1. 获取系统标准时间点
auto tp = ch::system_clock::from_time_t(storage);
// 2. 转换为本地时间点
auto local_tp = ch::current_zone()->to_local(tp);
// 3. 截断到秒级精度(防止打印出纳秒/微秒的小数点),并获取 C++20 支持格式化的强类型
auto local_secs = ch::floor<ch::seconds>(local_tp);
// 4. 组装 C++20 chrono 格式化字符串并执行
std::string chrono_fmt = "{:" + fmt_str + "}";
return std::vformat(chrono_fmt, std::make_format_args(local_secs));
}
catch (...)
{
// 如果 C++20 运行时时区数据库不可用,或者 fmt_str 包含不兼容的传统旧语法,平滑降级
size_t size = (fmt_str.size() * 2) + 10;
auto recv = std::make_unique<char[]>(size);
std::tm suctm = static_cast<std::tm>(*this);
size_t ret = ::strftime(recv.get(), size, fmt_str.c_str(), &suctm);
while (ret == 0)
{
size *= 2;
recv = std::make_unique<char[]>(size);
ret = ::strftime(recv.get(), size, fmt_str.c_str(), &suctm);
}
return std::string(recv.get());
}
}
bool DateTime::IsAM()
{
return (sep_time.hour < 12);
} // 修正逻辑:通常12点后为PM
bool DateTime::IsPM()
{
return (sep_time.hour >= 12);
}
bool DateTime::TimePassed()
{
return (storage < ::time(nullptr));
} // 修正逻辑:过去的时间应该小于现在
DateTime::operator tm()
{
std::tm stm {};
stm.tm_year = sep_time.year - 1900;
stm.tm_mon = sep_time.month - 1;
stm.tm_mday = sep_time.day;
stm.tm_hour = sep_time.hour;
stm.tm_min = sep_time.minute;
stm.tm_sec = sep_time.second;
stm.tm_isdst = -1;
return stm;
}
DateTime::operator Full()
{
return sep_time;
}
DateTime::operator time_t()
{
return storage;
}
DateTime::operator std::string()
{
return Format("%Y-%m-%dT%H:%M:%S+08:00");
}
// ================== 运算符重载实现 ==================
DateTime::Span DateTime::operator-(const tm& stm)
{
return ToSpan(storage - ::mktime(const_cast<tm*>(&stm)));
}
DateTime::Span DateTime::operator-(const Span& ts)
{
return ToSpan(storage - SpanedSeconds(ts));
}
DateTime::Span DateTime::operator-(const Full& sdt)
{
return ToSpan(storage - FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second));
}
DateTime::Span DateTime::operator-(const time_t& t)
{
return ToSpan(storage - t);
}
DateTime::Span DateTime::operator-(const DateTime& dt)
{
return ToSpan(storage - dt.storage);
}
DateTime::Span DateTime::operator+(const tm& stm)
{
return ToSpan(storage + ::mktime(const_cast<tm*>(&stm)));
}
DateTime::Span DateTime::operator+(const Span& ts)
{
return ToSpan(storage + SpanedSeconds(ts));
}
DateTime::Span DateTime::operator+(const Full& sdt)
{
return ToSpan(storage + FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second));
}
DateTime::Span DateTime::operator+(const time_t& t)
{
return ToSpan(storage + t);
}
DateTime::Span DateTime::operator+(const DateTime& dt)
{
return ToSpan(storage + dt.storage);
}
DateTime DateTime::operator=(const tm& stm)
{
storage = ::mktime(const_cast<tm*>(&stm)); UpdateDT(); return *this;
}
DateTime DateTime::operator=(const Full& sdt)
{
storage = FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second); UpdateDT(); return *this;
}
DateTime DateTime::operator=(const time_t& t)
{
storage = t; UpdateDT(); return *this;
}
DateTime DateTime::operator=(const DateTime& dt)
{
storage = dt.storage; UpdateDT(); return *this;
}
DateTime DateTime::operator+=(const tm& stm)
{
storage += ::mktime(const_cast<tm*>(&stm)); UpdateDT(); return *this;
}
DateTime DateTime::operator+=(const Span& ts)
{
storage += SpanedSeconds(ts); UpdateDT(); return *this;
}
DateTime DateTime::operator+=(const Full& sdt)
{
storage += FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second); UpdateDT(); return *this;
}
DateTime DateTime::operator+=(const time_t& t)
{
storage += t; UpdateDT(); return *this;
}
DateTime DateTime::operator+=(const DateTime& dt)
{
storage += dt.storage; UpdateDT(); return *this;
}
DateTime DateTime::operator-=(const tm& stm)
{
storage -= ::mktime(const_cast<tm*>(&stm)); UpdateDT(); return *this;
}
DateTime DateTime::operator-=(const Span& ts)
{
storage -= SpanedSeconds(ts); UpdateDT(); return *this;
}
DateTime DateTime::operator-=(const Full& sdt)
{
storage -= FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second); UpdateDT(); return *this;
}
DateTime DateTime::operator-=(const time_t& t)
{
storage -= t; UpdateDT(); return *this;
}
DateTime DateTime::operator-=(const DateTime& dt)
{
storage -= dt.storage; UpdateDT(); return *this;
}
bool DateTime::operator==(const tm& stm)
{
return storage == ::mktime(const_cast<tm*>(&stm));
}
bool DateTime::operator==(const Full& sdt)
{
return storage == FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second);
}
bool DateTime::operator==(const time_t& t)
{
return storage == t;
}
bool DateTime::operator==(const DateTime& dt)
{
return storage == dt.storage;
}
bool DateTime::operator!=(const tm& stm)
{
return !(*this == stm);
}
bool DateTime::operator!=(const Full& sdt)
{
return !(*this == sdt);
}
bool DateTime::operator!=(const time_t& t)
{
return storage != t;
}
bool DateTime::operator!=(const DateTime& dt)
{
return storage != dt.storage;
}
bool DateTime::operator>(const tm& stm)
{
return storage > ::mktime(const_cast<tm*>(&stm));
}
bool DateTime::operator>(const Full& sdt)
{
return storage > FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second);
}
bool DateTime::operator>(const time_t& t)
{
return storage > t;
}
bool DateTime::operator>(const DateTime& dt)
{
return storage > dt.storage;
}
bool DateTime::operator>=(const tm& stm)
{
return storage >= ::mktime(const_cast<tm*>(&stm));
}
bool DateTime::operator>=(const Full& sdt)
{
return storage >= FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second);
}
bool DateTime::operator>=(const time_t& t)
{
return storage >= t;
}
bool DateTime::operator>=(const DateTime& dt)
{
return storage >= dt.storage;
}
bool DateTime::operator<(const tm& stm)
{
return storage < ::mktime(const_cast<tm*>(&stm));
}
bool DateTime::operator<(const Full& sdt)
{
return storage < FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second);
}
bool DateTime::operator<(const time_t& t)
{
return storage < t;
}
bool DateTime::operator<(const DateTime& dt)
{
return storage < dt.storage;
}
bool DateTime::operator<(const DateTime& dt) const
{
return storage < dt.storage;
}
bool DateTime::operator<=(const tm& stm)
{
return storage <= ::mktime(const_cast<tm*>(&stm));
}
bool DateTime::operator<=(const Full& sdt)
{
return storage <= FormatConvert(sdt.year, sdt.month, sdt.day, sdt.hour, sdt.minute, sdt.second);
}
bool DateTime::operator<=(const time_t& t)
{
return storage <= t;
}
bool DateTime::operator<=(const DateTime& dt)
{
return storage <= dt.storage;
}
+122
View File
@@ -0,0 +1,122 @@
#pragma once
#include <time.h>
#include <string>
#include "Export.h"
class UNSWSC_DLL_EXPORT DateTime
{
public:
struct UNSWSC_DLL_EXPORT Full
{
int year, month, day, hour, minute, second;
};
struct UNSWSC_DLL_EXPORT Span
{
int days, hours, minutes, seconds;
};
private:
time_t storage;
Full sep_time;
private:
// 移除了硬编码的秒数常量,内部改用 std::chrono 处理
void UpdateDT();
time_t FormatConvert(int year, int month, int day, int hour, int minute, int second);
time_t SpanedSeconds(Span sp);
Span ToSpan(time_t tim);
public:
DateTime();
DateTime(time_t t);
DateTime(const tm& stm);
DateTime(const Full& ftm);
DateTime(const DateTime& obj);
DateTime(int year, int month, int day, int hour = 0, int minute = 0, int second = 0);
public:
static DateTime Now();
public:
int GetYear() const;
int GetMonth() const;
int GetDay() const;
int GetHour() const;
int GetMinute() const;
int GetSecond() const;
time_t GetTimeStamp() const;
Full GetFullDateTime() const;
std::string Format(std::string fmt_str);
public:
bool IsAM();
bool IsPM();
bool TimePassed();
public:
operator tm();
operator Full();
operator time_t();
operator std::string();
Span operator-(const tm& stm);
Span operator-(const Span& ts);
Span operator-(const Full& sdt);
Span operator-(const time_t& t);
Span operator-(const DateTime& dt);
Span operator+(const tm& stm);
Span operator+(const Span& ts);
Span operator+(const Full& sdt);
Span operator+(const time_t& t);
Span operator+(const DateTime& dt);
DateTime operator=(const tm& stm);
DateTime operator=(const Full& sdt);
DateTime operator=(const time_t& t);
DateTime operator=(const DateTime& dt);
DateTime operator+=(const tm& stm);
DateTime operator+=(const Span& ts);
DateTime operator+=(const Full& sdt);
DateTime operator+=(const time_t& t);
DateTime operator+=(const DateTime& dt);
DateTime operator-=(const tm& stm);
DateTime operator-=(const Span& ts);
DateTime operator-=(const Full& sdt);
DateTime operator-=(const time_t& t);
DateTime operator-=(const DateTime& dt);
bool operator==(const tm& stm);
bool operator==(const Full& sdt);
bool operator==(const time_t& t);
bool operator==(const DateTime& dt);
bool operator!=(const tm& stm);
bool operator!=(const Full& sdt);
bool operator!=(const time_t& t);
bool operator!=(const DateTime& dt);
bool operator>(const tm& stm);
bool operator>(const Full& sdt);
bool operator>(const time_t& t);
bool operator>(const DateTime& dt);
bool operator>=(const tm& stm);
bool operator>=(const Full& sdt);
bool operator>=(const time_t& t);
bool operator>=(const DateTime& dt);
bool operator<(const tm& stm);
bool operator<(const Full& sdt);
bool operator<(const time_t& t);
bool operator<(const DateTime& dt);
bool operator<(const DateTime& dt) const;
bool operator<=(const tm& stm);
bool operator<=(const Full& sdt);
bool operator<=(const time_t& t);
bool operator<=(const DateTime& dt);
};
+15
View File
@@ -0,0 +1,15 @@
#ifdef _WINDOWS
#ifdef UNSWEBSERVERCORE_EXPORTS
#define UNSWSC_DLL_EXPORT __declspec(dllexport)
#else
#define UNSWSC_DLL_EXPORT __declspec(dllimport)
#ifdef _DEBUG
#pragma comment(lib, "UNSWebServerCored.lib")
#else
#pragma comment(lib, "UNSWebServerCore.lib")
#endif
#endif
#pragma warning(disable: 4251)
#else
#define UNSWSC_DLL_EXPORT __attribute__((visibility("default")))
#endif
+257
View File
@@ -0,0 +1,257 @@
#include "FileReceiver.h"
#include <cstring>
#include <json/json.h>
#include "ServerLogger.h"
#include "PathTraversal.h"
#include "HTTPObjectsBridge.h"
#include "UNSResponseBuilder.h"
class FileReceiver::Impl
{
public:
bool EnableCORS = false;
bool HTMLResponse = false;
std::string TempRoot;
IPTablePtr BlockedIPs = nullptr;
WebFileInfoVec FileInfo;
FileProcessorCallback Callback = nullptr;
};
FileReceiver::FileReceiver() : pimpl(std::make_unique<Impl>())
{
}
FileReceiver::~FileReceiver() = default;
bool FileReceiver::CallFileProcesser()
{
if (pimpl->Callback == nullptr)
return false;
std::thread thFileProcesser(pimpl->Callback, pimpl->FileInfo, pimpl->TempRoot); //Use copy construst to avoid repeat data process.
if (!thFileProcesser.joinable())
return false;
thFileProcesser.detach();
pimpl->FileInfo.clear();
SCLOGF_TRACE("FileProcesser Function (Address: {}) Started.", pimpl->Callback);
return true;
}
void FileReceiver::SetResponseMode(bool html)
{
pimpl->HTMLResponse = html;
SCLOG_DEBUG("FileReceiver init mode: %s", (html ? "html" : "json"));
}
void FileReceiver::SetCORSEnable(bool enable)
{
pimpl->EnableCORS = enable;
SCLOG_DEBUG("FileReceiver CORS mode: %s", (enable ? "enabled" : "disabled"));
}
void FileReceiver::SetTempRoot(std::string temp_root)
{
pimpl->TempRoot = temp_root;
SCLOG_TRACE("FR-TempRoot: %s", pimpl->TempRoot.c_str());
return;
}
void FileReceiver::SetFileCallback(FileProcessorCallback fpcb)
{
pimpl->Callback = fpcb;
return;
}
void FileReceiver::UpdateBlockedIPs(IPTablePtr ip)
{
pimpl->BlockedIPs = ip;
return;
}
void FileReceiver::AppenedBlockedIP(DateTime::Span block_time, std::string ip)
{
DateTime expr_time = (DateTime::Now() += block_time);
IPList li{ ip };
pimpl->BlockedIPs->Appened(expr_time, li);
pimpl->BlockedIPs->Update();
SCLOG_INFO("IP: [%s] has been blocked untill {%s}", ip.c_str(), std::string(expr_time).c_str());
return;
}
uns::HTTPMethod FileReceiver::GetMethod(uns::RequestPtr request)
{
std::string method = request->GetImpl()->webcc_req->method();
if (method == "GET")
return uns::HTTPMethod::H_GET;
else if (method == "PUT")
return uns::HTTPMethod::H_PUT;
else if (method == "POST")
return uns::HTTPMethod::H_POST;
else if (method == "HEAD")
return uns::HTTPMethod::H_HEAD;
else if (method == "TRACE")
return uns::HTTPMethod::H_TRACE;
else if (method == "PATCH")
return uns::HTTPMethod::H_PATCH;
else if (method == "DELETE")
return uns::HTTPMethod::H_DELETE;
else if (method == "OPTIONS")
return uns::HTTPMethod::H_OPTIONS;
else if (method == "CONNECT")
return uns::HTTPMethod::H_CONNECT;
else
return uns::HTTPMethod::H_UNKNOWN;
}
bool FileReceiver::WriteFile(const std::string& path, const std::string& bytes)
{
//Code from WebCC source (commit 554470ac65f9fa08b53ee9adeb819ae7c70ef698).
std::ofstream stream{ path, std::ios::binary };
if (stream.fail())
{
SCLOG_WARNING("Failed to write file [%s]: can't open stream", path.c_str());
return false;
}
stream.write(bytes.data(), bytes.size());
if (stream.fail())
SCLOG_WARNING("Failed to write file [%s]: can't write to stream", path.c_str());
return !stream.fail();
}
uns::PathTraversalDefenceLevel FileReceiver::PTDefence()
{
return uns::PathTraversalDefenceLevel::DenyAll;
}
bool FileReceiver::IsPathSafe(const std::string& raw_path)
{
// 无外部重载时认为所有路径均不能通过检查
return false;
}
std::string FileReceiver::EncodeUploadResult()
{
Json::Value root;
Json::FastWriter writer;
root["AcceptedCount"] = pimpl->FileInfo.size();
root["AcceptedFiles"] = Json::Value(Json::arrayValue);
for (auto& ele : pimpl->FileInfo)
{
Json::Value sub;
sub["FileName"] = ele.GetStorageFileName();
sub["UploadTime"] = ele.GetUploadTime().GetTimeStamp();
root["AcceptedFiles"].append(sub);
}
return writer.write(root);
}
std::string FileReceiver::EncodeUploadResultHTML()
{
const char* html = R"(
<html>
<head>
<meta charset="utf-8"/>
<title>Upload Result</title>
</head>
<body>
<center>
<h1>Upload Result</h1>
<hr/>
<p>AcceptedCount: %lld</p>
<p>AcceptedFiles: <br>%s</p>
</center>
</body>
</html>
)";
std::string tmp;
for (auto& ele : pimpl->FileInfo)
tmp += "[" + ele.GetStorageFileName() + "] - {" + ele.GetUploadTime().Format("%Y-%m-%d %H:%M:%S") + "}<br>";
size_t html_size = strlen(html) + tmp.size() + 10;
char* result = new char[html_size];
memset(result, 0, sizeof(result));
sprintf(result, html, pimpl->FileInfo.size(), tmp.c_str());
tmp = std::string(result);
delete[] result;
return tmp;
}
uns::ResponsePtr FileReceiver::Execute(uns::RequestPtr request)
{
uns::HTTPMethod method = GetMethod(request);
std::string x_real_ip;
if(request->GetImpl()->webcc_req->HasHeader("X-Real-IP"))
x_real_ip = request->GetImpl()->webcc_req->GetHeader("X-Real-IP");
std::string req_ip = (x_real_ip.empty() ? request->GetImpl()->webcc_req->address() : x_real_ip);
SCLOG_DEBUG("Request recived, ip: [%s], method: %s", req_ip.c_str(), request->GetImpl()->webcc_req->method().c_str());
// path test
std::string path = request->GetImpl()->webcc_req->url().path();
auto status = PathTraversal::AnalyzeUrlTraversal(path);
if(status != PathTraversal::UrlSafetyStatus::Safe)
SCLOGF_WARNING("PathTraversal Detected: {}, Level: {}", path, PathTraversal::ToString(status));
switch(PTDefence())
{
case uns::PathTraversalDefenceLevel::DenyAll:
if(status != PathTraversal::UrlSafetyStatus::Safe)
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
break;
case uns::PathTraversalDefenceLevel::AutoNormalize:
{
if(status == PathTraversal::UrlSafetyStatus::EvasiveTraversal)
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
auto decoded_path = PathTraversal::UrlDecode(path);
if(!IsPathSafe(decoded_path))
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
auto url = request->GetImpl()->webcc_req->url();
url.ForceSet_Path(PathTraversal::NormalizeUrlPath(decoded_path));
request->GetImpl()->webcc_req->set_url(std::move(url));
break;
}
case uns::PathTraversalDefenceLevel::AllowNormal:
{
if(status == PathTraversal::UrlSafetyStatus::EvasiveTraversal)
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
auto decoded_path = PathTraversal::UrlDecode(path);
if(!IsPathSafe(decoded_path))
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
auto url = request->GetImpl()->webcc_req->url();
url.ForceSet_Path(decoded_path);
request->GetImpl()->webcc_req->set_url(std::move(url));
break;
}
default:
break; //Check Bypassed by [AllowAll]
}
if ((method & uns::H_PUT) || (method & uns::H_POST))
{
if (pimpl->BlockedIPs != nullptr)
{
std::string req_ip = request->GetImpl()->webcc_req->address();
pimpl->BlockedIPs->Update();
if (pimpl->BlockedIPs->IPExist(req_ip))
return (pimpl->EnableCORS ? uns::ResponseBuilder().IPBlocked().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().IPBlocked().EmptyBody()());
}
webcc::Status tmpStatus = uns::ConvertStatus(PreCheckRequest(request));
if (tmpStatus != webcc::kOK)
return (pimpl->EnableCORS ? uns::ResponseBuilder().Code(tmpStatus).EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Code(tmpStatus).EmptyBody()());
else if (!request->GetImpl()->webcc_req->IsForm())
return (pimpl->EnableCORS ? uns::ResponseBuilder().RequestFormatError().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().RequestFormatError().EmptyBody()());
else
{
for (auto& form : request->GetFormParts())
{
if (form->GetFileName().empty())
continue;
if (!PreCheckForm(form))
continue;
SCLOGF_DEBUG("File recived: [{}], {} bytes", form->GetFileName(), form->GetDataSize());
WebFileInfo info(form->GetFileNameS(), form->GetDataSize());
WriteFile(info.MakePath(pimpl->TempRoot), form->GetData());
pimpl->FileInfo.push_back(info);
}
std::string resp_body = (pimpl->HTMLResponse ? EncodeUploadResultHTML() : EncodeUploadResult());
CallFileProcesser();
return (pimpl->EnableCORS ? uns::ResponseBuilder().Created().Body(resp_body).AutoCORS(request)() : uns::ResponseBuilder().Created().Body(resp_body)());
}
}
else
return (pimpl->EnableCORS ? uns::ResponseBuilder().IllegalUpload().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().IllegalUpload().EmptyBody()());
}
+44
View File
@@ -0,0 +1,44 @@
#pragma once
#include "Global.h"
#include "IPTable.h"
#include <functional>
#include "WebFileInfo.h"
#include "HTTPObjects.h"
using FileProcessorCallback = std::function<void(WebFileInfoVec, const std::string&)>;
class UNSWSC_DLL_EXPORT FileReceiver
{
protected:
class Impl;
std::unique_ptr<Impl> pimpl;
public:
FileReceiver();
virtual ~FileReceiver(); // 基类必须有虚析构函数!
public:
bool CallFileProcesser();
void SetResponseMode(bool html);
void SetCORSEnable(bool enable);
std::string EncodeUploadResult();
std::string EncodeUploadResultHTML();
void UpdateBlockedIPs(IPTablePtr ip);
void SetTempRoot(std::string temp_root);
void SetFileCallback(FileProcessorCallback fpcb);
uns::HTTPMethod GetMethod(uns::RequestPtr request);
void AppenedBlockedIP(DateTime::Span block_time, std::string ip);
bool WriteFile(const std::string& path, const std::string& bytes);
public:
virtual uns::Status PreCheckRequest(uns::RequestPtr request) = 0;
virtual bool PreCheckForm(uns::FormPartPtr form) = 0;
virtual uns::PathTraversalDefenceLevel PTDefence();
virtual bool IsPathSafe(const std::string& raw_path);
public:
// 核心驱动入口:供内部适配器调用的实际执行流
uns::ResponsePtr Execute(uns::RequestPtr request);
};
using FileReceiverPtr = std::shared_ptr<FileReceiver>;
+211
View File
@@ -0,0 +1,211 @@
#include "Global.h"
#include <memory>
#include <format>
#include <chrono>
#include <cstring>
#include <fstream>
#ifndef _WIN32
#include "UOHash.h"
#else
#include "../UOHash/UOHash.h"
#endif
#include <sodium.h>
#include "SafeRNG.h"
#include <algorithm>
#include <openssl/evp.h>
#include "PathTraversal.h"
std::string uns::EncodeErrorPage(int code)
{
// size_t str_size = strlen(G_SERVER_NAME) + strlen(G_ERROR_PAGE);
// char* buffer = new char[str_size];
// memset(buffer, 0, str_size);
// snprintf(buffer, str_size, G_ERROR_PAGE, code, code, G_SERVER_NAME);
// std::string ret = buffer;
// delete[] buffer;
// return ret;
return std::vformat(G_ERROR_PAGE, std::make_format_args(code, code, G_SERVER_NAME));
}
std::string uns::EncodeHTTPTime(time_t* time)
{
// struct tm t;
// if (time != NULL)
// gmtime_r(time, &t);
// else
// {
// int64_t ltime_cur;
// ::time(&ltime_cur);
// gmtime_r(&ltime_cur, &t);
// }
// char szTime[100] = { 0 };
// // - Sun, 24 Aug 2008 22:43:45 GMT
// sprintf(szTime, "%s, %d %s %d %d:%d:%d GMT", G_HTTP_STD_WEEK[t.tm_wday].c_str(), t.tm_mday, G_HTTP_STD_MONTH[t.tm_mon].c_str(), t.tm_year + 1900, t.tm_hour, t.tm_min, t.tm_sec);
// return szTime;
// 1. 一行搞定时间点获取:如果指针有效就转换,否则直接取当前系统时间
auto tp = time ? std::chrono::system_clock::from_time_t(*time) : std::chrono::system_clock::now();
// 2. 强制截断到“秒”级(floor),避免有些平台输出微秒等尾巴
auto tp_secs = std::chrono::floor<std::chrono::seconds>(tp);
// 3. 直接利用 chrono 占位符格式化输出
// %a: 星期缩写(Sun), %d: 两位日子(02), %b: 月份缩写(Jun), %Y: 四位年份(2026), %T: 24小时制时间(00:00:00)
return std::format("{:%a, %d %b %Y %T} GMT", tp_secs);
}
std::string uns::btos(bool val)
{
return (val ? "true" : "false");
}
bool uns::stob(const std::string& obj)
{
return (obj == "true");
}
DateTime uns::stot(const std::string& obj)
{
int nYear, nMonth, nDate, nHour, nMin, nSec;
int cnt = sscanf(obj.c_str(), "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);
if (cnt != 6)
return DateTime();
else
return DateTime(nYear, nMonth, nDate, nHour, nMin, nSec);
}
std::string uns::RestoreURL(const std::string& url)
{
std::string res = url;
std::replace(res.begin(), res.end(), '{', '&');
std::replace(res.begin(), res.end(), '}', '=');
return res;
}
void uns::Stringsplit(const std::string& str, const std::string& splits, std::vector<std::string>& res)
{
if (str == "")
return;
std::string strs = str + splits;
size_t pos = strs.find(splits);
size_t step = splits.size();
while (pos != strs.npos)
{
std::string temp = strs.substr(0, pos);
res.push_back(temp);
strs = strs.substr(pos + step, strs.size());
pos = strs.find(splits);
}
}
void uns::ProcessPOSTArgs(const std::string& args, POSTArgs& args_output)
{
args_output.clear();
std::vector<std::string> c1_split, c2_split;
Stringsplit(args, "&", c1_split);
for (const auto& kv : c1_split)
{
c2_split.clear();
c2_split.shrink_to_fit();
Stringsplit(kv, "=", c2_split);
if (c2_split.size() != 2)
continue;
if (c2_split[0] == "origin_url")
args_output.insert({ c2_split[0], RestoreURL(c2_split[1]) });
else
args_output.insert({ c2_split[0], c2_split[1] });
}
}
std::string uns::tools::EncryptPassword(const std::string reg_date, const std::string& password)
{
std::string res_reg_date = reg_date;
std::reverse(res_reg_date.begin(), res_reg_date.end());
std::string war_pwd = reg_date + password + res_reg_date;
auto res = uns::UOHash::HashString(uns::HashID::SHA3_512, war_pwd);
if (!res)
return "";
return res.GetResult();
}
std::string uns::tools::EncryptPasswordSodium(const std::string& pwd)
{
// ======== 参数(128MB 内存) ========
static const size_t MEMLIMIT = 128UL * 1024 * 1024; // 128 MB
static const uint64_t OPSLIMIT = crypto_pwhash_OPSLIMIT_MODERATE;
// =====================================
// 输出缓冲:libsodium 定义的固定大小
char out_str[crypto_pwhash_STRBYTES] = { 0 };
// 生成编码字符串(包含算法、参数、盐、hash),直接存 DB(TEXT)
if (crypto_pwhash_str(out_str, pwd.c_str(), pwd.size(), OPSLIMIT, MEMLIMIT) != 0)
return "";
else
return std::string(out_str);
}
bool uns::tools::CheckPasswordSodium(const std::string& pwd, const std::string& encrypted)
{
return (crypto_pwhash_str_verify(encrypted.c_str(), pwd.c_str(), pwd.length()) == 0);
}
std::string uns::tools::SecureRandomHex(size_t bytes)
{
return RandomNumberGenerator::SecureRandomHex(bytes);
}
std::string uns::tools::ToUpper(const std::string& s)
{
std::string r; r.reserve(s.size());
for (unsigned char c : s)
r.push_back(static_cast<char>(std::toupper(c)));
return r;
}
std::string uns::tools::ToLower(const std::string& s)
{
std::string r; r.reserve(s.size());
for (unsigned char c : s)
r.push_back(static_cast<char>(std::tolower(c)));
return r;
}
std::string uns::tools::CalculateFileHashSHA256(const std::string & file)
{
// 1. 以二进制模式打开文件
std::ifstream ifs(file, std::ios::binary);
if (!ifs.is_open()) // 文件打开失败,返回空字符串(也可以根据你的项目规范记录日志或抛出异常)
return std::string();
// 2. 初始化 OpenSSL EVP 上下文,使用智能指针自动管理内存释放
std::unique_ptr<EVP_MD_CTX, void(*)(EVP_MD_CTX*)> ctx(EVP_MD_CTX_new(), EVP_MD_CTX_free);
if (!ctx)
return std::string();
// 3. 指定使用 SHA256 算法
if (EVP_DigestInit_ex(ctx.get(), EVP_sha256(), nullptr) != 1)
return std::string();
// 4. 分块读取文件并更新哈希计算(每次读取 4096 字节,避免大文件占用过多内存)
constexpr size_t kBufferSize = 4096;
char buffer[kBufferSize];
while (ifs.read(buffer, kBufferSize) || ifs.gcount() > 0)
{
if (EVP_DigestUpdate(ctx.get(), buffer, ifs.gcount()) != 1)
return std::string();
}
// 5. 结束哈希计算并获取二进制结果
unsigned char hash[EVP_MAX_MD_SIZE];
unsigned int length = 0;
if (EVP_DigestFinal_ex(ctx.get(), hash, &length) != 1)
return std::string();
// 6. 将二进制哈希值转换为 16 进制字符串 (Hex String)
std::string hex_result;
hex_result.reserve(length * 2);
for (unsigned int i = 0; i < length; ++i)
{
char buf[3];
snprintf(buf, sizeof(buf), "%02x", hash[i]);
hex_result.append(buf);
}
return hex_result;
}
bool uns::secure::IsSafePath(const std::string & safe_path, const std::string & requested_path)
{
return PathTraversal::IsSafePath(safe_path, requested_path);
}
+155
View File
@@ -0,0 +1,155 @@
#pragma once
#include <map>
#include <string>
#include <vector>
#include "Export.h"
#include "DateTime.h"
#pragma warning(disable : 4455)
#define G_SERVER_VERSION "2.0.0"
constexpr double G_SERVICE_UPDATE_TIMESPAN = 1000;
#define G_SERVER_NAME "U.N.S. Server Core/" G_SERVER_VERSION
constexpr auto G_SERVICE_NAME = "UNS_HTTP_ServerCore";
constexpr auto G_ERROR_PAGE = R"(
<html>
<head>
<meta charset="utf-8"/>
<title>HTTP {:03d}</title>
</head>
<body>
<center>
<h1>HTTP ERROR {:03d}</h1>
<hr/>
<p>{}</p>
</center>
</body>
</html>
)";
// inline constexpr std::string_view G_HTTP_STD_MONTH[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
// inline constexpr std::string_view G_HTTP_STD_WEEK[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
namespace uns
{
enum HTTPMethod
{
H_GET = 0b0000000001,
H_PUT = 0b0000000010,
H_POST = 0b0000000100,
H_HEAD = 0b0000001000,
H_TRACE = 0b0000010000,
H_PATCH = 0b0000100000,
H_DELETE = 0b0001000000,
H_OPTIONS = 0b0010000000,
H_CONNECT = 0b0100000000,
H_UNKNOWN = 0b1000000000,
H_ALL_ENABLED = 0b1111111111
};
namespace cors
{
inline constexpr std::string_view reqh_o = "Origin";
inline constexpr std::string_view reqh_acrm = "Access-Control-Request-Method";
inline constexpr std::string_view reqh_acrh = "Access-Control-Request-Headers";
inline constexpr std::string_view resh_acao = "Access-Control-Allow-Origin";
inline constexpr std::string_view resh_acam = "Access-Control-Allow-Methods";
inline constexpr std::string_view resh_acah = "Access-Control-Allow-Headers";
inline constexpr std::string_view resh_acac = "Access-Control-Allow-Credentials";
inline constexpr std::string_view resh_acma = "Access-Control-Max-Age";
};
using POSTArgs = std::map<std::string, std::string>;
std::string UNSWSC_DLL_EXPORT EncodeErrorPage(int code);
std::string UNSWSC_DLL_EXPORT EncodeHTTPTime(time_t* time);
std::string UNSWSC_DLL_EXPORT btos(bool val);
bool UNSWSC_DLL_EXPORT stob(const std::string& obj);
DateTime UNSWSC_DLL_EXPORT stot(const std::string& obj);
std::string UNSWSC_DLL_EXPORT RestoreURL(const std::string& url);
void UNSWSC_DLL_EXPORT Stringsplit(const std::string& str, const std::string& splits, std::vector<std::string>& res);
void UNSWSC_DLL_EXPORT ProcessPOSTArgs(const std::string& args, POSTArgs& args_output);
namespace tools
{
//基于SHA3-256,无暴力破解防护能力,不建议使用
std::string UNSWSC_DLL_EXPORT EncryptPassword(const std::string reg_date, const std::string& password);
//安全的密码加密函数,基于libsodium
std::string UNSWSC_DLL_EXPORT EncryptPasswordSodium(const std::string& pwd);
//密码检查函数
bool UNSWSC_DLL_EXPORT CheckPasswordSodium(const std::string& pwd, const std::string& encrypted);
//安全随机数
std::string UNSWSC_DLL_EXPORT SecureRandomHex(size_t bytes);
std::string UNSWSC_DLL_EXPORT ToUpper(const std::string& s);
std::string UNSWSC_DLL_EXPORT ToLower(const std::string& s);
std::string UNSWSC_DLL_EXPORT CalculateFileHashSHA256(const std::string& file);
}
namespace secure
{
/**
* @brief 基于物理与逻辑边界的路径穿透(目录穿越)安全校验
* @param safe_path 允许访问的沙盒根目录(绝对或相对路径均可)
* @param requested_path 客户端传入的、解码后的目标子路径
* @return true 安全(在沙盒内);false 不安全(企图穿越或路径非法)
*/
bool IsSafePath(const std::string& safe_path, const std::string& requested_path);
}
};
#undef MIN
inline constexpr unsigned long long operator""B(unsigned long long n)
{
return n;
}
inline constexpr unsigned long long operator""KB(unsigned long long n)
{
return (n * 1024);
}
inline constexpr unsigned long long operator""MB(unsigned long long n)
{
return (n * 1024 * 1024);
}
inline constexpr unsigned long long operator""GB(unsigned long long n)
{
return (n * 1024 * 1024 * 1024);
}
inline constexpr unsigned long long operator""TB(unsigned long long n)
{
return (n * 1024 * 1024 * 1024 * 1024);
}
inline constexpr time_t operator""S(unsigned long long t)
{
return t;
}
inline constexpr time_t operator""MIN(unsigned long long t)
{
return (t * 60);
}
inline constexpr time_t operator""HOUR(unsigned long long t)
{
return (t * 60 * 60);
}
inline constexpr time_t operator""DAY(unsigned long long t)
{
return (t * 60 * 60 * 24);
}
+283
View File
@@ -0,0 +1,283 @@
#include "HTTPObjects.h"
#include "HTTPObjectsBridge.h"
namespace uns
{
UrlQuery::UrlQuery() : pimpl(std::make_unique<Impl>(webcc::UrlQuery{ "" }))
{
}
UrlQuery::UrlQuery(std::unique_ptr<Impl> impl) : pimpl(std::move(impl))
{
}
UrlQuery::~UrlQuery() = default;
UrlQuery::UrlQuery(const UrlQuery& other)
: pimpl(std::make_unique<Impl>(other.pimpl->webcc_query))
{
}
UrlQuery& UrlQuery::operator=(const UrlQuery& other)
{
if (this != &other)
{
pimpl = std::make_unique<Impl>(other.pimpl->webcc_query);
}
return *this;
}
UrlQuery::UrlQuery(UrlQuery&& other) noexcept = default;
UrlQuery& UrlQuery::operator=(UrlQuery&& other) noexcept = default;
bool UrlQuery::Empty() const
{
return pimpl->webcc_query.Empty();
}
std::size_t UrlQuery::Size() const
{
return pimpl->webcc_query.Size();
}
bool UrlQuery::Has(const std::string& key) const
{
return pimpl->webcc_query.Has(key);
}
const std::string& UrlQuery::Get(const std::string& key) const
{
return pimpl->webcc_query.Get(key);
}
std::pair<std::string, std::string> UrlQuery::Get(std::size_t index) const
{
const auto& raw_param = pimpl->webcc_query.Get(index);
return { raw_param.first, raw_param.second };
}
std::string UrlQuery::ToString(bool encode) const
{
return pimpl->webcc_query.ToString(encode);
}
}
uns::FormPart::FormPart(std::unique_ptr<Impl> impl) : pimpl(std::move(impl))
{
}
uns::FormPart::~FormPart() = default;
std::string uns::FormPart::GetNameS() const
{
return pimpl->webcc_form->name();
}
std::string_view uns::FormPart::GetName() const
{
return pimpl->webcc_form->name();
}
std::string uns::FormPart::GetFileNameS() const
{
return pimpl->webcc_form->file_name();
}
std::string_view uns::FormPart::GetFileName() const
{
return pimpl->webcc_form->file_name();
}
std::string uns::FormPart::GetMediaTypeS() const
{
return pimpl->webcc_form->media_type();
}
std::string_view uns::FormPart::GetMediaType() const
{
return pimpl->webcc_form->media_type();
}
const std::string& uns::FormPart::GetData() const
{
return pimpl->webcc_form->data();
}
std::size_t uns::FormPart::GetSize() const
{
// 注意:虽然 webcc 原生的 GetSize() 没有写 const 修饰符,
// 但由于 pimpl 内部存的是智能指针,这里依然可以在 const 函数里安全调用它
return pimpl->webcc_form->GetSize();
}
std::size_t uns::FormPart::GetDataSize() const
{
return pimpl->webcc_form->GetDataSize();
}
uns::Request::Request(std::unique_ptr<Impl> impl) : pimpl(std::move(impl))
{
}
uns::Request::~Request() = default;
namespace uns
{
std::string Request::GetMethodS() const
{
return pimpl->webcc_req->method();
}
std::string_view Request::GetMethod() const
{
return pimpl->webcc_req->method();
}
std::string Request::GetAddressS() const
{
return pimpl->webcc_req->address();
}
std::string_view Request::GetAddress() const
{
return pimpl->webcc_req->address();
}
size_t Request::GetContentLength() const
{
return pimpl->webcc_req->content_length();
}
std::string Request::GetDataS() const
{
return pimpl->webcc_req->data();
}
std::string_view Request::GetData() const
{
return pimpl->webcc_req->data();
}
std::string Request::GetSchemeS() const
{
return pimpl->webcc_req->url().scheme();
}
std::string_view Request::GetScheme() const
{
return pimpl->webcc_req->url().scheme();
}
std::string Request::GetHostS() const
{
return pimpl->webcc_req->host();
}
std::string_view Request::GetHost() const
{
return pimpl->webcc_req->host();
}
int Request::GetPortI() const
{
try
{
return std::stoi(pimpl->webcc_req->port(), nullptr, 10);
}
catch(const std::exception&)
{
return -1;
}
return -2;
}
std::string Request::GetPortS() const
{
return pimpl->webcc_req->port();
}
std::string_view Request::GetPort() const
{
return pimpl->webcc_req->port();
}
std::string Request::GetPathS() const
{
return pimpl->webcc_req->url().path();
}
std::string_view Request::GetPath() const
{
return pimpl->webcc_req->url().path();
}
std::string Request::GetQueryStringS() const
{
return pimpl->webcc_req->url().query();
}
std::string_view Request::GetQueryString() const
{
return pimpl->webcc_req->url().query();
}
UrlQuery Request::GetQuery() const
{
auto query_impl = std::make_unique<UrlQuery::Impl>(pimpl->webcc_req->query());
return UrlQuery(std::move(query_impl));
}
const std::vector<std::string>& Request::GetArgs() const
{
return pimpl->webcc_req->args();
}
bool Request::IsForm() const
{
return pimpl->webcc_req->IsForm();
}
const std::vector<FormPartPtr>& Request::GetFormParts() const
{
// 懒加载影子转换:仅在第一次访问且确属 Form 请求时构建镜像包装
if (!pimpl->form_parts_cached)
{
if (pimpl->webcc_req->IsForm())
{
const auto& raw_parts = pimpl->webcc_req->form_parts();
pimpl->cached_form_parts.reserve(raw_parts.size());
for (const auto& raw_part : raw_parts)
{
auto part_impl = std::make_unique<FormPart::Impl>(raw_part);
// 由于 Request 是 FormPart 的友元,这里可以直接通过 new 访问其私有构造函数
auto uns_part = std::shared_ptr<FormPart>(new FormPart(std::move(part_impl)));
pimpl->cached_form_parts.push_back(uns_part);
}
}
pimpl->form_parts_cached = true;
}
return pimpl->cached_form_parts;
}
bool Request::HasHeader(std::string_view header) const
{
return pimpl->webcc_req->HasHeader(header);
}
std::string Request::GetHeader(std::string_view header, bool* existed) const
{
return pimpl->webcc_req->GetHeader(header, existed);
}
std::vector<std::pair<std::string, std::string>> Request::GetAllHeaders() const
{
return pimpl->webcc_req->GetAllHeaders().data();
}
}
uns::Response::Response(std::unique_ptr<Impl> impl) : pimpl(std::move(impl))
{
}
uns::Response::~Response() = default;
+336
View File
@@ -0,0 +1,336 @@
#pragma once
#include <memory>
#include <string>
#include <vector>
#include <utility>
#include "Export.h"
#include <string_view>
class FileReceiver;
namespace uns
{
// HTTP status codes.
// Don't use "enum class" for converting to/from int easily.
// The full list is available here:
// https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
enum Status
{
// 此临时响应表明客户端应继续请求,或者如果请求已完成,则忽略此响应。
kContinue = 100,
// 此代码是在响应客户端的 Upgrade 请求标头时发送的,用于指示服务器即将切换到的协议。
kSwitchingProtocols = 101,
// 此代码曾在 WebDAV 上下文中使用,表示服务器已收到请求,但在响应时无法提供状态。
kProcessing = 102,
// 此状态码主要与 Link 标头一起使用,允许用户代理在服务器准备响应时开始预加载资源,或预连接到页面需要资源的源站。
kEarlyHints = 103,
// 请求成功。
kOK = 200,
// 请求成功,并因此创建了一个新资源。
kCreated = 201,
// 请求已被接收但尚未处理。
kAccepted = 202,
// 此响应代码表示返回的元数据与原始服务器上可用的不完全相同,而是从本地或第三方副本收集的。这主要用于另一个资源的镜像或备份。
kNonAuthoritativeInformation = 203,
// 对于此请求,没有内容可发送,但响应头可能有用。
kNoContent = 204,
// 告知用户代理重置发送此请求的文档。
kResetContent = 205,
// 当客户端请求了资源的一部分时,使用此响应代码进行响应。
kPartialContent = 206,
// 在可能需要多个状态码的情况下,传递关于多个资源的信息。
kMultiStatus = 207,
// 在 <dav:propstat> 响应元素内部使用,以避免重复枚举同一集合的多个绑定的内部成员。
kAlreadyReported = 208,
// 服务器已完成了对资源的 GET 请求,并且响应是对当前实例应用了一个或多个实例操作后的结果表示。
kIMUsed = 226,
// 在代理驱动(agent-driven)的内容协商中,请求有多个可能的响应,用户代理或用户应选择其中之一。
kMultipleChoices = 300,
// 请求资源的 URL 已永久更改。新 URL 在响应中给出。
kMovedPermanently = 301,
// 此响应代码意味着请求资源的 URI 已暂时更改。未来可能还会对 URI 进行进一步更改,因此客户端在未来的请求中应使用相同的 URI。
kFound = 302,
// 服务器发送此响应以指示客户端使用 GET 请求在另一个 URI 获取请求的资源。
kSeeOther = 303,
// 用于缓存目的。它告知客户端响应未被修改,因此客户端可以继续使用相同的缓存响应版本。
kNotModified = 304,
// 在 HTTP 规范的前一版本中定义,表示请求的响应必须通过代理访问。由于涉及代理带内配置的安全问题,此状态码已被弃用。
kUseProxy = 305,
// 此响应代码不再使用,但被保留。它曾在 HTTP/1.1 规范的先前版本中使用。
k__Unused = 306,
// 服务器发送此响应以指示客户端使用与先前请求相同的方法在另一个 URI 获取请求的资源。其语义与 302 Found 响应代码相同,但用户代理不得更改使用的 HTTP 方法:如果在第一个请求中使用了 POST,则在重定向请求中也必须使用 POST。
kTemporaryRedirect = 307,
// 表示资源现在永久位于另一个 URI,由 Location 响应头指定。其语义与 301 Moved Permanently HTTP 响应代码相同,但用户代理不得更改使用的 HTTP 方法:如果在第一个请求中使用了 POST,则在第二个请求中也必须使用 POST。
kPermanentRedirect = 308,
// 由于被认为是客户端错误的原因(例如,格式错误的请求语法、无效的请求消息结构或欺骗性的请求路由),服务器无法或不会处理该请求。
kBadRequest = 400,
// 尽管 HTTP 标准指定为 "unauthorized",但从语义上讲,此响应的意思是 "unauthenticated"。即,客户端必须进行身份验证才能获得请求的响应。
kUnauthorized = 401,
// 此代码最初用于数字支付系统,但此状态码很少使用,且不存在标准约定。
kPaymentRequired = 402,
// 客户端没有访问内容的权利;也就是说,它是未授权的,因此服务器拒绝提供请求的资源。与 401 Unauthorized 不同,服务器知道客户端的身份。
kForbidden = 403,
// 服务器找不到请求的资源。
kNotFound = 404,
// 服务器知道请求方法,但目标资源不支持该方法。
kMethodNotAllowed = 405,
// 当 Web 服务器执行服务器驱动的内容协商后,找不到任何符合用户代理给定条件的内容时,会发送此响应。
kNotAcceptable = 406,
// 类似于 401 Unauthorized,但需要通过代理进行身份验证。
kProxyAuthenticationRequired = 407,
// 某些服务器会在空闲连接上发送此响应,即使客户端之前没有任何请求。这意味着服务器希望关闭此未使用的连接。
kRequestTimeout = 408,
// 当请求与服务器的当前状态冲突时,发送此响应。
kConflict = 409,
// 当请求的内容已从服务器永久删除,且没有转发地址时,发送此响应。
kGone = 410,
// 服务器拒绝了请求,因为未定义 Content-Length 标头字段,而服务器需要它。
kLengthRequired = 411,
// 在条件请求中,客户端在其标头中指明了服务器不满足的前提条件。
kPreconditionFailed = 412,
// 请求体大于服务器定义的限制。
kContentTooLarge = 413,
// 客户端请求的 URI 长度超过了服务器愿意解释的长度。
kURITooLong = 414,
// 服务器不支持请求数据的媒体格式,因此服务器拒绝该请求。
kUnsupportedMediaType = 415,
// 无法满足请求中 Range 标头字段指定的范围。可能范围超出了目标资源数据的大小。
kRangeNotSatisfiable = 416,
// 此响应代码表示服务器无法满足 Expect 请求标头字段指示的期望。
kExpectationFailed = 417,
// 服务器拒绝尝试用茶壶煮咖啡。
kIamATeapot = 418,
// 请求被发送到了一个无法产生响应的服务器。
kMisdirectedRequest = 421,
// 请求格式正确,但由于语义错误而无法被遵循。
kUnprocessableContent = 422,
// 正在访问的资源已被锁定。
kLocked = 423,
// 由于先前的请求失败,导致当前请求失败。
kFailedDependency = 424,
// 表示服务器不愿意冒险处理一个可能被重放的请求。
kTooEarly = 425,
// 服务器拒绝使用当前协议执行请求,但可能在客户端升级到其他协议后愿意执行。服务器在 426 响应中发送 Upgrade 标头以指示所需的协议。
kUpgradeRequired = 426,
// 原始服务器要求请求是有条件的。此响应旨在防止"丢失更新"问题,即客户端 GET 资源状态,修改后 PUT 回服务器,而同时第三方已修改了服务器上的状态,导致冲突。
kPreconditionRequired = 428,
// 用户在给定的时间内发送了太多请求(速率限制)。
kTooManyRequests = 429,
// 服务器因请求头字段太大而不愿意处理该请求。
kRequestHeaderFieldsTooLarge = 431,
// 用户代理请求了一个无法合法提供的资源,例如被政府审查的网页。
kUnavailableForLegalReasons = 451,
// 服务器遇到了不知道如何处理的情况。此错误是通用性的,表示服务器找不到更合适的 5XX 状态码来响应。
kInternalServerError = 500,
// 服务器不支持请求方法,无法处理。
kNotImplemented = 501,
// 此错误响应意味着服务器作为网关或代理时,收到了一个无效的响应。
kBadGateway = 502,
// 服务器尚未准备好处理请求。
kServiceUnavailable = 503,
// 当服务器作为网关或代理,无法及时获得响应时,会给出此错误响应。
kGatewayTimeout = 504,
// 服务器不支持请求中使用的 HTTP 版本。
kHTTPVersionNotSupported = 505,
// 服务器存在内部配置错误:在内容协商过程中,被选中的变体被配置为自身参与内容协商,这导致在创建响应时出现循环引用。
kVariantAlsoNegotiates = 506,
// 由于服务器无法存储成功完成请求所需的表示,因此无法对资源执行该方法。
kInsufficientStorage = 507,
// 服务器在处理请求时检测到无限循环。
kLoopDetected = 508,
// 客户端请求声明了一个应使用 HTTP 扩展(RFC 2774)来处理请求,但该扩展不受支持。
kNotExtended = 510,
// 表示客户端需要进行身份验证才能获得网络访问权限。
kNetworkAuthenticationRequired = 511,
//Not Standard Code By UnknownObject
// 请求载体的格式错误,如:无法解析的JSON等。
k_uRequestFormatError = 489,
// 请求无效。可能是由于未正确携带数据等必要信息。
k_uRequestInvalid = 490,
// 请求URL超范围。此响应表示请求的URL是错误的。
k_uURLOutOfRange = 492,
// 无效的请求主机。指示请求时使用了错误的域名/IP。
k_uInvalidRequestHost = 493,
// IP地址被封禁。
k_uIPBlocked = 494,
// 非法上传请求。指示本次上传请求不符合服务器规定。
k_uIllegalUpload = 495,
// 文件格式错误。指示上传的文件格式不符合服务器规定。
k_uFileFormatError = 496,
// 无效文件。处理请求所需的文件已过期/无法访问。
k_uInvalidFile = 497,
// 上传的文件过大。非文件上传时应使用 413 Content Too Large。
k_uFileTooLarge = 498,
// 每秒请求数过多。仅在一些特殊API中使用,常规情况需使用 429 Too Many Requests。
k_uRPSLimited = 499,
// 子过程失败。服务器在处理请求的某个步骤中遇到无法恢复的错误。
k_uSubProcessFalied = 533,
// 服务器检测到漏洞利用/可执行文件上传等网络攻击行为。
k_uServerHateYou = 540,
// 检测到拒绝服务漏洞攻击。
k_uDoSFound = 550,
// 检测到分布式拒绝服务漏洞攻击。
k_uDDoSFound = 551,
// 未知的服务器错误。当服务器无法定位错误来源时返回。否则应使用 500 Internal Server Error。
k_uUnknownServerError = 560
};
// 路径穿透防御等级
enum class PathTraversalDefenceLevel
{
DenyAll, //拒绝所有带有对应特征的路径
AutoNormalize, //允许普通路径穿透,自动归一化,并要求进行安全路径检查
AllowNormal, //允许普通路径穿透,原样返回,要求进行安全路径检查
AllowAll [[deprecated("警告: AllowAll 已启用 - 路径穿透防御关闭 - 仅供测试环境使用.")]] //允许所有行为(仅供测试)
};
class UNSWSC_DLL_EXPORT UrlQuery
{
public:
UrlQuery();
~UrlQuery();
// 显式支持深拷贝与移动,内部完美同步 webcc 状态
UrlQuery(const UrlQuery& other);
UrlQuery& operator=(const UrlQuery& other);
UrlQuery(UrlQuery&& other) noexcept;
UrlQuery& operator=(UrlQuery&& other) noexcept;
public:
bool Empty() const;
std::size_t Size() const;
bool Has(const std::string& key) const;
const std::string& Get(const std::string& key) const;
std::pair<std::string, std::string> Get(std::size_t index) const;
std::string ToString(bool encode = true) const;
private:
friend class Request;
class Impl;
std::unique_ptr<Impl> pimpl;
explicit UrlQuery(std::unique_ptr<Impl> impl);
};
class UNSWSC_DLL_EXPORT FormPart
{
private:
class Impl;
private:
friend class Request;
friend class ::FileReceiver;
std::unique_ptr<Impl> pimpl;
private:
explicit FormPart(std::unique_ptr<Impl> impl);
public:
~FormPart();
public:
std::string GetNameS() const;
std::string_view GetName() const;
std::string GetFileNameS() const;
std::string_view GetFileName() const;
std::string GetMediaTypeS() const;
std::string_view GetMediaType() const;
const std::string& GetData() const;
std::size_t GetSize() const;
std::size_t GetDataSize() const;
};
using FormPartPtr = std::shared_ptr<FormPart>;
class UNSWSC_DLL_EXPORT Request
{
private:
class Impl;
friend class ServerCore;
friend class FileReceiverAdapter;
friend class ServerProcessorAdapter;
friend class SyncFileReceiverAdapter;
std::unique_ptr<Impl> pimpl;
private:
explicit Request(std::unique_ptr<Impl> impl);
public:
~Request();
Impl* GetImpl() const
{
return pimpl.get();
}
public:
// 基础请求信息
std::string GetMethodS() const;
std::string_view GetMethod() const;
std::string GetAddressS() const;
std::string_view GetAddress() const;
size_t GetContentLength() const;
std::string GetDataS() const;
std::string_view GetData() const;
// 扁平化后的 Url 核心数据项
std::string GetSchemeS() const;
std::string_view GetScheme() const;
std::string GetHostS() const;
std::string_view GetHost() const;
int GetPortI() const;
std::string GetPortS() const;
std::string_view GetPort() const;
std::string GetPathS() const;
std::string_view GetPath() const;
std::string GetQueryStringS() const;
std::string_view GetQueryString() const;
// 复杂复合对象获取
UrlQuery GetQuery() const;
const std::vector<std::string>& GetArgs() const;
// 多部分表单(文件上传)支撑
bool IsForm() const;
const std::vector<FormPartPtr>& GetFormParts() const;
// 请求头获取
bool HasHeader(std::string_view header) const;
std::string GetHeader(std::string_view header, bool* existed = nullptr) const;
std::vector<std::pair<std::string, std::string>> GetAllHeaders() const;
};
class UNSWSC_DLL_EXPORT Response
{
private:
class Impl;
private:
friend class ResponseBuilder;
std::unique_ptr<Impl> pimpl;
private:
explicit Response(std::unique_ptr<Impl> impl);
public:
~Response();
Impl* GetImpl() const
{
return pimpl.get();
}
};
using RequestPtr = std::shared_ptr<Request>;
using ResponsePtr = std::shared_ptr<Response>;
}
+62
View File
@@ -0,0 +1,62 @@
#pragma once
#include <webcc/request.h>
#include <webcc/response.h>
#include "HTTPObjects.h" // 引入刚才的外观声明
class uns::UrlQuery::Impl
{
public:
webcc::UrlQuery webcc_query;
explicit Impl(const webcc::UrlQuery& query) : webcc_query(query)
{
}
};
class uns::FormPart::Impl
{
public:
webcc::FormPartPtr webcc_form;
explicit Impl(webcc::FormPartPtr res) : webcc_form(res)
{
}
};
// 在私有头文件里,明确定义外部壳类的 Impl 内部结构
class uns::Request::Impl
{
public:
webcc::RequestPtr webcc_req;
// 影子缓存机制:用于解决 webcc 集合类型到外壳集合类型的无损生命周期映射
mutable std::vector<uns::FormPartPtr> cached_form_parts;
mutable bool form_parts_cached = false;
explicit Impl(webcc::RequestPtr req) : webcc_req(req)
{
}
};
class uns::Response::Impl
{
public:
webcc::ResponsePtr webcc_res;
explicit Impl(webcc::ResponsePtr res) : webcc_res(res)
{
}
};
namespace uns
{
inline webcc::Status ConvertStatus(uns::Status s)
{
return static_cast<webcc::Status>(static_cast<int>(s));
}
inline uns::Status ConvertStatus(webcc::Status s)
{
return static_cast<uns::Status>(static_cast<int>(s));
}
}
+106
View File
@@ -0,0 +1,106 @@
#include "IPList.h"
#include <regex>
bool IPList::CheckIPv4(std::string ip)
{
std::regex v4("^(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$");
return std::regex_match(ip, v4);
}
IPList::IPList()
{
list.clear();
}
IPList::IPList(std::initializer_list<std::string> list)
{
for (const auto& ele : list)
this->list.insert(ele);
}
IPList::IPList(const IPList& obj)
{
for (const auto& ele : obj.list)
list.insert(ele);
}
bool IPList::Push(std::string ip)
{
if (!CheckIPv4(ip))
return false;
list.insert(ip);
return true;
}
bool IPList::Pop(std::string ip)
{
if (!Exist(ip))
return false;
list.erase(ip);
return false;
}
bool IPList::Exist(std::string ip)
{
return (list.find(ip) != list.end());
}
bool IPList::Exist(std::string ip) const
{
return (list.find(ip) != list.end());
}
bool IPList::Empty()
{
return list.empty();
}
size_t IPList::Size()
{
return list.size();
}
auto IPList::begin()
{
return list.begin();
}
auto IPList::end()
{
return list.end();
}
auto IPList::rbegin()
{
return list.rbegin();
}
auto IPList::rend()
{
return list.rend();
}
auto IPList::begin() const
{
return list.begin();
}
auto IPList::end() const
{
return list.end();
}
auto IPList::rbegin() const
{
return list.rbegin();
}
auto IPList::rend() const
{
return list.rend();
}
bool IPList::operator<(const IPList& obj) const
{
return list < obj.list;
}
+41
View File
@@ -0,0 +1,41 @@
#pragma once
#include <set>
#include <string>
#include "Export.h"
#include <initializer_list>
class UNSWSC_DLL_EXPORT IPList
{
private:
std::set<std::string> list;
private:
bool CheckIPv4(std::string ip);
public:
IPList();
IPList(std::initializer_list<std::string> list);
IPList(const IPList& obj);
public:
bool Push(std::string ip);
bool Pop(std::string ip);
bool Exist(std::string ip);
bool Exist(std::string ip) const;
bool Empty();
size_t Size();
public:
auto begin();
auto end();
auto rbegin();
auto rend();
auto begin() const;
auto end() const;
auto rbegin() const;
auto rend() const;
public:
bool operator<(const IPList& obj) const;
};
+34
View File
@@ -0,0 +1,34 @@
#include "IPTable.h"
IPTable::IPTable()
{
storage.clear();
}
IPTable::IPTable(const IPTable& obj)
{
for (auto& ele : obj.storage)
storage.insert(ele);
}
void IPTable::Appened(DateTime expr_time, IPList list)
{
storage.insert(std::pair<DateTime, IPList>(expr_time, list));
}
void IPTable::Update()
{
DateTime time = DateTime::Now();
for (auto it = storage.begin(); it != storage.end(); it++)
if ((*it).first.GetTimeStamp() <= time.GetTimeStamp())
storage.erase(it);
return;
}
bool IPTable::IPExist(std::string ip)
{
for (auto& ele : storage)
if (ele.second.Exist(ip))
return true;
return false;
}
+22
View File
@@ -0,0 +1,22 @@
#pragma once
#include <set>
#include "IPList.h"
#include "DateTime.h"
class UNSWSC_DLL_EXPORT IPTable
{
private:
std::set<std::pair<DateTime, IPList>> storage;
public:
IPTable();
IPTable(const IPTable& obj);
public:
void Appened(DateTime expr_time, IPList list);
void Update();
bool IPExist(std::string ip);
};
using IPTablePtr = IPTable*;
//using IPTablePtr = std::shared_ptr<IPTable>;
+15
View File
@@ -0,0 +1,15 @@
#include "LogArg.h"
#ifndef _WIN32
#include "utextcodec/UTextCodec.h"
#else
#include "../UTextCodec/UTextCodec.h"
#endif
namespace uns
{
// 宽字符转 UTF-8 实现
std::string ConvertWStringToUtf8(std::wstring_view wstr)
{
return UTextCodec::WtoS(std::wstring(wstr));
}
}
+254
View File
@@ -0,0 +1,254 @@
#pragma once
#include <ctime>
#include <string>
#include <vector>
#include <chrono>
#include <variant>
#include "Export.h"
#include <functional>
#include <string_view>
#include <type_traits>
namespace uns
{
// 前置声明捕获器
struct RangeCapturer;
struct PairCapturer;
struct FuncCapturer;
struct TimeCapturer;
// 终极 Variant 池:容纳所有可能解包出的原子形态
using LogVariant = std::variant<
bool, char, int, unsigned int, long long, unsigned long long, double, std::string_view, const void*,
std::string, // 专门用于承载宽字符转换后的 UTF-8 临时字符串
RangeCapturer, // 专门用于承载 std::vector / std::list 等容器
PairCapturer, // 专门用于承载 std::pair (支持 std::map)
FuncCapturer, //承载 std::function
TimeCapturer //承载时间
>;
// --- 编译期类型推导工具链 ---
template <typename T, typename = void>
struct is_container : std::false_type
{
};
// 识别标准容器(排除字符串本身)
template <typename T>
struct is_container<T, std::void_t<typename T::value_type, decltype(std::declval<T>().begin()), decltype(std::declval<T>().end())>> : std::integral_constant<bool, !std::is_same_v<T, std::string> && !std::is_same_v<T, std::string_view>>
{
};
template <typename T> struct is_pair : std::false_type
{
};
template <typename F, typename S> struct is_pair<std::pair<F, S>> : std::true_type
{
};
// --- 延迟桥接结构体 ---
struct LogArg;
struct RangeCapturer
{
const void* ptr;
void (*to_log_args)(const void*, std::vector<LogArg>&);
};
struct PairCapturer
{
const void* ptr;
void (*to_log_args)(const void*, std::vector<LogArg>&);
};
struct FuncCapturer
{
const void* code_ptr; // 真正改变:这里存真正的函数代码地址
bool is_closure; // 标记:这究竟是个纯函数,还是个 Lambda 闭包
};
// 升级版 Trait:不仅识别,还提取原生函数指针类型(R(*)(Args...))
template <typename T> struct function_traits
{
static constexpr bool is_func = false;
using pointer_type = void*;
};
template <typename R, typename... Args>
struct function_traits<std::function<R(Args...)>>
{
static constexpr bool is_func = true;
using pointer_type = R(*)(Args...); // 提取出原生函数指针类型
};
enum class TimeMode
{
Point,
TMPoint,
Duration
};
struct TimeCapturer
{
TimeMode mode{ TimeMode::Point };
std::tm _tm{};
std::chrono::system_clock::time_point tp{};
std::chrono::nanoseconds duration{ 0 };
std::string format_spec; // "%Y-%m-%d %H:%M:%S" or empty
// 可选:单位策略控制
bool smart_unit = true;
};
template<typename T>
struct is_time_point : std::false_type
{
};
template<typename Clock, typename Dur>
struct is_time_point<std::chrono::time_point<Clock, Dur>> : std::true_type
{
};
template<>
struct is_time_point<std::tm> : std::true_type
{
};
template<typename T>
inline constexpr bool is_time_point_v = is_time_point<T>::value;
template<typename T>
struct is_duration : std::false_type
{
};
template<typename Rep, typename Period>
struct is_duration<std::chrono::duration<Rep, Period>> : std::true_type
{
};
template<typename T>
inline constexpr bool is_duration_v = is_duration<T>::value;
inline TimeCapturer MakeTimeCapturer(std::chrono::system_clock::time_point tp)
{
TimeCapturer c;
c.mode = TimeMode::Point;
c.tp = tp;
return c;
}
template<typename Rep, typename Period>
inline TimeCapturer MakeTimeCapturer(std::chrono::duration<Rep, Period> d)
{
TimeCapturer c;
c.mode = TimeMode::Duration;
c.duration = std::chrono::duration_cast<std::chrono::nanoseconds>(d);
c.smart_unit = true;
return c;
}
inline TimeCapturer MakeTimeCapturer(const std::tm& tm)
{
TimeCapturer c;
c.mode = TimeMode::TMPoint;
c._tm = tm;
return c;
}
// --- 宽字符转换声明(实现卸载到 .cpp) ---
std::string UNSWSC_DLL_EXPORT ConvertWStringToUtf8(std::wstring_view wstr);
// --- 核心包装类 ---
struct LogArg
{
LogVariant value;
template<typename T>
LogArg(T&& val)
{
using D = std::decay_t<T>;
// 1. 窄字符串系列(0拷贝)
if constexpr (std::is_same_v<D, std::string> || std::is_same_v<D, std::string_view>)
value = std::string_view(val);
else if constexpr (std::is_same_v<D, const char*> || std::is_same_v<D, char*>)
value = val ? std::string_view(val) : std::string_view("<null>");
// 2. 宽字符串系列(特殊处理:触发内部 UTF-8 转换)
else if constexpr (std::is_same_v<D, std::wstring> || std::is_same_v<D, std::wstring_view>)
value = ConvertWStringToUtf8(val);
else if constexpr (std::is_same_v<D, const wchar_t*> || std::is_same_v<D, wchar_t*>)
value = val ? ConvertWStringToUtf8(val) : std::string("<null>");
// 3. 基础原子类型(防范 wchar_t 被误判为整数)
else if constexpr (std::is_same_v<D, wchar_t> || std::is_same_v<D, char16_t> || std::is_same_v<D, char32_t>)
value = ConvertWStringToUtf8(std::wstring_view((const wchar_t*)&val, 1));
else if constexpr (std::is_same_v<D, bool>)
value = static_cast<bool>(val);
else if constexpr (std::is_same_v<D, char> || std::is_same_v<D, signed char>)
value = static_cast<char>(val);
// 3.5 时间点类型系列(防止时间对象退化为未知类型)
else if constexpr (is_time_point_v<D>)
value = MakeTimeCapturer(val);
else if constexpr (is_duration_v<D>)
value = MakeTimeCapturer(val);
// 4. 全整型变种矩阵 (short, int, long, long long, unsigned...)
else if constexpr (std::is_integral_v<D> && std::is_signed_v<D>)
{
if constexpr (sizeof(D) <= sizeof(int))
value = static_cast<int>(val);
else
value = static_cast<long long>(val);
}
else if constexpr (std::is_integral_v<D> && std::is_unsigned_v<D>)
{
if constexpr (sizeof(D) <= sizeof(unsigned int))
value = static_cast<unsigned int>(val);
else
value = static_cast<unsigned long long>(val);
}
// 5. 浮点矩阵
else if constexpr (std::is_floating_point_v<D>)
value = static_cast<double>(val);
// 6. 指针
else if constexpr (std::is_pointer_v<D>)
value = static_cast<const void*>(val);
// 7. 标准库容器(关键点:利用 Lambda 闭包在不引入 fmt 的情况下擦除容器类型!)
else if constexpr (is_container<D>::value)
{
value = RangeCapturer{ &val, [] (const void* p, std::vector<LogArg>& out)
{
for (const auto& item : *static_cast<const D*>(p))
out.emplace_back(item); // 递归包装子元素
}
};
}
// 8. 键值对(支持 Map 展开)
else if constexpr (is_pair<D>::value)
{
value = PairCapturer{ &val, [] (const void* p, std::vector<LogArg>& out)
{
const auto& pair = *static_cast<const D*>(p);
out.emplace_back(pair.first);
out.emplace_back(pair.second);
}
};
}
else if constexpr (function_traits<D>::is_func)
{
using TargetPtr = typename function_traits<D>::pointer_type;
// 关键点:尝试用 target() 拿底层指针
// std::function::target<T>() 返回的是 T*,所以如果 T 是函数指针,返回的就是“函数指针的指针”
if (auto* const* func_ptr = val.template target<TargetPtr>()) // 情况 A:内部装的是普通纯函数或静态成员函数
value = FuncCapturer{ reinterpret_cast<const void*>(*func_ptr), false };
else // 情况 B:内部装的是 Lambda 表达式或带状态的仿函数, 此时它在堆/栈上有一个闭包实体,我们退而求其次,打印这个闭包对象的地址
value = FuncCapturer{ static_cast<const void*>(&val), true };
}
else
value = std::string_view("<unsupported type>");
}
};
}
+175
View File
@@ -0,0 +1,175 @@
#include "PathTraversal.h"
#include <vector>
#include <algorithm>
bool PathTraversal::InlineHasTraversalPattern(std::string_view path)
{
if (path == "..")
return true;
if (path.rfind("../", 0) == 0)
return true;
if (path.find("/../") != std::string::npos)
return true;
if (path.size() >= 3 && path.compare(path.size() - 3, 3, "/..") == 0)
return true;
return false;
}
std::string PathTraversal::UrlDecode(std::string_view src)
{
std::string dst;
dst.reserve(src.length()); // 预分配内存,优化性能
for (size_t i = 0; i < src.length(); ++i)
{
// 确保 % 后面至少还有两个字符
if ((src[i] == '%') && ((i + 2) < src.length()))
{
// 转换为 unsigned char 规避 std::isxdigit 在处理非 ASCII(如UTF-8) 时的未定义行为
unsigned char hi = static_cast<unsigned char>(src[i + 1]);
unsigned char lo = static_cast<unsigned char>(src[i + 2]);
if (std::isxdigit(hi) && std::isxdigit(lo))
{
auto hexToChar = [] (unsigned char c) -> int
{
if ((c >= '0') && (c <= '9'))
return c - '0';
if ((c >= 'a') && (c <= 'f'))
return c - 'a' + 10;
if ((c >= 'A') && (c <= 'F'))
return c - 'A' + 10;
return 0;
};
dst += static_cast<char>((hexToChar(hi) << 4) | hexToChar(lo));
i += 2;
continue;
}
}
dst += src[i];
}
return dst;
}
bool PathTraversal::HasPathTraversalPattern(std::string_view raw_url_path)
{
if (raw_url_path.empty())
return false;
// 1. 进行 URL 解码,让隐藏的 %2f, %2e 现出原形
std::string decoded = UrlDecode(raw_url_path);
// 2. 统一将 Windows 风格的反斜杠 `\` 替换为正斜杠 `/`,防止利用反斜杠绕过
std::replace(decoded.begin(), decoded.end(), '\\', '/');
// 3. 特征级严格匹配:
// 路径穿透的本质是形成一个独立的 ".." 路径层级。
// 它只可能以四种形态存在:".."、"../开头的路径"、"/../中间路径"、以及"/.."结尾的路径。
if (decoded == "..")
return true;
if (decoded.rfind("../", 0) == 0) // 检查是否以 "../" 开头
return true;
if (decoded.find("/../") != std::string::npos) // 检查是否包含 "/../"
return true;
if (decoded.size() >= 3 && decoded.compare(decoded.size() - 3, 3, "/..") == 0) // 检查是否以 "/.." 结尾
return true;
return false;
}
bool PathTraversal::IsSafePath(const std::filesystem::path& base_path, const std::filesystem::path& user_path)
{
namespace fs = std::filesystem;
try
{
// 1. 规范化沙盒基准路径
fs::path canonical_base = fs::weakly_canonical(base_path);
// 2. 拼接并规范化目标路径
// 注意:若 user_path 为绝对路径(如 /etc/passwd),operator/ 会直接覆盖前面的路径,
// weakly_canonical 依然能正确将其解析为最终的物理绝对路径。
fs::path canonical_target = fs::weakly_canonical(canonical_base / user_path);
// 3. 计算逻辑相对关系
auto rel = canonical_target.lexically_relative(canonical_base);
// 4. 边界一票否决制:
// - 如果 rel 为空,说明两者不在同一根目录下(例如 Windows 跨盘符 C:\ 到 D:\)
// - 如果相对路径的第一个组件是 "..", 说明逻辑路径已经逃逸出根目录
if (rel.empty() || *rel.begin() == "..")
return false;
return true;
}
catch (...)
{
// 捕获任何潜在的系统路径解析异常(如超长路径、非法字符等)
return false;
}
}
PathTraversal::UrlSafetyStatus PathTraversal::AnalyzeUrlTraversal(std::string_view raw_url_path)
{
// 1. 检查原始明文中是否存在穿透特征(统一斜杠处理)
std::string raw_normalized_slash(raw_url_path);
std::replace(raw_normalized_slash.begin(), raw_normalized_slash.end(), '\\', '/');
bool raw_has_traversal = InlineHasTraversalPattern(raw_normalized_slash);
// 2. 进行 URL 解码,让隐藏的 %2f, %2e, %5c 现出原形
std::string decoded_path = UrlDecode(raw_url_path);
std::replace(decoded_path.begin(), decoded_path.end(), '\\', '/');
bool decoded_has_traversal = InlineHasTraversalPattern(decoded_path);
// 3. 对比前后差异
if (decoded_has_traversal)
{
if (!raw_has_traversal) // 【核心逻辑】明文看起来很安全,解码后突然蹦出穿透特征 -> 判定为转义绕过攻击
return UrlSafetyStatus::EvasiveTraversal;
// 明文和密文都有,属于客户端手荡或老旧 SDK 拼接未规范化
return UrlSafetyStatus::LiteralTraversal;
}
return UrlSafetyStatus::Safe;
}
std::string PathTraversal::NormalizeUrlPath(std::string_view decoded_url_path)
{
if (decoded_url_path.empty())
return "/";
std::vector<std::string_view> segments;
size_t start = 0;
// 逻辑切分路径组件
while (start < decoded_url_path.length())
{
size_t end = decoded_url_path.find_first_of("/\\", start);
std::string_view segment = decoded_url_path.substr(start, end - start);
if (!segment.empty() && segment != ".")
{
if (segment == "..")
{
// 遇到 .. 则弹栈,实现路径向上坍缩
if (!segments.empty())
segments.pop_back();
}
else
segments.push_back(segment);
}
if (end == std::string_view::npos)
break;
start = end + 1;
}
// 重新拼接规范化后的标准 URL 路径
std::string result;
for (const auto& seg : segments)
{
result += "/";
result.append(seg);
}
return result.empty() ? "/" : result;
}
std::string PathTraversal::ToString(UrlSafetyStatus s)
{
switch(s)
{
case UrlSafetyStatus::Safe:
return "Safe";
case UrlSafetyStatus::LiteralTraversal:
return "LiteralTraversal";
case UrlSafetyStatus::EvasiveTraversal:
return "EvasiveTraversal";
default:
return "Unknown??";
}
return "Unknown??";
}
+55
View File
@@ -0,0 +1,55 @@
#pragma once
#include <string>
#include <filesystem>
#include <string_view>
class PathTraversal
{
public:
enum class UrlSafetyStatus
{
Safe, // 1. 完全安全:无任何穿透特征
LiteralTraversal, // 2. 明文穿透:URL 包含裸 ".."(老旧客户端未展开,内核可选择为其“规范化”后放行)
EvasiveTraversal // 3. 转义伪装:明文无异常,解码后才出现 ".."(100% 恶意攻击,内核应直接阻断并拉黑)
};
private:
/**
* @brief 内部辅助:检测已统一斜杠的字符串中是否包含标准的 ".." 路径层级
*/
static bool InlineHasTraversalPattern(std::string_view path);
public:
/**
* @brief 实用可靠的 URL 解码函数 (符合 RFC 3986 规范)
* @note 针对路径解析优化:未将 '+' 转换为系统空格('+'仅在 query 参数中代表空格,在 path 中代表字面量)
*/
static std::string UrlDecode(std::string_view src);
/**
* @brief 纯字符串层面的路径穿透行为检测 (内核特征级拦截)
* @param raw_url_path 客户端传入的原始未解码 URL 路径 (注意:必须是不包含 Query 参数的纯 Path 部分)
* @return true 存在路径穿透特征(危险);false 未检测到穿透特征(安全)
*/
static bool HasPathTraversalPattern(std::string_view raw_url_path);
/**
* @brief 基于物理与逻辑边界的路径穿透(目录穿越)安全校验
* @param base_path 允许访问的沙盒根目录(绝对或相对路径均可)
* @param user_path 客户端传入的、解码后的目标子路径
* @return true 安全(在沙盒内);false 不安全(企图穿越或路径非法)
*/
static bool IsSafePath(const std::filesystem::path& base_path, const std::filesystem::path& user_path);
/**
* @brief 函数 1:内核级明文与密文对比检测
* @param raw_url_path 核心网关拿到的原始未解码、且已剥离 Query 参数的纯 Path 部分
*/
static UrlSafetyStatus AnalyzeUrlTraversal(std::string_view raw_url_path);
/**
* @brief 函数 2:纯文本 URL 路径规范化 (实现 RFC 3986 逻辑)
* @details 剥离路径中所有的 "." 和 "..",将其坍缩为安全的绝对路由路径(例如:把 `/a/b/../c` 规范化为 `/a/c`)
* @param decoded_url_path 已经过安全校验并确认非恶意攻击的【已解码】路径
*/
static std::string NormalizeUrlPath(std::string_view decoded_url_path);
static std::string ToString(UrlSafetyStatus s);
};
+113
View File
@@ -0,0 +1,113 @@
#pragma once
#include "IPTable.h"
#include <webcc/view.h>
#include "FileReceiver.h"
#include "ServerProcessor.h"
#include "HTTPObjectsBridge.h" // 确保能看到 Request::Impl 结构体
namespace uns
{
class IBlockedIpUpdatable
{
public:
virtual ~IBlockedIpUpdatable() = default;
// 统一的库内更新接口(这里的 YourIPContainerType 请替换为你 BlockedIPs 的实际类型)
virtual void ApplyIpUpdate(IPTablePtr blocked_ips) = 0;
};
// 隐藏在动态库内部的适配器,对外部不可见
class ServerProcessorAdapter : public webcc::View, public IBlockedIpUpdatable
{
private:
std::shared_ptr<ServerProcessor> user_processor;
public:
explicit ServerProcessorAdapter(std::shared_ptr<ServerProcessor> processor) : user_processor(processor)
{
}
// 完美的把 webcc 的驱动流,翻译给用户的纯净业务类
webcc::ResponsePtr Handle(webcc::RequestPtr request) final
{
auto uns_req = uns::RequestPtr(new uns::Request(std::make_unique<uns::Request::Impl>(request)));
// 调用用户的业务类
uns::ResponsePtr uns_res = user_processor->Handle(uns_req);
return uns_res->GetImpl()->webcc_res;
}
bool Stream(const std::string& method) final
{
return user_processor->Stream(method);
}
void ApplyIpUpdate(IPTablePtr blocked_ips) override
{
user_processor->UpdateBlockedIPList(blocked_ips);
}
};
class FileReceiverAdapter : public webcc::View, public IBlockedIpUpdatable
{
private:
std::shared_ptr<::FileReceiver> user_reciver; // 持有用户的派生类对象
public:
explicit FileReceiverAdapter(std::shared_ptr<FileReceiver> reciver) : user_reciver(reciver)
{
}
// 完美的把 webcc 的驱动流,翻译给用户的纯净业务类
webcc::ResponsePtr Handle(webcc::RequestPtr request) final
{
auto uns_req = uns::RequestPtr(new uns::Request(std::make_unique<uns::Request::Impl>(request)));
// 调用用户的业务类
uns::ResponsePtr uns_res = user_reciver->Execute(uns_req);
return uns_res->GetImpl()->webcc_res;
}
bool Stream(const std::string& method) final
{
// 所有数据都不能由webcc进行串流,否则将无法从request中获取文件
return false;
}
void ApplyIpUpdate(IPTablePtr blocked_ips) override
{
user_reciver->UpdateBlockedIPs(blocked_ips);
}
};
class SyncFileReceiverAdapter : public webcc::View, public IBlockedIpUpdatable
{
private:
std::shared_ptr<SyncFileReceiver> user_reciver; // 持有用户的派生类对象
public:
explicit SyncFileReceiverAdapter(std::shared_ptr<SyncFileReceiver> reciver) : user_reciver(reciver)
{
}
// 完美的把 webcc 的驱动流,翻译给用户的纯净业务类
webcc::ResponsePtr Handle(webcc::RequestPtr request) final
{
auto uns_req = uns::RequestPtr(new uns::Request(std::make_unique<uns::Request::Impl>(request)));
// 调用用户的业务类
uns::ResponsePtr uns_res = user_reciver->Execute(uns_req);
return uns_res->GetImpl()->webcc_res;
}
bool Stream(const std::string& method) final
{
// 所有数据都不能由webcc进行串流,否则将无法从request中获取文件
return false;
}
void ApplyIpUpdate(IPTablePtr blocked_ips) override
{
user_reciver->UpdateBlockedIPs(blocked_ips);
}
};
}
+128
View File
@@ -0,0 +1,128 @@
#include "SafeRNG.h"
#include <random>
#include <chrono>
#include <cstring>
#include <openssl/err.h>
#include <openssl/rand.h>
bool RandomNumberGenerator::FillWithOpenSSLRandom(unsigned char* dst, size_t len) noexcept
{
try
{
while (len > 0)
{
int chunk = (len > static_cast<std::size_t>(INT_MAX)) ? INT_MAX : static_cast<int>(len);
// RAND_bytes 返回 1 成功
int rc = RAND_bytes(dst, chunk);
if (rc != 1)
return false;
dst += chunk;
len -= static_cast<std::size_t>(chunk);
}
return true;
}
catch (...)
{
return false;
}
}
bool RandomNumberGenerator::FillWithSTDMT19937_64(unsigned char* dst, size_t len) noexcept
{
try
{
// 先尝试用 random_device 为 mt19937_64 提供种子
std::mt19937_64 gen;
try
{
std::random_device rd;
// 将几个 rd() 的值混合到一个 seed 中
uint64_t seed = 0;
for (int i = 0; i < 4; ++i)
seed ^= (static_cast<uint64_t>(rd()) + 0x9e3779b97f4a7c15ULL + (seed << 6) + (seed >> 2));
gen.seed(seed);
}
catch (...)
{
// random_device 可能抛或不可靠;退回到时间戳种子(不可预测性较低)
uint64_t seed = static_cast<uint64_t>(std::chrono::high_resolution_clock::now().time_since_epoch().count());
gen.seed(seed);
}
// 逐 8 字节生成并拷贝;最后处理剩余字节
while (len >= 8)
{
uint64_t v = gen();
std::memcpy(dst, &v, 8);
dst += 8;
len -= 8;
}
if (len > 0)
{
uint64_t v = gen();
std::memcpy(dst, &v, len);
}
return true;
}
catch (...)
{
return false;
}
}
std::string RandomNumberGenerator::Bytes2HexString(const unsigned char* data, size_t len) noexcept
{
try
{
const char* hex_chars = "0123456789ABCDEF";
std::string out;
out.resize(len * 2);
for (std::size_t i = 0; i < len; ++i)
{
unsigned char v = data[i];
out[2 * i] = hex_chars[(v >> 4) & 0xF];
out[2 * i + 1] = hex_chars[v & 0xF];
}
return out;
}
catch (...)
{
return std::string();
}
}
std::string RandomNumberGenerator::SecureRandomHex(size_t bytes)
{
if (bytes == 0)
return std::string();
// 分配原始缓冲区(可能抛 bad_alloc -> catch below)
unsigned char* buf = nullptr;
try
{
buf = static_cast<unsigned char*>(::operator new(bytes));
}
catch (...)
{
return std::string(); // 无法分配内存,返回空字符串表示失败
}
bool ok = FillWithOpenSSLRandom(buf, bytes);
if (!ok)
{
//printf_s("OpenSSL Failure!\n");
// OpenSSL 失败:使用伪随机兜底(保证会产出数据)
bool ok2 = FillWithSTDMT19937_64(buf, bytes);
if (!ok2)
{
// 极端失败:释放并返回空字符串
::operator delete(buf);
return std::string();
}
}
// 转 hex 并返回(Bytes2HexString 会在异常时返回空字符串)
std::string hex = Bytes2HexString(buf, bytes);
::operator delete(buf);
return hex;
}
+15
View File
@@ -0,0 +1,15 @@
#pragma once
#include <string>
class RandomNumberGenerator
{
private:
//主方案:OpenSSL,安全随机数,有极小概率失败
static bool FillWithOpenSSLRandom(unsigned char* dst, size_t len) noexcept;
//备用方案:std::mt19937_64/时间戳伪随机数,不怎么安全但是一定有数
static bool FillWithSTDMT19937_64(unsigned char* dst, size_t len) noexcept;
static std::string Bytes2HexString(const unsigned char* data, size_t len) noexcept;
public:
static std::string SecureRandomHex(size_t bytes);
};
+188
View File
@@ -0,0 +1,188 @@
#include "ServerCore.h"
#include "Global.h"
#include "IPTable.h"
#include "ServerLogger.h"
#include "CORSProcessor.h"
#include <webcc/logger.h>
#include <webcc/server.h>
#include <webcc/utility.h>
#include "ProcessorAdapter.h"
class ServerCore::Impl
{
public:
int port = 0;
webcc::Server* ccServer = nullptr;
std::thread thServer;
IPTable BlockedIPs;
public:
explicit Impl(int port)
{
this->port = port;
ccServer = new webcc::Server(boost::asio::ip::tcp::v4(), port);
ccServer->SetDefaultServerName(G_SERVER_NAME);
webcc::utility::SetCustomUA(G_SERVER_NAME);
SCLOGF_INFO("ServerCore constructed on port {}, version: <{}>", port, G_SERVER_NAME);
}
~Impl()
{
if(ccServer != nullptr)
{
if(ccServer->IsRunning())
ccServer->Stop();
delete ccServer;
}
}
public:
static void ServerThreadFunction(webcc::Server* server, int worker_thread, int loop_thread)
{
if (server == nullptr)
return;
server->set_buffer_size(10240);
SCLOGF_INFO("ServerCore thread ready: {} Worker(s), {} Loop(s)", worker_thread, loop_thread);
server->Run(worker_thread, loop_thread);
return;
}
static webcc::Strings ConvertMethods(std::uint32_t dwmethod)
{
webcc::Strings res;
if (dwmethod & uns::H_GET)
res.push_back("GET");
if (dwmethod & uns::H_PUT)
res.push_back("PUT");
if (dwmethod & uns::H_HEAD)
res.push_back("HEAD");
if (dwmethod & uns::H_POST)
res.push_back("POST");
if (dwmethod & uns::H_TRACE)
res.push_back("TRACE");
if (dwmethod & uns::H_PATCH)
res.push_back("PATCH");
if (dwmethod & uns::H_DELETE)
res.push_back("DELETE");
if (dwmethod & uns::H_OPTIONS)
res.push_back("OPTIONS");
if (dwmethod & uns::H_CONNECT)
res.push_back("CONNECT");
return res;
}
};
ServerCore::ServerCore(int port) : pimpl(std::make_unique<Impl>(port))
{
}
ServerCore::~ServerCore() = default;
void ServerCore::Run(int worker_thread, int loop_thread)
{
if (pimpl->ccServer == nullptr)
return;
pimpl->ccServer->set_buffer_size(10240);
SCLOGF_INFO("ServerCore ready: {} Worker(s), {} Loop(s)", worker_thread, loop_thread);
pimpl->ccServer->Run(worker_thread, loop_thread);
return;
}
void ServerCore::ThreadRun(int worker_thread, int loop_thread)
{
using namespace std::chrono;
if (pimpl->ccServer == nullptr)
return;
pimpl->thServer = std::thread(Impl::ServerThreadFunction, pimpl->ccServer, worker_thread, loop_thread);
pimpl->thServer.detach();
std::this_thread::sleep_for(100ms);
if (pimpl->ccServer->IsRunning())
SCLOG_INFO("ServerCore Running");
return;
}
void ServerCore::Stop()
{
if (pimpl->ccServer == nullptr)
return;
pimpl->ccServer->Stop();
SCLOG_INFO("ServerCore Stopped");
return;
}
bool ServerCore::Running()
{
return pimpl->ccServer->IsRunning();
}
void ServerCore::UpdateProcessor()
{
for (size_t i = 0; i < pimpl->ccServer->GetViewCount(); i++)
{
auto updatable_ptr = std::dynamic_pointer_cast<uns::IBlockedIpUpdatable>(pimpl->ccServer->AccessView(i));
if (updatable_ptr != nullptr)
updatable_ptr->ApplyIpUpdate(&pimpl->BlockedIPs);
}
SCLOG_TRACE("Blocked IP list updated");
return;
}
bool ServerCore::EnableCORSSupport()
{
return AppenedProcessor(CORSProcessor::UrlRegex(), CORSProcessor::SharedPtr(), uns::H_OPTIONS);
}
bool ServerCore::AppenedProcessor(std::string url, ServerProcessorPtr ptr, std::uint32_t methods, bool enable_ip_check)
{
if (enable_ip_check)
{
ptr->EnableIPCheck();
ptr->UpdateBlockedIPList(&pimpl->BlockedIPs);
}
auto adapter = std::make_shared<uns::ServerProcessorAdapter>(ptr);
bool bret = pimpl->ccServer->Route(webcc::UrlRegex(url), adapter, Impl::ConvertMethods(methods));
if (bret)
SCLOG_INFO("ServerProcessor added. URL: [%s], Method code: <%s>", url.c_str(), uns::toBinary(methods, 10).c_str());
else
SCLOG_ERROR("ServerProcessor add faliure. URL: [%s], Method code: <%s>", url.c_str(), uns::toBinary(methods, 10).c_str());
return bret;
}
bool ServerCore::AppenedFileReceiver(std::string url, FileReceiverPtr ptr, std::uint32_t methods, FileProcessorCallback fpcb, bool html_response)
{
ptr->SetFileCallback(fpcb);
ptr->UpdateBlockedIPs(&pimpl->BlockedIPs);
ptr->SetResponseMode(html_response);
auto adapter = std::make_shared<uns::FileReceiverAdapter>(ptr);
bool bret = pimpl->ccServer->Route(webcc::UrlRegex(url), adapter, Impl::ConvertMethods(methods));
if (bret)
SCLOG_INFO("FileReceiver added. URL: [%s], Method code: <%s>", url.c_str(), uns::toBinary(methods, 10).c_str());
else
SCLOG_ERROR("FileReceiver add faliure. URL: [%s], Method code: <%s>", url.c_str(), uns::toBinary(methods, 10).c_str());
return bret;
}
bool ServerCore::AppenedFileReceiver(std::string url, SyncFileReceiverPtr ptr, std::uint32_t methods, bool html_response)
{
ptr->UpdateBlockedIPs(&pimpl->BlockedIPs);
ptr->SetResponseMode(html_response);
auto adapter = std::make_shared<uns::SyncFileReceiverAdapter>(ptr);
bool bret = pimpl->ccServer->Route(webcc::UrlRegex(url), adapter, Impl::ConvertMethods(methods));
if (bret)
SCLOG_INFO("SyncFileReceiver added. URL: [%s], Method code: <%s>", url.c_str(), uns::toBinary(methods, 10).c_str());
else
SCLOG_ERROR("SyncFileReceiver add faliure. URL: [%s], Method code: <%s>", url.c_str(), uns::toBinary(methods, 10).c_str());
return bret;
}
void ServerCore::EnableWebCCLog(const std::string& path, int level)
{
if(path.empty())
{
WEBCC_LOG_INIT_2("", webcc::LOG_CONSOLE, level);
}
else
{
WEBCC_LOG_INIT_2(path.c_str(), webcc::LOG_CONSOLE | webcc::LOG_CONSOLE_FILE_APPEND, level);
}
}
+48
View File
@@ -0,0 +1,48 @@
/*
* Unknown Network Service Web Server Core
* Version 1.2.2
*
* TCP Core - boost::aiso
* HTTP Core - webcc
* Application Level Repack & Windows Service Interface - UnknownObject
*/
#pragma once
#include <thread>
#include <memory>
#include "Global.h"
#include "Export.h"
#include "FileReceiver.h"
#include "ServerProcessor.h"
#include "SyncFileReceiver.h"
class UNSWSC_DLL_EXPORT ServerCore
{
private:
class Impl;
std::unique_ptr<Impl> pimpl;
public:
ServerCore(int port);
~ServerCore();
ServerCore() = delete;
ServerCore(const ServerCore& obj) = delete;
ServerCore& operator=(const ServerCore& obj) = delete;
public:
void Run(int worker_thread = 1, int loop_thread = 1);
void ThreadRun(int worker_thread = 1, int loop_thread = 1);
void Stop();
bool Running();
void UpdateProcessor();
bool EnableCORSSupport();
bool AppenedProcessor(std::string url, ServerProcessorPtr ptr, std::uint32_t methods, bool enable_ip_check = false);
bool AppenedFileReceiver(std::string url, FileReceiverPtr ptr, std::uint32_t methods, FileProcessorCallback fpcb, bool html_response = false);
bool AppenedFileReceiver(std::string url, SyncFileReceiverPtr ptr, std::uint32_t methods, bool html_response = false);
public:
//启用WebCC日志
//path: 日志存放文件夹,留空为仅控制台日志
//level: 0-4, 0=VERB, 1=INFO, 2=USER(default), 3=WARN, 4=ERROR
static void EnableWebCCLog(const std::string& path = "", int level = 2);
};
+704
View File
@@ -0,0 +1,704 @@
#include "ServerLogger.h"
#include <fmt/format.h>
#include <fmt/chrono.h>
#include <fmt/printf.h>
#include <fmt/args.h>
#include <sstream>
#include <iomanip>
// 格式化用的辅助函数
struct DurationView
{
long double value;
const char* unit;
};
inline std::tm ToTm(std::chrono::system_clock::time_point tp)
{
return fmt::localtime(std::chrono::system_clock::to_time_t(tp));
}
inline std::string FormatTime(const std::tm& tm, const std::string& spec)
{
char buf[128] = {};
const char* fmt = spec.empty() ? "%Y-%m-%d %H:%M:%S" : spec.c_str();
std::strftime(buf, sizeof(buf), fmt, &tm);
return buf;
}
inline DurationView NormalizeDuration(std::chrono::nanoseconds ns)
{
long double v = (long double)ns.count();
constexpr long double ns_1 = 1.0L;
constexpr long double us = 1000.0L;
constexpr long double ms = 1000000.0L;
constexpr long double s = 1000000000.0L;
constexpr long double m = 60.0L * s;
constexpr long double h = 60.0L * m;
constexpr long double d = 24.0L * h;
if (v >= d)
return { v / d, "d" };
if (v >= h)
return { v / h, "h" };
if (v >= m)
return { v / m, "m" };
if (v >= s)
return { v / s, "s" };
if (v >= ms)
return { v / ms, "ms" };
if (v >= us)
return { v / us, "us" };
return { v / ns_1, "ns" };
}
// ==================== 1. 锁死在 .cpp 内部的隐藏格式化器 ====================
// 让 ServerLogger.cpp 内部的 fmt 彻底看懂 uns::LogArg 变体
template <>
struct fmt::formatter<uns::LogArg>
{
constexpr auto parse(format_parse_context& ctx)
{
return ctx.begin();
}
template <typename FormatContext>
auto format(const uns::LogArg& la, FormatContext& ctx) const
{
return std::visit([&] (auto&& arg) -> decltype(ctx.out())
{
using T = std::decay_t<decltype(arg)>;
// A. 针对容器的运行时展开
if constexpr (std::is_same_v<T, uns::RangeCapturer>)
{
std::vector<uns::LogArg> items;
// 【修正】去掉瞎编的 container_ptr,直接传入 items 容器供内部闭包填充
arg.to_log_args(arg.ptr, items);
fmt::format_to(ctx.out(), "[");
for (size_t i = 0; i < items.size(); ++i)
{
if (i > 0)
fmt::format_to(ctx.out(), ", ");
fmt::format_to(ctx.out(), fmt::runtime("{}"), items[i]);
}
return fmt::format_to(ctx.out(), "]");
}
// B. 针对键值对的运行时展开
else if constexpr (std::is_same_v<T, uns::PairCapturer>)
{
std::vector<uns::LogArg> items;
arg.to_log_args(arg.ptr, items); // 假设 PairCapturer 也是相同的解包逻辑
if (items.size() >= 2)
fmt::format_to(ctx.out(), "{}: {}", items[0], items[1]);
return ctx.out();
}
// C. 针对延迟执行函数的运行时展开
else if constexpr (std::is_same_v<T, uns::FuncCapturer>)
{
// 【注意】请根据你 FuncCapturer 内部实际的求值函数名修改(如 .to_string() 或 .eval())
return fmt::format_to(ctx.out(), "Function{{ptr: {}, type: {}}}", arg.code_ptr, arg.is_closure ? "Closure" : "PureFunc");
}
// D. 时间相关的内容
else if constexpr (std::is_same_v<T, uns::TimeCapturer>)
{
auto out = ctx.out();
try
{
if (arg.mode == uns::TimeMode::Point)
{
std::tm tm = ToTm(arg.tp);
std::string s = FormatTime(tm, arg.format_spec);
return fmt::format_to(out, "{}", s);
}
else if (arg.mode == uns::TimeMode::TMPoint)
{
std::string s = FormatTime(arg._tm, arg.format_spec);
return fmt::format_to(out, "{}", s);
}
else
{
auto norm = NormalizeDuration(arg.duration);
return fmt::format_to(out, "{:.3f}{}", norm.value, norm.unit);
}
}
catch (...)
{
return fmt::format_to(out, "[time_error]");
}
}
// E. 基础原生类型
else
return fmt::format_to(ctx.out(), "{}", arg);
}, la.value);
}
};
std::string uns::toBinary(long number, int bits)
{
bool negitive = (number < 0);
unsigned long positive = (negitive ? -number : number);
return (negitive ? "-" + toBinary(positive, bits) : toBinary(positive, bits));
}
std::string uns::toBinary(std::uint32_t number, int bits)
{
return toBinary(static_cast<unsigned long>(number), bits);
}
std::string uns::toBinary(unsigned long number, int bits)
{
std::string res;
while (true)
{
res += std::to_string(number % 2);
number = number / 2;
if (number == 0)
break;
}
std::reverse(res.begin(), res.end());
while (res.size() < bits)
res = "0" + res;
return "0b" + res;
}
std::string ServerLogger::GenerateLogHeader(uns::ServerLogLevel LogLevel)
{
std::string hstr;
time_t lt = time(NULL);
tm* loctim = localtime(&lt);
char timestr[250] = {};
sprintf(timestr, "{%04d-%02d-%02d %02d:%02d:%02d} ", loctim->tm_year + 1900, loctim->tm_mon + 1, loctim->tm_mday, loctim->tm_hour, loctim->tm_min, loctim->tm_sec);
hstr = timestr;
switch (LogLevel)
{
case uns::llTrace:
hstr += "[TRACE] ";
break;
case uns::llDebug:
hstr += "[DEBUG] ";
break;
case uns::llInfo:
hstr += "[INFO] ";
break;
case uns::llWarning:
hstr += "[WARNING] ";
break;
case uns::llError:
hstr += "[ERROR] ";
break;
case uns::llFatal:
hstr += "[FATAL] ";
break;
default:
hstr += "[UNKNOWN] ";
break;
}
return hstr;
}
std::string ServerLogger::GenerateFileInfo(std::string filename, int line_num)
{
// 使用 stringstream 替代 new/memset/sprintf
std::ostringstream oss;
oss << "(" << filename << " -> LINE=" << line_num << ") ";
return oss.str();
}
void ServerLogger::WriteBatchToOutputs(const std::deque<std::string>& batch)
{
if (batch.empty())
return;
std::time_t now = std::time(nullptr);
for (const auto& item : batch)
{
if (item.empty())
continue;
std::fwrite(item.c_str(), 1, item.size(), stdout);
if (LogStream.is_open())
LogStream << item;
RotateIfNeeded(now, true);
}
std::fflush(stdout);
if (LogStream.is_open())
LogStream.flush();
}
void ServerLogger::WorkerLoop()
{
constexpr std::size_t kMaxBatchCount = 128;
while (WorkerRunning)
{
std::deque<std::string> local_batch;
{
std::unique_lock<std::mutex> lock(QueueMutex);
QueueCV.wait(lock, [this] ()
{
return !LogQueue.empty() || !WorkerRunning;
});
if (!WorkerRunning && LogQueue.empty())
break;
std::size_t count = 0;
while (!LogQueue.empty() && (count < kMaxBatchCount))
{
local_batch.push_back(std::move(LogQueue.front()));
LogQueue.pop_front();
count++;
}
}
if (!local_batch.empty())
WriteBatchToOutputs(local_batch);
}
// 退出前把剩余日志尽量写完
for (;;)
{
std::deque<std::string> local_batch;
{
std::lock_guard<std::mutex> lock(QueueMutex);
if (LogQueue.empty())
break;
std::size_t count = 0;
while (!LogQueue.empty() && (count < kMaxBatchCount))
{
local_batch.push_back(std::move(LogQueue.front()));
LogQueue.pop_front();
count++;
}
}
WriteBatchToOutputs(local_batch);
}
ThreadRunningFlag = false;
}
std::string ServerLogger::MakeRotatedFileName(const std::string& base, std::time_t t, int osl_index)
{
tm* loctim = std::localtime(&t);
std::ostringstream oss;
oss << base;
if (RotatePeriod == uns::RP_Hourly)
oss << "_" << std::setw(4) << (loctim->tm_year + 1900) << std::setw(2) << std::setfill('0') << (loctim->tm_mon + 1) << std::setw(2) << std::setfill('0') << loctim->tm_mday << "_" << std::setw(2) << std::setfill('0') << loctim->tm_hour;
else if (RotatePeriod == uns::RP_Daily)
oss << "_" << std::setw(4) << (loctim->tm_year + 1900) << std::setw(2) << std::setfill('0') << (loctim->tm_mon + 1) << std::setw(2) << std::setfill('0') << loctim->tm_mday;
if (osl_index > 0)
oss << "_OSL" << osl_index;
oss << ".log";
return oss.str();
}
void ServerLogger::RotateIfNeeded(std::time_t now, bool check_size_after_write)
{
//控制台模式不进行轮转
if (LogFileName.empty())
return;
// 时间轮转优先:若 period 发生变化则重建文件并重置 OSL 索引
if (RotatePeriod != uns::RP_None)
{
std::time_t new_period_start = (RotatePeriod == uns::RP_Hourly ? (now / 3600) * 3600 : (now / 86400) * 86400);
if (new_period_start != CurrentFilePeriodStart)
{
// 时间轮转:关闭流并打开新的 period 文件,重置 OSL 索引
if (LogStream.is_open())
{
LogStream.flush();
LogStream.close();
}
CurrentOSLIndex = 0;
std::string actual_file = MakeRotatedFileName(LogFileName.empty() ? "UNSC" : LogFileName, now, CurrentOSLIndex);
LogStream.open(actual_file.c_str(), std::ios::out | std::ios::app);
CurrentFilePeriodStart = new_period_start;
// 完成时间轮转后不做 size 检查(新文件刚创建,肯定小于阈值)
return;
}
}
// 如果要求检查大小(一般在写入之后调用),并且 MaxFileSizeBytes > 0,则进行大小轮转
if (check_size_after_write && (MaxFileSizeBytes > 0) && LogStream.is_open())
{
// 尝试使用 tellp 获取当前文件位置
std::streampos pos = LogStream.tellp();
std::size_t filesize = 0;
if (pos != static_cast<std::streampos>(-1))
filesize = static_cast<std::size_t>(pos);
else
{
// 备用:通过打开文件获取大小
// 构造当前文件名(基于当前 period 和索引)
std::string current_file = MakeRotatedFileName(LogFileName.empty() ? "UNSC" : LogFileName, now, CurrentOSLIndex);
std::ifstream ifs(current_file.c_str(), std::ios::binary | std::ios::ate);
if (ifs.is_open())
{
filesize = static_cast<std::size_t>(ifs.tellg());
ifs.close();
}
}
if (filesize >= MaxFileSizeBytes)
{
// 增加 OSL 索引并打开新文件
if (LogStream.is_open())
{
LogStream.flush();
LogStream.close();
}
CurrentOSLIndex++;
std::string new_file = MakeRotatedFileName(LogFileName.empty() ? "UNSC" : LogFileName, now, CurrentOSLIndex);
LogStream.open(new_file.c_str(), std::ios::out | std::ios::app);
}
}
}
inline std::string RewriteFormatString(const std::string& real_format, const uns::LogArg* args, size_t count, fmt::dynamic_format_arg_store<fmt::format_context>& store)
{
std::string out;
out.reserve(real_format.size());
size_t arg_index = 0;
for (size_t i = 0; i < real_format.size();)
{
char c = real_format[i];
// escaped {{
if ((c == '{') && ((i + 1) < real_format.size()) && (real_format[i + 1] == '{'))
{
out += '{';
i += 2;
continue;
}
// escaped }}
if ((c == '}') && ((i + 1) < real_format.size()) && (real_format[i + 1] == '}'))
{
out += '}';
i += 2;
continue;
}
if (c == '{')
{
size_t j = i + 1;
while ((j < real_format.size()) && (real_format[j] != '}'))
++j;
if (j >= real_format.size())
{
out += '{';
++i;
continue;
}
std::string_view inside(real_format.data() + i + 1, j - i - 1);
if (arg_index < count)
{
uns::LogArg arg = args[arg_index];
// 只处理 time spec
if (!inside.empty() && (inside[0] == ':'))
{
if (std::holds_alternative<uns::TimeCapturer>(arg.value))
{
auto& tc = std::get<uns::TimeCapturer>(arg.value);
tc.format_spec = std::string(inside.substr(1));
arg.value = tc;
store.push_back(arg);
}
else
store.push_back(args[arg_index]);
}
else
store.push_back(args[arg_index]);
}
out += "{}";
++arg_index;
i = j + 1;
continue;
}
out += c;
++i;
}
return out;
}
void ServerLogger::LogImpl(uns::ServerLogLevel level, const std::string& format, const uns::LogArg* args, size_t count)
{
std::string formatted;
try
{
if (count == 0)
formatted = format;
else
{
fmt::dynamic_format_arg_store<fmt::basic_printf_context<char>> store;
for (size_t i = 0; i < count; ++i)
{
std::visit([&] (auto&& val)
{
using DeT = std::decay_t<decltype(val)>;
if constexpr (std::is_arithmetic_v<DeT> || std::is_convertible_v<DeT, fmt::string_view> || std::is_pointer_v<DeT>)
store.push_back(val);
else // 【修正】这里必须传入 args[i](即 LogArg 本身) 这样才能正确触发上面我们写好的 fmt::formatter<uns::LogArg> 路由
store.push_back(fmt::format("{}", args[i]));
}, args[i].value);
}
// 【修正】显式提供模板参数 <char>,彻底解决 std::string 导致的推导失败
formatted = fmt::vsprintf<char>(format, store);
}
}
catch (const fmt::format_error& e)
{
formatted = std::string("<< log format error: ") + e.what() + " >> " + format;
}
std::string logstr = GenerateLogHeader(level);
logstr += formatted;
logstr += "\n";
std::unique_lock<std::mutex> lock(QueueMutex);
LogQueue.push_back(logstr);
lock.unlock();
QueueCV.notify_one();
}
void ServerLogger::LogFImpl(uns::ServerLogLevel level, const std::string& filename, int line_num, const std::string& format, const uns::LogArg* args, size_t count)
{
std::string formatted;
std::string real_format = GenerateFileInfo(filename, line_num) + format;
try
{
if (count == 0)
formatted = real_format;
else
{
fmt::dynamic_format_arg_store<fmt::basic_printf_context<char>> store;
for (size_t i = 0; i < count; ++i)
{
std::visit([&] (auto&& val)
{
using DeT = std::decay_t<decltype(val)>;
if constexpr (std::is_arithmetic_v<DeT> || std::is_convertible_v<DeT, fmt::string_view> || std::is_pointer_v<DeT>)
store.push_back(val);
else
store.push_back(fmt::format("{}", args[i]));
}, args[i].value);
}
// 【修正】显式提供模板参数 <char>
formatted = fmt::vsprintf<char>(real_format, store);
}
}
catch (const fmt::format_error& e)
{
formatted = std::string("<< log format error: ") + e.what() + " >> " + real_format;
}
std::string logstr = GenerateLogHeader(level);
logstr += formatted;
logstr += "\n";
std::unique_lock<std::mutex> lock(QueueMutex);
LogQueue.push_back(logstr);
lock.unlock();
QueueCV.notify_one();
}
void ServerLogger::LogFMTImpl(uns::ServerLogLevel level, const std::string& format, const uns::LogArg* args, size_t count)
{
std::string formatted;
try
{
if (count == 0)
formatted = format;
else
{
// 现代 {} 风格:动态包装擦除后的类型数组
fmt::dynamic_format_arg_store<fmt::format_context> store;
std::string rewrite_format = RewriteFormatString(format, args, count, store);
formatted = fmt::vformat(rewrite_format, store);
}
}
catch (const fmt::format_error& e)
{
formatted = std::string("<< log format error: ") + e.what() + " >> " + format;
}
std::string logstr = GenerateLogHeader(level);
logstr += formatted;
logstr += "\n";
std::unique_lock<std::mutex> lock(QueueMutex);
LogQueue.push_back(logstr);
lock.unlock();
QueueCV.notify_one();
}
void ServerLogger::LogFMT_FImpl(uns::ServerLogLevel level, const std::string& filename, int line_num, const std::string& format, const uns::LogArg* args, size_t count)
{
std::string formatted;
std::string real_format = GenerateFileInfo(filename, line_num) + format;
try
{
if (count == 0)
formatted = real_format;
else
{
fmt::dynamic_format_arg_store<fmt::format_context> store;
std::string rewrite_format = RewriteFormatString(real_format, args, count, store);
formatted = fmt::vformat(rewrite_format, store);
}
}
catch (const fmt::format_error& e)
{
formatted = std::string("<< log format error: ") + e.what() + " >> " + real_format;
}
std::string logstr = GenerateLogHeader(level);
logstr += formatted;
logstr += "\n";
std::unique_lock<std::mutex> lock(QueueMutex);
LogQueue.push_back(logstr);
lock.unlock();
QueueCV.notify_one();
}
ServerLogger::ServerLogger()
{
//Default log off
//InitLogger(uns::llOff);
CurrentLevel = uns::llOff;
WorkerRunning = false;
RotatePeriod = uns::RP_None;
CurrentFilePeriodStart = 0;
MaxFileSizeBytes = 50 * 1024 * 1024;
CurrentOSLIndex = 0;
return;
}
ServerLogger::ServerLogger(uns::ServerLogLevel log_level, std::string file, uns::LogRotationPeriod rotation, std::size_t max_bytes)
{
InitLogger(log_level, file, rotation, max_bytes);
CurrentLevel = log_level;
return;
}
ServerLogger::~ServerLogger()
{
// 优雅关闭工作线程并刷新
CloseLog();
return;
}
bool ServerLogger::InitLogger(uns::ServerLogLevel log_level, const std::string& file, uns::LogRotationPeriod rotation, std::size_t max_bytes)
{
WorkerRunning = false;
RotatePeriod = rotation;
CurrentFilePeriodStart = 0;
CurrentLevel = log_level;
CurrentOSLIndex = 0;
MaxFileSizeBytes = max_bytes; // 强制开启大小轮转,默认为 50MiB(可由调用者覆盖)
LogFileName = file;
//初始化轮转
if (!LogFileName.empty())
{
time_t now = time(nullptr);
//取整点
CurrentFilePeriodStart = (RotatePeriod == uns::RP_Hourly ? ((now / 3600) * 3600) : (RotatePeriod == uns::RP_Daily ? ((now / 86400) * 86400) : now));
std::string actual_file = MakeRotatedFileName(LogFileName.empty() ? "UNSC" : LogFileName, now, CurrentOSLIndex);
LogStream.open(actual_file.c_str(), std::ios::out | std::ios::app);
// 如果当前文件已超过大小限制,生成下一个 OSL 文件
if (LogStream.is_open())
{
// 尝试获取当前位置(文件大小),并在必要时轮转
std::streampos pos = LogStream.tellp();
std::size_t filesize = 0;
if (pos != static_cast<std::streampos>(-1))
filesize = static_cast<std::size_t>(pos);
else
{
// 备用方案:用 ifstream 直接获取文件大小
std::ifstream ifs(actual_file.c_str(), std::ios::binary | std::ios::ate);
if (ifs.is_open())
{
filesize = static_cast<std::size_t>(ifs.tellg());
ifs.close();
}
}
if (filesize >= MaxFileSizeBytes)
{
// increase osl index and open new file
LogStream.close();
CurrentOSLIndex = 1;
actual_file = MakeRotatedFileName(LogFileName.empty() ? "UNSC" : LogFileName, now, CurrentOSLIndex);
LogStream.open(actual_file.c_str(), std::ios::out | std::ios::app);
}
}
}
//启动日志线程
bool started = true;
if (!WorkerRunning)
{
WorkerRunning = true;
try
{
WorkerThread = std::thread(&ServerLogger::WorkerLoop, this);
}
catch (...)
{
WorkerRunning = false;
started = false;
}
}
return ((LogStream.is_open() || LogFileName.empty()) && started);
}
void ServerLogger::CloseLog()
{
//关闭工作线程
WorkerRunning = false;
QueueCV.notify_all();
if (WorkerThread.joinable())
WorkerThread.join();
while (ThreadRunningFlag)
std::this_thread::sleep_for(std::chrono::milliseconds(5));
//关闭文件流
if (LogStream.is_open())
LogStream.close();
CurrentLevel = uns::llOff;
}
void ServerLogger::DisableLog()
{
CurrentLevel = uns::llOff;
}
void ServerLogger::FlushLogBuffer()
{
//触发写入
QueueCV.notify_all();
//等待队列清空
while (true)
{
std::unique_lock<std::mutex> lock(QueueMutex);
if (LogQueue.empty())
break;
lock.unlock();
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
if (LogStream.is_open())
LogStream.flush();
}
void ServerLogger::EnableLog(uns::ServerLogLevel level)
{
CurrentLevel = (level == uns::llOff ? uns::llAll : level);
}
ServerLogger GlobalServerLogger;
+210
View File
@@ -0,0 +1,210 @@
#pragma once
#pragma warning(disable : 4996)
#include <deque>
#include <mutex>
#include <thread>
#include <string>
#include <atomic>
#include <cstring>
#include <fstream>
#include "LogArg.h"
#include "Export.h"
#include <condition_variable>
namespace uns
{
enum ServerLogLevel
{
llAll = 0x000000,
llTrace = 0x000001,
llDebug = 0x000010,
llInfo = 0x000020,
llWarning = 0x000030,
llError = 0x000040,
llFatal = 0x000050,
llOff = 0xFFFFFF
};
enum LogRotationPeriod
{
RP_None = 0,
RP_Hourly = 1,
RP_Daily = 2
};
std::string UNSWSC_DLL_EXPORT toBinary(long number, int bits);
std::string UNSWSC_DLL_EXPORT toBinary(std::uint32_t number, int bits);
std::string UNSWSC_DLL_EXPORT toBinary(unsigned long number, int bits);
};
class UNSWSC_DLL_EXPORT ServerLogger
{
private:
std::fstream LogStream;
std::string LogFileName;
std::atomic<uns::ServerLogLevel> CurrentLevel; //避免数据竟态UB
// 异步队列与线程控制
std::deque<std::string> LogQueue;
std::mutex QueueMutex;
std::condition_variable QueueCV;
std::thread WorkerThread;
std::atomic_bool WorkerRunning;
std::atomic_bool ThreadRunningFlag;
// 日志分时段(轮转)支持
uns::LogRotationPeriod RotatePeriod;
std::time_t CurrentFilePeriodStart;
// 新增:大小轮转支持
std::size_t MaxFileSizeBytes; // 最大文件大小(字节)
int CurrentOSLIndex; // 当前 period 下的 OSL 索引(从 0 开始)
private:
std::string GenerateLogHeader(uns::ServerLogLevel LogLevel);
std::string GenerateFileInfo(std::string filename, int line_num);
void WriteBatchToOutputs(const std::deque<std::string>& batch)
;
void WorkerLoop();
std::string MakeRotatedFileName(const std::string& base, std::time_t t, int osl_index = 0);
void RotateIfNeeded(std::time_t now, bool check_size_after_write = false);
void LogImpl(uns::ServerLogLevel level, const std::string& format, const uns::LogArg* args, size_t count);
void LogFImpl(uns::ServerLogLevel level, const std::string& filename, int line_num, const std::string& format, const uns::LogArg* args, size_t count);
void LogFMTImpl(uns::ServerLogLevel level, const std::string& format, const uns::LogArg* args, size_t count);
void LogFMT_FImpl(uns::ServerLogLevel level, const std::string& filename, int line_num, const std::string& format, const uns::LogArg* args, size_t count);
public:
ServerLogger();
ServerLogger(uns::ServerLogLevel log_level, std::string file = "", uns::LogRotationPeriod rotation = uns::RP_None, std::size_t max_bytes = 50 * 1024 * 1024);
ServerLogger(const ServerLogger& obj) = delete;
~ServerLogger();
public:
bool InitLogger(uns::ServerLogLevel log_level, const std::string& file = "", uns::LogRotationPeriod rotation = uns::RP_None, std::size_t max_bytes = 50 * 1024 * 1024);
void CloseLog();
void DisableLog();
void FlushLogBuffer();
void EnableLog(uns::ServerLogLevel level);
template<typename... Args>
void Log(uns::ServerLogLevel level, const std::string& format, Args&&... args);
template<typename... Args>
void LogF(uns::ServerLogLevel level, const std::string& filename, int line_num, const std::string format, Args&&... args);
template<typename... Args>
void LogFMT(uns::ServerLogLevel level, const std::string& format, Args&&... args);
template<typename... Args>
void LogFMT_F(uns::ServerLogLevel level, const std::string& filename, int line_num, const std::string format, Args&&... args);
};
template<typename... Args>
inline void ServerLogger::Log(uns::ServerLogLevel level, const std::string& format, Args&&... args)
{
uns::ServerLogLevel curr_level = CurrentLevel.load(std::memory_order_relaxed);
if ((curr_level == uns::llOff) || (level < curr_level))
return;
if constexpr (sizeof...(Args) == 0)
LogImpl(level, format, nullptr, 0);
else
{
// 在客户端的栈上瞬间分配数组并完成类型擦除
uns::LogArg packed_args[] = { uns::LogArg(std::forward<Args>(args))... };
LogImpl(level, format, packed_args, sizeof...(Args));
}
}
template<typename... Args>
inline void ServerLogger::LogF(uns::ServerLogLevel level, const std::string& filename, int line_num, std::string format, Args&&... args)
{
uns::ServerLogLevel curr_level = CurrentLevel.load(std::memory_order_relaxed);
if ((curr_level == uns::llOff) || (level < curr_level))
return;
if constexpr (sizeof...(Args) == 0)
LogFImpl(level, filename, line_num, format, nullptr, 0);
else
{
uns::LogArg packed_args[] = { uns::LogArg(std::forward<Args>(args))... };
LogFImpl(level, filename, line_num, format, packed_args, sizeof...(Args));
}
}
template<typename ...Args>
inline void ServerLogger::LogFMT(uns::ServerLogLevel level, const std::string& format, Args && ...args)
{
uns::ServerLogLevel curr_level = CurrentLevel.load(std::memory_order_relaxed);
if ((curr_level == uns::llOff) || (level < curr_level))
return;
if constexpr (sizeof...(Args) == 0)
LogFMTImpl(level, format, nullptr, 0);
else
{
uns::LogArg packed_args[] = { uns::LogArg(std::forward<Args>(args))... };
LogFMTImpl(level, format, packed_args, sizeof...(Args));
}
}
template<typename ...Args>
inline void ServerLogger::LogFMT_F(uns::ServerLogLevel level, const std::string& filename, int line_num, const std::string format, Args && ...args)
{
uns::ServerLogLevel curr_level = CurrentLevel.load(std::memory_order_relaxed);
if ((curr_level == uns::llOff) || (level < curr_level))
return;
if constexpr (sizeof...(Args) == 0)
LogFMT_FImpl(level, filename, line_num, format, nullptr, 0);
else
{
uns::LogArg packed_args[] = { uns::LogArg(std::forward<Args>(args))... };
LogFMT_FImpl(level, filename, line_num, format, packed_args, sizeof...(Args));
}
}
extern UNSWSC_DLL_EXPORT ServerLogger GlobalServerLogger;
#if (defined(_WIN32) || defined(_WIN64))
#define __FILENAME__ std::strrchr("\\" __FILE__, '\\') + 1
#else
#define __FILENAME__ std::strrchr("/" __FILE__, '/') + 1
#endif
#define SCLOG_CONSOLE_INIT(__log_level__) GlobalServerLogger.InitLogger(__log_level__)
#define SCLOG_FILE_INIT(__file_name__, __log_level__, ...) GlobalServerLogger.InitLogger(__log_level__, __file_name__, ##__VA_ARGS__)
#define SCLOG_WRITE(__level__, __text__, ...) GlobalServerLogger.LogF(__level__, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOG_TRACE(__text__, ...) GlobalServerLogger.LogF(uns::llTrace, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOG_DEBUG(__text__, ...) GlobalServerLogger.LogF(uns::llDebug, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOG_INFO(__text__, ...) GlobalServerLogger.LogF(uns::llInfo, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOG_WARNING(__text__, ...) GlobalServerLogger.LogF(uns::llWarning, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOG_ERROR(__text__, ...) GlobalServerLogger.LogF(uns::llError, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOG_FATAL(__text__, ...) GlobalServerLogger.LogF(uns::llFatal, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOG_SHORT_WRITE(__level__, __text__, ...) GlobalServerLogger.Log(__level__, __text__, ##__VA_ARGS__)
#define SCLOG_SHORT_TRACE(__text__, ...) GlobalServerLogger.Log(uns::llTrace, __text__, ##__VA_ARGS__)
#define SCLOG_SHORT_DEBUG(__text__, ...) GlobalServerLogger.Log(uns::llDebug, __text__, ##__VA_ARGS__)
#define SCLOG_SHORT_INFO(__text__, ...) GlobalServerLogger.Log(uns::llInfo, __text__, ##__VA_ARGS__)
#define SCLOG_SHORT_WARNING(__text__, ...) GlobalServerLogger.Log(uns::llWarning, __text__, ##__VA_ARGS__)
#define SCLOG_SHORT_ERROR(__text__, ...) GlobalServerLogger.Log(uns::llError, __text__, ##__VA_ARGS__)
#define SCLOG_SHORT_FATAL(__text__, ...) GlobalServerLogger.Log(uns::llFatal, __text__, ##__VA_ARGS__)
#define SCLOGF_WRITE(__level__, __text__, ...) GlobalServerLogger.LogFMT_F(__level__, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOGF_TRACE(__text__, ...) GlobalServerLogger.LogFMT_F(uns::llTrace, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOGF_DEBUG(__text__, ...) GlobalServerLogger.LogFMT_F(uns::llDebug, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOGF_INFO(__text__, ...) GlobalServerLogger.LogFMT_F(uns::llInfo, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOGF_WARNING(__text__, ...) GlobalServerLogger.LogFMT_F(uns::llWarning, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOGF_ERROR(__text__, ...) GlobalServerLogger.LogFMT_F(uns::llError, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOGF_FATAL(__text__, ...) GlobalServerLogger.LogFMT_F(uns::llFatal, __FILENAME__, __LINE__, __text__, ##__VA_ARGS__)
#define SCLOGF_SHORT_WRITE(__level__, __text__, ...) GlobalServerLogger.LogFMT(__level__, __text__, ##__VA_ARGS__)
#define SCLOGF_SHORT_TRACE(__text__, ...) GlobalServerLogger.LogFMT(uns::llTrace, __text__, ##__VA_ARGS__)
#define SCLOGF_SHORT_DEBUG(__text__, ...) GlobalServerLogger.LogFMT(uns::llDebug, __text__, ##__VA_ARGS__)
#define SCLOGF_SHORT_INFO(__text__, ...) GlobalServerLogger.LogFMT(uns::llInfo, __text__, ##__VA_ARGS__)
#define SCLOGF_SHORT_WARNING(__text__, ...) GlobalServerLogger.LogFMT(uns::llWarning, __text__, ##__VA_ARGS__)
#define SCLOGF_SHORT_ERROR(__text__, ...) GlobalServerLogger.LogFMT(uns::llError, __text__, ##__VA_ARGS__)
#define SCLOGF_SHORT_FATAL(__text__, ...) GlobalServerLogger.LogFMT(uns::llFatal, __text__, ##__VA_ARGS__)
#define SCLOG_ENABLE(__level__) GlobalServerLogger.EnableLog(__level__)
#define SCLOG_DISABLE() GlobalServerLogger.DisableLog()
#define SCLOG_CLOSE() GlobalServerLogger.CloseLog()
+200
View File
@@ -0,0 +1,200 @@
#include "ServerProcessor.h"
#include "ServerLogger.h"
#include "PathTraversal.h"
#include "HTTPObjectsBridge.h"
#include "UNSResponseBuilder.h"
#include <mutex>
#include <typeinfo>
#include <typeindex>
#include <unordered_map>
#ifdef __GNUG__
#include <cxxabi.h>
#include <cstdlib>
#endif
// demangle(GNU)/回退(其他编译器)
static std::string demangle_name(const char* name)
{
#ifdef __GNUG__
int status = 0;
char *dem = abi::__cxa_demangle(name, nullptr, nullptr, &status);
std::string ret = (status == 0 && dem) ? dem : name;
std::free(dem);
return ret;
#else
return name;
#endif
}
// RTTI 名称缓存(线程安全)
static const std::string& RTTISubClassName(const std::type_info &ti)
{
using key_t = std::type_index;
static std::mutex m;
static std::unordered_map<key_t, std::string> cache;
key_t k(ti);
// 快速检查(持锁短时间)
{
std::lock_guard<std::mutex> g(m);
auto it = cache.find(k);
if (it != cache.end())
return it->second;
}
// 若未缓存,先在无锁区做 demangle(可能较慢),然后再插入缓存
std::string dem = demangle_name(ti.name());
{
std::lock_guard<std::mutex> g(m);
auto [it, inserted] = cache.emplace(k, std::move(dem));
return it->second;
}
}
class ServerProcessor::Impl
{
public:
bool IPCheck = false;
IPTablePtr BlockedIPs = nullptr;
std::map<std::string, bool> StreamInfo;
};
ServerProcessor::ServerProcessor() : pimpl(std::make_unique<Impl>())
{
}
ServerProcessor::~ServerProcessor() = default;
void ServerProcessor::EnableIPCheck()
{
pimpl->IPCheck = true;
return;
}
void ServerProcessor::DisableIPCheck()
{
pimpl->IPCheck = false;
return;
}
void ServerProcessor::UpdateBlockedIPList(IPTablePtr ips)
{
pimpl->BlockedIPs = ips;
return;
}
void ServerProcessor::AppenedBlockedIP(DateTime::Span block_time, std::string ip)
{
DateTime expr_time = (DateTime::Now() += block_time);
IPList li{ ip };
pimpl->BlockedIPs->Appened(expr_time, li);
pimpl->BlockedIPs->Update();
SCLOG_INFO("IP: [%s] has been blocked untill {%s}", ip.c_str(), std::string(expr_time).c_str());
return;
}
uns::HTTPMethod ServerProcessor::GetMethod(uns::RequestPtr request)
{
std::string method = request->GetImpl()->webcc_req->method();
if (method == "GET")
return uns::HTTPMethod::H_GET;
else if (method == "PUT")
return uns::HTTPMethod::H_PUT;
else if (method == "POST")
return uns::HTTPMethod::H_POST;
else if (method == "HEAD")
return uns::HTTPMethod::H_HEAD;
else if (method == "TRACE")
return uns::HTTPMethod::H_TRACE;
else if (method == "PATCH")
return uns::HTTPMethod::H_PATCH;
else if (method == "DELETE")
return uns::HTTPMethod::H_DELETE;
else if (method == "OPTIONS")
return uns::HTTPMethod::H_OPTIONS;
else if (method == "CONNECT")
return uns::HTTPMethod::H_CONNECT;
else
return uns::HTTPMethod::H_UNKNOWN;
}
void ServerProcessor::AddStreamSettings(std::string method, bool stream)
{
pimpl->StreamInfo.insert(std::pair<std::string, bool>(method, stream));
return;
}
uns::PathTraversalDefenceLevel ServerProcessor::PTDefence()
{
return uns::PathTraversalDefenceLevel::DenyAll;
}
bool ServerProcessor::IsPathSafe(const std::string& raw_path)
{
return false;
}
uns::ResponsePtr ServerProcessor::Handle(uns::RequestPtr request)
{
std::string x_real_ip;
if(request->GetImpl()->webcc_req->HasHeader("X-Real-IP"))
x_real_ip = request->GetImpl()->webcc_req->GetHeader("X-Real-IP");
std::string req_ip = (x_real_ip.empty() ? request->GetImpl()->webcc_req->address() : x_real_ip);
SCLOGF_INFO("Request recived by {{{}}}, ip: [{}], method: {}, URL: {}", RTTISubClassName(typeid(*this)), req_ip, request->GetImpl()->webcc_req->method(), request->GetImpl()->webcc_req->url().path());
if (pimpl->IPCheck && (pimpl->BlockedIPs != nullptr))
{
pimpl->BlockedIPs->Update();
if (pimpl->BlockedIPs->IPExist(req_ip))
return uns::ResponseBuilder().IPBlocked()();
}
// path test
std::string path = request->GetImpl()->webcc_req->url().path();
auto status = PathTraversal::AnalyzeUrlTraversal(path);
if(status != PathTraversal::UrlSafetyStatus::Safe)
SCLOGF_WARNING("PathTraversal Detected: {}, Level: {}", path, PathTraversal::ToString(status));
switch(PTDefence())
{
case uns::PathTraversalDefenceLevel::DenyAll:
if(status != PathTraversal::UrlSafetyStatus::Safe)
return uns::ResponseBuilder().Forbidden()();
break;
case uns::PathTraversalDefenceLevel::AutoNormalize:
{
if(status == PathTraversal::UrlSafetyStatus::EvasiveTraversal)
return uns::ResponseBuilder().Forbidden()();
auto decoded_path = PathTraversal::UrlDecode(path);
if(!IsPathSafe(decoded_path))
return uns::ResponseBuilder().Forbidden()();
auto url = request->GetImpl()->webcc_req->url();
url.ForceSet_Path(PathTraversal::NormalizeUrlPath(decoded_path));
request->GetImpl()->webcc_req->set_url(std::move(url));
break;
}
case uns::PathTraversalDefenceLevel::AllowNormal:
{
if(status == PathTraversal::UrlSafetyStatus::EvasiveTraversal)
return uns::ResponseBuilder().Forbidden()();
auto decoded_path = PathTraversal::UrlDecode(path);
if(!IsPathSafe(decoded_path))
return uns::ResponseBuilder().Forbidden()();
auto url = request->GetImpl()->webcc_req->url();
url.ForceSet_Path(decoded_path);
request->GetImpl()->webcc_req->set_url(std::move(url));
break;
}
default:
break; //Check Bypassed by [AllowAll]
}
uns::ResponsePtr ptr = Processor(request);
return ptr;
}
bool ServerProcessor::Stream(const std::string& method)
{
if (pimpl->StreamInfo.find(method) != pimpl->StreamInfo.end())
return pimpl->StreamInfo.at(method);
else
return false;
}
+35
View File
@@ -0,0 +1,35 @@
#pragma once
#include "Global.h"
#include "Export.h"
#include "IPTable.h"
#include "HTTPObjects.h"
class UNSWSC_DLL_EXPORT ServerProcessor
{
protected:
class Impl;
std::unique_ptr<Impl> pimpl;
public:
ServerProcessor();
virtual ~ServerProcessor();
public:
void EnableIPCheck();
void DisableIPCheck();
void UpdateBlockedIPList(IPTablePtr ips);
void AppenedBlockedIP(DateTime::Span block_time, std::string ip);
uns::HTTPMethod GetMethod(uns::RequestPtr request);
void AddStreamSettings(std::string method, bool stream);
public:
virtual uns::ResponsePtr Processor(uns::RequestPtr request) = 0;
virtual uns::PathTraversalDefenceLevel PTDefence();
virtual bool IsPathSafe(const std::string& raw_path);
public:
uns::ResponsePtr Handle(uns::RequestPtr request);
bool Stream(const std::string& method);
};
using ServerProcessorPtr = std::shared_ptr<ServerProcessor>;
+372
View File
@@ -0,0 +1,372 @@
#include "SessionManager.h"
#include <fmt/core.h>
#include "SafeRNG.h"
#ifndef _WIN32
#include "UOHash.h"
#else
#include "../UOHash/UOHash.h"
#endif
#include <fstream>
#include <filesystem>
#include <json/json.h>
const std::chrono::hours SessionManager::Session::max_age = std::chrono::hours(24 * 5);
SessionManager::Session::Session() //默认构造函数:无效的已过期空Cookie
{
uid = -1;
expiry_date = std::chrono::system_clock::now() - std::chrono::seconds(1);
}
SessionManager::Session::Session(const Session& obj)
{
uid = obj.uid;
cookie = obj.cookie;
expiry_date = obj.expiry_date;
}
SessionManager::Session::Session(const std::string& cookie)
{
uid = -1;
this->cookie = cookie;
expiry_date = std::chrono::system_clock::now() - std::chrono::seconds(1);
}
SessionManager::Session::Session(const Json::Value& json_obj)
{
if(json_obj["UID"].isInt() && json_obj["Cookie"].isString() && (json_obj["ExpiryDate"].isInt64()))
{
uid = json_obj["UID"].asInt();
cookie = json_obj["Cookie"].asString();
auto ms = std::chrono::milliseconds(json_obj["ExpiryDate"].asInt64());
expiry_date = systime(ms);
}
else
{
uid = -1;
expiry_date = std::chrono::system_clock::now() - std::chrono::seconds(1);
}
}
SessionManager::Session::Session(int uid, const std::string& cookie)
{
this->uid = uid;
this->cookie = cookie;
expiry_date = std::chrono::system_clock::now() + max_age;
}
int SessionManager::Session::GetUID() const
{
return uid;
}
bool SessionManager::Session::Expired() const
{
return (expiry_date < std::chrono::system_clock::now());
}
std::string SessionManager::Session::GetCookie() const
{
return cookie;
}
SessionManager::systime SessionManager::Session::GetExpiryDate() const
{
return expiry_date;
}
bool SessionManager::Session::NeedExpiryDateRefresh() const
{
if (Expired())
return true;
auto usage_time = std::chrono::system_clock::now() - (expiry_date - max_age);
return (usage_time >= std::chrono::hours(24));
}
void SessionManager::Session::SetUID(int uid)
{
this->uid = uid;
}
void SessionManager::Session::RefreshExpiryDate()
{
expiry_date = std::chrono::system_clock::now() + max_age;
}
void SessionManager::Session::SetCookie(const std::string& cookie)
{
this->cookie = cookie;
}
void SessionManager::Session::SetExpiryDate(const systime& expiry_time)
{
this->expiry_date = expiry_date;
}
bool SessionManager::Session::operator<(const Session& obj) const
{
return (this->cookie < obj.cookie);
}
SessionManager::Session::operator Json::Value() const
{
Json::Value root;
root["UID"] = uid;
root["Cookie"] = cookie;
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(expiry_date.time_since_epoch()).count();
root["ExpiryDate"] = Json::Int64(ms);
return root;
}
int SessionManager::Session::GetMaxAgeSeconds()
{
return (max_age.count() * 3600);
}
SessionManager::SessionManager()
{
}
std::string SessionManager::Random()
{
return RandomNumberGenerator::SecureRandomHex(32);
}
std::string SessionManager::ISO8601_TimeString()
{
time_t now = time(nullptr);
tm tim = {};
#if defined(_WIN32)
localtime_s(&tim, &now); // Windows
#else
localtime_r(&now, &tim); // POSIX
#endif
return fmt::format("{}-{}-{}T{}:{}:{}+08:00", (tim.tm_year + 1900), (tim.tm_mon + 1), tim.tm_mday, tim.tm_hour, tim.tm_min, tim.tm_sec);
}
void SessionManager::AutoCleanCookiePool()
{
std::lock_guard<std::mutex> lock(pool_mutex); //自动清理前需要上锁
for (auto it = cookie_storage.begin(); it != cookie_storage.end(); ) //正向遍历,删除无效/过期Session
{
const std::string& cookie = it->first;
int uid = it->second;
auto rit = reverse_cookie_storage.find(uid);
if (rit == reverse_cookie_storage.end()) //有Cookie无Session,删掉
{
it = cookie_storage.erase(it);
continue;
}
Session index_session(cookie.substr(prefix.length()));
auto& rcs = rit->second;
auto sit = rcs.find(index_session);
if ((sit == rcs.end()) || sit->Expired()) //无Session或Session已过期,删掉
{
if (sit != rcs.end())
rcs.erase(sit);
if (rcs.empty())
reverse_cookie_storage.erase(rit);
it = cookie_storage.erase(it);
continue;
}
++it; //前置++性能开销较低
}
for (auto rit = reverse_cookie_storage.begin(); rit != reverse_cookie_storage.end(); ) //反向遍历,删除异常Session
{
auto& rcs = rit->second;
for (auto sit = rcs.begin(); sit != rcs.end(); )
{
std::string key = prefix + sit->GetCookie();
if (cookie_storage.find(key) == cookie_storage.end()) //正向没有反向有,异常Session(无法被利用)
{
auto sit_next = std::next(sit);
rcs.erase(sit);
sit = sit_next;
}
else
++sit;
}
if (rcs.empty())
{
auto rit_next = std::next(rit);
reverse_cookie_storage.erase(rit);
rit = rit_next;
}
else
++rit;
}
}
std::string SessionManager::GenerateCookieForUser(int uid, bool cookie_only)
{
//生成Cookie和Session
std::string str_uid = std::to_string(uid);
std::string raw_cookie = str_uid + ISO8601_TimeString() + str_uid + Random() + str_uid;
auto res = uns::UOHash::HashString(uns::HashID::SHA3_224, raw_cookie);
if (!res)
return "";
std::string cookie = res.GetResult();
Session session(uid, cookie);
//存储到Cookie池 - 使用互斥体保证线程安全
{
std::lock_guard<std::mutex> lock(pool_mutex);
cookie_storage.insert({ (prefix + cookie), uid });
if (reverse_cookie_storage.find(uid) == reverse_cookie_storage.end())
reverse_cookie_storage.insert({ uid, { session } });
else
reverse_cookie_storage.at(uid).insert(session);
}
//返回用于响应的Cookie串
if(cookie_only)
return (prefix + cookie);
else
return fmt::format(fmt::runtime(cookie_template), cookie, Session::GetMaxAgeSeconds());
}
std::string SessionManager::DeleteCookie(const std::string& cookie)
{
std::lock_guard<std::mutex> lock(pool_mutex);
if (cookie_storage.find(cookie) != cookie_storage.end())
{
int uid = cookie_storage.at(cookie);
cookie_storage.erase(cookie);
if (reverse_cookie_storage.find(uid) != reverse_cookie_storage.end())
{
auto& rcs = reverse_cookie_storage.at(uid);
Session index_session(cookie.substr(prefix.length()));
rcs.erase(index_session);
if (rcs.empty())
reverse_cookie_storage.erase(uid);
}
}
//返回用于响应的Cookie串(注销浏览器端的Cookie)
return fmt::format(fmt::runtime(cookie_template.substr(prefix.length())), cookie, 0);
}
bool SessionManager::CheckRequestCookie(uns::RequestPtr request, int& uid)
{
uid = -1;
if (!request->HasHeader("Cookie")) //未找到Cookie
return false;
std::string cookie = request->GetHeader("Cookie");
std::lock_guard<std::mutex> lock(pool_mutex); //使用互斥体保证Cookie池的线程安全
auto cit = cookie_storage.find(cookie);
if (cit == cookie_storage.end()) //不正确的Cookie
return false;
uid = cit->second;
if (reverse_cookie_storage.find(uid) == reverse_cookie_storage.end())
return false; //理论上不会出现有Cookie没有UID的情况,仅作兜底处理
Session index_session(cookie.substr(prefix.length()));
auto& rcs = reverse_cookie_storage.at(uid);
auto it = rcs.find(index_session);
if (it == rcs.end()) //无有效Session
return false;
if (it->Expired()) //Cookie过期,删除该Session及对应的cookie。
{
rcs.erase(it); //删除Session
if (rcs.empty()) //如果一个用户没有任何有效的Cookie,删除该用户的记录
reverse_cookie_storage.erase(uid);
cookie_storage.erase(cookie); //删除Cookie
return false;
}
if (it->NeedExpiryDateRefresh()) //根据需要决定是否刷新Cookie
{
auto session = rcs.extract(it);
session.value().RefreshExpiryDate();
rcs.insert(std::move(session));
}
return true; //到达此处意味着找到有效的Cookie,并已完成必要的更新工作
}
std::string SessionManager::DeleteAllCookieForUser(int uid, const std::string & current_cookie)
{
std::lock_guard<std::mutex> lock(pool_mutex);
if (reverse_cookie_storage.find(uid) != reverse_cookie_storage.end())
{
auto sessions = reverse_cookie_storage.at(uid);
reverse_cookie_storage.erase(uid);
for(const auto& session : sessions)
{
if(cookie_storage.find(session.GetCookie()) != cookie_storage.end())
cookie_storage.erase(session.GetCookie());
}
}
//返回用于响应的Cookie串(注销浏览器端的Cookie)
return fmt::format(fmt::runtime(cookie_template.substr(prefix.length())), current_cookie, 0);
}
bool SessionManager::HasDumpedCookie(const std::string& path)
{
namespace fs = std::filesystem;
fs::path fn = (fs::path(path) / "unsc_sessions.json");
std::error_code ec;
return fs::is_regular_file(fn, ec);
}
bool SessionManager::LoadDumpedCookie(const std::string& path)
{
namespace fs = std::filesystem;
fs::path fn = (fs::path(path) / "unsc_sessions.json");
std::fstream fin(fn.string(), std::ios::in);
if(!fin.is_open())
return false;
try
{
Json::Reader reader;
Json::Value cookies;
if(!reader.parse(fin, cookies, false))
{
fin.close();
return false;
}
fin.close();
if(!cookies.isArray())
return false;
std::lock_guard<std::mutex> lock(pool_mutex); //使用互斥体保证Cookie池的线程安全
for(const auto& cookie : cookies)
{
Session session(cookie);
if(session.Expired())
continue;
int uid = session.GetUID();
cookie_storage.insert({ (prefix + session.GetCookie()), uid });
if (reverse_cookie_storage.find(uid) == reverse_cookie_storage.end())
reverse_cookie_storage.insert({ uid, { session } });
else
reverse_cookie_storage.at(uid).insert(session);
}
std::error_code ec;
fs::remove(fn, ec);
return true;
}
catch(...)
{
return false;
}
}
bool SessionManager::DumpAllValidCookies(const std::string& path)
{
namespace fs = std::filesystem;
fs::path fn = (fs::path(path) / "unsc_sessions.json");
std::fstream fout(fn.string(), std::ios::out | std::ios::trunc);
if(!fout.is_open())
return false;
Json::Value cookies(Json::arrayValue);
{
std::lock_guard<std::mutex> lock(pool_mutex); //使用互斥体保证Cookie池的线程安全
for(const auto& [uid, sessions] : reverse_cookie_storage)
for(const auto& session : sessions)
cookies.append(session);
}
Json::FastWriter writer;
fout << writer.write(cookies) << std::endl;
fout.close();
return true;
}
SessionManager GlobalSessionManager;
+86
View File
@@ -0,0 +1,86 @@
#pragma once
#include <map>
#include <set>
#include <mutex>
#include <chrono>
#include "Export.h"
#include "HTTPObjects.h"
namespace Json
{
class Value;
}
class UNSWSC_DLL_EXPORT SessionManager
{
public:
using systime = std::chrono::system_clock::time_point;
class UNSWSC_DLL_EXPORT Session
{
private:
int uid;
std::string cookie;
systime expiry_date;
static const std::chrono::hours max_age;
public:
Session();
Session(const Session& obj);
Session(const std::string& cookie); //构造仅用于比较的临时Session对象
Session(const Json::Value& json_obj); //从JSON反序列化
Session(int uid, const std::string& cookie);
public:
int GetUID() const;
bool Expired() const;
std::string GetCookie() const;
systime GetExpiryDate() const;
bool NeedExpiryDateRefresh() const; //使用超过一天且在活跃的cookie将被刷新。此处仅作时间判断
public:
void SetUID(int uid);
void RefreshExpiryDate();
void SetCookie(const std::string& cookie);
void SetExpiryDate(const systime& expiry_time);
public:
bool operator<(const Session& obj) const; //For std::map/std::set/...
operator Json::Value() const; //JSON序列化
static int GetMaxAgeSeconds();
};
private:
std::mutex pool_mutex;
//Key: Cookie Pair(oreo=xxxxx), Value: UID
std::map<std::string, int> cookie_storage;
//Key: UID, Value: Cookie Lists
std::map<int, std::set<Session>> reverse_cookie_storage;
const std::string prefix = "oreo=";
//const std::string cookie_template = prefix + "{}; HttpOnly; Path=/; SameSite=Lax; Max-Age={}";
const std::string cookie_template = prefix + "{}; HttpOnly; Secure; Path=/; SameSite=None; Max-Age={}";
public:
SessionManager();
SessionManager(const SessionManager& obj) = delete;
public:
static std::string Random();
static std::string ISO8601_TimeString();
public:
void AutoCleanCookiePool();
std::string GenerateCookieForUser(int uid, bool cookie_only = false);
std::string DeleteCookie(const std::string& cookie);
bool CheckRequestCookie(uns::RequestPtr request, int& uid);
std::string DeleteAllCookieForUser(int uid, const std::string& current_cookie);
bool HasDumpedCookie(const std::string& path);
bool LoadDumpedCookie(const std::string& path);
bool DumpAllValidCookies(const std::string& path);
};
extern UNSWSC_DLL_EXPORT SessionManager GlobalSessionManager;
+255
View File
@@ -0,0 +1,255 @@
#include "SyncFileReceiver.h"
#include <cstring>
#include <json/json.h>
#include "ServerLogger.h"
#include "PathTraversal.h"
#include "HTTPObjectsBridge.h"
#include "UNSResponseBuilder.h"
class SyncFileReceiver::Impl
{
public:
bool EnableCORS = false;
bool HTMLResponse = false;
std::string TempRoot;
IPTablePtr BlockedIPs = nullptr;
WebFileInfoVec FileInfo;
};
SyncFileReceiver::SyncFileReceiver() : pimpl(std::make_unique<Impl>())
{
}
SyncFileReceiver::~SyncFileReceiver() = default;
// 【修改】虚函数的默认实现:如果子类不重写,则默认返回原先的成功状态(201 Created)
uns::ResponsePtr SyncFileReceiver::ProcessFiles(const WebFileInfoVec& file_info, const std::string& tmp_root, uns::RequestPtr request)
{
SCLOGF_ERROR("SyncFileReceiver::ProcessFiles default handler triggered. Files count: {}", file_info.size());
std::string resp_body = (pimpl->HTMLResponse ? EncodeUploadResultHTML() : EncodeUploadResult());
return (pimpl->EnableCORS ? uns::ResponseBuilder().Created().Body(resp_body).AutoCORS(request)() : uns::ResponseBuilder().Created().Body(resp_body)());
}
void SyncFileReceiver::SetResponseMode(bool html)
{
pimpl->HTMLResponse = html;
SCLOG_DEBUG("SyncFileReceiver init mode: %s", (html ? "html" : "json"));
}
void SyncFileReceiver::SetCORSEnable(bool enable)
{
pimpl->EnableCORS = enable;
SCLOG_DEBUG("SyncFileReceiver CORS mode: %s", (enable ? "enabled" : "disabled"));
}
void SyncFileReceiver::SetTempRoot(std::string temp_root)
{
pimpl->TempRoot = temp_root;
SCLOG_TRACE("SFR-TempRoot: %s", pimpl->TempRoot.c_str());
return;
}
void SyncFileReceiver::UpdateBlockedIPs(IPTablePtr ip)
{
pimpl->BlockedIPs = ip;
return;
}
void SyncFileReceiver::AppenedBlockedIP(DateTime::Span block_time, std::string ip)
{
DateTime expr_time = (DateTime::Now() += block_time);
IPList li{ ip };
pimpl->BlockedIPs->Appened(expr_time, li);
pimpl->BlockedIPs->Update();
SCLOG_INFO("IP: [%s] has been blocked untill {%s}", ip.c_str(), std::string(expr_time).c_str());
return;
}
uns::HTTPMethod SyncFileReceiver::GetMethod(uns::RequestPtr request)
{
std::string method = request->GetImpl()->webcc_req->method();
if (method == "GET")
return uns::HTTPMethod::H_GET;
else if (method == "PUT")
return uns::HTTPMethod::H_PUT;
else if (method == "POST")
return uns::HTTPMethod::H_POST;
else if (method == "HEAD")
return uns::HTTPMethod::H_HEAD;
else if (method == "TRACE")
return uns::HTTPMethod::H_TRACE;
else if (method == "PATCH")
return uns::HTTPMethod::H_PATCH;
else if (method == "DELETE")
return uns::HTTPMethod::H_DELETE;
else if (method == "OPTIONS")
return uns::HTTPMethod::H_OPTIONS;
else if (method == "CONNECT")
return uns::HTTPMethod::H_CONNECT;
else
return uns::HTTPMethod::H_UNKNOWN;
}
bool SyncFileReceiver::WriteFile(const std::string& path, const std::string& bytes)
{
std::ofstream stream{ path, std::ios::binary };
if (stream.fail())
{
SCLOG_WARNING("Failed to write file [%s]: can't open stream", path.c_str());
return false;
}
stream.write(bytes.data(), bytes.size());
if (stream.fail())
SCLOG_WARNING("Failed to write file [%s]: can't write to stream", path.c_str());
return !stream.fail();
}
uns::PathTraversalDefenceLevel SyncFileReceiver::PTDefence()
{
return uns::PathTraversalDefenceLevel::DenyAll;
}
bool SyncFileReceiver::IsPathSafe(const std::string & raw_path)
{
return false;
}
std::string SyncFileReceiver::EncodeUploadResult()
{
Json::Value root;
Json::FastWriter writer;
root["AcceptedCount"] = pimpl->FileInfo.size();
root["AcceptedFiles"] = Json::Value(Json::arrayValue);
for (auto& ele : pimpl->FileInfo)
{
Json::Value sub;
sub["FileName"] = ele.GetStorageFileName();
sub["UploadTime"] = ele.GetUploadTime().GetTimeStamp();
root["AcceptedFiles"].append(sub);
}
return writer.write(root);
}
std::string SyncFileReceiver::EncodeUploadResultHTML()
{
const char* html = R"(
<html>
<head>
<meta charset="utf-8"/>
<title>Upload Result</title>
</head>
<body>
<center>
<h1>Upload Result</h1>
<hr/>
<p>AcceptedCount: %lld</p>
<p>AcceptedFiles: <br>%s</p>
</center>
</body>
</html>
)";
std::string tmp;
for (auto& ele : pimpl->FileInfo)
tmp += "[" + ele.GetStorageFileName() + "] - {" + ele.GetUploadTime().Format("%Y-%m-%d %H:%M:%S") + "}<br>";
size_t html_size = strlen(html) + tmp.size() + 10;
char* result = new char[html_size];
memset(result, 0, sizeof(result));
sprintf(result, html, pimpl->FileInfo.size(), tmp.c_str());
tmp = std::string(result);
delete[] result;
return tmp;
}
uns::ResponsePtr SyncFileReceiver::Execute(uns::RequestPtr request)
{
uns::HTTPMethod method = GetMethod(request);
std::string x_real_ip;
if(request->GetImpl()->webcc_req->HasHeader("X-Real-IP"))
x_real_ip = request->GetImpl()->webcc_req->GetHeader("X-Real-IP");
std::string req_ip = (x_real_ip.empty() ? request->GetImpl()->webcc_req->address() : x_real_ip);
SCLOG_DEBUG("Request recived, ip: [%s], method: %s", req_ip.c_str(), request->GetImpl()->webcc_req->method().c_str());
// path test
std::string path = request->GetImpl()->webcc_req->url().path();
auto status = PathTraversal::AnalyzeUrlTraversal(path);
if(status != PathTraversal::UrlSafetyStatus::Safe)
SCLOGF_WARNING("PathTraversal Detected: {}, Level: {}", path, PathTraversal::ToString(status));
switch(PTDefence())
{
case uns::PathTraversalDefenceLevel::DenyAll:
if(status != PathTraversal::UrlSafetyStatus::Safe)
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
break;
case uns::PathTraversalDefenceLevel::AutoNormalize:
{
if(status == PathTraversal::UrlSafetyStatus::EvasiveTraversal)
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
auto decoded_path = PathTraversal::UrlDecode(path);
if(!IsPathSafe(decoded_path))
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
auto url = request->GetImpl()->webcc_req->url();
url.ForceSet_Path(PathTraversal::NormalizeUrlPath(decoded_path));
request->GetImpl()->webcc_req->set_url(std::move(url));
break;
}
case uns::PathTraversalDefenceLevel::AllowNormal:
{
if(status == PathTraversal::UrlSafetyStatus::EvasiveTraversal)
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
auto decoded_path = PathTraversal::UrlDecode(path);
if(!IsPathSafe(decoded_path))
return (pimpl->EnableCORS ? uns::ResponseBuilder().Forbidden().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Forbidden().EmptyBody()());
auto url = request->GetImpl()->webcc_req->url();
url.ForceSet_Path(decoded_path);
request->GetImpl()->webcc_req->set_url(std::move(url));
break;
}
default:
break; //Check Bypassed by [AllowAll]
}
if ((method & uns::H_PUT) || (method & uns::H_POST))
{
if (pimpl->BlockedIPs != nullptr)
{
std::string req_ip = request->GetImpl()->webcc_req->address();
pimpl->BlockedIPs->Update();
if (pimpl->BlockedIPs->IPExist(req_ip))
return (pimpl->EnableCORS ? uns::ResponseBuilder().IPBlocked().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().IPBlocked().EmptyBody()());
}
webcc::Status tmpStatus = uns::ConvertStatus(PreCheckRequest(request));
if (tmpStatus != webcc::kOK)
return (pimpl->EnableCORS ? uns::ResponseBuilder().Code(tmpStatus).EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().Code(tmpStatus).EmptyBody()());
else if (!request->IsForm())
return (pimpl->EnableCORS ? uns::ResponseBuilder().RequestFormatError().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().RequestFormatError().EmptyBody()());
else
{
for (auto& form : request->GetFormParts())
{
if (form->GetFileName().empty())
continue;
if (!PreCheckForm(form))
{
SCLOGF_DEBUG("File denied: [{}], {} bytes", form->GetFileName(), form->GetDataSize());
continue;
}
SCLOGF_DEBUG("File recived: [{}], {} bytes", form->GetFileName(), form->GetDataSize());
WebFileInfo info(form->GetFileNameS(), form->GetDataSize());
WriteFile(info.MakePath(pimpl->TempRoot), form->GetData());
pimpl->FileInfo.push_back(info);
}
// 【修改的关键步骤】
// 1. 同步调用虚函数,获取具体的业务处理结果(及构筑好的自定义 HTTP Response)
uns::ResponsePtr response = ProcessFiles(pimpl->FileInfo, pimpl->TempRoot, request);
// 2. 清理当前类中的文件缓存(防止污染下一次 HTTP 请求)
pimpl->FileInfo.clear();
// 3. 作为最后一步直接返回
return response;
}
}
else
return (pimpl->EnableCORS ? uns::ResponseBuilder().IllegalUpload().EmptyBody().AutoCORS(request)() : uns::ResponseBuilder().IllegalUpload().EmptyBody()());
}
+43
View File
@@ -0,0 +1,43 @@
#pragma once
#include "Export.h"
#include "Global.h"
#include "IPTable.h"
#include "WebFileInfo.h"
#include "HTTPObjects.h"
class UNSWSC_DLL_EXPORT SyncFileReceiver
{
protected:
class Impl;
std::unique_ptr<Impl> pimpl;
public:
SyncFileReceiver();
virtual ~SyncFileReceiver();
public:
void SetResponseMode(bool html);
void SetCORSEnable(bool enable);
std::string EncodeUploadResult();
std::string EncodeUploadResultHTML();
void UpdateBlockedIPs(IPTablePtr ip);
void SetTempRoot(std::string temp_root);
uns::HTTPMethod GetMethod(uns::RequestPtr request);
void AppenedBlockedIP(DateTime::Span block_time, std::string ip);
bool WriteFile(const std::string& path, const std::string& bytes);
public:
virtual uns::Status PreCheckRequest(uns::RequestPtr request) = 0;
virtual bool PreCheckForm(uns::FormPartPtr form) = 0;
virtual uns::PathTraversalDefenceLevel PTDefence();
virtual bool IsPathSafe(const std::string& raw_path);
// 【修改】由原先的 Callback 改为可供子类重写的虚函数
// 返回值改为 webcc::ResponsePtr,并且引入 request 参数以便子类调用 AutoCORS 或解析请求头
virtual uns::ResponsePtr ProcessFiles(const WebFileInfoVec& file_info, const std::string& tmp_root, uns::RequestPtr request);
public:
uns::ResponsePtr Execute(uns::RequestPtr request);
};
using SyncFileReceiverPtr = std::shared_ptr<SyncFileReceiver>;
+90
View File
@@ -0,0 +1,90 @@
#include <iostream>
#include <vector>
#include <utility>
#include <string>
#include <functional>
// 确保引入包含日志宏和 GlobalServerLogger 的头文件
#include "ServerLogger.h"
#ifndef __FILENAME__
#define __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
#endif
// 仅用于提供函数指针地址
void DummyPureFunction() {}
int main() {
// 【步骤 1】初始化控制台日志,开启最低级别
SCLOG_CONSOLE_INIT(uns::llTrace);
SCLOG_SHORT_INFO("=== ServerLogger Macro-based Test Started ===");
// =================================================================
// 1. C++ fmt 风格测试 (带 F 的宏)
// =================================================================
std::cout << "\n--- [Part 1: FMT Style Macros Test] ---" << std::endl;
{
// 基础类型
SCLOGF_INFO("Base values (Long): int={}, double={}, string={}, bool={}, wstring={}",
42, 3.14159, std::string("UNS_Core日志测试"), true, L"wstring防乱码测试");
SCLOGF_SHORT_DEBUG("Base values (Short): int={}, string={}",
1024, "ShortFormatTest");
// 容器 (Range)
std::vector<int> dummy_vector = {10, 20, 30, 40};
SCLOGF_DEBUG("Vector lazy contents: {}", dummy_vector);
// 键值对 (Pair)
std::pair<std::string, double> dummy_pair = {"Database_Connections", 12.0};
SCLOGF_WARNING("Metric data pair: {}", dummy_pair);
// 函数/闭包 (Function)
std::function<void()> func1(DummyPureFunction);
auto dummy_closure = [status = 500]() { return status; };
std::function func2 = dummy_closure;
SCLOGF_ERROR("Registered handlers - Pure: {}, Closure: {}", func1, func2);
// 混合复杂编排
std::vector<int> scores = {99, 95, 88};
SCLOGF_FATAL("Critical failure! Operator: '{}', Cluster Nodes: {}, Error Code: {}",
"RootAdmin", scores, 5005);
}
// =================================================================
// 2. 传统 printf 风格测试 (不带 F 的宏)
// =================================================================
std::cout << "\n--- [Part 2: Printf Style Macros Test] ---" << std::endl;
{
// 2.1 测试带文件行号的长日志宏 (SCLOG_xxx)
SCLOG_TRACE("Printf Trace log: msg=%s, val=%d", "TraceMessage", 100);
SCLOG_DEBUG("Printf Debug log: score=%.2f", 98.5);
SCLOG_INFO("Printf Info log: hex=0x%X", 0xAB);
SCLOG_WARNING("Printf Warning log: active=%s", "true");
SCLOG_ERROR("Printf Error log: connection count=%d", 5);
SCLOG_FATAL("Printf Fatal log: system exit code=%d", -1);
// 2.2 测试不带文件行号的短日志宏 (SCLOG_SHORT_xxx)
SCLOG_SHORT_TRACE("Printf Short Trace: code=%d", 1);
SCLOG_SHORT_DEBUG("Printf Short Debug: name=%s", "WorkerA");
SCLOG_SHORT_INFO("Printf Short Info: load=%d%%", 85);
SCLOG_SHORT_WARNING("Printf Short Warning: threshold=%.1f", 90.0);
SCLOG_SHORT_ERROR("Printf Short Error: mask=0x%x", 0xFF00);
SCLOG_SHORT_FATAL("Printf Short Fatal: panic id=%d", 999);
}
std::cout << "\n" << std::endl;
SCLOG_SHORT_INFO("=== ServerLogger Macro-based Test Completed ===");
for(int i = 5; i > 0; i--)
{
using namespace std::chrono;
SCLOGF_SHORT_INFO("Close Log Stream in {} Seconds", i);
std::this_thread::sleep_for(1s);
}
// 【步骤 2】退出前关闭日志流
SCLOG_CLOSE();
return 0;
}
+778
View File
@@ -0,0 +1,778 @@
#include "UNSResponseBuilder.h"
#include "Global.h"
#include <json/json.h>
#include "CORSConfig.h"
#include "ServerLogger.h"
#include "HTTPObjectsBridge.h"
#include <webcc/response_builder.h>
inline bool global_allow_framing = false;
class uns::ResponseBuilder::Impl : public webcc::ResponseBuilder
{
public:
bool empty_body = false;
bool framing_override = false;
bool allow_framing = global_allow_framing;
public:
Impl() : webcc::ResponseBuilder()
{
}
Impl(webcc::RequestPtr req) : webcc::ResponseBuilder(req)
{
}
};
bool uns::ResponseBuilder::FileExist(std::string file)
{
std::fstream fs(file, std::ios::in);
bool succ = fs.is_open();
if (succ)
fs.close();
return succ;
}
void uns::ResponseBuilder::SetGlobalAllowFraming(bool allow)
{
global_allow_framing = allow;
}
uns::ResponseBuilder::ResponseBuilder() : impl(std::make_unique<Impl>())
{
}
uns::ResponseBuilder::~ResponseBuilder() = default;
uns::ResponseBuilder::ResponseBuilder(uns::RequestPtr req)
{
auto raw_webcc_req = req->GetImpl()->webcc_req;
impl = std::make_unique<Impl>(raw_webcc_req);
}
uns::ResponsePtr uns::ResponseBuilder::operator()()
{
//Auto appened error page when body is empty and not set as empty body
if((impl->GetCode() >= 400) && impl->IsBodyEmpty() && (!impl->empty_body))
{
std::string body = uns::EncodeErrorPage(impl->GetCode());
impl->Body(body);
}
if(impl->empty_body)
impl->Body("");
SCLOGF_INFO("Response ready, Code: {}, Content-Length: {}", impl->GetCode(), impl->GetBodySize());
auto& webcc_res_b = impl->Header("Date", uns::EncodeHTTPTime(nullptr)).Header("Server", G_SERVER_NAME);
bool framing = (impl->framing_override ? impl->allow_framing : global_allow_framing);
if(!framing)
webcc_res_b.Header("X-Frame-Options", "SAMEORIGIN").Header("Content-Security-Policy", "frame-ancestors 'self'");
auto res_impl = std::make_unique<uns::Response::Impl>(webcc_res_b());
return uns::ResponsePtr(new uns::Response(std::move(res_impl)));
}
uns::ResponseBuilder& uns::ResponseBuilder::Continue()
{
impl->Code(webcc::kContinue);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::SwitchingProtocols()
{
impl->Code(webcc::kSwitchingProtocols);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Processing()
{
impl->Code(webcc::kProcessing);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::EarlyHints()
{
impl->Code(webcc::kEarlyHints);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::OK()
{
impl->OK();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Created()
{
impl->Created();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Accepted()
{
impl->Code(webcc::kAccepted);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::NonAuthoritativeInformation()
{
impl->Code(webcc::kNonAuthoritativeInformation);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::NoContent()
{
impl->Code(webcc::kNoContent);
EmptyBody();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::ResetContent()
{
impl->Code(webcc::kResetContent);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::PartialContent()
{
impl->Code(webcc::kPartialContent);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::MultiStatus()
{
impl->Code(webcc::kMultiStatus);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::AlreadyReported()
{
impl->Code(webcc::kAlreadyReported);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::IMUsed()
{
impl->Code(webcc::kIMUsed);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::MultipleChoices()
{
impl->Code(webcc::kMultipleChoices);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::MovedPermanently(const std::string& new_url)
{
impl->Code(webcc::kMovedPermanently);
impl->Header("Location", new_url);
EmptyBody();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Found(const std::string& new_url)
{
impl->Code(webcc::kFound);
impl->Header("Location", new_url);
EmptyBody();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::SeeOther(const std::string& new_url)
{
impl->Code(webcc::kSeeOther);
impl->Header("Location", new_url);
EmptyBody();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::NotModified()
{
impl->Code(webcc::kNotModified);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::UseProxy()
{
impl->Code(webcc::kUseProxy);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::__Unused()
{
impl->Code(webcc::k__Unused);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::TemporaryRedirect(const std::string& new_url)
{
impl->Code(webcc::kTemporaryRedirect);
impl->Header("Location", new_url);
EmptyBody();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::PermanentRedirect(const std::string& new_url)
{
impl->Code(webcc::kPermanentRedirect);
impl->Header("Location", new_url);
EmptyBody();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::BadRequest()
{
impl->BadRequest();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Unauthorized()
{
impl->Code(webcc::kUnauthorized);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::PaymentRequired()
{
impl->Code(webcc::kPaymentRequired);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Forbidden()
{
impl->Code(webcc::kForbidden);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::NotFound()
{
impl->NotFound();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::MethodNotAllowed()
{
impl->Code(webcc::kMethodNotAllowed);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::NotAcceptable()
{
impl->Code(webcc::kNotAcceptable);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::ProxyAuthenticationRequired()
{
impl->Code(webcc::kProxyAuthenticationRequired);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::RequestTimeout()
{
impl->Code(webcc::kRequestTimeout);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Conflict()
{
impl->Code(webcc::kConflict);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Gone()
{
impl->Code(webcc::kGone);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::LengthRequired()
{
impl->Code(webcc::kLengthRequired);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::PreconditionFailed()
{
impl->Code(webcc::kPreconditionFailed);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::ContentTooLarge()
{
impl->Code(webcc::kContentTooLarge);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::URITooLong()
{
impl->Code(webcc::kURITooLong);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::UnsupportedMediaType()
{
impl->Code(webcc::kUnsupportedMediaType);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::RangeNotSatisfiable()
{
impl->Code(webcc::kRangeNotSatisfiable);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::ExpectationFailed()
{
impl->Code(webcc::kExpectationFailed);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::IamATeapot()
{
impl->Code(webcc::kIamATeapot);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::MisdirectedRequest()
{
impl->Code(webcc::kMisdirectedRequest);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::UnprocessableContent()
{
impl->Code(webcc::kUnprocessableContent);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Locked()
{
impl->Code(webcc::kLocked);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::FailedDependency()
{
impl->Code(webcc::kFailedDependency);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::TooEarly()
{
impl->Code(webcc::kTooEarly);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::UpgradeRequired(const std::string& protocol)
{
impl->Code(webcc::kMovedPermanently);
impl->Header("Upgrade", protocol);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::PreconditionRequired()
{
impl->Code(webcc::kPreconditionRequired);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::TooManyRequests()
{
impl->Code(webcc::kTooManyRequests);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::RequestHeaderFieldsTooLarge()
{
impl->Code(webcc::kRequestHeaderFieldsTooLarge);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::UnavailableForLegalReasons()
{
impl->Code(webcc::kUnavailableForLegalReasons);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::InternalServerError()
{
impl->InternalServerError();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::NotImplemented()
{
impl->NotImplemented();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::BadGateway()
{
impl->Code(webcc::kBadGateway);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::ServiceUnavailable()
{
impl->ServiceUnavailable();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::GatewayTimeout()
{
impl->Code(webcc::kGatewayTimeout);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::HTTPVersionNotSupported()
{
impl->Code(webcc::kHTTPVersionNotSupported);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::VariantAlsoNegotiates()
{
impl->Code(webcc::kVariantAlsoNegotiates);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::InsufficientStorage()
{
impl->Code(webcc::kInsufficientStorage);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::LoopDetected()
{
impl->Code(webcc::kLoopDetected);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::NotExtended()
{
impl->Code(webcc::kNotExtended);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::NetworkAuthenticationRequired()
{
impl->Code(webcc::kNetworkAuthenticationRequired);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::RequestFormatError()
{
impl->Code(webcc::k_uRequestFormatError);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::RequestInvalid()
{
impl->Code(webcc::k_uRequestInvalid);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::URLOutOfRange()
{
impl->Code(webcc::k_uURLOutOfRange);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::InvalidRequestHost()
{
impl->Code(webcc::k_uInvalidRequestHost);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::IPBlocked()
{
impl->Code(webcc::k_uIPBlocked);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::IllegalUpload()
{
impl->Code(webcc::k_uIllegalUpload);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::FileFormatError()
{
impl->Code(webcc::k_uFileFormatError);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::InvalidFile()
{
impl->Code(webcc::k_uInvalidFile);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::FileTooLarge()
{
impl->Code(webcc::k_uFileTooLarge);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::RPSLimited()
{
impl->Code(webcc::k_uRPSLimited);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::SubProcessFalied()
{
impl->Code(webcc::k_uSubProcessFalied);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::ServerHateYou()
{
impl->Code(webcc::k_uServerHateYou);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::DoSFound()
{
impl->Code(webcc::k_uDoSFound);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::DDoSFound()
{
impl->Code(webcc::k_uDDoSFound);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::UnknownServerError()
{
impl->Code(webcc::k_uUnknownServerError);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Utf8()
{
impl->Utf8();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Json()
{
impl->Json();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Date()
{
impl->Header("Date", EncodeHTTPTime(nullptr));
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::GZip()
{
impl->Gzip();
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::DenyFraming()
{
impl->framing_override = true;
impl->allow_framing = false;
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::AllowFraming()
{
impl->framing_override = true;
impl->allow_framing = true;
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Code(int code)
{
impl->Code(static_cast<webcc::Status>(code));
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Charset(std::string_view charset)
{
impl->Charset(charset);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::SetCookie(std::string_view cookie)
{
impl->Header("Set-Cookie", cookie);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::MediaType(std::string_view media_type)
{
impl->MediaType(media_type);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Header(std::string_view key, std::string_view value)
{
impl->Header(key, value);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::EmptyBody()
{
impl->empty_body = true;
impl->Body("");
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Body(int data)
{
impl->Body(std::to_string(data));
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Body(std::string&& data)
{
impl->Body(data);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Body(const Json::Value& data)
{
Json::FastWriter writer;
impl->Json();
impl->Body(writer.write(data));
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::Body(const std::string& data)
{
impl->Body(data);
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::ErrorPage()
{
impl->Body(EncodeErrorPage(impl->GetCode()));
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::ErrorPage(std::string_view error_page)
{
impl->Body(error_page.data());
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::File(const std::filesystem::path& path, bool infer_media_type, std::size_t chunk_size)
{
try
{
SCLOGF_INFO("Responsing With File: {}", path.generic_string());
if (FileExist(path.generic_string()))
impl->File(path, infer_media_type, chunk_size);
else
{
impl->Code(webcc::kNotFound);
SCLOGF_WARNING("File {} Does not Exist", path.generic_string());
}
}
catch (const webcc::Error& e)
{
SCLOGF_WARNING("webcc::Error During File Resopnse: {} ({})", e.code(), e.message());
impl->Code(webcc::kNotFound);
}
catch (...)
{
impl->Code(webcc::kInternalServerError);
}
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::FileForDownload(const std::filesystem::path& path, bool infer_media_type, std::size_t chunk_size)
{
try
{
SCLOGF_INFO("Responsing With File For Download: {}", path.generic_string());
if (FileExist(path.generic_string()))
{
impl->File(path, infer_media_type, chunk_size);
impl->Header("Content-Disposition", "attachment;filename=" + path.filename().string());
impl->Header("Content-Type", "application/octet-stream");
}
else
{
impl->Code(webcc::kNotFound);
SCLOGF_WARNING("File {} Does not Exist", path.generic_string());
}
}
catch (const webcc::Error& e)
{
SCLOGF_WARNING("webcc::Error During File-Downloading Resopnse: {} ({})", e.code(), e.message());
impl->Code(webcc::kNotFound);
}
catch (...)
{
impl->Code(webcc::kInternalServerError);
}
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::AutoCORS(uns::RequestPtr req)
{
auto Trim = [](const std::string& s) -> std::string
{
size_t start = 0;
while ((start < s.size()) && std::isspace(static_cast<unsigned char>(s[start])))
++start;
if (start == s.size())
return "";
size_t end = s.size() - 1;
while ((end > start) && std::isspace(static_cast<unsigned char>(s[end])))
--end;
return s.substr(start, end - start + 1);
};
if(req->GetImpl()->webcc_req->HasHeader(uns::cors::reqh_o))
{
std::string origin = Trim(req->GetImpl()->webcc_req->GetHeader(uns::cors::reqh_o));
if(GlobalCORSConfig.UrlValidate(origin))
{
std::string host = req->GetImpl()->webcc_req->HasHeader("Host") ? req->GetImpl()->webcc_req->GetHeader("Host") : "";
if(host.empty() || GlobalCORSConfig.HostValidate(host))
{
SCLOG_INFO("Applied CORS headers for origin=%s cred=%d", origin.c_str(), GlobalCORSConfig.AllowCookie() ? 1 : 0);
return CORS(origin);
}
else
{
SCLOG_WARNING("Actual request: Host not allowed: %s", host.c_str());
return Forbidden().Body(std::string("CORS ERROR"));
}
}
else
{
SCLOG_WARNING("Actual request: Origin not allowed: %s", origin.c_str());
return Forbidden().Body(std::string("CORS ERROR"));
}
}
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::CORS(const std::string& origin)
{
impl->Header("Vary", "Origin");
impl->Header(uns::cors::resh_acao, origin);
impl->Header(uns::cors::resh_acac, uns::btos(GlobalCORSConfig.AllowCookie()));
return *this;
}
uns::ResponseBuilder& uns::ResponseBuilder::CORS_Full(const std::string& origin, const std::set<std::string>& headers)
{
impl->Header("Vary", "Origin");
impl->Header(uns::cors::resh_acao, origin);
impl->Header(uns::cors::resh_acam, GlobalCORSConfig.GetValidateMethods());
impl->Header(uns::cors::resh_acah, GlobalCORSConfig.GetValidateHeaders(headers));
impl->Header(uns::cors::resh_acac, uns::btos(GlobalCORSConfig.AllowCookie()));
impl->Header(uns::cors::resh_acma, std::to_string(GlobalCORSConfig.GetMaxAge()));
return *this;
}
+238
View File
@@ -0,0 +1,238 @@
#pragma once
#include <set>
#include <memory>
#include "Export.h"
#include <filesystem>
#include "HTTPObjects.h"
namespace Json
{
class Value;
}
namespace uns
{
class UNSWSC_DLL_EXPORT ResponseBuilder
{
private:
class Impl;
std::unique_ptr<Impl> impl;
private:
bool FileExist(std::string file);
public:
static void SetGlobalAllowFraming(bool allow);
public:
ResponseBuilder();
virtual ~ResponseBuilder();
ResponseBuilder(uns::RequestPtr req);
ResponseBuilder(const ResponseBuilder&) = delete;
ResponseBuilder& operator=(const ResponseBuilder&) = delete;
public:
uns::ResponsePtr operator()();
public: //Standard Return Code 1xx
//100 - 此临时响应表明客户端应继续请求,或者如果请求已完成,则忽略此响应。
ResponseBuilder& Continue();
//101 - 此代码是在响应客户端的 Upgrade 请求标头时发送的,用于指示服务器即将切换到的协议。
ResponseBuilder& SwitchingProtocols();
//102 - 此代码曾在 WebDAV 上下文中使用,表示服务器已收到请求,但在响应时无法提供状态。
ResponseBuilder& Processing();
//103 - 此状态码主要与 Link 标头一起使用,允许用户代理在服务器准备响应时开始预加载资源,或预连接到页面需要资源的源站。
ResponseBuilder& EarlyHints();
public: //Standard Return Code 2xx
//200 - 请求成功。
ResponseBuilder& OK();
//201 - 请求成功,并因此创建了一个新资源。
ResponseBuilder& Created();
//202 - 请求已被接收但尚未处理。
ResponseBuilder& Accepted();
//203 - 此响应代码表示返回的元数据与原始服务器上可用的不完全相同,而是从本地或第三方副本收集的。这主要用于另一个资源的镜像或备份。
ResponseBuilder& NonAuthoritativeInformation();
//204 - 对于此请求,没有内容可发送,但响应头可能有用。
ResponseBuilder& NoContent();
//205 - 告知用户代理重置发送此请求的文档。
ResponseBuilder& ResetContent();
//206 - 当客户端请求了资源的一部分时,使用此响应代码进行响应。
ResponseBuilder& PartialContent();
//207 - 在可能需要多个状态码的情况下,传递关于多个资源的信息。
ResponseBuilder& MultiStatus();
//208 - 在 <dav:propstat> 响应元素内部使用,以避免重复枚举同一集合的多个绑定的内部成员。
ResponseBuilder& AlreadyReported();
//226 - 服务器已完成了对资源的 GET 请求,并且响应是对当前实例应用了一个或多个实例操作后的结果表示。
ResponseBuilder& IMUsed();
public: //Standard Return Code 3xx
//300 - 在代理驱动(agent-driven)的内容协商中,请求有多个可能的响应,用户代理或用户应选择其中之一。
ResponseBuilder& MultipleChoices();
//301 - 请求资源的 URL 已永久更改。新 URL 在响应中给出。
ResponseBuilder& MovedPermanently(const std::string& new_url);
//302 - 此响应代码意味着请求资源的 URI 已暂时更改。未来可能还会对 URI 进行进一步更改,因此客户端在未来的请求中应使用相同的 URI。
ResponseBuilder& Found(const std::string& new_url);
//303 - 服务器发送此响应以指示客户端使用 GET 请求在另一个 URI 获取请求的资源。
ResponseBuilder& SeeOther(const std::string& new_url);
//304 - 用于缓存目的。它告知客户端响应未被修改,因此客户端可以继续使用相同的缓存响应版本。
ResponseBuilder& NotModified();
//305 - 在 HTTP 规范的前一版本中定义,表示请求的响应必须通过代理访问。由于涉及代理带内配置的安全问题,此状态码已被弃用。
ResponseBuilder& UseProxy();
//306 - 此响应代码不再使用,但被保留。它曾在 HTTP/1.1 规范的先前版本中使用。
ResponseBuilder& __Unused();
//307 - 服务器发送此响应以指示客户端使用与先前请求相同的方法在另一个 URI 获取请求的资源。其语义与 302 Found 响应代码相同,但用户代理不得更改使用的 HTTP 方法。
ResponseBuilder& TemporaryRedirect(const std::string& new_url);
//308 - 表示资源现在永久位于另一个 URI,由 Location 响应头指定。其语义与 301 Moved Permanently HTTP 响应代码相同,但用户代理不得更改使用的 HTTP 方法。
ResponseBuilder& PermanentRedirect(const std::string& new_url);
public: //Recode Code 4xx
//400 - 由于被认为是客户端错误的原因(例如,格式错误的请求语法、无效的请求消息结构或欺骗性的请求路由),服务器无法或不会处理该请求。
ResponseBuilder& BadRequest();
//401 - 尽管 HTTP 标准指定为 "unauthorized",但从语义上讲,此响应的意思是 "unauthenticated"。即,客户端必须进行身份验证才能获得请求的响应。
ResponseBuilder& Unauthorized();
//402 - 此代码最初用于数字支付系统,但此状态码很少使用,且不存在标准约定。
ResponseBuilder& PaymentRequired();
//403 - 客户端没有访问内容的权利;也就是说,它是未授权的,因此服务器拒绝提供请求的资源。与 401 Unauthorized 不同,服务器知道客户端的身份。
ResponseBuilder& Forbidden();
//404 - 服务器找不到请求的资源。
ResponseBuilder& NotFound();
//405 - 服务器知道请求方法,但目标资源不支持该方法。
ResponseBuilder& MethodNotAllowed();
//406 - 当 Web 服务器执行服务器驱动的内容协商后,找不到任何符合用户代理给定条件的内容时,会发送此响应。
ResponseBuilder& NotAcceptable();
//407 - 类似于 401 Unauthorized,但需要通过代理进行身份验证。
ResponseBuilder& ProxyAuthenticationRequired();
//408 - 某些服务器会在空闲连接上发送此响应,即使客户端之前没有任何请求。这意味着服务器希望关闭此未使用的连接。
ResponseBuilder& RequestTimeout();
//409 - 当请求与服务器的当前状态冲突时,发送此响应。
ResponseBuilder& Conflict();
//410 - 当请求的内容已从服务器永久删除,且没有转发地址时,发送此响应。
ResponseBuilder& Gone();
//411 - 服务器拒绝了请求,因为未定义 Content-Length 标头字段,而服务器需要它。
ResponseBuilder& LengthRequired();
//412 - 在条件请求中,客户端在其标头中指明了服务器不满足的前提条件。
ResponseBuilder& PreconditionFailed();
//413 - 请求体大于服务器定义的限制。
ResponseBuilder& ContentTooLarge();
//414 - 客户端请求的 URI 长度超过了服务器愿意解释的长度。
ResponseBuilder& URITooLong();
//415 - 服务器不支持请求数据的媒体格式,因此服务器拒绝该请求。
ResponseBuilder& UnsupportedMediaType();
//416 - 无法满足请求中 Range 标头字段指定的范围。可能范围超出了目标资源数据的大小。
ResponseBuilder& RangeNotSatisfiable();
//417 - 此响应代码表示服务器无法满足 Expect 请求标头字段指示的期望。
ResponseBuilder& ExpectationFailed();
//418 - 服务器拒绝尝试用茶壶煮咖啡。
ResponseBuilder& IamATeapot();
//421 - 请求被发送到了一个无法产生响应的服务器。
ResponseBuilder& MisdirectedRequest();
//422 - 请求格式正确,但由于语义错误而无法被遵循。
ResponseBuilder& UnprocessableContent();
//423 - 正在访问的资源已被锁定。
ResponseBuilder& Locked();
//424 - 由于先前的请求失败,导致当前请求失败。
ResponseBuilder& FailedDependency();
//425 - 表示服务器不愿意冒险处理一个可能被重放的请求。
ResponseBuilder& TooEarly();
//426 - 服务器拒绝使用当前协议执行请求,但可能在客户端升级到其他协议后愿意执行。服务器在 426 响应中发送 Upgrade 标头以指示所需的协议。
ResponseBuilder& UpgradeRequired(const std::string& protocol);
//428 - 原始服务器要求请求是有条件的。此响应旨在防止"丢失更新"问题,即客户端 GET 资源状态,修改后 PUT 回服务器,而同时第三方已修改了服务器上的状态,导致冲突。
ResponseBuilder& PreconditionRequired();
//429 - 用户在给定的时间内发送了太多请求(速率限制)。
ResponseBuilder& TooManyRequests();
//431 - 服务器因请求头字段太大而不愿意处理该请求。
ResponseBuilder& RequestHeaderFieldsTooLarge();
//451 - 用户代理请求了一个无法合法提供的资源,例如被政府审查的网页。
ResponseBuilder& UnavailableForLegalReasons();
public: //Standard Return Code 5xx
//500 - 服务器遇到了不知道如何处理的情况。此错误是通用性的,表示服务器找不到更合适的 5XX 状态码来响应。
ResponseBuilder& InternalServerError();
//501 - 服务器不支持请求方法,无法处理。
ResponseBuilder& NotImplemented();
//502 - 此错误响应意味着服务器作为网关或代理时,收到了一个无效的响应。
ResponseBuilder& BadGateway();
//503 - 服务器尚未准备好处理请求。
ResponseBuilder& ServiceUnavailable();
//504 - 当服务器作为网关或代理,无法及时获得响应时,会给出此错误响应。
ResponseBuilder& GatewayTimeout();
//505 - 服务器不支持请求中使用的 HTTP 版本。
ResponseBuilder& HTTPVersionNotSupported();
//506 - 服务器存在内部配置错误:在内容协商过程中,被选中的变体被配置为自身参与内容协商,这导致在创建响应时出现循环引用。
ResponseBuilder& VariantAlsoNegotiates();
//507 - 由于服务器无法存储成功完成请求所需的表示,因此无法对资源执行该方法。
ResponseBuilder& InsufficientStorage();
//508 - 服务器在处理请求时检测到无限循环。
ResponseBuilder& LoopDetected();
//510 - 客户端请求声明了一个应使用 HTTP 扩展(RFC 2774)来处理请求,但该扩展不受支持。
ResponseBuilder& NotExtended();
//511 - 表示客户端需要进行身份验证才能获得网络访问权限。
ResponseBuilder& NetworkAuthenticationRequired();
public: //Non-Standard Return Code 4xx
//489 - 请求载体的格式错误,如:无法解析的JSON等。
ResponseBuilder& RequestFormatError();
//490 - 请求无效。可能是由于未正确携带数据等必要信息。
ResponseBuilder& RequestInvalid();
//492 - 请求URL超范围。此响应表示请求的URL是错误的。
ResponseBuilder& URLOutOfRange();
//493 - 无效的请求主机。指示请求时使用了错误的域名/IP。
ResponseBuilder& InvalidRequestHost();
//494 - IP地址被封禁。
ResponseBuilder& IPBlocked();
//495 -非法上传请求。指示本次上传请求不符合服务器规定。
ResponseBuilder& IllegalUpload();
//496 - 文件格式错误。指示上传的文件格式不符合服务器规定。
ResponseBuilder& FileFormatError();
//497 - 无效文件。处理请求所需的文件已过期/无法访问。
ResponseBuilder& InvalidFile();
//498 - 上传的文件过大。非文件上传时应使用 413 Content Too Large。
ResponseBuilder& FileTooLarge();
//499 - 每秒请求数过多。仅在一些特殊API中使用,常规情况需使用 429 Too Many Requests。
ResponseBuilder& RPSLimited();
public: //Non-Standard Code 5xx
//533 - 子过程失败。服务器在处理请求的某个步骤中遇到无法恢复的错误。
ResponseBuilder& SubProcessFalied();
//540 - 服务器检测到漏洞利用/可执行文件上传等网络攻击行为。
ResponseBuilder& ServerHateYou();
//550 - 检测到拒绝服务漏洞攻击。
ResponseBuilder& DoSFound();
//551 - 检测到分布式拒绝服务漏洞攻击。
ResponseBuilder& DDoSFound();
//560 - 未知的服务器错误。当服务器无法定位错误来源时返回。否则应使用 500 Internal Server Error。
ResponseBuilder& UnknownServerError();
public: //Header Functions
ResponseBuilder& Utf8();
ResponseBuilder& Json();
ResponseBuilder& Date();
ResponseBuilder& GZip();
ResponseBuilder& DenyFraming();
ResponseBuilder& AllowFraming();
ResponseBuilder& Code(int code);
ResponseBuilder& Charset(std::string_view charset);
ResponseBuilder& SetCookie(std::string_view cookie);
ResponseBuilder& MediaType(std::string_view media_type);
ResponseBuilder& Header(std::string_view key, std::string_view value);
public: //Body Functions
ResponseBuilder& EmptyBody();
ResponseBuilder& Body(int data);
ResponseBuilder& Body(std::string&& data);
ResponseBuilder& Body(const Json::Value& data);
ResponseBuilder& Body(const std::string& data);
ResponseBuilder& ErrorPage();
ResponseBuilder& ErrorPage(std::string_view error_page);
ResponseBuilder& File(const std::filesystem::path& path, bool infer_media_type = true, std::size_t chunk_size = 1024);
ResponseBuilder& FileForDownload(const std::filesystem::path& path, bool infer_media_type = true, std::size_t chunk_size = 1024);
public: //CORS Functions
//Perform CORS Check and Return CORS Headers, Must be the last function called
ResponseBuilder& AutoCORS(uns::RequestPtr req);
ResponseBuilder& CORS(const std::string& origin);
ResponseBuilder& CORS_Full(const std::string& origin, const std::set<std::string>& headers);
};
};
+92
View File
@@ -0,0 +1,92 @@
#include <random>
#ifndef _WIN32
#include "UOHash.h"
#else
#include "../UOHash/UOHash.h"
#endif
#include "WebFileInfo.h"
std::string WebFileInfo::GetRandomNumber()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(123456789, 987654321);
return std::to_string(dis(gen));
}
std::string WebFileInfo::GetExtension(std::string ofn)
{
size_t pos = ofn.rfind('.');
if (pos == -1)
return "";
else
return ofn.substr(pos);
}
std::string WebFileInfo::GenerateStorageName(std::string ofn)
{
uns::HashResult result = uns::UOHash::HashString(uns::HashID::CRC32C, ofn);
std::string timestr = UploadTime.Format("UPLOAD-%Y%m%d%H%M%S-");
uns::HashResult random = uns::UOHash::HashString(uns::HashID::CRC32C, GetRandomNumber());
return timestr + std::string(result) + "-" + std::string(random) + ".unsctmp";
}
WebFileInfo::WebFileInfo(std::string ofn, size_t size)
{
OriginalFileName = ofn;
FileSize = size;
UploadTime = DateTime::Now();
StorageFileName = GenerateStorageName(ofn);
ExtensionName = GetExtension(ofn);
}
WebFileInfo::WebFileInfo(std::string ofn, std::string sfn, std::string en, DateTime upt, size_t siz)
{
OriginalFileName = ofn;
StorageFileName = sfn;
ExtensionName = en;
UploadTime = upt;
FileSize = siz;
}
WebFileInfo::WebFileInfo(const WebFileInfo& obj)
{
OriginalFileName = obj.OriginalFileName;
StorageFileName = obj.StorageFileName;
ExtensionName = obj.ExtensionName;
UploadTime = obj.UploadTime;
FileSize = obj.FileSize;
}
std::string WebFileInfo::MakePath(std::string storage_dir) const
{
if (storage_dir[storage_dir.size() - 1] == '/')
return storage_dir + StorageFileName;
else
return storage_dir + "/" + StorageFileName;
}
std::string WebFileInfo::GetOriginalFileName() const
{
return OriginalFileName;
}
std::string WebFileInfo::GetStorageFileName() const
{
return StorageFileName;
}
std::string WebFileInfo::GetExtensionName() const
{
return ExtensionName;
}
DateTime WebFileInfo::GetUploadTime() const
{
return UploadTime;
}
size_t WebFileInfo::GetFileSize() const
{
return FileSize;
}
+36
View File
@@ -0,0 +1,36 @@
#pragma once
#include <string>
#include <vector>
#include "Export.h"
#include "DateTime.h"
class UNSWSC_DLL_EXPORT WebFileInfo
{
private:
std::string OriginalFileName;
std::string StorageFileName;
std::string ExtensionName;
DateTime UploadTime;
size_t FileSize;
private:
std::string GetRandomNumber();
std::string GetExtension(std::string ofn);
std::string GenerateStorageName(std::string ofn);
public:
WebFileInfo() = default;
WebFileInfo(std::string ofn, size_t size);
WebFileInfo(std::string ofn, std::string sfn, std::string en, DateTime upt, size_t siz);
WebFileInfo(const WebFileInfo& obj);
public:
std::string MakePath(std::string storage_dir) const;
std::string GetOriginalFileName() const;
std::string GetStorageFileName() const;
std::string GetExtensionName() const;
DateTime GetUploadTime() const;
size_t GetFileSize() const;
};
using WebFileInfoVec = std::vector<WebFileInfo>;
+501
View File
@@ -0,0 +1,501 @@
# This is the CMakeCache file.
# For build in directory: /home/unknownobject/UNSWebServerCore/build
# It was generated by CMake: /usr/bin/cmake
# You can edit this file to change values found and used by cmake.
# If you do not want to change any of the values, simply exit the editor.
# If you do want to change a value, simply edit, save, and exit the editor.
# The syntax for the file is as follows:
# KEY:TYPE=VALUE
# KEY is the name of a variable in the cache.
# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
# VALUE is the current value for the KEY.
########################
# EXTERNAL cache entries
########################
//Path to a program.
CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line
//Path to a program.
CMAKE_AR:FILEPATH=/usr/bin/ar
//Build type
CMAKE_BUILD_TYPE:STRING=Release
//Enable/Disable color output during build.
CMAKE_COLOR_MAKEFILE:BOOL=ON
//CXX compiler
CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++
//A wrapper around 'ar' adding the appropriate '--plugin' option
// for the GCC compiler
CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-13
//A wrapper around 'ranlib' adding the appropriate '--plugin' option
// for the GCC compiler
CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-13
//Flags used by the CXX compiler during all build types.
CMAKE_CXX_FLAGS:STRING=
//Flags used by the CXX compiler during DEBUG builds.
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
//Flags used by the CXX compiler during MINSIZEREL builds.
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
//Flags used by the CXX compiler during RELEASE builds.
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
//Flags used by the CXX compiler during RELWITHDEBINFO builds.
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
//Path to a program.
CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND
//Flags used by the linker during all build types.
CMAKE_EXE_LINKER_FLAGS:STRING=
//Flags used by the linker during DEBUG builds.
CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
//Flags used by the linker during MINSIZEREL builds.
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
//Flags used by the linker during RELEASE builds.
CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
//Flags used by the linker during RELWITHDEBINFO builds.
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
//Enable/Disable output of compile commands during generation.
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=
//Value Computed by CMake.
CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/unknownobject/UNSWebServerCore/build/CMakeFiles/pkgRedirects
//Install path prefix, prepended onto install directories.
CMAKE_INSTALL_PREFIX:PATH=/usr/local
//Path to a program.
CMAKE_LINKER:FILEPATH=/usr/bin/ld
//Path to a program.
CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake
//Flags used by the linker during the creation of modules during
// all build types.
CMAKE_MODULE_LINKER_FLAGS:STRING=
//Flags used by the linker during the creation of modules during
// DEBUG builds.
CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
//Flags used by the linker during the creation of modules during
// MINSIZEREL builds.
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
//Flags used by the linker during the creation of modules during
// RELEASE builds.
CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
//Flags used by the linker during the creation of modules during
// RELWITHDEBINFO builds.
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
//Path to a program.
CMAKE_NM:FILEPATH=/usr/bin/nm
//Path to a program.
CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
//Path to a program.
CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
//Value Computed by CMake
CMAKE_PROJECT_DESCRIPTION:STATIC=
//Value Computed by CMake
CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
//Value Computed by CMake
CMAKE_PROJECT_NAME:STATIC=unswsc
//Path to a program.
CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
//Path to a program.
CMAKE_READELF:FILEPATH=/usr/bin/readelf
//Flags used by the linker during the creation of shared libraries
// during all build types.
CMAKE_SHARED_LINKER_FLAGS:STRING=
//Flags used by the linker during the creation of shared libraries
// during DEBUG builds.
CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
//Flags used by the linker during the creation of shared libraries
// during MINSIZEREL builds.
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
//Flags used by the linker during the creation of shared libraries
// during RELEASE builds.
CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
//Flags used by the linker during the creation of shared libraries
// during RELWITHDEBINFO builds.
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
//If set, runtime paths are not added when installing shared libraries,
// but are added when building.
CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
//If set, runtime paths are not added when using shared libraries.
CMAKE_SKIP_RPATH:BOOL=NO
//Flags used by the linker during the creation of static libraries
// during all build types.
CMAKE_STATIC_LINKER_FLAGS:STRING=
//Flags used by the linker during the creation of static libraries
// during DEBUG builds.
CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
//Flags used by the linker during the creation of static libraries
// during MINSIZEREL builds.
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
//Flags used by the linker during the creation of static libraries
// during RELEASE builds.
CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
//Flags used by the linker during the creation of static libraries
// during RELWITHDEBINFO builds.
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
//Path to a program.
CMAKE_STRIP:FILEPATH=/usr/bin/strip
//Path to a program.
CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND
//No help, variable specified on the command line.
CMAKE_TOOLCHAIN_FILE:UNINITIALIZED=/home/unknownobject/vcpkg/scripts/buildsystems/vcpkg.cmake
//If this value is on, makefiles will be generated without the
// .SILENT directive, and all commands will be echoed to the console
// during the make. This is useful for debugging only. With Visual
// Studio IDE projects all commands are done without /nologo.
CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
//Path to a library.
OPENSSL_CRYPTO_LIBRARY:FILEPATH=/home/unknownobject/vcpkg/installed/x64-linux/lib/libcrypto.a
//Path to a library.
OPENSSL_DL_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libdl.a
//Path to a file.
OPENSSL_INCLUDE_DIR:PATH=/home/unknownobject/vcpkg/installed/x64-linux/include
//Path to a library.
OPENSSL_SSL_LIBRARY:FILEPATH=/home/unknownobject/vcpkg/installed/x64-linux/lib/libssl.a
//Arguments to supply to pkg-config
PKG_CONFIG_ARGN:STRING=
//pkg-config executable
PKG_CONFIG_EXECUTABLE:FILEPATH=/usr/bin/pkg-config
//Automatically copy dependencies into the output directory for
// executables.
VCPKG_APPLOCAL_DEPS:BOOL=ON
//The directory which contains the installed libraries for each
// triplet
VCPKG_INSTALLED_DIR:PATH=/home/unknownobject/vcpkg/installed
//The path to the vcpkg manifest directory.
VCPKG_MANIFEST_DIR:PATH=
//Use manifest mode, as opposed to classic mode.
VCPKG_MANIFEST_MODE:BOOL=OFF
//Appends the vcpkg paths to CMAKE_PREFIX_PATH, CMAKE_LIBRARY_PATH
// and CMAKE_FIND_ROOT_PATH so that vcpkg libraries/packages are
// found after toolchain/system libraries/packages.
VCPKG_PREFER_SYSTEM_LIBS:BOOL=OFF
//Enable the setup of CMAKE_PROGRAM_PATH to vcpkg paths
VCPKG_SETUP_CMAKE_PROGRAM_PATH:BOOL=ON
//Path to a library.
VCPKG_SODIUM_LIBRARY_DEBUG:FILEPATH=/home/unknownobject/vcpkg/installed/x64-linux/debug/lib/libsodium.a
//Path to a library.
VCPKG_SODIUM_LIBRARY_RELEASE:FILEPATH=/home/unknownobject/vcpkg/installed/x64-linux/lib/libsodium.a
//Vcpkg target triplet (ex. x86-windows)
VCPKG_TARGET_TRIPLET:STRING=x64-linux
//Trace calls to find_package()
VCPKG_TRACE_FIND_PACKAGE:BOOL=OFF
//Enables messages from the VCPKG toolchain for debugging purposes.
VCPKG_VERBOSE:BOOL=OFF
//(experimental) Automatically copy dependencies into the install
// target directory for executables. Requires CMake 3.14.
X_VCPKG_APPLOCAL_DEPS_INSTALL:BOOL=OFF
//(experimental) Add USES_TERMINAL to VCPKG_APPLOCAL_DEPS to force
// serialization.
X_VCPKG_APPLOCAL_DEPS_SERIALIZED:BOOL=OFF
//The directory which contains the installed libraries for each
// triplet
_VCPKG_INSTALLED_DIR:PATH=/home/unknownobject/vcpkg/installed
//The directory containing a CMake configuration file for fmt.
fmt_DIR:PATH=/home/unknownobject/vcpkg/installed/x64-linux/share/fmt
//The directory containing a CMake configuration file for jsoncpp.
jsoncpp_DIR:PATH=/home/unknownobject/vcpkg/installed/x64-linux/share/jsoncpp
//Path to a library.
pkgcfg_lib__OPENSSL_crypto:FILEPATH=/home/unknownobject/vcpkg/installed/x64-linux/lib/libcrypto.a
//Path to a library.
pkgcfg_lib__OPENSSL_dl:FILEPATH=/usr/lib/x86_64-linux-gnu/libdl.a
//Path to a library.
pkgcfg_lib__OPENSSL_ssl:FILEPATH=/home/unknownobject/vcpkg/installed/x64-linux/lib/libssl.a
//The directory containing a CMake configuration file for unofficial-sodium.
unofficial-sodium_DIR:PATH=/home/unknownobject/vcpkg/installed/x64-linux/share/unofficial-sodium
//Value Computed by CMake
unswsc_BINARY_DIR:STATIC=/home/unknownobject/UNSWebServerCore/build
//Value Computed by CMake
unswsc_IS_TOP_LEVEL:STATIC=ON
//Dependencies for the target
unswsc_LIB_DEPENDS:STATIC=general;webcc;general;uohash;general;utextcodec;general;fmt::fmt;general;OpenSSL::Crypto;general;unofficial-sodium::sodium;
//Value Computed by CMake
unswsc_SOURCE_DIR:STATIC=/home/unknownobject/UNSWebServerCore
########################
# INTERNAL cache entries
########################
//ADVANCED property for variable: CMAKE_ADDR2LINE
CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_AR
CMAKE_AR-ADVANCED:INTERNAL=1
//This is the directory where this CMakeCache.txt was created
CMAKE_CACHEFILE_DIR:INTERNAL=/home/unknownobject/UNSWebServerCore/build
//Major version of cmake used to create the current loaded cache
CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
//Minor version of cmake used to create the current loaded cache
CMAKE_CACHE_MINOR_VERSION:INTERNAL=28
//Patch version of cmake used to create the current loaded cache
CMAKE_CACHE_PATCH_VERSION:INTERNAL=3
//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
//Path to CMake executable.
CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
//Path to cpack program executable.
CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack
//Path to ctest program executable.
CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest
//ADVANCED property for variable: CMAKE_CXX_COMPILER
CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_DLLTOOL
CMAKE_DLLTOOL-ADVANCED:INTERNAL=1
//Executable file format
CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
//Name of external makefile project generator.
CMAKE_EXTRA_GENERATOR:INTERNAL=
//Name of generator.
CMAKE_GENERATOR:INTERNAL=Unix Makefiles
//Generator instance identifier.
CMAKE_GENERATOR_INSTANCE:INTERNAL=
//Name of generator platform.
CMAKE_GENERATOR_PLATFORM:INTERNAL=
//Name of generator toolset.
CMAKE_GENERATOR_TOOLSET:INTERNAL=
//Test CMAKE_HAVE_LIBC_PTHREAD
CMAKE_HAVE_LIBC_PTHREAD:INTERNAL=1
//Source directory with the top level CMakeLists.txt file for this
// project
CMAKE_HOME_DIRECTORY:INTERNAL=/home/unknownobject/UNSWebServerCore
//Install .so files without execute permission.
CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1
//ADVANCED property for variable: CMAKE_LINKER
CMAKE_LINKER-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_NM
CMAKE_NM-ADVANCED:INTERNAL=1
//number of local generators
CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
//ADVANCED property for variable: CMAKE_OBJCOPY
CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_OBJDUMP
CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
//Platform information initialized
CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
//ADVANCED property for variable: CMAKE_RANLIB
CMAKE_RANLIB-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_READELF
CMAKE_READELF-ADVANCED:INTERNAL=1
//Path to CMake installation.
CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.28
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_SKIP_RPATH
CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_STRIP
CMAKE_STRIP-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_TAPI
CMAKE_TAPI-ADVANCED:INTERNAL=1
//ADVANCED property for variable: CMAKE_TOOLCHAIN_FILE
CMAKE_TOOLCHAIN_FILE-ADVANCED:INTERNAL=1
//uname command
CMAKE_UNAME:INTERNAL=/usr/bin/uname
//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
//Details about finding OpenSSL
FIND_PACKAGE_MESSAGE_DETAILS_OpenSSL:INTERNAL=[/home/unknownobject/vcpkg/installed/x64-linux/lib/libcrypto.a][/home/unknownobject/vcpkg/installed/x64-linux/include][c ][v3.5.1()]
//Details about finding Threads
FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()]
//ADVANCED property for variable: OPENSSL_CRYPTO_LIBRARY
OPENSSL_CRYPTO_LIBRARY-ADVANCED:INTERNAL=1
//ADVANCED property for variable: OPENSSL_INCLUDE_DIR
OPENSSL_INCLUDE_DIR-ADVANCED:INTERNAL=1
//ADVANCED property for variable: OPENSSL_SSL_LIBRARY
OPENSSL_SSL_LIBRARY-ADVANCED:INTERNAL=1
//ADVANCED property for variable: PKG_CONFIG_ARGN
PKG_CONFIG_ARGN-ADVANCED:INTERNAL=1
//ADVANCED property for variable: PKG_CONFIG_EXECUTABLE
PKG_CONFIG_EXECUTABLE-ADVANCED:INTERNAL=1
//Install the dependencies listed in your manifest:
//\n If this is off, you will have to manually install your dependencies.
//\n See https://github.com/microsoft/vcpkg/tree/master/docs/specifications/manifests.md
// for more info.
//\n
VCPKG_MANIFEST_INSTALL:INTERNAL=OFF
//ADVANCED property for variable: VCPKG_VERBOSE
VCPKG_VERBOSE-ADVANCED:INTERNAL=1
//Making sure VCPKG_MANIFEST_MODE doesn't change
Z_VCPKG_CHECK_MANIFEST_MODE:INTERNAL=OFF
//Vcpkg root directory
Z_VCPKG_ROOT_DIR:INTERNAL=/home/unknownobject/vcpkg
//linker supports push/pop state
_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE
_OPENSSL_CFLAGS:INTERNAL=-I/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../include
_OPENSSL_CFLAGS_I:INTERNAL=
_OPENSSL_CFLAGS_OTHER:INTERNAL=
_OPENSSL_FOUND:INTERNAL=1
_OPENSSL_INCLUDEDIR:INTERNAL=/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../include
_OPENSSL_INCLUDE_DIRS:INTERNAL=/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../include
_OPENSSL_LDFLAGS:INTERNAL=-L/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../lib;-lssl;-lcrypto;-ldl;-pthread
_OPENSSL_LDFLAGS_OTHER:INTERNAL=-pthread
_OPENSSL_LIBDIR:INTERNAL=/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../lib
_OPENSSL_LIBRARIES:INTERNAL=ssl;crypto;dl
_OPENSSL_LIBRARY_DIRS:INTERNAL=/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../lib
_OPENSSL_LIBS:INTERNAL=
_OPENSSL_LIBS_L:INTERNAL=
_OPENSSL_LIBS_OTHER:INTERNAL=
_OPENSSL_LIBS_PATHS:INTERNAL=
_OPENSSL_MODULE_NAME:INTERNAL=openssl
_OPENSSL_PREFIX:INTERNAL=/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../..
_OPENSSL_STATIC_CFLAGS:INTERNAL=-I/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../include
_OPENSSL_STATIC_CFLAGS_I:INTERNAL=
_OPENSSL_STATIC_CFLAGS_OTHER:INTERNAL=
_OPENSSL_STATIC_INCLUDE_DIRS:INTERNAL=/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../include
_OPENSSL_STATIC_LDFLAGS:INTERNAL=-L/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../lib;-lssl;-lcrypto;-ldl;-pthread
_OPENSSL_STATIC_LDFLAGS_OTHER:INTERNAL=-pthread
_OPENSSL_STATIC_LIBDIR:INTERNAL=
_OPENSSL_STATIC_LIBRARIES:INTERNAL=ssl;crypto;dl
_OPENSSL_STATIC_LIBRARY_DIRS:INTERNAL=/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../lib
_OPENSSL_STATIC_LIBS:INTERNAL=
_OPENSSL_STATIC_LIBS_L:INTERNAL=
_OPENSSL_STATIC_LIBS_OTHER:INTERNAL=
_OPENSSL_STATIC_LIBS_PATHS:INTERNAL=
_OPENSSL_VERSION:INTERNAL=3.5.1
_OPENSSL_openssl_INCLUDEDIR:INTERNAL=
_OPENSSL_openssl_LIBDIR:INTERNAL=
_OPENSSL_openssl_PREFIX:INTERNAL=
_OPENSSL_openssl_VERSION:INTERNAL=
__pkg_config_arguments__OPENSSL:INTERNAL=QUIET;openssl
__pkg_config_checked__OPENSSL:INTERNAL=1
//ADVANCED property for variable: pkgcfg_lib__OPENSSL_crypto
pkgcfg_lib__OPENSSL_crypto-ADVANCED:INTERNAL=1
//ADVANCED property for variable: pkgcfg_lib__OPENSSL_dl
pkgcfg_lib__OPENSSL_dl-ADVANCED:INTERNAL=1
//ADVANCED property for variable: pkgcfg_lib__OPENSSL_ssl
pkgcfg_lib__OPENSSL_ssl-ADVANCED:INTERNAL=1
prefix_result:INTERNAL=/home/unknownobject/vcpkg/installed/x64-linux/lib/pkgconfig/../../lib
@@ -0,0 +1,85 @@
set(CMAKE_CXX_COMPILER "/usr/bin/c++")
set(CMAKE_CXX_COMPILER_ARG1 "")
set(CMAKE_CXX_COMPILER_ID "GNU")
set(CMAKE_CXX_COMPILER_VERSION "13.3.0")
set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
set(CMAKE_CXX_COMPILER_WRAPPER "")
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17")
set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON")
set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23")
set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23")
set(CMAKE_CXX_PLATFORM_ID "Linux")
set(CMAKE_CXX_SIMULATE_ID "")
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU")
set(CMAKE_CXX_SIMULATE_VERSION "")
set(CMAKE_AR "/usr/bin/ar")
set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-13")
set(CMAKE_RANLIB "/usr/bin/ranlib")
set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-13")
set(CMAKE_LINKER "/usr/bin/ld")
set(CMAKE_MT "")
set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
set(CMAKE_COMPILER_IS_GNUCXX 1)
set(CMAKE_CXX_COMPILER_LOADED 1)
set(CMAKE_CXX_COMPILER_WORKS TRUE)
set(CMAKE_CXX_ABI_COMPILED TRUE)
set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
set(CMAKE_CXX_COMPILER_ID_RUN 1)
set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m)
set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
foreach (lang C OBJC OBJCXX)
if (CMAKE_${lang}_COMPILER_ID_RUN)
foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
endforeach()
endif()
endforeach()
set(CMAKE_CXX_LINKER_PREFERENCE 30)
set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE)
# Save compiler ABI information.
set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
set(CMAKE_CXX_COMPILER_ABI "ELF")
set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN")
set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
if(CMAKE_CXX_SIZEOF_DATA_PTR)
set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
endif()
if(CMAKE_CXX_COMPILER_ABI)
set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
endif()
if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
endif()
set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
endif()
set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/13;/usr/include/x86_64-linux-gnu/c++/13;/usr/include/c++/13/backward;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include")
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc")
set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib")
set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
Binary file not shown.
+15
View File
@@ -0,0 +1,15 @@
set(CMAKE_HOST_SYSTEM "Linux-6.8.0-63-generic")
set(CMAKE_HOST_SYSTEM_NAME "Linux")
set(CMAKE_HOST_SYSTEM_VERSION "6.8.0-63-generic")
set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
include("/home/unknownobject/vcpkg/scripts/buildsystems/vcpkg.cmake")
set(CMAKE_SYSTEM "Linux-6.8.0-63-generic")
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_VERSION "6.8.0-63-generic")
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
set(CMAKE_CROSSCOMPILING "FALSE")
set(CMAKE_SYSTEM_LOADED 1)
@@ -0,0 +1,869 @@
/* This source file must have a .cpp extension so that all C++ compilers
recognize the extension without flags. Borland does not know .cxx for
example. */
#ifndef __cplusplus
# error "A C compiler has been selected for C++."
#endif
#if !defined(__has_include)
/* If the compiler does not have __has_include, pretend the answer is
always no. */
# define __has_include(x) 0
#endif
/* Version number components: V=Version, R=Revision, P=Patch
Version date components: YYYY=Year, MM=Month, DD=Day */
#if defined(__COMO__)
# define COMPILER_ID "Comeau"
/* __COMO_VERSION__ = VRR */
# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
#elif defined(__INTEL_COMPILER) || defined(__ICC)
# define COMPILER_ID "Intel"
# if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
# endif
# if defined(__GNUC__)
# define SIMULATE_ID "GNU"
# endif
/* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
except that a few beta releases use the old format with V=2021. */
# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
# if defined(__INTEL_COMPILER_UPDATE)
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
# else
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
# endif
# else
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
/* The third version component from --version is an update index,
but no macro is provided for it. */
# define COMPILER_VERSION_PATCH DEC(0)
# endif
# if defined(__INTEL_COMPILER_BUILD_DATE)
/* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
# endif
# if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
# endif
# if defined(__GNUC__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
# elif defined(__GNUG__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
# endif
# if defined(__GNUC_MINOR__)
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
# endif
# if defined(__GNUC_PATCHLEVEL__)
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
# endif
#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
# define COMPILER_ID "IntelLLVM"
#if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
#endif
#if defined(__GNUC__)
# define SIMULATE_ID "GNU"
#endif
/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
* later. Look for 6 digit vs. 8 digit version number to decide encoding.
* VVVV is no smaller than the current year when a version is released.
*/
#if __INTEL_LLVM_COMPILER < 1000000L
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
#else
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
#endif
#if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
#endif
#if defined(__GNUC__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
#elif defined(__GNUG__)
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
#endif
#if defined(__GNUC_MINOR__)
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
#endif
#if defined(__GNUC_PATCHLEVEL__)
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
#endif
#elif defined(__PATHCC__)
# define COMPILER_ID "PathScale"
# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
# if defined(__PATHCC_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
# endif
#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
# define COMPILER_ID "Embarcadero"
# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
#elif defined(__BORLANDC__)
# define COMPILER_ID "Borland"
/* __BORLANDC__ = 0xVRR */
# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
# define COMPILER_ID "Watcom"
/* __WATCOMC__ = VVRR */
# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
# if (__WATCOMC__ % 10) > 0
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
# endif
#elif defined(__WATCOMC__)
# define COMPILER_ID "OpenWatcom"
/* __WATCOMC__ = VVRP + 1100 */
# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
# if (__WATCOMC__ % 10) > 0
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
# endif
#elif defined(__SUNPRO_CC)
# define COMPILER_ID "SunPro"
# if __SUNPRO_CC >= 0x5100
/* __SUNPRO_CC = 0xVRRP */
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
# else
/* __SUNPRO_CC = 0xVRP */
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
# endif
#elif defined(__HP_aCC)
# define COMPILER_ID "HP"
/* __HP_aCC = VVRRPP */
# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
#elif defined(__DECCXX)
# define COMPILER_ID "Compaq"
/* __DECCXX_VER = VVRRTPPPP */
# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
# define COMPILER_ID "zOS"
/* __IBMCPP__ = VRP */
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
#elif defined(__open_xl__) && defined(__clang__)
# define COMPILER_ID "IBMClang"
# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
# define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
#elif defined(__ibmxl__) && defined(__clang__)
# define COMPILER_ID "XLClang"
# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
# define COMPILER_ID "XL"
/* __IBMCPP__ = VRP */
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
# define COMPILER_ID "VisualAge"
/* __IBMCPP__ = VRP */
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
#elif defined(__NVCOMPILER)
# define COMPILER_ID "NVHPC"
# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
# if defined(__NVCOMPILER_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
# endif
#elif defined(__PGI)
# define COMPILER_ID "PGI"
# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
# if defined(__PGIC_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
# endif
#elif defined(__clang__) && defined(__cray__)
# define COMPILER_ID "CrayClang"
# define COMPILER_VERSION_MAJOR DEC(__cray_major__)
# define COMPILER_VERSION_MINOR DEC(__cray_minor__)
# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
# define COMPILER_VERSION_INTERNAL_STR __clang_version__
#elif defined(_CRAYC)
# define COMPILER_ID "Cray"
# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
#elif defined(__TI_COMPILER_VERSION__)
# define COMPILER_ID "TI"
/* __TI_COMPILER_VERSION__ = VVVRRRPPP */
# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
#elif defined(__CLANG_FUJITSU)
# define COMPILER_ID "FujitsuClang"
# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
# define COMPILER_VERSION_INTERNAL_STR __clang_version__
#elif defined(__FUJITSU)
# define COMPILER_ID "Fujitsu"
# if defined(__FCC_version__)
# define COMPILER_VERSION __FCC_version__
# elif defined(__FCC_major__)
# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
# endif
# if defined(__fcc_version)
# define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
# elif defined(__FCC_VERSION)
# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
# endif
#elif defined(__ghs__)
# define COMPILER_ID "GHS"
/* __GHS_VERSION_NUMBER = VVVVRP */
# ifdef __GHS_VERSION_NUMBER
# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
# endif
#elif defined(__TASKING__)
# define COMPILER_ID "Tasking"
# define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
# define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
#elif defined(__ORANGEC__)
# define COMPILER_ID "OrangeC"
# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
#elif defined(__SCO_VERSION__)
# define COMPILER_ID "SCO"
#elif defined(__ARMCC_VERSION) && !defined(__clang__)
# define COMPILER_ID "ARMCC"
#if __ARMCC_VERSION >= 1000000
/* __ARMCC_VERSION = VRRPPPP */
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
#else
/* __ARMCC_VERSION = VRPPPP */
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
#endif
#elif defined(__clang__) && defined(__apple_build_version__)
# define COMPILER_ID "AppleClang"
# if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
# endif
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
# if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
# endif
# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
# define COMPILER_ID "ARMClang"
# define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
# define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
# define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100)
# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
#elif defined(__clang__)
# define COMPILER_ID "Clang"
# if defined(_MSC_VER)
# define SIMULATE_ID "MSVC"
# endif
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
# if defined(_MSC_VER)
/* _MSC_VER = VVRR */
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
# endif
#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
# define COMPILER_ID "LCC"
# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
# if defined(__LCC_MINOR__)
# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
# endif
# if defined(__GNUC__) && defined(__GNUC_MINOR__)
# define SIMULATE_ID "GNU"
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
# if defined(__GNUC_PATCHLEVEL__)
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
# endif
# endif
#elif defined(__GNUC__) || defined(__GNUG__)
# define COMPILER_ID "GNU"
# if defined(__GNUC__)
# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
# else
# define COMPILER_VERSION_MAJOR DEC(__GNUG__)
# endif
# if defined(__GNUC_MINOR__)
# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
# endif
# if defined(__GNUC_PATCHLEVEL__)
# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
# endif
#elif defined(_MSC_VER)
# define COMPILER_ID "MSVC"
/* _MSC_VER = VVRR */
# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
# if defined(_MSC_FULL_VER)
# if _MSC_VER >= 1400
/* _MSC_FULL_VER = VVRRPPPPP */
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
# else
/* _MSC_FULL_VER = VVRRPPPP */
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
# endif
# endif
# if defined(_MSC_BUILD)
# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
# endif
#elif defined(_ADI_COMPILER)
# define COMPILER_ID "ADSP"
#if defined(__VERSIONNUM__)
/* __VERSIONNUM__ = 0xVVRRPPTT */
# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
#endif
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
# define COMPILER_ID "IAR"
# if defined(__VER__) && defined(__ICCARM__)
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
# endif
/* These compilers are either not known or too old to define an
identification macro. Try to identify the platform and guess that
it is the native compiler. */
#elif defined(__hpux) || defined(__hpua)
# define COMPILER_ID "HP"
#else /* unknown compiler */
# define COMPILER_ID ""
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
#ifdef SIMULATE_ID
char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
#endif
#ifdef __QNXNTO__
char const* qnxnto = "INFO" ":" "qnxnto[]";
#endif
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
#endif
#define STRINGIFY_HELPER(X) #X
#define STRINGIFY(X) STRINGIFY_HELPER(X)
/* Identify known platforms by name. */
#if defined(__linux) || defined(__linux__) || defined(linux)
# define PLATFORM_ID "Linux"
#elif defined(__MSYS__)
# define PLATFORM_ID "MSYS"
#elif defined(__CYGWIN__)
# define PLATFORM_ID "Cygwin"
#elif defined(__MINGW32__)
# define PLATFORM_ID "MinGW"
#elif defined(__APPLE__)
# define PLATFORM_ID "Darwin"
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
# define PLATFORM_ID "Windows"
#elif defined(__FreeBSD__) || defined(__FreeBSD)
# define PLATFORM_ID "FreeBSD"
#elif defined(__NetBSD__) || defined(__NetBSD)
# define PLATFORM_ID "NetBSD"
#elif defined(__OpenBSD__) || defined(__OPENBSD)
# define PLATFORM_ID "OpenBSD"
#elif defined(__sun) || defined(sun)
# define PLATFORM_ID "SunOS"
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
# define PLATFORM_ID "AIX"
#elif defined(__hpux) || defined(__hpux__)
# define PLATFORM_ID "HP-UX"
#elif defined(__HAIKU__)
# define PLATFORM_ID "Haiku"
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
# define PLATFORM_ID "BeOS"
#elif defined(__QNX__) || defined(__QNXNTO__)
# define PLATFORM_ID "QNX"
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
# define PLATFORM_ID "Tru64"
#elif defined(__riscos) || defined(__riscos__)
# define PLATFORM_ID "RISCos"
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
# define PLATFORM_ID "SINIX"
#elif defined(__UNIX_SV__)
# define PLATFORM_ID "UNIX_SV"
#elif defined(__bsdos__)
# define PLATFORM_ID "BSDOS"
#elif defined(_MPRAS) || defined(MPRAS)
# define PLATFORM_ID "MP-RAS"
#elif defined(__osf) || defined(__osf__)
# define PLATFORM_ID "OSF1"
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
# define PLATFORM_ID "SCO_SV"
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
# define PLATFORM_ID "ULTRIX"
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
# define PLATFORM_ID "Xenix"
#elif defined(__WATCOMC__)
# if defined(__LINUX__)
# define PLATFORM_ID "Linux"
# elif defined(__DOS__)
# define PLATFORM_ID "DOS"
# elif defined(__OS2__)
# define PLATFORM_ID "OS2"
# elif defined(__WINDOWS__)
# define PLATFORM_ID "Windows3x"
# elif defined(__VXWORKS__)
# define PLATFORM_ID "VxWorks"
# else /* unknown platform */
# define PLATFORM_ID
# endif
#elif defined(__INTEGRITY)
# if defined(INT_178B)
# define PLATFORM_ID "Integrity178"
# else /* regular Integrity */
# define PLATFORM_ID "Integrity"
# endif
# elif defined(_ADI_COMPILER)
# define PLATFORM_ID "ADSP"
#else /* unknown platform */
# define PLATFORM_ID
#endif
/* For windows compilers MSVC and Intel we can determine
the architecture of the compiler being used. This is because
the compilers do not have flags that can change the architecture,
but rather depend on which compiler is being used
*/
#if defined(_WIN32) && defined(_MSC_VER)
# if defined(_M_IA64)
# define ARCHITECTURE_ID "IA64"
# elif defined(_M_ARM64EC)
# define ARCHITECTURE_ID "ARM64EC"
# elif defined(_M_X64) || defined(_M_AMD64)
# define ARCHITECTURE_ID "x64"
# elif defined(_M_IX86)
# define ARCHITECTURE_ID "X86"
# elif defined(_M_ARM64)
# define ARCHITECTURE_ID "ARM64"
# elif defined(_M_ARM)
# if _M_ARM == 4
# define ARCHITECTURE_ID "ARMV4I"
# elif _M_ARM == 5
# define ARCHITECTURE_ID "ARMV5I"
# else
# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
# endif
# elif defined(_M_MIPS)
# define ARCHITECTURE_ID "MIPS"
# elif defined(_M_SH)
# define ARCHITECTURE_ID "SHx"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__WATCOMC__)
# if defined(_M_I86)
# define ARCHITECTURE_ID "I86"
# elif defined(_M_IX86)
# define ARCHITECTURE_ID "X86"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
# if defined(__ICCARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__ICCRX__)
# define ARCHITECTURE_ID "RX"
# elif defined(__ICCRH850__)
# define ARCHITECTURE_ID "RH850"
# elif defined(__ICCRL78__)
# define ARCHITECTURE_ID "RL78"
# elif defined(__ICCRISCV__)
# define ARCHITECTURE_ID "RISCV"
# elif defined(__ICCAVR__)
# define ARCHITECTURE_ID "AVR"
# elif defined(__ICC430__)
# define ARCHITECTURE_ID "MSP430"
# elif defined(__ICCV850__)
# define ARCHITECTURE_ID "V850"
# elif defined(__ICC8051__)
# define ARCHITECTURE_ID "8051"
# elif defined(__ICCSTM8__)
# define ARCHITECTURE_ID "STM8"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__ghs__)
# if defined(__PPC64__)
# define ARCHITECTURE_ID "PPC64"
# elif defined(__ppc__)
# define ARCHITECTURE_ID "PPC"
# elif defined(__ARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__x86_64__)
# define ARCHITECTURE_ID "x64"
# elif defined(__i386__)
# define ARCHITECTURE_ID "X86"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
#elif defined(__TI_COMPILER_VERSION__)
# if defined(__TI_ARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__MSP430__)
# define ARCHITECTURE_ID "MSP430"
# elif defined(__TMS320C28XX__)
# define ARCHITECTURE_ID "TMS320C28x"
# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
# define ARCHITECTURE_ID "TMS320C6x"
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
# elif defined(__ADSPSHARC__)
# define ARCHITECTURE_ID "SHARC"
# elif defined(__ADSPBLACKFIN__)
# define ARCHITECTURE_ID "Blackfin"
#elif defined(__TASKING__)
# if defined(__CTC__) || defined(__CPTC__)
# define ARCHITECTURE_ID "TriCore"
# elif defined(__CMCS__)
# define ARCHITECTURE_ID "MCS"
# elif defined(__CARM__)
# define ARCHITECTURE_ID "ARM"
# elif defined(__CARC__)
# define ARCHITECTURE_ID "ARC"
# elif defined(__C51__)
# define ARCHITECTURE_ID "8051"
# elif defined(__CPCP__)
# define ARCHITECTURE_ID "PCP"
# else
# define ARCHITECTURE_ID ""
# endif
#else
# define ARCHITECTURE_ID
#endif
/* Convert integer to decimal digit literals. */
#define DEC(n) \
('0' + (((n) / 10000000)%10)), \
('0' + (((n) / 1000000)%10)), \
('0' + (((n) / 100000)%10)), \
('0' + (((n) / 10000)%10)), \
('0' + (((n) / 1000)%10)), \
('0' + (((n) / 100)%10)), \
('0' + (((n) / 10)%10)), \
('0' + ((n) % 10))
/* Convert integer to hex digit literals. */
#define HEX(n) \
('0' + ((n)>>28 & 0xF)), \
('0' + ((n)>>24 & 0xF)), \
('0' + ((n)>>20 & 0xF)), \
('0' + ((n)>>16 & 0xF)), \
('0' + ((n)>>12 & 0xF)), \
('0' + ((n)>>8 & 0xF)), \
('0' + ((n)>>4 & 0xF)), \
('0' + ((n) & 0xF))
/* Construct a string literal encoding the version number. */
#ifdef COMPILER_VERSION
char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
/* Construct a string literal encoding the version number components. */
#elif defined(COMPILER_VERSION_MAJOR)
char const info_version[] = {
'I', 'N', 'F', 'O', ':',
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
COMPILER_VERSION_MAJOR,
# ifdef COMPILER_VERSION_MINOR
'.', COMPILER_VERSION_MINOR,
# ifdef COMPILER_VERSION_PATCH
'.', COMPILER_VERSION_PATCH,
# ifdef COMPILER_VERSION_TWEAK
'.', COMPILER_VERSION_TWEAK,
# endif
# endif
# endif
']','\0'};
#endif
/* Construct a string literal encoding the internal version number. */
#ifdef COMPILER_VERSION_INTERNAL
char const info_version_internal[] = {
'I', 'N', 'F', 'O', ':',
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
'i','n','t','e','r','n','a','l','[',
COMPILER_VERSION_INTERNAL,']','\0'};
#elif defined(COMPILER_VERSION_INTERNAL_STR)
char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
#endif
/* Construct a string literal encoding the version number components. */
#ifdef SIMULATE_VERSION_MAJOR
char const info_simulate_version[] = {
'I', 'N', 'F', 'O', ':',
's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
SIMULATE_VERSION_MAJOR,
# ifdef SIMULATE_VERSION_MINOR
'.', SIMULATE_VERSION_MINOR,
# ifdef SIMULATE_VERSION_PATCH
'.', SIMULATE_VERSION_PATCH,
# ifdef SIMULATE_VERSION_TWEAK
'.', SIMULATE_VERSION_TWEAK,
# endif
# endif
# endif
']','\0'};
#endif
/* Construct the string literal in pieces to prevent the source from
getting matched. Store it in a pointer rather than an array
because some compilers will just produce instructions to fill the
array rather than assigning a pointer to a static array. */
char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
# if defined(__INTEL_CXX11_MODE__)
# if defined(__cpp_aggregate_nsdmi)
# define CXX_STD 201402L
# else
# define CXX_STD 201103L
# endif
# else
# define CXX_STD 199711L
# endif
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
# define CXX_STD _MSVC_LANG
#else
# define CXX_STD __cplusplus
#endif
const char* info_language_standard_default = "INFO" ":" "standard_default["
#if CXX_STD > 202002L
"23"
#elif CXX_STD > 201703L
"20"
#elif CXX_STD >= 201703L
"17"
#elif CXX_STD >= 201402L
"14"
#elif CXX_STD >= 201103L
"11"
#else
"98"
#endif
"]";
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
defined(__TI_COMPILER_VERSION__)) && \
!defined(__STRICT_ANSI__)
"ON"
#else
"OFF"
#endif
"]";
/*--------------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
int require = 0;
require += info_compiler[argc];
require += info_platform[argc];
require += info_arch[argc];
#ifdef COMPILER_VERSION_MAJOR
require += info_version[argc];
#endif
#ifdef COMPILER_VERSION_INTERNAL
require += info_version_internal[argc];
#endif
#ifdef SIMULATE_ID
require += info_simulate[argc];
#endif
#ifdef SIMULATE_VERSION_MAJOR
require += info_simulate_version[argc];
#endif
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
require += info_cray[argc];
#endif
require += info_language_standard_default[argc];
require += info_language_extensions_default[argc];
(void)argv;
return require;
}
Binary file not shown.
+327
View File
@@ -0,0 +1,327 @@
---
events:
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake:233 (message)"
- "CMakeLists.txt:3 (project)"
message: |
The system is: Linux - 6.8.0-63-generic - x86_64
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:17 (message)"
- "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)"
- "/usr/share/cmake-3.28/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)"
- "CMakeLists.txt:3 (project)"
message: |
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
Compiler: /usr/bin/c++
Build flags:
Id flags:
The output was:
0
Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out"
The CXX compiler identification is GNU, found in:
/home/unknownobject/UNSWebServerCore/build/CMakeFiles/3.28.3/CompilerIdCXX/a.out
-
kind: "try_compile-v1"
backtrace:
- "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)"
- "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
- "CMakeLists.txt:3 (project)"
checks:
- "Detecting CXX compiler ABI info"
directories:
source: "/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-SCXMAy"
binary: "/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-SCXMAy"
cmakeVariables:
CMAKE_CXX_FLAGS: ""
CMAKE_CXX_FLAGS_DEBUG: "-g"
CMAKE_EXE_LINKER_FLAGS: ""
VCPKG_INSTALLED_DIR: "/home/unknownobject/vcpkg/installed"
VCPKG_PREFER_SYSTEM_LIBS: "OFF"
VCPKG_TARGET_TRIPLET: "x64-linux"
Z_VCPKG_ROOT_DIR: "/home/unknownobject/vcpkg"
buildResult:
variable: "CMAKE_CXX_ABI_COMPILED"
cached: true
stdout: |
Change Dir: '/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-SCXMAy'
Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_db336/fast
/usr/bin/gmake -f CMakeFiles/cmTC_db336.dir/build.make CMakeFiles/cmTC_db336.dir/build
gmake[1]: Entering directory '/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-SCXMAy'
Building CXX object CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o
/usr/bin/c++ -v -o CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp
Using built-in specs.
COLLECT_GCC=/usr/bin/c++
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04.1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1)
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_db336.dir/'
/usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_db336.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cclk7yn6.s
GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04.1) version 13.3.0 (x86_64-linux-gnu)
compiled by GNU C version 13.3.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/13"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/13
/usr/include/x86_64-linux-gnu/c++/13
/usr/include/c++/13/backward
/usr/lib/gcc/x86_64-linux-gnu/13/include
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
Compiler executable checksum: 7896445e4990772fdae9dc0659a99266
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_db336.dir/'
as -v --64 -o CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o /tmp/cclk7yn6.s
GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42
COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.'
Linking CXX executable cmTC_db336
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_db336.dir/link.txt --verbose=1
/usr/bin/c++ -v CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_db336
Using built-in specs.
COLLECT_GCC=/usr/bin/c++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04.1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1)
COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_db336' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_db336.'
/usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccY9V4vs.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_db336 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o
COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_db336' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_db336.'
gmake[1]: Leaving directory '/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-SCXMAy'
exitCode: 0
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:127 (message)"
- "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
- "CMakeLists.txt:3 (project)"
message: |
Parsed CXX implicit include dir info: rv=done
found start of include info
found start of implicit include info
add: [/usr/include/c++/13]
add: [/usr/include/x86_64-linux-gnu/c++/13]
add: [/usr/include/c++/13/backward]
add: [/usr/lib/gcc/x86_64-linux-gnu/13/include]
add: [/usr/local/include]
add: [/usr/include/x86_64-linux-gnu]
add: [/usr/include]
end of search list found
collapse include dir [/usr/include/c++/13] ==> [/usr/include/c++/13]
collapse include dir [/usr/include/x86_64-linux-gnu/c++/13] ==> [/usr/include/x86_64-linux-gnu/c++/13]
collapse include dir [/usr/include/c++/13/backward] ==> [/usr/include/c++/13/backward]
collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/13/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/13/include]
collapse include dir [/usr/local/include] ==> [/usr/local/include]
collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu]
collapse include dir [/usr/include] ==> [/usr/include]
implicit include dirs: [/usr/include/c++/13;/usr/include/x86_64-linux-gnu/c++/13;/usr/include/c++/13/backward;/usr/lib/gcc/x86_64-linux-gnu/13/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include]
-
kind: "message-v1"
backtrace:
- "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:159 (message)"
- "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
- "CMakeLists.txt:3 (project)"
message: |
Parsed CXX implicit link information:
link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)]
ignore line: [Change Dir: '/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-SCXMAy']
ignore line: []
ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_db336/fast]
ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_db336.dir/build.make CMakeFiles/cmTC_db336.dir/build]
ignore line: [gmake[1]: Entering directory '/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-SCXMAy']
ignore line: [Building CXX object CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o]
ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp]
ignore line: [Using built-in specs.]
ignore line: [COLLECT_GCC=/usr/bin/c++]
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa]
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
ignore line: [Target: x86_64-linux-gnu]
ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04.1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2]
ignore line: [Thread model: posix]
ignore line: [Supported LTO compression algorithms: zlib zstd]
ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1) ]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_db336.dir/']
ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_db336.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cclk7yn6.s]
ignore line: [GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04.1) version 13.3.0 (x86_64-linux-gnu)]
ignore line: [ compiled by GNU C version 13.3.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP]
ignore line: []
ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/13"]
ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"]
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed/x86_64-linux-gnu"]
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/include-fixed"]
ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"]
ignore line: [#include "..." search starts here:]
ignore line: [#include <...> search starts here:]
ignore line: [ /usr/include/c++/13]
ignore line: [ /usr/include/x86_64-linux-gnu/c++/13]
ignore line: [ /usr/include/c++/13/backward]
ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/13/include]
ignore line: [ /usr/local/include]
ignore line: [ /usr/include/x86_64-linux-gnu]
ignore line: [ /usr/include]
ignore line: [End of search list.]
ignore line: [Compiler executable checksum: 7896445e4990772fdae9dc0659a99266]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_db336.dir/']
ignore line: [ as -v --64 -o CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o /tmp/cclk7yn6.s]
ignore line: [GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42]
ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/]
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.']
ignore line: [Linking CXX executable cmTC_db336]
ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_db336.dir/link.txt --verbose=1]
ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_db336 ]
ignore line: [Using built-in specs.]
ignore line: [COLLECT_GCC=/usr/bin/c++]
ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper]
ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa]
ignore line: [OFFLOAD_TARGET_DEFAULT=1]
ignore line: [Target: x86_64-linux-gnu]
ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04.1' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c ada c++ go d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-13-EldibY/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2]
ignore line: [Thread model: posix]
ignore line: [Supported LTO compression algorithms: zlib zstd]
ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1) ]
ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/]
ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/]
ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_db336' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_db336.']
link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccY9V4vs.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_db336 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o]
arg [/usr/libexec/gcc/x86_64-linux-gnu/13/collect2] ==> ignore
arg [-plugin] ==> ignore
arg [/usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so] ==> ignore
arg [-plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] ==> ignore
arg [-plugin-opt=-fresolution=/tmp/ccY9V4vs.res] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
arg [-plugin-opt=-pass-through=-lc] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
arg [--build-id] ==> ignore
arg [--eh-frame-hdr] ==> ignore
arg [-m] ==> ignore
arg [elf_x86_64] ==> ignore
arg [--hash-style=gnu] ==> ignore
arg [--as-needed] ==> ignore
arg [-dynamic-linker] ==> ignore
arg [/lib64/ld-linux-x86-64.so.2] ==> ignore
arg [-pie] ==> ignore
arg [-znow] ==> ignore
arg [-zrelro] ==> ignore
arg [-o] ==> ignore
arg [cmTC_db336] ==> ignore
arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o]
arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o]
arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/13] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib]
arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu]
arg [-L/lib/../lib] ==> dir [/lib/../lib]
arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu]
arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib]
arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..]
arg [CMakeFiles/cmTC_db336.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore
arg [-lstdc++] ==> lib [stdc++]
arg [-lm] ==> lib [m]
arg [-lgcc_s] ==> lib [gcc_s]
arg [-lgcc] ==> lib [gcc]
arg [-lc] ==> lib [c]
arg [-lgcc_s] ==> lib [gcc_s]
arg [-lgcc] ==> lib [gcc]
arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o]
arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o]
collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o]
collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o]
collapse obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o]
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13] ==> [/usr/lib/gcc/x86_64-linux-gnu/13]
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> [/usr/lib]
collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu]
collapse library dir [/lib/../lib] ==> [/lib]
collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu]
collapse library dir [/usr/lib/../lib] ==> [/usr/lib]
collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> [/usr/lib]
implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc]
implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o]
implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/13;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib]
implicit fwks: []
...
---
events:
-
kind: "try_compile-v1"
backtrace:
- "/usr/share/cmake-3.28/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)"
- "/usr/share/cmake-3.28/Modules/CheckCXXSourceCompiles.cmake:52 (cmake_check_source_compiles)"
- "/usr/share/cmake-3.28/Modules/FindThreads.cmake:99 (CHECK_CXX_SOURCE_COMPILES)"
- "/usr/share/cmake-3.28/Modules/FindThreads.cmake:163 (_threads_check_libc)"
- "/home/unknownobject/vcpkg/scripts/buildsystems/vcpkg.cmake:896 (_find_package)"
- "/usr/share/cmake-3.28/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)"
- "/home/unknownobject/vcpkg/installed/x64-linux/share/unofficial-sodium/unofficial-sodiumConfig.cmake:4 (find_dependency)"
- "/home/unknownobject/vcpkg/scripts/buildsystems/vcpkg.cmake:896 (_find_package)"
- "CMakeLists.txt:18 (find_package)"
checks:
- "Performing Test CMAKE_HAVE_LIBC_PTHREAD"
directories:
source: "/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-yLkSdH"
binary: "/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-yLkSdH"
cmakeVariables:
CMAKE_CXX_FLAGS: ""
CMAKE_CXX_FLAGS_DEBUG: "-g"
CMAKE_EXE_LINKER_FLAGS: ""
CMAKE_POSITION_INDEPENDENT_CODE: "ON"
VCPKG_INSTALLED_DIR: "/home/unknownobject/vcpkg/installed"
VCPKG_PREFER_SYSTEM_LIBS: "OFF"
VCPKG_TARGET_TRIPLET: "x64-linux"
Z_VCPKG_ROOT_DIR: "/home/unknownobject/vcpkg"
buildResult:
variable: "CMAKE_HAVE_LIBC_PTHREAD"
cached: true
stdout: |
Change Dir: '/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-yLkSdH'
Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_62acd/fast
/usr/bin/gmake -f CMakeFiles/cmTC_62acd.dir/build.make CMakeFiles/cmTC_62acd.dir/build
gmake[1]: Entering directory '/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-yLkSdH'
Building CXX object CMakeFiles/cmTC_62acd.dir/src.cxx.o
/usr/bin/c++ -DCMAKE_HAVE_LIBC_PTHREAD -std=gnu++20 -fPIE -o CMakeFiles/cmTC_62acd.dir/src.cxx.o -c /home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-yLkSdH/src.cxx
Linking CXX executable cmTC_62acd
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_62acd.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/cmTC_62acd.dir/src.cxx.o -o cmTC_62acd
gmake[1]: Leaving directory '/home/unknownobject/UNSWebServerCore/build/CMakeFiles/CMakeScratch/TryCompile-yLkSdH'
exitCode: 0
...
@@ -0,0 +1,16 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Relative path conversion top directories.
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/unknownobject/UNSWebServerCore")
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/unknownobject/UNSWebServerCore/build")
# Force unix paths in dependencies.
set(CMAKE_FORCE_UNIX_PATHS 1)
# The C and CXX include file regular expressions for this directory.
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
+2
View File
@@ -0,0 +1,2 @@
# Hashes of file build rules.
f70a2a4f9dbfbdd2fa7eee1897439a6d CMakeFiles/rebuild
+71
View File
@@ -0,0 +1,71 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# The generator used is:
set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")
# The top level Makefile was generated from the following files:
set(CMAKE_MAKEFILE_DEPENDS
"CMakeCache.txt"
"/home/unknownobject/UNSWebServerCore/CMakeLists.txt"
"CMakeFiles/3.28.3/CMakeCXXCompiler.cmake"
"CMakeFiles/3.28.3/CMakeSystem.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/fmt/fmt-config-version.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/fmt/fmt-config.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/fmt/fmt-targets-debug.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/fmt/fmt-targets-release.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/fmt/fmt-targets.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/jsoncpp/jsoncpp-namespaced-targets.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/jsoncpp/jsoncpp-targets-debug.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/jsoncpp/jsoncpp-targets-release.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/jsoncpp/jsoncpp-targets.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/jsoncpp/jsoncppConfig.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/jsoncpp/jsoncppConfigVersion.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/openssl/vcpkg-cmake-wrapper.cmake"
"/home/unknownobject/vcpkg/installed/x64-linux/share/unofficial-sodium/unofficial-sodiumConfig.cmake"
"/home/unknownobject/vcpkg/scripts/buildsystems/vcpkg.cmake"
"/usr/share/cmake-3.28/Modules/CMakeCXXInformation.cmake"
"/usr/share/cmake-3.28/Modules/CMakeCommonLanguageInclude.cmake"
"/usr/share/cmake-3.28/Modules/CMakeDependentOption.cmake"
"/usr/share/cmake-3.28/Modules/CMakeFindDependencyMacro.cmake"
"/usr/share/cmake-3.28/Modules/CMakeGenericSystem.cmake"
"/usr/share/cmake-3.28/Modules/CMakeInitializeConfigs.cmake"
"/usr/share/cmake-3.28/Modules/CMakeLanguageInformation.cmake"
"/usr/share/cmake-3.28/Modules/CMakeSystemSpecificInformation.cmake"
"/usr/share/cmake-3.28/Modules/CMakeSystemSpecificInitialize.cmake"
"/usr/share/cmake-3.28/Modules/CheckCXXSourceCompiles.cmake"
"/usr/share/cmake-3.28/Modules/CheckIncludeFileCXX.cmake"
"/usr/share/cmake-3.28/Modules/CheckLibraryExists.cmake"
"/usr/share/cmake-3.28/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
"/usr/share/cmake-3.28/Modules/Compiler/GNU-CXX.cmake"
"/usr/share/cmake-3.28/Modules/Compiler/GNU.cmake"
"/usr/share/cmake-3.28/Modules/FindOpenSSL.cmake"
"/usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake"
"/usr/share/cmake-3.28/Modules/FindPackageMessage.cmake"
"/usr/share/cmake-3.28/Modules/FindPkgConfig.cmake"
"/usr/share/cmake-3.28/Modules/FindThreads.cmake"
"/usr/share/cmake-3.28/Modules/Internal/CheckSourceCompiles.cmake"
"/usr/share/cmake-3.28/Modules/Platform/Linux-GNU-CXX.cmake"
"/usr/share/cmake-3.28/Modules/Platform/Linux-GNU.cmake"
"/usr/share/cmake-3.28/Modules/Platform/Linux-Initialize.cmake"
"/usr/share/cmake-3.28/Modules/Platform/Linux.cmake"
"/usr/share/cmake-3.28/Modules/Platform/UnixPaths.cmake"
)
# The corresponding makefile is:
set(CMAKE_MAKEFILE_OUTPUTS
"Makefile"
"CMakeFiles/cmake.check_cache"
)
# Byproducts of CMake generate step:
set(CMAKE_MAKEFILE_PRODUCTS
"CMakeFiles/CMakeDirectoryInformation.cmake"
)
# Dependency information for all targets:
set(CMAKE_DEPEND_INFO_FILES
"CMakeFiles/unswsc.dir/DependInfo.cmake"
"CMakeFiles/logger_test.dir/DependInfo.cmake"
"CMakeFiles/rebuild.dir/DependInfo.cmake"
)
+167
View File
@@ -0,0 +1,167 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Default target executed when no arguments are given to make.
default_target: all
.PHONY : default_target
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/unknownobject/UNSWebServerCore
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/unknownobject/UNSWebServerCore/build
#=============================================================================
# Directory level rules for the build root directory
# The main recursive "all" target.
all: CMakeFiles/unswsc.dir/all
all: CMakeFiles/logger_test.dir/all
.PHONY : all
# The main recursive "preinstall" target.
preinstall:
.PHONY : preinstall
# The main recursive "clean" target.
clean: CMakeFiles/unswsc.dir/clean
clean: CMakeFiles/logger_test.dir/clean
clean: CMakeFiles/rebuild.dir/clean
.PHONY : clean
#=============================================================================
# Target rules for target CMakeFiles/unswsc.dir
# All Build rule for target.
CMakeFiles/unswsc.dir/all:
$(MAKE) $(MAKESILENT) -f CMakeFiles/unswsc.dir/build.make CMakeFiles/unswsc.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/unswsc.dir/build.make CMakeFiles/unswsc.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/unknownobject/UNSWebServerCore/build/CMakeFiles --progress-num=6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 "Built target unswsc"
.PHONY : CMakeFiles/unswsc.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/unswsc.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/unknownobject/UNSWebServerCore/build/CMakeFiles 20
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/unswsc.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/unknownobject/UNSWebServerCore/build/CMakeFiles 0
.PHONY : CMakeFiles/unswsc.dir/rule
# Convenience name for target.
unswsc: CMakeFiles/unswsc.dir/rule
.PHONY : unswsc
# clean rule for target.
CMakeFiles/unswsc.dir/clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/unswsc.dir/build.make CMakeFiles/unswsc.dir/clean
.PHONY : CMakeFiles/unswsc.dir/clean
#=============================================================================
# Target rules for target CMakeFiles/logger_test.dir
# All Build rule for target.
CMakeFiles/logger_test.dir/all:
$(MAKE) $(MAKESILENT) -f CMakeFiles/logger_test.dir/build.make CMakeFiles/logger_test.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/logger_test.dir/build.make CMakeFiles/logger_test.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/unknownobject/UNSWebServerCore/build/CMakeFiles --progress-num=1,2,3,4 "Built target logger_test"
.PHONY : CMakeFiles/logger_test.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/logger_test.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/unknownobject/UNSWebServerCore/build/CMakeFiles 4
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/logger_test.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/unknownobject/UNSWebServerCore/build/CMakeFiles 0
.PHONY : CMakeFiles/logger_test.dir/rule
# Convenience name for target.
logger_test: CMakeFiles/logger_test.dir/rule
.PHONY : logger_test
# clean rule for target.
CMakeFiles/logger_test.dir/clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/logger_test.dir/build.make CMakeFiles/logger_test.dir/clean
.PHONY : CMakeFiles/logger_test.dir/clean
#=============================================================================
# Target rules for target CMakeFiles/rebuild.dir
# All Build rule for target.
CMakeFiles/rebuild.dir/all:
$(MAKE) $(MAKESILENT) -f CMakeFiles/rebuild.dir/build.make CMakeFiles/rebuild.dir/depend
$(MAKE) $(MAKESILENT) -f CMakeFiles/rebuild.dir/build.make CMakeFiles/rebuild.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/unknownobject/UNSWebServerCore/build/CMakeFiles --progress-num=5 "Built target rebuild"
.PHONY : CMakeFiles/rebuild.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/rebuild.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/unknownobject/UNSWebServerCore/build/CMakeFiles 1
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/rebuild.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/unknownobject/UNSWebServerCore/build/CMakeFiles 0
.PHONY : CMakeFiles/rebuild.dir/rule
# Convenience name for target.
rebuild: CMakeFiles/rebuild.dir/rule
.PHONY : rebuild
# clean rule for target.
CMakeFiles/rebuild.dir/clean:
$(MAKE) $(MAKESILENT) -f CMakeFiles/rebuild.dir/build.make CMakeFiles/rebuild.dir/clean
.PHONY : CMakeFiles/rebuild.dir/clean
#=============================================================================
# Special targets to cleanup operation of make.
# Special rule to run CMake to check the build system integrity.
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system
+5
View File
@@ -0,0 +1,5 @@
/home/unknownobject/UNSWebServerCore/build/CMakeFiles/unswsc.dir
/home/unknownobject/UNSWebServerCore/build/CMakeFiles/logger_test.dir
/home/unknownobject/UNSWebServerCore/build/CMakeFiles/rebuild.dir
/home/unknownobject/UNSWebServerCore/build/CMakeFiles/edit_cache.dir
/home/unknownobject/UNSWebServerCore/build/CMakeFiles/rebuild_cache.dir
+1
View File
@@ -0,0 +1 @@
# This file is generated by cmake for dependency checking of the CMakeCache.txt file
@@ -0,0 +1,25 @@
# Consider dependencies only in project.
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
# The set of languages for which implicit dependencies are needed:
set(CMAKE_DEPENDS_LANGUAGES
)
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
"/home/unknownobject/UNSWebServerCore/LogArg.cpp" "CMakeFiles/logger_test.dir/LogArg.cpp.o" "gcc" "CMakeFiles/logger_test.dir/LogArg.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/ServerLogger.cpp" "CMakeFiles/logger_test.dir/ServerLogger.cpp.o" "gcc" "CMakeFiles/logger_test.dir/ServerLogger.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/TestLogger.cpp" "CMakeFiles/logger_test.dir/TestLogger.cpp.o" "gcc" "CMakeFiles/logger_test.dir/TestLogger.cpp.o.d"
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
)
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
Binary file not shown.
@@ -0,0 +1,213 @@
CMakeFiles/logger_test.dir/LogArg.cpp.o: \
/home/unknownobject/UNSWebServerCore/LogArg.cpp \
/usr/include/stdc-predef.h /home/unknownobject/UNSWebServerCore/LogArg.h \
/usr/include/c++/13/ctime \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h /usr/include/time.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/c++/13/string /usr/include/c++/13/bits/requires_hosted.h \
/usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/type_traits /usr/include/c++/13/compare \
/usr/include/c++/13/concepts /usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/new /usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/move.h \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/stl_iterator.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/refwrap.h /usr/include/c++/13/bits/invoke.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/initializer_list \
/usr/include/c++/13/bits/basic_string.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \
/usr/include/c++/13/bits/ranges_util.h /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/chrono \
/usr/include/c++/13/bits/chrono.h /usr/include/c++/13/ratio \
/usr/include/c++/13/cstdint \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/limits /usr/include/c++/13/bits/parse_numbers.h \
/usr/include/c++/13/sstream /usr/include/c++/13/istream \
/usr/include/c++/13/ios /usr/include/c++/13/exception \
/usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \
/usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/basic_ios.tcc /usr/include/c++/13/ostream \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/istream.tcc \
/usr/include/c++/13/bits/sstream.tcc /usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/stl_tempbuf.h \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/bits/unique_ptr.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/bits/align.h \
/usr/include/c++/13/bits/chrono_io.h /usr/include/c++/13/iomanip \
/usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_facets_nonio.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \
/usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/format \
/usr/include/c++/13/array /usr/include/c++/13/charconv \
/usr/include/c++/13/optional \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/span /usr/include/c++/13/variant \
/usr/include/c++/13/bits/ranges_algobase.h \
/home/unknownobject/UNSWebServerCore/Export.h \
/usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \
/usr/include/c++/13/unordered_map \
/usr/include/c++/13/bits/unordered_map.h \
/usr/include/c++/13/bits/hashtable.h \
/usr/include/c++/13/bits/hashtable_policy.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/erase_if.h \
/home/unknownobject/UNSWebServerCore/utextcodec/UTextCodec.h
Binary file not shown.
@@ -0,0 +1,293 @@
CMakeFiles/logger_test.dir/ServerLogger.cpp.o: \
/home/unknownobject/UNSWebServerCore/ServerLogger.cpp \
/usr/include/stdc-predef.h \
/home/unknownobject/UNSWebServerCore/ServerLogger.h \
/usr/include/c++/13/deque /usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/concepts \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_iterator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/bits/stl_deque.h \
/usr/include/c++/13/initializer_list /usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/invoke.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/deque.tcc \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \
/usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/mutex /usr/include/c++/13/exception \
/usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/bits/chrono.h /usr/include/c++/13/ratio \
/usr/include/c++/13/cstdint \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/limits /usr/include/c++/13/ctime /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/c++/13/bits/parse_numbers.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/cerrno /usr/include/errno.h \
/usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
/usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/std_mutex.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/c++/13/bits/unique_lock.h \
/usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/thread /usr/include/c++/13/stop_token \
/usr/include/c++/13/atomic /usr/include/c++/13/bits/atomic_base.h \
/usr/include/c++/13/bits/atomic_lockfree_defines.h \
/usr/include/c++/13/bits/atomic_wait.h \
/usr/include/c++/13/bits/functional_hash.h /usr/include/c++/13/climits \
/usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \
/usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
/usr/include/x86_64-linux-gnu/bits/local_lim.h \
/usr/include/linux/limits.h \
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
/usr/include/x86_64-linux-gnu/bits/uio_lim.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd.h \
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h \
/usr/include/linux/close_range.h /usr/include/syscall.h \
/usr/include/x86_64-linux-gnu/sys/syscall.h \
/usr/include/x86_64-linux-gnu/asm/unistd.h \
/usr/include/x86_64-linux-gnu/asm/unistd_64.h \
/usr/include/x86_64-linux-gnu/bits/syscall.h \
/usr/include/c++/13/bits/std_thread.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/bits/stringfwd.h /usr/include/c++/13/bits/postypes.h \
/usr/include/c++/13/cwchar /usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/ostream \
/usr/include/c++/13/ios /usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \
/usr/include/ctype.h /usr/include/c++/13/bits/ios_base.h \
/usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/system_error /usr/include/c++/13/stdexcept \
/usr/include/c++/13/streambuf /usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/basic_ios.tcc \
/usr/include/c++/13/bits/ostream.tcc /usr/include/c++/13/semaphore \
/usr/include/c++/13/bits/semaphore_base.h \
/usr/include/c++/13/bits/atomic_timed_wait.h \
/usr/include/c++/13/bits/this_thread_sleep.h \
/usr/include/x86_64-linux-gnu/sys/time.h /usr/include/semaphore.h \
/usr/include/x86_64-linux-gnu/bits/semaphore.h \
/usr/include/c++/13/cstring /usr/include/string.h /usr/include/strings.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/usr/include/c++/13/fstream /usr/include/c++/13/istream \
/usr/include/c++/13/bits/istream.tcc /usr/include/c++/13/bits/codecvt.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \
/usr/include/c++/13/bits/fstream.tcc \
/home/unknownobject/UNSWebServerCore/LogArg.h /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/chrono \
/usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \
/usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/stl_tempbuf.h \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/bits/align.h \
/usr/include/c++/13/bits/chrono_io.h /usr/include/c++/13/iomanip \
/usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_facets_nonio.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/format \
/usr/include/c++/13/array /usr/include/c++/13/charconv \
/usr/include/c++/13/optional \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/span /usr/include/c++/13/variant \
/usr/include/c++/13/bits/ranges_algobase.h \
/home/unknownobject/UNSWebServerCore/Export.h \
/usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \
/usr/include/c++/13/unordered_map \
/usr/include/c++/13/bits/unordered_map.h \
/usr/include/c++/13/bits/hashtable.h \
/usr/include/c++/13/bits/hashtable_policy.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/erase_if.h \
/usr/include/c++/13/condition_variable \
/home/unknownobject/vcpkg/installed/x64-linux/include/fmt/format.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/fmt/base.h \
/usr/include/c++/13/cmath /usr/include/math.h \
/usr/include/x86_64-linux-gnu/bits/math-vector.h \
/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \
/usr/include/x86_64-linux-gnu/bits/flt-eval-method.h \
/usr/include/x86_64-linux-gnu/bits/fp-logb.h \
/usr/include/x86_64-linux-gnu/bits/fp-fast.h \
/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h \
/usr/include/x86_64-linux-gnu/bits/mathcalls.h \
/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h \
/usr/include/x86_64-linux-gnu/bits/iscanonical.h \
/usr/include/c++/13/bits/specfun.h /usr/include/c++/13/tr1/gamma.tcc \
/usr/include/c++/13/tr1/special_function_util.h \
/usr/include/c++/13/tr1/bessel_function.tcc \
/usr/include/c++/13/tr1/beta_function.tcc \
/usr/include/c++/13/tr1/ell_integral.tcc \
/usr/include/c++/13/tr1/exp_integral.tcc \
/usr/include/c++/13/tr1/hypergeometric.tcc \
/usr/include/c++/13/tr1/legendre_function.tcc \
/usr/include/c++/13/tr1/modified_bessel_func.tcc \
/usr/include/c++/13/tr1/poly_hermite.tcc \
/usr/include/c++/13/tr1/poly_laguerre.tcc \
/usr/include/c++/13/tr1/riemann_zeta.tcc \
/home/unknownobject/vcpkg/installed/x64-linux/include/fmt/chrono.h \
/usr/include/c++/13/algorithm /usr/include/c++/13/bits/ranges_algo.h \
/usr/include/c++/13/pstl/glue_algorithm_defs.h \
/usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/iterator \
/usr/include/c++/13/bits/stream_iterator.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/fmt/format.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/fmt/printf.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/fmt/args.h \
/usr/include/c++/13/memory \
/usr/include/c++/13/bits/stl_raw_storage_iter.h \
/usr/include/c++/13/bits/shared_ptr_atomic.h \
/usr/include/c++/13/backward/auto_ptr.h \
/usr/include/c++/13/bits/ranges_uninitialized.h \
/usr/include/c++/13/pstl/glue_memory_defs.h
Binary file not shown.
@@ -0,0 +1,254 @@
CMakeFiles/logger_test.dir/TestLogger.cpp.o: \
/home/unknownobject/UNSWebServerCore/TestLogger.cpp \
/usr/include/stdc-predef.h /usr/include/c++/13/iostream \
/usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h /usr/include/c++/13/ostream \
/usr/include/c++/13/ios /usr/include/c++/13/iosfwd \
/usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/memoryfwd.h /usr/include/c++/13/bits/postypes.h \
/usr/include/c++/13/cwchar /usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/exception /usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/new /usr/include/c++/13/bits/move.h \
/usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/bits/char_traits.h /usr/include/c++/13/compare \
/usr/include/c++/13/concepts /usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \
/usr/include/ctype.h /usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/stl_iterator.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/refwrap.h /usr/include/c++/13/bits/invoke.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/initializer_list \
/usr/include/c++/13/bits/basic_string.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \
/usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \
/usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/basic_ios.tcc \
/usr/include/c++/13/bits/ostream.tcc /usr/include/c++/13/istream \
/usr/include/c++/13/bits/istream.tcc /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/utility \
/usr/include/c++/13/bits/stl_relops.h /usr/include/c++/13/functional \
/usr/include/c++/13/bits/std_function.h \
/usr/include/c++/13/unordered_map \
/usr/include/c++/13/bits/unordered_map.h \
/usr/include/c++/13/bits/hashtable.h \
/usr/include/c++/13/bits/hashtable_policy.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/erase_if.h /usr/include/c++/13/array \
/usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/stl_tempbuf.h \
/home/unknownobject/UNSWebServerCore/ServerLogger.h \
/usr/include/c++/13/deque /usr/include/c++/13/bits/stl_deque.h \
/usr/include/c++/13/bits/deque.tcc /usr/include/c++/13/mutex \
/usr/include/c++/13/bits/chrono.h /usr/include/c++/13/ratio \
/usr/include/c++/13/cstdint \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/limits /usr/include/c++/13/ctime \
/usr/include/c++/13/bits/parse_numbers.h \
/usr/include/c++/13/bits/std_mutex.h \
/usr/include/c++/13/bits/unique_lock.h /usr/include/c++/13/thread \
/usr/include/c++/13/stop_token /usr/include/c++/13/atomic \
/usr/include/c++/13/bits/atomic_base.h \
/usr/include/c++/13/bits/atomic_lockfree_defines.h \
/usr/include/c++/13/bits/atomic_wait.h /usr/include/c++/13/climits \
/usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \
/usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
/usr/include/x86_64-linux-gnu/bits/local_lim.h \
/usr/include/linux/limits.h \
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
/usr/include/x86_64-linux-gnu/bits/uio_lim.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd.h \
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h \
/usr/include/linux/close_range.h /usr/include/syscall.h \
/usr/include/x86_64-linux-gnu/sys/syscall.h \
/usr/include/x86_64-linux-gnu/asm/unistd.h \
/usr/include/x86_64-linux-gnu/asm/unistd_64.h \
/usr/include/x86_64-linux-gnu/bits/syscall.h \
/usr/include/c++/13/bits/std_thread.h \
/usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/semaphore \
/usr/include/c++/13/bits/semaphore_base.h \
/usr/include/c++/13/bits/atomic_timed_wait.h \
/usr/include/c++/13/bits/this_thread_sleep.h \
/usr/include/x86_64-linux-gnu/sys/time.h /usr/include/semaphore.h \
/usr/include/x86_64-linux-gnu/bits/semaphore.h \
/usr/include/c++/13/cstring /usr/include/string.h /usr/include/strings.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/usr/include/c++/13/fstream /usr/include/c++/13/bits/codecvt.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \
/usr/include/c++/13/bits/fstream.tcc \
/home/unknownobject/UNSWebServerCore/LogArg.h /usr/include/c++/13/chrono \
/usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/bits/align.h \
/usr/include/c++/13/bits/chrono_io.h /usr/include/c++/13/iomanip \
/usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_facets_nonio.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/format \
/usr/include/c++/13/charconv /usr/include/c++/13/optional \
/usr/include/c++/13/span /usr/include/c++/13/variant \
/usr/include/c++/13/bits/ranges_algobase.h \
/home/unknownobject/UNSWebServerCore/Export.h \
/usr/include/c++/13/condition_variable
+144
View File
@@ -0,0 +1,144 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Delete rule output on recipe failure.
.DELETE_ON_ERROR:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/unknownobject/UNSWebServerCore
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/unknownobject/UNSWebServerCore/build
# Include any dependencies generated for this target.
include CMakeFiles/logger_test.dir/depend.make
# Include any dependencies generated by the compiler for this target.
include CMakeFiles/logger_test.dir/compiler_depend.make
# Include the progress variables for this target.
include CMakeFiles/logger_test.dir/progress.make
# Include the compile flags for this target's objects.
include CMakeFiles/logger_test.dir/flags.make
CMakeFiles/logger_test.dir/ServerLogger.cpp.o: CMakeFiles/logger_test.dir/flags.make
CMakeFiles/logger_test.dir/ServerLogger.cpp.o: /home/unknownobject/UNSWebServerCore/ServerLogger.cpp
CMakeFiles/logger_test.dir/ServerLogger.cpp.o: CMakeFiles/logger_test.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/unknownobject/UNSWebServerCore/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/logger_test.dir/ServerLogger.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/logger_test.dir/ServerLogger.cpp.o -MF CMakeFiles/logger_test.dir/ServerLogger.cpp.o.d -o CMakeFiles/logger_test.dir/ServerLogger.cpp.o -c /home/unknownobject/UNSWebServerCore/ServerLogger.cpp
CMakeFiles/logger_test.dir/ServerLogger.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/logger_test.dir/ServerLogger.cpp.i"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/unknownobject/UNSWebServerCore/ServerLogger.cpp > CMakeFiles/logger_test.dir/ServerLogger.cpp.i
CMakeFiles/logger_test.dir/ServerLogger.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/logger_test.dir/ServerLogger.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/unknownobject/UNSWebServerCore/ServerLogger.cpp -o CMakeFiles/logger_test.dir/ServerLogger.cpp.s
CMakeFiles/logger_test.dir/LogArg.cpp.o: CMakeFiles/logger_test.dir/flags.make
CMakeFiles/logger_test.dir/LogArg.cpp.o: /home/unknownobject/UNSWebServerCore/LogArg.cpp
CMakeFiles/logger_test.dir/LogArg.cpp.o: CMakeFiles/logger_test.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/unknownobject/UNSWebServerCore/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/logger_test.dir/LogArg.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/logger_test.dir/LogArg.cpp.o -MF CMakeFiles/logger_test.dir/LogArg.cpp.o.d -o CMakeFiles/logger_test.dir/LogArg.cpp.o -c /home/unknownobject/UNSWebServerCore/LogArg.cpp
CMakeFiles/logger_test.dir/LogArg.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/logger_test.dir/LogArg.cpp.i"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/unknownobject/UNSWebServerCore/LogArg.cpp > CMakeFiles/logger_test.dir/LogArg.cpp.i
CMakeFiles/logger_test.dir/LogArg.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/logger_test.dir/LogArg.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/unknownobject/UNSWebServerCore/LogArg.cpp -o CMakeFiles/logger_test.dir/LogArg.cpp.s
CMakeFiles/logger_test.dir/TestLogger.cpp.o: CMakeFiles/logger_test.dir/flags.make
CMakeFiles/logger_test.dir/TestLogger.cpp.o: /home/unknownobject/UNSWebServerCore/TestLogger.cpp
CMakeFiles/logger_test.dir/TestLogger.cpp.o: CMakeFiles/logger_test.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/unknownobject/UNSWebServerCore/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/logger_test.dir/TestLogger.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/logger_test.dir/TestLogger.cpp.o -MF CMakeFiles/logger_test.dir/TestLogger.cpp.o.d -o CMakeFiles/logger_test.dir/TestLogger.cpp.o -c /home/unknownobject/UNSWebServerCore/TestLogger.cpp
CMakeFiles/logger_test.dir/TestLogger.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/logger_test.dir/TestLogger.cpp.i"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/unknownobject/UNSWebServerCore/TestLogger.cpp > CMakeFiles/logger_test.dir/TestLogger.cpp.i
CMakeFiles/logger_test.dir/TestLogger.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/logger_test.dir/TestLogger.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/unknownobject/UNSWebServerCore/TestLogger.cpp -o CMakeFiles/logger_test.dir/TestLogger.cpp.s
# Object files for target logger_test
logger_test_OBJECTS = \
"CMakeFiles/logger_test.dir/ServerLogger.cpp.o" \
"CMakeFiles/logger_test.dir/LogArg.cpp.o" \
"CMakeFiles/logger_test.dir/TestLogger.cpp.o"
# External object files for target logger_test
logger_test_EXTERNAL_OBJECTS =
logger_test: CMakeFiles/logger_test.dir/ServerLogger.cpp.o
logger_test: CMakeFiles/logger_test.dir/LogArg.cpp.o
logger_test: CMakeFiles/logger_test.dir/TestLogger.cpp.o
logger_test: CMakeFiles/logger_test.dir/build.make
logger_test: /home/unknownobject/UNSWebServerCore/so/libutextcodec.so
logger_test: /home/unknownobject/vcpkg/installed/x64-linux/lib/libfmt.a
logger_test: CMakeFiles/logger_test.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/unknownobject/UNSWebServerCore/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking CXX executable logger_test"
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/logger_test.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
CMakeFiles/logger_test.dir/build: logger_test
.PHONY : CMakeFiles/logger_test.dir/build
CMakeFiles/logger_test.dir/clean:
$(CMAKE_COMMAND) -P CMakeFiles/logger_test.dir/cmake_clean.cmake
.PHONY : CMakeFiles/logger_test.dir/clean
CMakeFiles/logger_test.dir/depend:
cd /home/unknownobject/UNSWebServerCore/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/unknownobject/UNSWebServerCore /home/unknownobject/UNSWebServerCore /home/unknownobject/UNSWebServerCore/build /home/unknownobject/UNSWebServerCore/build /home/unknownobject/UNSWebServerCore/build/CMakeFiles/logger_test.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : CMakeFiles/logger_test.dir/depend
@@ -0,0 +1,15 @@
file(REMOVE_RECURSE
"CMakeFiles/logger_test.dir/LogArg.cpp.o"
"CMakeFiles/logger_test.dir/LogArg.cpp.o.d"
"CMakeFiles/logger_test.dir/ServerLogger.cpp.o"
"CMakeFiles/logger_test.dir/ServerLogger.cpp.o.d"
"CMakeFiles/logger_test.dir/TestLogger.cpp.o"
"CMakeFiles/logger_test.dir/TestLogger.cpp.o.d"
"logger_test"
"logger_test.pdb"
)
# Per-language clean rules from dependency scanning.
foreach(lang CXX)
include(CMakeFiles/logger_test.dir/cmake_clean_${lang}.cmake OPTIONAL)
endforeach()
@@ -0,0 +1,2 @@
# Empty compiler generated dependencies file for logger_test.
# This may be replaced when dependencies are built.
@@ -0,0 +1,2 @@
# CMAKE generated file: DO NOT EDIT!
# Timestamp file for compiler generated dependencies management for logger_test.
@@ -0,0 +1,2 @@
# Empty dependencies file for logger_test.
# This may be replaced when dependencies are built.
@@ -0,0 +1,10 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# compile CXX with /usr/bin/c++
CXX_DEFINES =
CXX_INCLUDES = -isystem /home/unknownobject/UNSWebServerCore/utextcodec -isystem /home/unknownobject/vcpkg/installed/x64-linux/include
CXX_FLAGS = -O3 -DNDEBUG -std=gnu++20 -fPIE -Wno-literal-suffix
@@ -0,0 +1 @@
/usr/bin/c++ -O3 -DNDEBUG CMakeFiles/logger_test.dir/ServerLogger.cpp.o CMakeFiles/logger_test.dir/LogArg.cpp.o CMakeFiles/logger_test.dir/TestLogger.cpp.o -o logger_test -Wl,-rpath,/home/unknownobject/UNSWebServerCore/so /home/unknownobject/UNSWebServerCore/so/libutextcodec.so /home/unknownobject/vcpkg/installed/x64-linux/lib/libfmt.a
@@ -0,0 +1,5 @@
CMAKE_PROGRESS_1 = 1
CMAKE_PROGRESS_2 = 2
CMAKE_PROGRESS_3 = 3
CMAKE_PROGRESS_4 = 4
+1
View File
@@ -0,0 +1 @@
24
@@ -0,0 +1,22 @@
# Consider dependencies only in project.
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
# The set of languages for which implicit dependencies are needed:
set(CMAKE_DEPENDS_LANGUAGES
)
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
)
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
+89
View File
@@ -0,0 +1,89 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Delete rule output on recipe failure.
.DELETE_ON_ERROR:
#=============================================================================
# Special targets provided by cmake.
# Disable implicit rules so canonical targets will work.
.SUFFIXES:
# Disable VCS-based implicit rules.
% : %,v
# Disable VCS-based implicit rules.
% : RCS/%
# Disable VCS-based implicit rules.
% : RCS/%,v
# Disable VCS-based implicit rules.
% : SCCS/s.%
# Disable VCS-based implicit rules.
% : s.%
.SUFFIXES: .hpux_make_needs_suffix_list
# Command-line flag to silence nested $(MAKE).
$(VERBOSE)MAKESILENT = -s
#Suppress display of executed commands.
$(VERBOSE).SILENT:
# A target that is always out of date.
cmake_force:
.PHONY : cmake_force
#=============================================================================
# Set environment variables for the build.
# The shell in which to execute make rules.
SHELL = /bin/sh
# The CMake executable.
CMAKE_COMMAND = /usr/bin/cmake
# The command to remove a file.
RM = /usr/bin/cmake -E rm -f
# Escaping for special characters.
EQUALS = =
# The top-level source directory on which CMake was run.
CMAKE_SOURCE_DIR = /home/unknownobject/UNSWebServerCore
# The top-level build directory on which CMake was run.
CMAKE_BINARY_DIR = /home/unknownobject/UNSWebServerCore/build
# Utility rule file for rebuild.
# Include any custom commands dependencies for this target.
include CMakeFiles/rebuild.dir/compiler_depend.make
# Include the progress variables for this target.
include CMakeFiles/rebuild.dir/progress.make
CMakeFiles/rebuild:
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/unknownobject/UNSWebServerCore/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) ">>> Rebuilding entire project (clean + all) <<<"
/usr/bin/cmake --build /home/unknownobject/UNSWebServerCore/build --target clean
/usr/bin/cmake --build /home/unknownobject/UNSWebServerCore/build --parallel 10 --config Release
rebuild: CMakeFiles/rebuild
rebuild: CMakeFiles/rebuild.dir/build.make
.PHONY : rebuild
# Rule to build all files generated by this target.
CMakeFiles/rebuild.dir/build: rebuild
.PHONY : CMakeFiles/rebuild.dir/build
CMakeFiles/rebuild.dir/clean:
$(CMAKE_COMMAND) -P CMakeFiles/rebuild.dir/cmake_clean.cmake
.PHONY : CMakeFiles/rebuild.dir/clean
CMakeFiles/rebuild.dir/depend:
cd /home/unknownobject/UNSWebServerCore/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/unknownobject/UNSWebServerCore /home/unknownobject/UNSWebServerCore /home/unknownobject/UNSWebServerCore/build /home/unknownobject/UNSWebServerCore/build /home/unknownobject/UNSWebServerCore/build/CMakeFiles/rebuild.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : CMakeFiles/rebuild.dir/depend
@@ -0,0 +1,8 @@
file(REMOVE_RECURSE
"CMakeFiles/rebuild"
)
# Per-language clean rules from dependency scanning.
foreach(lang )
include(CMakeFiles/rebuild.dir/cmake_clean_${lang}.cmake OPTIONAL)
endforeach()
@@ -0,0 +1,2 @@
# Empty custom commands generated dependencies file for rebuild.
# This may be replaced when dependencies are built.
@@ -0,0 +1,2 @@
# CMAKE generated file: DO NOT EDIT!
# Timestamp file for custom commands dependencies management for rebuild.
@@ -0,0 +1,2 @@
CMAKE_PROGRESS_1 = 5
Binary file not shown.
@@ -0,0 +1,183 @@
CMakeFiles/unswsc.dir/CORSConfig.cpp.o: \
/home/unknownobject/UNSWebServerCore/CORSConfig.cpp \
/usr/include/stdc-predef.h \
/home/unknownobject/UNSWebServerCore/CORSConfig.h \
/usr/include/c++/13/set /usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stl_tree.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/concepts \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_iterator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/stl_set.h /usr/include/c++/13/initializer_list \
/usr/include/c++/13/bits/stl_multiset.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/erase_if.h \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \
/usr/include/c++/13/bits/invoke.h /usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/string /usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/home/unknownobject/UNSWebServerCore/Export.h /usr/include/c++/13/map \
/usr/include/c++/13/bits/stl_map.h \
/usr/include/c++/13/bits/stl_multimap.h /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/sstream \
/usr/include/c++/13/istream /usr/include/c++/13/ios \
/usr/include/c++/13/exception /usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \
/usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/basic_ios.tcc /usr/include/c++/13/ostream \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/istream.tcc \
/usr/include/c++/13/bits/sstream.tcc \
/home/unknownobject/UNSWebServerCore/Global.h \
/home/unknownobject/UNSWebServerCore/DateTime.h
Binary file not shown.
@@ -0,0 +1,280 @@
CMakeFiles/unswsc.dir/CORSProcessor.cpp.o: \
/home/unknownobject/UNSWebServerCore/CORSProcessor.cpp \
/usr/include/stdc-predef.h \
/home/unknownobject/UNSWebServerCore/CORSProcessor.h \
/home/unknownobject/UNSWebServerCore/ServerProcessor.h \
/home/unknownobject/UNSWebServerCore/Global.h /usr/include/c++/13/map \
/usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stl_tree.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/concepts \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_iterator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/stl_map.h /usr/include/c++/13/initializer_list \
/usr/include/c++/13/tuple /usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/invoke.h /usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/stl_multimap.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/erase_if.h \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/c++/13/bits/uses_allocator_args.h \
/usr/include/c++/13/string /usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc \
/home/unknownobject/UNSWebServerCore/Export.h \
/home/unknownobject/UNSWebServerCore/DateTime.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/home/unknownobject/UNSWebServerCore/IPTable.h /usr/include/c++/13/set \
/usr/include/c++/13/bits/stl_set.h \
/usr/include/c++/13/bits/stl_multiset.h \
/home/unknownobject/UNSWebServerCore/IPList.h \
/home/unknownobject/UNSWebServerCore/HTTPObjects.h \
/usr/include/c++/13/memory /usr/include/c++/13/bits/stl_tempbuf.h \
/usr/include/c++/13/bits/stl_raw_storage_iter.h \
/usr/include/c++/13/bits/align.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/ostream \
/usr/include/c++/13/ios /usr/include/c++/13/exception \
/usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \
/usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/basic_ios.tcc \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/ext/concurrence.h \
/usr/include/c++/13/bits/shared_ptr_atomic.h \
/usr/include/c++/13/bits/atomic_base.h \
/usr/include/c++/13/bits/atomic_lockfree_defines.h \
/usr/include/c++/13/bits/atomic_wait.h /usr/include/c++/13/cstdint \
/usr/include/c++/13/climits \
/usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \
/usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
/usr/include/x86_64-linux-gnu/bits/local_lim.h \
/usr/include/linux/limits.h \
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
/usr/include/x86_64-linux-gnu/bits/uio_lim.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd.h \
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h \
/usr/include/linux/close_range.h /usr/include/syscall.h \
/usr/include/x86_64-linux-gnu/sys/syscall.h \
/usr/include/x86_64-linux-gnu/asm/unistd.h \
/usr/include/x86_64-linux-gnu/asm/unistd_64.h \
/usr/include/x86_64-linux-gnu/bits/syscall.h \
/usr/include/c++/13/bits/std_mutex.h \
/usr/include/c++/13/backward/auto_ptr.h \
/usr/include/c++/13/bits/ranges_uninitialized.h \
/usr/include/c++/13/bits/ranges_algobase.h \
/usr/include/c++/13/pstl/glue_memory_defs.h \
/usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/utility \
/usr/include/c++/13/bits/stl_relops.h \
/home/unknownobject/UNSWebServerCore/ServerLogger.h \
/usr/include/c++/13/deque /usr/include/c++/13/bits/stl_deque.h \
/usr/include/c++/13/bits/deque.tcc /usr/include/c++/13/mutex \
/usr/include/c++/13/bits/chrono.h /usr/include/c++/13/ratio \
/usr/include/c++/13/limits /usr/include/c++/13/ctime \
/usr/include/c++/13/bits/parse_numbers.h \
/usr/include/c++/13/bits/unique_lock.h /usr/include/c++/13/thread \
/usr/include/c++/13/stop_token /usr/include/c++/13/atomic \
/usr/include/c++/13/bits/std_thread.h /usr/include/c++/13/semaphore \
/usr/include/c++/13/bits/semaphore_base.h \
/usr/include/c++/13/bits/atomic_timed_wait.h \
/usr/include/c++/13/bits/this_thread_sleep.h \
/usr/include/x86_64-linux-gnu/sys/time.h /usr/include/semaphore.h \
/usr/include/x86_64-linux-gnu/bits/semaphore.h \
/usr/include/c++/13/cstring /usr/include/string.h /usr/include/strings.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/usr/include/c++/13/fstream /usr/include/c++/13/istream \
/usr/include/c++/13/bits/istream.tcc /usr/include/c++/13/bits/codecvt.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \
/usr/include/c++/13/bits/fstream.tcc \
/home/unknownobject/UNSWebServerCore/LogArg.h /usr/include/c++/13/chrono \
/usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \
/usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/chrono_io.h /usr/include/c++/13/iomanip \
/usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_facets_nonio.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/format \
/usr/include/c++/13/array /usr/include/c++/13/charconv \
/usr/include/c++/13/optional \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/span /usr/include/c++/13/variant \
/usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \
/usr/include/c++/13/unordered_map \
/usr/include/c++/13/bits/unordered_map.h \
/usr/include/c++/13/bits/hashtable.h \
/usr/include/c++/13/bits/hashtable_policy.h \
/usr/include/c++/13/condition_variable \
/home/unknownobject/UNSWebServerCore/CORSConfig.h \
/home/unknownobject/UNSWebServerCore/UNSResponseBuilder.h \
/usr/include/c++/13/filesystem /usr/include/c++/13/bits/fs_fwd.h \
/usr/include/c++/13/bits/fs_path.h /usr/include/c++/13/codecvt \
/usr/include/c++/13/bits/fs_dir.h /usr/include/c++/13/bits/fs_ops.h
Binary file not shown.
@@ -0,0 +1,263 @@
CMakeFiles/unswsc.dir/DataTransfer.cpp.o: \
/home/unknownobject/UNSWebServerCore/DataTransfer.cpp \
/usr/include/stdc-predef.h \
/home/unknownobject/UNSWebServerCore/DataTransfer.h \
/usr/include/c++/13/map /usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stl_tree.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/concepts \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_iterator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/stl_map.h /usr/include/c++/13/initializer_list \
/usr/include/c++/13/tuple /usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/invoke.h /usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/stl_multimap.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/erase_if.h \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/c++/13/bits/uses_allocator_args.h \
/usr/include/c++/13/string /usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/home/unknownobject/UNSWebServerCore/Export.h \
/usr/include/c++/13/filesystem /usr/include/c++/13/bits/fs_fwd.h \
/usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/exception \
/usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/cstdint \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/bits/chrono.h /usr/include/c++/13/ratio \
/usr/include/c++/13/limits /usr/include/c++/13/ctime /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/c++/13/bits/parse_numbers.h \
/usr/include/c++/13/bits/fs_path.h /usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_classes.h \
/usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/streambuf \
/usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/locale_facets_nonio.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \
/usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h /usr/include/c++/13/iomanip \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/sstream \
/usr/include/c++/13/istream /usr/include/c++/13/ios \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/basic_ios.tcc /usr/include/c++/13/ostream \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/istream.tcc \
/usr/include/c++/13/bits/sstream.tcc /usr/include/c++/13/codecvt \
/usr/include/c++/13/ext/concurrence.h \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/bits/align.h \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/fs_dir.h /usr/include/c++/13/bits/fs_ops.h \
/home/unknownobject/UNSWebServerCore/ServerLogger.h \
/usr/include/c++/13/deque /usr/include/c++/13/bits/stl_deque.h \
/usr/include/c++/13/bits/deque.tcc /usr/include/c++/13/mutex \
/usr/include/c++/13/bits/std_mutex.h \
/usr/include/c++/13/bits/unique_lock.h /usr/include/c++/13/thread \
/usr/include/c++/13/stop_token /usr/include/c++/13/atomic \
/usr/include/c++/13/bits/atomic_base.h \
/usr/include/c++/13/bits/atomic_lockfree_defines.h \
/usr/include/c++/13/bits/atomic_wait.h /usr/include/c++/13/climits \
/usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \
/usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
/usr/include/x86_64-linux-gnu/bits/local_lim.h \
/usr/include/linux/limits.h \
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
/usr/include/x86_64-linux-gnu/bits/uio_lim.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd.h \
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h \
/usr/include/linux/close_range.h /usr/include/syscall.h \
/usr/include/x86_64-linux-gnu/sys/syscall.h \
/usr/include/x86_64-linux-gnu/asm/unistd.h \
/usr/include/x86_64-linux-gnu/asm/unistd_64.h \
/usr/include/x86_64-linux-gnu/bits/syscall.h \
/usr/include/c++/13/bits/std_thread.h /usr/include/c++/13/semaphore \
/usr/include/c++/13/bits/semaphore_base.h \
/usr/include/c++/13/bits/atomic_timed_wait.h \
/usr/include/c++/13/bits/this_thread_sleep.h \
/usr/include/x86_64-linux-gnu/sys/time.h /usr/include/semaphore.h \
/usr/include/x86_64-linux-gnu/bits/semaphore.h \
/usr/include/c++/13/cstring /usr/include/string.h /usr/include/strings.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/usr/include/c++/13/fstream \
/usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \
/usr/include/c++/13/bits/fstream.tcc \
/home/unknownobject/UNSWebServerCore/LogArg.h /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/chrono \
/usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/stl_tempbuf.h \
/usr/include/c++/13/bits/chrono_io.h /usr/include/c++/13/format \
/usr/include/c++/13/array /usr/include/c++/13/charconv \
/usr/include/c++/13/optional \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/span /usr/include/c++/13/variant \
/usr/include/c++/13/bits/ranges_algobase.h \
/usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \
/usr/include/c++/13/unordered_map \
/usr/include/c++/13/bits/unordered_map.h \
/usr/include/c++/13/bits/hashtable.h \
/usr/include/c++/13/bits/hashtable_policy.h \
/usr/include/c++/13/condition_variable
Binary file not shown.
@@ -0,0 +1,205 @@
CMakeFiles/unswsc.dir/DateTime.cpp.o: \
/home/unknownobject/UNSWebServerCore/DateTime.cpp \
/usr/include/stdc-predef.h \
/home/unknownobject/UNSWebServerCore/DateTime.h /usr/include/time.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/c++/13/string /usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/type_traits /usr/include/c++/13/compare \
/usr/include/c++/13/concepts /usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/new /usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/move.h \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/stl_iterator.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/refwrap.h /usr/include/c++/13/bits/invoke.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/initializer_list \
/usr/include/c++/13/bits/basic_string.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \
/usr/include/c++/13/bits/ranges_util.h \
/home/unknownobject/UNSWebServerCore/Export.h /usr/include/c++/13/chrono \
/usr/include/c++/13/bits/chrono.h /usr/include/c++/13/ratio \
/usr/include/c++/13/cstdint \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/limits /usr/include/c++/13/ctime \
/usr/include/c++/13/bits/parse_numbers.h /usr/include/c++/13/sstream \
/usr/include/c++/13/istream /usr/include/c++/13/ios \
/usr/include/c++/13/exception /usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \
/usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/basic_ios.tcc /usr/include/c++/13/ostream \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/istream.tcc \
/usr/include/c++/13/bits/sstream.tcc /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/stl_tempbuf.h \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/bits/unique_ptr.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/bits/align.h \
/usr/include/c++/13/bits/chrono_io.h /usr/include/c++/13/iomanip \
/usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_facets_nonio.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \
/usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/format \
/usr/include/c++/13/array /usr/include/c++/13/charconv \
/usr/include/c++/13/optional \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/span /usr/include/c++/13/variant \
/usr/include/c++/13/bits/ranges_algobase.h
@@ -0,0 +1,41 @@
# Consider dependencies only in project.
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
# The set of languages for which implicit dependencies are needed:
set(CMAKE_DEPENDS_LANGUAGES
)
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
"/home/unknownobject/UNSWebServerCore/CORSConfig.cpp" "CMakeFiles/unswsc.dir/CORSConfig.cpp.o" "gcc" "CMakeFiles/unswsc.dir/CORSConfig.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/CORSProcessor.cpp" "CMakeFiles/unswsc.dir/CORSProcessor.cpp.o" "gcc" "CMakeFiles/unswsc.dir/CORSProcessor.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/DataTransfer.cpp" "CMakeFiles/unswsc.dir/DataTransfer.cpp.o" "gcc" "CMakeFiles/unswsc.dir/DataTransfer.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/DateTime.cpp" "CMakeFiles/unswsc.dir/DateTime.cpp.o" "gcc" "CMakeFiles/unswsc.dir/DateTime.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/FileReceiver.cpp" "CMakeFiles/unswsc.dir/FileReceiver.cpp.o" "gcc" "CMakeFiles/unswsc.dir/FileReceiver.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/Global.cpp" "CMakeFiles/unswsc.dir/Global.cpp.o" "gcc" "CMakeFiles/unswsc.dir/Global.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/HTTPObjects.cpp" "CMakeFiles/unswsc.dir/HTTPObjects.cpp.o" "gcc" "CMakeFiles/unswsc.dir/HTTPObjects.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/IPList.cpp" "CMakeFiles/unswsc.dir/IPList.cpp.o" "gcc" "CMakeFiles/unswsc.dir/IPList.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/IPTable.cpp" "CMakeFiles/unswsc.dir/IPTable.cpp.o" "gcc" "CMakeFiles/unswsc.dir/IPTable.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/LogArg.cpp" "CMakeFiles/unswsc.dir/LogArg.cpp.o" "gcc" "CMakeFiles/unswsc.dir/LogArg.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/PathTraversal.cpp" "CMakeFiles/unswsc.dir/PathTraversal.cpp.o" "gcc" "CMakeFiles/unswsc.dir/PathTraversal.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/SafeRNG.cpp" "CMakeFiles/unswsc.dir/SafeRNG.cpp.o" "gcc" "CMakeFiles/unswsc.dir/SafeRNG.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/ServerCore.cpp" "CMakeFiles/unswsc.dir/ServerCore.cpp.o" "gcc" "CMakeFiles/unswsc.dir/ServerCore.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/ServerLogger.cpp" "CMakeFiles/unswsc.dir/ServerLogger.cpp.o" "gcc" "CMakeFiles/unswsc.dir/ServerLogger.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/ServerProcessor.cpp" "CMakeFiles/unswsc.dir/ServerProcessor.cpp.o" "gcc" "CMakeFiles/unswsc.dir/ServerProcessor.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/SessionManager.cpp" "CMakeFiles/unswsc.dir/SessionManager.cpp.o" "gcc" "CMakeFiles/unswsc.dir/SessionManager.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/SyncFileReceiver.cpp" "CMakeFiles/unswsc.dir/SyncFileReceiver.cpp.o" "gcc" "CMakeFiles/unswsc.dir/SyncFileReceiver.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/UNSResponseBuilder.cpp" "CMakeFiles/unswsc.dir/UNSResponseBuilder.cpp.o" "gcc" "CMakeFiles/unswsc.dir/UNSResponseBuilder.cpp.o.d"
"/home/unknownobject/UNSWebServerCore/WebFileInfo.cpp" "CMakeFiles/unswsc.dir/WebFileInfo.cpp.o" "gcc" "CMakeFiles/unswsc.dir/WebFileInfo.cpp.o.d"
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
)
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
Binary file not shown.
@@ -0,0 +1,347 @@
CMakeFiles/unswsc.dir/FileReceiver.cpp.o: \
/home/unknownobject/UNSWebServerCore/FileReceiver.cpp \
/usr/include/stdc-predef.h \
/home/unknownobject/UNSWebServerCore/FileReceiver.h \
/home/unknownobject/UNSWebServerCore/Global.h /usr/include/c++/13/map \
/usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stl_tree.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/concepts \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_iterator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/stl_map.h /usr/include/c++/13/initializer_list \
/usr/include/c++/13/tuple /usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/invoke.h /usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/stl_multimap.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/erase_if.h \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/c++/13/bits/uses_allocator_args.h \
/usr/include/c++/13/string /usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc \
/home/unknownobject/UNSWebServerCore/Export.h \
/home/unknownobject/UNSWebServerCore/DateTime.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/home/unknownobject/UNSWebServerCore/IPTable.h /usr/include/c++/13/set \
/usr/include/c++/13/bits/stl_set.h \
/usr/include/c++/13/bits/stl_multiset.h \
/home/unknownobject/UNSWebServerCore/IPList.h \
/usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/unordered_map \
/usr/include/c++/13/bits/unordered_map.h \
/usr/include/c++/13/bits/hashtable.h \
/usr/include/c++/13/bits/hashtable_policy.h \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/array /usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/stl_tempbuf.h \
/home/unknownobject/UNSWebServerCore/WebFileInfo.h \
/home/unknownobject/UNSWebServerCore/HTTPObjects.h \
/usr/include/c++/13/memory \
/usr/include/c++/13/bits/stl_raw_storage_iter.h \
/usr/include/c++/13/bits/align.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/ostream \
/usr/include/c++/13/ios /usr/include/c++/13/exception \
/usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \
/usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/basic_ios.tcc \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/ext/concurrence.h \
/usr/include/c++/13/bits/shared_ptr_atomic.h \
/usr/include/c++/13/bits/atomic_base.h \
/usr/include/c++/13/bits/atomic_lockfree_defines.h \
/usr/include/c++/13/bits/atomic_wait.h /usr/include/c++/13/cstdint \
/usr/include/c++/13/climits \
/usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \
/usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
/usr/include/x86_64-linux-gnu/bits/local_lim.h \
/usr/include/linux/limits.h \
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
/usr/include/x86_64-linux-gnu/bits/uio_lim.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd.h \
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h \
/usr/include/linux/close_range.h /usr/include/syscall.h \
/usr/include/x86_64-linux-gnu/sys/syscall.h \
/usr/include/x86_64-linux-gnu/asm/unistd.h \
/usr/include/x86_64-linux-gnu/asm/unistd_64.h \
/usr/include/x86_64-linux-gnu/bits/syscall.h \
/usr/include/c++/13/bits/std_mutex.h \
/usr/include/c++/13/backward/auto_ptr.h \
/usr/include/c++/13/bits/ranges_uninitialized.h \
/usr/include/c++/13/bits/ranges_algobase.h \
/usr/include/c++/13/pstl/glue_memory_defs.h \
/usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/utility \
/usr/include/c++/13/bits/stl_relops.h /usr/include/c++/13/cstring \
/usr/include/string.h /usr/include/strings.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/json.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/config.h \
/usr/include/c++/13/istream /usr/include/c++/13/bits/istream.tcc \
/usr/include/c++/13/sstream /usr/include/c++/13/bits/sstream.tcc \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/allocator.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/version.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/json_features.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/forwards.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/reader.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/value.h \
/usr/include/c++/13/deque /usr/include/c++/13/bits/stl_deque.h \
/usr/include/c++/13/bits/deque.tcc /usr/include/c++/13/stack \
/usr/include/c++/13/bits/stl_stack.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/writer.h \
/home/unknownobject/UNSWebServerCore/ServerLogger.h \
/usr/include/c++/13/mutex /usr/include/c++/13/bits/chrono.h \
/usr/include/c++/13/ratio /usr/include/c++/13/limits \
/usr/include/c++/13/ctime /usr/include/c++/13/bits/parse_numbers.h \
/usr/include/c++/13/bits/unique_lock.h /usr/include/c++/13/thread \
/usr/include/c++/13/stop_token /usr/include/c++/13/atomic \
/usr/include/c++/13/bits/std_thread.h /usr/include/c++/13/semaphore \
/usr/include/c++/13/bits/semaphore_base.h \
/usr/include/c++/13/bits/atomic_timed_wait.h \
/usr/include/c++/13/bits/this_thread_sleep.h \
/usr/include/x86_64-linux-gnu/sys/time.h /usr/include/semaphore.h \
/usr/include/x86_64-linux-gnu/bits/semaphore.h \
/usr/include/c++/13/fstream /usr/include/c++/13/bits/codecvt.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \
/usr/include/c++/13/bits/fstream.tcc \
/home/unknownobject/UNSWebServerCore/LogArg.h /usr/include/c++/13/chrono \
/usr/include/c++/13/bits/chrono_io.h /usr/include/c++/13/iomanip \
/usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_facets_nonio.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/format \
/usr/include/c++/13/charconv /usr/include/c++/13/optional \
/usr/include/c++/13/span /usr/include/c++/13/variant \
/usr/include/c++/13/condition_variable \
/home/unknownobject/UNSWebServerCore/PathTraversal.h \
/usr/include/c++/13/filesystem /usr/include/c++/13/bits/fs_fwd.h \
/usr/include/c++/13/bits/fs_path.h /usr/include/c++/13/codecvt \
/usr/include/c++/13/bits/fs_dir.h /usr/include/c++/13/bits/fs_ops.h \
/home/unknownobject/UNSWebServerCore/HTTPObjectsBridge.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/request.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/message.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/body.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/common.h \
/usr/include/c++/13/cassert /usr/include/assert.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/fs.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/config.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/globals.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/buffer.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/user.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/select_compiler_config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/compiler/gcc.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/select_stdlib_config.hpp \
/usr/include/c++/13/version \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/stdlib/libstdcpp3.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/select_platform_config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/platform/linux.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/posix_features.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/suffix.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/helper_macros.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/cxx_composite.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/version.hpp \
/usr/include/linux/version.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/array_fwd.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/memory.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/cstdint.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/throw_exception.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/throw_exception.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/exception/exception.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/assert/source_location.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/cstdint.hpp \
/usr/include/c++/13/source_location \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/workaround.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/string_view.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/type_traits.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/is_contiguous_iterator.hpp \
/usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/push_options.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/pop_options.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/is_buffer_sequence.hpp \
/home/unknownobject/UNSWebServerCore/webcc/webcc/url.h \
/usr/include/c++/13/regex /usr/include/c++/13/bitset \
/usr/include/c++/13/bits/regex_constants.h \
/usr/include/c++/13/bits/regex_error.h \
/usr/include/c++/13/bits/regex_automaton.h \
/usr/include/c++/13/bits/regex_automaton.tcc \
/usr/include/c++/13/bits/regex_scanner.h \
/usr/include/c++/13/bits/regex_scanner.tcc \
/usr/include/c++/13/bits/regex_compiler.h \
/usr/include/c++/13/bits/regex_compiler.tcc \
/usr/include/c++/13/bits/regex.h /usr/include/c++/13/bits/regex.tcc \
/usr/include/c++/13/bits/regex_executor.h \
/usr/include/c++/13/bits/regex_executor.tcc \
/home/unknownobject/UNSWebServerCore/webcc/webcc/response.h \
/home/unknownobject/UNSWebServerCore/UNSResponseBuilder.h
Binary file not shown.
@@ -0,0 +1,346 @@
CMakeFiles/unswsc.dir/FileReciver.cpp.o: \
/home/unknownobject/UNSWebServerCore/FileReciver.cpp \
/usr/include/stdc-predef.h \
/home/unknownobject/UNSWebServerCore/FileReciver.h \
/usr/include/c++/13/map /usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stl_tree.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/concepts \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_iterator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/stl_map.h /usr/include/c++/13/initializer_list \
/usr/include/c++/13/tuple /usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/invoke.h /usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/stl_multimap.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/erase_if.h \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/c++/13/bits/uses_allocator_args.h \
/home/unknownobject/UNSWebServerCore/Global.h /usr/include/c++/13/string \
/usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/c++/13/cstdint \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/home/unknownobject/UNSWebServerCore/Export.h \
/home/unknownobject/UNSWebServerCore/DateTime.h \
/home/unknownobject/UNSWebServerCore/IPTable.h /usr/include/c++/13/set \
/usr/include/c++/13/bits/stl_set.h \
/usr/include/c++/13/bits/stl_multiset.h \
/home/unknownobject/UNSWebServerCore/IPList.h /usr/include/c++/13/regex \
/usr/include/c++/13/bitset /usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_classes.h \
/usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/exception \
/usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/streambuf /usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \
/usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h /usr/include/c++/13/sstream \
/usr/include/c++/13/istream /usr/include/c++/13/ios \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/basic_ios.tcc /usr/include/c++/13/ostream \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/istream.tcc \
/usr/include/c++/13/bits/sstream.tcc /usr/include/c++/13/stack \
/usr/include/c++/13/deque /usr/include/c++/13/bits/stl_deque.h \
/usr/include/c++/13/bits/deque.tcc /usr/include/c++/13/bits/stl_stack.h \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/bits/unique_ptr.h \
/usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/bits/align.h \
/usr/include/c++/13/bits/std_function.h \
/usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/stl_tempbuf.h \
/usr/include/c++/13/bits/regex_constants.h \
/usr/include/c++/13/bits/regex_error.h \
/usr/include/c++/13/bits/regex_automaton.h \
/usr/include/c++/13/bits/regex_automaton.tcc \
/usr/include/c++/13/bits/regex_scanner.h \
/usr/include/c++/13/bits/regex_scanner.tcc \
/usr/include/c++/13/bits/regex_compiler.h \
/usr/include/c++/13/bits/regex_compiler.tcc \
/usr/include/c++/13/bits/regex.h /usr/include/c++/13/bits/regex.tcc \
/usr/include/c++/13/bits/regex_executor.h \
/usr/include/c++/13/bits/regex_executor.tcc \
/usr/include/c++/13/functional /usr/include/c++/13/unordered_map \
/usr/include/c++/13/bits/unordered_map.h \
/usr/include/c++/13/bits/hashtable.h \
/usr/include/c++/13/bits/hashtable_policy.h \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/array \
/home/unknownobject/UNSWebServerCore/WebFileInfo.h \
/home/unknownobject/UNSWebServerCore/HTTPObjects.h \
/usr/include/c++/13/memory \
/usr/include/c++/13/bits/stl_raw_storage_iter.h \
/usr/include/c++/13/bits/shared_ptr_atomic.h \
/usr/include/c++/13/bits/atomic_base.h \
/usr/include/c++/13/bits/atomic_lockfree_defines.h \
/usr/include/c++/13/bits/atomic_wait.h /usr/include/c++/13/climits \
/usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \
/usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
/usr/include/x86_64-linux-gnu/bits/local_lim.h \
/usr/include/linux/limits.h \
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
/usr/include/x86_64-linux-gnu/bits/uio_lim.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd.h \
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h \
/usr/include/linux/close_range.h /usr/include/syscall.h \
/usr/include/x86_64-linux-gnu/sys/syscall.h \
/usr/include/x86_64-linux-gnu/asm/unistd.h \
/usr/include/x86_64-linux-gnu/asm/unistd_64.h \
/usr/include/x86_64-linux-gnu/bits/syscall.h \
/usr/include/c++/13/bits/std_mutex.h \
/usr/include/c++/13/backward/auto_ptr.h \
/usr/include/c++/13/bits/ranges_uninitialized.h \
/usr/include/c++/13/bits/ranges_algobase.h \
/usr/include/c++/13/pstl/glue_memory_defs.h \
/usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/utility \
/usr/include/c++/13/bits/stl_relops.h /usr/include/c++/13/cstring \
/usr/include/string.h /usr/include/strings.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/json.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/config.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/allocator.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/version.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/json_features.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/forwards.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/reader.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/value.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/writer.h \
/home/unknownobject/UNSWebServerCore/ServerLogger.h \
/usr/include/c++/13/condition_variable /usr/include/c++/13/bits/chrono.h \
/usr/include/c++/13/ratio /usr/include/c++/13/limits \
/usr/include/c++/13/bits/parse_numbers.h \
/usr/include/c++/13/bits/unique_lock.h /usr/include/c++/13/stop_token \
/usr/include/c++/13/atomic /usr/include/c++/13/bits/std_thread.h \
/usr/include/c++/13/semaphore /usr/include/c++/13/bits/semaphore_base.h \
/usr/include/c++/13/bits/atomic_timed_wait.h \
/usr/include/c++/13/bits/this_thread_sleep.h \
/usr/include/x86_64-linux-gnu/sys/time.h /usr/include/semaphore.h \
/usr/include/x86_64-linux-gnu/bits/semaphore.h \
/home/unknownobject/UNSWebServerCore/LogArg.h \
/usr/include/c++/13/variant /usr/include/c++/13/iostream \
/usr/include/c++/13/stdlib.h /usr/include/c++/13/fstream \
/usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \
/usr/include/c++/13/bits/fstream.tcc /usr/include/c++/13/iomanip \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/thread \
/usr/include/c++/13/chrono /usr/include/c++/13/bits/chrono_io.h \
/usr/include/c++/13/format /usr/include/c++/13/charconv \
/usr/include/c++/13/optional /usr/include/c++/13/span \
/usr/include/c++/13/mutex \
/home/unknownobject/UNSWebServerCore/PathTraversal.h \
/usr/include/c++/13/filesystem /usr/include/c++/13/bits/fs_fwd.h \
/usr/include/c++/13/bits/fs_path.h /usr/include/c++/13/codecvt \
/usr/include/c++/13/bits/fs_dir.h /usr/include/c++/13/bits/fs_ops.h \
/home/unknownobject/UNSWebServerCore/HTTPObjectsBridge.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/request.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/message.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/body.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/common.h \
/usr/include/c++/13/cassert /usr/include/assert.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/fs.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/config.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/globals.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/buffer.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/user.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/select_compiler_config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/compiler/gcc.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/select_stdlib_config.hpp \
/usr/include/c++/13/version \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/stdlib/libstdcpp3.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/select_platform_config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/platform/linux.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/posix_features.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/suffix.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/helper_macros.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/cxx_composite.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/version.hpp \
/usr/include/linux/version.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/array_fwd.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/memory.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/cstdint.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/throw_exception.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/throw_exception.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/exception/exception.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/assert/source_location.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/cstdint.hpp \
/usr/include/c++/13/source_location \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/workaround.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/string_view.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/type_traits.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/is_contiguous_iterator.hpp \
/usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/push_options.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/pop_options.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/is_buffer_sequence.hpp \
/home/unknownobject/UNSWebServerCore/webcc/webcc/url.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/response.h \
/home/unknownobject/UNSWebServerCore/UNSResponseBuilder.h
Binary file not shown.
+383
View File
@@ -0,0 +1,383 @@
CMakeFiles/unswsc.dir/Global.cpp.o: \
/home/unknownobject/UNSWebServerCore/Global.cpp \
/usr/include/stdc-predef.h /home/unknownobject/UNSWebServerCore/Global.h \
/usr/include/c++/13/map /usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stl_tree.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/concepts \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_iterator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/stl_map.h /usr/include/c++/13/initializer_list \
/usr/include/c++/13/tuple /usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/invoke.h /usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/stl_multimap.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/erase_if.h \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/c++/13/bits/uses_allocator_args.h \
/usr/include/c++/13/string /usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc \
/home/unknownobject/UNSWebServerCore/Export.h \
/home/unknownobject/UNSWebServerCore/DateTime.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/c++/13/memory /usr/include/c++/13/bits/stl_tempbuf.h \
/usr/include/c++/13/bits/stl_raw_storage_iter.h \
/usr/include/c++/13/bits/align.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/ostream \
/usr/include/c++/13/ios /usr/include/c++/13/exception \
/usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \
/usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/basic_ios.tcc \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/ext/concurrence.h \
/usr/include/c++/13/bits/shared_ptr_atomic.h \
/usr/include/c++/13/bits/atomic_base.h \
/usr/include/c++/13/bits/atomic_lockfree_defines.h \
/usr/include/c++/13/bits/atomic_wait.h /usr/include/c++/13/cstdint \
/usr/include/c++/13/climits \
/usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \
/usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
/usr/include/x86_64-linux-gnu/bits/local_lim.h \
/usr/include/linux/limits.h \
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
/usr/include/x86_64-linux-gnu/bits/uio_lim.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd.h \
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h \
/usr/include/linux/close_range.h /usr/include/syscall.h \
/usr/include/x86_64-linux-gnu/sys/syscall.h \
/usr/include/x86_64-linux-gnu/asm/unistd.h \
/usr/include/x86_64-linux-gnu/asm/unistd_64.h \
/usr/include/x86_64-linux-gnu/bits/syscall.h \
/usr/include/c++/13/bits/std_mutex.h \
/usr/include/c++/13/backward/auto_ptr.h \
/usr/include/c++/13/bits/ranges_uninitialized.h \
/usr/include/c++/13/bits/ranges_algobase.h \
/usr/include/c++/13/pstl/glue_memory_defs.h \
/usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/format \
/usr/include/c++/13/array /usr/include/c++/13/charconv \
/usr/include/c++/13/limits /usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \
/usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h /usr/include/c++/13/optional \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/span /usr/include/c++/13/variant \
/usr/include/c++/13/bits/parse_numbers.h /usr/include/c++/13/chrono \
/usr/include/c++/13/bits/chrono.h /usr/include/c++/13/ratio \
/usr/include/c++/13/sstream /usr/include/c++/13/istream \
/usr/include/c++/13/bits/istream.tcc \
/usr/include/c++/13/bits/sstream.tcc /usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/chrono_io.h /usr/include/c++/13/iomanip \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/cstring \
/usr/include/string.h /usr/include/strings.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/usr/include/c++/13/fstream \
/usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \
/usr/include/c++/13/bits/fstream.tcc \
/home/unknownobject/UNSWebServerCore/uohash/UOHash.h \
/home/unknownobject/UNSWebServerCore/uohash/Public.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/rhash.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/json.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/config.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/allocator.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/version.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/json_features.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/forwards.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/reader.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/value.h \
/usr/include/c++/13/deque /usr/include/c++/13/bits/stl_deque.h \
/usr/include/c++/13/bits/deque.tcc /usr/include/c++/13/stack \
/usr/include/c++/13/bits/stl_stack.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/json/writer.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/version.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/export.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/core.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_aead_aegis128l.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_aead_aegis256.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_aead_aes256gcm.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_aead_chacha20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_aead_xchacha20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_auth.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_auth_hmacsha512256.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_auth_hmacsha512.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_hash_sha512.h \
/usr/include/c++/13/stdlib.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_auth_hmacsha256.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_hash_sha256.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_auth_hmacsha512.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_auth_hmacsha512256.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_box.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_box_curve25519xsalsa20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream_xsalsa20.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_box_curve25519xsalsa20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_core_hchacha20.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_core_hsalsa20.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_core_salsa20.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_core_salsa2012.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_core_salsa208.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_generichash.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_generichash_blake2b.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_generichash_blake2b.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_hash.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_hash_sha256.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_hash_sha512.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_kdf.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_kdf_blake2b.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_kdf_hkdf_sha256.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_kdf.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_auth_hmacsha256.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_kdf_hkdf_sha512.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_kdf_blake2b.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_kx.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_onetimeauth.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_onetimeauth_poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_onetimeauth_poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_pwhash.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_pwhash_argon2i.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_pwhash_argon2id.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_pwhash_argon2i.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_scalarmult.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_scalarmult_curve25519.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_scalarmult_curve25519.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_secretbox.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_secretbox_xsalsa20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_secretbox_xsalsa20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_secretstream_xchacha20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_aead_xchacha20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream_chacha20.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_shorthash.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_shorthash_siphash24.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_shorthash_siphash24.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_sign.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_sign_ed25519.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_sign_ed25519.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream_chacha20.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream_salsa20.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream_xsalsa20.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_verify_16.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_verify_32.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_verify_64.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/randombytes.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/randombytes_internal_random.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/randombytes.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/randombytes_sysrandom.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/runtime.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/utils.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_box_curve25519xchacha20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream_xchacha20.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_core_ed25519.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_core_ristretto255.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_pwhash_scryptsalsa208sha256.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_scalarmult_ed25519.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_scalarmult_ristretto255.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_secretbox_xchacha20poly1305.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream_salsa2012.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream_salsa208.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/sodium/crypto_stream_xchacha20.h \
/home/unknownobject/UNSWebServerCore/SafeRNG.h \
/usr/include/c++/13/algorithm /usr/include/c++/13/bits/ranges_algo.h \
/usr/include/c++/13/pstl/glue_algorithm_defs.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/evp.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/macros.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/opensslconf.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/configuration.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/opensslv.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/types.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/e_os2.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/safestack.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/stack.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/core.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/core_dispatch.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/indicator.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/params.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/bn.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/crypto.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/cryptoerr.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/symhacks.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/cryptoerr_legacy.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/bnerr.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/bio.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/bioerr.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/evperr.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/objects.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/obj_mac.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/asn1.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/asn1err.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/openssl/objectserr.h \
/home/unknownobject/UNSWebServerCore/PathTraversal.h \
/usr/include/c++/13/filesystem /usr/include/c++/13/bits/fs_fwd.h \
/usr/include/c++/13/bits/fs_path.h /usr/include/c++/13/codecvt \
/usr/include/c++/13/bits/fs_dir.h /usr/include/c++/13/bits/fs_ops.h
Binary file not shown.
@@ -0,0 +1,308 @@
CMakeFiles/unswsc.dir/HTTPObjects.cpp.o: \
/home/unknownobject/UNSWebServerCore/HTTPObjects.cpp \
/usr/include/stdc-predef.h \
/home/unknownobject/UNSWebServerCore/HTTPObjects.h \
/usr/include/c++/13/memory /usr/include/c++/13/bits/memoryfwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/stl_tempbuf.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/concepts /usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/stl_iterator.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/bits/stl_raw_storage_iter.h \
/usr/include/c++/13/bits/align.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/unique_ptr.h /usr/include/c++/13/tuple \
/usr/include/c++/13/bits/invoke.h /usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/initializer_list \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h /usr/include/c++/13/ostream \
/usr/include/c++/13/bits/requires_hosted.h /usr/include/c++/13/ios \
/usr/include/c++/13/iosfwd /usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h /usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/exception /usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/cctype \
/usr/include/ctype.h /usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.h /usr/include/c++/13/string \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/include/c++/13/bits/uses_allocator_args.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/streambuf \
/usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/basic_ios.tcc \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/ext/concurrence.h \
/usr/include/c++/13/bits/shared_ptr_atomic.h \
/usr/include/c++/13/bits/atomic_base.h \
/usr/include/c++/13/bits/atomic_lockfree_defines.h \
/usr/include/c++/13/bits/atomic_wait.h /usr/include/c++/13/cstdint \
/usr/include/c++/13/climits \
/usr/lib/gcc/x86_64-linux-gnu/13/include/limits.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/syslimits.h \
/usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
/usr/include/x86_64-linux-gnu/bits/local_lim.h \
/usr/include/linux/limits.h \
/usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
/usr/include/x86_64-linux-gnu/bits/uio_lim.h /usr/include/unistd.h \
/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
/usr/include/x86_64-linux-gnu/bits/environments.h \
/usr/include/x86_64-linux-gnu/bits/confname.h \
/usr/include/x86_64-linux-gnu/bits/getopt_posix.h \
/usr/include/x86_64-linux-gnu/bits/getopt_core.h \
/usr/include/x86_64-linux-gnu/bits/unistd.h \
/usr/include/x86_64-linux-gnu/bits/unistd-decl.h \
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h \
/usr/include/linux/close_range.h /usr/include/syscall.h \
/usr/include/x86_64-linux-gnu/sys/syscall.h \
/usr/include/x86_64-linux-gnu/asm/unistd.h \
/usr/include/x86_64-linux-gnu/asm/unistd_64.h \
/usr/include/x86_64-linux-gnu/bits/syscall.h \
/usr/include/c++/13/bits/std_mutex.h \
/usr/include/c++/13/backward/auto_ptr.h \
/usr/include/c++/13/bits/ranges_uninitialized.h \
/usr/include/c++/13/bits/ranges_algobase.h \
/usr/include/c++/13/pstl/glue_memory_defs.h \
/usr/include/c++/13/pstl/execution_defs.h /usr/include/c++/13/vector \
/usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc /usr/include/c++/13/utility \
/usr/include/c++/13/bits/stl_relops.h \
/home/unknownobject/UNSWebServerCore/Export.h \
/home/unknownobject/UNSWebServerCore/HTTPObjectsBridge.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/request.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/message.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/body.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/common.h \
/usr/include/c++/13/cassert /usr/include/assert.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/fs.h \
/home/unknownobject/UNSWebServerCore/webcc/webcc/config.h \
/usr/include/c++/13/filesystem /usr/include/c++/13/bits/fs_fwd.h \
/usr/include/c++/13/bits/chrono.h /usr/include/c++/13/ratio \
/usr/include/c++/13/limits /usr/include/c++/13/ctime \
/usr/include/c++/13/bits/parse_numbers.h \
/usr/include/c++/13/bits/fs_path.h /usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_facets_nonio.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \
/usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h /usr/include/c++/13/iomanip \
/usr/include/c++/13/bits/quoted_string.h /usr/include/c++/13/sstream \
/usr/include/c++/13/istream /usr/include/c++/13/bits/istream.tcc \
/usr/include/c++/13/bits/sstream.tcc /usr/include/c++/13/codecvt \
/usr/include/c++/13/bits/fs_dir.h /usr/include/c++/13/bits/fs_ops.h \
/usr/include/c++/13/fstream \
/usr/include/x86_64-linux-gnu/c++/13/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++io.h \
/usr/include/c++/13/bits/fstream.tcc \
/home/unknownobject/UNSWebServerCore/webcc/webcc/globals.h \
/usr/include/c++/13/functional /usr/include/c++/13/bits/std_function.h \
/usr/include/c++/13/unordered_map \
/usr/include/c++/13/bits/unordered_map.h \
/usr/include/c++/13/bits/hashtable.h \
/usr/include/c++/13/bits/hashtable_policy.h \
/usr/include/c++/13/bits/enable_special_members.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/erase_if.h /usr/include/c++/13/array \
/usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/buffer.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/user.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/select_compiler_config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/compiler/gcc.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/select_stdlib_config.hpp \
/usr/include/c++/13/version \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/stdlib/libstdcpp3.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/select_platform_config.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/platform/linux.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/posix_features.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/suffix.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/helper_macros.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/detail/cxx_composite.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/version.hpp \
/usr/include/linux/version.h /usr/include/c++/13/cstring \
/usr/include/string.h /usr/include/strings.h \
/usr/include/x86_64-linux-gnu/bits/strings_fortified.h \
/usr/include/x86_64-linux-gnu/bits/string_fortified.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/array_fwd.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/memory.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/cstdint.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/throw_exception.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/throw_exception.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/exception/exception.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/assert/source_location.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/cstdint.hpp \
/usr/include/c++/13/source_location \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/config/workaround.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/string_view.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/type_traits.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/is_contiguous_iterator.hpp \
/usr/include/c++/13/iterator /usr/include/c++/13/bits/stream_iterator.h \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/push_options.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/pop_options.hpp \
/home/unknownobject/vcpkg/installed/x64-linux/include/boost/asio/detail/is_buffer_sequence.hpp \
/home/unknownobject/UNSWebServerCore/webcc/webcc/url.h \
/usr/include/c++/13/regex /usr/include/c++/13/bitset \
/usr/include/c++/13/stack /usr/include/c++/13/deque \
/usr/include/c++/13/bits/stl_deque.h /usr/include/c++/13/bits/deque.tcc \
/usr/include/c++/13/bits/stl_stack.h /usr/include/c++/13/bits/stl_tree.h \
/usr/include/c++/13/bits/stl_map.h \
/usr/include/c++/13/bits/regex_constants.h \
/usr/include/c++/13/bits/regex_error.h \
/usr/include/c++/13/bits/regex_automaton.h \
/usr/include/c++/13/bits/regex_automaton.tcc \
/usr/include/c++/13/bits/regex_scanner.h \
/usr/include/c++/13/bits/regex_scanner.tcc \
/usr/include/c++/13/bits/regex_compiler.h \
/usr/include/c++/13/bits/regex_compiler.tcc \
/usr/include/c++/13/bits/regex.h /usr/include/c++/13/bits/regex.tcc \
/usr/include/c++/13/bits/regex_executor.h \
/usr/include/c++/13/bits/regex_executor.tcc \
/home/unknownobject/UNSWebServerCore/webcc/webcc/response.h
Binary file not shown.
+212
View File
@@ -0,0 +1,212 @@
CMakeFiles/unswsc.dir/IPList.cpp.o: \
/home/unknownobject/UNSWebServerCore/IPList.cpp \
/usr/include/stdc-predef.h /home/unknownobject/UNSWebServerCore/IPList.h \
/usr/include/c++/13/set /usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stl_tree.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/concepts \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_iterator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/stl_set.h /usr/include/c++/13/initializer_list \
/usr/include/c++/13/bits/stl_multiset.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/erase_if.h \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \
/usr/include/c++/13/bits/invoke.h /usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/usr/include/c++/13/string /usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/home/unknownobject/UNSWebServerCore/Export.h /usr/include/c++/13/regex \
/usr/include/c++/13/bitset /usr/include/c++/13/locale \
/usr/include/c++/13/bits/locale_classes.h \
/usr/include/c++/13/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \
/usr/include/x86_64-linux-gnu/bits/sched.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \
/usr/include/x86_64-linux-gnu/bits/cpu-set.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \
/usr/include/x86_64-linux-gnu/bits/setjmp.h \
/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/sys/single_threaded.h \
/usr/include/c++/13/bits/locale_classes.tcc \
/usr/include/c++/13/bits/locale_facets.h /usr/include/c++/13/cwctype \
/usr/include/wctype.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_base.h \
/usr/include/c++/13/bits/ios_base.h /usr/include/c++/13/system_error \
/usr/include/x86_64-linux-gnu/c++/13/bits/error_constants.h \
/usr/include/c++/13/stdexcept /usr/include/c++/13/exception \
/usr/include/c++/13/bits/exception_ptr.h \
/usr/include/c++/13/bits/cxxabi_init_exception.h \
/usr/include/c++/13/typeinfo /usr/include/c++/13/bits/nested_exception.h \
/usr/include/c++/13/streambuf /usr/include/c++/13/bits/streambuf.tcc \
/usr/include/c++/13/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/ctype_inline.h \
/usr/include/c++/13/bits/locale_facets.tcc \
/usr/include/c++/13/bits/locale_facets_nonio.h /usr/include/c++/13/ctime \
/usr/include/x86_64-linux-gnu/c++/13/bits/time_members.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/messages_members.h \
/usr/include/libintl.h /usr/include/c++/13/bits/codecvt.h \
/usr/include/c++/13/bits/locale_facets_nonio.tcc \
/usr/include/c++/13/bits/locale_conv.h /usr/include/c++/13/sstream \
/usr/include/c++/13/istream /usr/include/c++/13/ios \
/usr/include/c++/13/bits/basic_ios.h \
/usr/include/c++/13/bits/basic_ios.tcc /usr/include/c++/13/ostream \
/usr/include/c++/13/bits/ostream.tcc \
/usr/include/c++/13/bits/istream.tcc \
/usr/include/c++/13/bits/sstream.tcc /usr/include/c++/13/stack \
/usr/include/c++/13/deque /usr/include/c++/13/bits/stl_uninitialized.h \
/usr/include/c++/13/bits/stl_deque.h /usr/include/c++/13/bits/deque.tcc \
/usr/include/c++/13/bits/stl_stack.h \
/usr/include/c++/13/bits/shared_ptr.h \
/usr/include/c++/13/bits/shared_ptr_base.h \
/usr/include/c++/13/bits/allocated_ptr.h \
/usr/include/c++/13/bits/unique_ptr.h \
/usr/include/c++/13/ext/concurrence.h /usr/include/c++/13/bits/align.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdint.h /usr/include/stdint.h \
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \
/usr/include/x86_64-linux-gnu/bits/stdint-least.h \
/usr/include/c++/13/bits/std_function.h \
/usr/include/c++/13/bits/stl_algo.h \
/usr/include/c++/13/bits/algorithmfwd.h \
/usr/include/c++/13/bits/stl_heap.h \
/usr/include/c++/13/bits/uniform_int_dist.h \
/usr/include/c++/13/bits/stl_tempbuf.h \
/usr/include/c++/13/bits/stl_map.h /usr/include/c++/13/bits/stl_vector.h \
/usr/include/c++/13/bits/stl_bvector.h \
/usr/include/c++/13/bits/vector.tcc \
/usr/include/c++/13/bits/regex_constants.h \
/usr/include/c++/13/bits/regex_error.h \
/usr/include/c++/13/bits/regex_automaton.h \
/usr/include/c++/13/bits/regex_automaton.tcc \
/usr/include/c++/13/bits/regex_scanner.h \
/usr/include/c++/13/bits/regex_scanner.tcc \
/usr/include/c++/13/bits/regex_compiler.h \
/usr/include/c++/13/bits/regex_compiler.tcc \
/usr/include/c++/13/bits/regex.h /usr/include/c++/13/bits/regex.tcc \
/usr/include/c++/13/bits/regex_executor.h \
/usr/include/c++/13/bits/regex_executor.tcc
Binary file not shown.
+144
View File
@@ -0,0 +1,144 @@
CMakeFiles/unswsc.dir/IPTable.cpp.o: \
/home/unknownobject/UNSWebServerCore/IPTable.cpp \
/usr/include/stdc-predef.h \
/home/unknownobject/UNSWebServerCore/IPTable.h /usr/include/c++/13/set \
/usr/include/c++/13/bits/requires_hosted.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/os_defines.h \
/usr/include/features.h /usr/include/features-time64.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/cpu_defines.h \
/usr/include/c++/13/pstl/pstl_config.h \
/usr/include/c++/13/bits/stl_tree.h \
/usr/include/c++/13/bits/stl_algobase.h \
/usr/include/c++/13/bits/functexcept.h \
/usr/include/c++/13/bits/exception_defines.h \
/usr/include/c++/13/bits/cpp_type_traits.h \
/usr/include/c++/13/ext/type_traits.h \
/usr/include/c++/13/ext/numeric_traits.h \
/usr/include/c++/13/bits/stl_pair.h /usr/include/c++/13/type_traits \
/usr/include/c++/13/bits/move.h /usr/include/c++/13/bits/utility.h \
/usr/include/c++/13/compare /usr/include/c++/13/concepts \
/usr/include/c++/13/bits/stl_iterator_base_types.h \
/usr/include/c++/13/bits/iterator_concepts.h \
/usr/include/c++/13/bits/ptr_traits.h \
/usr/include/c++/13/bits/ranges_cmp.h \
/usr/include/c++/13/bits/stl_iterator_base_funcs.h \
/usr/include/c++/13/bits/concept_check.h \
/usr/include/c++/13/debug/assertions.h \
/usr/include/c++/13/bits/stl_iterator.h /usr/include/c++/13/new \
/usr/include/c++/13/bits/exception.h \
/usr/include/c++/13/bits/stl_construct.h \
/usr/include/c++/13/debug/debug.h \
/usr/include/c++/13/bits/predefined_ops.h /usr/include/c++/13/bit \
/usr/include/c++/13/bits/allocator.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++allocator.h \
/usr/include/c++/13/bits/new_allocator.h \
/usr/include/c++/13/bits/memoryfwd.h \
/usr/include/c++/13/bits/stl_function.h \
/usr/include/c++/13/backward/binders.h \
/usr/include/c++/13/ext/alloc_traits.h \
/usr/include/c++/13/bits/alloc_traits.h \
/usr/include/c++/13/ext/aligned_buffer.h \
/usr/include/c++/13/bits/node_handle.h \
/usr/include/c++/13/bits/stl_set.h /usr/include/c++/13/initializer_list \
/usr/include/c++/13/bits/stl_multiset.h \
/usr/include/c++/13/bits/range_access.h \
/usr/include/c++/13/bits/erase_if.h \
/usr/include/c++/13/bits/memory_resource.h /usr/include/c++/13/cstddef \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stddef.h \
/usr/include/c++/13/bits/uses_allocator.h \
/usr/include/c++/13/bits/uses_allocator_args.h /usr/include/c++/13/tuple \
/usr/include/c++/13/bits/invoke.h /usr/include/c++/13/bits/ranges_util.h \
/usr/include/c++/13/bits/ranges_base.h \
/usr/include/c++/13/bits/max_size_type.h /usr/include/c++/13/numbers \
/home/unknownobject/UNSWebServerCore/IPList.h /usr/include/c++/13/string \
/usr/include/c++/13/bits/stringfwd.h \
/usr/include/c++/13/bits/char_traits.h \
/usr/include/c++/13/bits/postypes.h /usr/include/c++/13/cwchar \
/usr/include/wchar.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/x86_64-linux-gnu/bits/floatn.h \
/usr/include/x86_64-linux-gnu/bits/floatn-common.h \
/usr/lib/gcc/x86_64-linux-gnu/13/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/wchar.h \
/usr/include/x86_64-linux-gnu/bits/types/wint_t.h \
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \
/usr/include/x86_64-linux-gnu/bits/wchar2-decl.h \
/usr/include/x86_64-linux-gnu/bits/wchar2.h \
/usr/include/c++/13/bits/localefwd.h \
/usr/include/x86_64-linux-gnu/c++/13/bits/c++locale.h \
/usr/include/c++/13/clocale /usr/include/locale.h \
/usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/13/iosfwd \
/usr/include/c++/13/cctype /usr/include/ctype.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/endian.h \
/usr/include/x86_64-linux-gnu/bits/endianness.h \
/usr/include/c++/13/bits/ostream_insert.h \
/usr/include/c++/13/bits/cxxabi_forced.h \
/usr/include/c++/13/bits/refwrap.h \
/usr/include/c++/13/bits/basic_string.h /usr/include/c++/13/string_view \
/usr/include/c++/13/bits/functional_hash.h \
/usr/include/c++/13/bits/hash_bytes.h \
/usr/include/c++/13/bits/string_view.tcc \
/usr/include/c++/13/ext/string_conversions.h /usr/include/c++/13/cstdlib \
/usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
/usr/include/x86_64-linux-gnu/sys/types.h \
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
/usr/include/x86_64-linux-gnu/bits/types/time_t.h \
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
/usr/include/x86_64-linux-gnu/bits/byteswap.h \
/usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
/usr/include/x86_64-linux-gnu/sys/select.h \
/usr/include/x86_64-linux-gnu/bits/select.h \
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
/usr/include/x86_64-linux-gnu/bits/select2.h \
/usr/include/x86_64-linux-gnu/bits/select-decl.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \
/usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h /usr/include/alloca.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
/usr/include/x86_64-linux-gnu/bits/stdlib.h \
/usr/include/c++/13/bits/std_abs.h /usr/include/c++/13/cstdio \
/usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/stdio2-decl.h \
/usr/include/x86_64-linux-gnu/bits/stdio.h \
/usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/c++/13/cerrno \
/usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
/usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
/usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
/usr/include/x86_64-linux-gnu/bits/types/error_t.h \
/usr/include/c++/13/bits/charconv.h \
/usr/include/c++/13/bits/basic_string.tcc \
/home/unknownobject/UNSWebServerCore/Export.h \
/home/unknownobject/UNSWebServerCore/DateTime.h /usr/include/time.h \
/usr/include/x86_64-linux-gnu/bits/time.h \
/usr/include/x86_64-linux-gnu/bits/timex.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h

Some files were not shown because too many files have changed in this diff Show More