10 Commits

Author SHA1 Message Date
4cf339cfc4 fix . and .. incorrectly being reported as files
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-26 13:37:59 -05:00
6fe23f270a fix . and .. incorrectly being reported as files 2025-07-26 13:17:06 -05:00
c85fe76a48 flutter ugrades
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-26 12:46:16 -05:00
4508b6d908 fix . and .. incorrectly being reported as files
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-26 11:04:59 -05:00
c74a70ce13 fix . and .. incorrectly being reported as files 2025-07-26 11:03:24 -05:00
f5e88e44bf cleanup
Some checks are pending
BlockStorage/repertory/pipeline/head Build queued...
2025-07-26 08:59:33 -05:00
f11f92ba55 updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-26 08:52:20 -05:00
14d0173bd3 fix link
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
2025-07-25 09:26:31 -05:00
5b56c73528 updated version
Some checks reported errors
BlockStorage/repertory/pipeline/head Something is wrong with the build of this commit
2025-07-25 07:59:25 -05:00
87d336141c v2.0.6-release (#50)
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
Reviewed-on: #50
2025-07-25 07:51:03 -05:00
256 changed files with 10147 additions and 9528 deletions

View File

@@ -17,6 +17,7 @@ bugprone
cflags cflags
chrono chrono
cmake_current_source_dir cmake_current_source_dir
coinit_apartmentthreaded
comdlg32 comdlg32
cppcoreguidelines cppcoreguidelines
cppdbg cppdbg
@@ -27,6 +28,7 @@ cppvsdbg
create_notraverse create_notraverse
crypto_aead_xchacha20poly1305_ietf_npubbytes crypto_aead_xchacha20poly1305_ietf_npubbytes
cstdint cstdint
curle_couldnt_resolve_host
curlopt_aws_sigv4 curlopt_aws_sigv4
cxxflags cxxflags
cxxstd cxxstd
@@ -199,6 +201,7 @@ secp256k1
secur32 secur32
sfml_project sfml_project
shlwapi shlwapi
sigchld
skynet skynet
source_subdir source_subdir
spdlog spdlog

View File

@@ -1,13 +1,16 @@
# Changelog # Changelog
## v2.1.0-rc
### Issues
### Changes from v2.0.6-release
* Fixed `.` and `..` incorrectly being reported as files in remote Linux mounts
## v2.0.6-release ## v2.0.6-release
### Issues ### Issues
* ~~\#12 [Unit Test] Complete all providers unit tests~~
* ~~\#21 [Unit Test] Complete WinFSP unit tests~~
* ~~\#22 [Unit Test] Complete FUSE unit tests~~
* ~~\#33 Complete initial v2.0 documentation~~
* \#42 [bug] Remote mount directory listing on Windows connected to Linux is failing * \#42 [bug] Remote mount directory listing on Windows connected to Linux is failing
* \#43 [bug] Directories are not importing properly for Sia * \#43 [bug] Directories are not importing properly for Sia
* \#44 [bug] Windows-to-Linux remote mount ignores `CREATE_NEW` * \#44 [bug] Windows-to-Linux remote mount ignores `CREATE_NEW`
@@ -15,12 +18,17 @@
* \#46 [bug] Changes to maximum cache size should be updated live * \#46 [bug] Changes to maximum cache size should be updated live
* \#47 [bug] Windows-to-Linux remote mount is allowing directory rename when directory is not empty * \#47 [bug] Windows-to-Linux remote mount is allowing directory rename when directory is not empty
* \#48 [bug] Windows-to-Linux remote mount overlapped I/O is not detecting EOF for read operations * \#48 [bug] Windows-to-Linux remote mount overlapped I/O is not detecting EOF for read operations
* \#49 [ui] Implement provider test button
### Changes from v2.0.5-rc ### Changes from v2.0.5-rc
* Added request retry on `libcurl` error code `CURLE_COULDNT_RESOLVE_HOST`
* Added `libcurl` DNS caching
* Drive letters in UI should always be lowercase * Drive letters in UI should always be lowercase
* Fixed WinFSP directory rename for non-empty directories * Fixed WinFSP directory rename for non-empty directories
* Fixed segfault in UI due to incorrect `SIGCHLD` handling
* Migrated to v2 error handling * Migrated to v2 error handling
* Upgraded WinFSP to v2.1 (2025)
## v2.0.5-rc ## v2.0.5-rc

View File

@@ -48,7 +48,7 @@ on Windows.
* [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v2.0.0+ for Sia support * [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v2.0.0+ for Sia support
* Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support * Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
* Windows requires the following dependencies to be installed: * Windows requires the following dependencies to be installed:
* [WinFSP 2023](https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi) * [WinFSP 2025](https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi)
### Supported Operating Systems ### Supported Operating Systems
@@ -453,7 +453,7 @@ in the `dist/` directory
* [spdlog](https://github.com/gabime/spdlog) * [spdlog](https://github.com/gabime/spdlog)
* [SQLite](https://www.sqlite.org) * [SQLite](https://www.sqlite.org)
* [stduuid](https://github.com/mariusbancila/stduuid) * [stduuid](https://github.com/mariusbancila/stduuid)
* [Storj](https://storj.io/) * [Storj](https://www.storj.io/)
* [WinFSP - FUSE for Windows](https://github.com/billziss-gh/winfsp) * [WinFSP - FUSE for Windows](https://github.com/billziss-gh/winfsp)
* [zlib](https://zlib.net/) * [zlib](https://zlib.net/)

View File

@@ -1,20 +1,20 @@
set(BINUTILS_HASH ce2017e059d63e67ddb9240e9d4ec49c2893605035cd60e92ad53177f4377237) set(BINUTILS_HASH ce2017e059d63e67ddb9240e9d4ec49c2893605035cd60e92ad53177f4377237)
set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca) set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca)
set(BOOST_HASH 3621533e820dcab1e8012afd583c0c73cf0f77694952b81352bf38c1488f9cb4) set(BOOST_HASH 3621533e820dcab1e8012afd583c0c73cf0f77694952b81352bf38c1488f9cb4)
set(CPP_HTTPLIB_HASH 18064587e0cc6a0d5d56d619f4cbbcaba47aa5d84d86013abbd45d95c6653866) set(CPP_HTTPLIB_HASH 410a1347ed6bcbcc4a19af8ed8ad3873fe9fa97731d52db845c4c78f3f9c31e6)
set(CURL_HASH ccc5ba45d9f5320c70ffb24e5411b66ba55ea1f333bf78be0963ed90a9328699) set(CURL_HASH 2937cadde007aa3a52a17c21ac9153ea054700f37926d1d96602bf07e888c847)
set(EXPAT_HASH 85372797ff0673a8fc4a6be16466bb5a0ca28c0dcf3c6f7ac1686b4a3ba2aabb) set(EXPAT_HASH 85372797ff0673a8fc4a6be16466bb5a0ca28c0dcf3c6f7ac1686b4a3ba2aabb)
set(GCC_HASH 7d376d445f93126dc545e2c0086d0f647c3094aae081cdb78f42ce2bc25e7293) set(GCC_HASH 51b9919ea69c980d7a381db95d4be27edf73b21254eb13d752a08003b4d013b1)
set(GTEST_HASH 78c676fc63881529bf97bf9d45948d905a66833fbfa5318ea2cd7478cb98f399) set(GTEST_HASH 65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c)
set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2) set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2)
set(JSON_HASH 4b92eb0c06d10683f7447ce9406cb97cd4b453be18d7279320f7b2f025c10187) set(JSON_HASH 4b92eb0c06d10683f7447ce9406cb97cd4b453be18d7279320f7b2f025c10187)
set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1) set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1)
set(MINGW_HASH cc41898aac4b6e8dd5cffd7331b9d9515b912df4420a3a612b5ea2955bbeed2f) set(MINGW_HASH 5afe822af5c4edbf67daaf45eec61d538f49eef6b19524de64897c6b95828caf)
set(OPENSSL_HASH 344d0a79f1a9b08029b0744e2cc401a43f9c90acd1044d09a530b4885a8e9fc0) set(OPENSSL_HASH 529043b15cffa5f36077a4d0af83f3de399807181d607441d734196d889b641f)
set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591) set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591)
set(PUGIXML_HASH 655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a) set(PUGIXML_HASH 655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a)
set(ROCKSDB_HASH 3fdc9ca996971c4c039959866382c4a3a6c8ade4abf888f3b2ff77153e07bf28) set(ROCKSDB_HASH afccfab496556904900afacf7d99887f1d50cb893e5d2288bd502db233adacac)
set(SPDLOG_HASH 7a80896357f3e8e920e85e92633b14ba0f229c506e6f978578bdc35ba09e9a5d) set(SPDLOG_HASH 15a04e69c222eb6c01094b5c7ff8a249b36bb22788d72519646fb85feb267e67)
set(SQLITE_HASH 6cebd1d8403fc58c30e93939b246f3e6e58d0765a5cd50546f16c00fd805d2c3) set(SQLITE_HASH 9ad6d16cbc1df7cd55c8b55127c82a9bca5e9f287818de6dc87e04e73599d754)
set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3) set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3)
set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c) set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c)

View File

@@ -2,9 +2,9 @@ if(PROJECT_ENABLE_WINFSP AND PROJECT_IS_MINGW)
if(PROJECT_BUILD) if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_WINFSP) add_definitions(-DPROJECT_ENABLE_WINFSP)
include_directories(BEFORE SYSTEM ${PROJECT_3RD_PARTY_DIR}/winfsp-2.0/inc) include_directories(BEFORE SYSTEM ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/inc)
link_directories(BEFORE ${PROJECT_3RD_PARTY_DIR}/winfsp-2.0/lib) link_directories(BEFORE ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/lib)
if(PROJECT_IS_ARM64) if(PROJECT_IS_ARM64)
link_libraries(winfsp-a64) link_libraries(winfsp-a64)

View File

@@ -5,24 +5,23 @@ set(BOOST2_PATCH_VERSION 0)
set(BOOST_MAJOR_VERSION 1) set(BOOST_MAJOR_VERSION 1)
set(BOOST_MINOR_VERSION 88) set(BOOST_MINOR_VERSION 88)
set(BOOST_PATCH_VERSION 0) set(BOOST_PATCH_VERSION 0)
set(CPP_HTTPLIB_VERSION 0.20.0) set(CPP_HTTPLIB_VERSION 0.23.1)
set(CURL2_VERSION 8_13_0) set(CURL2_VERSION 8_15_0)
set(CURL_VERSION 8.13.0) set(CURL_VERSION 8.15.0)
set(EXPAT2_VERSION 2_7_1) set(EXPAT2_VERSION 2_7_1)
set(EXPAT_VERSION 2.7.1) set(EXPAT_VERSION 2.7.1)
set(GCC_VERSION 14.2.0) set(GCC_VERSION 15.1.0)
set(GTEST_VERSION 1.16.0) set(GTEST_VERSION 1.17.0)
set(ICU_VERSION 76-1) set(ICU_VERSION 76-1)
set(JSON_VERSION 3.12.0) set(JSON_VERSION 3.12.0)
set(LIBSODIUM_VERSION 1.0.20) set(LIBSODIUM_VERSION 1.0.20)
set(MESA_VERSION 23.3.3) set(MINGW_VERSION 13.0.0)
set(MINGW_VERSION 12.0.0) set(OPENSSL_VERSION 3.5.1)
set(OPENSSL_VERSION 3.5.0)
set(PKG_CONFIG_VERSION 0.29.2) set(PKG_CONFIG_VERSION 0.29.2)
set(PUGIXML_VERSION 1.15) set(PUGIXML_VERSION 1.15)
set(ROCKSDB_VERSION 10.0.1) set(ROCKSDB_VERSION 10.4.2)
set(SPDLOG_VERSION 1.15.2) set(SPDLOG_VERSION 1.15.3)
set(SQLITE2_VERSION 3.49.1) set(SQLITE2_VERSION 3.50.3)
set(SQLITE_VERSION 3490100) set(SQLITE_VERSION 3500300)
set(STDUUID_VERSION 1.2.3) set(STDUUID_VERSION 1.2.3)
set(ZLIB_VERSION 1.3.1) set(ZLIB_VERSION 1.3.1)

View File

@@ -9,8 +9,8 @@ PROJECT_COPYRIGHT="Copyright <2018-2025> <MIT License> <${PROJECT_URL}>"
PROJECT_DESC="Mount utility for Sia and S3" PROJECT_DESC="Mount utility for Sia and S3"
PROJECT_MAJOR_VERSION=2 PROJECT_MAJOR_VERSION=2
PROJECT_MINOR_VERSION=0 PROJECT_MINOR_VERSION=1
PROJECT_REVISION_VERSION=6 PROJECT_REVISION_VERSION=0
PROJECT_RELEASE_NUM=0 PROJECT_RELEASE_NUM=0
PROJECT_RELEASE_ITER=rc PROJECT_RELEASE_ITER=rc

View File

@@ -1,5 +1,5 @@
#comment #comment
FROM arm64v8/alpine:3.21.3 FROM arm64v8/alpine:3.21.4
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com> MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
CMD bash CMD bash

View File

@@ -1,5 +1,5 @@
#comment #comment
FROM alpine:3.21.3 FROM alpine:3.21.4
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com> MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
CMD bash CMD bash

View File

@@ -1,5 +1,5 @@
#comment #comment
FROM alpine:3.21.3 FROM alpine:3.21.4
RUN apk update RUN apk update
RUN apk upgrade RUN apk upgrade

View File

@@ -23,6 +23,7 @@
#define REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_ #define REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
#include "app_config.hpp" #include "app_config.hpp"
#include "comm/curl/curl_shared.hpp"
#include "comm/curl/multi_request.hpp" #include "comm/curl/multi_request.hpp"
#include "comm/i_http_comm.hpp" #include "comm/i_http_comm.hpp"
#include "events/event_system.hpp" #include "events/event_system.hpp"
@@ -48,14 +49,12 @@ private:
static const write_callback write_data; static const write_callback write_data;
static const write_callback write_headers; static const write_callback write_headers;
static constexpr std::uint8_t retry_request_count{5U};
private: private:
std::optional<host_config> host_config_; std::optional<host_config> host_config_;
std::optional<s3_config> s3_config_; std::optional<s3_config> s3_config_;
private:
bool use_s3_path_style_{false};
public: public:
[[nodiscard]] static auto create_curl() -> CURL *; [[nodiscard]] static auto create_curl() -> CURL *;
@@ -67,8 +66,7 @@ public:
const host_config &cfg) const host_config &cfg)
-> std::string; -> std::string;
[[nodiscard]] static auto create_host_config(const s3_config &cfg, [[nodiscard]] static auto create_host_config(const s3_config &cfg)
bool use_s3_path_style)
-> host_config; -> host_config;
[[nodiscard]] static auto url_encode(CURL *curl, const std::string &data, [[nodiscard]] static auto url_encode(CURL *curl, const std::string &data,
@@ -139,106 +137,128 @@ public:
long &response_code, stop_type &stop_requested) -> bool { long &response_code, stop_type &stop_requested) -> bool {
REPERTORY_USES_FUNCTION_NAME(); REPERTORY_USES_FUNCTION_NAME();
if (request.decryption_token.has_value() &&
not request.decryption_token.value().empty()) {
return make_encrypted_request(cfg, request, response_code,
stop_requested);
}
response_code = 0;
auto *curl = create_curl();
if (not request.set_method(curl, stop_requested)) {
return false;
}
if (not cfg.agent_string.empty()) {
curl_easy_setopt(curl, CURLOPT_USERAGENT, cfg.agent_string.c_str());
}
if (request.allow_timeout && cfg.timeout_ms) {
curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, cfg.timeout_ms);
}
std::string range_list{};
if (request.range.has_value()) {
range_list = std::to_string(request.range.value().begin) + '-' +
std::to_string(request.range.value().end);
curl_easy_setopt(curl, CURLOPT_RANGE, range_list.c_str());
}
if (request.response_headers.has_value()) {
curl_easy_setopt(curl, CURLOPT_HEADERDATA,
&request.response_headers.value());
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, write_headers);
}
read_write_info write_info{
{},
[&stop_requested]() -> bool {
return stop_requested || app_config::get_stop_requested();
},
};
if (request.response_handler.has_value()) {
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &write_info);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
}
std::string parameters{};
for (const auto &param : request.query) {
parameters += (parameters.empty() ? '?' : '&') + param.first + '=' +
url_encode(curl, param.second, false);
}
if (not cfg.api_password.empty()) {
curl_easy_setopt(curl, CURLOPT_USERNAME, cfg.api_user.c_str());
curl_easy_setopt(curl, CURLOPT_PASSWORD, cfg.api_password.c_str());
} else if (not cfg.api_user.empty()) {
curl_easy_setopt(curl, CURLOPT_USERNAME, cfg.api_user.c_str());
}
if (request.aws_service.has_value()) {
curl_easy_setopt(curl, CURLOPT_AWS_SIGV4,
request.aws_service.value().c_str());
}
curl_slist *header_list{nullptr};
if (not request.headers.empty()) {
for (const auto &header : request.headers) {
header_list = curl_slist_append(
header_list,
fmt::format("{}: {}", header.first, header.second).c_str());
}
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
}
auto url = construct_url(curl, request.get_path(), cfg) + parameters;
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
multi_request curl_request(curl, stop_requested);
CURLcode curl_code{}; CURLcode curl_code{};
curl_request.get_result(curl_code, response_code); const auto do_request = [&]() -> bool {
if (request.decryption_token.has_value() &&
not request.decryption_token.value().empty()) {
return make_encrypted_request(cfg, request, response_code,
stop_requested);
}
if (header_list != nullptr) { response_code = 0;
curl_slist_free_all(header_list);
auto *curl = create_curl();
if (not request.set_method(curl, stop_requested)) {
return false;
}
if (not cfg.agent_string.empty()) {
curl_easy_setopt(curl, CURLOPT_USERAGENT, cfg.agent_string.c_str());
}
if (request.allow_timeout && cfg.timeout_ms) {
curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, cfg.timeout_ms);
}
std::string range_list{};
if (request.range.has_value()) {
range_list = std::to_string(request.range.value().begin) + '-' +
std::to_string(request.range.value().end);
curl_easy_setopt(curl, CURLOPT_RANGE, range_list.c_str());
}
if (request.response_headers.has_value()) {
curl_easy_setopt(curl, CURLOPT_HEADERDATA,
&request.response_headers.value());
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, write_headers);
}
read_write_info write_info{
{},
[&stop_requested]() -> bool {
return stop_requested || app_config::get_stop_requested();
},
};
if (request.response_handler.has_value()) {
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &write_info);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
}
std::string parameters{};
for (const auto &param : request.query) {
parameters += (parameters.empty() ? '?' : '&') + param.first + '=' +
url_encode(curl, param.second, false);
}
if (not cfg.api_password.empty()) {
curl_easy_setopt(curl, CURLOPT_USERNAME, cfg.api_user.c_str());
curl_easy_setopt(curl, CURLOPT_PASSWORD, cfg.api_password.c_str());
} else if (not cfg.api_user.empty()) {
curl_easy_setopt(curl, CURLOPT_USERNAME, cfg.api_user.c_str());
}
if (request.aws_service.has_value()) {
curl_easy_setopt(curl, CURLOPT_AWS_SIGV4,
request.aws_service.value().c_str());
}
curl_slist *header_list{nullptr};
if (not request.headers.empty()) {
for (const auto &header : request.headers) {
header_list = curl_slist_append(
header_list,
fmt::format("{}: {}", header.first, header.second).c_str());
}
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
}
curl_shared::set_share(curl);
auto url = construct_url(curl, request.get_path(), cfg) + parameters;
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
multi_request curl_request(curl, stop_requested);
curl_code = CURLE_OK;
curl_request.get_result(curl_code, response_code);
if (header_list != nullptr) {
curl_slist_free_all(header_list);
}
if (curl_code != CURLE_OK) {
event_system::instance().raise<curl_error>(curl_code, function_name,
request.get_type(), url);
return false;
}
if (request.response_handler.has_value()) {
request.response_handler.value()(write_info.data, response_code);
}
return true;
};
bool ret{false};
for (std::uint8_t retry = 0U; !ret && retry < retry_request_count;
++retry) {
ret = do_request();
if (ret) {
break;
}
if (curl_code == CURLE_COULDNT_RESOLVE_HOST) {
std::this_thread::sleep_for(1s);
continue;
}
break;
} }
if (curl_code != CURLE_OK) { return ret;
event_system::instance().raise<curl_error>(curl_code, function_name, url);
return false;
}
if (request.response_handler.has_value()) {
request.response_handler.value()(write_info.data, response_code);
}
return true;
} }
public: public:
void enable_s3_path_style(bool enable) override;
[[nodiscard]] auto make_request(const curl::requests::http_delete &del, [[nodiscard]] auto make_request(const curl::requests::http_delete &del,
long &response_code, long &response_code,
stop_type &stop_requested) const stop_type &stop_requested) const

View File

@@ -0,0 +1,67 @@
/*
Copyright <2018-2025> <scott.e.graves@protonmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#ifndef REPERTORY_INCLUDE_COMM_CURL_CURL_SHARED_HPP_
#define REPERTORY_INCLUDE_COMM_CURL_CURL_SHARED_HPP_
namespace repertory {
class curl_shared final {
private:
struct curl_sh_deleter final {
void operator()(CURLSH *ptr) {
if (ptr != nullptr) {
curl_share_cleanup(ptr);
}
}
};
using curl_sh_t = std::unique_ptr<CURLSH, curl_sh_deleter>;
public:
curl_shared() = delete;
curl_shared(const curl_shared &) = delete;
curl_shared(curl_shared &&) = delete;
~curl_shared() = delete;
auto operator=(const curl_shared &) -> curl_shared & = delete;
auto operator=(curl_shared &&) -> curl_shared & = delete;
private:
static curl_sh_t cache_;
static std::recursive_mutex mtx_;
private:
static void lock_callback(CURL * /* curl */, curl_lock_data /* data */,
curl_lock_access /* access */, void * /* ptr */);
static void unlock_callback(CURL * /* curl */, curl_lock_data /* data */,
curl_lock_access /* access */, void * /* ptr */);
public:
static void cleanup();
[[nodiscard]] static auto init() -> bool;
static void set_share(CURL *curl);
};
} // namespace repertory
#endif // REPERTORY_INCLUDE_COMM_CURL_DNS_CACHE_HPP_

View File

@@ -26,11 +26,13 @@
namespace repertory::curl::requests { namespace repertory::curl::requests {
struct http_delete final : http_request_base { struct http_delete final : http_request_base {
~http_delete() override = default; [[nodiscard]] auto get_type() const -> std::string override {
return "delete";
}
[[nodiscard]] auto [[nodiscard]] auto set_method(CURL *curl,
set_method(CURL *curl, stop_type & /* stop_requested */) const
stop_type & /* stop_requested */) const -> bool override { -> bool override {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE"); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
return true; return true;
} }

View File

@@ -33,9 +33,11 @@ struct http_get final : http_request_base {
auto operator=(http_get &&) -> http_get & = default; auto operator=(http_get &&) -> http_get & = default;
~http_get() override = default; ~http_get() override = default;
[[nodiscard]] auto [[nodiscard]] auto get_type() const -> std::string override { return "get"; }
set_method(CURL *curl,
stop_type & /*stop_requested*/) const -> bool override { [[nodiscard]] auto set_method(CURL *curl,
stop_type & /*stop_requested*/) const
-> bool override {
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
return true; return true;
} }

View File

@@ -26,11 +26,11 @@
namespace repertory::curl::requests { namespace repertory::curl::requests {
struct http_head final : http_request_base { struct http_head final : http_request_base {
~http_head() override = default; [[nodiscard]] auto get_type() const -> std::string override { return "head"; }
[[nodiscard]] auto [[nodiscard]] auto set_method(CURL *curl,
set_method(CURL *curl, stop_type & /* stop_requested */) const
stop_type & /* stop_requested */) const -> bool override { -> bool override {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "HEAD"); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "HEAD");
curl_easy_setopt(curl, CURLOPT_NOBODY, 1L); curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
return true; return true;

View File

@@ -26,16 +26,10 @@
namespace repertory::curl::requests { namespace repertory::curl::requests {
struct http_post final : http_request_base { struct http_post final : http_request_base {
http_post() = default;
http_post(const http_post &) = default;
http_post(http_post &&) = default;
auto operator=(const http_post &) -> http_post & = default;
auto operator=(http_post &&) -> http_post & = default;
~http_post() override = default;
std::optional<nlohmann::json> json; std::optional<nlohmann::json> json;
[[nodiscard]] auto get_type() const -> std::string override { return "post"; }
[[nodiscard]] auto set_method(CURL *curl, [[nodiscard]] auto set_method(CURL *curl,
stop_type & /*stop_requested*/) const stop_type & /*stop_requested*/) const
-> bool override; -> bool override;

View File

@@ -27,18 +27,11 @@
namespace repertory::curl::requests { namespace repertory::curl::requests {
struct http_put_file final : http_request_base { struct http_put_file final : http_request_base {
http_put_file() = default;
http_put_file(const http_put_file &) = default;
http_put_file(http_put_file &&) = default;
auto operator=(const http_put_file &) -> http_put_file & = default;
auto operator=(http_put_file &&) -> http_put_file & = default;
~http_put_file() override = default;
std::shared_ptr<utils::encryption::encrypting_reader> reader; std::shared_ptr<utils::encryption::encrypting_reader> reader;
std::string source_path; std::string source_path;
[[nodiscard]] auto get_type() const -> std::string override { return "put"; }
[[nodiscard]] auto set_method(CURL *curl, stop_type &stop_requested) const [[nodiscard]] auto set_method(CURL *curl, stop_type &stop_requested) const
-> bool override; -> bool override;

View File

@@ -61,6 +61,8 @@ struct http_request_base {
[[nodiscard]] virtual auto get_path() const -> std::string { return path; } [[nodiscard]] virtual auto get_path() const -> std::string { return path; }
[[nodiscard]] virtual auto get_type() const -> std::string = 0;
[[nodiscard]] virtual auto set_method(CURL *curl, [[nodiscard]] virtual auto set_method(CURL *curl,
stop_type &stop_requested) const stop_type &stop_requested) const
-> bool = 0; -> bool = 0;

View File

@@ -34,28 +34,29 @@ struct i_http_comm {
INTERFACE_SETUP(i_http_comm); INTERFACE_SETUP(i_http_comm);
public: public:
virtual void enable_s3_path_style(bool enable) = 0;
[[nodiscard]] virtual auto [[nodiscard]] virtual auto
make_request(const curl::requests::http_delete &del, long &response_code, make_request(const curl::requests::http_delete &del, long &response_code,
stop_type &stop_requested) const -> bool = 0; stop_type &stop_requested) const -> bool = 0;
[[nodiscard]] virtual auto [[nodiscard]] virtual auto make_request(const curl::requests::http_get &get,
make_request(const curl::requests::http_get &get, long &response_code, long &response_code,
stop_type &stop_requested) const -> bool = 0; stop_type &stop_requested) const
-> bool = 0;
[[nodiscard]] virtual auto [[nodiscard]] virtual auto make_request(const curl::requests::http_head &head,
make_request(const curl::requests::http_head &head, long &response_code, long &response_code,
stop_type &stop_requested) const -> bool = 0; stop_type &stop_requested) const
-> bool = 0;
[[nodiscard]] virtual auto [[nodiscard]] virtual auto make_request(const curl::requests::http_post &post,
make_request(const curl::requests::http_post &post, long &response_code, long &response_code,
stop_type &stop_requested) const -> bool = 0; stop_type &stop_requested) const
-> bool = 0;
[[nodiscard]] virtual auto [[nodiscard]] virtual auto
make_request(const curl::requests::http_put_file &put_file, make_request(const curl::requests::http_put_file &put_file,
long &response_code, long &response_code, stop_type &stop_requested) const
stop_type &stop_requested) const -> bool = 0; -> bool = 0;
}; };
} // namespace repertory } // namespace repertory

View File

@@ -94,7 +94,7 @@ private:
bool shutdown_ = false; bool shutdown_ = false;
private: private:
static constexpr const auto min_pool_size = 10U; static constexpr auto min_pool_size = 10U;
public: public:
void execute(const std::string &client_id, std::uint64_t thread_id, void execute(const std::string &client_id, std::uint64_t thread_id,

View File

@@ -54,13 +54,13 @@ REPERTORY_IGNORE_WARNINGS_DISABLE()
using namespace std::chrono_literals; using namespace std::chrono_literals;
using json = nlohmann::json; using json = nlohmann::json;
inline constexpr const std::string_view REPERTORY{"repertory"}; inline constexpr std::string_view REPERTORY{"repertory"};
inline constexpr const std::string_view REPERTORY_DATA_NAME{"repertory2"}; inline constexpr std::string_view REPERTORY_DATA_NAME{"repertory2"};
inline constexpr const std::wstring_view REPERTORY_W{L"repertory"}; inline constexpr std::wstring_view REPERTORY_W{L"repertory"};
inline constexpr const std::uint64_t REPERTORY_CONFIG_VERSION{2ULL}; inline constexpr std::uint64_t REPERTORY_CONFIG_VERSION{2ULL};
inline constexpr const std::string_view REPERTORY_MIN_REMOTE_VERSION{"2.0.0"}; inline constexpr std::string_view REPERTORY_MIN_REMOTE_VERSION{"2.0.0"};
inline constexpr const std::string_view RENTERD_MIN_VERSION{"2.0.0"}; inline constexpr std::string_view RENTERD_MIN_VERSION{"2.0.0"};
#define REPERTORY_INVALID_HANDLE INVALID_HANDLE_VALUE #define REPERTORY_INVALID_HANDLE INVALID_HANDLE_VALUE

View File

@@ -64,17 +64,14 @@ protected:
[[nodiscard]] auto get_effective_uid() const -> uid_t; [[nodiscard]] auto get_effective_uid() const -> uid_t;
[[nodiscard]] static auto check_open_flags(int flags, int mask, [[nodiscard]] static auto check_open_flags(int flags, int mask,
const api_error &fail_error) api_error fail_error) -> api_error;
-> api_error;
[[nodiscard]] auto check_owner(const api_meta_map &meta) const -> api_error; [[nodiscard]] auto check_owner(const api_meta_map &meta) const -> api_error;
[[nodiscard]] static auto check_readable(int flags, [[nodiscard]] static auto check_readable(int flags, api_error fail_error)
const api_error &fail_error)
-> api_error; -> api_error;
[[nodiscard]] static auto check_writeable(int flags, [[nodiscard]] static auto check_writeable(int flags, api_error fail_error)
const api_error &fail_error)
-> api_error; -> api_error;
#if defined(__APPLE__) #if defined(__APPLE__)

View File

@@ -38,10 +38,12 @@ public:
private: private:
const app_config &config_; const app_config &config_;
packet_client packet_client_; packet_client packet_client_;
remote::user_id uid_ = 0; remote::user_id uid_{0};
remote::group_id gid_ = 0; remote::group_id gid_{0};
public: public:
[[nodiscard]] auto check() -> packet::error_type;
[[nodiscard]] auto fuse_access(const char *path, const std::int32_t &mask) [[nodiscard]] auto fuse_access(const char *path, const std::int32_t &mask)
-> packet::error_type override; -> packet::error_type override;
@@ -51,9 +53,9 @@ public:
[[nodiscard]] auto fuse_chmod(const char *path, const remote::file_mode &mode) [[nodiscard]] auto fuse_chmod(const char *path, const remote::file_mode &mode)
-> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_chown(const char *path, const remote::user_id &uid,
fuse_chown(const char *path, const remote::user_id &uid, const remote::group_id &gid)
const remote::group_id &gid) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto fuse_destroy() -> packet::error_type override; [[nodiscard]] auto fuse_destroy() -> packet::error_type override;
@@ -67,21 +69,23 @@ public:
const remote::file_handle &handle) const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto fuse_fsetattr_x( [[nodiscard]] auto fuse_fsetattr_x(const char *path,
const char *path, const remote::setattr_x &attr, const remote::setattr_x &attr,
const remote::file_handle &handle) -> packet::error_type override; const remote::file_handle &handle)
-> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_fsync(const char *path, const std::int32_t &datasync,
fuse_fsync(const char *path, const std::int32_t &datasync, const remote::file_handle &handle)
const remote::file_handle &handle) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto fuse_ftruncate( [[nodiscard]] auto fuse_ftruncate(const char *path,
const char *path, const remote::file_offset &size, const remote::file_offset &size,
const remote::file_handle &handle) -> packet::error_type override; const remote::file_handle &handle)
-> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_getattr(const char *path, remote::stat &st,
fuse_getattr(const char *path, remote::stat &st, bool &directory)
bool &directory) -> packet::error_type override; -> packet::error_type override;
/*[[nodiscard]] packet::error_type fuse_getxattr(const char *path, const char /*[[nodiscard]] packet::error_type fuse_getxattr(const char *path, const char
*name, char *value, const remote::file_size &size) override ; *name, char *value, const remote::file_size &size) override ;
@@ -90,9 +94,10 @@ public:
*name, char *value, const remote::file_size &size, std::uint32_t position) *name, char *value, const remote::file_size &size, std::uint32_t position)
override ;*/ override ;*/
[[nodiscard]] auto [[nodiscard]] auto fuse_getxtimes(const char *path,
fuse_getxtimes(const char *path, remote::file_time &bkuptime, remote::file_time &bkuptime,
remote::file_time &crtime) -> packet::error_type override; remote::file_time &crtime)
-> packet::error_type override;
[[nodiscard]] auto fuse_init() -> packet::error_type override; [[nodiscard]] auto fuse_init() -> packet::error_type override;
@@ -107,25 +112,27 @@ public:
[[nodiscard]] auto [[nodiscard]] auto
fuse_create(const char *path, const remote::file_mode &mode, fuse_create(const char *path, const remote::file_mode &mode,
const remote::open_flags &flags, const remote::open_flags &flags, remote::file_handle &handle)
remote::file_handle &handle) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_open(const char *path,
fuse_open(const char *path, const remote::open_flags &flags, const remote::open_flags &flags,
remote::file_handle &handle) -> packet::error_type override; remote::file_handle &handle)
-> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_read(const char *path, char *buffer,
fuse_read(const char *path, char *buffer, const remote::file_size &read_size, const remote::file_size &read_size,
const remote::file_offset &read_offset, const remote::file_offset &read_offset,
const remote::file_handle &handle) -> packet::error_type override; const remote::file_handle &handle)
-> packet::error_type override;
[[nodiscard]] auto fuse_rename(const char *from, [[nodiscard]] auto fuse_rename(const char *from, const char *to)
const char *to) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto
fuse_readdir(const char *path, const remote::file_offset &offset, fuse_readdir(const char *path, const remote::file_offset &offset,
const remote::file_handle &handle, const remote::file_handle &handle, std::string &item_path)
std::string &item_path) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto fuse_release(const char *path, [[nodiscard]] auto fuse_release(const char *path,
const remote::file_handle &handle) const remote::file_handle &handle)
@@ -139,8 +146,8 @@ public:
* char *name) override * char *name) override
* ;*/ * ;*/
[[nodiscard]] auto [[nodiscard]] auto fuse_rmdir(const char *path)
fuse_rmdir(const char *path) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto fuse_setattr_x(const char *path, remote::setattr_x &attr) [[nodiscard]] auto fuse_setattr_x(const char *path, remote::setattr_x &attr)
-> packet::error_type override; -> packet::error_type override;
@@ -157,8 +164,8 @@ public:
const remote::file_time &crtime) const remote::file_time &crtime)
-> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_setvolname(const char *volname)
fuse_setvolname(const char *volname) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] /*packet::error_type fuse_setxattr(const char *path, const char [[nodiscard]] /*packet::error_type fuse_setxattr(const char *path, const char
*name, const char *value, const remote::file_size &size, const std::int32_t *name, const char *value, const remote::file_size &size, const std::int32_t
@@ -169,45 +176,48 @@ public:
std::int32_t &flags, std::uint32_t position) override ;*/ std::int32_t &flags, std::uint32_t position) override ;*/
[[nodiscard]] auto [[nodiscard]] auto
fuse_statfs(const char *path, std::uint64_t frsize, fuse_statfs(const char *path, std::uint64_t frsize, remote::statfs &st)
remote::statfs &st) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_statfs_x(const char *path, std::uint64_t bsize,
fuse_statfs_x(const char *path, std::uint64_t bsize, remote::statfs_x &st)
remote::statfs_x &st) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_truncate(const char *path,
fuse_truncate(const char *path, const remote::file_offset &size)
const remote::file_offset &size) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_unlink(const char *path)
fuse_unlink(const char *path) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_utimens(const char *path, const remote::file_time *tv,
fuse_utimens(const char *path, const remote::file_time *tv, std::uint64_t op0, std::uint64_t op0, std::uint64_t op1)
std::uint64_t op1) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto [[nodiscard]] auto fuse_write(const char *path, const char *buffer,
fuse_write(const char *path, const char *buffer, const remote::file_size &write_size,
const remote::file_size &write_size, const remote::file_offset &write_offset,
const remote::file_offset &write_offset, const remote::file_handle &handle)
const remote::file_handle &handle) -> packet::error_type override; -> packet::error_type override;
[[nodiscard]] auto fuse_write_base64( [[nodiscard]] auto fuse_write_base64(const char *path, const char *buffer,
const char *path, const char *buffer, const remote::file_size &write_size, const remote::file_size &write_size,
const remote::file_offset &write_offset, const remote::file_offset &write_offset,
const remote::file_handle &handle) -> packet::error_type override; const remote::file_handle &handle)
-> packet::error_type override;
[[nodiscard]] auto json_create_directory_snapshot( [[nodiscard]] auto json_create_directory_snapshot(const std::string &path,
const std::string &path, json &json_data) -> packet::error_type override; json &json_data)
-> packet::error_type override;
[[nodiscard]] auto json_read_directory_snapshot( [[nodiscard]] auto json_read_directory_snapshot(
const std::string &path, const remote::file_handle &handle, const std::string &path, const remote::file_handle &handle,
std::uint32_t page, json &json_data) -> packet::error_type override; std::uint32_t page, json &json_data) -> packet::error_type override;
[[nodiscard]] auto json_release_directory_snapshot( [[nodiscard]] auto
const std::string &path, json_release_directory_snapshot(const std::string &path,
const remote::file_handle &handle) -> packet::error_type override; const remote::file_handle &handle)
-> packet::error_type override;
void set_fuse_uid_gid(const remote::user_id &uid, void set_fuse_uid_gid(const remote::user_id &uid,
const remote::group_id &gid) override; const remote::group_id &gid) override;

View File

@@ -103,6 +103,13 @@ private:
private: private:
const std::unordered_map<std::string, handler_callback> handler_lookup_ = { const std::unordered_map<std::string, handler_callback> handler_lookup_ = {
{
"::check",
[this](auto && /* service_flags */, auto && /* client_id */,
auto && /* thread_id */, auto && /* method */,
auto && /* request */,
auto && /* response */) -> auto { return 0; },
},
{ {
"::fuse_access", "::fuse_access",
[this](auto && /* service_flags */, auto && /* client_id */, [this](auto && /* service_flags */, auto && /* client_id */,

View File

@@ -29,87 +29,92 @@ class i_remote_instance : public virtual i_remote_json {
INTERFACE_SETUP(i_remote_instance); INTERFACE_SETUP(i_remote_instance);
public: public:
virtual auto winfsp_can_delete(PVOID file_desc, PWSTR file_name) [[nodiscard]] virtual auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_cleanup(PVOID file_desc, PWSTR file_name, UINT32 flags, [[nodiscard]] virtual auto winfsp_cleanup(PVOID file_desc, PWSTR file_name,
BOOLEAN &was_deleted) -> packet::error_type = 0; UINT32 flags, BOOLEAN &was_deleted)
virtual auto winfsp_close(PVOID file_desc) -> packet::error_type = 0;
virtual auto winfsp_create(PWSTR file_name, UINT32 create_options,
UINT32 granted_access, UINT32 file_attributes,
UINT64 allocation_size, PVOID *file_desc,
remote::file_info *file_info,
std::string &normalized_name, BOOLEAN &exists)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_flush(PVOID file_desc, remote::file_info *file_info) [[nodiscard]] virtual auto winfsp_close(PVOID file_desc)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr) [[nodiscard]] virtual auto
winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
UINT32 file_attributes, UINT64 allocation_size,
PVOID *file_desc, remote::file_info *file_info,
std::string &normalized_name, BOOLEAN &exists)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_get_file_info(PVOID file_desc, [[nodiscard]] virtual auto winfsp_flush(PVOID file_desc,
remote::file_info *file_info) remote::file_info *file_info)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto [[nodiscard]] virtual auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
-> packet::error_type = 0;
[[nodiscard]] virtual auto winfsp_get_file_info(PVOID file_desc,
remote::file_info *file_info)
-> packet::error_type = 0;
[[nodiscard]] virtual auto
winfsp_get_security_by_name(PWSTR file_name, PUINT32 file_attributes, winfsp_get_security_by_name(PWSTR file_name, PUINT32 file_attributes,
std::uint64_t *security_descriptor_size, std::uint64_t *security_descriptor_size,
std::wstring &str_descriptor) std::wstring &str_descriptor)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_get_volume_info(UINT64 &total_size, UINT64 &free_size, [[nodiscard]] virtual auto winfsp_get_volume_info(UINT64 &total_size,
std::string &volume_label) UINT64 &free_size,
std::string &volume_label)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_mounted(const std::wstring &location) [[nodiscard]] virtual auto winfsp_mounted(const std::wstring &location)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_open(PWSTR file_name, UINT32 create_options, [[nodiscard]] virtual auto
UINT32 granted_access, PVOID *file_desc, winfsp_open(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
remote::file_info *file_info, PVOID *file_desc, remote::file_info *file_info,
std::string &normalized_name) std::string &normalized_name) -> packet::error_type = 0;
[[nodiscard]] virtual auto
winfsp_overwrite(PVOID file_desc, UINT32 file_attributes,
BOOLEAN replace_file_attributes, UINT64 allocation_size,
remote::file_info *file_info) -> packet::error_type = 0;
[[nodiscard]] virtual auto winfsp_read(PVOID file_desc, PVOID buffer,
UINT64 offset, UINT32 length,
PUINT32 bytes_transferred)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_overwrite(PVOID file_desc, UINT32 file_attributes, [[nodiscard]] virtual auto winfsp_read_directory(PVOID file_desc,
BOOLEAN replace_file_attributes, PWSTR pattern, PWSTR marker,
UINT64 allocation_size, json &itemList)
remote::file_info *file_info)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset, [[nodiscard]] virtual auto winfsp_rename(PVOID file_desc, PWSTR file_name,
UINT32 length, PUINT32 bytes_transferred) PWSTR new_file_name,
BOOLEAN replace_if_exists)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_read_directory(PVOID file_desc, PWSTR pattern, [[nodiscard]] virtual auto
PWSTR marker, json &itemList) winfsp_set_basic_info(PVOID file_desc, UINT32 file_attributes,
UINT64 creation_time, UINT64 last_access_time,
UINT64 last_write_time, UINT64 change_time,
remote::file_info *file_info) -> packet::error_type = 0;
[[nodiscard]] virtual auto winfsp_set_file_size(PVOID file_desc,
UINT64 new_size,
BOOLEAN set_allocation_size,
remote::file_info *file_info)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_rename(PVOID file_desc, PWSTR file_name, [[nodiscard]] virtual auto winfsp_unmounted(const std::wstring &location)
PWSTR new_file_name, BOOLEAN replace_if_exists)
-> packet::error_type = 0; -> packet::error_type = 0;
virtual auto winfsp_set_basic_info(PVOID file_desc, UINT32 file_attributes, [[nodiscard]] virtual auto
UINT64 creation_time, winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
UINT64 last_access_time, BOOLEAN write_to_end, BOOLEAN constrained_io,
UINT64 last_write_time, UINT64 change_time, PUINT32 bytes_transferred, remote::file_info *file_info)
remote::file_info *file_info)
-> packet::error_type = 0;
virtual auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
BOOLEAN set_allocation_size,
remote::file_info *file_info)
-> packet::error_type = 0;
virtual auto winfsp_unmounted(const std::wstring &location)
-> packet::error_type = 0;
virtual auto winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset,
UINT32 length, BOOLEAN write_to_end,
BOOLEAN constrained_io, PUINT32 bytes_transferred,
remote::file_info *file_info)
-> packet::error_type = 0; -> packet::error_type = 0;
}; };

View File

@@ -44,93 +44,105 @@ private:
#if defined(_WIN32) #if defined(_WIN32)
#define to_handle(x) (x) #define to_handle(x) (x)
#else // !defined(_WIN32) #else // !defined(_WIN32)
static auto to_handle(PVOID file_desc) -> native_handle; [[nodiscard]] static auto to_handle(PVOID file_desc) -> native_handle;
#endif // defined(_WIN32) #endif // defined(_WIN32)
public: public:
auto json_create_directory_snapshot(const std::string &path, json &json_data) [[nodiscard]] auto check() -> packet::error_type;
[[nodiscard]] auto json_create_directory_snapshot(const std::string &path,
json &json_data)
-> packet::error_type override; -> packet::error_type override;
auto json_read_directory_snapshot(const std::string &path, [[nodiscard]] auto json_read_directory_snapshot(
const remote::file_handle &handle, const std::string &path, const remote::file_handle &handle,
std::uint32_t page, json &json_data) std::uint32_t page, json &json_data) -> packet::error_type override;
[[nodiscard]] auto
json_release_directory_snapshot(const std::string &path,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto json_release_directory_snapshot(const std::string &path, [[nodiscard]] auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_can_delete(PVOID file_desc, PWSTR file_name) [[nodiscard]] auto winfsp_cleanup(PVOID file_desc, PWSTR file_name,
UINT32 flags, BOOLEAN &was_deleted)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_cleanup(PVOID file_desc, PWSTR file_name, UINT32 flags, [[nodiscard]] auto winfsp_close(PVOID file_desc)
BOOLEAN &was_deleted) -> packet::error_type override;
auto winfsp_close(PVOID file_desc) -> packet::error_type override;
auto winfsp_create(PWSTR file_name, UINT32 create_options,
UINT32 granted_access, UINT32 attributes,
UINT64 allocation_size, PVOID *file_desc,
remote::file_info *file_info, std::string &normalized_name,
BOOLEAN &exists) -> packet::error_type override;
auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr) [[nodiscard]] auto
winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
UINT32 attributes, UINT64 allocation_size, PVOID *file_desc,
remote::file_info *file_info, std::string &normalized_name,
BOOLEAN &exists) -> packet::error_type override;
[[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_get_file_info(PVOID file_desc, remote::file_info *file_info) [[nodiscard]] auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_get_security_by_name(PWSTR file_name, PUINT32 attributes, [[nodiscard]] auto winfsp_get_file_info(PVOID file_desc,
std::uint64_t *descriptor_size, remote::file_info *file_info)
std::wstring &string_descriptor)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_get_volume_info(UINT64 &total_size, UINT64 &free_size, [[nodiscard]] auto winfsp_get_security_by_name(
std::string &volume_label) PWSTR file_name, PUINT32 attributes, std::uint64_t *descriptor_size,
std::wstring &string_descriptor) -> packet::error_type override;
[[nodiscard]] auto winfsp_get_volume_info(UINT64 &total_size,
UINT64 &free_size,
std::string &volume_label)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_mounted(const std::wstring &location) [[nodiscard]] auto winfsp_mounted(const std::wstring &location)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_open(PWSTR file_name, UINT32 create_options, [[nodiscard]] auto winfsp_open(PWSTR file_name, UINT32 create_options,
UINT32 granted_access, PVOID *file_desc, UINT32 granted_access, PVOID *file_desc,
remote::file_info *file_info, std::string &normalized_name) remote::file_info *file_info,
std::string &normalized_name)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_overwrite(PVOID file_desc, UINT32 attributes, [[nodiscard]] auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
BOOLEAN replace_attributes, UINT64 allocation_size, BOOLEAN replace_attributes,
remote::file_info *file_info) UINT64 allocation_size,
remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length, [[nodiscard]] auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset,
PUINT32 bytes_transferred) -> packet::error_type override; UINT32 length, PUINT32 bytes_transferred)
auto winfsp_read_directory(PVOID file_desc, PWSTR pattern, PWSTR marker,
json &itemList) -> packet::error_type override;
auto winfsp_rename(PVOID file_desc, PWSTR file_name, PWSTR new_file_name,
BOOLEAN replace_if_exists) -> packet::error_type override;
auto winfsp_set_basic_info(PVOID file_desc, UINT32 attributes,
UINT64 creation_time, UINT64 last_access_time,
UINT64 last_write_time, UINT64 change_time,
remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size, [[nodiscard]] auto winfsp_read_directory(PVOID file_desc, PWSTR pattern,
BOOLEAN set_allocation_size, PWSTR marker, json &itemList)
remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_unmounted(const std::wstring &location) [[nodiscard]] auto winfsp_rename(PVOID file_desc, PWSTR file_name,
PWSTR new_file_name,
BOOLEAN replace_if_exists)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length, [[nodiscard]] auto winfsp_set_basic_info(
BOOLEAN write_to_end, BOOLEAN constrained_io, PVOID file_desc, UINT32 attributes, UINT64 creation_time,
PUINT32 bytes_transferred, remote::file_info *file_info) UINT64 last_access_time, UINT64 last_write_time, UINT64 change_time,
remote::file_info *file_info) -> packet::error_type override;
[[nodiscard]] auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
BOOLEAN set_allocation_size,
remote::file_info *file_info)
-> packet::error_type override;
[[nodiscard]] auto winfsp_unmounted(const std::wstring &location)
-> packet::error_type override;
[[nodiscard]] auto
winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
BOOLEAN write_to_end, BOOLEAN constrained_io,
PUINT32 bytes_transferred, remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
}; };
} // namespace remote_winfsp } // namespace remote_winfsp

View File

@@ -58,41 +58,46 @@ private:
public: public:
// FUSE Layer // FUSE Layer
auto fuse_access(const char *path, const std::int32_t &mask) [[nodiscard]] auto fuse_access(const char *path, const std::int32_t &mask)
-> packet::error_type override; -> packet::error_type override;
auto fuse_chflags(const char *path, std::uint32_t flags) [[nodiscard]] auto fuse_chflags(const char *path, std::uint32_t flags)
-> packet::error_type override; -> packet::error_type override;
auto fuse_chmod(const char *path, const remote::file_mode &mode) [[nodiscard]] auto fuse_chmod(const char *path, const remote::file_mode &mode)
-> packet::error_type override; -> packet::error_type override;
auto fuse_chown(const char *path, const remote::user_id &uid, [[nodiscard]] auto fuse_chown(const char *path, const remote::user_id &uid,
const remote::group_id &gid) -> packet::error_type override; const remote::group_id &gid)
-> packet::error_type override;
auto fuse_destroy() -> packet::error_type override; [[nodiscard]] auto fuse_destroy() -> packet::error_type override;
/*packet::error_type fuse_fallocate(const char *path, const std::int32_t /*packet::error_type fuse_fallocate(const char *path, const std::int32_t
&mode, const remote::file_offset &offset, const remote::file_offset &mode, const remote::file_offset &offset, const remote::file_offset
&length, const remote::file_handle &handle) override ;*/ &length, const remote::file_handle &handle) override ;*/
auto fuse_fgetattr(const char *path, remote::stat &r_stat, bool &directory, [[nodiscard]] auto fuse_fgetattr(const char *path, remote::stat &r_stat,
const remote::file_handle &handle) bool &directory,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_fsetattr_x(const char *path, const remote::setattr_x &attr, [[nodiscard]] auto fuse_fsetattr_x(const char *path,
const remote::file_handle &handle) const remote::setattr_x &attr,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_fsync(const char *path, const std::int32_t &datasync, [[nodiscard]] auto fuse_fsync(const char *path, const std::int32_t &datasync,
const remote::file_handle &handle) const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_ftruncate(const char *path, const remote::file_offset &size, [[nodiscard]] auto fuse_ftruncate(const char *path,
const remote::file_handle &handle) const remote::file_offset &size,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_getattr(const char *path, remote::stat &r_stat, bool &directory) [[nodiscard]] auto fuse_getattr(const char *path, remote::stat &r_stat,
bool &directory)
-> packet::error_type override; -> packet::error_type override;
/*packet::error_type fuse_getxattr(const char *path, const char *name, char /*packet::error_type fuse_getxattr(const char *path, const char *name, char
@@ -101,77 +106,90 @@ public:
packet::error_type fuse_getxattrOSX(const char *path, const char *name, char packet::error_type fuse_getxattrOSX(const char *path, const char *name, char
*value, const remote::file_size &size, std::uint32_t position) override ;*/ *value, const remote::file_size &size, std::uint32_t position) override ;*/
auto fuse_getxtimes(const char *path, remote::file_time &bkuptime, [[nodiscard]] auto fuse_getxtimes(const char *path,
remote::file_time &crtime) -> packet::error_type override; remote::file_time &bkuptime,
remote::file_time &crtime)
-> packet::error_type override;
auto fuse_init() -> packet::error_type override; [[nodiscard]] auto fuse_init() -> packet::error_type override;
/*packet::error_type fuse_listxattr(const char *path, char *buffer, /*packet::error_type fuse_listxattr(const char *path, char *buffer,
const remote::file_size &size) override const remote::file_size &size) override
;*/ ;*/
auto fuse_mkdir(const char *path, const remote::file_mode &mode) [[nodiscard]] auto fuse_mkdir(const char *path, const remote::file_mode &mode)
-> packet::error_type override; -> packet::error_type override;
auto fuse_opendir(const char *path, remote::file_handle &handle) [[nodiscard]] auto fuse_opendir(const char *path, remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_create(const char *path, const remote::file_mode &mode, [[nodiscard]] auto
const remote::open_flags &flags, remote::file_handle &handle) fuse_create(const char *path, const remote::file_mode &mode,
const remote::open_flags &flags, remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_open(const char *path, const remote::open_flags &flags, [[nodiscard]] auto fuse_open(const char *path,
remote::file_handle &handle) -> packet::error_type override; const remote::open_flags &flags,
remote::file_handle &handle)
auto fuse_read(const char *path, char *buffer,
const remote::file_size &read_size,
const remote::file_offset &read_offset,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_rename(const char *from, const char *to) [[nodiscard]] auto fuse_read(const char *path, char *buffer,
const remote::file_size &read_size,
const remote::file_offset &read_offset,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_write(const char *path, const char *buffer, [[nodiscard]] auto fuse_rename(const char *from, const char *to)
const remote::file_size &write_size,
const remote::file_offset &write_offset,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_write_base64(const char *path, const char *buffer, [[nodiscard]] auto fuse_write(const char *path, const char *buffer,
const remote::file_size &write_size, const remote::file_size &write_size,
const remote::file_offset &write_offset, const remote::file_offset &write_offset,
const remote::file_handle &handle) const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_readdir(const char *path, const remote::file_offset &offset, [[nodiscard]] auto fuse_write_base64(const char *path, const char *buffer,
const remote::file_handle &handle, std::string &item_path) const remote::file_size &write_size,
const remote::file_offset &write_offset,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
auto fuse_release(const char *path, const remote::file_handle &handle) [[nodiscard]] auto
fuse_readdir(const char *path, const remote::file_offset &offset,
const remote::file_handle &handle, std::string &item_path)
-> packet::error_type override; -> packet::error_type override;
auto fuse_releasedir(const char *path, const remote::file_handle &handle) [[nodiscard]] auto fuse_release(const char *path,
const remote::file_handle &handle)
-> packet::error_type override;
[[nodiscard]] auto fuse_releasedir(const char *path,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
/*packet::error_type fuse_removexattr(const char *path, const char *name) /*packet::error_type fuse_removexattr(const char *path, const char *name)
* override ;*/ * override ;*/
auto fuse_rmdir(const char *path) -> packet::error_type override; [[nodiscard]] auto fuse_rmdir(const char *path)
auto fuse_setattr_x(const char *path, remote::setattr_x &attr)
-> packet::error_type override; -> packet::error_type override;
auto fuse_setbkuptime(const char *path, const remote::file_time &bkuptime) [[nodiscard]] auto fuse_setattr_x(const char *path, remote::setattr_x &attr)
-> packet::error_type override; -> packet::error_type override;
auto fuse_setchgtime(const char *path, const remote::file_time &chgtime) [[nodiscard]] auto fuse_setbkuptime(const char *path,
const remote::file_time &bkuptime)
-> packet::error_type override; -> packet::error_type override;
auto fuse_setcrtime(const char *path, const remote::file_time &crtime) [[nodiscard]] auto fuse_setchgtime(const char *path,
const remote::file_time &chgtime)
-> packet::error_type override; -> packet::error_type override;
auto fuse_setvolname(const char *volname) -> packet::error_type override; [[nodiscard]] auto fuse_setcrtime(const char *path,
const remote::file_time &crtime)
-> packet::error_type override;
[[nodiscard]] auto fuse_setvolname(const char *volname)
-> packet::error_type override;
/*packet::error_type fuse_setxattr(const char *path, const char *name, const /*packet::error_type fuse_setxattr(const char *path, const char *name, const
char *value, const remote::file_size &size, const std::int32_t &flags) char *value, const remote::file_size &size, const std::int32_t &flags)
@@ -181,109 +199,123 @@ public:
char *value, const remote::file_size &size, const std::int32_t &flags, char *value, const remote::file_size &size, const std::int32_t &flags,
std::uint32_t position) override ;*/ std::uint32_t position) override ;*/
auto fuse_statfs(const char *path, std::uint64_t frsize, [[nodiscard]] auto fuse_statfs(const char *path, std::uint64_t frsize,
remote::statfs &r_stat) -> packet::error_type override; remote::statfs &r_stat)
auto fuse_statfs_x(const char *path, std::uint64_t bsize,
remote::statfs_x &r_stat) -> packet::error_type override;
auto fuse_truncate(const char *path, const remote::file_offset &size)
-> packet::error_type override; -> packet::error_type override;
auto fuse_unlink(const char *path) -> packet::error_type override; [[nodiscard]] auto fuse_statfs_x(const char *path, std::uint64_t bsize,
remote::statfs_x &r_stat)
-> packet::error_type override;
auto fuse_utimens(const char *path, const remote::file_time *tv, [[nodiscard]] auto fuse_truncate(const char *path,
std::uint64_t op0, std::uint64_t op1) const remote::file_offset &size)
-> packet::error_type override;
[[nodiscard]] auto fuse_unlink(const char *path)
-> packet::error_type override;
[[nodiscard]] auto fuse_utimens(const char *path, const remote::file_time *tv,
std::uint64_t op0, std::uint64_t op1)
-> packet::error_type override; -> packet::error_type override;
void set_fuse_uid_gid(const remote::user_id & /* uid */, void set_fuse_uid_gid(const remote::user_id & /* uid */,
const remote::group_id & /* gid */) override {} const remote::group_id & /* gid */) override {}
// JSON Layer // JSON Layer
auto json_create_directory_snapshot(const std::string &path, json &json_data) [[nodiscard]] auto json_create_directory_snapshot(const std::string &path,
json &json_data)
-> packet::error_type override; -> packet::error_type override;
auto json_read_directory_snapshot(const std::string &path, [[nodiscard]] auto json_read_directory_snapshot(
const remote::file_handle &handle, const std::string &path, const remote::file_handle &handle,
std::uint32_t page, json &json_data) std::uint32_t page, json &json_data) -> packet::error_type override;
-> packet::error_type override;
auto json_release_directory_snapshot(const std::string &path, [[nodiscard]] auto
const remote::file_handle &handle) json_release_directory_snapshot(const std::string &path,
const remote::file_handle &handle)
-> packet::error_type override; -> packet::error_type override;
// WinFSP Layer // WinFSP Layer
auto winfsp_can_delete(PVOID file_desc, PWSTR file_name) [[nodiscard]] auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_cleanup(PVOID file_desc, PWSTR file_name, UINT32 flags, [[nodiscard]] auto winfsp_cleanup(PVOID file_desc, PWSTR file_name,
BOOLEAN &was_deleted) -> packet::error_type override; UINT32 flags, BOOLEAN &was_deleted)
auto winfsp_close(PVOID file_desc) -> packet::error_type override;
auto winfsp_create(PWSTR file_name, UINT32 create_options,
UINT32 granted_access, UINT32 attributes,
UINT64 allocation_size, PVOID *file_desc,
remote::file_info *file_info, std::string &normalized_name,
BOOLEAN &exists) -> packet::error_type override;
auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr) [[nodiscard]] auto winfsp_close(PVOID file_desc)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_get_file_info(PVOID file_desc, remote::file_info *file_info) [[nodiscard]] auto
winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
UINT32 attributes, UINT64 allocation_size, PVOID *file_desc,
remote::file_info *file_info, std::string &normalized_name,
BOOLEAN &exists) -> packet::error_type override;
[[nodiscard]] auto winfsp_flush(PVOID file_desc, remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_get_security_by_name(PWSTR file_name, PUINT32 attributes, [[nodiscard]] auto winfsp_get_dir_buffer(PVOID file_desc, PVOID *&ptr)
std::uint64_t *descriptor_size,
std::wstring &string_descriptor)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_get_volume_info(UINT64 &total_size, UINT64 &free_size, [[nodiscard]] auto winfsp_get_file_info(PVOID file_desc,
std::string &volume_label) remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_mounted(const std::wstring &location) [[nodiscard]] auto winfsp_get_security_by_name(
PWSTR file_name, PUINT32 attributes, std::uint64_t *descriptor_size,
std::wstring &string_descriptor) -> packet::error_type override;
[[nodiscard]] auto winfsp_get_volume_info(UINT64 &total_size,
UINT64 &free_size,
std::string &volume_label)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_open(PWSTR file_name, UINT32 create_options, [[nodiscard]] auto winfsp_mounted(const std::wstring &location)
UINT32 granted_access, PVOID *file_desc,
remote::file_info *file_info, std::string &normalized_name)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_overwrite(PVOID file_desc, UINT32 attributes, [[nodiscard]] auto winfsp_open(PWSTR file_name, UINT32 create_options,
BOOLEAN replace_attributes, UINT64 allocation_size, UINT32 granted_access, PVOID *file_desc,
remote::file_info *file_info) remote::file_info *file_info,
std::string &normalized_name)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length, [[nodiscard]] auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
PUINT32 bytes_transferred) -> packet::error_type override; BOOLEAN replace_attributes,
UINT64 allocation_size,
auto winfsp_read_directory(PVOID file_desc, PWSTR pattern, PWSTR marker, remote::file_info *file_info)
json &item_list) -> packet::error_type override;
auto winfsp_rename(PVOID file_desc, PWSTR file_name, PWSTR new_file_name,
BOOLEAN replace_if_exists) -> packet::error_type override;
auto winfsp_set_basic_info(PVOID file_desc, UINT32 attributes,
UINT64 creation_time, UINT64 last_access_time,
UINT64 last_write_time, UINT64 change_time,
remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size, [[nodiscard]] auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset,
BOOLEAN set_allocation_size, UINT32 length, PUINT32 bytes_transferred)
remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_unmounted(const std::wstring &location) [[nodiscard]] auto winfsp_read_directory(PVOID file_desc, PWSTR pattern,
PWSTR marker, json &item_list)
-> packet::error_type override; -> packet::error_type override;
auto winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length, [[nodiscard]] auto winfsp_rename(PVOID file_desc, PWSTR file_name,
BOOLEAN write_to_end, BOOLEAN constrained_io, PWSTR new_file_name,
PUINT32 bytes_transferred, remote::file_info *file_info) BOOLEAN replace_if_exists)
-> packet::error_type override;
[[nodiscard]] auto winfsp_set_basic_info(
PVOID file_desc, UINT32 attributes, UINT64 creation_time,
UINT64 last_access_time, UINT64 last_write_time, UINT64 change_time,
remote::file_info *file_info) -> packet::error_type override;
[[nodiscard]] auto winfsp_set_file_size(PVOID file_desc, UINT64 new_size,
BOOLEAN set_allocation_size,
remote::file_info *file_info)
-> packet::error_type override;
[[nodiscard]] auto winfsp_unmounted(const std::wstring &location)
-> packet::error_type override;
[[nodiscard]] auto
winfsp_write(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
BOOLEAN write_to_end, BOOLEAN constrained_io,
PUINT32 bytes_transferred, remote::file_info *file_info)
-> packet::error_type override; -> packet::error_type override;
}; };
} // namespace remote_winfsp } // namespace remote_winfsp

View File

@@ -35,9 +35,8 @@ public:
~logging_consumer(); ~logging_consumer();
private: private:
static constexpr const std::uint8_t MAX_LOG_FILES{5U}; static constexpr std::uint8_t MAX_LOG_FILES{5U};
static constexpr const std::uint64_t MAX_LOG_FILE_SIZE{1024ULL * 1024ULL * static constexpr std::uint64_t MAX_LOG_FILE_SIZE{1024ULL * 1024ULL * 5ULL};
5ULL};
private: private:
static void process_event(const i_event &evt); static void process_event(const i_event &evt);

View File

@@ -27,7 +27,7 @@ class i_event;
class event_system final { class event_system final {
private: private:
static constexpr const std::uint8_t max_queue_retry{ static constexpr std::uint8_t max_queue_retry{
30U, 30U,
}; };
@@ -35,7 +35,7 @@ private:
std::thread::hardware_concurrency() * 4U, std::thread::hardware_concurrency() * 4U,
}; };
static constexpr const std::chrono::seconds queue_wait_secs{ static constexpr std::chrono::seconds queue_wait_secs{
5s, 5s,
}; };

View File

@@ -28,16 +28,19 @@
namespace repertory { namespace repertory {
struct curl_error final : public i_event { struct curl_error final : public i_event {
curl_error() = default; curl_error() = default;
curl_error(CURLcode code_, std::string_view function_name_, std::string url_) curl_error(CURLcode code_, std::string_view function_name_, std::string type_,
std::string url_)
: code(code_), : code(code_),
function_name(std::string{function_name_}), function_name(std::string{function_name_}),
type(std::move(type_)),
url(std::move(url_)) {} url(std::move(url_)) {}
static constexpr const event_level level{event_level::error}; static constexpr event_level level{event_level::error};
static constexpr const std::string_view name{"curl_error"}; static constexpr std::string_view name{"curl_error"};
CURLcode code{}; CURLcode code{};
std::string function_name; std::string function_name;
std::string type;
std::string url; std::string url;
[[nodiscard]] auto get_event_level() const -> event_level override { [[nodiscard]] auto get_event_level() const -> event_level override {
@@ -49,8 +52,8 @@ struct curl_error final : public i_event {
} }
[[nodiscard]] auto get_single_line() const -> std::string override { [[nodiscard]] auto get_single_line() const -> std::string override {
return fmt::format("{}|func|{}|url|{}|code|{}", name, function_name, url, return fmt::format("{}|func|{}|type|{}|url|{}|code|{}", name, function_name,
static_cast<int>(code)); type, url, static_cast<int>(code));
} }
}; };
} // namespace repertory } // namespace repertory
@@ -60,12 +63,14 @@ template <> struct adl_serializer<repertory::curl_error> {
static void to_json(json &data, const repertory::curl_error &value) { static void to_json(json &data, const repertory::curl_error &value) {
data["code"] = value.code; data["code"] = value.code;
data["function_name"] = value.function_name; data["function_name"] = value.function_name;
data["type"] = value.type;
data["url"] = value.url; data["url"] = value.url;
} }
static void from_json(const json &data, repertory::curl_error &value) { static void from_json(const json &data, repertory::curl_error &value) {
data.at("code").get_to<CURLcode>(value.code); data.at("code").get_to<CURLcode>(value.code);
data.at("function_name").get_to<std::string>(value.function_name); data.at("function_name").get_to<std::string>(value.function_name);
data.at("type").get_to<std::string>(value.type);
data.at("url").get_to<std::string>(value.url); data.at("url").get_to<std::string>(value.url);
} }
}; };

View File

@@ -31,8 +31,8 @@ struct debug_log final : public i_event {
debug_log(std::string_view function_name_, std::string msg_) debug_log(std::string_view function_name_, std::string msg_)
: function_name(std::string(function_name_)), msg(std::move(msg_)) {} : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"debug_log"}; static constexpr std::string_view name{"debug_log"};
std::string function_name; std::string function_name;
std::string msg; std::string msg;

View File

@@ -34,8 +34,8 @@ struct directory_remove_failed final : public i_event {
error(error_), error(error_),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::error}; static constexpr event_level level{event_level::error};
static constexpr const std::string_view name{"directory_remove_failed"}; static constexpr std::string_view name{"directory_remove_failed"};
std::string api_path; std::string api_path;
api_error error{}; api_error error{};

View File

@@ -32,8 +32,8 @@ struct directory_removed final : public i_event {
: api_path(std::move(api_path_)), : api_path(std::move(api_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"directory_removed"}; static constexpr std::string_view name{"directory_removed"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -35,8 +35,8 @@ struct directory_removed_externally final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"directory_removed_externally"}; static constexpr std::string_view name{"directory_removed_externally"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -34,8 +34,8 @@ struct download_begin final : public i_event {
dest_path(std::move(dest_path_)), dest_path(std::move(dest_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"download_begin"}; static constexpr std::string_view name{"download_begin"};
std::string api_path; std::string api_path;
std::string dest_path; std::string dest_path;

View File

@@ -35,8 +35,8 @@ struct download_end final : public i_event {
error(error_), error(error_),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"download_end"}; static constexpr std::string_view name{"download_end"};
std::string api_path; std::string api_path;
std::string dest_path; std::string dest_path;

View File

@@ -35,8 +35,8 @@ struct download_progress final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
progress(progress_) {} progress(progress_) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"download_progress"}; static constexpr std::string_view name{"download_progress"};
std::string api_path; std::string api_path;
std::string dest_path; std::string dest_path;

View File

@@ -35,8 +35,8 @@ struct download_restore_failed final : public i_event {
error(std::move(error_)), error(std::move(error_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::error}; static constexpr event_level level{event_level::error};
static constexpr const std::string_view name{"download_restore_failed"}; static constexpr std::string_view name{"download_restore_failed"};
std::string api_path; std::string api_path;
std::string dest_path; std::string dest_path;

View File

@@ -34,8 +34,8 @@ struct download_restored final : public i_event {
dest_path(std::move(dest_path_)), dest_path(std::move(dest_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"download_restored"}; static constexpr std::string_view name{"download_restored"};
std::string api_path; std::string api_path;
std::string dest_path; std::string dest_path;

View File

@@ -36,8 +36,8 @@ struct download_resume_add_failed final : public i_event {
error(std::move(error_)), error(std::move(error_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::error}; static constexpr event_level level{event_level::error};
static constexpr const std::string_view name{"download_resume_add_failed"}; static constexpr std::string_view name{"download_resume_add_failed"};
std::string api_path; std::string api_path;
std::string dest_path; std::string dest_path;

View File

@@ -34,8 +34,8 @@ struct download_resume_added final : public i_event {
dest_path(std::move(dest_path_)), dest_path(std::move(dest_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"download_resume_added"}; static constexpr std::string_view name{"download_resume_added"};
std::string api_path; std::string api_path;
std::string dest_path; std::string dest_path;

View File

@@ -34,8 +34,8 @@ struct download_resume_removed final : public i_event {
dest_path(std::move(dest_path_)), dest_path(std::move(dest_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"download_resume_removed"}; static constexpr std::string_view name{"download_resume_removed"};
std::string api_path; std::string api_path;
std::string dest_path; std::string dest_path;

View File

@@ -35,8 +35,8 @@ struct download_type_selected final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
type(type_) {} type(type_) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"download_type_selected"}; static constexpr std::string_view name{"download_type_selected"};
std::string api_path; std::string api_path;
std::string dest_path; std::string dest_path;

View File

@@ -35,8 +35,8 @@ struct drive_mount_failed final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
mount_location(std::move(mount_location_)) {} mount_location(std::move(mount_location_)) {}
static constexpr const event_level level{event_level::error}; static constexpr event_level level{event_level::error};
static constexpr const std::string_view name{"drive_mount_failed"}; static constexpr std::string_view name{"drive_mount_failed"};
NTSTATUS error{}; NTSTATUS error{};
std::string function_name; std::string function_name;

View File

@@ -34,8 +34,8 @@ struct drive_mount_result final : public i_event {
mount_location(std::move(mount_location_)), mount_location(std::move(mount_location_)),
result(std::move(result_)) {} result(std::move(result_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"drive_mount_result"}; static constexpr std::string_view name{"drive_mount_result"};
std::string function_name; std::string function_name;
std::string mount_location; std::string mount_location;

View File

@@ -32,8 +32,8 @@ struct drive_mounted final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
mount_location(std::move(mount_location_)) {} mount_location(std::move(mount_location_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"drive_mounted"}; static constexpr std::string_view name{"drive_mounted"};
std::string function_name; std::string function_name;
std::string mount_location; std::string mount_location;

View File

@@ -31,8 +31,8 @@ struct drive_stop_timed_out final : public i_event {
drive_stop_timed_out(std::string_view function_name_) drive_stop_timed_out(std::string_view function_name_)
: function_name(std::string(function_name_)) {} : function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"drive_stop_timed_out"}; static constexpr std::string_view name{"drive_stop_timed_out"};
std::string function_name; std::string function_name;

View File

@@ -33,8 +33,8 @@ struct drive_unmount_pending final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
mount_location(std::move(mount_location_)) {} mount_location(std::move(mount_location_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"drive_unmount_pending"}; static constexpr std::string_view name{"drive_unmount_pending"};
std::string function_name; std::string function_name;
std::string mount_location; std::string mount_location;

View File

@@ -32,8 +32,8 @@ struct drive_unmounted final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
mount_location(std::move(mount_location_)) {} mount_location(std::move(mount_location_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"drive_unmounted"}; static constexpr std::string_view name{"drive_unmounted"};
std::string function_name; std::string function_name;
std::string mount_location; std::string mount_location;

View File

@@ -31,8 +31,8 @@ struct event_level_changed final : public i_event {
event_level_changed(std::string_view function_name_, event_level new_level_) event_level_changed(std::string_view function_name_, event_level new_level_)
: function_name(std::string(function_name_)), new_level(new_level_) {} : function_name(std::string(function_name_)), new_level(new_level_) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"event_level_changed"}; static constexpr std::string_view name{"event_level_changed"};
std::string function_name; std::string function_name;
event_level new_level{}; event_level new_level{};

View File

@@ -32,8 +32,8 @@ struct file_pinned final : public i_event {
: api_path(std::move(api_path_)), : api_path(std::move(api_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"file_pinned"}; static constexpr std::string_view name{"file_pinned"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -34,8 +34,8 @@ struct file_remove_failed final : public i_event {
error(error_), error(error_),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::error}; static constexpr event_level level{event_level::error};
static constexpr const std::string_view name{"file_remove_failed"}; static constexpr std::string_view name{"file_remove_failed"};
std::string api_path; std::string api_path;
api_error error{}; api_error error{};

View File

@@ -32,8 +32,8 @@ struct file_removed final : public i_event {
: api_path(std::move(api_path_)), : api_path(std::move(api_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"file_removed"}; static constexpr std::string_view name{"file_removed"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -35,8 +35,8 @@ struct file_removed_externally final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"file_removed_externally"}; static constexpr std::string_view name{"file_removed_externally"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -32,8 +32,8 @@ struct file_unpinned final : public i_event {
: api_path(std::move(api_path_)), : api_path(std::move(api_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"file_unpinned"}; static constexpr std::string_view name{"file_unpinned"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -37,8 +37,8 @@ struct file_upload_completed final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"file_upload_completed"}; static constexpr std::string_view name{"file_upload_completed"};
std::string api_path; std::string api_path;
bool cancelled{}; bool cancelled{};

View File

@@ -35,8 +35,8 @@ struct file_upload_failed final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"file_upload_failed"}; static constexpr std::string_view name{"file_upload_failed"};
std::string api_path; std::string api_path;
std::string error; std::string error;

View File

@@ -34,8 +34,8 @@ struct file_upload_not_found final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"file_upload_not_found"}; static constexpr std::string_view name{"file_upload_not_found"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -34,8 +34,8 @@ struct file_upload_queued final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"file_upload_queued"}; static constexpr std::string_view name{"file_upload_queued"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -32,8 +32,8 @@ struct file_upload_removed final : public i_event {
: api_path(std::move(api_path_)), : api_path(std::move(api_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"file_upload_removed"}; static constexpr std::string_view name{"file_upload_removed"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -35,8 +35,8 @@ struct file_upload_retry final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"file_upload_retry"}; static constexpr std::string_view name{"file_upload_retry"};
std::string api_path; std::string api_path;
api_error error{}; api_error error{};

View File

@@ -35,8 +35,8 @@ struct filesystem_item_added final : public i_event {
directory(directory_), directory(directory_),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"filesystem_item_added"}; static constexpr std::string_view name{"filesystem_item_added"};
std::string api_parent; std::string api_parent;
std::string api_path; std::string api_path;

View File

@@ -37,8 +37,8 @@ struct filesystem_item_closed final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::trace}; static constexpr event_level level{event_level::trace};
static constexpr const std::string_view name{"filesystem_item_closed"}; static constexpr std::string_view name{"filesystem_item_closed"};
std::string api_path; std::string api_path;
bool changed{}; bool changed{};

View File

@@ -35,8 +35,8 @@ struct filesystem_item_evicted final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"filesystem_item_evicted"}; static constexpr std::string_view name{"filesystem_item_evicted"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -39,8 +39,8 @@ struct filesystem_item_handle_closed final : public i_event {
handle(handle_), handle(handle_),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::trace}; static constexpr event_level level{event_level::trace};
static constexpr const std::string_view name{"filesystem_item_handle_closed"}; static constexpr std::string_view name{"filesystem_item_handle_closed"};
std::string api_path; std::string api_path;
bool changed{}; bool changed{};

View File

@@ -37,8 +37,8 @@ struct filesystem_item_handle_opened final : public i_event {
handle(handle_), handle(handle_),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::trace}; static constexpr event_level level{event_level::trace};
static constexpr const std::string_view name{"filesystem_item_handle_opened"}; static constexpr std::string_view name{"filesystem_item_handle_opened"};
std::string api_path; std::string api_path;
bool directory{}; bool directory{};

View File

@@ -36,8 +36,8 @@ struct filesystem_item_opened final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::trace}; static constexpr event_level level{event_level::trace};
static constexpr const std::string_view name{"filesystem_item_opened"}; static constexpr std::string_view name{"filesystem_item_opened"};
std::string api_path; std::string api_path;
bool directory{}; bool directory{};

View File

@@ -32,8 +32,8 @@ struct fuse_args_parsed final : public i_event {
fuse_args_parsed(std::string_view args_, std::string_view function_name_) fuse_args_parsed(std::string_view args_, std::string_view function_name_)
: args(std::move(args_)), function_name(std::string{function_name_}) {} : args(std::move(args_)), function_name(std::string{function_name_}) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"fuse_args_parsed"}; static constexpr std::string_view name{"fuse_args_parsed"};
std::string args; std::string args;
std::string function_name; std::string function_name;

View File

@@ -35,8 +35,8 @@ struct fuse_event final : public i_event {
error(error_), error(error_),
function_name(std::string{function_name_}) {} function_name(std::string{function_name_}) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"fuse_event"}; static constexpr std::string_view name{"fuse_event"};
std::string api_path; std::string api_path;
std::int32_t error{}; std::int32_t error{};

View File

@@ -31,8 +31,8 @@ struct info_log final : public i_event {
info_log(std::string_view function_name_, std::string msg_) info_log(std::string_view function_name_, std::string msg_)
: function_name(std::string(function_name_)), msg(std::move(msg_)) {} : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"info_log"}; static constexpr std::string_view name{"info_log"};
std::string function_name; std::string function_name;
std::string msg; std::string msg;

View File

@@ -34,8 +34,8 @@ struct invalid_cache_size final : public i_event {
function_name(std::string{function_name_}), function_name(std::string{function_name_}),
invalid_size(invalid_size_) {} invalid_size(invalid_size_) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"invalid_cache_size"}; static constexpr std::string_view name{"invalid_cache_size"};
std::uint64_t cache_size{}; std::uint64_t cache_size{};
std::string function_name; std::string function_name;

View File

@@ -32,8 +32,8 @@ struct item_timeout final : public i_event {
: api_path(std::move(api_path_)), : api_path(std::move(api_path_)),
function_name(std::string(function_name_)) {} function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::trace}; static constexpr event_level level{event_level::trace};
static constexpr const std::string_view name{"item_timeout"}; static constexpr std::string_view name{"item_timeout"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -35,8 +35,8 @@ struct max_cache_size_reached final : public i_event {
function_name(std::string{function_name_}), function_name(std::string{function_name_}),
max_cache_size(max_cache_size_) {} max_cache_size(max_cache_size_) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"max_cache_size_reached"}; static constexpr std::string_view name{"max_cache_size_reached"};
std::uint64_t cache_size{}; std::uint64_t cache_size{};
std::string function_name; std::string function_name;

View File

@@ -33,8 +33,8 @@ struct orphaned_file_detected final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"orphaned_file_detected"}; static constexpr std::string_view name{"orphaned_file_detected"};
std::string function_name; std::string function_name;
std::string source_path; std::string source_path;

View File

@@ -36,8 +36,8 @@ struct orphaned_file_processing_failed final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::error}; static constexpr event_level level{event_level::error};
static constexpr const std::string_view name{ static constexpr std::string_view name{
"orphaned_file_processing_failed", "orphaned_file_processing_failed",
}; };

View File

@@ -33,8 +33,8 @@ struct orphaned_source_file_detected final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"orphaned_source_file_detected"}; static constexpr std::string_view name{"orphaned_source_file_detected"};
std::string function_name; std::string function_name;
std::string source_path; std::string source_path;

View File

@@ -33,8 +33,8 @@ struct orphaned_source_file_removed final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"orphaned_source_file_removed"}; static constexpr std::string_view name{"orphaned_source_file_removed"};
std::string function_name; std::string function_name;
std::string source_path; std::string source_path;

View File

@@ -34,8 +34,8 @@ struct packet_client_timeout final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
msg(std::move(msg_)) {} msg(std::move(msg_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"packet_client_timeout"}; static constexpr std::string_view name{"packet_client_timeout"};
std::string event_name; std::string event_name;
std::string function_name; std::string function_name;

View File

@@ -32,8 +32,8 @@ struct polling_item_begin final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
item_name(std::move(item_name_)) {} item_name(std::move(item_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"polling_item_begin"}; static constexpr std::string_view name{"polling_item_begin"};
std::string function_name; std::string function_name;
std::string item_name; std::string item_name;

View File

@@ -32,8 +32,8 @@ struct polling_item_end final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
item_name(std::move(item_name_)) {} item_name(std::move(item_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"polling_item_end"}; static constexpr std::string_view name{"polling_item_end"};
std::string function_name; std::string function_name;
std::string item_name; std::string item_name;

View File

@@ -35,8 +35,8 @@ struct provider_invalid_version final : public i_event {
required_version(std::move(required_version_)), required_version(std::move(required_version_)),
returned_version(std::move(returned_version_)) {} returned_version(std::move(returned_version_)) {}
static constexpr const event_level level{event_level::error}; static constexpr event_level level{event_level::error};
static constexpr const std::string_view name{"provider_invalid_version"}; static constexpr std::string_view name{"provider_invalid_version"};
std::string function_name; std::string function_name;
std::string required_version; std::string required_version;

View File

@@ -34,8 +34,8 @@ struct provider_offline final : public i_event {
host_name_or_ip(std::move(host_name_or_ip_)), host_name_or_ip(std::move(host_name_or_ip_)),
port(port_) {} port(port_) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"provider_offline"}; static constexpr std::string_view name{"provider_offline"};
std::string function_name; std::string function_name;
std::string host_name_or_ip; std::string host_name_or_ip;

View File

@@ -34,8 +34,8 @@ struct provider_upload_begin final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"provider_upload_begin"}; static constexpr std::string_view name{"provider_upload_begin"};
std::string api_path; std::string api_path;
std::string function_name; std::string function_name;

View File

@@ -35,8 +35,8 @@ struct provider_upload_end final : public i_event {
function_name(std::string(function_name_)), function_name(std::string(function_name_)),
source_path(std::move(source_path_)) {} source_path(std::move(source_path_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"provider_upload_end"}; static constexpr std::string_view name{"provider_upload_end"};
std::string api_path; std::string api_path;
api_error error{}; api_error error{};

View File

@@ -35,8 +35,8 @@ struct remote_server_event final : public i_event {
error(error_), error(error_),
function_name(std::string{function_name_}) {} function_name(std::string{function_name_}) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"remote_server_event"}; static constexpr std::string_view name{"remote_server_event"};
std::string api_path; std::string api_path;
packet::error_type error{}; packet::error_type error{};

View File

@@ -31,8 +31,8 @@ struct repertory_exception final : public i_event {
repertory_exception(std::string_view function_name_, std::string msg_) repertory_exception(std::string_view function_name_, std::string msg_)
: function_name(std::string(function_name_)), msg(std::move(msg_)) {} : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
static constexpr const event_level level{event_level::error}; static constexpr event_level level{event_level::error};
static constexpr const std::string_view name{"repertory_exception"}; static constexpr std::string_view name{"repertory_exception"};
std::string function_name; std::string function_name;
std::string msg; std::string msg;

View File

@@ -33,8 +33,8 @@ struct service_start_begin final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
service_name(std::move(service_name_)) {} service_name(std::move(service_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"service_start_begin"}; static constexpr std::string_view name{"service_start_begin"};
std::string function_name; std::string function_name;
std::string service_name; std::string service_name;

View File

@@ -32,8 +32,8 @@ struct service_start_end final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
service_name(std::move(service_name_)) {} service_name(std::move(service_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"service_start_end"}; static constexpr std::string_view name{"service_start_end"};
std::string function_name; std::string function_name;
std::string service_name; std::string service_name;

View File

@@ -32,8 +32,8 @@ struct service_stop_begin final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
service_name(std::move(service_name_)) {} service_name(std::move(service_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"service_stop_begin"}; static constexpr std::string_view name{"service_stop_begin"};
std::string function_name; std::string function_name;
std::string service_name; std::string service_name;

View File

@@ -32,8 +32,8 @@ struct service_stop_end final : public i_event {
: function_name(std::string(function_name_)), : function_name(std::string(function_name_)),
service_name(std::move(service_name_)) {} service_name(std::move(service_name_)) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"service_stop_end"}; static constexpr std::string_view name{"service_stop_end"};
std::string function_name; std::string function_name;
std::string service_name; std::string service_name;

View File

@@ -31,8 +31,8 @@ struct trace_log final : public i_event {
trace_log(std::string_view function_name_, std::string msg_) trace_log(std::string_view function_name_, std::string msg_)
: function_name(std::string(function_name_)), msg(std::move(msg_)) {} : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
static constexpr const event_level level{event_level::trace}; static constexpr event_level level{event_level::trace};
static constexpr const std::string_view name{"trace_log"}; static constexpr std::string_view name{"trace_log"};
std::string function_name; std::string function_name;
std::string msg; std::string msg;

View File

@@ -31,8 +31,8 @@ struct unmount_requested final : public i_event {
unmount_requested(std::string_view function_name_) unmount_requested(std::string_view function_name_)
: function_name(std::string(function_name_)) {} : function_name(std::string(function_name_)) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"unmount_requested"}; static constexpr std::string_view name{"unmount_requested"};
std::string function_name; std::string function_name;

View File

@@ -35,8 +35,8 @@ struct unmount_result final : public i_event {
mount_location(std::move(mount_location_)), mount_location(std::move(mount_location_)),
result(result_) {} result(result_) {}
static constexpr const event_level level{event_level::info}; static constexpr event_level level{event_level::info};
static constexpr const std::string_view name{"unmount_result"}; static constexpr std::string_view name{"unmount_result"};
std::string function_name; std::string function_name;
std::string mount_location; std::string mount_location;

View File

@@ -31,8 +31,8 @@ struct warn_log final : public i_event {
warn_log(std::string_view function_name_, std::string msg_) warn_log(std::string_view function_name_, std::string msg_)
: function_name(std::string(function_name_)), msg(std::move(msg_)) {} : function_name(std::string(function_name_)), msg(std::move(msg_)) {}
static constexpr const event_level level{event_level::warn}; static constexpr event_level level{event_level::warn};
static constexpr const std::string_view name{"warn_log"}; static constexpr std::string_view name{"warn_log"};
std::string function_name; std::string function_name;
std::string msg; std::string msg;

View File

@@ -35,8 +35,8 @@ struct winfsp_event final : public i_event {
error(error_), error(error_),
function_name(std::string{function_name_}) {} function_name(std::string{function_name_}) {}
static constexpr const event_level level{event_level::debug}; static constexpr event_level level{event_level::debug};
static constexpr const std::string_view name{"winfsp_event"}; static constexpr std::string_view name{"winfsp_event"};
std::string api_path; std::string api_path;
NTSTATUS error{}; NTSTATUS error{};

View File

@@ -29,7 +29,7 @@ class app_config;
class cache_size_mgr final { class cache_size_mgr final {
private: private:
static constexpr const std::chrono::seconds cache_wait_secs{ static constexpr std::chrono::seconds cache_wait_secs{
5s, 5s,
}; };

View File

@@ -40,7 +40,7 @@ class file_manager final : public i_file_manager, public i_upload_manager {
E_CONSUMER(); E_CONSUMER();
private: private:
static constexpr const std::chrono::seconds queue_wait_secs{ static constexpr std::chrono::seconds queue_wait_secs{
5s, 5s,
}; };

View File

@@ -66,7 +66,7 @@ public:
std::condition_variable notify_; std::condition_variable notify_;
public: public:
void notify(const api_error &err); void notify(api_error err);
auto wait() -> api_error; auto wait() -> api_error;
}; };
@@ -149,7 +149,7 @@ protected:
void reset_timeout(); void reset_timeout();
auto set_api_error(const api_error &err) -> api_error; auto set_api_error(api_error err) -> api_error;
void set_file_size(std::uint64_t size); void set_file_size(std::uint64_t size);

View File

@@ -48,7 +48,7 @@ public:
-> ring_buffer_base & = delete; -> ring_buffer_base & = delete;
public: public:
static constexpr const auto min_ring_size{5U}; static constexpr auto min_ring_size{5U};
private: private:
boost::dynamic_bitset<> read_state_; boost::dynamic_bitset<> read_state_;

View File

@@ -84,6 +84,8 @@ private:
void remove_deleted_files(stop_type &stop_requested); void remove_deleted_files(stop_type &stop_requested);
void remove_expired_files();
public: public:
[[nodiscard]] auto check_version(std::string &required_version, [[nodiscard]] auto check_version(std::string &required_version,
std::string &returned_version) const std::string &returned_version) const

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