Compare commits
4 Commits
d452761ff9
...
v2.0.5-rc
Author | SHA1 | Date | |
---|---|---|---|
62555e6125 | |||
24418ba03d | |||
fa439c634f | |||
8dd46b8ad8 |
@ -99,7 +99,7 @@ PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 60
|
||||
PointerAlignment: Right
|
||||
ReflowComments: true
|
||||
SortIncludes: false
|
||||
SortIncludes: true
|
||||
SortUsingDeclarations: true
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterLogicalNot: false
|
||||
|
24
.clang-tidy
24
.clang-tidy
@ -1,10 +1,30 @@
|
||||
---
|
||||
Checks: '-*,clang-diagnostic-*,clang-analyzer-*,bugprone-*,concurrency-*,cppcoreguidelines-*,modernize-*,readability-*,-readability-redundant-access-specifiers,-readability-function-cognitive-complexity'
|
||||
ExtraArgs: '-Wno-unknown-warning-option'
|
||||
Checks: [
|
||||
'-*',
|
||||
'clang-diagnostic-*',
|
||||
'clang-analyzer-*',
|
||||
'bugprone-*',
|
||||
'concurrency-*',
|
||||
'cppcoreguidelines-*',
|
||||
'modernize-*',
|
||||
'readability-*',
|
||||
'-readability-redundant-access-specifiers',
|
||||
'-readability-function-cognitive-complexity'
|
||||
]
|
||||
ExtraArgs: ['-Wno-unknown-warning-option']
|
||||
FormatStyle: none
|
||||
HeaderFileExtensions: ['', 'h','hh','hpp','hxx']
|
||||
HeaderFilterRegex: ''
|
||||
ImplementationFileExtensions: ['c','cc','cpp','cxx']
|
||||
CheckOptions:
|
||||
- key: MinimumExceptionNameLength
|
||||
value: 1
|
||||
- key: MinimumLoopCounterNameLength
|
||||
value: 3
|
||||
- key: MinimumParameterNameLength
|
||||
value: 3
|
||||
- key: MinimumVariableNameLength
|
||||
value: 3
|
||||
User: 'scott.e.graves@protonmail.com'
|
||||
WarningsAsErrors: ''
|
||||
...
|
||||
|
5
.clangd
Normal file
5
.clangd
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"CompileFlags": {
|
||||
"Remove": ["-flarge-source-files", "-fext-numeric-literals"]
|
||||
}
|
||||
}
|
@ -1,3 +1,9 @@
|
||||
_lseeki64
|
||||
_mkgmtime
|
||||
_sh_denyno
|
||||
_sh_denyrd
|
||||
_sh_denyrw
|
||||
_spawnv
|
||||
aarch64
|
||||
advapi32
|
||||
armv8
|
||||
@ -16,11 +22,18 @@ cppcoreguidelines
|
||||
cppdbg
|
||||
cppflags
|
||||
cpphttplib
|
||||
cpptrace
|
||||
cppvsdbg
|
||||
create_notraverse
|
||||
crypto_aead_xchacha20poly1305_ietf_npubbytes
|
||||
cstdint
|
||||
curlopt_aws_sigv4
|
||||
cxxflags
|
||||
cxxstd
|
||||
d_largefile64_source
|
||||
d_largefile_source
|
||||
d_ndebug
|
||||
dacl_security_information
|
||||
dbackward_shared
|
||||
dbghelp
|
||||
dboost_root
|
||||
@ -29,6 +42,9 @@ dcli11_warnings_as_errors
|
||||
dcmake_cxx_flags
|
||||
dcpphttplib_openssl_support
|
||||
dcpphttplib_tcp_nodelay
|
||||
dcpptrace_static_define
|
||||
dcpptrace_unwind_with_execinfo
|
||||
dcpptrace_unwind_with_libunwind
|
||||
dcurl_ca_bundle
|
||||
dcurl_ca_fallback
|
||||
dcurl_disable_ldap
|
||||
@ -41,6 +57,7 @@ decmult_gen_prec_bits
|
||||
decmult_window_size
|
||||
degl
|
||||
denable_threaded_resolver
|
||||
deps
|
||||
devent__disable_openssl
|
||||
devent__disable_tests
|
||||
devent__library_type
|
||||
@ -65,6 +82,7 @@ drocksdb_install_on_windows
|
||||
dshared
|
||||
dspdlog_fmt_external
|
||||
dthreads_prefer_pthread_flag
|
||||
dunw_local_only
|
||||
duse_libidn2
|
||||
duuid_build_tests
|
||||
dwith_benchmark
|
||||
@ -76,13 +94,20 @@ ecdh
|
||||
endforeach
|
||||
endfunction
|
||||
eventlib
|
||||
expect_streq
|
||||
fallocate_impl
|
||||
fext
|
||||
fgetattr
|
||||
fgetattr_impl
|
||||
filebase
|
||||
flac_version
|
||||
flag_nopath
|
||||
flarge
|
||||
fontconfig_version
|
||||
freetype2_version
|
||||
fsetattr_x
|
||||
fusermount
|
||||
futimens
|
||||
getxtimes
|
||||
glapi
|
||||
gmock
|
||||
@ -90,6 +115,7 @@ googletest
|
||||
gpath
|
||||
gtest_version
|
||||
has_setxattr
|
||||
hkey
|
||||
httpapi
|
||||
httplib
|
||||
icudata
|
||||
@ -97,11 +123,15 @@ icui18n
|
||||
icuuc
|
||||
iostreams
|
||||
iphlpapi
|
||||
ipstream
|
||||
jthread
|
||||
libbitcoin
|
||||
libbitcoinsystem
|
||||
libcurl
|
||||
libdsm
|
||||
libevent
|
||||
libexample
|
||||
libexpat
|
||||
libfuse3
|
||||
libgmock
|
||||
libgtest
|
||||
@ -112,41 +142,81 @@ libsfml
|
||||
libsodium_type
|
||||
libuuid
|
||||
libuuid_include_dirs
|
||||
libvlc
|
||||
linkflags
|
||||
localappdata
|
||||
lpbyte
|
||||
lptr
|
||||
lpwstr
|
||||
markdownlint
|
||||
mbig
|
||||
minio
|
||||
msvc
|
||||
msvcr120
|
||||
msys2
|
||||
mtune
|
||||
musl-libc
|
||||
nana
|
||||
ncrypt
|
||||
nlohmann
|
||||
nlohmann_json
|
||||
nmakeprg
|
||||
nohup
|
||||
nominmax
|
||||
ntstatus
|
||||
nullptr
|
||||
nuspell_version
|
||||
oleaut32
|
||||
openal_version
|
||||
openssldir
|
||||
pistream
|
||||
pkgconfig
|
||||
plarge_integer
|
||||
plex
|
||||
println
|
||||
project_enable_fontconfig
|
||||
project_enable_gtkmm
|
||||
project_enable_libdsm
|
||||
project_enable_nana
|
||||
propgrid
|
||||
psecurity_descriptor
|
||||
pugi
|
||||
pugixml_project
|
||||
puint32
|
||||
pvoid
|
||||
pwstr
|
||||
rdrw
|
||||
remote_winfsp
|
||||
renterd
|
||||
richtext
|
||||
rocksdb_library
|
||||
rpcrt4
|
||||
s_igid
|
||||
s_isvtx
|
||||
s_iuid
|
||||
sddl_revision_1
|
||||
secp256k1
|
||||
secur32
|
||||
sfml_project
|
||||
shlwapi
|
||||
skynet
|
||||
source_subdir
|
||||
spdlog
|
||||
spdlog_project
|
||||
st_ctim
|
||||
static-libgcc
|
||||
static-libstdc++
|
||||
stbuf
|
||||
stduuid_project
|
||||
strequal
|
||||
ularge_integer
|
||||
uring
|
||||
url
|
||||
userenv
|
||||
utimens_impl
|
||||
utimensat
|
||||
vorbis_version
|
||||
waggressive
|
||||
wall
|
||||
wcast-align
|
||||
wconversion
|
||||
@ -154,6 +224,7 @@ wdouble-promotion
|
||||
wduplicated-branches
|
||||
wduplicated-cond
|
||||
wextra
|
||||
wfloat
|
||||
wformat=2
|
||||
winfsp
|
||||
winhttp
|
||||
@ -171,5 +242,6 @@ wserialization
|
||||
wshadow
|
||||
wsign-conversion
|
||||
wunused
|
||||
wuseless
|
||||
wxwidgets_version
|
||||
xattr
|
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -10,3 +10,4 @@ scripts/cleanup.cmd
|
||||
scripts/cleanup.sh
|
||||
version.rc
|
||||
version.cpp
|
||||
override.sh
|
||||
|
@ -4,7 +4,9 @@ pipeline {
|
||||
agent none
|
||||
|
||||
environment {
|
||||
PROJECT_TEST_DIR = "${HOME}/.ci/cfg"
|
||||
DEVELOPER_PRIVATE_KEY = "/.ci/repertory/cert/developer.priv"
|
||||
DEVELOPER_PUBLIC_KEY = "/.ci/repertory/cert/developer.pub"
|
||||
PROJECT_TEST_CONFIG_DIR = "/.ci/repertory/test_config"
|
||||
}
|
||||
|
||||
options {
|
||||
@ -20,7 +22,6 @@ pipeline {
|
||||
retry(2) {
|
||||
sleep time: 5, unit: 'SECONDS'
|
||||
sh 'scripts/make_unix.sh'
|
||||
sh 'scripts/make_package.sh'
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -32,7 +33,6 @@ pipeline {
|
||||
retry(2) {
|
||||
sleep time: 5, unit: 'SECONDS'
|
||||
sh 'scripts/make_win32.sh'
|
||||
sh 'scripts/make_package.sh "" "" "" "" 1 0'
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -44,7 +44,6 @@ pipeline {
|
||||
retry(2) {
|
||||
sleep time: 5, unit: 'SECONDS'
|
||||
sh 'scripts/make_unix.sh aarch64'
|
||||
sh 'scripts/make_package.sh "" aarch64'
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -53,7 +52,9 @@ pipeline {
|
||||
agent any
|
||||
|
||||
steps {
|
||||
sh 'echo skipping deliver'
|
||||
sh 'scripts/deliver.sh /mnt/repertory "" "" "" "" 1 1'
|
||||
sh 'scripts/deliver.sh /mnt/repertory "" aarch64'
|
||||
sh 'scripts/deliver.sh /mnt/repertory'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
7
.nvimrc
7
.nvimrc
@ -18,14 +18,14 @@ if vim.env.NV_DARCULA_ENABLE_DAP then
|
||||
|
||||
local externalConsole = gos.is_windows
|
||||
local type = "cppdbg"
|
||||
local cwd = gpath.create_path("./build")
|
||||
local cwd = gpath.create_path("./dist/debug/shared/linux/x86_64/repertory/")
|
||||
dap.configurations.cpp = {
|
||||
{
|
||||
name = "Mount",
|
||||
type = type,
|
||||
request = "launch",
|
||||
program = function()
|
||||
return gpath.create_path(cwd, "repertory")
|
||||
return gpath.create_path(cwd, "bin/repertory")
|
||||
end,
|
||||
cwd = cwd,
|
||||
stopAtEntry = true,
|
||||
@ -36,8 +36,9 @@ if vim.env.NV_DARCULA_ENABLE_DAP then
|
||||
type = type,
|
||||
request = "launch",
|
||||
program = function()
|
||||
return gpath.create_path(cwd, "repertory_tests")
|
||||
return gpath.create_path(cwd, "bin/repertory_test")
|
||||
end,
|
||||
args={"--gtest_filter=utils_db*"},
|
||||
cwd = cwd,
|
||||
stopAtEntry = true,
|
||||
externalConsole=externalConsole,
|
||||
|
102
CHANGELOG.md
102
CHANGELOG.md
@ -1,20 +1,105 @@
|
||||
# Changelog
|
||||
|
||||
## v2.0.2-rc
|
||||
## v2.0.5-rc
|
||||
|
||||
### Issues
|
||||
|
||||
* \#12 [Unit Test] Complete all providers unit tests
|
||||
* Switched to common build system
|
||||
* \#39 Create management portal in Flutter
|
||||
|
||||
### Changes from v2.0.4-rc
|
||||
|
||||
* Continue documentation updates
|
||||
* Fixed `-status` command erasing active mount information
|
||||
* Fixed overlapping HTTP REST API port's
|
||||
* Refactored/fixed instance locking
|
||||
* Removed passwords and secret key values from API calls
|
||||
* Renamed setting `ApiAuth` to `ApiPassword`
|
||||
* Require `--name,-na` option for encryption provider
|
||||
|
||||
## v2.0.4-rc
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* `renterd` v2.0.0+ is now required. Prior versions will fail to mount.
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
### Issues
|
||||
|
||||
* \#35 [bug] Low frequency check is set to '0' instead of 1 hour by default
|
||||
* \#36 [bug] Max cache size bytes is set to '0' by default
|
||||
|
||||
### Changes from v2.0.3-rc
|
||||
|
||||
* Added Sia API version check prior to mounting
|
||||
* Added back `-cv` (check version) CLI option
|
||||
* Continue documentation updates
|
||||
* Fixed setting `ApiAuth` via `set_value_by_name`
|
||||
* Fixed setting `HostConfig.ApiUser` via `set_value_by_name`
|
||||
* Fixed setting `HostConfig.Path` via `set_value_by_name`
|
||||
* Fixed setting `HostConfig.Protocol` via `set_value_by_name`
|
||||
* Improved ring buffer read-ahead
|
||||
* Integrated `renterd` version 2.0.0
|
||||
* Prefer using local cache file when opening files
|
||||
* Refactored `app_config` unit tests
|
||||
* Refactored polling to be more accurate on scheduling tasks
|
||||
|
||||
## v2.0.3-rc
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
### Issues
|
||||
|
||||
* \#28 \[bug\] Address slow directory responses in S3 mounts for deeply nested directories
|
||||
* \#29 \[bug\] S3 error responses are not being logged
|
||||
* \#30 \[bug\] Sia provider error responses are not logged
|
||||
* \#31 \[bug\] S3 provider should limit max key size to 1024
|
||||
|
||||
### Changes from v2.0.2-rc
|
||||
|
||||
* Always use direct for read-only providers
|
||||
* Fixed externally removed files not being processed during cleanup
|
||||
* Fixed http headers not being added for requests
|
||||
* Fixed incorrect `stat` values for remote mounts
|
||||
* Fixed invalid directory nullptr error on remote mounts
|
||||
* Fixed memory leak in event system
|
||||
* Refactored application shutdown
|
||||
* Refactored event system
|
||||
* Updated build system to Alpine 3.21.0
|
||||
* Updated build system to MinGW-w64 12.0.0
|
||||
* Updated copyright to 2018-2025
|
||||
|
||||
## v2.0.2-rc
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* Refactored `config.json` - will need to verify configuration settings prior to mounting
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
### Issues
|
||||
|
||||
* \#14 \[Unit Test\] SQLite mini-ORM unit tests and cleanup
|
||||
* \#16 Add support for bucket name in Sia provider
|
||||
* \#17 Update to common c++ build system
|
||||
* A single 64-bit Linux Jenkins server is used to build all Linux and Windows versions
|
||||
* All dependency sources are now included
|
||||
* MSVC is no longer supported
|
||||
* MSYS2 is required for building Windows binaries on Windows
|
||||
* OS X support is temporarily disabled
|
||||
* \#19 \[bug\] Rename file is broken for files that are existing
|
||||
* \#23 \[bug\] Incorrect file size displayed while upload is pending
|
||||
* \#24 RocksDB implementations should be transactional
|
||||
* \#25 Writes should block when maximum cache size is reached
|
||||
* \#26 Complete ring buffer and direct download support
|
||||
|
||||
### Changes from v2.0.1-rc
|
||||
|
||||
* Updated `JSON for Modern C++` to v3.11.3
|
||||
* Ability to choose between RocksDB and SQLite databases
|
||||
* Added direct reads and implemented download fallback
|
||||
* Corrected file times on S3 and Sia providers
|
||||
* Corrected handling of `chown()` and `chmod()`
|
||||
* Fixed erroneous download of chunks after resize
|
||||
|
||||
## v2.0.1-rc
|
||||
|
||||
* Removed legacy win32 build binaries
|
||||
|
||||
<!-- markdownlint-disable-next-line -->
|
||||
### Issues
|
||||
|
||||
@ -23,16 +108,17 @@
|
||||
|
||||
### Changes from v2.0.0-rc
|
||||
|
||||
* Refactored Sia, S3 and base provider
|
||||
* Fixed intermittent deadlock on file close
|
||||
* Refactored Sia, S3 and base provider
|
||||
* Removed MSVC compilation support (MinGW-64 should be used)
|
||||
* Removed legacy win32 build binaries
|
||||
* Require `c++20`
|
||||
* Switched to Storj over Filebase for hosting binaries
|
||||
* Updated `OpenSSL` to v3.2.0
|
||||
* Updated `boost` to v1.83.0
|
||||
* Updated `cpp-httplib` to v0.14.2
|
||||
* Updated `curl` to v8.4.0
|
||||
* Updated `libsodium` to v1.0.19
|
||||
* Updated `OpenSSL` to v3.2.0
|
||||
|
||||
## v2.0.0-rc
|
||||
|
||||
|
@ -1,8 +1,12 @@
|
||||
cmake_minimum_required(VERSION 3.24)
|
||||
cmake_minimum_required(VERSION 3.27)
|
||||
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
cmake_policy(SET CMP0144 NEW)
|
||||
|
||||
if (NOT PROJECT_INTERFACE)
|
||||
message(FATAL_ERROR "Project must be compiled via 'make_win32.cmd'/'make_win32.sh' or 'make_unix.sh' build scripts. Invoking 'cmake' directly is not supported.")
|
||||
endif()
|
||||
|
||||
project(${PROJECT_NAME}
|
||||
DESCRIPTION ${PROJECT_DESC}
|
||||
HOMEPAGE_URL ${PROJECT_URL}
|
||||
@ -13,10 +17,51 @@ include(CheckIncludeFileCXX)
|
||||
include(CheckIncludeFiles)
|
||||
include(ExternalProject)
|
||||
|
||||
check_include_files(sys/xattr.h HAS_SETXATTR)
|
||||
if(HAS_SETXATTR)
|
||||
add_definitions(-DHAS_SETXATTR)
|
||||
endif()
|
||||
|
||||
include(cmake/hashes.cmake)
|
||||
|
||||
include(cmake/versions.cmake)
|
||||
include(cmake/arch.cmake)
|
||||
include(cmake/os.cmake)
|
||||
include(cmake/options.cmake)
|
||||
|
||||
option(PROJECT_REQUIRE_ALPINE "Require Alpine Linux as build system" OFF)
|
||||
option(PROJECT_STATIC_LINK "Static link executables" OFF)
|
||||
|
||||
if(PROJECT_STATIC_LINK)
|
||||
add_definitions(-DPROJECT_STATIC_LINK)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_MINGW)
|
||||
add_definitions(-DPROJECT_IS_MINGW)
|
||||
if(PROJECT_IS_MINGW_UNIX)
|
||||
add_definitions(-DPROJECT_IS_MINGW_UNIX)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(PROJECT_REQUIRE_ALPINE)
|
||||
add_definitions(-DPROJECT_REQUIRE_ALPINE)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_ARM64)
|
||||
add_definitions(-DPROJECT_IS_ARM64)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_MINGW)
|
||||
option(PROJECT_ENABLE_WIN32_LONG_PATH_NAMES "Enable path sizes of 32767 characters on Windows" OFF)
|
||||
if(PROJECT_ENABLE_WIN32_LONG_PATH_NAMES)
|
||||
add_definitions(-DPROJECT_ENABLE_WIN32_LONG_PATH_NAMES)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (PROJECT_ENABLE_V2_ERRORS)
|
||||
add_definitions(-DPROJECT_ENABLE_V2_ERRORS)
|
||||
endif()
|
||||
|
||||
include(cmake/settings.cmake)
|
||||
|
||||
include(cmake/flags.cmake)
|
||||
@ -33,9 +78,9 @@ if(PROJECT_BUILD)
|
||||
endif()
|
||||
|
||||
file(GLOB_RECURSE ADDITIONAL_SOURCES
|
||||
${PROJECT_3RD_PARTY_DIR}/src/*.c
|
||||
${PROJECT_3RD_PARTY_DIR}/src/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp
|
||||
${PROJECT_SUPPORT_DIR}/src/*.c
|
||||
${PROJECT_SUPPORT_DIR}/src/*.cpp
|
||||
)
|
||||
|
||||
list(APPEND PROJECT_ADDITIONAL_SOURCES
|
||||
@ -44,6 +89,13 @@ if(PROJECT_BUILD)
|
||||
|
||||
include(project.cmake)
|
||||
|
||||
string(REPLACE "\\<" "<" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}")
|
||||
string(REPLACE "\\<" "<" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}")
|
||||
string(REPLACE "\\<" "<" PROJECT_DESC "${PROJECT_DESC}")
|
||||
string(REPLACE "\\>" ">" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}")
|
||||
string(REPLACE "\\>" ">" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}")
|
||||
string(REPLACE "\\>" ">" PROJECT_DESC "${PROJECT_DESC}")
|
||||
|
||||
if (PROJECT_IS_MINGW)
|
||||
if ("${PROJECT_RELEASE_ITER}" STREQUAL "release")
|
||||
set(PROJECT_PRERELEASE 0)
|
||||
@ -72,6 +124,13 @@ if(PROJECT_ENABLE_FUSE)
|
||||
message(STATUS " FUSE version: ${PROJECT_FUSE}")
|
||||
endif()
|
||||
|
||||
string(REPLACE "<" "\\<" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}")
|
||||
string(REPLACE "<" "\\<" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}")
|
||||
string(REPLACE "<" "\\<" PROJECT_DESC "${PROJECT_DESC}")
|
||||
string(REPLACE ">" "\\>" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}")
|
||||
string(REPLACE ">" "\\>" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}")
|
||||
string(REPLACE ">" "\\>" PROJECT_DESC "${PROJECT_DESC}")
|
||||
|
||||
add_custom_target(project ALL
|
||||
DEPENDS ${PROJECT_DEPENDENCIES}
|
||||
COMMAND cd build && cmake
|
||||
@ -88,48 +147,31 @@ endif()
|
||||
-DPROJECT_COPYRIGHT=${PROJECT_COPYRIGHT}
|
||||
-DPROJECT_DESC=${PROJECT_DESC}
|
||||
-DPROJECT_DIST_DIR=${PROJECT_DIST_DIR}
|
||||
-DPROJECT_ENABLE_V2_ERRORS=${PROJECT_ENABLE_V2_ERRORS}
|
||||
-DPROJECT_ENABLE_WIN32_LONG_PATH_NAMES=${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES}
|
||||
-DPROJECT_ENABLE_BOOST=${PROJECT_ENABLE_BOOST}
|
||||
-DPROJECT_ENABLE_CLI11=${PROJECT_ENABLE_CLI11}
|
||||
-DPROJECT_ENABLE_CPP_HTTPLIB=${PROJECT_ENABLE_CPP_HTTPLIB}
|
||||
-DPROJECT_ENABLE_CURL=${PROJECT_ENABLE_CURL}
|
||||
-DPROJECT_ENABLE_DTL=${PROJECT_ENABLE_DTL}
|
||||
-DPROJECT_ENABLE_FLAC=${PROJECT_ENABLE_FLAC}
|
||||
-DPROJECT_ENABLE_FMT=${PROJECT_ENABLE_FMT}
|
||||
-DPROJECT_ENABLE_FONTCONFIG=${PROJECT_ENABLE_FONTCONFIG}
|
||||
-DPROJECT_ENABLE_FREETYPE2=${PROJECT_ENABLE_FREETYPE2}
|
||||
-DPROJECT_ENABLE_FUSE=${PROJECT_ENABLE_FUSE}
|
||||
-DPROJECT_ENABLE_FZF=${PROJECT_ENABLE_FZF}
|
||||
-DPROJECT_ENABLE_GTKMM=${PROJECT_ENABLE_GTKMM}
|
||||
-DPROJECT_ENABLE_JSON=${PROJECT_ENABLE_JSON}
|
||||
-DPROJECT_ENABLE_LIBBITCOIN_SYSTEM=${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}
|
||||
-DPROJECT_ENABLE_LIBEVENT=${PROJECT_ENABLE_LIBEVENT}
|
||||
-DPROJECT_ENABLE_LIBSODIUM=${PROJECT_ENABLE_LIBSODIUM}
|
||||
-DPROJECT_ENABLE_NUSPELL=${PROJECT_ENABLE_NUSPELL}
|
||||
-DPROJECT_ENABLE_OGG=${PROJECT_ENABLE_OGG}
|
||||
-DPROJECT_ENABLE_OPENAL=${PROJECT_ENABLE_OPENAL}
|
||||
-DPROJECT_ENABLE_OPENSSL=${PROJECT_ENABLE_OPENSSL}
|
||||
-DPROJECT_ENABLE_PUGIXML=${PROJECT_ENABLE_PUGIXML}
|
||||
-DPROJECT_ENABLE_ROCKSDB=${PROJECT_ENABLE_ROCKSDB}
|
||||
-DPROJECT_ENABLE_SAGO_PLATFORM_FOLDERS=${PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS}
|
||||
-DPROJECT_ENABLE_SECP256K1=${PROJECT_ENABLE_SECP256K1}
|
||||
-DPROJECT_ENABLE_SFML=${PROJECT_ENABLE_SFML}
|
||||
-DPROJECT_ENABLE_SPDLOG=${PROJECT_ENABLE_SPDLOG}
|
||||
-DPROJECT_ENABLE_SQLITE=${PROJECT_ENABLE_SQLITE}
|
||||
-DPROJECT_ENABLE_STDUUID=${PROJECT_ENABLE_STDUUID}
|
||||
-DPROJECT_ENABLE_TESTING=${PROJECT_ENABLE_TESTING}
|
||||
-DPROJECT_ENABLE_TPL=${PROJECT_ENABLE_TPL}
|
||||
-DPROJECT_ENABLE_VORBIS=${PROJECT_ENABLE_VORBIS}
|
||||
-DPROJECT_ENABLE_WINFSP=${PROJECT_ENABLE_WINFSP}
|
||||
-DPROJECT_ENABLE_WXWIDGETS=${PROJECT_ENABLE_WXWIDGETS}
|
||||
-DPROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||
-DPROJECT_FUSE=${PROJECT_FUSE}
|
||||
-DPROJECT_FUSE_INCLUDE_DIRS=${PROJECT_FUSE_INCLUDE_DIRS}
|
||||
-DPROJECT_GIT_REV=${PROJECT_GIT_REV}
|
||||
-DPROJECT_INTERFACE=1
|
||||
-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE}
|
||||
-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64}
|
||||
-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW}
|
||||
-DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX}
|
||||
-DPROJECT_LINK_TYPE=${PROJECT_LINK_TYPE}
|
||||
-DPROJECT_MAJOR_VERSION=${PROJECT_MAJOR_VERSION}
|
||||
-DPROJECT_MINOR_VERSION=${PROJECT_MINOR_VERSION}
|
||||
-DPROJECT_NAME=${PROJECT_NAME}
|
||||
@ -138,6 +180,7 @@ endif()
|
||||
-DPROJECT_REQUIRE_ALPINE=${PROJECT_REQUIRE_ALPINE}
|
||||
-DPROJECT_REVISION_VERSION=${PROJECT_REVISION_VERSION}
|
||||
-DPROJECT_STATIC_LINK=${PROJECT_STATIC_LINK}
|
||||
-DPROJECT_SUPPORT_DIR=${PROJECT_SUPPORT_DIR}
|
||||
-DPROJECT_TOOLCHAIN_FILE_CMAKE=${PROJECT_TOOLCHAIN_FILE_CMAKE}
|
||||
-DPROJECT_TOOLCHAIN_FILE_MESON=${PROJECT_TOOLCHAIN_FILE_MESON}
|
||||
-DPROJECT_URL=${PROJECT_URL}
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Repertory MIT License
|
||||
### Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
### 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:
|
||||
|
||||
|
441
README.md
441
README.md
@ -1,47 +1,456 @@
|
||||
# Repertory
|
||||
|
||||
Repertory allows you to mount AWS S3 and Sia via FUSE on Linux~~/OS X~~ or via WinFSP
|
||||
Repertory allows you to mount S3 and Sia via FUSE on Linux or via WinFSP
|
||||
on Windows.
|
||||
|
||||
## Contents
|
||||
|
||||
1. [Details and Features](#details-and-features)
|
||||
2. [Minimum Requirements](#minimum-requirements)
|
||||
1. [Supported Operating Systems](#supported-operating-systems)
|
||||
3. [GUI](#gui)
|
||||
4. [Usage](#usage)
|
||||
1. [Important Options](#important-options)
|
||||
2. [Sia](#sia)
|
||||
* [Sia Initial Configuration](#sia-initial-configuration)
|
||||
* [Sia Mounting](#sia-mounting)
|
||||
* [Sia Configuration File](#sia-configuration-file)
|
||||
3. [S3](#s3)
|
||||
* [S3 Initial Configuration](#s3-initial-configuration)
|
||||
* [S3 Mounting](#s3-mounting)
|
||||
* [S3 Configuration File](#s3-configuration-file)
|
||||
5. [Data Directories](#data-directories)
|
||||
1. [Linux Directories](#linux-directories)
|
||||
2. [Windows Directories](#windows-directories)
|
||||
6. [Remote Mounting](#remote-mounting)
|
||||
1. [Server Setup](#server-setup)
|
||||
* [Remote Mount Configuration File Section](#remote-mount-configuration-file-section)
|
||||
2. [Client Setup](#client-setup)
|
||||
* [Client Remote Mounting](#client-remote-mounting)
|
||||
* [Remote Mount Configuration File](#remote-mount-configuration-file)
|
||||
7. [Compiling](#compiling)
|
||||
1. [Linux Compilation](#linux-compilation)
|
||||
2. [Windows Setup](#windows-compilation)
|
||||
8. [Credits](#credits)
|
||||
9. [Developer Public Key](#developer-public-key)
|
||||
10. [Consult the Wiki for additional information](https://git.fifthgrid.com/BlockStorage/repertory/wiki)
|
||||
|
||||
## Details and Features
|
||||
|
||||
* Optimized for [Plex Media Server](https://www.plex.tv/)
|
||||
* Single application to mount AWS S3 and/or Sia
|
||||
* Only 1 Sia mount and 1 S3 mount (per bucket) per user is supported.
|
||||
* Remote mounting of Repertory instances on Linux~~, OS X~~ and Windows
|
||||
* Securely share your mounts over TCP/IP (`XChaCha20-Poly1305` stream cipher)
|
||||
* Cross-platform support (Linux 64-bit, Linux arm64/aarch64,~~OS X,~~ Windows 64-bit)
|
||||
* Remote mounting of `repertory` instances on Linux and Windows
|
||||
* Securely share your mounts over TCP/IP via `XChaCha20-Poly1305` with other systems on your network or over the internet.
|
||||
* Cross-platform support (Linux 64-bit, Linux arm64/aarch64, Windows 64-bit)
|
||||
* Optionally encrypt file names and file data via `XChaCha20-Poly1305` in S3 mounts
|
||||
|
||||
## Minimum Requirements
|
||||
|
||||
* [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v0.4.0+ for Sia support
|
||||
* Only 64-bit operating systems are supported
|
||||
* By default, Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
|
||||
* ~~OS X requires the following dependency to be installed:~~
|
||||
* ~~[FUSE for macOS v4.5.0](https://github.com/osxfuse/osxfuse/releases/download/macfuse-4.5.0/macfuse-4.5.0.dmg)~~
|
||||
* Windows requires the following dependencies to be installed:
|
||||
* [WinFSP 2023](https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi)
|
||||
* [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
|
||||
* Windows requires the following dependencies to be installed:
|
||||
* [WinFSP 2023](https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi)
|
||||
|
||||
## Supported Operating Systems
|
||||
### Supported Operating Systems
|
||||
|
||||
Only 64-bit operating systems are supported
|
||||
|
||||
* Linux `arm64/aarch64`
|
||||
* Linux `amd64`
|
||||
* ~~OS X Mojave and above~~
|
||||
* Windows 64-bit 10, 11
|
||||
|
||||
## GUI
|
||||
|
||||
As of `v2.0.5-rc`, mounts can be managed using the `Repertory Management Portal`.
|
||||
To launch the portal, execute the following command:
|
||||
|
||||
* `repertory -ui`
|
||||
* The default username is `repertory`
|
||||
* The default password is `repertory`
|
||||
|
||||
After first launch, `ui.json` will be created in the appropriate data directory.
|
||||
See [Data Directories](#data-directories).
|
||||
You should modify this file directly or use the portal to change the default
|
||||
username and password.
|
||||
|
||||
### Screenshot
|
||||
|
||||
<a href="https://ibb.co/fVyJqnbF"><img src="https://i.ibb.co/fVyJqnbF/repertory-portal.png" alt="repertory-portal" border="0"></a>
|
||||
|
||||
## Usage
|
||||
|
||||
### Important Options
|
||||
|
||||
* `--help`
|
||||
* Display all mount utility options
|
||||
|
||||
* `-f`
|
||||
* Keep process in foreground on Linux.
|
||||
|
||||
* `--name, -na [name]`
|
||||
* Identifies a unique configuration name to support multiple mounts.
|
||||
* The `--name` option can be set to any valid value allowed as a file name for your filesystem.
|
||||
* For Sia, the bucket name will be set to the same value if it is empty in the configuration file.
|
||||
* If the `--name` option is not specified, `default` will be used.
|
||||
* For S3, the `--name` option is required and does not affect the bucket name.
|
||||
|
||||
* `-dc`
|
||||
* Display mount configuration
|
||||
* For Sia, `--name` is optional
|
||||
* For S3, the `-s3` option is required along with `--name`
|
||||
|
||||
### Sia
|
||||
|
||||
#### Sia Initial Configuration
|
||||
|
||||
* Required steps:
|
||||
* Set the appropriate bucket name and `renterd` API password in `repertory` configuration:
|
||||
* To use `default` as the bucket name and configuration name, you only need to set the `renterd` API password:
|
||||
* `repertory -set HostConfig.ApiPassword '<my password>'`
|
||||
* To specify a different bucket name while using `default` as the configuration name:
|
||||
* `repertory -set HostConfig.ApiPassword '<my password>'`
|
||||
* `repertory -set SiaConfig.Bucket '<my bucket>'`
|
||||
* For all other configurations:
|
||||
* `repertory --name '<my config name>' -set HostConfig.ApiPassword '<my password>'`
|
||||
* `repertory --name '<my config name>' -set SiaConfig.Bucket '<my bucket name>'`
|
||||
|
||||
* Optional steps:
|
||||
* Set a user name used during `renterd` basic authentication:
|
||||
* `repertory -set HostConfig.ApiUser '<my user>'`
|
||||
* `repertory --name '<my config name>' -set HostConfig.ApiUser '<my user>'`
|
||||
* Set a custom agent string (default `Sia-Agent`):
|
||||
* `repertory -set HostConfig.AgentString '<my agent>'`
|
||||
* `repertory --name '<my config name>' -set HostConfig.AgentString '<my agent>'`
|
||||
* Set the host name or IP of the `renterd` instance (default `localhost`):
|
||||
* `repertory -set HostConfig.HostNameOrIp '<my host name>'`
|
||||
* `repertory --name '<my config name>' -set HostConfig.HostNameOrIp '<my host name>'`
|
||||
* Set the `renterd` API port (default `9980`):
|
||||
* `repertory -set HostConfig.ApiPort 9981`
|
||||
* `repertory --name '<my config name>' -set HostConfig.ApiPort 9981`
|
||||
|
||||
* To verify/view all configuration options:
|
||||
* `repertory -dc`
|
||||
* `repertory --name '<my config name>' -dc`
|
||||
* Example:
|
||||
* `repertory --name default -dc`
|
||||
|
||||
#### Sia Mounting
|
||||
|
||||
* Linux:
|
||||
* `repertory /mnt/location`
|
||||
* `repertory --name '<my config name>' /mnt/location`
|
||||
* Example:
|
||||
* `repertory --name default /mnt/location`
|
||||
|
||||
* Windows:
|
||||
* `repertory t:`
|
||||
* `repertory --name '<my config name>' t:`
|
||||
* Example:
|
||||
* `repertory --name default t:`
|
||||
|
||||
#### Sia Configuration File
|
||||
|
||||
```json
|
||||
{
|
||||
"ApiPassword": "<random generated rpc password>",
|
||||
"ApiPort": 10000,
|
||||
"ApiUser": "repertory",
|
||||
"DatabaseType": "rocksdb",
|
||||
"DownloadTimeoutSeconds": 30,
|
||||
"EnableDownloadTimeout": true,
|
||||
"EnableDriveEvents": false,
|
||||
"EventLevel": "info",
|
||||
"EvictionDelayMinutes": 1,
|
||||
"EvictionUseAccessedTime": false,
|
||||
"HighFreqIntervalSeconds": 30,
|
||||
"HostConfig": {
|
||||
"AgentString": "Sia-Agent",
|
||||
"ApiPassword": "<renterd api password>",
|
||||
"ApiPort": 9980,
|
||||
"ApiUser": "",
|
||||
"HostNameOrIp": "localhost",
|
||||
"Path": "",
|
||||
"Protocol": "http",
|
||||
"TimeoutMs": 60000
|
||||
},
|
||||
"LowFreqIntervalSeconds": 3600,
|
||||
"MaxCacheSizeBytes": 21474836480,
|
||||
"MaxUploadCount": 5,
|
||||
"MedFreqIntervalSeconds": 120,
|
||||
"OnlineCheckRetrySeconds": 60,
|
||||
"PreferredDownloadType": "default",
|
||||
"RemoteMount": {
|
||||
"ApiPort": 20000,
|
||||
"ClientPoolSize": 20,
|
||||
"Enable": false,
|
||||
"EncryptionToken": ""
|
||||
},
|
||||
"RetryReadCount": 6,
|
||||
"RingBufferFileSize": 512,
|
||||
"SiaConfig": {
|
||||
"Bucket": "default"
|
||||
},
|
||||
"TaskWaitMs": 100,
|
||||
"Version": 1
|
||||
}
|
||||
```
|
||||
|
||||
### S3
|
||||
|
||||
#### S3 Initial Configuration
|
||||
|
||||
* Required steps:
|
||||
* Set the appropriate base URL:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.URL '<my url>'`
|
||||
* Example:
|
||||
* `repertory -s3 --name minio -set S3Config.URL 'http://localhost:9000'`
|
||||
* Set the appropriate bucket name:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.Bucket '<my bucket name>'`
|
||||
* Set the appropriate access key:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.AccessKey '<my access key>'`
|
||||
* Set the appropriate secret key:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.SecretKey '<my secret key>'`
|
||||
* For Sia and most local S3 gateway instances, enable path style URL's:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.UsePathStyle true`
|
||||
|
||||
* Optional steps:
|
||||
* Set an appropriate region. Default is set to `any`:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.Region '<my region>'`
|
||||
* Enable encrypted file names and file data. Set a strong, random encryption token and be sure to store it in a secure backup location:
|
||||
* `repertory -s3 --name '<my config name>' -set S3Config.EncryptionToken '<my strong password>'`
|
||||
|
||||
* To verify/view all configuration options:
|
||||
* `repertory -s3 --name '<my config name>' -dc`
|
||||
* Example:
|
||||
* `repertory -s3 --name minio -dc`
|
||||
|
||||
#### S3 Mounting
|
||||
|
||||
* Linux:
|
||||
* `repertory -s3 --name '<my config name>' /mnt/location`
|
||||
* Example:
|
||||
* `repertory -s3 --name minio /mnt/location`
|
||||
|
||||
* Windows:
|
||||
* `repertory -s3 --name '<my config name>' t:`
|
||||
* Example:
|
||||
* `repertory -s3 --name minio t:`
|
||||
|
||||
#### S3 Configuration File
|
||||
|
||||
```json
|
||||
{
|
||||
"ApiPassword": "<random generated rpc password>",
|
||||
"ApiPort": 10100,
|
||||
"ApiUser": "repertory",
|
||||
"DatabaseType": "rocksdb",
|
||||
"DownloadTimeoutSeconds": 30,
|
||||
"EnableDownloadTimeout": true,
|
||||
"EnableDriveEvents": false,
|
||||
"EventLevel": "info",
|
||||
"EvictionDelayMinutes": 1,
|
||||
"EvictionUseAccessedTime": false,
|
||||
"HighFreqIntervalSeconds": 30,
|
||||
"LowFreqIntervalSeconds": 3600,
|
||||
"MaxCacheSizeBytes": 21474836480,
|
||||
"MaxUploadCount": 5,
|
||||
"MedFreqIntervalSeconds": 120,
|
||||
"OnlineCheckRetrySeconds": 60,
|
||||
"PreferredDownloadType": "default",
|
||||
"RemoteMount": {
|
||||
"ApiPort": 20100,
|
||||
"ClientPoolSize": 20,
|
||||
"Enable": false,
|
||||
"EncryptionToken": ""
|
||||
},
|
||||
"RetryReadCount": 6,
|
||||
"RingBufferFileSize": 512,
|
||||
"S3Config": {
|
||||
"AccessKey": "<my access key>",
|
||||
"Bucket": "<my bucket name>",
|
||||
"EncryptionToken": "",
|
||||
"Region": "any",
|
||||
"SecretKey": "<my secret key>",
|
||||
"TimeoutMs": 60000,
|
||||
"URL": "http://localhost:9000",
|
||||
"UsePathStyle": true,
|
||||
"UseRegionInURL": false
|
||||
},
|
||||
"TaskWaitMs": 100,
|
||||
"Version": 1
|
||||
}
|
||||
```
|
||||
|
||||
### Data Directories
|
||||
|
||||
#### Linux Directories
|
||||
|
||||
* `~/.local/repertory2/s3`
|
||||
* `~/.local/repertory2/sia`
|
||||
|
||||
#### Windows Directories
|
||||
|
||||
* `%LOCALAPPDATA%\repertory2\s3`
|
||||
* `%LOCALAPPDATA%\repertory2\sia`
|
||||
* Examples:
|
||||
* `C:\Users\Tom\AppData\Local\repertory2\s3`
|
||||
* `C:\Users\Tom\AppData\Local\repertory2\sia`
|
||||
* IMPORTANT:
|
||||
* It is highly recommended to exclude this folder from any anti-virus/anti-malware applications as severe performance issues may arise.
|
||||
* Excluding the mounted drive letter is also highly recommended.
|
||||
|
||||
## Remote Mounting
|
||||
|
||||
`repertory` allows local mounts to be shared with other computers on your network
|
||||
or over the internet. This option is referred to as remote mounting.
|
||||
|
||||
### Server Setup
|
||||
|
||||
The following steps must be performed on the mount you wish to share with
|
||||
other systems. Changes to configuration will not take affect while a mount is
|
||||
active, so it is recommended to unmount beforehand.
|
||||
|
||||
* Required steps:
|
||||
* Enable remote mount:
|
||||
* Sia
|
||||
* `repertory -set RemoteMount.Enable true`
|
||||
* `repertory --name '<my config name>' -set RemoteMount.Enable true`
|
||||
* S3:
|
||||
* `repertory -s3 --name '<my config name>' -set RemoteMount.Enable true`
|
||||
* Set a secure encryption token:
|
||||
* Sia:
|
||||
* `repertory -set RemoteMount.EncryptionToken '<my secure password>'`
|
||||
* `repertory --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'`
|
||||
* S3:
|
||||
* `repertory -s3 --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'`
|
||||
|
||||
* Optional steps:
|
||||
* Change the port clients will use to connect to your mount:
|
||||
* Sia:
|
||||
* `repertory -set RemoteMount.ApiPort 20000`
|
||||
* `repertory --name '<my config name>' -set RemoteMount.ApiPort 20000`
|
||||
* S3:
|
||||
* `repertory -s3 --name '<my config name>' -set RemoteMount.ApiPort 20000`
|
||||
|
||||
* IMPORTANT:
|
||||
* Be sure to configure your firewall to allow incoming TCP connections on the port configured in `RemoteMount.ApiPort`.
|
||||
|
||||
#### Remote Mount Configuration File Section
|
||||
|
||||
```json
|
||||
{
|
||||
...
|
||||
"RemoteMount": {
|
||||
"ApiPort": 20000,
|
||||
"ClientPoolSize": 20,
|
||||
"Enable": true,
|
||||
"EncryptionToken": "<my secure password>"
|
||||
},
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### Client Setup
|
||||
|
||||
Client configuration is provider agnostic, so there's no need to specify `-s3`
|
||||
for S3 providers.
|
||||
|
||||
* Required steps:
|
||||
* Set the encryption token to the same value configured during server setup:
|
||||
* `repertory -rm <host name or IP>:<port> -set RemoteConfig.EncryptionToken '<my secure password>'`
|
||||
* Replace `<host name or IP>` with the host name or IP of the server
|
||||
* Replace `<port>` with the value of `RemoteMount.ApiPort` used in the server configuration
|
||||
* Example:
|
||||
* `repertory -rm 192.168.1.10:20000 -set RemoteConfig.EncryptionToken '<my secure password>'`
|
||||
* `repertory -rm my.host.com:20000 -set RemoteConfig.EncryptionToken '<my secure password>'`
|
||||
|
||||
#### Client Remote Mounting
|
||||
|
||||
* Linux:
|
||||
* `repertory -rm <host name or IP>:<port> /mnt/location`
|
||||
* Example:
|
||||
* `repertory -rm 192.168.1.10:20000 /mnt/location`
|
||||
|
||||
* Windows:
|
||||
* `repertory -rm <host name or IP>:<port> t:`
|
||||
* Example:
|
||||
* `repertory -rm 192.168.1.10:20000 t:`
|
||||
|
||||
#### Remote Mount Configuration File
|
||||
|
||||
```json
|
||||
{
|
||||
"ApiPassword": "<random generated rpc password>",
|
||||
"ApiPort": 10010,
|
||||
"ApiUser": "repertory",
|
||||
"EnableDriveEvents": false,
|
||||
"EventLevel": "info",
|
||||
"RemoteConfig": {
|
||||
"ApiPort": 20000,
|
||||
"EncryptionToken": "<my secure password>",
|
||||
"HostNameOrIp": "192.168.1.10",
|
||||
"MaxConnections": 20,
|
||||
"ReceiveTimeoutMs": 120000,
|
||||
"SendTimeoutMs": 30000
|
||||
},
|
||||
"TaskWaitMs": 100,
|
||||
"Version": 1
|
||||
}
|
||||
```
|
||||
|
||||
## Compiling
|
||||
|
||||
Successful compilation will result in all files required for execution to be placed
|
||||
in the `dist/` directory
|
||||
|
||||
### Linux Compilation
|
||||
|
||||
* Ensure `docker` is installed
|
||||
* For x86_64:
|
||||
* RelWithDebInfo: `scripts/make_unix.sh`
|
||||
* Release: `scripts/make_unix.sh x86_64 Release`
|
||||
* Debug: `scripts/make_unix.sh x86_64 Debug`
|
||||
|
||||
* For aarch64:
|
||||
* RelWithDebInfo: `scripts/make_unix.sh aarch64`
|
||||
* Release: `scripts/make_unix.sh aarch64 Release`
|
||||
* Debug: `scripts/make_unix.sh aarch64 Debug`
|
||||
|
||||
### Windows Compilation
|
||||
|
||||
* OFFICIAL: Cross-compiling on Linux
|
||||
* Ensure `docker` is installed
|
||||
* RelWithDebInfo: `scripts/make_win32.sh`
|
||||
* Release: `scripts/make_win32.sh x86_64 Release`
|
||||
* Debug: `scripts/make_win32.sh x86_64 Debug`
|
||||
|
||||
* UNOFFICIAL: Compiling on Windows
|
||||
* Ensure latest [MSYS2](https://www.msys2.org/) is installed
|
||||
* RelWithDebInfo: `scripts\make_win32.cmd`
|
||||
* Release: `scripts\make_win32.cmd x86_64 Release`
|
||||
* Debug: `scripts\make_win32.cmd x86_64 Debug`
|
||||
|
||||
## Credits
|
||||
|
||||
* [binutils](https://www.gnu.org/software/binutils/)
|
||||
* [boost c++ libraries](https://www.boost.org/)
|
||||
* [cpp-httplib](https://github.com/yhirose/cpp-httplib)
|
||||
* [curl](https://curl.haxx.se/)
|
||||
* ~~[FUSE for macOS](https://osxfuse.github.io/)~~
|
||||
* [docker](https://www.docker.com/)
|
||||
* [Google Test](https://github.com/google/googletest)
|
||||
* [ICU](https://icu.unicode.org/)
|
||||
* [JSON for Modern C++](https://github.com/nlohmann/json)
|
||||
* [libexpat](https://github.com/libexpat/libexpat)
|
||||
* [libfuse](https://github.com/libfuse/libfuse)
|
||||
* [libsodium](https://doc.libsodium.org/)
|
||||
* [mingw-w64](https://www.mingw-w64.org/)
|
||||
* [MSYS2](https://www.msys2.org)
|
||||
* [OpenSSL](https://www.openssl.org/)
|
||||
* [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||
* [pugixml](https://pugixml.org/)
|
||||
* [RocksDB](https://rocksdb.org)
|
||||
* [ScPrime](https://scpri.me/)
|
||||
* [Sia Decentralized Cloud Storage](https://sia.tech/)
|
||||
* [spdlog](https://github.com/gabime/spdlog)
|
||||
* [SQLite](https://www.sqlite.org)
|
||||
* [stduuid](https://github.com/mariusbancila/stduuid)
|
||||
* [Storj](https://storj.io/)
|
||||
|
@ -1,5 +1,8 @@
|
||||
list(APPEND PROJECT_COMMON_FLAG_LIST
|
||||
list(APPEND PROJECT_COMMON_FLAG_LIST
|
||||
-D_FILE_OFFSET_BITS=64
|
||||
-D_GNU_SOURCE
|
||||
-D_LARGEFILE64_SOURCE
|
||||
-D_LARGEFILE_SOURCE
|
||||
-D_TIME_BITS=64
|
||||
-march=${PROJECT_MARCH}
|
||||
-mtune=generic
|
||||
@ -56,8 +59,7 @@ list(APPEND PROJECT_CFLAGS_LIST
|
||||
|
||||
list(APPEND PROJECT_CXXFLAGS_LIST
|
||||
${PROJECT_COMMON_FLAG_LIST}
|
||||
-fext-numeric-literals
|
||||
-std=c++${CMAKE_CXX_STANDARD}
|
||||
-std=gnu++${CMAKE_CXX_STANDARD}
|
||||
)
|
||||
|
||||
if(PROJECT_STATIC_LINK)
|
||||
|
@ -26,21 +26,7 @@ function(set_common_target_options name)
|
||||
endif()
|
||||
endfunction(set_common_target_options)
|
||||
|
||||
function(add_project_executable name dependencies libraries)
|
||||
file(GLOB_RECURSE headers
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hxx
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE sources
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx
|
||||
)
|
||||
|
||||
function(add_project_executable2 name dependencies libraries headers sources is_win32)
|
||||
if (PROJECT_WINDOWS_VERSION_RC)
|
||||
list(APPEND sources ${PROJECT_WINDOWS_VERSION_RC})
|
||||
endif()
|
||||
@ -62,6 +48,40 @@ function(add_project_executable name dependencies libraries)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${name} PRIVATE ${libraries})
|
||||
|
||||
if(PROJECT_ENABLE_SDL AND PROJECT_IS_MINGW)
|
||||
target_link_libraries(${name} PRIVATE SDL2::SDL2main)
|
||||
endif ()
|
||||
|
||||
if (is_win32 AND PROJECT_IS_MINGW)
|
||||
target_link_options(${name} PRIVATE -mwindows)
|
||||
endif()
|
||||
endfunction(add_project_executable2)
|
||||
|
||||
function(add_project_executable name dependencies libraries)
|
||||
file(GLOB_RECURSE headers
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hxx
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE sources
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx
|
||||
)
|
||||
|
||||
if(PROJECT_ENABLE_WXWIDGETS OR PROJECT_ENABLE_SDL OR PROJECT_ENABLE_SFML OR PROJECT_ENABLE_NANA)
|
||||
set(IS_WIN32 ON)
|
||||
endif()
|
||||
|
||||
add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" "${IS_WIN32}")
|
||||
|
||||
if(PROJECT_ENABLE_WXWIDGETS)
|
||||
target_link_libraries(${name} PRIVATE ${wxWidgets_LIBRARIES})
|
||||
endif()
|
||||
endfunction(add_project_executable)
|
||||
|
||||
function(add_project_library name dependencies libraries additional_sources)
|
||||
@ -96,7 +116,24 @@ function(add_project_test_executable name dependencies libraries)
|
||||
find_package(GTest ${GTEST_VERSION} REQUIRED)
|
||||
enable_testing()
|
||||
|
||||
add_project_executable(${name} "${dependencies}" "${libraries}")
|
||||
file(GLOB_RECURSE headers
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/${name}/include/*.hxx
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/*.hpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh
|
||||
${PROJECT_SUPPORT_DIR}/test/include/*.hpp
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE sources
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx
|
||||
${PROJECT_SUPPORT_DIR}/test/src/*.cpp
|
||||
${additional_sources}
|
||||
)
|
||||
|
||||
add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" OFF)
|
||||
|
||||
target_compile_definitions(${name} PRIVATE -DPROJECT_TESTING)
|
||||
|
||||
@ -104,6 +141,10 @@ function(add_project_test_executable name dependencies libraries)
|
||||
${GTEST_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_include_directories(${name} AFTER PRIVATE
|
||||
${PROJECT_SUPPORT_DIR}/test/include
|
||||
)
|
||||
|
||||
target_link_libraries(${name} PRIVATE
|
||||
GTest::gtest
|
||||
GTest::gmock
|
||||
|
20
cmake/hashes.cmake
Normal file
20
cmake/hashes.cmake
Normal file
@ -0,0 +1,20 @@
|
||||
set(BINUTILS_HASH b53606f443ac8f01d1d5fc9c39497f2af322d99e14cea5c0b4b124d630379365)
|
||||
set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca)
|
||||
set(BOOST_HASH f55c340aa49763b1925ccf02b2e83f35fdcf634c9d5164a2acb87540173c741d)
|
||||
set(CPP_HTTPLIB_HASH c9b9e0524666e1cd088f0874c57c1ce7c0eaa8552f9f4e15c755d5201fc8c608)
|
||||
set(CURL_HASH 6edc063d1ebaf9cf3b3b46e9fef2f3cd8932694989ecd43d005d6e828426d09f)
|
||||
set(EXPAT_HASH 372b18f6527d162fa9658f1c74d22a37429b82d822f5a1e1fc7e00f6045a06a2)
|
||||
set(GCC_HASH 7d376d445f93126dc545e2c0086d0f647c3094aae081cdb78f42ce2bc25e7293)
|
||||
set(GTEST_HASH 78c676fc63881529bf97bf9d45948d905a66833fbfa5318ea2cd7478cb98f399)
|
||||
set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2)
|
||||
set(JSON_HASH 0d8ef5af7f9794e3263480193c491549b2ba6cc74bb018906202ada498a79406)
|
||||
set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1)
|
||||
set(MINGW_HASH cc41898aac4b6e8dd5cffd7331b9d9515b912df4420a3a612b5ea2955bbeed2f)
|
||||
set(OPENSSL_HASH 002a2d6b30b58bf4bea46c43bdd96365aaf8daa6c428782aa4feee06da197df3)
|
||||
set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591)
|
||||
set(PUGIXML_HASH 655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a)
|
||||
set(ROCKSDB_HASH fdccab16133c9d927a183c2648bcea8d956fb41eb1df2aacaa73eb0b95e43724)
|
||||
set(SPDLOG_HASH 25c843860f039a1600f232c6eb9e01e6627f7d030a2ae5e232bdd3c9205d26cc)
|
||||
set(SQLITE_HASH 6cebd1d8403fc58c30e93939b246f3e6e58d0765a5cd50546f16c00fd805d2c3)
|
||||
set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3)
|
||||
set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c)
|
@ -2,45 +2,27 @@ find_package(PkgConfig REQUIRED)
|
||||
|
||||
set(Boost_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
set(CURL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
set(LIBEVENT_STATIC_LINK ${PROJECT_STATIC_LINK})
|
||||
set(OPENSSL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
set(SFML_STATIC_LIBRARIES ${PROJECT_STATIC_LINK})
|
||||
set(ZLIB_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||
set(wxWidgets_USE_STATIC ${PROJECT_STATIC_LINK})
|
||||
|
||||
set(OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT_DIR})
|
||||
include(cmake/libraries/openssl.cmake)
|
||||
|
||||
include(cmake/libraries/boost.cmake)
|
||||
include(cmake/libraries/cli11.cmake)
|
||||
include(cmake/libraries/cpphttplib.cmake)
|
||||
|
||||
include(cmake/libraries/cpp_httplib.cmake)
|
||||
include(cmake/libraries/curl.cmake)
|
||||
include(cmake/libraries/dtl.cmake)
|
||||
include(cmake/libraries/flac.cmake)
|
||||
include(cmake/libraries/fmt.cmake)
|
||||
include(cmake/libraries/fontconfig.cmake)
|
||||
include(cmake/libraries/freetype2.cmake)
|
||||
include(cmake/libraries/fuse.cmake)
|
||||
include(cmake/libraries/gtest.cmake)
|
||||
include(cmake/libraries/gtkmm.cmake)
|
||||
include(cmake/libraries/json.cmake)
|
||||
include(cmake/libraries/libbitcoinsystem.cmake)
|
||||
include(cmake/libraries/libevent.cmake)
|
||||
include(cmake/libraries/libsodium.cmake)
|
||||
include(cmake/libraries/nuspell.cmake)
|
||||
include(cmake/libraries/ogg.cmake)
|
||||
include(cmake/libraries/openal.cmake)
|
||||
include(cmake/libraries/openssl.cmake)
|
||||
include(cmake/libraries/pugixml.cmake)
|
||||
include(cmake/libraries/rocksdb.cmake)
|
||||
include(cmake/libraries/secp256k1.cmake)
|
||||
include(cmake/libraries/sfml.cmake)
|
||||
include(cmake/libraries/spdlog.cmake)
|
||||
include(cmake/libraries/sqlite.cmake)
|
||||
include(cmake/libraries/stduuid.cmake)
|
||||
include(cmake/libraries/tpl.cmake)
|
||||
include(cmake/libraries/vorbis.cmake)
|
||||
include(cmake/libraries/testing.cmake)
|
||||
include(cmake/libraries/winfsp.cmake)
|
||||
include(cmake/libraries/wxwidgets.cmake)
|
||||
|
||||
if(PROJECT_BUILD)
|
||||
find_package(Threads REQUIRED)
|
||||
@ -60,6 +42,7 @@ if(PROJECT_BUILD)
|
||||
httpapi
|
||||
iphlpapi
|
||||
kernel32
|
||||
mswsock
|
||||
ncrypt
|
||||
ole32
|
||||
oleaut32
|
||||
|
@ -1,6 +1,4 @@
|
||||
if(PROJECT_ENABLE_BOOST)
|
||||
add_definitions(-DPROJECT_ENABLE_BOOST)
|
||||
|
||||
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
|
||||
set(BOOST_MAJOR_VERSION ${BOOST2_MAJOR_VERSION})
|
||||
set(BOOST_MINOR_VERSION ${BOOST2_MINOR_VERSION})
|
||||
@ -18,25 +16,49 @@ if(PROJECT_ENABLE_BOOST)
|
||||
)
|
||||
|
||||
if(PROJECT_BUILD)
|
||||
find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION} EXACT
|
||||
REQUIRED
|
||||
COMPONENTS
|
||||
atomic
|
||||
chrono
|
||||
date_time
|
||||
filesystem
|
||||
iostreams
|
||||
locale
|
||||
log
|
||||
log_setup
|
||||
program_options
|
||||
random
|
||||
regex
|
||||
serialization
|
||||
system
|
||||
thread
|
||||
wserialization
|
||||
)
|
||||
add_definitions(-DPROJECT_ENABLE_BOOST)
|
||||
|
||||
if (PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
|
||||
find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION} EXACT
|
||||
REQUIRED
|
||||
COMPONENTS
|
||||
atomic
|
||||
chrono
|
||||
date_time
|
||||
filesystem
|
||||
iostreams
|
||||
locale
|
||||
log
|
||||
log_setup
|
||||
program_options
|
||||
random
|
||||
regex
|
||||
serialization
|
||||
system
|
||||
thread
|
||||
wserialization
|
||||
)
|
||||
else()
|
||||
find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION}
|
||||
REQUIRED
|
||||
COMPONENTS
|
||||
atomic
|
||||
chrono
|
||||
date_time
|
||||
filesystem
|
||||
iostreams
|
||||
locale
|
||||
log
|
||||
log_setup
|
||||
program_options
|
||||
random
|
||||
regex
|
||||
serialization
|
||||
system
|
||||
thread
|
||||
wserialization
|
||||
)
|
||||
endif()
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${Boost_INCLUDE_DIRS}
|
||||
@ -46,67 +68,72 @@ if(PROJECT_ENABLE_BOOST)
|
||||
${Boost_LIBRARIES}
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
if(PROJECT_CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(BOOST_BUILD_TYPE_LOWER debug)
|
||||
else()
|
||||
set(BOOST_BUILD_TYPE_LOWER release)
|
||||
if (PROJECT_ENABLE_LIBBITCOIN_SYSTEM OR NOT CMAKE_HOST_WIN32)
|
||||
if(PROJECT_CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(BOOST_BUILD_TYPE_LOWER debug)
|
||||
else()
|
||||
set(BOOST_BUILD_TYPE_LOWER release)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_ARM64)
|
||||
set(BOOST_ARCH arm)
|
||||
else()
|
||||
set(BOOST_ARCH x86)
|
||||
endif()
|
||||
|
||||
if(PROJECT_STATIC_LINK)
|
||||
set(BOOST_LINK static)
|
||||
else()
|
||||
set(BOOST_LINK "static,shared")
|
||||
endif()
|
||||
|
||||
set(BOOST_BUILD_ARGS
|
||||
--openssldir=$ENV{OPENSSL_ROOT_DIR}
|
||||
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||
address-model=64
|
||||
architecture=${BOOST_ARCH}
|
||||
cxxstd=20
|
||||
cxxstd-dialect=gnu
|
||||
cxxflags=-std=gnu++${CMAKE_CXX_STANDARD}
|
||||
cxxstd=${CMAKE_CXX_STANDARD}
|
||||
define=BOOST_ASIO_HAS_STD_STRING_VIEW
|
||||
define=BOOST_SYSTEM_NO_DEPRECATED
|
||||
link=${BOOST_LINK}
|
||||
linkflags=-std=gnu++${CMAKE_CXX_STANDARD}
|
||||
threading=multi
|
||||
variant=${BOOST_BUILD_TYPE_LOWER}
|
||||
)
|
||||
|
||||
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
|
||||
set(BOOST_URL_HASH SHA256=${BOOST2_HASH})
|
||||
else()
|
||||
set(BOOST_URL_HASH SHA256=${BOOST_HASH})
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(boost_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/boost_${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_PATCH_VERSION}.tar.gz
|
||||
URL_HASH ${BOOST_URL_HASH}
|
||||
BUILD_IN_SOURCE 1
|
||||
LIST_SEPARATOR |
|
||||
CONFIGURE_COMMAND ./bootstrap.sh
|
||||
--with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread
|
||||
BUILD_COMMAND
|
||||
./b2
|
||||
-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||
${BOOST_BUILD_ARGS}
|
||||
INSTALL_COMMAND
|
||||
./b2
|
||||
-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||
${BOOST_BUILD_ARGS}
|
||||
install
|
||||
)
|
||||
|
||||
list(APPEND PROJECT_DEPENDENCIES boost_project)
|
||||
|
||||
if (NOT CMAKE_HOST_WIN32)
|
||||
add_dependencies(boost_project openssl_project)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_ARM64)
|
||||
set(BOOST_ARCH arm)
|
||||
else()
|
||||
set(BOOST_ARCH x86)
|
||||
endif()
|
||||
|
||||
if(PROJECT_STATIC_LINK)
|
||||
set(BOOST_LINK static)
|
||||
else()
|
||||
set(BOOST_LINK "static,shared")
|
||||
endif()
|
||||
|
||||
set(BOOST_BUILD_ARGS
|
||||
--openssldir=$ENV{OPENSSL_ROOT_DIR}
|
||||
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||
address-model=64
|
||||
architecture=${BOOST_ARCH}
|
||||
cxxflags=-std=c++${CMAKE_CXX_STANDARD}
|
||||
cxxstd=${CMAKE_CXX_STANDARD}
|
||||
define=BOOST_ASIO_HAS_STD_STRING_VIEW
|
||||
define=BOOST_SYSTEM_NO_DEPRECATED
|
||||
link=${BOOST_LINK}
|
||||
linkflags=-std=c++${CMAKE_CXX_STANDARD}
|
||||
threading=multi
|
||||
variant=${BOOST_BUILD_TYPE_LOWER}
|
||||
)
|
||||
|
||||
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
|
||||
set(BOOST_URL_HASH SHA256=7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca)
|
||||
else()
|
||||
set(BOOST_URL_HASH SHA256=be0d91732d5b0cc6fbb275c7939974457e79b54d6f07ce2e3dfdd68bef883b0b)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(boost_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/boost_${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_PATCH_VERSION}.tar.gz
|
||||
URL_HASH ${BOOST_URL_HASH}
|
||||
BUILD_IN_SOURCE 1
|
||||
LIST_SEPARATOR |
|
||||
CONFIGURE_COMMAND ./bootstrap.sh
|
||||
--with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread
|
||||
BUILD_COMMAND
|
||||
./b2
|
||||
-j1
|
||||
${BOOST_BUILD_ARGS}
|
||||
INSTALL_COMMAND
|
||||
./b2
|
||||
-j1
|
||||
${BOOST_BUILD_ARGS}
|
||||
install
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
boost_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,28 +0,0 @@
|
||||
if(PROJECT_ENABLE_CLI11)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(CLI11 ${CLI11_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_CLI11)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(cli11_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/CLI11-${CLI11_VERSION}.tar.gz
|
||||
URL_HASH SHA256=f2d893a65c3b1324c50d4e682c0cdc021dd0477ae2c048544f39eed6654b699a
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DCLI11_WARNINGS_AS_ERRORS=OFF
|
||||
-DCLI11_SINGLE_FILE=ON
|
||||
-DCLI11_BUILD_DOCS=OFF
|
||||
-DCLI11_BUILD_TESTS=OFF
|
||||
-DCLI11_BUILD_EXAMPLES=OFF
|
||||
-DCLI11_INSTALL=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
cli11_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
@ -1,40 +1,34 @@
|
||||
if(PROJECT_ENABLE_CPP_HTTPLIB)
|
||||
if(PROJECT_BUILD)
|
||||
if(PROJECT_ENABLE_OPENSSL)
|
||||
add_definitions(
|
||||
-DCPPHTTPLIB_OPENSSL_SUPPORT
|
||||
)
|
||||
endif()
|
||||
|
||||
add_definitions(
|
||||
-DPROJECT_ENABLE_CPP_HTTPLIB
|
||||
-DCPPHTTPLIB_OPENSSL_SUPPORT
|
||||
-DCPPHTTPLIB_TCP_NODELAY=true
|
||||
-DCPPHTTPLIB_ZLIB_SUPPORT
|
||||
-DPROJECT_ENABLE_CPP_HTTPLIB
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(cpphttplib_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/cpp-httplib-${CPP_HTTPLIB_VERSION}.tar.gz
|
||||
URL_HASH SHA256=c125022eb85eaa12235518dc4638be93b62c3216d0f87b655af7b17b71b38851
|
||||
URL_HASH SHA256=${CPP_HTTPLIB_HASH}
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DHTTPLIB_REQUIRE_OPENSSL=${PROJECT_ENABLE_OPENSSL}
|
||||
-DHTTPLIB_REQUIRE_ZLIB=ON
|
||||
-DHTTPLIB_REQUIRE_BROTLI=OFF
|
||||
-DHTTPLIB_REQUIRE_OPENSSL=ON
|
||||
-DHTTPLIB_REQUIRE_ZLIB=ON
|
||||
-DHTTPLIB_TEST=OFF
|
||||
-DHTTPLIB_USE_BROTLI_IF_AVAILABLE=OFF
|
||||
-DHTTPLIB_USE_OPENSSL_IF_AVAILABLE=ON
|
||||
-DHTTPLIB_USE_ZLIB_IF_AVAILABLE=ON
|
||||
-DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS}
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
cpphttplib_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES cpphttplib_project)
|
||||
|
||||
add_dependencies(cpphttplib_project curl_project)
|
||||
|
||||
if(PROJECT_ENABLE_OPENSSL)
|
||||
if (NOT CMAKE_HOST_WIN32)
|
||||
add_dependencies(cpphttplib_project openssl_project)
|
||||
endif()
|
||||
endif()
|
@ -1,16 +1,12 @@
|
||||
if(PROJECT_ENABLE_CURL)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(CURL ${CURL_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_CURL)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${CURL_INCLUDE_DIRS}
|
||||
)
|
||||
find_package(CURL ${CURL_VERSION} REQUIRED)
|
||||
|
||||
link_libraries(
|
||||
CURL::libcurl
|
||||
)
|
||||
include_directories(BEFORE SYSTEM ${CURL_INCLUDE_DIRS})
|
||||
|
||||
link_libraries(CURL::libcurl)
|
||||
|
||||
if (EXISTS ${PROJECT_DIST_DIR}/cacert.pem)
|
||||
file(REMOVE ${PROJECT_DIST_DIR}/cacert.pem)
|
||||
@ -20,16 +16,20 @@ if(PROJECT_ENABLE_CURL)
|
||||
ExternalProject_Add(curl_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/curl-${CURL_VERSION}.tar.gz
|
||||
URL_HASH SHA256=77c0e1cd35ab5b45b659645a93b46d660224d0024f1185e8a95cdb27ae3d787d
|
||||
URL_HASH SHA256=${CURL_HASH}
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS
|
||||
${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
BUILD_COMMAND
|
||||
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_CURL_EXE=OFF
|
||||
-DBUILD_LIBCURL_DOCS=OFF
|
||||
-DBUILD_MISC_DOCS=OFF
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_CURL=ON
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DBUILD_TESTING=OFF
|
||||
-DCURL_BROTLI=OFF
|
||||
-DCURL_CA_BUNDLE=./cacert.pem
|
||||
-DCURL_CA_FALLBACK=ON
|
||||
-DCURL_DISABLE_LDAP=ON
|
||||
@ -37,6 +37,7 @@ if(PROJECT_ENABLE_CURL)
|
||||
-DCURL_USE_LIBSSH2=OFF
|
||||
-DCURL_USE_OPENSSL=${PROJECT_ENABLE_OPENSSL}
|
||||
-DCURL_ZLIB=ON
|
||||
-DENABLE_CURL_MANUAL=OFF
|
||||
-DENABLE_THREADED_RESOLVER=ON
|
||||
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
|
||||
-DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS}
|
||||
@ -44,12 +45,9 @@ if(PROJECT_ENABLE_CURL)
|
||||
-DZLIB_USE_STATIC_LIBS=${ZLIB_USE_STATIC_LIBS}
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
curl_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES curl_project)
|
||||
|
||||
if(PROJECT_ENABLE_OPENSSL)
|
||||
if (NOT CMAKE_HOST_WIN32)
|
||||
add_dependencies(curl_project openssl_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,20 +0,0 @@
|
||||
if(PROJECT_ENABLE_DTL)
|
||||
if(PROJECT_BUILD)
|
||||
add_definitions(-DPROJECT_ENABLE_DTL)
|
||||
else()
|
||||
ExternalProject_Add(dtl_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/dtl-v${DTL_VERSION}.tar.gz
|
||||
URL_HASH SHA256=d6dcc7834b4117b5c14456ea73b907d0e2bafa5058e3a06b2c504d53517438c5
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
dtl_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
@ -1,37 +0,0 @@
|
||||
if(PROJECT_ENABLE_FLAC)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(FLAC ${FLAC_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_FLAC)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${FLAC_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
FLAC::FLAC
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(flac_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/flac-${FLAC_VERSION}.tar.gz
|
||||
URL_HASH SHA256=0a4bb82a30609b606650d538a804a7b40205366ce8fc98871b0ecf3fbb0611ee
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DBUILD_EXAMPLES=ON
|
||||
-DBUILD_PROGRAMS=ON
|
||||
-DBUILD_TESTING=OFF
|
||||
-DBUILD_DOCS=OFF
|
||||
-DINSTALL_MANPAGES=OFF
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
flac_project
|
||||
)
|
||||
|
||||
add_dependencies(flac_project vorbis_project)
|
||||
endif()
|
||||
endif()
|
@ -1,30 +0,0 @@
|
||||
if(PROJECT_ENABLE_FMT)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(fmt ${FMT_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_FMT)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${FMT_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
fmt::fmt
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(fmt_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/fmt-${FMT_VERSION}.tar.gz
|
||||
URL_HASH SHA256=1250e4cc58bf06ee631567523f48848dc4596133e163f02615c97f78bab6c811
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
fmt_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
@ -1,41 +0,0 @@
|
||||
if(PROJECT_ENABLE_FONTCONFIG)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(Fontconfig ${FONTCONFIG_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_FONTCONFIG)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${FONTCONFIG_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
Fontconfig::Fontconfig
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(fontconfig_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/fontconfig-${FONTCONFIG_VERSION}.tar.gz
|
||||
URL_HASH SHA256=cdebb4b805d33e9bdefcc0ef9743db638d2acb21139bbe1a6a85878d4c3e8c9e
|
||||
BUILD_IN_SOURCE 1
|
||||
LIST_SEPARATOR |
|
||||
CONFIGURE_COMMAND meson
|
||||
setup
|
||||
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||
_build
|
||||
BUILD_COMMAND meson
|
||||
compile
|
||||
-C _build
|
||||
INSTALL_COMMAND meson
|
||||
install
|
||||
-C _build
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
fontconfig_project
|
||||
)
|
||||
|
||||
add_dependencies(fontconfig_project freetype2_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,39 +0,0 @@
|
||||
if(PROJECT_ENABLE_FREETYPE2)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(Freetype ${FREETYPE2_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_FREETYPE2)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${FREETYPE_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
Freetype::Freetype
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(freetype2_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/freetype-${FREETYPE2_VERSION}.tar.gz
|
||||
URL_HASH SHA256=1ac27e16c134a7f2ccea177faba19801131116fd682efc1f5737037c5db224b5
|
||||
BUILD_IN_SOURCE 1
|
||||
LIST_SEPARATOR |
|
||||
CONFIGURE_COMMAND meson
|
||||
setup
|
||||
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||
_build
|
||||
BUILD_COMMAND meson
|
||||
compile
|
||||
-C _build
|
||||
INSTALL_COMMAND meson
|
||||
install
|
||||
-C _build
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
freetype2_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,6 +1,7 @@
|
||||
if(PROJECT_ENABLE_FUSE AND NOT PROJECT_IS_MINGW)
|
||||
if(PROJECT_BUILD)
|
||||
add_definitions(-DPROJECT_ENABLE_FUSE)
|
||||
|
||||
include_directories(BEFORE SYSTEM ${PROJECT_FUSE_INCLUDE_DIRS})
|
||||
|
||||
if(PROJECT_FUSE STREQUAL "fuse3")
|
||||
@ -18,11 +19,6 @@ if(PROJECT_ENABLE_FUSE AND NOT PROJECT_IS_MINGW)
|
||||
link_libraries(fuse)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
check_include_files(sys/xattr.h HAS_SETXATTR)
|
||||
if(HAS_SETXATTR)
|
||||
add_definitions(-DHAS_SETXATTR)
|
||||
endif()
|
||||
else()
|
||||
pkg_check_modules(LIBFUSE3 fuse3>=3.0.0)
|
||||
if(LIBFUSE3_FOUND)
|
||||
|
@ -1,14 +0,0 @@
|
||||
if(PROJECT_ENABLE_GTKMM)
|
||||
if(PROJECT_BUILD)
|
||||
pkg_check_modules(GTKMM REQUIRED gtkmm-${GTKMM_VERSION})
|
||||
|
||||
add_definitions(
|
||||
-DPROJECT_ENABLE_GTKMM
|
||||
${GTKMM_DEFINITIONS}
|
||||
)
|
||||
|
||||
include_directories(${GTKMM_INCLUDE_DIRS})
|
||||
link_directories(${GTKMM_LIBRARY_DIRS})
|
||||
link_libraries(${GTKMM_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
@ -1,23 +1,19 @@
|
||||
if(PROJECT_ENABLE_JSON)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(nlohmann_json ${JSON_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_JSON)
|
||||
|
||||
find_package(nlohmann_json ${JSON_VERSION} REQUIRED)
|
||||
|
||||
if(PROJECT_IS_MINGW AND PROJECT_IS_MINGW_UNIX)
|
||||
include_directories(BEFORE SYSTEM
|
||||
/mingw64/include/nlohmann
|
||||
)
|
||||
include_directories(BEFORE SYSTEM /mingw64/include/nlohmann)
|
||||
else()
|
||||
include_directories(BEFORE SYSTEM
|
||||
${PROJECT_EXTERNAL_BUILD_ROOT}/include/nlohmann
|
||||
)
|
||||
include_directories(BEFORE SYSTEM ${PROJECT_EXTERNAL_BUILD_ROOT}/include/nlohmann)
|
||||
endif()
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(json_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/json-${JSON_VERSION}.tar.gz
|
||||
URL_HASH SHA256=0d8ef5af7f9794e3263480193c491549b2ba6cc74bb018906202ada498a79406
|
||||
URL_HASH SHA256=${JSON_HASH}
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
@ -27,9 +23,6 @@ if(PROJECT_ENABLE_JSON)
|
||||
-DJSON_MultipleHeaders=OFF
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
json_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES json_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,72 +0,0 @@
|
||||
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
|
||||
if(PROJECT_BUILD)
|
||||
add_definitions(
|
||||
-DPROJECT_ENABLE_LIBBITCOIN_SYSTEM
|
||||
-DBC_STATIC
|
||||
-DECMULT_GEN_PREC_BITS=4
|
||||
-DECMULT_WINDOW_SIZE=15
|
||||
-DWITH_ICU
|
||||
)
|
||||
|
||||
set(LIBBITCOIN_SYSTEM_ROOT
|
||||
${PROJECT_BUILD_DIR}/external/src/libbitcoinsystem_project
|
||||
)
|
||||
|
||||
include_directories(SYSTEM BEFORE
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/include
|
||||
)
|
||||
|
||||
set(PROJECT_ADDITIONAL_SOURCES
|
||||
${PROJECT_ADDITIONAL_SOURCES}
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/math/external/*.c
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/formats/*.cpp
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/config/*.cpp
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/math/*.cpp
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/unicode/*.cpp
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/utility/string.cpp
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/dictionary.cpp
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/electrum.cpp
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/electrum_dictionary.cpp
|
||||
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/mnemonic.cpp
|
||||
)
|
||||
|
||||
if(PROJECT_IS_MINGW)
|
||||
pkg_check_modules(ICU_I18N icu-i18n)
|
||||
pkg_check_modules(ICU_IO icu-io)
|
||||
pkg_check_modules(ICU_UC icu-uc)
|
||||
|
||||
link_libraries(
|
||||
${ICU_I18N_LINK_LIBRARIES}
|
||||
${ICU_IO_LINK_LIBRARIES}
|
||||
${ICU_UC_LINK_LIBRARIES}
|
||||
)
|
||||
else()
|
||||
link_libraries(
|
||||
icui18n
|
||||
icuuc
|
||||
icudata
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
ExternalProject_Add(libbitcoinsystem_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/libbitcoin-system-${LIBBITCOIN_SYSTEM_VERSION}.tar.gz
|
||||
URL_HASH SHA256=0d10d79472e914620223f1ddb9396b0fa92ae5eb0b31acc14b9aa634a01d78b6
|
||||
CONFIGURE_COMMAND echo "No configure"
|
||||
BUILD_COMMAND echo "No build"
|
||||
INSTALL_COMMAND echo "No install"
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
libbitcoinsystem_project
|
||||
)
|
||||
|
||||
if(NOT PROJECT_IS_MINGW_UNIX)
|
||||
add_dependencies(libbitcoinsystem_project
|
||||
boost_project
|
||||
secp256k1_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
@ -1,40 +0,0 @@
|
||||
if(PROJECT_ENABLE_LIBEVENT)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(Libevent ${LIBEVENT_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_LIBEVENT)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${LIBEVENT_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
${LIBEVENT_LIBRARIES}
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
if(PROJECT_BUILD_SHARED_LIBS)
|
||||
set(LIBEVENT_LIBRARY_TYPE BOTH)
|
||||
else()
|
||||
set(LIBEVENT_LIBRARY_TYPE STATIC)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(libevent_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/libevent-${LIBEVENT_VERSION}-stable.tar.gz
|
||||
URL_HASH SHA256=92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DEVENT__DISABLE_OPENSSL=ON
|
||||
-DEVENT__DISABLE_SAMPLES=ON
|
||||
-DEVENT__DISABLE_TESTS=ON
|
||||
-DEVENT__LIBRARY_TYPE=${LIBEVENT_LIBRARY_TYPE}
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
libevent_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
@ -1,17 +1,21 @@
|
||||
if(PROJECT_ENABLE_LIBSODIUM)
|
||||
if(PROJECT_BUILD)
|
||||
pkg_check_modules(SODIUM libsodium=${LIBSODIUM_VERSION} REQUIRED)
|
||||
pkg_check_modules(SODIUM libsodium>=${LIBSODIUM_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_LIBSODIUM)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${SODIUM_INCLUDE_DIRS}
|
||||
)
|
||||
include_directories(BEFORE SYSTEM ${SODIUM_INCLUDE_DIRS})
|
||||
|
||||
link_libraries(
|
||||
${SODIUM_LINK_LIBRARIES}
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
if(PROJECT_IS_MINGW_UNIX)
|
||||
if(PROJECT_STATIC_LINK)
|
||||
link_libraries(/mingw64/lib/libsodium.a)
|
||||
else()
|
||||
link_libraries(/mingw64/lib/libsodium.dll.a)
|
||||
endif()
|
||||
else()
|
||||
link_libraries(${SODIUM_LIBRARIES})
|
||||
endif()
|
||||
elseif(NOT PROJECT_IS_MINGW)
|
||||
if(PROJECT_IS_MINGW)
|
||||
set(LIBSODIUM_TYPE mingw64)
|
||||
else()
|
||||
@ -27,7 +31,7 @@ if(PROJECT_ENABLE_LIBSODIUM)
|
||||
ExternalProject_Add(libsodium_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/libsodium-${LIBSODIUM_VERSION}.tar.gz
|
||||
URL_HASH SHA256=ebb65ef6ca439333c2bb41a0c1990587288da07f6c7fd07cb3a18cc18d30ce19
|
||||
URL_HASH SHA256=${LIBSODIUM_HASH}
|
||||
BUILD_IN_SOURCE 1
|
||||
LIST_SEPARATOR |
|
||||
CONFIGURE_COMMAND ${PROJECT_3RD_PARTY_DIR}/libsodium_configure.sh
|
||||
@ -39,9 +43,6 @@ if(PROJECT_ENABLE_LIBSODIUM)
|
||||
INSTALL_COMMAND make install
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
libsodium_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES libsodium_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,32 +0,0 @@
|
||||
if(PROJECT_ENABLE_NUSPELL)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(Nuspell ${NUSPELL_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_NUSPELL)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${NUSPELL_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
Nuspell::nuspell
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(nuspell_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/nuspell-v${NUSPELL_VERSION}.tar.gz
|
||||
URL_HASH SHA256=bdf344c5adbcc6797940f8f8cb75cb59f5a3794eb21b9547751a11782a792ef7
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DBUILD_TESTING=OFF
|
||||
-DBUILD_TOOLS=OFF
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
nuspell_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
@ -1,30 +0,0 @@
|
||||
if(PROJECT_ENABLE_OGG)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(Ogg ${OGG_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_OGG)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${OGG_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
Ogg::ogg
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(ogg_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/ogg-v${OGG_VERSION}.tar.gz
|
||||
URL_HASH SHA256=f6f1b04cfa4e98b70ffe775d5e302d9c6b98541f05159af6de2d6617817ed7d6
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
ogg_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
@ -1,30 +0,0 @@
|
||||
if(PROJECT_ENABLE_OPENAL)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(OpenAL ${OPENAL_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_OPENAL)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${OPENAL_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
${OPENAL_LIBRARY}
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(openal_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/openal-${OPENAL_VERSION}.tar.gz
|
||||
URL_HASH SHA256=dfddf3a1f61059853c625b7bb03de8433b455f2f79f89548cbcbd5edca3d4a4a
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
openal_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
@ -1,18 +1,18 @@
|
||||
set(OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT_DIR})
|
||||
|
||||
if(PROJECT_ENABLE_OPENSSL)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(OpenSSL ${OPENSSL_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_OPENSSL)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${OPENSSL_INCLUDE_DIR}
|
||||
)
|
||||
find_package(OpenSSL ${OPENSSL_VERSION} REQUIRED)
|
||||
|
||||
include_directories(BEFORE SYSTEM ${OPENSSL_INCLUDE_DIR})
|
||||
|
||||
link_libraries(
|
||||
OpenSSL::Crypto
|
||||
OpenSSL::SSL
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
elseif(NOT PROJECT_IS_MINGW)
|
||||
if(PROJECT_IS_MINGW)
|
||||
set(OPENSSL_COMPILE_TYPE mingw64)
|
||||
elseif(PROJECT_IS_ARM64)
|
||||
@ -34,7 +34,7 @@ if(PROJECT_ENABLE_OPENSSL)
|
||||
ExternalProject_Add(openssl_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/openssl-${OPENSSL_VERSION}.tar.gz
|
||||
URL_HASH SHA256=777cd596284c883375a2a7a11bf5d2786fc5413255efab20c50d6ffe6d020b7e
|
||||
URL_HASH SHA256=${OPENSSL_HASH}
|
||||
BUILD_IN_SOURCE 1
|
||||
LIST_SEPARATOR |
|
||||
CONFIGURE_COMMAND ./Configure
|
||||
@ -48,9 +48,6 @@ if(PROJECT_ENABLE_OPENSSL)
|
||||
INSTALL_COMMAND make install
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
openssl_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES openssl_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,36 +1,27 @@
|
||||
if(PROJECT_ENABLE_PUGIXML)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(pugixml ${PUGIXML_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_PUGIXML)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${PUGIXML_INCLUDE_DIR}
|
||||
)
|
||||
find_package(pugixml ${PUGIXML_VERSION} REQUIRED)
|
||||
|
||||
include_directories(BEFORE SYSTEM ${PUGIXML_INCLUDE_DIR})
|
||||
|
||||
if(PROJECT_STATIC_LINK)
|
||||
link_libraries(
|
||||
pugixml::static
|
||||
)
|
||||
link_libraries(pugixml::static)
|
||||
else()
|
||||
link_libraries(
|
||||
pugixml::pugixml
|
||||
)
|
||||
link_libraries(pugixml::pugixml)
|
||||
endif()
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
elseif(NOT PROJECT_IS_MINGW)
|
||||
ExternalProject_Add(pugixml_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/pugixml-${PUGIXML_VERSION}.tar.gz
|
||||
URL_HASH SHA256=2f10e276870c64b1db6809050a75e11a897a8d7456c4be5c6b2e35a11168a015
|
||||
URL_HASH SHA256=${PUGIXML_HASH}
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
pugixml_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES pugixml_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,24 +1,22 @@
|
||||
if(PROJECT_ENABLE_ROCKSDB)
|
||||
if(PROJECT_BUILD)
|
||||
find_library(ROCKSDB_LIBRARY NAMES librocksdb.a REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_ROCKSDB)
|
||||
|
||||
link_libraries(
|
||||
${ROCKSDB_LIBRARY}
|
||||
)
|
||||
find_library(ROCKSDB_LIBRARY NAMES librocksdb.a REQUIRED)
|
||||
link_libraries(${ROCKSDB_LIBRARY})
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(rocksdb_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/rocksdb-${ROCKSDB_VERSION}.tar.gz
|
||||
URL_HASH SHA256=1f829976aa24b8ba432e156f52c9e0f0bd89c46dc0cc5a9a628ea70571c1551c
|
||||
URL_HASH SHA256=${ROCKSDB_HASH}
|
||||
LIST_SEPARATOR |
|
||||
BUILD_COMMAND
|
||||
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DFAIL_ON_WARNINGS=OFF
|
||||
-DPORTABLE=1
|
||||
-DROCKSDB_BUILD_SHARED=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DROCKSDB_BUILD_SHARED=OFF
|
||||
-DROCKSDB_INSTALL_ON_WINDOWS=ON
|
||||
-DWITH_BENCHMARK=OFF
|
||||
-DWITH_BENCHMARK_TOOLS=OFF
|
||||
@ -33,9 +31,6 @@ if(PROJECT_ENABLE_ROCKSDB)
|
||||
-DWITH_ZLIB=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
rocksdb_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES rocksdb_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,41 +0,0 @@
|
||||
if(PROJECT_ENABLE_SECP256K1)
|
||||
if(PROJECT_BUILD)
|
||||
pkg_check_modules(SECP256K1 libsecp256k1=${SECP256K1_VERSION} REQUIRED)
|
||||
add_definitions(-DPROJECT_ENABLE_SECP256K1)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${SECP256K1_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
${SECP256K1_LINK_LIBRARIES}
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
if(PROJECT_BUILD_SHARED_LIBS)
|
||||
set(SECP256K1_ENABLE_SHARED yes)
|
||||
else()
|
||||
set(SECP256K1_ENABLE_SHARED no)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(secp256k1_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/secp256k1-${SECP256K1_VERSION}.tar.gz
|
||||
URL_HASH SHA256=61583939f1f25b92e6401e5b819e399da02562de663873df3056993b40148701
|
||||
BUILD_IN_SOURCE 1
|
||||
LIST_SEPARATOR |
|
||||
CONFIGURE_COMMAND ./autogen.sh && ./configure
|
||||
--enable-shared=${SECP256K1_ENABLE_SHARED}
|
||||
--enable-static=yes
|
||||
--enable-module-ecdh
|
||||
--enable-module-recovery
|
||||
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||
BUILD_COMMAND make -j1
|
||||
INSTALL_COMMAND make install
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
secp256k1_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
@ -1,66 +0,0 @@
|
||||
if(PROJECT_ENABLE_SFML)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(OpenGL REQUIRED)
|
||||
find_package(X11 REQUIRED)
|
||||
|
||||
find_package(SFML ${SFML_VERSION}
|
||||
COMPONENTS
|
||||
audio
|
||||
graphics
|
||||
network
|
||||
system
|
||||
window
|
||||
REQUIRED
|
||||
)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_SFML)
|
||||
|
||||
if(PROJECT_BUILD_SHARED_LIBS)
|
||||
link_libraries(
|
||||
${X11_LIBRARIES}
|
||||
sfml-audio
|
||||
sfml-graphics
|
||||
sfml-network
|
||||
sfml-system
|
||||
sfml-window
|
||||
)
|
||||
else()
|
||||
link_libraries(
|
||||
${X11_LIBRARIES}
|
||||
sfml-audio-s
|
||||
sfml-graphics-s
|
||||
sfml-network-s
|
||||
sfml-system-s
|
||||
sfml-window-s
|
||||
)
|
||||
endif()
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${X11_INCLUDE_DIR}
|
||||
${SFML_INCLUDE_DIR}
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(sfml_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/SFML-${SFML_VERSION}.tar.gz
|
||||
URL_HASH SHA256=82535db9e57105d4f3a8aedabd138631defaedc593cab589c924b7d7a11ffb9d
|
||||
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/SFML_patch.sh
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
sfml_project
|
||||
)
|
||||
|
||||
add_dependencies(sfml_project
|
||||
flac_project
|
||||
fontconfig_project
|
||||
freetype2_project
|
||||
openal_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
@ -1,33 +1,25 @@
|
||||
if(PROJECT_ENABLE_SPDLOG)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(spdlog ${SPDLOG_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_SPDLOG)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${SPDLOG_INCLUDE_DIRS}
|
||||
)
|
||||
find_package(spdlog ${SPDLOG_VERSION} REQUIRED)
|
||||
|
||||
link_libraries(
|
||||
spdlog::spdlog
|
||||
)
|
||||
include_directories(BEFORE SYSTEM ${SPDLOG_INCLUDE_DIRS})
|
||||
|
||||
link_libraries(spdlog::spdlog)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(spdlog_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/spdlog-${SPDLOG_VERSION}.tar.gz
|
||||
URL_HASH SHA256=1586508029a7d0670dfcb2d97575dcdc242d3868a259742b69f100801ab4e16b
|
||||
URL_HASH SHA256=${SPDLOG_HASH}
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DSPDLOG_BUILD_EXAMPLE=OFF
|
||||
-DSPDLOG_FMT_EXTERNAL=OFF
|
||||
-DSPDLOG_FMT_EXTERNAL_HO=OFF
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
spdlog_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES spdlog_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,32 +1,29 @@
|
||||
if(PROJECT_ENABLE_SQLITE)
|
||||
if(PROJECT_BUILD)
|
||||
add_definitions(-DPROJECT_ENABLE_SQLITE)
|
||||
if (PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX)
|
||||
pkg_check_modules(SQLITE3 REQUIRED sqlite3)
|
||||
include_directories(SYSTEM BEFORE ${SQLITE3_INCLUDE_DIRS})
|
||||
link_libraries(${SQLITE3_LIBRARIES})
|
||||
else()
|
||||
set(SQLITE_SYSTEM_ROOT ${PROJECT_BUILD_DIR}/external/src/sqlite_project)
|
||||
|
||||
set(SQLITE_SYSTEM_ROOT
|
||||
${PROJECT_BUILD_DIR}/external/src/sqlite_project
|
||||
)
|
||||
include_directories(SYSTEM BEFORE ${SQLITE_SYSTEM_ROOT})
|
||||
|
||||
include_directories(SYSTEM BEFORE
|
||||
${SQLITE_SYSTEM_ROOT}
|
||||
)
|
||||
|
||||
set(PROJECT_ADDITIONAL_SOURCES
|
||||
${PROJECT_ADDITIONAL_SOURCES}
|
||||
${SQLITE_SYSTEM_ROOT}/sqlite3.c
|
||||
)
|
||||
else()
|
||||
list(APPEND PROJECT_ADDITIONAL_SOURCES
|
||||
${SQLITE_SYSTEM_ROOT}/sqlite3.c
|
||||
)
|
||||
endif()
|
||||
elseif(NOT PROJECT_IS_MINGW OR PROJECT_IS_MINGW_UNIX)
|
||||
ExternalProject_Add(sqlite_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/sqlite-amalgamation-${SQLITE_VERSION}.zip
|
||||
URL_HASH SHA256=712a7d09d2a22652fb06a49af516e051979a3984adb067da86760e60ed51a7f5
|
||||
URL_HASH SHA256=${SQLITE_HASH}
|
||||
CONFIGURE_COMMAND echo "No configure"
|
||||
BUILD_COMMAND echo "No build"
|
||||
INSTALL_COMMAND echo "No install"
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
sqlite_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES sqlite_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,21 +1,17 @@
|
||||
if(PROJECT_ENABLE_STDUUID)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(stduuid REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_STDUUID)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${stduuid_INCLUDE_DIRS}
|
||||
)
|
||||
find_package(stduuid REQUIRED)
|
||||
|
||||
link_libraries(
|
||||
${stduuid_LIBRARIES}
|
||||
)
|
||||
include_directories(BEFORE SYSTEM ${stduuid_INCLUDE_DIRS})
|
||||
|
||||
link_libraries(${stduuid_LIBRARIES})
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(stduuid_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/stduuid-${STDUUID_VERSION}.tar.gz
|
||||
URL_HASH SHA256=b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3
|
||||
URL_HASH SHA256=${STDUUID_HASH}
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
@ -25,9 +21,6 @@ if(PROJECT_ENABLE_STDUUID)
|
||||
-DUUID_USING_CXX20_SPAN=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
stduuid_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES stduuid_project)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,18 +1,17 @@
|
||||
if(NOT PROJECT_BUILD AND PROJECT_ENABLE_TESTING)
|
||||
if(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
if (PROJECT_ENABLE_TESTING)
|
||||
if(PROJECT_BUILD)
|
||||
add_definitions(-DPROJECT_ENABLE_TESTING)
|
||||
elseif(NOT PROJECT_IS_MINGW)
|
||||
ExternalProject_Add(gtest_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/googletest-${GTEST_VERSION}.tar.gz
|
||||
URL_HASH SHA256=7315acb6bf10e99f332c8a43f00d5fbb1ee6ca48c52f6b936991b216c586aaad
|
||||
URL_HASH SHA256=${GTEST_HASH}
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
gtest_project
|
||||
)
|
||||
list(APPEND PROJECT_DEPENDENCIES gtest_project)
|
||||
endif()
|
||||
endif()
|
@ -1,27 +0,0 @@
|
||||
if(PROJECT_ENABLE_TPL)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(tiny-process-library REQUIRED)
|
||||
add_definitions(-DPROJECT_ENABLE_TPL)
|
||||
|
||||
link_libraries(
|
||||
tiny-process-library::tiny-process-library
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(tpl_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/tiny-process-library.tar.gz
|
||||
URL_HASH SHA256=82e46657e697aff5bf980387c86ef3aa05bb184622abbd75663a4df549c68f73
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DBUILD_TESTING=OFF
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
tpl_project
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -1,33 +0,0 @@
|
||||
if(PROJECT_ENABLE_VORBIS)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(Vorbis ${VORBIS_VERSION} REQUIRED)
|
||||
|
||||
add_definitions(-DPROJECT_ENABLE_VORBIS)
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${VORBIS_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_libraries(
|
||||
Vorbis::vorbis
|
||||
)
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(vorbis_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/vorbis-v${VORBIS_VERSION}.tar.gz
|
||||
URL_HASH SHA256=270c76933d0934e42c5ee0a54a36280e2d87af1de3cc3e584806357e237afd13
|
||||
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/vorbis_patch.sh ${PROJECT_3RD_PARTY_DIR} ${CMAKE_BINARY_DIR}/external/src/vorbis_project
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
vorbis_project
|
||||
)
|
||||
|
||||
add_dependencies(vorbis_project ogg_project)
|
||||
endif()
|
||||
endif()
|
@ -2,13 +2,9 @@ if(PROJECT_ENABLE_WINFSP AND PROJECT_IS_MINGW)
|
||||
if(PROJECT_BUILD)
|
||||
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.0/inc)
|
||||
|
||||
link_directories(BEFORE
|
||||
${PROJECT_3RD_PARTY_DIR}/winfsp-2.0/lib
|
||||
)
|
||||
link_directories(BEFORE ${PROJECT_3RD_PARTY_DIR}/winfsp-2.0/lib)
|
||||
|
||||
if(PROJECT_IS_ARM64)
|
||||
link_libraries(winfsp-a64)
|
||||
|
@ -1,47 +0,0 @@
|
||||
if(PROJECT_ENABLE_WXWIDGETS)
|
||||
if(PROJECT_BUILD)
|
||||
find_package(OpenGL REQUIRED)
|
||||
find_package(wxWidgets ${WXWIDGETS_VERSION} REQUIRED
|
||||
COMPONENTS
|
||||
net
|
||||
core
|
||||
base
|
||||
gl
|
||||
adv
|
||||
xml
|
||||
aui
|
||||
html
|
||||
media
|
||||
propgrid
|
||||
qa
|
||||
ribbon
|
||||
richtext
|
||||
stc
|
||||
webview
|
||||
xrc
|
||||
)
|
||||
if(wxWidgets_USE_FILE)
|
||||
include(${wxWidgets_USE_FILE})
|
||||
endif()
|
||||
link_libraries(${wxWidgets_LIBRARIES})
|
||||
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||
ExternalProject_Add(wxwidgets_project
|
||||
PREFIX external
|
||||
URL ${PROJECT_3RD_PARTY_DIR}/wxWidgets-${WXWIDGETS_VERSION}.tar.bz2
|
||||
URL_HASH SHA256=0ad86a3ad3e2e519b6a705248fc9226e3a09bbf069c6c692a02acf7c2d1c6b51
|
||||
LIST_SEPARATOR |
|
||||
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DwxBUILD_MONOLITHIC=OFF
|
||||
-DwxBUILD_SHARED=${PROJECT_BUILD_SHARED_LIBS}
|
||||
)
|
||||
|
||||
set(PROJECT_DEPENDENCIES
|
||||
${PROJECT_DEPENDENCIES}
|
||||
wxwidgets_project
|
||||
)
|
||||
|
||||
add_dependencies(wxwidgets_project curl_project)
|
||||
endif()
|
||||
endif()
|
@ -1,64 +1,14 @@
|
||||
option(PROJECT_ENABLE_BOOST "Enable boost libraries" OFF)
|
||||
option(PROJECT_ENABLE_CLI11 "Enable CLI11 library" OFF)
|
||||
option(PROJECT_ENABLE_CPP_HTTPLIB "Enable cpp-httplib" OFF)
|
||||
option(PROJECT_ENABLE_CURL "Enable curl library" OFF)
|
||||
option(PROJECT_ENABLE_DTL "Enable DTL" OFF)
|
||||
option(PROJECT_ENABLE_FLAC "Enable FLAC library" OFF)
|
||||
option(PROJECT_ENABLE_FMT "Enable fmt library" OFF)
|
||||
option(PROJECT_ENABLE_FONTCONFIG "Enable fontconfig library" OFF)
|
||||
option(PROJECT_ENABLE_FREETYPE2 "Enable freetype2 library" OFF)
|
||||
option(PROJECT_ENABLE_FUSE "Enable FUSE" OFF)
|
||||
option(PROJECT_ENABLE_FZF "Enable fzf" OFF)
|
||||
option(PROJECT_ENABLE_GTKMM "Enable gtkmm" OFF)
|
||||
option(PROJECT_ENABLE_JSON "Enable JSON for Modern C++ library" OFF)
|
||||
option(PROJECT_ENABLE_LIBBITCOIN_SYSTEM "Enable libbitcoin-system library" OFF)
|
||||
option(PROJECT_ENABLE_LIBEVENT "Enable libevent library" OFF)
|
||||
option(PROJECT_ENABLE_LIBSODIUM "Enable libsodium library" OFF)
|
||||
option(PROJECT_ENABLE_NUSPELL "Enable nuspell" OFF)
|
||||
option(PROJECT_ENABLE_OGG "Enable OGG library" OFF)
|
||||
option(PROJECT_ENABLE_OPENAL "Enable OpenAL" OFF)
|
||||
option(PROJECT_ENABLE_OPENSSL "Enable OpenSSL library" OFF)
|
||||
option(PROJECT_ENABLE_PUGIXML "Enable PugiXML library" OFF)
|
||||
option(PROJECT_ENABLE_ROCKSDB "Enable RocksDB library" OFF)
|
||||
option(PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS "Enable Sago platform folders" OFF)
|
||||
option(PROJECT_ENABLE_SECP256K1 "Enable secp256k1 library" OFF)
|
||||
option(PROJECT_ENABLE_SFML "Enable SFML" OFF)
|
||||
option(PROJECT_ENABLE_SPDLOG "Enable spdlog library" OFF)
|
||||
option(PROJECT_ENABLE_SQLITE "Enable SQLite" OFF)
|
||||
option(PROJECT_ENABLE_STDUUID "Enable stduuid library" OFF)
|
||||
option(PROJECT_ENABLE_TESTING "Enable building unit tests" OFF)
|
||||
option(PROJECT_ENABLE_TPL "Enable tiny process library" OFF)
|
||||
option(PROJECT_ENABLE_VORBIS "Enable Vorbis library" OFF)
|
||||
option(PROJECT_ENABLE_WINFSP "Enable WinFSP" OFF)
|
||||
option(PROJECT_ENABLE_WXWIDGETS "Enable wxWidgets library" OFF)
|
||||
|
||||
option(PROJECT_REQUIRE_ALPINE "Require Alpine Linux as build system" OFF)
|
||||
option(PROJECT_STATIC_LINK "Static link executables" OFF)
|
||||
|
||||
if(PROJECT_ENABLE_FZF)
|
||||
add_definitions(-DPROJECT_ENABLE_FZF)
|
||||
endif()
|
||||
|
||||
if(PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS)
|
||||
add_definitions(-DPROJECT_ENABLE_SAGO_PLATFORM_FOLDERS)
|
||||
endif()
|
||||
|
||||
if(PROJECT_ENABLE_TESTING)
|
||||
add_definitions(-DPROJECT_ENABLE_TESTING)
|
||||
endif()
|
||||
|
||||
if(PROJECT_STATIC_LINK)
|
||||
add_definitions(-DPROJECT_STATIC_LINK)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_MINGW)
|
||||
add_definitions(-DPROJECT_IS_MINGW)
|
||||
endif()
|
||||
|
||||
if(PROJECT_REQUIRE_ALPINE)
|
||||
add_definitions(-DPROJECT_REQUIRE_ALPINE)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_ARM64)
|
||||
add_definitions(-DPROJECT_IS_ARM64)
|
||||
endif()
|
||||
option(PROJECT_ENABLE_BOOST "Enable boost libraries" ON)
|
||||
option(PROJECT_ENABLE_CPP_HTTPLIB "Enable cpp-httplib" ON)
|
||||
option(PROJECT_ENABLE_CURL "Enable curl library" ON)
|
||||
option(PROJECT_ENABLE_FUSE "Enable FUSE" ON)
|
||||
option(PROJECT_ENABLE_JSON "Enable JSON for Modern C++ library" ON)
|
||||
option(PROJECT_ENABLE_LIBSODIUM "Enable libsodium library" ON)
|
||||
option(PROJECT_ENABLE_OPENSSL "Enable OpenSSL library" ON)
|
||||
option(PROJECT_ENABLE_PUGIXML "Enable PugiXML library" ON)
|
||||
option(PROJECT_ENABLE_ROCKSDB "Enable RocksDB library" ON)
|
||||
option(PROJECT_ENABLE_SPDLOG "Enable spdlog library" ON)
|
||||
option(PROJECT_ENABLE_SQLITE "Enable SQLite" ON)
|
||||
option(PROJECT_ENABLE_STDUUID "Enable stduuid library" ON)
|
||||
option(PROJECT_ENABLE_TESTING "Enable building unit tests" ON)
|
||||
option(PROJECT_ENABLE_WINFSP "Enable WinFSP" ON)
|
||||
|
@ -41,7 +41,7 @@ if(PROJECT_IS_MINGW)
|
||||
endif()
|
||||
|
||||
include_directories(BEFORE SYSTEM
|
||||
${PROJECT_3RD_PARTY_DIR}/include
|
||||
${PROJECT_SUPPORT_DIR}/include
|
||||
${PROJECT_EXTERNAL_BUILD_ROOT}/include
|
||||
)
|
||||
|
||||
|
@ -1,41 +1,28 @@
|
||||
set(BINUTILS_VERSION 2.41)
|
||||
set(BINUTILS_VERSION 2.43)
|
||||
set(BOOST2_MAJOR_VERSION 1)
|
||||
set(BOOST2_MINOR_VERSION 76)
|
||||
set(BOOST2_PATCH_VERSION 0)
|
||||
set(BOOST_MAJOR_VERSION 1)
|
||||
set(BOOST_MINOR_VERSION 85)
|
||||
set(BOOST_MINOR_VERSION 87)
|
||||
set(BOOST_PATCH_VERSION 0)
|
||||
set(CLI11_VERSION 2.4.2)
|
||||
set(CPP_HTTPLIB_VERSION 0.16.0)
|
||||
set(CURL_VERSION 8.8.0)
|
||||
set(DTL_VERSION 2.01)
|
||||
set(EXPAT_VERSION 2.6.2)
|
||||
set(FLAC_VERSION 1.4.3)
|
||||
set(FMT_VERSION 10.2.1)
|
||||
set(FONTCONFIG_VERSION 2.15.0)
|
||||
set(FREETYPE2_VERSION 2.13.2)
|
||||
set(GCC_VERSION 13.2.0)
|
||||
set(GTEST_VERSION 1.15.0)
|
||||
set(GTKMM_VERSION 3.0)
|
||||
set(ICU_VERSION 75-1)
|
||||
set(CPP_HTTPLIB_VERSION 0.19.0)
|
||||
set(CURL2_VERSION 8_12_1)
|
||||
set(CURL_VERSION 8.12.1)
|
||||
set(EXPAT2_VERSION 2_6_4)
|
||||
set(EXPAT_VERSION 2.6.4)
|
||||
set(GCC_VERSION 14.2.0)
|
||||
set(GTEST_VERSION 1.16.0)
|
||||
set(ICU_VERSION 76-1)
|
||||
set(JSON_VERSION 3.11.3)
|
||||
set(LIBBITCOIN_SYSTEM_VERSION 3.8.0)
|
||||
set(LIBEVENT_VERSION 2.1.12)
|
||||
set(LIBSODIUM_VERSION 1.0.20)
|
||||
set(MESA_VERSION 23.3.3)
|
||||
set(MINGW_VERSION 11.0.1)
|
||||
set(NUSPELL_VERSION 5.1.4)
|
||||
set(OGG_VERSION 1.3.5)
|
||||
set(OPENAL_VERSION 1.23.1)
|
||||
set(OPENSSL_VERSION 3.3.1)
|
||||
set(MINGW_VERSION 12.0.0)
|
||||
set(OPENSSL_VERSION 3.4.1)
|
||||
set(PKG_CONFIG_VERSION 0.29.2)
|
||||
set(PUGIXML_VERSION 1.14)
|
||||
set(ROCKSDB_VERSION 9.4.0)
|
||||
set(SECP256K1_VERSION 0.1.0.20)
|
||||
set(SFML_VERSION 2.6.1)
|
||||
set(SPDLOG_VERSION 1.14.1)
|
||||
set(SQLITE_VERSION 3460000)
|
||||
set(PUGIXML_VERSION 1.15)
|
||||
set(ROCKSDB_VERSION 9.10.0)
|
||||
set(SPDLOG_VERSION 1.15.1)
|
||||
set(SQLITE2_VERSION 3.49.1)
|
||||
set(SQLITE_VERSION 3490100)
|
||||
set(STDUUID_VERSION 1.2.3)
|
||||
set(VORBIS_VERSION 1.3.7)
|
||||
set(WXWIDGETS_VERSION 3.2.5)
|
||||
set(ZLIB_VERSION 1.3.1)
|
||||
|
19
config.sh
19
config.sh
@ -2,15 +2,15 @@
|
||||
|
||||
PROJECT_NAME="repertory"
|
||||
|
||||
PROJECT_URL="https://git.fifthgrid.com/blockstorage/repertory"
|
||||
|
||||
PROJECT_COMPANY_NAME="https://git.fifthgrid.com/blockstorage"
|
||||
PROJECT_COPYRIGHT="Copyright <2018-2024> <MIT License> <${PROJECT_URL}>"
|
||||
PROJECT_URL="${PROJECT_COMPANY_NAME}/repertory"
|
||||
|
||||
PROJECT_COPYRIGHT="Copyright <2018-2025> <MIT License> <${PROJECT_URL}>"
|
||||
PROJECT_DESC="Mount utility for Sia and S3"
|
||||
|
||||
PROJECT_MAJOR_VERSION=2
|
||||
PROJECT_MINOR_VERSION=0
|
||||
PROJECT_REVISION_VERSION=2
|
||||
PROJECT_REVISION_VERSION=5
|
||||
PROJECT_RELEASE_NUM=0
|
||||
PROJECT_RELEASE_ITER=rc
|
||||
|
||||
@ -19,6 +19,11 @@ PROJECT_APP_LIST=(${PROJECT_NAME})
|
||||
PROJECT_PRIVATE_KEY=${DEVELOPER_PRIVATE_KEY}
|
||||
PROJECT_PUBLIC_KEY=${DEVELOPER_PUBLIC_KEY}
|
||||
|
||||
PROJECT_FLUTTER_BASE_HREF="/ui/"
|
||||
|
||||
PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF
|
||||
|
||||
PROJECT_ENABLE_BACKWARD_CPP=OFF
|
||||
PROJECT_ENABLE_BOOST=ON
|
||||
PROJECT_ENABLE_CPP_HTTPLIB=ON
|
||||
PROJECT_ENABLE_CURL=ON
|
||||
@ -27,6 +32,8 @@ PROJECT_ENABLE_JSON=ON
|
||||
PROJECT_ENABLE_LIBSODIUM=ON
|
||||
PROJECT_ENABLE_OPENSSL=ON
|
||||
PROJECT_ENABLE_PUGIXML=ON
|
||||
PROJECT_ENABLE_ROCKSDB=ON
|
||||
PROJECT_ENABLE_SPDLOG=ON
|
||||
PROJECT_ENABLE_SQLITE=ON
|
||||
PROJECT_ENABLE_STDUUID=ON
|
||||
PROJECT_ENABLE_TESTING=ON
|
||||
@ -40,3 +47,7 @@ PROJECT_MSYS2_PACKAGE_LIST+=()
|
||||
if [ "${PROJECT_ENABLE_TESTING}" == "ON" ]; then
|
||||
PROJECT_APP_LIST+=(${PROJECT_NAME}_test)
|
||||
fi
|
||||
|
||||
if [ -f "./override.sh" ]; then
|
||||
. ./override.sh
|
||||
fi
|
||||
|
@ -1,4 +1,5 @@
|
||||
FROM arm64v8/alpine:3.20.1
|
||||
#comment
|
||||
FROM arm64v8/alpine:3.21.3
|
||||
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
|
||||
CMD bash
|
||||
|
||||
@ -10,10 +11,13 @@ RUN apk add \
|
||||
bash \
|
||||
binutils \
|
||||
binutils-dev \
|
||||
bison \
|
||||
boost-dev \
|
||||
bzip2-static \
|
||||
cmake \
|
||||
diffutils \
|
||||
elfutils-dev \
|
||||
file \
|
||||
fontconfig-dev \
|
||||
fontconfig-static \
|
||||
freetype \
|
||||
@ -27,6 +31,7 @@ RUN apk add \
|
||||
gflags \
|
||||
gflags-dev \
|
||||
git \
|
||||
git-lfs \
|
||||
icu-dev \
|
||||
icu-libs \
|
||||
icu-static \
|
||||
@ -62,6 +67,9 @@ RUN apk add \
|
||||
perl \
|
||||
pkgconfig \
|
||||
rsync \
|
||||
tcl \
|
||||
tcl-dev \
|
||||
texinfo \
|
||||
wget \
|
||||
xz \
|
||||
xz-dev \
|
||||
@ -74,3 +82,6 @@ RUN apk add \
|
||||
zstd-libs \
|
||||
zstd-static \
|
||||
xz-static
|
||||
|
||||
RUN ln -sf /usr/bin/aclocal-1.17 /usr/bin/aclocal-1.16
|
||||
RUN ln -sf /usr/bin/automake-1.17 /usr/bin/automake-1.16
|
||||
|
@ -1,4 +1,5 @@
|
||||
FROM alpine:3.20.1
|
||||
#comment
|
||||
FROM alpine:3.21.3
|
||||
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
|
||||
CMD bash
|
||||
|
||||
@ -10,10 +11,13 @@ RUN apk add \
|
||||
bash \
|
||||
binutils \
|
||||
binutils-dev \
|
||||
bison \
|
||||
boost-dev \
|
||||
bzip2-static \
|
||||
cmake \
|
||||
diffutils \
|
||||
elfutils-dev \
|
||||
file \
|
||||
fontconfig-dev \
|
||||
fontconfig-static \
|
||||
freetype \
|
||||
@ -27,6 +31,7 @@ RUN apk add \
|
||||
gflags \
|
||||
gflags-dev \
|
||||
git \
|
||||
git-lfs \
|
||||
icu-dev \
|
||||
icu-libs \
|
||||
icu-static \
|
||||
@ -62,6 +67,9 @@ RUN apk add \
|
||||
perl \
|
||||
pkgconfig \
|
||||
rsync \
|
||||
tcl \
|
||||
tcl-dev \
|
||||
texinfo \
|
||||
wget \
|
||||
xz \
|
||||
xz-dev \
|
||||
@ -74,3 +82,6 @@ RUN apk add \
|
||||
zstd-libs \
|
||||
zstd-static \
|
||||
xz-static
|
||||
|
||||
RUN ln -sf /usr/bin/aclocal-1.17 /usr/bin/aclocal-1.16
|
||||
RUN ln -sf /usr/bin/automake-1.17 /usr/bin/automake-1.16
|
||||
|
48
docker/x86_64/flutter
Normal file
48
docker/x86_64/flutter
Normal file
@ -0,0 +1,48 @@
|
||||
FROM debian:latest
|
||||
|
||||
ARG UID=0
|
||||
ARG GID=0
|
||||
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y \
|
||||
bash \
|
||||
curl \
|
||||
fonts-droid-fallback \
|
||||
gdb \
|
||||
git \
|
||||
lib32stdc++6 \
|
||||
libgconf-2-4 \
|
||||
libglu1-mesa \
|
||||
libstdc++6 \
|
||||
python3 \
|
||||
unzip \
|
||||
wget
|
||||
RUN apt-get clean
|
||||
|
||||
RUN git clone https://github.com/flutter/flutter.git /flutter
|
||||
RUN git config --system --add safe.directory /flutter
|
||||
|
||||
ENV PATH="/flutter/bin:/flutter/bin/cache/dart-sdk/bin:${PATH}"
|
||||
|
||||
RUN flutter doctor -v
|
||||
RUN flutter channel master
|
||||
RUN flutter upgrade
|
||||
RUN flutter --disable-analytics
|
||||
|
||||
RUN flutter config --no-analytics
|
||||
RUN flutter config --enable-web
|
||||
RUN flutter config --no-cli-animations
|
||||
|
||||
RUN mkdir /nonexistent
|
||||
RUN chown -R $UID:$GID /nonexistent
|
||||
|
||||
RUN mkdir /.config
|
||||
RUN chown -R $UID:$GID /.config
|
||||
|
||||
RUN mkdir /.dart-tool
|
||||
RUN chown -R $UID:$GID /.dart-tool
|
||||
|
||||
RUN mkdir /.pub-cache
|
||||
RUN chown -R $UID:$GID /.pub-cache
|
||||
|
||||
RUN chown -R $UID:$GID /flutter
|
@ -1,5 +1,5 @@
|
||||
# comment
|
||||
FROM alpine:3.20.1
|
||||
#comment
|
||||
FROM alpine:3.21.3
|
||||
|
||||
RUN apk update
|
||||
RUN apk upgrade
|
||||
@ -12,11 +12,13 @@ RUN apk add \
|
||||
bzip2 \
|
||||
clang17-extra-tools \
|
||||
cmake \
|
||||
file \
|
||||
flex \
|
||||
g++ \
|
||||
gcc \
|
||||
gettext \
|
||||
git \
|
||||
git-lfs \
|
||||
gmp \
|
||||
gmp-dev \
|
||||
gperf \
|
||||
@ -39,6 +41,7 @@ RUN apk add \
|
||||
python3 \
|
||||
rsync \
|
||||
ruby \
|
||||
texinfo \
|
||||
unzip \
|
||||
wget \
|
||||
wine \
|
||||
@ -58,6 +61,9 @@ ENV MY_MINGW_PREFIX=${MINGW_PREFIX}
|
||||
ARG NUM_JOBS=2
|
||||
ENV MY_NUM_JOBS=${NUM_JOBS}
|
||||
|
||||
ARG CXX_STANDARD=20
|
||||
ENV MY_CXX_STANDARD=${CXX_STANDARD}
|
||||
|
||||
ARG TOOLCHAIN_FILE_CMAKE=/cmake_toolchain.cmake
|
||||
ENV MY_TOOLCHAIN_FILE_CMAKE=${TOOLCHAIN_FILE_CMAKE}
|
||||
RUN echo -e \
|
||||
@ -87,8 +93,8 @@ RUN echo -e \
|
||||
"windres = '${MY_MINGW_PREFIX}-windres'\n"\
|
||||
"exe_wrapper = 'wine64'\n"\
|
||||
"[properties]\n"\
|
||||
"c_args = []\n"\
|
||||
"c_link_args = []\n"\
|
||||
"c_args = ['-I${MY_MINGW_DIR}/include']\n"\
|
||||
"c_link_args = ['-L${MY_MINGW_DIR}/lib', '-L${MY_MINGW_DIR}/lib64']\n"\
|
||||
"[host_machine]\n"\
|
||||
"cpu = 'x86_64'\n"\
|
||||
"cpu_family = 'x86_64'\n"\
|
||||
@ -104,15 +110,12 @@ RUN mkdir -p \
|
||||
${MY_MINGW_DIR}/lib/pkgconfig \
|
||||
${MY_MINGW_DIR}/lib64/pkgconfig
|
||||
|
||||
ENV LDFLAGS="-L${MY_MINGW_DIR}/lib -L${MY_MINGW_DIR}/lib64"
|
||||
ENV PATH="${MY_MINGW_DIR}/bin:/usr/local/bin:${PATH}"
|
||||
ENV PKG_CONFIG_PATH="${MY_MINGW_DIR}/lib/pkgconfig:${MY_MINGW_DIR}/lib64/pkgconfig"
|
||||
|
||||
ADD ./3rd_party /3rd_party
|
||||
|
||||
ARG BINUTILS_VERSION
|
||||
ENV MY_BINUTILS_VERSION=${BINUTILS_VERSION}
|
||||
RUN tar xvJf /3rd_party/mingw64/binutils-${MY_BINUTILS_VERSION}.tar.xz \
|
||||
RUN cd /3rd_party/mingw64 && sha256sum -c ./binutils-${MY_BINUTILS_VERSION}.tar.xz.sha256 && cd - \
|
||||
&& tar xvJf /3rd_party/mingw64/binutils-${MY_BINUTILS_VERSION}.tar.xz \
|
||||
&& cd binutils-${MY_BINUTILS_VERSION} \
|
||||
&& ./configure \
|
||||
--disable-lto \
|
||||
@ -132,10 +135,11 @@ RUN tar xvJf /3rd_party/mingw64/binutils-${MY_BINUTILS_VERSION}.tar.xz \
|
||||
|
||||
ARG MINGW_VERSION
|
||||
ENV MY_MINGW_VERSION=${MINGW_VERSION}
|
||||
RUN tar xvzf /3rd_party/mingw64/mingw-w64-${MY_MINGW_VERSION}.tar.gz \
|
||||
RUN cd /3rd_party/mingw64 && sha256sum -c ./mingw-w64-v${MY_MINGW_VERSION}.tar.bz2.sha256 && cd - \
|
||||
&& tar xvjf /3rd_party/mingw64/mingw-w64-v${MY_MINGW_VERSION}.tar.bz2 \
|
||||
&& mkdir mingw-w64 \
|
||||
&& cd mingw-w64 \
|
||||
&& ../mingw-w64-${MY_MINGW_VERSION}/mingw-w64-headers/configure \
|
||||
&& ../mingw-w64-v${MY_MINGW_VERSION}/mingw-w64-headers/configure \
|
||||
--enable-sdk=all \
|
||||
--host=${MY_MINGW_PREFIX} \
|
||||
--prefix=/usr/local/${MY_MINGW_PREFIX} \
|
||||
@ -143,7 +147,8 @@ RUN tar xvzf /3rd_party/mingw64/mingw-w64-${MY_MINGW_VERSION}.tar.gz \
|
||||
|
||||
ARG GCC_VERSION
|
||||
ENV MY_GCC_VERSION=${GCC_VERSION}
|
||||
RUN tar xvzf /3rd_party/mingw64/gcc-${MY_GCC_VERSION}.tar.gz \
|
||||
RUN cd /3rd_party/mingw64 && sha256sum -c ./gcc-${MY_GCC_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/mingw64/gcc-${MY_GCC_VERSION}.tar.gz \
|
||||
&& (mv gcc-releases-gcc-${MY_GCC_VERSION} gcc-${MY_GCC_VERSION} || echo "") \
|
||||
&& mkdir gcc \
|
||||
&& cd gcc \
|
||||
@ -186,7 +191,7 @@ RUN tar xvzf /3rd_party/mingw64/gcc-${MY_GCC_VERSION}.tar.gz \
|
||||
&& make install-gcc
|
||||
|
||||
RUN cd mingw-w64 \
|
||||
&& ../mingw-w64-${MY_MINGW_VERSION}/mingw-w64-crt/configure \
|
||||
&& ../mingw-w64-v${MY_MINGW_VERSION}/mingw-w64-crt/configure \
|
||||
--disable-lib32 \
|
||||
--enable-lib64 \
|
||||
--enable-wildcard \
|
||||
@ -196,7 +201,7 @@ RUN cd mingw-w64 \
|
||||
&& make install
|
||||
|
||||
RUN cd mingw-w64 \
|
||||
&& ../mingw-w64-${MY_MINGW_VERSION}/mingw-w64-libraries/winpthreads/configure \
|
||||
&& ../mingw-w64-v${MY_MINGW_VERSION}/mingw-w64-libraries/winpthreads/configure \
|
||||
--enable-shared \
|
||||
--enable-static \
|
||||
--host=${MY_MINGW_PREFIX} \
|
||||
@ -211,11 +216,12 @@ RUN cd gcc \
|
||||
RUN cp /usr/local/${MY_MINGW_PREFIX}/lib/*.dll ${MY_MINGW_DIR}/bin \
|
||||
&& cp /usr/local/${MY_MINGW_PREFIX}/bin/*.dll ${MY_MINGW_DIR}/bin \
|
||||
&& rm -r gcc gcc-${MY_GCC_VERSION} \
|
||||
&& rm -r mingw-w64 mingw-w64-${MY_MINGW_VERSION}
|
||||
&& rm -r mingw-w64 mingw-w64-v${MY_MINGW_VERSION}
|
||||
|
||||
ARG PKG_CONFIG_VERSION
|
||||
ENV MY_PKG_CONFIG_VERSION=${PKG_CONFIG_VERSION}
|
||||
RUN tar xvzf /3rd_party/mingw64/pkg-config-${MY_PKG_CONFIG_VERSION}.tar.gz \
|
||||
RUN cd /3rd_party/mingw64 && sha256sum -c ./pkg-config-${MY_PKG_CONFIG_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/mingw64/pkg-config-${MY_PKG_CONFIG_VERSION}.tar.gz \
|
||||
&& cd pkg-config-${MY_PKG_CONFIG_VERSION} \
|
||||
&& ./configure \
|
||||
--disable-nls \
|
||||
@ -232,25 +238,83 @@ RUN python3 -m pip install --break-system-packages -U mako
|
||||
RUN python3 -m pip install --break-system-packages -U meson
|
||||
RUN python3 -m pip install --break-system-packages -U packaging
|
||||
|
||||
ENV CXXFLAGS="-std=gnu++20"
|
||||
ENV LDFLAGS="-L${MY_MINGW_DIR}/lib -L${MY_MINGW_DIR}/lib64"
|
||||
ENV PATH="${MY_MINGW_DIR}/bin:/usr/local/bin:${PATH}"
|
||||
ENV PKG_CONFIG_PATH="${MY_MINGW_DIR}/lib/pkgconfig:${MY_MINGW_DIR}/lib64/pkgconfig"
|
||||
|
||||
ARG ZLIB_VERSION
|
||||
ENV MY_ZLIB_VERSION=${ZLIB_VERSION}
|
||||
RUN tar xvzf /3rd_party/mingw64/zlib-${MY_ZLIB_VERSION}.tar.gz \
|
||||
RUN cd /3rd_party/mingw64 && sha256sum -c ./zlib-${MY_ZLIB_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/mingw64/zlib-${MY_ZLIB_VERSION}.tar.gz \
|
||||
&& cd zlib-${MY_ZLIB_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r zlib-${MY_ZLIB_VERSION}
|
||||
|
||||
ARG LIBJPEG_TURBO_VERSION
|
||||
ENV MY_LIBJPEG_TURBO_VERSION=${LIBJPEG_TURBO_VERSION}
|
||||
RUN if [ -f "/3rd_party/libjpeg_turbo-${MY_LIBJPEG_TURBO_VERSION}.tar.gz" ]; then \
|
||||
cd /3rd_party && sha256sum -c ./libjpeg_turbo-${MY_LIBJPEG_TURBO_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/libjpeg_turbo-${MY_LIBJPEG_TURBO_VERSION}.tar.gz \
|
||||
&& cd libjpeg-turbo-${MY_LIBJPEG_TURBO_VERSION} \
|
||||
&& mkdir _build \
|
||||
&& cd _build \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_SYSTEM_PROCESSOR=AMD64 \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DENABLE_SHARED=ON \
|
||||
-DENABLE_STATIC=ON \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r libjpeg-turbo-${MY_LIBJPEG_TURBO_VERSION} \
|
||||
; fi
|
||||
|
||||
ARG LIBPNG_VERSION
|
||||
ENV MY_LIBPNG_VERSION=${LIBPNG_VERSION}
|
||||
RUN if [ -f "/3rd_party/libpng-v${MY_LIBPNG_VERSION}.tar.gz" ]; then \
|
||||
cd /3rd_party && sha256sum -c ./libpng-v${MY_LIBPNG_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/libpng-v${MY_LIBPNG_VERSION}.tar.gz \
|
||||
&& cd libpng-${MY_LIBPNG_VERSION} \
|
||||
&& mkdir _build \
|
||||
&& cd _build \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DPNG_SHARED=ON \
|
||||
-DPNG_STATIC=ON \
|
||||
-DPNG_TESTS=OFF \
|
||||
-DPNG_TOOLS=OFF \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r libpng-${MY_LIBPNG_VERSION} \
|
||||
; fi
|
||||
|
||||
ARG FREETYPE2_VERSION
|
||||
ENV MY_FREETYPE2_VERSION=${FREETYPE2_VERSION}
|
||||
RUN if [ -f "/3rd_party/freetype-${MY_FREETYPE2_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/freetype-${MY_FREETYPE2_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./freetype-${MY_FREETYPE2_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/freetype-${MY_FREETYPE2_VERSION}.tar.gz \
|
||||
&& cd freetype-${MY_FREETYPE2_VERSION} \
|
||||
&& meson setup \
|
||||
--cross-file ${MY_TOOLCHAIN_FILE_MESON} \
|
||||
@ -266,26 +330,30 @@ RUN if [ -f "/3rd_party/freetype-${MY_FREETYPE2_VERSION}.tar.gz" ]; then \
|
||||
|
||||
ARG EXPAT_VERSION
|
||||
ENV MY_EXPAT_VERSION=${EXPAT_VERSION}
|
||||
RUN tar xvzf /3rd_party/mingw64/expat-${MY_EXPAT_VERSION}.tar.gz \
|
||||
&& cd expat-${MY_EXPAT_VERSION} \
|
||||
RUN cd /3rd_party/mingw64 && sha256sum -c ./expat-${MY_EXPAT_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/mingw64/expat-${MY_EXPAT_VERSION}.tar.gz \
|
||||
&& cd libexpat-*/expat \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DEXPAT_BUILD_DOCS=OFF \
|
||||
-DEXPAT_BUILD_EXAMPLES=OFF \
|
||||
-DEXPAT_BUILD_TESTS=OFF \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r expat-${MY_EXPAT_VERSION}
|
||||
&& rm -r libexpat-*
|
||||
|
||||
ARG FONTCONFIG_VERSION
|
||||
ENV MY_FONTCONFIG_VERSION=${FONTCONFIG_VERSION}
|
||||
RUN if [ -f "/3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./fontconfig-${MY_FONTCONFIG_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.gz \
|
||||
&& cd fontconfig-${MY_FONTCONFIG_VERSION} \
|
||||
&& meson setup \
|
||||
--cross-file ${MY_TOOLCHAIN_FILE_MESON} \
|
||||
@ -305,12 +373,15 @@ RUN if [ -f "/3rd_party/fontconfig-${MY_FONTCONFIG_VERSION}.tar.gz" ]; then \
|
||||
ARG OPENAL_VERSION
|
||||
ENV MY_OPENAL_VERSION=${OPENAL_VERSION}
|
||||
RUN if [ -f "/3rd_party/openal-${MY_OPENAL_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/openal-${MY_OPENAL_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./openal-${MY_OPENAL_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/openal-${MY_OPENAL_VERSION}.tar.gz \
|
||||
&& cd openal-soft-${MY_OPENAL_VERSION} \
|
||||
&& mkdir _build \
|
||||
&& cd _build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& mv ${MY_MINGW_DIR}/bin/OpenAL32.dll ${MY_MINGW_DIR}/bin/openal32.dll \
|
||||
@ -320,10 +391,11 @@ RUN if [ -f "/3rd_party/openal-${MY_OPENAL_VERSION}.tar.gz" ]; then \
|
||||
|
||||
ARG ICU_VERSION
|
||||
ENV MY_ICU_VERSION=${ICU_VERSION}
|
||||
RUN tar xvzf /3rd_party/mingw64/icu-release-${MY_ICU_VERSION}.tar.gz \
|
||||
RUN cd /3rd_party/mingw64 && sha256sum -c ./icu-release-${MY_ICU_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/mingw64/icu-release-${MY_ICU_VERSION}.tar.gz \
|
||||
&& cp -r icu-release-${MY_ICU_VERSION} icu-release-${MY_ICU_VERSION}-cross \
|
||||
&& cd icu-release-${MY_ICU_VERSION}-cross/icu4c/source \
|
||||
&& ./configure \
|
||||
&& CXXFLAGS="-std=gnu++17" ./configure \
|
||||
--disable-samples \
|
||||
--disable-tests \
|
||||
--enable-shared \
|
||||
@ -334,7 +406,7 @@ RUN tar xvzf /3rd_party/mingw64/icu-release-${MY_ICU_VERSION}.tar.gz \
|
||||
|
||||
RUN cd ${MY_WORKDIR} \
|
||||
&& cd icu-release-${MY_ICU_VERSION}/icu4c/source \
|
||||
&& ./configure \
|
||||
&& CXXFLAGS="-std=gnu++17" ./configure \
|
||||
--build=x86_64-alpine-linux-musl \
|
||||
--disable-samples \
|
||||
--disable-tests \
|
||||
@ -353,12 +425,14 @@ RUN cd ${MY_WORKDIR} \
|
||||
ARG OPENSSL_VERSION
|
||||
ENV MY_OPENSSL_VERSION=${OPENSSL_VERSION}
|
||||
RUN if [ -f "/3rd_party/openssl-${MY_OPENSSL_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/openssl-${MY_OPENSSL_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./openssl-${MY_OPENSSL_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/openssl-${MY_OPENSSL_VERSION}.tar.gz \
|
||||
&& cd openssl-${MY_OPENSSL_VERSION} \
|
||||
&& ./Configure \
|
||||
--cross-compile-prefix=${MY_MINGW_PREFIX}- \
|
||||
--prefix=${MY_MINGW_DIR} \
|
||||
mingw64 \
|
||||
no-shared \
|
||||
no-apps \
|
||||
no-docs \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
@ -375,11 +449,14 @@ ARG BOOST2_PATCH_VERSION
|
||||
ENV MY_BOOST2_PATCH_VERSION=${BOOST2_PATCH_VERSION}
|
||||
ENV MY_BOOST2_VERSION=${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSION}_${MY_BOOST2_PATCH_VERSION}
|
||||
RUN if [ -f "/3rd_party/boost_${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSION}_${MY_BOOST2_PATCH_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/boost_${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSION}_${MY_BOOST2_PATCH_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./boost_${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSION}_${MY_BOOST2_PATCH_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/boost_${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSION}_${MY_BOOST2_PATCH_VERSION}.tar.gz \
|
||||
&& cd boost_${MY_BOOST2_VERSION} \
|
||||
&& ./bootstrap.sh \
|
||||
--with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread \
|
||||
address-model=64 \
|
||||
cxxstd=${MY_CXX_STANDARD} \
|
||||
cxxstd-dialect=gnu \
|
||||
architecture=x86 \
|
||||
link=static,shared \
|
||||
target-os=windows \
|
||||
@ -392,6 +469,8 @@ RUN if [ -f "/3rd_party/boost_${MY_BOOST2_MAJOR_VERSION}_${MY_BOOST2_MINOR_VERSI
|
||||
--prefix=${MY_MINGW_DIR} \
|
||||
-j${MY_NUM_JOBS} \
|
||||
address-model=64 \
|
||||
cxxstd=${MY_CXX_STANDARD} \
|
||||
cxxstd-dialect=gnu \
|
||||
architecture=x86 \
|
||||
link=static,shared \
|
||||
target-os=windows \
|
||||
@ -411,7 +490,8 @@ ARG BOOST_PATCH_VERSION
|
||||
ENV MY_BOOST_PATCH_VERSION=${BOOST_PATCH_VERSION}
|
||||
ENV MY_BOOST_VERSION=${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION}
|
||||
RUN if [ -f "/3rd_party/boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION}.tar.gz \
|
||||
&& cd boost_${MY_BOOST_VERSION} \
|
||||
&& echo "using gcc : gcc : ${MY_MINGW_PREFIX}-g++ ;" \
|
||||
>./user-config.jam \
|
||||
@ -419,6 +499,8 @@ RUN if [ -f "/3rd_party/boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION
|
||||
--with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread \
|
||||
address-model=64 \
|
||||
architecture=x86 \
|
||||
cxxstd=${MY_CXX_STANDARD} \
|
||||
cxxstd-dialect=gnu \
|
||||
link=static,shared \
|
||||
target-os=windows \
|
||||
threading=multi \
|
||||
@ -430,6 +512,8 @@ RUN if [ -f "/3rd_party/boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION
|
||||
-j${MY_NUM_JOBS} \
|
||||
address-model=64 \
|
||||
architecture=x86 \
|
||||
cxxstd=${MY_CXX_STANDARD} \
|
||||
cxxstd-dialect=gnu \
|
||||
link=static,shared \
|
||||
target-os=windows \
|
||||
threading=multi \
|
||||
@ -442,30 +526,37 @@ RUN if [ -f "/3rd_party/boost_${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION
|
||||
ARG OGG_VERSION
|
||||
ENV MY_OGG_VERSION=${OGG_VERSION}
|
||||
RUN if [ -f "/3rd_party/ogg-v${MY_OGG_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/ogg-v${MY_OGG_VERSION}.tar.gz \
|
||||
&& cd ogg-${MY_OGG_VERSION} \
|
||||
cd /3rd_party && sha256sum -c ./ogg-v${MY_OGG_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/ogg-v${MY_OGG_VERSION}.tar.gz \
|
||||
&& cd libogg-${MY_OGG_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r ogg-${MY_OGG_VERSION} \
|
||||
&& rm -r libogg-${MY_OGG_VERSION} \
|
||||
; fi
|
||||
|
||||
ARG VORBIS_VERSION
|
||||
ENV MY_VORBIS_VERSION=${VORBIS_VERSION}
|
||||
RUN if [ -f "/3rd_party/vorbis-v${MY_VORBIS_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/vorbis-v${MY_VORBIS_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./vorbis-v${MY_VORBIS_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/vorbis-v${MY_VORBIS_VERSION}.tar.gz \
|
||||
&& cd vorbis-${MY_VORBIS_VERSION} \
|
||||
&& /3rd_party/vorbis_patch.sh /3rd_party . \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
@ -475,18 +566,21 @@ RUN if [ -f "/3rd_party/vorbis-v${MY_VORBIS_VERSION}.tar.gz" ]; then \
|
||||
ARG FLAC_VERSION
|
||||
ENV MY_FLAC_VERSION=${FLAC_VERSION}
|
||||
RUN if [ -f "/3rd_party/flac-${MY_FLAC_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/flac-${MY_FLAC_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./flac-${MY_FLAC_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/flac-${MY_FLAC_VERSION}.tar.gz \
|
||||
&& cd flac-${MY_FLAC_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DBUILD_DOCS=OFF \
|
||||
-DBUILD_EXAMPLES=OFF \
|
||||
-DBUILD_PROGRAMS=OFF \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DBUILD_EXAMPLES=ON \
|
||||
-DBUILD_PROGRAMS=ON \
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DBUILD_DOCS=OFF \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DINSTALL_MANPAGES=OFF \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
@ -497,7 +591,8 @@ RUN if [ -f "/3rd_party/flac-${MY_FLAC_VERSION}.tar.gz" ]; then \
|
||||
ARG SFML_VERSION
|
||||
ENV MY_SFML_VERSION=${SFML_VERSION}
|
||||
RUN if [ -f "/3rd_party/SFML-${MY_SFML_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/SFML-${MY_SFML_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./SFML-${MY_SFML_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/SFML-${MY_SFML_VERSION}.tar.gz \
|
||||
&& cd SFML-${MY_SFML_VERSION} \
|
||||
&& sed -i s/set_target_properties\(\$\{target\}\ PROPERTIES\ PREFIX\ \"\"\)// \
|
||||
cmake/Macros.cmake \
|
||||
@ -505,10 +600,13 @@ RUN if [ -f "/3rd_party/SFML-${MY_SFML_VERSION}.tar.gz" ]; then \
|
||||
cmake/Macros.cmake \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_SYSTEM_PROCESSOR=AMD64 \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
@ -518,14 +616,16 @@ RUN if [ -f "/3rd_party/SFML-${MY_SFML_VERSION}.tar.gz" ]; then \
|
||||
ARG SPDLOG_VERSION
|
||||
ENV MY_SPDLOG_VERSION=${SPDLOG_VERSION}
|
||||
RUN if [ -f "/3rd_party/spdlog-${MY_SPDLOG_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/spdlog-${MY_SPDLOG_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./spdlog-${MY_SPDLOG_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/spdlog-${MY_SPDLOG_VERSION}.tar.gz \
|
||||
&& cd spdlog-${MY_SPDLOG_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DSPDLOG_BUILD_SHARED=ON \
|
||||
-DSPDLOG_BUILD_STATIC=ON \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DSPDLOG_BUILD_EXAMPLE=OFF \
|
||||
-DSPDLOG_FMT_EXTERNAL=OFF \
|
||||
-DSPDLOG_FMT_EXTERNAL_HO=OFF \
|
||||
@ -538,19 +638,22 @@ RUN if [ -f "/3rd_party/spdlog-${MY_SPDLOG_VERSION}.tar.gz" ]; then \
|
||||
ARG CLI11_VERSION
|
||||
ENV MY_CLI11_VERSION=${CLI11_VERSION}
|
||||
RUN if [ -f "/3rd_party/CLI11-${MY_CLI11_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/CLI11-${MY_CLI11_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./CLI11-${MY_CLI11_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/CLI11-${MY_CLI11_VERSION}.tar.gz \
|
||||
&& cd CLI11-${MY_CLI11_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCLI11_WARNINGS_AS_ERRORS=OFF \
|
||||
-DCLI11_SINGLE_FILE=ON \
|
||||
&& cmake .. \
|
||||
-DCLI11_BUILD_DOCS=OFF \
|
||||
-DCLI11_BUILD_TESTS=OFF \
|
||||
-DCLI11_BUILD_EXAMPLES=OFF \
|
||||
-DCLI11_BUILD_TESTS=OFF \
|
||||
-DCLI11_INSTALL=ON \
|
||||
-DCLI11_SINGLE_FILE=ON \
|
||||
-DCLI11_WARNINGS_AS_ERRORS=OFF \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
@ -559,17 +662,25 @@ RUN if [ -f "/3rd_party/CLI11-${MY_CLI11_VERSION}.tar.gz" ]; then \
|
||||
|
||||
ARG CURL_VERSION
|
||||
ENV MY_CURL_VERSION=${CURL_VERSION}
|
||||
ARG CURL2_VERSION
|
||||
ENV MY_CURL2_VERSION=${CURL2_VERSION}
|
||||
RUN if [ -f "/3rd_party/curl-${MY_CURL_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/curl-${MY_CURL_VERSION}.tar.gz \
|
||||
&& cd curl-${MY_CURL_VERSION} \
|
||||
cd /3rd_party && sha256sum -c ./curl-${MY_CURL_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/curl-${MY_CURL_VERSION}.tar.gz \
|
||||
&& cd curl-curl-${MY_CURL2_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DBUILD_CURL_EXE=ON \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_LIBCURL_DOCS=OFF \
|
||||
-DBUILD_MISC_DOCS=OFF \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DCURL_BROTLI=OFF \
|
||||
-DCURL_CA_BUNDLE=./cacert.pem \
|
||||
-DCURL_CA_FALLBACK=ON \
|
||||
-DCURL_DISABLE_LDAP=ON \
|
||||
@ -577,6 +688,7 @@ RUN if [ -f "/3rd_party/curl-${MY_CURL_VERSION}.tar.gz" ]; then \
|
||||
-DCURL_USE_LIBSSH2=OFF \
|
||||
-DCURL_USE_OPENSSL=ON \
|
||||
-DCURL_ZLIB=ON \
|
||||
-DENABLE_CURL_MANUAL=OFF \
|
||||
-DENABLE_THREADED_RESOLVER=ON \
|
||||
-DOPENSSL_USE_STATIC_LIBS=ON \
|
||||
-DUSE_LIBIDN2=OFF \
|
||||
@ -584,22 +696,29 @@ RUN if [ -f "/3rd_party/curl-${MY_CURL_VERSION}.tar.gz" ]; then \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r curl-${MY_CURL_VERSION} \
|
||||
&& rm -r curl-curl-${MY_CURL2_VERSION} \
|
||||
; fi
|
||||
|
||||
ARG CPP_HTTPLIB_VERSION
|
||||
ENV MY_CPP_HTTPLIB_VERSION=${CPP_HTTPLIB_VERSION}
|
||||
RUN if [ -f "/3rd_party/cpp-httplib-${MY_CPP_HTTPLIB_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/cpp-httplib-${MY_CPP_HTTPLIB_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./cpp-httplib-${MY_CPP_HTTPLIB_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/cpp-httplib-${MY_CPP_HTTPLIB_VERSION}.tar.gz \
|
||||
&& cd cpp-httplib-${MY_CPP_HTTPLIB_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DHTTPLIB_REQUIRE_BROTLI=OFF \
|
||||
-DHTTPLIB_REQUIRE_OPENSSL=ON \
|
||||
-DHTTPLIB_REQUIRE_ZLIB=ON \
|
||||
-DHTTPLIB_REQUIRE_BROTLI=OFF \
|
||||
-DHTTPLIB_TEST=OFF \
|
||||
-DHTTPLIB_USE_BROTLI_IF_AVAILABLE=OFF \
|
||||
-DHTTPLIB_USE_OPENSSL_IF_AVAILABLE=YES \
|
||||
-DHTTPLIB_USE_ZLIB_IF_AVAILABLE=ON \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
@ -609,14 +728,17 @@ RUN if [ -f "/3rd_party/cpp-httplib-${MY_CPP_HTTPLIB_VERSION}.tar.gz" ]; then \
|
||||
ARG FMT_VERSION
|
||||
ENV MY_FMT_VERSION=${FMT_VERSION}
|
||||
RUN if [ -f "/3rd_party/fmt-${MY_FMT_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/fmt-${MY_FMT_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./fmt-${MY_FMT_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/fmt-${MY_FMT_VERSION}.tar.gz \
|
||||
&& cd fmt-${MY_FMT_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DFMT_DOC=OFF \
|
||||
-DFMT_TEST=OFF \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
@ -628,13 +750,16 @@ RUN if [ -f "/3rd_party/fmt-${MY_FMT_VERSION}.tar.gz" ]; then \
|
||||
ARG GTEST_VERSION
|
||||
ENV MY_GTEST_VERSION=${GTEST_VERSION}
|
||||
RUN if [ -f "/3rd_party/googletest-${MY_GTEST_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/googletest-${MY_GTEST_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./googletest-${MY_GTEST_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/googletest-${MY_GTEST_VERSION}.tar.gz \
|
||||
&& cd googletest-${MY_GTEST_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
@ -644,13 +769,16 @@ RUN if [ -f "/3rd_party/googletest-${MY_GTEST_VERSION}.tar.gz" ]; then \
|
||||
ARG JSON_VERSION
|
||||
ENV MY_JSON_VERSION=${JSON_VERSION}
|
||||
RUN if [ -f "/3rd_party/json-${MY_JSON_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/json-${MY_JSON_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./json-${MY_JSON_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/json-${MY_JSON_VERSION}.tar.gz \
|
||||
&& cd json-${MY_JSON_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DJSON_BuildTests=OFF \
|
||||
-DJSON_Install=ON \
|
||||
-DJSON_MultipleHeaders=OFF \
|
||||
@ -663,13 +791,16 @@ RUN if [ -f "/3rd_party/json-${MY_JSON_VERSION}.tar.gz" ]; then \
|
||||
ARG LIBEVENT_VERSION
|
||||
ENV MY_LIBEVENT_VERSION=${LIBEVENT_VERSION}
|
||||
RUN if [ -f "/3rd_party/libevent-${MY_LIBEVENT_VERSION}-stable.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/libevent-${MY_LIBEVENT_VERSION}-stable.tar.gz \
|
||||
&& cd libevent-${MY_LIBEVENT_VERSION}-stable \
|
||||
cd /3rd_party && sha256sum -c ./libevent-${MY_LIBEVENT_VERSION}-stable.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/libevent-${MY_LIBEVENT_VERSION}-stable.tar.gz \
|
||||
&& cd libevent-release-${MY_LIBEVENT_VERSION}-stable \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DEVENT__DISABLE_OPENSSL=ON \
|
||||
-DEVENT__DISABLE_SAMPLES=ON \
|
||||
-DEVENT__DISABLE_TESTS=ON \
|
||||
@ -677,37 +808,42 @@ RUN if [ -f "/3rd_party/libevent-${MY_LIBEVENT_VERSION}-stable.tar.gz" ]; then \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r libevent-${MY_LIBEVENT_VERSION}-stable \
|
||||
&& rm -r libevent-release-${MY_LIBEVENT_VERSION}-stable \
|
||||
; fi
|
||||
|
||||
ARG LIBSODIUM_VERSION
|
||||
ENV MY_LIBSODIUM_VERSION=${LIBSODIUM_VERSION}
|
||||
RUN if [ -f "/3rd_party/libsodium-${MY_LIBSODIUM_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/libsodium-${MY_LIBSODIUM_VERSION}.tar.gz \
|
||||
&& cd libsodium-${MY_LIBSODIUM_VERSION} \
|
||||
cd /3rd_party && sha256sum -c ./libsodium-${MY_LIBSODIUM_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/libsodium-${MY_LIBSODIUM_VERSION}.tar.gz \
|
||||
&& cd libsodium-${MY_LIBSODIUM_VERSION}-RELEASE \
|
||||
&& CFLAGS="-O3 -fomit-frame-pointer -m64 -mtune=generic" ./configure \
|
||||
--enable-shared \
|
||||
--enable-static \
|
||||
--enable-shared=yes \
|
||||
--enable-static=yes \
|
||||
--host=${MY_MINGW_PREFIX} \
|
||||
--prefix=${MY_MINGW_DIR} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r libsodium-${MY_LIBSODIUM_VERSION} \
|
||||
&& rm -r libsodium-${MY_LIBSODIUM_VERSION}-RELEASE \
|
||||
; fi
|
||||
|
||||
ARG NUSPELL_VERSION
|
||||
ENV MY_NUSPELL_VERSION=${NUSPELL_VERSION}
|
||||
RUN if [ -f "/3rd_party/nuspell-v${MY_NUSPELL_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/nuspell-v${MY_NUSPELL_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./nuspell-v${MY_NUSPELL_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/nuspell-v${MY_NUSPELL_VERSION}.tar.gz \
|
||||
&& cd nuspell-${MY_NUSPELL_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
&& cmake .. \
|
||||
-DBUILD_DOCS=OFF \
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DBUILD_TOOLS=OFF \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
@ -717,13 +853,16 @@ RUN if [ -f "/3rd_party/nuspell-v${MY_NUSPELL_VERSION}.tar.gz" ]; then \
|
||||
ARG PUGIXML_VERSION
|
||||
ENV MY_PUGIXML_VERSION=${PUGIXML_VERSION}
|
||||
RUN if [ -f "/3rd_party/pugixml-${MY_PUGIXML_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/pugixml-${MY_PUGIXML_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./pugixml-${MY_PUGIXML_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/pugixml-${MY_PUGIXML_VERSION}.tar.gz \
|
||||
&& cd pugixml-${MY_PUGIXML_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
@ -733,14 +872,17 @@ RUN if [ -f "/3rd_party/pugixml-${MY_PUGIXML_VERSION}.tar.gz" ]; then \
|
||||
ARG ROCKSDB_VERSION
|
||||
ENV MY_ROCKSDB_VERSION=${ROCKSDB_VERSION}
|
||||
RUN if [ -f "/3rd_party/rocksdb-${MY_ROCKSDB_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/rocksdb-${MY_ROCKSDB_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./rocksdb-${MY_ROCKSDB_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/rocksdb-${MY_ROCKSDB_VERSION}.tar.gz \
|
||||
&& cd rocksdb-${MY_ROCKSDB_VERSION} \
|
||||
&& echo -e "add_definitions(-include cstdint)">>CMakeLists.txt \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DFAIL_ON_WARNINGS=OFF \
|
||||
-DPORTABLE=1 \
|
||||
-DROCKSDB_INSTALL_ON_WINDOWS=ON \
|
||||
@ -764,7 +906,8 @@ RUN if [ -f "/3rd_party/rocksdb-${MY_ROCKSDB_VERSION}.tar.gz" ]; then \
|
||||
ARG SECP256K1_VERSION
|
||||
ENV MY_SECP256K1_VERSION=${SECP256K1_VERSION}
|
||||
RUN if [ -f "/3rd_party/secp256k1-${MY_SECP256K1_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/secp256k1-${MY_SECP256K1_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./secp256k1-${MY_SECP256K1_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/secp256k1-${MY_SECP256K1_VERSION}.tar.gz \
|
||||
&& cd secp256k1-${MY_SECP256K1_VERSION} \
|
||||
&& ./autogen.sh && ./configure \
|
||||
--host=${MY_MINGW_PREFIX} \
|
||||
@ -782,13 +925,16 @@ RUN if [ -f "/3rd_party/secp256k1-${MY_SECP256K1_VERSION}.tar.gz" ]; then \
|
||||
ARG STDUUID_VERSION
|
||||
ENV MY_STDUUID_VERSION=${STDUUID_VERSION}
|
||||
RUN if [ -f "/3rd_party/stduuid-${MY_STDUUID_VERSION}.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/stduuid-${MY_STDUUID_VERSION}.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./stduuid-${MY_STDUUID_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/stduuid-${MY_STDUUID_VERSION}.tar.gz \
|
||||
&& cd stduuid-${MY_STDUUID_VERSION} \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DUUID_BUILD_TESTS=OFF \
|
||||
-DUUID_ENABLE_INSTALL=ON \
|
||||
-DUUID_USING_CXX20_SPAN=ON \
|
||||
@ -799,16 +945,19 @@ RUN if [ -f "/3rd_party/stduuid-${MY_STDUUID_VERSION}.tar.gz" ]; then \
|
||||
; fi
|
||||
|
||||
RUN if [ -f "/3rd_party/tiny-process-library.tar.gz" ]; then \
|
||||
tar xvzf /3rd_party/tiny-process-library.tar.gz \
|
||||
cd /3rd_party && sha256sum -c ./tiny-process-library.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/tiny-process-library.tar.gz \
|
||||
&& cd tiny-process-library-master \
|
||||
&& mkdir build \
|
||||
&& cd build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
@ -818,15 +967,18 @@ RUN if [ -f "/3rd_party/tiny-process-library.tar.gz" ]; then \
|
||||
ARG WXWIDGETS_VERSION
|
||||
ENV MY_WXWIDGETS_VERSION=${WXWIDGETS_VERSION}
|
||||
RUN if [ -f "/3rd_party/wxWidgets-${MY_WXWIDGETS_VERSION}.tar.bz2" ]; then \
|
||||
tar xvjf /3rd_party/wxWidgets-${MY_WXWIDGETS_VERSION}.tar.bz2 \
|
||||
cd /3rd_party && sha256sum -c ./wxWidgets-${MY_WXWIDGETS_VERSION}.tar.bz2.sha256 && cd - \
|
||||
&& tar xvjf /3rd_party/wxWidgets-${MY_WXWIDGETS_VERSION}.tar.bz2 \
|
||||
&& cd wxWidgets-${MY_WXWIDGETS_VERSION} \
|
||||
&& mkdir _build \
|
||||
&& cd _build \
|
||||
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DwxBUILD_MONOLITHIC=OFF \
|
||||
-DwxBUILD_SHARED=ON \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
@ -835,6 +987,138 @@ RUN if [ -f "/3rd_party/wxWidgets-${MY_WXWIDGETS_VERSION}.tar.bz2" ]; then \
|
||||
&& rm -r wxWidgets-${MY_WXWIDGETS_VERSION} \
|
||||
; fi
|
||||
|
||||
ARG CXXOPTS_VERSION
|
||||
ENV MY_CXXOPTS_VERSION=${CXXOPTS_VERSION}
|
||||
RUN if [ -f "/3rd_party/cxxopts-v${MY_CXXOPTS_VERSION}.tar.gz" ]; then \
|
||||
cd /3rd_party && sha256sum -c ./cxxopts-v${MY_CXXOPTS_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/cxxopts-v${MY_CXXOPTS_VERSION}.tar.gz \
|
||||
&& cd cxxopts-${MY_CXXOPTS_VERSION} \
|
||||
&& mkdir _build \
|
||||
&& cd _build \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DCXXOPTS_BUILD_EXAMPLES=OFF \
|
||||
-DCXXOPTS_BUILD_TESTS=OFF \
|
||||
-DCXXOPTS_ENABLE_INSTALL=ON \
|
||||
-DCXXOPTS_ENABLE_WARNINGS=OFF \
|
||||
-DCXXOPTS_USE_UNICODE_HELP=ON \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r cxxopts-${MY_CXXOPTS_VERSION} \
|
||||
; fi
|
||||
|
||||
ARG NANA_VERSION
|
||||
ENV MY_NANA_VERSION=${NANA_VERSION}
|
||||
RUN if [ -f "/3rd_party/nana-v${MY_NANA_VERSION}.tar.gz" ]; then \
|
||||
cd /3rd_party && sha256sum -c ./nana-v${MY_NANA_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/nana-v${MY_NANA_VERSION}.tar.gz \
|
||||
&& cd nana-${MY_NANA_VERSION} \
|
||||
&& /3rd_party/nana_patch.sh /3rd_party . \
|
||||
&& mkdir _build \
|
||||
&& cd _build \
|
||||
&& cmake .. \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_STATIC_LIBS=ON \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_STANDARD=${MY_CXX_STANDARD} \
|
||||
-DCMAKE_INSTALL_PREFIX=${MY_MINGW_DIR} \
|
||||
-DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
|
||||
-DNANA_CMAKE_ENABLE_AUDIO=OFF \
|
||||
-DNANA_CMAKE_ENABLE_JPEG=ON \
|
||||
-DNANA_CMAKE_ENABLE_PNG=ON \
|
||||
-DNANA_CMAKE_INSTALL=ON \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r nana-${MY_NANA_VERSION} \
|
||||
; fi
|
||||
|
||||
ARG SDL_VERSION
|
||||
ENV MY_SDL_VERSION=${SDL_VERSION}
|
||||
RUN if [ -f "/3rd_party/sdl-${MY_SDL_VERSION}.tar.gz" ]; then \
|
||||
cd /3rd_party && sha256sum -c ./sdl-${MY_SDL_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/sdl-${MY_SDL_VERSION}.tar.gz \
|
||||
&& cd SDL-release-${MY_SDL_VERSION} \
|
||||
&& ./configure \
|
||||
--host=${MY_MINGW_PREFIX} \
|
||||
--enable-shared=yes \
|
||||
--enable-static=yes \
|
||||
--prefix=${MY_MINGW_DIR} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r SDL-release-${MY_SDL_VERSION} \
|
||||
; fi
|
||||
|
||||
ARG LIBTASN_VERSION
|
||||
ENV MY_LIBTASN_VERSION=${LIBTASN_VERSION}
|
||||
RUN if [ -f "/3rd_party/libtasn1-${MY_LIBTASN_VERSION}.tar.gz" ]; then \
|
||||
cd /3rd_party && sha256sum -c ./libtasn1-${MY_LIBTASN_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/libtasn1-${MY_LIBTASN_VERSION}.tar.gz \
|
||||
&& cd libtasn1-${MY_LIBTASN_VERSION} \
|
||||
&& ./configure \
|
||||
--disable-doc \
|
||||
--enable-static=yes \
|
||||
--enable-shared=no \
|
||||
--host=${MY_MINGW_PREFIX} \
|
||||
--prefix=${MY_MINGW_DIR} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r libtasn1-${MY_LIBTASN_VERSION} \
|
||||
&& echo -e \
|
||||
"#!/bin/bash\n"\
|
||||
"\n"\
|
||||
"wine ${MY_MINGW_DIR}/bin/asn1Parser.exe \$@\n"\
|
||||
> ${MY_MINGW_DIR}/bin/asn1Parser \
|
||||
&& chmod +x ${MY_MINGW_DIR}/bin/asn1Parser \
|
||||
; fi
|
||||
|
||||
ARG LIBICONV_VERSION
|
||||
ENV MY_LIBICONV_VERSION=${LIBICONV_VERSION}
|
||||
RUN if [ -f "/3rd_party/libiconv-${MY_LIBICONV_VERSION}.tar.gz" ]; then \
|
||||
cd /3rd_party && sha256sum -c ./libiconv-${MY_LIBICONV_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/libiconv-${MY_LIBICONV_VERSION}.tar.gz \
|
||||
&& cd libiconv-${MY_LIBICONV_VERSION} \
|
||||
&& ./configure \
|
||||
--enable-static=yes \
|
||||
--enable-shared=no \
|
||||
--host=${MY_MINGW_PREFIX} \
|
||||
--prefix=${MY_MINGW_DIR} \
|
||||
&& make -j${MY_NUM_JOBS} \
|
||||
&& make install \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r libiconv-${MY_LIBICONV_VERSION} \
|
||||
; fi
|
||||
|
||||
ARG LIBDSM_VERSION
|
||||
ENV MY_LIBDSM_VERSION=${LIBDSM_VERSION}
|
||||
RUN if [ -f "/3rd_party/libdsm-${MY_LIBDSM_VERSION}.tar.gz" ]; then \
|
||||
cd /3rd_party && sha256sum -c ./libdsm-${MY_LIBDSM_VERSION}.tar.gz.sha256 && cd - \
|
||||
&& tar xvzf /3rd_party/libdsm-${MY_LIBDSM_VERSION}.tar.gz \
|
||||
&& cd libdsm-${MY_LIBDSM_VERSION} \
|
||||
&& /3rd_party/libdsm_patch.sh /3rd_party . \
|
||||
&& meson setup \
|
||||
--bindir=${MY_MINGW_DIR}/bin \
|
||||
--cross-file ${MY_TOOLCHAIN_FILE_MESON} \
|
||||
--prefix=${MY_MINGW_DIR} \
|
||||
-Dbinaries=false \
|
||||
-Ddefault_library=static \
|
||||
_build \
|
||||
&& meson compile \
|
||||
-C _build \
|
||||
&& meson install \
|
||||
-C _build \
|
||||
&& cd ${MY_WORKDIR} \
|
||||
&& rm -r libdsm-${MY_LIBDSM_VERSION} \
|
||||
; fi
|
||||
|
||||
RUN (mv ${MY_MINGW_DIR}/lib/*.dll ${MY_MINGW_DIR}/bin || echo "no dll's found") \
|
||||
&& chmod 0777 -R ${MY_MINGW_DIR} \
|
||||
&& rm -rf /3rd_party
|
||||
|
@ -3,5 +3,8 @@
|
||||
CURRENT_DIR=$(dirname "$0")
|
||||
CURRENT_DIR=$(realpath ${CURRENT_DIR})
|
||||
|
||||
rsync -av --progress ${CURRENT_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/test_data/ ${PROJECT_BUILD_DIR}/build/test_data/
|
||||
rsync -av --progress ${CURRENT_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/test_data/ ${PROJECT_DIST_DIR}/test_data/
|
||||
rsync -av --progress ${CURRENT_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/test_input/ \
|
||||
${PROJECT_BUILD_DIR}/build/test_input/
|
||||
|
||||
rsync -av --progress ${CURRENT_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/test_input/ \
|
||||
${PROJECT_DIST_DIR}/test_input/
|
||||
|
@ -1,8 +1,3 @@
|
||||
option(PROJECT_ENABLE_S3 "Enable S3 support" ON)
|
||||
if (PROJECT_ENABLE_S3)
|
||||
add_definitions(-DPROJECT_ENABLE_S3)
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS "-include common.hpp ${CMAKE_CXX_FLAGS}")
|
||||
|
||||
add_project_library(lib${PROJECT_NAME} "" "" "${PROJECT_ADDITIONAL_SOURCES}")
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,438 +19,246 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_APP_CONFIG_HPP_
|
||||
#define INCLUDE_APP_CONFIG_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_APP_CONFIG_HPP_
|
||||
#define REPERTORY_INCLUDE_APP_CONFIG_HPP_
|
||||
|
||||
#include "events/event_system.hpp"
|
||||
#include "events/events.hpp"
|
||||
#include "types/remote.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
#include "utils/error_utils.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config final {
|
||||
public:
|
||||
[[nodiscard]] static auto
|
||||
default_agent_name(const provider_type &prov) -> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_api_port(const provider_type &prov) -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_data_directory(const provider_type &prov) -> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_remote_port(const provider_type &prov) -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
default_rpc_port(const provider_type &prov) -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
get_provider_api_password(const provider_type &prov) -> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
get_provider_display_name(const provider_type &prov) -> std::string;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
get_provider_name(const provider_type &prov) -> std::string;
|
||||
private:
|
||||
static stop_type stop_requested;
|
||||
|
||||
public:
|
||||
app_config(const provider_type &prov, const std::string &data_directory = "");
|
||||
[[nodiscard]] static auto default_agent_name(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto default_api_port(const provider_type &prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto default_data_directory(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto default_remote_api_port(const provider_type &prov)
|
||||
-> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto default_rpc_port() -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] static auto get_provider_display_name(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto get_provider_name(const provider_type &prov)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] static auto get_root_data_directory() -> std::string;
|
||||
|
||||
public:
|
||||
[[nodiscard]] static auto get_stop_requested() -> bool;
|
||||
|
||||
static void set_stop_requested();
|
||||
|
||||
public:
|
||||
app_config(const provider_type &prov, std::string_view data_directory = "");
|
||||
|
||||
app_config() = delete;
|
||||
app_config(app_config &&) = delete;
|
||||
app_config(const app_config &) = delete;
|
||||
|
||||
~app_config() { save(); }
|
||||
|
||||
auto operator=(const app_config &) -> app_config & = delete;
|
||||
auto operator=(app_config &&) -> app_config & = delete;
|
||||
|
||||
private:
|
||||
provider_type prov_;
|
||||
std::string api_auth_;
|
||||
std::uint16_t api_port_;
|
||||
std::string api_user_;
|
||||
bool config_changed_;
|
||||
std::string data_directory_;
|
||||
std::uint8_t download_timeout_secs_;
|
||||
bool enable_chunk_downloader_timeout_;
|
||||
bool enable_comm_duration_events_;
|
||||
bool enable_drive_events_;
|
||||
bool enable_max_cache_size_;
|
||||
atomic<std::string> api_password_;
|
||||
std::atomic<std::uint16_t> api_port_;
|
||||
atomic<std::string> api_user_;
|
||||
std::atomic<bool> config_changed_;
|
||||
std::atomic<database_type> db_type_{database_type::rocksdb};
|
||||
std::atomic<std::uint8_t> download_timeout_secs_;
|
||||
std::atomic<bool> enable_download_timeout_;
|
||||
std::atomic<bool> enable_drive_events_;
|
||||
#if defined(_WIN32)
|
||||
bool enable_mount_manager_;
|
||||
#endif
|
||||
bool enable_remote_mount_;
|
||||
encrypt_config encrypt_config_;
|
||||
event_level event_level_;
|
||||
std::uint32_t eviction_delay_mins_;
|
||||
bool eviction_uses_accessed_time_;
|
||||
std::uint8_t high_freq_interval_secs_;
|
||||
bool is_remote_mount_;
|
||||
std::uint32_t low_freq_interval_secs_;
|
||||
std::uint64_t max_cache_size_bytes_;
|
||||
std::uint8_t max_upload_count_;
|
||||
std::uint8_t min_download_timeout_secs_;
|
||||
std::uint16_t online_check_retry_secs_;
|
||||
std::uint16_t orphaned_file_retention_days_;
|
||||
std::string preferred_download_type_;
|
||||
std::uint8_t read_ahead_count_;
|
||||
std::uint8_t remote_client_pool_size_;
|
||||
std::string remote_host_name_or_ip_;
|
||||
std::uint8_t remote_max_connections_;
|
||||
std::uint16_t remote_port_;
|
||||
std::uint16_t remote_receive_timeout_secs_;
|
||||
std::uint16_t remote_send_timeout_secs_;
|
||||
std::string remote_token_;
|
||||
std::uint16_t retry_read_count_;
|
||||
std::uint16_t ring_buffer_file_size_;
|
||||
std::atomic<bool> enable_mount_manager_;
|
||||
#endif // defined(_WIN32)
|
||||
std::atomic<event_level> event_level_;
|
||||
std::atomic<std::uint32_t> eviction_delay_mins_;
|
||||
std::atomic<bool> eviction_uses_accessed_time_;
|
||||
std::atomic<std::uint16_t> high_freq_interval_secs_;
|
||||
std::atomic<std::uint16_t> low_freq_interval_secs_;
|
||||
std::atomic<std::uint64_t> max_cache_size_bytes_;
|
||||
std::atomic<std::uint8_t> max_upload_count_;
|
||||
std::atomic<std::uint16_t> med_freq_interval_secs_;
|
||||
std::atomic<std::uint16_t> online_check_retry_secs_;
|
||||
std::atomic<download_type> preferred_download_type_;
|
||||
std::atomic<std::uint16_t> retry_read_count_;
|
||||
std::atomic<std::uint16_t> ring_buffer_file_size_;
|
||||
std::atomic<std::uint16_t> task_wait_ms_;
|
||||
|
||||
private:
|
||||
std::string cache_directory_;
|
||||
host_config hc_;
|
||||
s3_config s3_config_;
|
||||
std::uint64_t version_{REPERTORY_CONFIG_VERSION};
|
||||
std::string data_directory_;
|
||||
atomic<encrypt_config> encrypt_config_;
|
||||
atomic<host_config> host_config_;
|
||||
std::string log_directory_;
|
||||
mutable std::recursive_mutex read_write_mutex_;
|
||||
mutable std::recursive_mutex remote_mount_mutex_;
|
||||
atomic<remote::remote_config> remote_config_;
|
||||
atomic<remote::remote_mount> remote_mount_;
|
||||
atomic<s3_config> s3_config_;
|
||||
atomic<sia_config> sia_config_;
|
||||
std::unordered_map<std::string, std::function<std::string()>>
|
||||
value_get_lookup_;
|
||||
std::unordered_map<std::string,
|
||||
std::function<std::string(const std::string &)>>
|
||||
value_set_lookup_;
|
||||
std::uint64_t version_{REPERTORY_CONFIG_VERSION};
|
||||
|
||||
private:
|
||||
[[nodiscard]] auto load() -> bool;
|
||||
|
||||
template <typename dest>
|
||||
auto get_value(const json &json_document, const std::string &name, dest &dst,
|
||||
bool &success_flag) -> bool {
|
||||
constexpr const auto *function_name =
|
||||
static_cast<const char *>(__FUNCTION__);
|
||||
|
||||
auto ret = false;
|
||||
try {
|
||||
if (json_document.find(name) != json_document.end()) {
|
||||
dst = json_document[name].get<dest>();
|
||||
ret = true;
|
||||
} else {
|
||||
success_flag = false;
|
||||
}
|
||||
} catch (const json::exception &ex) {
|
||||
utils::error::raise_error(function_name, ex, "exception occurred");
|
||||
success_flag = false;
|
||||
ret = false;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <typename dest, typename source>
|
||||
auto set_value(dest &dst, const source &src) -> bool {
|
||||
auto ret = false;
|
||||
recur_mutex_lock lock(read_write_mutex_);
|
||||
if (dst != src) {
|
||||
dst = src;
|
||||
config_changed_ = true;
|
||||
save();
|
||||
ret = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
auto set_value(dest &dst, const source &src) -> bool;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto get_api_auth() const -> std::string { return api_auth_; }
|
||||
[[nodiscard]] auto get_api_password() const -> std::string;
|
||||
|
||||
[[nodiscard]] auto get_api_port() const -> std::uint16_t { return api_port_; }
|
||||
[[nodiscard]] auto get_api_port() const -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] auto get_api_user() const -> std::string { return api_user_; }
|
||||
[[nodiscard]] auto get_api_user() const -> std::string;
|
||||
|
||||
[[nodiscard]] auto get_cache_directory() const -> std::string {
|
||||
return cache_directory_;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_chunk_downloader_timeout_secs() const -> std::uint8_t {
|
||||
return std::max(min_download_timeout_secs_, download_timeout_secs_);
|
||||
}
|
||||
[[nodiscard]] auto get_cache_directory() const -> std::string;
|
||||
|
||||
[[nodiscard]] auto get_config_file_path() const -> std::string;
|
||||
|
||||
[[nodiscard]] auto get_data_directory() const -> std::string {
|
||||
return data_directory_;
|
||||
}
|
||||
[[nodiscard]] auto get_database_type() const -> database_type;
|
||||
|
||||
[[nodiscard]] auto get_enable_chunk_download_timeout() const -> bool {
|
||||
return enable_chunk_downloader_timeout_;
|
||||
}
|
||||
[[nodiscard]] auto get_data_directory() const -> std::string;
|
||||
|
||||
[[nodiscard]] auto get_enable_comm_duration_events() const -> bool {
|
||||
return enable_comm_duration_events_;
|
||||
}
|
||||
[[nodiscard]] auto get_download_timeout_secs() const -> std::uint8_t;
|
||||
|
||||
[[nodiscard]] auto get_enable_drive_events() const -> bool {
|
||||
return enable_drive_events_;
|
||||
}
|
||||
[[nodiscard]] auto get_enable_download_timeout() const -> bool;
|
||||
|
||||
[[nodiscard]] auto get_encrypt_config() const -> encrypt_config {
|
||||
return encrypt_config_;
|
||||
}
|
||||
[[nodiscard]] auto get_enable_drive_events() const -> bool;
|
||||
|
||||
[[nodiscard]] auto get_encrypt_config() const -> encrypt_config;
|
||||
|
||||
#if defined(_WIN32)
|
||||
[[nodiscard]] auto get_enable_mount_manager() const -> bool {
|
||||
return enable_mount_manager_;
|
||||
}
|
||||
#endif
|
||||
[[nodiscard]] auto get_enable_mount_manager() const -> bool;
|
||||
#endif // defined(_WIN32)
|
||||
|
||||
[[nodiscard]] auto get_enable_max_cache_size() const -> bool {
|
||||
return enable_max_cache_size_;
|
||||
}
|
||||
[[nodiscard]] auto get_event_level() const -> event_level;
|
||||
|
||||
[[nodiscard]] auto get_enable_remote_mount() const -> bool {
|
||||
return enable_remote_mount_;
|
||||
}
|
||||
[[nodiscard]] auto get_eviction_delay_mins() const -> std::uint32_t;
|
||||
|
||||
[[nodiscard]] auto get_event_level() const -> event_level {
|
||||
return event_level_;
|
||||
}
|
||||
[[nodiscard]] auto get_eviction_uses_accessed_time() const -> bool;
|
||||
|
||||
[[nodiscard]] auto get_eviction_delay_mins() const -> std::uint32_t {
|
||||
return eviction_delay_mins_;
|
||||
}
|
||||
[[nodiscard]] auto get_high_frequency_interval_secs() const -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] auto get_eviction_uses_accessed_time() const -> bool {
|
||||
return eviction_uses_accessed_time_;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_high_frequency_interval_secs() const -> std::uint8_t {
|
||||
return std::max(static_cast<std::uint8_t>(1U), high_freq_interval_secs_);
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_host_config() const -> host_config { return hc_; }
|
||||
|
||||
[[nodiscard]] auto get_is_remote_mount() const -> bool {
|
||||
return is_remote_mount_;
|
||||
}
|
||||
[[nodiscard]] auto get_host_config() const -> host_config;
|
||||
|
||||
[[nodiscard]] auto get_json() const -> json;
|
||||
|
||||
[[nodiscard]] auto get_log_directory() const -> std::string {
|
||||
return log_directory_;
|
||||
}
|
||||
[[nodiscard]] auto get_log_directory() const -> std::string;
|
||||
|
||||
[[nodiscard]] auto get_low_frequency_interval_secs() const -> std::uint32_t {
|
||||
return std::max(1U, low_freq_interval_secs_);
|
||||
}
|
||||
[[nodiscard]] auto get_low_frequency_interval_secs() const -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] auto get_max_cache_size_bytes() const -> std::uint64_t;
|
||||
|
||||
[[nodiscard]] auto get_max_upload_count() const -> std::uint8_t {
|
||||
return std::max(std::uint8_t(1U), max_upload_count_);
|
||||
}
|
||||
[[nodiscard]] auto get_max_upload_count() const -> std::uint8_t;
|
||||
|
||||
[[nodiscard]] auto get_online_check_retry_secs() const -> std::uint16_t {
|
||||
return std::max(std::uint16_t(15U), online_check_retry_secs_);
|
||||
}
|
||||
[[nodiscard]] auto get_med_frequency_interval_secs() const -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] auto get_orphaned_file_retention_days() const -> std::uint16_t {
|
||||
return std::min(static_cast<std::uint16_t>(31U),
|
||||
std::max(static_cast<std::uint16_t>(1U),
|
||||
orphaned_file_retention_days_));
|
||||
}
|
||||
[[nodiscard]] auto get_online_check_retry_secs() const -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] auto get_preferred_download_type() const -> download_type {
|
||||
return utils::download_type_from_string(preferred_download_type_,
|
||||
download_type::fallback);
|
||||
}
|
||||
[[nodiscard]] auto get_preferred_download_type() const -> download_type;
|
||||
|
||||
[[nodiscard]] auto get_provider_type() const -> provider_type {
|
||||
return prov_;
|
||||
}
|
||||
[[nodiscard]] auto get_provider_type() const -> provider_type;
|
||||
|
||||
[[nodiscard]] auto get_read_ahead_count() const -> std::uint8_t {
|
||||
return std::max(static_cast<std::uint8_t>(1U), read_ahead_count_);
|
||||
}
|
||||
[[nodiscard]] auto get_remote_config() const -> remote::remote_config;
|
||||
|
||||
[[nodiscard]] auto get_remote_client_pool_size() const -> std::uint8_t {
|
||||
return std::max(static_cast<std::uint8_t>(5U), remote_client_pool_size_);
|
||||
}
|
||||
[[nodiscard]] auto get_remote_mount() const -> remote::remote_mount;
|
||||
|
||||
[[nodiscard]] auto get_remote_host_name_or_ip() const -> std::string {
|
||||
return remote_host_name_or_ip_;
|
||||
}
|
||||
[[nodiscard]] auto get_retry_read_count() const -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] auto get_remote_max_connections() const -> std::uint8_t {
|
||||
return std::max(static_cast<std::uint8_t>(1U), remote_max_connections_);
|
||||
}
|
||||
[[nodiscard]] auto get_ring_buffer_file_size() const -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] auto get_remote_port() const -> std::uint16_t {
|
||||
return remote_port_;
|
||||
}
|
||||
[[nodiscard]] auto get_s3_config() const -> s3_config;
|
||||
|
||||
[[nodiscard]] auto get_remote_receive_timeout_secs() const -> std::uint16_t {
|
||||
return remote_receive_timeout_secs_;
|
||||
}
|
||||
[[nodiscard]] auto get_sia_config() const -> sia_config;
|
||||
|
||||
[[nodiscard]] auto get_remote_send_timeout_secs() const -> std::uint16_t {
|
||||
return remote_send_timeout_secs_;
|
||||
}
|
||||
[[nodiscard]] auto get_task_wait_ms() const -> std::uint16_t;
|
||||
|
||||
[[nodiscard]] auto get_remote_token() const -> std::string {
|
||||
return remote_token_;
|
||||
}
|
||||
[[nodiscard]] auto get_value_by_name(const std::string &name) const
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] auto get_retry_read_count() const -> std::uint16_t {
|
||||
return std::max(std::uint16_t(2), retry_read_count_);
|
||||
}
|
||||
[[nodiscard]] auto get_raw_value_by_name(const std::string &name) const
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] auto get_ring_buffer_file_size() const -> std::uint16_t {
|
||||
return std::max(
|
||||
static_cast<std::uint16_t>(64U),
|
||||
std::min(static_cast<std::uint16_t>(1024U), ring_buffer_file_size_));
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_s3_config() const -> s3_config { return s3_config_; }
|
||||
|
||||
[[nodiscard]] auto get_value_by_name(const std::string &name) -> std::string;
|
||||
|
||||
[[nodiscard]] auto get_version() const -> std::uint64_t { return version_; }
|
||||
[[nodiscard]] auto get_version() const -> std::uint64_t;
|
||||
|
||||
void save();
|
||||
|
||||
void set_api_auth(const std::string &api_auth) {
|
||||
set_value(api_auth_, api_auth);
|
||||
}
|
||||
void set_api_password(const std::string &value);
|
||||
|
||||
void set_api_port(std::uint16_t api_port) { set_value(api_port_, api_port); }
|
||||
void set_api_port(std::uint16_t value);
|
||||
|
||||
void set_api_user(const std::string &api_user) {
|
||||
set_value(api_user_, api_user);
|
||||
}
|
||||
void set_api_user(const std::string &value);
|
||||
|
||||
void set_chunk_downloader_timeout_secs(
|
||||
std::uint8_t chunk_downloader_timeout_secs) {
|
||||
set_value(download_timeout_secs_, chunk_downloader_timeout_secs);
|
||||
}
|
||||
void set_download_timeout_secs(std::uint8_t value);
|
||||
|
||||
void
|
||||
set_enable_chunk_downloader_timeout(bool enable_chunk_downloader_timeout) {
|
||||
set_value(enable_chunk_downloader_timeout_,
|
||||
enable_chunk_downloader_timeout);
|
||||
}
|
||||
void set_database_type(const database_type &value);
|
||||
|
||||
void set_enable_comm_duration_events(bool enable_comm_duration_events) {
|
||||
set_value(enable_comm_duration_events_, enable_comm_duration_events);
|
||||
}
|
||||
void set_enable_download_timeout(bool value);
|
||||
|
||||
void set_enable_drive_events(bool enable_drive_events) {
|
||||
set_value(enable_drive_events_, enable_drive_events);
|
||||
}
|
||||
|
||||
void set_enable_max_cache_size(bool enable_max_cache_size) {
|
||||
set_value(enable_max_cache_size_, enable_max_cache_size);
|
||||
}
|
||||
void set_enable_drive_events(bool value);
|
||||
|
||||
#if defined(_WIN32)
|
||||
void set_enable_mount_manager(bool enable_mount_manager) {
|
||||
set_value(enable_mount_manager_, enable_mount_manager);
|
||||
}
|
||||
#endif
|
||||
void set_enable_mount_manager(bool value);
|
||||
#endif // defined(_WIN32)
|
||||
|
||||
void set_enable_remote_mount(bool enable_remote_mount);
|
||||
void set_event_level(const event_level &value);
|
||||
|
||||
void set_event_level(const event_level &level) {
|
||||
if (set_value(event_level_, level)) {
|
||||
event_system::instance().raise<event_level_changed>(
|
||||
event_level_to_string(level));
|
||||
}
|
||||
}
|
||||
void set_encrypt_config(encrypt_config value);
|
||||
|
||||
void set_eviction_delay_mins(std::uint32_t eviction_delay_mins) {
|
||||
set_value(eviction_delay_mins_, eviction_delay_mins);
|
||||
}
|
||||
void set_eviction_delay_mins(std::uint32_t value);
|
||||
|
||||
void set_eviction_uses_accessed_time(bool eviction_uses_accessed_time) {
|
||||
set_value(eviction_uses_accessed_time_, eviction_uses_accessed_time);
|
||||
}
|
||||
void set_eviction_uses_accessed_time(bool value);
|
||||
|
||||
void
|
||||
set_high_frequency_interval_secs(std::uint8_t high_frequency_interval_secs) {
|
||||
set_value(high_freq_interval_secs_, high_frequency_interval_secs);
|
||||
}
|
||||
void set_high_frequency_interval_secs(std::uint16_t value);
|
||||
|
||||
#if defined(PROJECT_TESTING)
|
||||
void set_host_config(host_config hc) {
|
||||
config_changed_ = true;
|
||||
hc_ = std::move(hc);
|
||||
save();
|
||||
}
|
||||
void set_host_config(host_config value);
|
||||
|
||||
void set_s3_config(s3_config s3) {
|
||||
config_changed_ = true;
|
||||
s3_config_ = std::move(s3);
|
||||
save();
|
||||
}
|
||||
#endif
|
||||
void set_low_frequency_interval_secs(std::uint16_t value);
|
||||
|
||||
void set_is_remote_mount(bool is_remote_mount);
|
||||
void set_max_cache_size_bytes(std::uint64_t value);
|
||||
|
||||
void
|
||||
set_low_frequency_interval_secs(std::uint32_t low_frequency_interval_secs) {
|
||||
set_value(low_freq_interval_secs_, low_frequency_interval_secs);
|
||||
}
|
||||
void set_max_upload_count(std::uint8_t value);
|
||||
|
||||
void set_max_cache_size_bytes(std::uint64_t max_cache_size_bytes) {
|
||||
set_value(max_cache_size_bytes_, max_cache_size_bytes);
|
||||
}
|
||||
void set_med_frequency_interval_secs(std::uint16_t value);
|
||||
|
||||
void set_max_upload_count(std::uint8_t max_upload_count) {
|
||||
set_value(max_upload_count_, max_upload_count);
|
||||
}
|
||||
void set_online_check_retry_secs(std::uint16_t value);
|
||||
|
||||
void set_online_check_retry_secs(std::uint16_t online_check_retry_secs) {
|
||||
set_value(online_check_retry_secs_, online_check_retry_secs);
|
||||
}
|
||||
void set_preferred_download_type(const download_type &value);
|
||||
|
||||
void
|
||||
set_orphaned_file_retention_days(std::uint16_t orphaned_file_retention_days) {
|
||||
set_value(orphaned_file_retention_days_, orphaned_file_retention_days);
|
||||
}
|
||||
void set_remote_config(remote::remote_config value);
|
||||
|
||||
void set_preferred_download_type(const download_type &dt) {
|
||||
set_value(preferred_download_type_, utils::download_type_to_string(dt));
|
||||
}
|
||||
void set_remote_mount(remote::remote_mount value);
|
||||
|
||||
void set_read_ahead_count(std::uint8_t read_ahead_count) {
|
||||
set_value(read_ahead_count_, read_ahead_count);
|
||||
}
|
||||
void set_retry_read_count(std::uint16_t value);
|
||||
|
||||
void set_remote_client_pool_size(std::uint8_t remote_client_pool_size) {
|
||||
set_value(remote_client_pool_size_, remote_client_pool_size);
|
||||
}
|
||||
void set_ring_buffer_file_size(std::uint16_t value);
|
||||
|
||||
void set_ring_buffer_file_size(std::uint16_t ring_buffer_file_size) {
|
||||
set_value(ring_buffer_file_size_, ring_buffer_file_size);
|
||||
}
|
||||
void set_s3_config(s3_config value);
|
||||
|
||||
void set_remote_host_name_or_ip(const std::string &remote_host_name_or_ip) {
|
||||
set_value(remote_host_name_or_ip_, remote_host_name_or_ip);
|
||||
}
|
||||
void set_sia_config(sia_config value);
|
||||
|
||||
void set_remote_max_connections(std::uint8_t remote_max_connections) {
|
||||
set_value(remote_max_connections_, remote_max_connections);
|
||||
}
|
||||
|
||||
void set_remote_port(std::uint16_t remote_port) {
|
||||
set_value(remote_port_, remote_port);
|
||||
}
|
||||
|
||||
void
|
||||
set_remote_receive_timeout_secs(std::uint16_t remote_receive_timeout_secs) {
|
||||
set_value(remote_receive_timeout_secs_, remote_receive_timeout_secs);
|
||||
}
|
||||
|
||||
void set_remote_send_timeout_secs(std::uint16_t remote_send_timeout_secs) {
|
||||
set_value(remote_send_timeout_secs_, remote_send_timeout_secs);
|
||||
}
|
||||
|
||||
void set_remote_token(const std::string &remote_token) {
|
||||
set_value(remote_token_, remote_token);
|
||||
}
|
||||
|
||||
void set_retry_read_count(std::uint16_t retry_read_count) {
|
||||
set_value(retry_read_count_, retry_read_count);
|
||||
}
|
||||
void set_task_wait_ms(std::uint16_t value);
|
||||
|
||||
[[nodiscard]] auto set_value_by_name(const std::string &name,
|
||||
const std::string &value) -> std::string;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_APP_CONFIG_HPP_
|
||||
#endif // REPERTORY_INCLUDE_APP_CONFIG_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,15 +19,15 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
||||
#define INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
||||
|
||||
#include "app_config.hpp"
|
||||
#include "comm/curl/multi_request.hpp"
|
||||
#include "comm/i_http_comm.hpp"
|
||||
#include "events/event_system.hpp"
|
||||
#include "events/events.hpp"
|
||||
#include "events/types/curl_error.hpp"
|
||||
#include "utils/encryption.hpp"
|
||||
#include "utils/utils.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class curl_comm final : public i_http_comm {
|
||||
@ -42,8 +42,8 @@ private:
|
||||
using write_callback = size_t (*)(char *, size_t, size_t, void *);
|
||||
|
||||
struct read_write_info final {
|
||||
repertory::data_buffer data{};
|
||||
repertory::stop_type &stop_requested;
|
||||
data_buffer data{};
|
||||
stop_type_callback stop_requested_cb;
|
||||
};
|
||||
|
||||
static const write_callback write_data;
|
||||
@ -56,6 +56,11 @@ private:
|
||||
private:
|
||||
bool use_s3_path_style_{false};
|
||||
|
||||
public:
|
||||
[[nodiscard]] static auto create_curl() -> CURL *;
|
||||
|
||||
[[nodiscard]] static auto reset_curl(CURL *curl_handle) -> CURL *;
|
||||
|
||||
public:
|
||||
[[nodiscard]] static auto construct_url(CURL *curl,
|
||||
const std::string &relative_path,
|
||||
@ -91,33 +96,33 @@ public:
|
||||
|
||||
data_buffer data{};
|
||||
const auto key =
|
||||
utils::encryption::generate_key(request.decryption_token.value());
|
||||
const auto result = utils::encryption::read_encrypted_range(
|
||||
request.range.value(), key,
|
||||
[&](std::vector<char> &ct, std::uint64_t start_offset,
|
||||
std::uint64_t end_offset) -> api_error {
|
||||
auto encrypted_request = request;
|
||||
encrypted_request.decryption_token = std::nullopt;
|
||||
encrypted_request.range = {{start_offset, end_offset}};
|
||||
encrypted_request.response_handler = [&ct](const auto &encrypted_data,
|
||||
long /*response_code*/) {
|
||||
ct = encrypted_data;
|
||||
};
|
||||
encrypted_request.total_size = std::nullopt;
|
||||
utils::encryption::generate_key<utils::encryption::hash_256_t>(
|
||||
request.decryption_token.value());
|
||||
if (not utils::encryption::read_encrypted_range(
|
||||
request.range.value(), key,
|
||||
[&](data_buffer &ct, std::uint64_t start_offset,
|
||||
std::uint64_t end_offset) -> bool {
|
||||
auto encrypted_request = request;
|
||||
encrypted_request.decryption_token = std::nullopt;
|
||||
encrypted_request.range = {{start_offset, end_offset}};
|
||||
encrypted_request.response_handler =
|
||||
[&ct](const auto &encrypted_data, long /*response_code*/) {
|
||||
ct = encrypted_data;
|
||||
};
|
||||
encrypted_request.total_size = std::nullopt;
|
||||
|
||||
if (not make_request(cfg, encrypted_request, response_code,
|
||||
stop_requested)) {
|
||||
return api_error::comm_error;
|
||||
}
|
||||
if (not make_request(cfg, encrypted_request, response_code,
|
||||
stop_requested)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (response_code != 200) {
|
||||
return api_error::comm_error;
|
||||
}
|
||||
if (response_code != http_error_codes::ok) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return api_error::success;
|
||||
},
|
||||
request.total_size.value(), data);
|
||||
if (result != api_error::success) {
|
||||
return true;
|
||||
},
|
||||
request.total_size.value(), data)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -132,6 +137,8 @@ public:
|
||||
[[nodiscard]] static auto
|
||||
make_request(const host_config &cfg, const request_type &request,
|
||||
long &response_code, stop_type &stop_requested) -> bool {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
if (request.decryption_token.has_value() &&
|
||||
not request.decryption_token.value().empty()) {
|
||||
return make_encrypted_request(cfg, request, response_code,
|
||||
@ -140,7 +147,7 @@ public:
|
||||
|
||||
response_code = 0;
|
||||
|
||||
auto *curl = utils::create_curl();
|
||||
auto *curl = create_curl();
|
||||
if (not request.set_method(curl, stop_requested)) {
|
||||
return false;
|
||||
}
|
||||
@ -166,7 +173,12 @@ public:
|
||||
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, write_headers);
|
||||
}
|
||||
|
||||
read_write_info write_info{{}, stop_requested};
|
||||
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);
|
||||
@ -190,6 +202,16 @@ public:
|
||||
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());
|
||||
|
||||
@ -197,8 +219,14 @@ public:
|
||||
|
||||
CURLcode curl_code{};
|
||||
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>(url, curl_code);
|
||||
event_system::instance().raise<curl_error>(curl_code, function_name,
|
||||
url);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -239,4 +267,4 @@ public:
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_CURL_CURL_COMM_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_CURL_MULTI_REQUEST_HPP_
|
||||
#define INCLUDE_COMM_CURL_MULTI_REQUEST_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_CURL_MULTI_REQUEST_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_CURL_MULTI_REQUEST_HPP_
|
||||
|
||||
#include "types/repertory.hpp"
|
||||
|
||||
@ -36,9 +36,12 @@ private:
|
||||
stop_type &stop_requested_;
|
||||
CURLM *multi_handle_;
|
||||
|
||||
private:
|
||||
[[nodiscard]] auto get_stop_requested() const -> bool;
|
||||
|
||||
public:
|
||||
void get_result(CURLcode &curl_code, long &http_code);
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_COMM_CURL_MULTI_REQUEST_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_CURL_MULTI_REQUEST_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_DELETE_HPP_
|
||||
#define INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_DELETE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_DELETE_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_DELETE_HPP_
|
||||
|
||||
#include "comm/curl/requests/http_request_base.hpp"
|
||||
|
||||
@ -28,13 +28,13 @@ namespace repertory::curl::requests {
|
||||
struct http_delete final : http_request_base {
|
||||
~http_delete() override = default;
|
||||
|
||||
[[nodiscard]] auto 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_CUSTOMREQUEST, "DELETE");
|
||||
return true;
|
||||
}
|
||||
};
|
||||
} // namespace repertory::curl::requests
|
||||
|
||||
#endif // INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_DELETE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_DELETE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_GET_HPP_
|
||||
#define INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_GET_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_GET_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_GET_HPP_
|
||||
|
||||
#include "comm/curl/requests/http_request_base.hpp"
|
||||
|
||||
@ -33,13 +33,13 @@ struct http_get final : http_request_base {
|
||||
auto operator=(http_get &&) -> http_get & = default;
|
||||
~http_get() override = default;
|
||||
|
||||
[[nodiscard]] auto 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);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
} // namespace repertory::curl::requests
|
||||
|
||||
#endif // INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_GET_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_GET_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_HEAD_HPP_
|
||||
#define INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_HEAD_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_HEAD_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_HEAD_HPP_
|
||||
|
||||
#include "comm/curl/requests/http_request_base.hpp"
|
||||
|
||||
@ -28,9 +28,9 @@ namespace repertory::curl::requests {
|
||||
struct http_head final : http_request_base {
|
||||
~http_head() override = default;
|
||||
|
||||
[[nodiscard]] auto 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_CUSTOMREQUEST, "HEAD");
|
||||
curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
|
||||
return true;
|
||||
@ -38,4 +38,4 @@ struct http_head final : http_request_base {
|
||||
};
|
||||
} // namespace repertory::curl::requests
|
||||
|
||||
#endif // INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_HEAD_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_HEAD_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_POST_HPP_
|
||||
#define INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_POST_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_POST_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_POST_HPP_
|
||||
|
||||
#include "comm/curl/requests/http_request_base.hpp"
|
||||
|
||||
@ -32,7 +32,7 @@ struct http_post final : http_request_base {
|
||||
auto operator=(const http_post &) -> http_post & = default;
|
||||
auto operator=(http_post &&) -> http_post & = default;
|
||||
|
||||
~http_post() override;
|
||||
~http_post() override = default;
|
||||
|
||||
std::optional<nlohmann::json> json;
|
||||
|
||||
@ -41,9 +41,8 @@ struct http_post final : http_request_base {
|
||||
-> bool override;
|
||||
|
||||
private:
|
||||
mutable curl_slist *headers{nullptr};
|
||||
mutable std::optional<std::string> json_str;
|
||||
};
|
||||
} // namespace repertory::curl::requests
|
||||
|
||||
#endif // INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_POST_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_POST_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_PUT_FILE_HPP_
|
||||
#define INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_PUT_FILE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_PUT_FILE_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_PUT_FILE_HPP_
|
||||
|
||||
#include "comm/curl/requests/http_request_base.hpp"
|
||||
#include "utils/encrypting_reader.hpp"
|
||||
@ -47,4 +47,4 @@ private:
|
||||
};
|
||||
} // namespace repertory::curl::requests
|
||||
|
||||
#endif // INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_PUT_FILE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_PUT_FILE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,36 +19,24 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_REQUEST_BASE_HPP_
|
||||
#define INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_REQUEST_BASE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_REQUEST_BASE_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_REQUEST_BASE_HPP_
|
||||
|
||||
#include "types/repertory.hpp"
|
||||
#include "utils/native_file.hpp"
|
||||
#include "utils/file.hpp"
|
||||
|
||||
namespace repertory::curl::requests {
|
||||
using read_callback = size_t (*)(char *, size_t, size_t, void *);
|
||||
|
||||
using response_callback =
|
||||
using curl_response_callback =
|
||||
std::function<void(const data_buffer &data, long response_code)>;
|
||||
|
||||
struct read_file_info final {
|
||||
stop_type &stop_requested;
|
||||
native_file::native_file_ptr nf{};
|
||||
std::unique_ptr<utils::file::i_file> file{};
|
||||
std::uint64_t offset{};
|
||||
};
|
||||
|
||||
inline const auto read_file_data = static_cast<read_callback>(
|
||||
[](char *buffer, size_t size, size_t nitems, void *instream) -> size_t {
|
||||
auto *read_info = reinterpret_cast<read_file_info *>(instream);
|
||||
std::size_t bytes_read{};
|
||||
auto ret = read_info->nf->read_bytes(buffer, size * nitems,
|
||||
read_info->offset, bytes_read);
|
||||
if (ret) {
|
||||
read_info->offset += bytes_read;
|
||||
}
|
||||
return ret && not read_info->stop_requested ? bytes_read
|
||||
: CURL_READFUNC_ABORT;
|
||||
});
|
||||
[[nodiscard]] auto curl_file_reader(char *buffer, size_t size, size_t nitems,
|
||||
void *instream) -> size_t;
|
||||
|
||||
struct http_request_base {
|
||||
http_request_base() = default;
|
||||
@ -63,11 +51,11 @@ struct http_request_base {
|
||||
bool allow_timeout{};
|
||||
std::optional<std::string> aws_service;
|
||||
std::optional<std::string> decryption_token{};
|
||||
http_headers headers{};
|
||||
mutable http_headers headers{};
|
||||
std::string path{};
|
||||
query_parameters query{};
|
||||
http_query_parameters query{};
|
||||
std::optional<http_range> range{};
|
||||
std::optional<response_callback> response_handler;
|
||||
std::optional<curl_response_callback> response_handler;
|
||||
std::optional<http_headers> response_headers;
|
||||
std::optional<std::uint64_t> total_size{};
|
||||
|
||||
@ -79,4 +67,4 @@ struct http_request_base {
|
||||
};
|
||||
} // namespace repertory::curl::requests
|
||||
|
||||
#endif // INCLUDE_COMM_CURL_CURL_REQUESTS_HTTP_REQUEST_BASE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_CURL_REQUESTS_HTTP_REQUEST_BASE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_I_HTTP_COMM_HPP_
|
||||
#define INCLUDE_COMM_I_HTTP_COMM_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_I_HTTP_COMM_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_I_HTTP_COMM_HPP_
|
||||
|
||||
#include "comm/curl/requests/http_delete.hpp"
|
||||
#include "comm/curl/requests/http_get.hpp"
|
||||
@ -40,26 +40,23 @@ public:
|
||||
make_request(const curl::requests::http_delete &del, long &response_code,
|
||||
stop_type &stop_requested) const -> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto make_request(const curl::requests::http_get &get,
|
||||
long &response_code,
|
||||
stop_type &stop_requested) const
|
||||
-> bool = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
make_request(const curl::requests::http_get &get, long &response_code,
|
||||
stop_type &stop_requested) const -> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto make_request(const curl::requests::http_head &head,
|
||||
long &response_code,
|
||||
stop_type &stop_requested) const
|
||||
-> bool = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
make_request(const curl::requests::http_head &head, long &response_code,
|
||||
stop_type &stop_requested) const -> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto make_request(const curl::requests::http_post &post,
|
||||
long &response_code,
|
||||
stop_type &stop_requested) const
|
||||
-> bool = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
make_request(const curl::requests::http_post &post, long &response_code,
|
||||
stop_type &stop_requested) const -> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
make_request(const curl::requests::http_put_file &put_file,
|
||||
long &response_code, stop_type &stop_requested) const
|
||||
-> bool = 0;
|
||||
long &response_code,
|
||||
stop_type &stop_requested) const -> bool = 0;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_COMM_I_HTTP_COMM_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_I_HTTP_COMM_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_PACKET_CLIENT_POOL_HPP_
|
||||
#define INCLUDE_COMM_PACKET_CLIENT_POOL_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_PACKET_CLIENT_POOL_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_PACKET_CLIENT_POOL_HPP_
|
||||
|
||||
#include "comm/packet/packet.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
@ -107,4 +107,4 @@ public:
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_COMM_PACKET_CLIENT_POOL_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_PACKET_CLIENT_POOL_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_PACKET_PACKET_HPP_
|
||||
#define INCLUDE_COMM_PACKET_PACKET_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_PACKET_PACKET_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_PACKET_PACKET_HPP_
|
||||
|
||||
#include "types/remote.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
@ -52,8 +52,8 @@ public:
|
||||
~packet() = default;
|
||||
|
||||
private:
|
||||
data_buffer buffer_;
|
||||
std::size_t decode_offset_ = 0U;
|
||||
data_buffer buffer_{};
|
||||
std::size_t decode_offset_{0U};
|
||||
|
||||
public:
|
||||
[[nodiscard]] static auto decode_json(packet &response, json &json_data)
|
||||
@ -62,13 +62,13 @@ public:
|
||||
public:
|
||||
void clear();
|
||||
|
||||
[[nodiscard]] auto current_pointer() -> char * {
|
||||
return (decode_offset_ < buffer_.size()) ? &buffer_[decode_offset_]
|
||||
[[nodiscard]] auto current_pointer() -> unsigned char * {
|
||||
return (decode_offset_ < buffer_.size()) ? &buffer_.at(decode_offset_)
|
||||
: nullptr;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto current_pointer() const -> const char * {
|
||||
return (decode_offset_ < buffer_.size()) ? &buffer_[decode_offset_]
|
||||
[[nodiscard]] auto current_pointer() const -> const unsigned char * {
|
||||
return (decode_offset_ < buffer_.size()) ? &buffer_.at(decode_offset_)
|
||||
: nullptr;
|
||||
}
|
||||
|
||||
@ -110,19 +110,19 @@ public:
|
||||
|
||||
[[nodiscard]] auto decode(remote::file_info &val) -> error_type;
|
||||
|
||||
[[nodiscard]] auto decrypt(const std::string &token) -> error_type;
|
||||
[[nodiscard]] auto decrypt(std::string_view token) -> error_type;
|
||||
|
||||
void encode(const void *buffer, std::size_t size, bool should_reserve = true);
|
||||
|
||||
void encode(const char *str) {
|
||||
encode(std::string(str == nullptr ? "" : str));
|
||||
encode(std::string{str == nullptr ? "" : str});
|
||||
}
|
||||
|
||||
void encode(const std::string &str);
|
||||
void encode(std::string_view str);
|
||||
|
||||
void encode(const wchar_t *str);
|
||||
|
||||
void encode(const std::wstring &str);
|
||||
void encode(std::wstring_view str);
|
||||
|
||||
void encode(void *ptr) {
|
||||
encode(static_cast<std::uint64_t>(reinterpret_cast<std::uintptr_t>(ptr)));
|
||||
@ -161,9 +161,9 @@ public:
|
||||
void encode_top(const void *buffer, std::size_t size,
|
||||
bool should_reserve = true);
|
||||
|
||||
void encode_top(const std::string &str);
|
||||
void encode_top(std::string_view str);
|
||||
|
||||
void encode_top(const std::wstring &str);
|
||||
void encode_top(std::wstring_view str);
|
||||
|
||||
void encode_top(void *ptr) {
|
||||
encode_top(
|
||||
@ -200,13 +200,13 @@ public:
|
||||
|
||||
void encode_top(remote::file_info val);
|
||||
|
||||
void encrypt(const std::string &token);
|
||||
void encrypt(std::string_view token);
|
||||
|
||||
[[nodiscard]] auto get_size() const -> std::uint32_t {
|
||||
return static_cast<std::uint32_t>(buffer_.size());
|
||||
}
|
||||
|
||||
void transfer_into(data_buffer &buffer);
|
||||
void to_buffer(data_buffer &buffer);
|
||||
|
||||
public:
|
||||
auto operator=(const data_buffer &buffer) noexcept -> packet &;
|
||||
@ -217,16 +217,15 @@ public:
|
||||
|
||||
auto operator=(packet &&pkt) noexcept -> packet &;
|
||||
|
||||
[[nodiscard]] auto operator[](std::size_t index) -> char & {
|
||||
[[nodiscard]] auto operator[](std::size_t index) -> unsigned char & {
|
||||
return buffer_[index];
|
||||
}
|
||||
|
||||
[[nodiscard]] auto operator[](std::size_t index) const -> const char & {
|
||||
[[nodiscard]] auto operator[](std::size_t index) const -> const
|
||||
unsigned char & {
|
||||
return buffer_.at(index);
|
||||
}
|
||||
};
|
||||
|
||||
using packet = packet;
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_COMM_PACKET_PACKET_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_PACKET_PACKET_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,10 +19,11 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_PACKET_PACKET_CLIENT_HPP_
|
||||
#define INCLUDE_COMM_PACKET_PACKET_CLIENT_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_PACKET_PACKET_CLIENT_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_PACKET_PACKET_CLIENT_HPP_
|
||||
|
||||
#include "comm/packet/packet.hpp"
|
||||
#include "types/remote.hpp"
|
||||
|
||||
using boost::asio::ip::tcp;
|
||||
|
||||
@ -36,9 +37,7 @@ private:
|
||||
};
|
||||
|
||||
public:
|
||||
packet_client(std::string host_name_or_ip, std::uint8_t max_connections,
|
||||
std::uint16_t port, std::uint16_t receive_timeout,
|
||||
std::uint16_t send_timeout, std::string encryption_token);
|
||||
packet_client(remote::remote_config cfg);
|
||||
|
||||
~packet_client();
|
||||
|
||||
@ -49,12 +48,7 @@ public:
|
||||
|
||||
private:
|
||||
boost::asio::io_context io_context_;
|
||||
std::string host_name_or_ip_;
|
||||
std::uint8_t max_connections_;
|
||||
std::uint16_t port_;
|
||||
std::uint16_t receive_timeout_;
|
||||
std::uint16_t send_timeout_;
|
||||
std::string encryption_token_;
|
||||
remote::remote_config cfg_;
|
||||
std::string unique_id_;
|
||||
|
||||
private:
|
||||
@ -75,22 +69,22 @@ private:
|
||||
|
||||
void put_client(std::shared_ptr<client> &cli);
|
||||
|
||||
[[nodiscard]] auto read_packet(client &cli, packet &response)
|
||||
-> packet::error_type;
|
||||
[[nodiscard]] auto read_packet(client &cli,
|
||||
packet &response) const -> packet::error_type;
|
||||
|
||||
void resolve();
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto send(const std::string &method,
|
||||
[[nodiscard]] auto send(std::string_view method,
|
||||
std::uint32_t &service_flags) -> packet::error_type;
|
||||
|
||||
[[nodiscard]] auto send(const std::string &method, packet &request,
|
||||
[[nodiscard]] auto send(std::string_view method, packet &request,
|
||||
std::uint32_t &service_flags) -> packet::error_type;
|
||||
|
||||
[[nodiscard]] auto send(const std::string &method, packet &request,
|
||||
packet &response, std::uint32_t &service_flags)
|
||||
-> packet::error_type;
|
||||
[[nodiscard]] auto send(std::string_view method, packet &request,
|
||||
packet &response,
|
||||
std::uint32_t &service_flags) -> packet::error_type;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_COMM_PACKET_PACKET_CLIENT_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_PACKET_PACKET_CLIENT_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,12 +19,11 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMM_PACKET_PACKET_SERVER_HPP_
|
||||
#define INCLUDE_COMM_PACKET_PACKET_SERVER_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMM_PACKET_PACKET_SERVER_HPP_
|
||||
#define REPERTORY_INCLUDE_COMM_PACKET_PACKET_SERVER_HPP_
|
||||
|
||||
#include "comm/packet/client_pool.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
#include "utils/utils.hpp"
|
||||
#include "utils/common.hpp"
|
||||
|
||||
using namespace boost::asio;
|
||||
using boost::asio::ip::tcp;
|
||||
@ -53,8 +52,8 @@ public:
|
||||
|
||||
private:
|
||||
struct connection {
|
||||
connection(boost::asio::io_service &io_service, tcp::acceptor &acceptor_)
|
||||
: socket(io_service), acceptor(acceptor_) {}
|
||||
connection(io_context &ctx, tcp::acceptor &acceptor_)
|
||||
: socket(ctx), acceptor(acceptor_) {}
|
||||
|
||||
tcp::socket socket;
|
||||
tcp::acceptor &acceptor;
|
||||
@ -69,7 +68,7 @@ private:
|
||||
std::string encryption_token_;
|
||||
closed_callback closed_;
|
||||
message_handler_callback message_handler_;
|
||||
boost::asio::io_context io_context_;
|
||||
io_context io_context_;
|
||||
std::unique_ptr<std::thread> server_thread_;
|
||||
std::vector<std::thread> service_threads_;
|
||||
std::recursive_mutex connection_mutex_;
|
||||
@ -96,4 +95,4 @@ private:
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_COMM_PACKET_PACKET_SERVER_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMM_PACKET_PACKET_SERVER_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_COMMON_HPP_
|
||||
#define INCLUDE_COMMON_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_COMMON_HPP_
|
||||
#define REPERTORY_INCLUDE_COMMON_HPP_
|
||||
|
||||
#if defined(__GNUC__)
|
||||
// clang-format off
|
||||
@ -48,113 +48,7 @@
|
||||
|
||||
#if defined(__cplusplus)
|
||||
REPERTORY_IGNORE_WARNINGS_ENABLE()
|
||||
|
||||
#if defined(_WIN32)
|
||||
#define WINVER 0x0602
|
||||
#define _WIN32_WINNT WINVER
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <windows.h>
|
||||
#include <shellapi.h>
|
||||
#include <shlwapi.h>
|
||||
#include <shlobj.h>
|
||||
#include <ciso646>
|
||||
#include <direct.h>
|
||||
#include <fcntl.h>
|
||||
#include <io.h>
|
||||
#include <time.h>
|
||||
#else
|
||||
#include <climits>
|
||||
#include <dirent.h>
|
||||
#include <fcntl.h>
|
||||
#include <grp.h>
|
||||
#include <libgen.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/stat.h>
|
||||
#if defined(__linux__)
|
||||
#include <sys/statfs.h>
|
||||
#endif
|
||||
#include <unistd.h>
|
||||
#if defined(HAS_SETXATTR)
|
||||
#include <sys/types.h>
|
||||
#include <sys/xattr.h>
|
||||
#endif
|
||||
#if defined(__APPLE__)
|
||||
#include <libproc.h>
|
||||
#include <sys/attr.h>
|
||||
#include <sys/vnode.h>
|
||||
#endif
|
||||
#if defined(__APPLE__)
|
||||
#include <sys/mount.h>
|
||||
#include <sys/statvfs.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <codecvt>
|
||||
#include <condition_variable>
|
||||
#include <deque>
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <future>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <limits>
|
||||
#include <mutex>
|
||||
#include <optional>
|
||||
#include <random>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <thread>
|
||||
#include <type_traits>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#include "sodium.h"
|
||||
template <typename data_type>
|
||||
[[nodiscard]] inline auto repertory_rand() -> data_type {
|
||||
data_type ret{};
|
||||
randombytes_buf(&ret, sizeof(ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
#include "boost/archive/text_iarchive.hpp"
|
||||
#include "boost/archive/text_oarchive.hpp"
|
||||
#include "boost/asio.hpp"
|
||||
#include "boost/asio/io_context.hpp"
|
||||
#include "boost/bind/bind.hpp"
|
||||
#include "boost/dynamic_bitset.hpp"
|
||||
#include "boost/dynamic_bitset/serialization.hpp"
|
||||
#include "boost/endian/conversion.hpp"
|
||||
#include "boost/serialization/vector.hpp"
|
||||
#include "curl/curl.h"
|
||||
#include "curl/multi.h"
|
||||
#include "json.hpp"
|
||||
#include "sqlite3.h"
|
||||
#include "uuid.h"
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include <sddl.h>
|
||||
#include "winfsp/winfsp.hpp"
|
||||
#else
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
#include <fuse.h>
|
||||
#include <fuse_lowlevel.h>
|
||||
#else
|
||||
#include <fuse/fuse.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include "httplib.h"
|
||||
|
||||
#include "utils/config.hpp"
|
||||
REPERTORY_IGNORE_WARNINGS_DISABLE()
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
@ -163,21 +57,13 @@ using json = nlohmann::json;
|
||||
inline constexpr const std::string_view REPERTORY = "repertory";
|
||||
inline constexpr const std::wstring_view REPERTORY_W = L"repertory";
|
||||
|
||||
inline constexpr const std::uint64_t REPERTORY_CONFIG_VERSION = 0ULL;
|
||||
inline constexpr const std::uint64_t REPERTORY_CONFIG_VERSION = 2ULL;
|
||||
inline constexpr const std::string_view REPERTORY_DATA_NAME = "repertory2";
|
||||
inline constexpr const std::string_view REPERTORY_MIN_REMOTE_VERSION = "2.0.0";
|
||||
|
||||
#if defined(_WIN32)
|
||||
#define REPERTORY_INVALID_HANDLE INVALID_HANDLE_VALUE
|
||||
#define REPERTORY_API_INVALID_HANDLE static_cast<std::uint64_t>(-1)
|
||||
using native_handle = HANDLE;
|
||||
#else
|
||||
#define REPERTORY_INVALID_HANDLE (-1)
|
||||
#define REPERTORY_API_INVALID_HANDLE REPERTORY_INVALID_HANDLE
|
||||
using native_handle = int;
|
||||
#endif
|
||||
|
||||
inline constexpr const auto NANOS_PER_SECOND = 1000000000L;
|
||||
#define WINFSP_ALLOCATION_UNIT UINT64(4096U)
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(CreateDirectory)
|
||||
@ -279,28 +165,6 @@ inline constexpr const auto NANOS_PER_SECOND = 1000000000L;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef fstat64
|
||||
#define fstat64 fstat
|
||||
#endif
|
||||
|
||||
#ifndef pread64
|
||||
#define pread64 pread
|
||||
#endif
|
||||
|
||||
#ifndef pwrite64
|
||||
#define pwrite64 pwrite
|
||||
#endif
|
||||
|
||||
#ifndef stat64
|
||||
#define stat64 stat
|
||||
#endif
|
||||
|
||||
#ifndef statfs64
|
||||
#define statfs64 statfs
|
||||
#endif
|
||||
|
||||
#define WINFSP_ALLOCATION_UNIT UINT64(4096U)
|
||||
|
||||
#if defined(_WIN32)
|
||||
#define UTIME_NOW ((1l << 30) - 1l)
|
||||
#define UTIME_OMIT ((1l << 30) - 2l)
|
||||
@ -309,6 +173,7 @@ inline constexpr const auto NANOS_PER_SECOND = 1000000000L;
|
||||
using BOOLEAN = std::uint8_t;
|
||||
using DWORD = std::uint32_t;
|
||||
using HANDLE = void *;
|
||||
using NTSTATUS = std::uint32_t;
|
||||
using PUINT32 = std::uint32_t *;
|
||||
using PVOID = void *;
|
||||
using PWSTR = wchar_t *;
|
||||
@ -352,32 +217,32 @@ using WCHAR = wchar_t;
|
||||
#define GENERIC_EXECUTE (0x20000000L)
|
||||
#define GENERIC_ALL (0x10000000L)
|
||||
|
||||
#define INVALID_FILE_ATTRIBUTES ((DWORD) - 1)
|
||||
#define INVALID_FILE_ATTRIBUTES static_cast<DWORD>(-1)
|
||||
|
||||
#define MAX_PATH 260
|
||||
|
||||
#define STATUS_SUCCESS std::int32_t(0)
|
||||
#define STATUS_ACCESS_DENIED std::int32_t(0xC0000022L)
|
||||
#define STATUS_DEVICE_BUSY std::int32_t(0x80000011L)
|
||||
#define STATUS_DEVICE_INSUFFICIENT_RESOURCES std::int32_t(0xC0000468L)
|
||||
#define STATUS_DIRECTORY_NOT_EMPTY std::int32_t(0xC0000101L)
|
||||
#define STATUS_FILE_IS_A_DIRECTORY std::int32_t(0xC00000BAL)
|
||||
#define STATUS_FILE_TOO_LARGE std::int32_t(0xC0000904L)
|
||||
#define STATUS_INSUFFICIENT_RESOURCES std::int32_t(0xC000009AL)
|
||||
#define STATUS_INTERNAL_ERROR std::int32_t(0xC00000E5L)
|
||||
#define STATUS_INVALID_ADDRESS std::int32_t(0xC0000141L)
|
||||
#define STATUS_INVALID_HANDLE std::int32_t(0xC0000006L)
|
||||
#define STATUS_INVALID_IMAGE_FORMAT std::int32_t(0xC000007BL)
|
||||
#define STATUS_INVALID_PARAMETER std::int32_t(0xC000000DL)
|
||||
#define STATUS_NO_MEMORY std::int32_t(0xC0000017L)
|
||||
#define STATUS_NOT_IMPLEMENTED std::int32_t(0xC0000002L)
|
||||
#define STATUS_OBJECT_NAME_EXISTS std::int32_t(0x40000000L)
|
||||
#define STATUS_OBJECT_NAME_NOT_FOUND std::int32_t(0xC0000034L)
|
||||
#define STATUS_OBJECT_PATH_INVALID std::int32_t(0xC0000039L)
|
||||
#define STATUS_UNEXPECTED_IO_ERROR std::int32_t(0xC00000E9L)
|
||||
#define STATUS_SUCCESS std::uint32_t{0U}
|
||||
#define STATUS_ACCESS_DENIED std::uint32_t{0xC0000022L}
|
||||
#define STATUS_DEVICE_BUSY std::uint32_t{0x80000011L}
|
||||
#define STATUS_DEVICE_INSUFFICIENT_RESOURCES std::uint32_t{0xC0000468L}
|
||||
#define STATUS_DIRECTORY_NOT_EMPTY std::uint32_t{0xC0000101L}
|
||||
#define STATUS_FILE_IS_A_DIRECTORY std::uint32_t{0xC00000BAL}
|
||||
#define STATUS_FILE_TOO_LARGE std::uint32_t{0xC0000904L}
|
||||
#define STATUS_INSUFFICIENT_RESOURCES std::uint32_t{0xC000009AL}
|
||||
#define STATUS_INTERNAL_ERROR std::uint32_t{0xC00000E5L}
|
||||
#define STATUS_INVALID_ADDRESS std::uint32_t{0xC0000141L}
|
||||
#define STATUS_INVALID_HANDLE std::uint32_t{0xC0000006L}
|
||||
#define STATUS_INVALID_IMAGE_FORMAT std::uint32_t{0xC000007BL}
|
||||
#define STATUS_INVALID_PARAMETER std::uint32_t{0xC000000DL}
|
||||
#define STATUS_NO_MEMORY std::uint32_t{0xC0000017L}
|
||||
#define STATUS_NOT_IMPLEMENTED std::uint32_t{0xC0000002L}
|
||||
#define STATUS_OBJECT_NAME_EXISTS std::uint32_t{0x40000000L}
|
||||
#define STATUS_OBJECT_NAME_NOT_FOUND std::uint32_t{0xC0000034L}
|
||||
#define STATUS_OBJECT_PATH_INVALID std::uint32_t{0xC0000039L}
|
||||
#define STATUS_UNEXPECTED_IO_ERROR std::uint32_t{0xC00000E9L}
|
||||
|
||||
#define CONVERT_STATUS_NOT_IMPLEMENTED(e) \
|
||||
((std::int32_t(e) == STATUS_NOT_IMPLEMENTED) ? -ENOTSUP : e)
|
||||
((std::uint32_t(e) == STATUS_NOT_IMPLEMENTED) ? -ENOTSUP : e)
|
||||
|
||||
namespace Fsp::FileSystemBase {
|
||||
enum {
|
||||
@ -409,18 +274,11 @@ using FileInfo = FSP_FSCTL_FILE_INFO;
|
||||
|
||||
using namespace Fsp;
|
||||
|
||||
namespace {
|
||||
template <class... Ts> struct overloaded : Ts... {
|
||||
using Ts::operator()...;
|
||||
};
|
||||
template <class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
|
||||
} // namespace
|
||||
|
||||
#define INTERFACE_SETUP(name) \
|
||||
public: \
|
||||
name(const name &) noexcept = delete; \
|
||||
name &operator=(const name &) noexcept = delete; \
|
||||
name &operator=(name &&) noexcept = delete; \
|
||||
auto operator=(const name &) noexcept -> name & = delete; \
|
||||
auto operator=(name &&) noexcept -> name & = delete; \
|
||||
\
|
||||
protected: \
|
||||
name() = default; \
|
||||
@ -430,4 +288,4 @@ public: \
|
||||
virtual ~name() = default
|
||||
|
||||
#endif // __cplusplus
|
||||
#endif // INCLUDE_COMMON_HPP_
|
||||
#endif // REPERTORY_INCLUDE_COMMON_HPP_
|
||||
|
@ -1,247 +0,0 @@
|
||||
/*
|
||||
Copyright <2018-2024> <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 INCLUDE_DATABASE_DB_COMMON_HPP_
|
||||
#define INCLUDE_DATABASE_DB_COMMON_HPP_
|
||||
|
||||
#include "utils/error_utils.hpp"
|
||||
|
||||
namespace repertory::db {
|
||||
using db_types_t = std::variant<std::int64_t, std::string>;
|
||||
|
||||
struct sqlite3_deleter {
|
||||
void operator()(sqlite3 *db3) {
|
||||
if (db3 != nullptr) {
|
||||
sqlite3_close_v2(db3);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
using db3_t = std::unique_ptr<sqlite3, sqlite3_deleter>;
|
||||
|
||||
struct sqlite3_statement_deleter {
|
||||
void operator()(sqlite3_stmt *stmt) {
|
||||
if (stmt != nullptr) {
|
||||
sqlite3_finalize(stmt);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
using db3_stmt_t = std::unique_ptr<sqlite3_stmt, sqlite3_statement_deleter>;
|
||||
|
||||
struct comp_data_t final {
|
||||
std::string column_name;
|
||||
std::string op_type;
|
||||
db_types_t value;
|
||||
};
|
||||
|
||||
class db_column final {
|
||||
public:
|
||||
db_column() noexcept = default;
|
||||
db_column(const db_column &) = default;
|
||||
db_column(db_column &&column) noexcept = default;
|
||||
~db_column() = default;
|
||||
|
||||
auto operator=(const db_column &) -> db_column & = default;
|
||||
auto operator=(db_column &&) -> db_column & = default;
|
||||
|
||||
db_column(std::int32_t index, std::string name, db_types_t value) noexcept
|
||||
: index_(index), name_(std::move(name)), value_(std::move(value)) {}
|
||||
|
||||
private:
|
||||
std::int32_t index_{};
|
||||
std::string name_;
|
||||
db_types_t value_;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto get_index() const -> std::int32_t { return index_; }
|
||||
|
||||
[[nodiscard]] auto get_name() const -> std::string { return name_; }
|
||||
|
||||
template <typename data_type>
|
||||
[[nodiscard]] auto get_value() const -> data_type {
|
||||
return std::visit(
|
||||
overloaded{
|
||||
[](const data_type &value) -> data_type { return value; },
|
||||
[](auto &&) -> data_type {
|
||||
throw std::runtime_error("data type not supported");
|
||||
},
|
||||
},
|
||||
value_);
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_value_as_json() const -> nlohmann::json {
|
||||
return std::visit(
|
||||
overloaded{
|
||||
[this](std::int64_t value) -> auto {
|
||||
return nlohmann::json({{name_, value}});
|
||||
},
|
||||
[](auto &&value) -> auto { return nlohmann::json::parse(value); },
|
||||
},
|
||||
value_);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename context_t> class db_row final {
|
||||
public:
|
||||
db_row(std::shared_ptr<context_t> context) {
|
||||
auto column_count = sqlite3_column_count(context->stmt.get());
|
||||
for (std::int32_t col = 0; col < column_count; col++) {
|
||||
std::string name{sqlite3_column_name(context->stmt.get(), col)};
|
||||
auto column_type = sqlite3_column_type(context->stmt.get(), col);
|
||||
|
||||
db_types_t value;
|
||||
switch (column_type) {
|
||||
case SQLITE_INTEGER: {
|
||||
value = sqlite3_column_int64(context->stmt.get(), col);
|
||||
} break;
|
||||
|
||||
case SQLITE_TEXT: {
|
||||
const auto *text = reinterpret_cast<const char *>(
|
||||
sqlite3_column_text(context->stmt.get(), col));
|
||||
value = std::string(text == nullptr ? "" : text);
|
||||
} break;
|
||||
|
||||
default:
|
||||
throw std::runtime_error("column type not implemented|" + name + '|' +
|
||||
std::to_string(column_type));
|
||||
}
|
||||
|
||||
columns_[name] = db_column{col, name, value};
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::map<std::string, db_column> columns_;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto get_columns() const -> std::vector<db_column> {
|
||||
std::vector<db_column> ret;
|
||||
for (const auto &item : columns_) {
|
||||
ret.push_back(item.second);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_column(std::int32_t index) const -> db_column {
|
||||
auto iter = std::find_if(columns_.begin(), columns_.end(),
|
||||
[&index](auto &&col) -> bool {
|
||||
return col.second.get_index() == index;
|
||||
});
|
||||
if (iter == columns_.end()) {
|
||||
throw std::out_of_range("");
|
||||
}
|
||||
|
||||
return iter->second;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_column(std::string name) const -> db_column {
|
||||
return columns_.at(name);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename context_t> struct db_result final {
|
||||
db_result(std::shared_ptr<context_t> context, std::int32_t res)
|
||||
: context_(std::move(context)), res_(res) {
|
||||
constexpr const auto *function_name =
|
||||
static_cast<const char *>(__FUNCTION__);
|
||||
|
||||
if (res == SQLITE_OK) {
|
||||
set_res(sqlite3_step(context_->stmt.get()), function_name);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<context_t> context_;
|
||||
mutable std::int32_t res_;
|
||||
|
||||
private:
|
||||
void set_res(std::int32_t res, std::string function) const {
|
||||
if (res != SQLITE_OK && res != SQLITE_DONE && res != SQLITE_ROW) {
|
||||
utils::error::raise_error(function, "failed to step|" +
|
||||
std::to_string(res) + '|' +
|
||||
sqlite3_errstr(res));
|
||||
}
|
||||
res_ = res;
|
||||
}
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto ok() const -> bool {
|
||||
return res_ == SQLITE_DONE || res_ == SQLITE_ROW;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_error() const -> std::int32_t { return res_; }
|
||||
|
||||
[[nodiscard]] auto get_error_str() const -> std::string {
|
||||
return sqlite3_errstr(res_);
|
||||
}
|
||||
|
||||
[[nodiscard]] auto get_row(std::optional<db_row<context_t>> &row) const
|
||||
-> bool {
|
||||
constexpr const auto *function_name =
|
||||
static_cast<const char *>(__FUNCTION__);
|
||||
|
||||
row.reset();
|
||||
if (has_row()) {
|
||||
row = db_row{context_};
|
||||
set_res(sqlite3_step(context_->stmt.get()), function_name);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto has_row() const -> bool { return res_ == SQLITE_ROW; }
|
||||
|
||||
void next_row() const {
|
||||
constexpr const auto *function_name =
|
||||
static_cast<const char *>(__FUNCTION__);
|
||||
|
||||
if (has_row()) {
|
||||
set_res(sqlite3_step(context_->stmt.get()), function_name);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
inline void set_journal_mode(sqlite3 &db3) {
|
||||
sqlite3_exec(&db3, "PRAGMA journal_mode = WAL;PRAGMA synchronous = NORMAL;",
|
||||
nullptr, nullptr, nullptr);
|
||||
}
|
||||
|
||||
[[nodiscard]] inline auto execute_sql(sqlite3 &db3, const std::string &sql,
|
||||
std::string &err) -> bool {
|
||||
char *err_msg{nullptr};
|
||||
auto res = sqlite3_exec(&db3, sql.c_str(), nullptr, nullptr, &err_msg);
|
||||
if (err_msg != nullptr) {
|
||||
err = err_msg;
|
||||
sqlite3_free(err_msg);
|
||||
err_msg = nullptr;
|
||||
}
|
||||
if (res != SQLITE_OK) {
|
||||
err = "failed to execute sql|" + sql + "|" + std::to_string(res) + '|' +
|
||||
(err.empty() ? sqlite3_errstr(res) : err);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
} // namespace repertory::db
|
||||
|
||||
#endif // INCLUDE_DATABASE_DB_COMMON_HPP_
|
@ -1,125 +0,0 @@
|
||||
/*
|
||||
Copyright <2018-2024> <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 INCLUDE_DATABASE_DB_SELECT_HPP_
|
||||
#define INCLUDE_DATABASE_DB_SELECT_HPP_
|
||||
|
||||
#include "database/db_common.hpp"
|
||||
#include "utils/error_utils.hpp"
|
||||
|
||||
namespace repertory::db {
|
||||
class db_select final {
|
||||
public:
|
||||
struct context final {
|
||||
context(sqlite3 &db3_, std::string table_name_)
|
||||
: db3(db3_), table_name(std::move(table_name_)) {}
|
||||
|
||||
sqlite3 &db3;
|
||||
std::string table_name;
|
||||
|
||||
std::vector<comp_data_t> ands{};
|
||||
std::vector<std::string> columns{};
|
||||
std::map<std::string, std::string> count_columns{};
|
||||
bool delete_query{false};
|
||||
std::optional<std::int32_t> limit;
|
||||
std::optional<std::pair<std::string, bool>> order_by;
|
||||
db3_stmt_t stmt{nullptr};
|
||||
};
|
||||
|
||||
using row = db_row<context>;
|
||||
|
||||
public:
|
||||
db_select(sqlite3 &db3, std::string table_name)
|
||||
: context_(std::make_shared<context>(db3, table_name)) {}
|
||||
|
||||
db_select(std::shared_ptr<context> ctx) : context_(std::move(ctx)) {}
|
||||
|
||||
public:
|
||||
struct db_where final {
|
||||
db_where(std::shared_ptr<context> ctx, std::string column_name)
|
||||
: context_(std::move(ctx)), column_name_(std::move(column_name)) {}
|
||||
|
||||
public:
|
||||
struct db_where_next final {
|
||||
db_where_next(std::shared_ptr<context> ctx) : context_(std::move(ctx)) {}
|
||||
|
||||
private:
|
||||
std::shared_ptr<context> context_;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto and_where(std::string column_name) const -> db_where {
|
||||
return db_where{context_, column_name};
|
||||
}
|
||||
|
||||
[[nodiscard]] auto dump() const -> std::string {
|
||||
return db_select{context_}.dump();
|
||||
}
|
||||
|
||||
[[nodiscard]] auto go() const -> db_result<context> {
|
||||
return db_select{context_}.go();
|
||||
}
|
||||
|
||||
[[nodiscard]] auto limit(std::int32_t value) const -> db_select {
|
||||
return db_select{context_}.limit(value);
|
||||
}
|
||||
|
||||
[[nodiscard]] auto order_by(std::string column_name, bool ascending) const
|
||||
-> db_select {
|
||||
return db_select{context_}.order_by(column_name, ascending);
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
std::shared_ptr<context> context_;
|
||||
std::string column_name_;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto equals(db_types_t value) const -> db_where_next {
|
||||
context_->ands.emplace_back(comp_data_t{column_name_, "=", value});
|
||||
return db_where_next{context_};
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
std::shared_ptr<context> context_;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto column(std::string column_name) -> db_select &;
|
||||
|
||||
[[nodiscard]] auto count(std::string column_name, std::string as_column_name)
|
||||
-> db_select &;
|
||||
|
||||
[[nodiscard]] auto delete_query() -> db_select &;
|
||||
|
||||
[[nodiscard]] auto dump() const -> std::string;
|
||||
|
||||
[[nodiscard]] auto go() const -> db_result<context>;
|
||||
|
||||
[[nodiscard]] auto limit(std::int32_t value) -> db_select &;
|
||||
|
||||
[[nodiscard]] auto order_by(std::string column_name, bool ascending)
|
||||
-> db_select &;
|
||||
|
||||
[[nodiscard]] auto where(std::string column_name) const -> db_where;
|
||||
};
|
||||
} // namespace repertory::db
|
||||
|
||||
#endif // INCLUDE_DATABASE_DB_SELECT_HPP_
|
@ -1,36 +1,34 @@
|
||||
/*
|
||||
Copyright <2018-2024> <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.
|
||||
*/
|
||||
#include "events/t_event_system.hpp"
|
||||
|
||||
#include "events/event.hpp"
|
||||
|
||||
namespace repertory {
|
||||
template <typename event_type>
|
||||
auto t_event_system<event_type>::instance() -> t_event_system<event_type> & {
|
||||
return event_system_;
|
||||
}
|
||||
|
||||
template <typename event_type>
|
||||
t_event_system<event_type> t_event_system<event_type>::event_system_;
|
||||
|
||||
template class t_event_system<event>;
|
||||
} // namespace repertory
|
||||
/*
|
||||
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_DB_FILE_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_FILE_DB_HPP_
|
||||
|
||||
#include "db/i_file_db.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
|
||||
[[nodiscard]] auto create_file_db(const app_config &cfg)
|
||||
-> std::unique_ptr<i_file_db>;
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_FILE_DB_HPP_
|
@ -1,41 +1,34 @@
|
||||
/*
|
||||
Copyright <2018-2024> <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 INCLUDE_DRIVES_FUSE_EVENTS_HPP_
|
||||
#define INCLUDE_DRIVES_FUSE_EVENTS_HPP_
|
||||
|
||||
#include "events/event_system.hpp"
|
||||
|
||||
namespace repertory {
|
||||
// clang-format off
|
||||
E_SIMPLE3(fuse_event, debug, true,
|
||||
std::string, function, func, E_STRING,
|
||||
std::string, api_path, ap, E_STRING,
|
||||
int, result, res, E_FROM_INT32
|
||||
);
|
||||
|
||||
E_SIMPLE1(fuse_args_parsed, normal, true,
|
||||
std::string, arguments, args, E_STRING
|
||||
);
|
||||
// clang-format on
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_DRIVES_FUSE_EVENTS_HPP_
|
||||
/*
|
||||
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_DB_FILE_MGR_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_FILE_MGR_DB_HPP_
|
||||
|
||||
#include "db/i_file_mgr_db.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
|
||||
[[nodiscard]] auto
|
||||
create_file_mgr_db(const app_config &cfg) -> std::unique_ptr<i_file_mgr_db>;
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_FILE_MGR_DB_HPP_
|
100
repertory/librepertory/include/db/i_file_db.hpp
Normal file
100
repertory/librepertory/include/db/i_file_db.hpp
Normal file
@ -0,0 +1,100 @@
|
||||
/*
|
||||
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_DB_I_FILE_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_I_FILE_DB_HPP_
|
||||
|
||||
#include "types/repertory.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class i_file_db {
|
||||
INTERFACE_SETUP(i_file_db);
|
||||
|
||||
public:
|
||||
struct file_info final {
|
||||
std::string api_path;
|
||||
bool directory{};
|
||||
std::string source_path;
|
||||
};
|
||||
|
||||
struct file_data final {
|
||||
std::string api_path;
|
||||
std::uint64_t file_size{};
|
||||
std::vector<
|
||||
std::array<unsigned char, crypto_aead_xchacha20poly1305_IETF_NPUBBYTES>>
|
||||
iv_list{};
|
||||
std::string source_path;
|
||||
};
|
||||
|
||||
public:
|
||||
[[nodiscard]] virtual auto add_directory(const std::string &api_path,
|
||||
const std::string &source_path)
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto add_or_update_file(const file_data &data)
|
||||
-> api_error = 0;
|
||||
|
||||
virtual void clear() = 0;
|
||||
|
||||
[[nodiscard]] virtual auto count() const -> std::uint64_t = 0;
|
||||
|
||||
virtual void enumerate_item_list(
|
||||
std::function<void(const std::vector<i_file_db::file_info> &)> callback,
|
||||
stop_type_callback stop_requested_cb) const = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
get_directory_api_path(const std::string &source_path,
|
||||
std::string &api_path) const -> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
get_directory_source_path(const std::string &api_path,
|
||||
std::string &source_path) const -> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_file_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_file_data(const std::string &api_path,
|
||||
file_data &data) const
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
get_file_source_path(const std::string &api_path,
|
||||
std::string &source_path) const -> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
get_item_list(stop_type_callback stop_requested_cb) const
|
||||
-> std::vector<file_info> = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_source_path(const std::string &api_path,
|
||||
std::string &source_path) const
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto remove_item(const std::string &api_path)
|
||||
-> api_error = 0;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_I_FILE_DB_HPP_
|
83
repertory/librepertory/include/db/i_file_mgr_db.hpp
Normal file
83
repertory/librepertory/include/db/i_file_mgr_db.hpp
Normal file
@ -0,0 +1,83 @@
|
||||
/*
|
||||
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_DB_I_FILE_MGR_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_I_FILE_MGR_DB_HPP_
|
||||
|
||||
#include "types/repertory.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class i_file_mgr_db {
|
||||
INTERFACE_SETUP(i_file_mgr_db);
|
||||
|
||||
public:
|
||||
struct resume_entry final {
|
||||
std::string api_path;
|
||||
std::uint64_t chunk_size{};
|
||||
boost::dynamic_bitset<> read_state;
|
||||
std::string source_path;
|
||||
};
|
||||
|
||||
struct upload_active_entry final {
|
||||
std::string api_path;
|
||||
std::string source_path;
|
||||
};
|
||||
|
||||
using upload_entry = upload_active_entry;
|
||||
|
||||
public:
|
||||
[[nodiscard]] virtual auto add_resume(const resume_entry &entry) -> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto add_upload(const upload_entry &entry) -> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto add_upload_active(const upload_active_entry &entry)
|
||||
-> bool = 0;
|
||||
|
||||
virtual void clear() = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_next_upload() const
|
||||
-> std::optional<upload_entry> = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_resume_list() const
|
||||
-> std::vector<resume_entry> = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_upload(const std::string &api_path) const
|
||||
-> std::optional<upload_entry> = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_upload_active_list() const
|
||||
-> std::vector<upload_active_entry> = 0;
|
||||
|
||||
[[nodiscard]] virtual auto remove_resume(const std::string &api_path)
|
||||
-> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto remove_upload(const std::string &api_path)
|
||||
-> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto remove_upload_active(const std::string &api_path)
|
||||
-> bool = 0;
|
||||
|
||||
[[nodiscard]] virtual auto rename_resume(const std::string &from_api_path,
|
||||
const std::string &to_api_path)
|
||||
-> bool = 0;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_I_FILE_MGR_DB_HPP_
|
82
repertory/librepertory/include/db/i_meta_db.hpp
Normal file
82
repertory/librepertory/include/db/i_meta_db.hpp
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
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_DB_I_META_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_I_META_DB_HPP_
|
||||
|
||||
#include "types/repertory.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class i_meta_db {
|
||||
INTERFACE_SETUP(i_meta_db);
|
||||
|
||||
public:
|
||||
virtual void clear() = 0;
|
||||
|
||||
virtual void enumerate_api_path_list(
|
||||
std::function<void(const std::vector<std::string> &)> callback,
|
||||
stop_type_callback stop_requested_cb) const = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_api_path_list() const
|
||||
-> std::vector<std::string> = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_item_meta(const std::string &api_path,
|
||||
api_meta_map &meta) const
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_item_meta(const std::string &api_path,
|
||||
const std::string &key,
|
||||
std::string &value) const
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_pinned_files() const
|
||||
-> std::vector<std::string> = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_total_item_count() const -> std::uint64_t = 0;
|
||||
|
||||
[[nodiscard]] virtual auto get_total_size() const -> std::uint64_t = 0;
|
||||
|
||||
virtual void remove_api_path(const std::string &api_path) = 0;
|
||||
|
||||
[[nodiscard]] virtual auto remove_item_meta(const std::string &api_path,
|
||||
const std::string &key)
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto rename_item_meta(const std::string &from_api_path,
|
||||
const std::string &to_api_path)
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto set_item_meta(const std::string &api_path,
|
||||
const std::string &key,
|
||||
const std::string &value)
|
||||
-> api_error = 0;
|
||||
|
||||
[[nodiscard]] virtual auto set_item_meta(const std::string &api_path,
|
||||
const api_meta_map &meta)
|
||||
-> api_error = 0;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_I_META_DB_HPP_
|
121
repertory/librepertory/include/db/impl/rdb_file_db.hpp
Normal file
121
repertory/librepertory/include/db/impl/rdb_file_db.hpp
Normal file
@ -0,0 +1,121 @@
|
||||
/*
|
||||
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_DB_IMPL_RDB_FILE_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_IMPL_RDB_FILE_DB_HPP_
|
||||
|
||||
#include "db/i_file_db.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
|
||||
class rdb_file_db final : public i_file_db {
|
||||
public:
|
||||
rdb_file_db(const app_config &cfg);
|
||||
~rdb_file_db() override;
|
||||
|
||||
rdb_file_db(const rdb_file_db &) = delete;
|
||||
rdb_file_db(rdb_file_db &&) = delete;
|
||||
auto operator=(const rdb_file_db &) -> rdb_file_db & = delete;
|
||||
auto operator=(rdb_file_db &&) -> rdb_file_db & = delete;
|
||||
|
||||
private:
|
||||
const app_config &cfg_;
|
||||
|
||||
private:
|
||||
std::unique_ptr<rocksdb::TransactionDB> db_{nullptr};
|
||||
rocksdb::ColumnFamilyHandle *directory_family_{};
|
||||
rocksdb::ColumnFamilyHandle *file_family_{};
|
||||
rocksdb::ColumnFamilyHandle *path_family_{};
|
||||
rocksdb::ColumnFamilyHandle *source_family_{};
|
||||
|
||||
private:
|
||||
void create_or_open(bool clear);
|
||||
|
||||
[[nodiscard]] auto create_iterator(rocksdb::ColumnFamilyHandle *family) const
|
||||
-> std::shared_ptr<rocksdb::Iterator>;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
perform_action(std::string_view function_name,
|
||||
std::function<rocksdb::Status()> action) -> api_error;
|
||||
|
||||
[[nodiscard]] auto perform_action(
|
||||
std::string_view function_name,
|
||||
std::function<rocksdb::Status(rocksdb::Transaction *txn)> action)
|
||||
-> api_error;
|
||||
|
||||
[[nodiscard]] auto remove_item(const std::string &api_path,
|
||||
const std::string &source_path,
|
||||
rocksdb::Transaction *txn) -> rocksdb::Status;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto add_directory(const std::string &api_path,
|
||||
const std::string &source_path)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto add_or_update_file(const i_file_db::file_data &data)
|
||||
-> api_error override;
|
||||
|
||||
void clear() override;
|
||||
|
||||
[[nodiscard]] auto count() const -> std::uint64_t override;
|
||||
|
||||
void enumerate_item_list(
|
||||
std::function<void(const std::vector<i_file_db::file_info> &)> callback,
|
||||
stop_type_callback stop_requested_cb) const override;
|
||||
|
||||
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_source_path(const std::string &api_path,
|
||||
std::string &source_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_file_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_file_data(const std::string &api_path,
|
||||
i_file_db::file_data &data) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_file_source_path(const std::string &api_path,
|
||||
std::string &source_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_item_list(stop_type_callback stop_requested_cb) const
|
||||
-> std::vector<i_file_db::file_info> override;
|
||||
|
||||
[[nodiscard]] auto get_source_path(const std::string &api_path,
|
||||
std::string &source_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto remove_item(const std::string &api_path)
|
||||
-> api_error override;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_IMPL_RDB_FILE_DB_HPP_
|
109
repertory/librepertory/include/db/impl/rdb_file_mgr_db.hpp
Normal file
109
repertory/librepertory/include/db/impl/rdb_file_mgr_db.hpp
Normal file
@ -0,0 +1,109 @@
|
||||
/*
|
||||
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_DB_IMPL_RDB_FILE_MGR_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_IMPL_RDB_FILE_MGR_DB_HPP_
|
||||
|
||||
#include "db/i_file_mgr_db.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
|
||||
class rdb_file_mgr_db final : public i_file_mgr_db {
|
||||
public:
|
||||
rdb_file_mgr_db(const app_config &cfg);
|
||||
~rdb_file_mgr_db() override;
|
||||
|
||||
rdb_file_mgr_db(const rdb_file_mgr_db &) = delete;
|
||||
rdb_file_mgr_db(rdb_file_mgr_db &&) = delete;
|
||||
auto operator=(const rdb_file_mgr_db &) -> rdb_file_mgr_db & = delete;
|
||||
auto operator=(rdb_file_mgr_db &&) -> rdb_file_mgr_db & = delete;
|
||||
|
||||
private:
|
||||
const app_config &cfg_;
|
||||
|
||||
private:
|
||||
std::unique_ptr<rocksdb::TransactionDB> db_{nullptr};
|
||||
std::atomic<std::uint64_t> id_{0U};
|
||||
rocksdb::ColumnFamilyHandle *resume_family_{};
|
||||
rocksdb::ColumnFamilyHandle *upload_active_family_{};
|
||||
rocksdb::ColumnFamilyHandle *upload_family_{};
|
||||
|
||||
private:
|
||||
void create_or_open(bool clear);
|
||||
|
||||
[[nodiscard]] auto create_iterator(rocksdb::ColumnFamilyHandle *family) const
|
||||
-> std::shared_ptr<rocksdb::Iterator>;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
perform_action(std::string_view function_name,
|
||||
std::function<rocksdb::Status()> action) -> bool;
|
||||
|
||||
[[nodiscard]] auto perform_action(
|
||||
std::string_view function_name,
|
||||
std::function<rocksdb::Status(rocksdb::Transaction *txn)> action) -> bool;
|
||||
|
||||
[[nodiscard]] auto remove_resume(const std::string &api_path,
|
||||
rocksdb::Transaction *txn)
|
||||
-> rocksdb::Status;
|
||||
|
||||
[[nodiscard]] auto add_resume(const resume_entry &entry,
|
||||
rocksdb::Transaction *txn) -> rocksdb::Status;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto add_resume(const resume_entry &entry) -> bool override;
|
||||
|
||||
[[nodiscard]] auto add_upload(const upload_entry &entry) -> bool override;
|
||||
|
||||
[[nodiscard]] auto add_upload_active(const upload_active_entry &entry)
|
||||
-> bool override;
|
||||
|
||||
void clear() override;
|
||||
|
||||
[[nodiscard]] auto get_next_upload() const
|
||||
-> std::optional<upload_entry> override;
|
||||
|
||||
[[nodiscard]] auto get_resume_list() const
|
||||
-> std::vector<resume_entry> override;
|
||||
|
||||
[[nodiscard]] auto get_upload(const std::string &api_path) const
|
||||
-> std::optional<upload_entry> override;
|
||||
|
||||
[[nodiscard]] auto get_upload_active_list() const
|
||||
-> std::vector<upload_active_entry> override;
|
||||
|
||||
[[nodiscard]] auto remove_resume(const std::string &api_path)
|
||||
-> bool override;
|
||||
|
||||
[[nodiscard]] auto remove_upload(const std::string &api_path)
|
||||
-> bool override;
|
||||
|
||||
[[nodiscard]] auto remove_upload_active(const std::string &api_path)
|
||||
-> bool override;
|
||||
|
||||
[[nodiscard]] auto rename_resume(const std::string &from_api_path,
|
||||
const std::string &to_api_path)
|
||||
-> bool override;
|
||||
};
|
||||
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_IMPL_RDB_FILE_MGR_DB_HPP_
|
131
repertory/librepertory/include/db/impl/rdb_meta_db.hpp
Normal file
131
repertory/librepertory/include/db/impl/rdb_meta_db.hpp
Normal file
@ -0,0 +1,131 @@
|
||||
/*
|
||||
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_DB_IMPL_RDB_META_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_IMPL_RDB_META_DB_HPP_
|
||||
|
||||
#include "db/i_meta_db.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
|
||||
class rdb_meta_db final : public i_meta_db {
|
||||
public:
|
||||
rdb_meta_db(const app_config &cfg);
|
||||
~rdb_meta_db() override;
|
||||
|
||||
rdb_meta_db(const rdb_meta_db &) = delete;
|
||||
rdb_meta_db(rdb_meta_db &&) = delete;
|
||||
auto operator=(const rdb_meta_db &) -> rdb_meta_db & = delete;
|
||||
auto operator=(rdb_meta_db &&) -> rdb_meta_db & = delete;
|
||||
|
||||
private:
|
||||
const app_config &cfg_;
|
||||
|
||||
private:
|
||||
std::unique_ptr<rocksdb::TransactionDB> db_{nullptr};
|
||||
rocksdb::ColumnFamilyHandle *meta_family_{};
|
||||
rocksdb::ColumnFamilyHandle *pinned_family_{};
|
||||
rocksdb::ColumnFamilyHandle *size_family_{};
|
||||
rocksdb::ColumnFamilyHandle *source_family_{};
|
||||
|
||||
private:
|
||||
[[nodiscard]] auto create_iterator(rocksdb::ColumnFamilyHandle *family) const
|
||||
-> std::shared_ptr<rocksdb::Iterator>;
|
||||
|
||||
void create_or_open(bool clear);
|
||||
|
||||
[[nodiscard]] auto get_item_meta_json(const std::string &api_path,
|
||||
json &json_data) const -> api_error;
|
||||
|
||||
[[nodiscard]] static auto
|
||||
perform_action(std::string_view function_name,
|
||||
std::function<rocksdb::Status()> action) -> api_error;
|
||||
|
||||
[[nodiscard]] auto perform_action(
|
||||
std::string_view function_name,
|
||||
std::function<rocksdb::Status(rocksdb::Transaction *txn)> action)
|
||||
-> api_error;
|
||||
|
||||
[[nodiscard]] auto remove_api_path(const std::string &api_path,
|
||||
const std::string &source_path,
|
||||
rocksdb::Transaction *txn)
|
||||
-> rocksdb::Status;
|
||||
|
||||
[[nodiscard]] auto update_item_meta(const std::string &api_path,
|
||||
json json_data,
|
||||
rocksdb::Transaction *base_txn = nullptr,
|
||||
rocksdb::Status *status = nullptr)
|
||||
-> api_error;
|
||||
|
||||
public:
|
||||
void clear() override;
|
||||
|
||||
void enumerate_api_path_list(
|
||||
std::function<void(const std::vector<std::string> &)> callback,
|
||||
stop_type_callback stop_requested_cb) const override;
|
||||
|
||||
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_api_path_list() const
|
||||
-> std::vector<std::string> override;
|
||||
|
||||
[[nodiscard]] auto get_item_meta(const std::string &api_path,
|
||||
api_meta_map &meta) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_item_meta(const std::string &api_path,
|
||||
const std::string &key,
|
||||
std::string &value) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_pinned_files() const
|
||||
-> std::vector<std::string> override;
|
||||
|
||||
[[nodiscard]] auto get_total_item_count() const -> std::uint64_t override;
|
||||
|
||||
[[nodiscard]] auto get_total_size() const -> std::uint64_t override;
|
||||
|
||||
void remove_api_path(const std::string &api_path) override;
|
||||
|
||||
[[nodiscard]] auto remove_item_meta(const std::string &api_path,
|
||||
const std::string &key)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto rename_item_meta(const std::string &from_api_path,
|
||||
const std::string &to_api_path)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto set_item_meta(const std::string &api_path,
|
||||
const std::string &key,
|
||||
const std::string &value)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto set_item_meta(const std::string &api_path,
|
||||
const api_meta_map &meta)
|
||||
-> api_error override;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_IMPL_RDB_META_DB_HPP_
|
96
repertory/librepertory/include/db/impl/sqlite_file_db.hpp
Normal file
96
repertory/librepertory/include/db/impl/sqlite_file_db.hpp
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
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_DB_IMPL_SQLITE_FILE_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_IMPL_SQLITE_FILE_DB_HPP_
|
||||
|
||||
#include "db/i_file_db.hpp"
|
||||
#include "utils/db/sqlite/db_common.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
|
||||
class sqlite_file_db final : public i_file_db {
|
||||
public:
|
||||
sqlite_file_db(const app_config &cfg);
|
||||
~sqlite_file_db() override;
|
||||
|
||||
sqlite_file_db(const sqlite_file_db &) = delete;
|
||||
sqlite_file_db(sqlite_file_db &&) = delete;
|
||||
auto operator=(const sqlite_file_db &) -> sqlite_file_db & = delete;
|
||||
auto operator=(sqlite_file_db &&) -> sqlite_file_db & = delete;
|
||||
|
||||
private:
|
||||
utils::db::sqlite::db3_t db_;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto add_directory(const std::string &api_path,
|
||||
const std::string &source_path)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto add_or_update_file(const i_file_db::file_data &data)
|
||||
-> api_error override;
|
||||
|
||||
void clear() override;
|
||||
|
||||
[[nodiscard]] auto count() const -> std::uint64_t override;
|
||||
|
||||
void enumerate_item_list(
|
||||
std::function<void(const std::vector<i_file_db::file_info> &)> callback,
|
||||
stop_type_callback stop_requested_cb) const override;
|
||||
|
||||
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_directory_source_path(const std::string &api_path,
|
||||
std::string &source_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_file_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_file_data(const std::string &api_path,
|
||||
i_file_db::file_data &data) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_file_source_path(const std::string &api_path,
|
||||
std::string &source_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_item_list(stop_type_callback stop_requested_cb) const
|
||||
-> std::vector<i_file_db::file_info> override;
|
||||
|
||||
[[nodiscard]] auto get_source_path(const std::string &api_path,
|
||||
std::string &source_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto remove_item(const std::string &api_path)
|
||||
-> api_error override;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_IMPL_SQLITE_FILE_DB_HPP_
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
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_DB_IMPL_SQLITE_FILE_MGR_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_IMPL_SQLITE_FILE_MGR_DB_HPP_
|
||||
|
||||
#include "db/i_file_mgr_db.hpp"
|
||||
#include "utils/db/sqlite/db_common.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
|
||||
class sqlite_file_mgr_db final : public i_file_mgr_db {
|
||||
public:
|
||||
sqlite_file_mgr_db(const app_config &cfg);
|
||||
~sqlite_file_mgr_db() override;
|
||||
|
||||
sqlite_file_mgr_db(const sqlite_file_mgr_db &) = delete;
|
||||
sqlite_file_mgr_db(sqlite_file_mgr_db &&) = delete;
|
||||
auto operator=(const sqlite_file_mgr_db &) -> sqlite_file_mgr_db & = delete;
|
||||
auto operator=(sqlite_file_mgr_db &&) -> sqlite_file_mgr_db & = delete;
|
||||
|
||||
private:
|
||||
utils::db::sqlite::db3_t db_;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto add_resume(const resume_entry &entry) -> bool override;
|
||||
|
||||
[[nodiscard]] auto add_upload(const upload_entry &entry) -> bool override;
|
||||
|
||||
[[nodiscard]] auto add_upload_active(const upload_active_entry &entry)
|
||||
-> bool override;
|
||||
|
||||
void clear() override;
|
||||
|
||||
[[nodiscard]] auto get_next_upload() const
|
||||
-> std::optional<upload_entry> override;
|
||||
|
||||
[[nodiscard]] auto get_resume_list() const
|
||||
-> std::vector<resume_entry> override;
|
||||
|
||||
[[nodiscard]] auto get_upload(const std::string &api_path) const
|
||||
-> std::optional<upload_entry> override;
|
||||
|
||||
[[nodiscard]] auto get_upload_active_list() const
|
||||
-> std::vector<upload_active_entry> override;
|
||||
|
||||
[[nodiscard]] auto remove_resume(const std::string &api_path)
|
||||
-> bool override;
|
||||
|
||||
[[nodiscard]] auto remove_upload(const std::string &api_path)
|
||||
-> bool override;
|
||||
|
||||
[[nodiscard]] auto remove_upload_active(const std::string &api_path)
|
||||
-> bool override;
|
||||
|
||||
[[nodiscard]] auto rename_resume(const std::string &from_api_path,
|
||||
const std::string &to_api_path)
|
||||
-> bool override;
|
||||
};
|
||||
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_IMPL_SQLITE_FILE_MGR_DB_HPP_
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,27 +19,28 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_PROVIDERS_META_DB_HPP_
|
||||
#define INCLUDE_PROVIDERS_META_DB_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DB_IMPL_SQLITE_META_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_IMPL_SQLITE_META_DB_HPP_
|
||||
|
||||
#include "database/db_common.hpp"
|
||||
#include "db/i_meta_db.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
#include "utils/db/sqlite/db_common.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
|
||||
class meta_db final {
|
||||
class sqlite_meta_db final : public i_meta_db {
|
||||
public:
|
||||
meta_db(const app_config &cfg);
|
||||
~meta_db();
|
||||
sqlite_meta_db(const app_config &cfg);
|
||||
~sqlite_meta_db() override;
|
||||
|
||||
meta_db(const meta_db &) = delete;
|
||||
meta_db(meta_db &&) = delete;
|
||||
auto operator=(const meta_db &) -> meta_db & = delete;
|
||||
auto operator=(meta_db &&) -> meta_db & = delete;
|
||||
sqlite_meta_db(const sqlite_meta_db &) = delete;
|
||||
sqlite_meta_db(sqlite_meta_db &&) = delete;
|
||||
auto operator=(const sqlite_meta_db &) -> sqlite_meta_db & = delete;
|
||||
auto operator=(sqlite_meta_db &&) -> sqlite_meta_db & = delete;
|
||||
|
||||
private:
|
||||
db::db3_t db_;
|
||||
utils::db::sqlite::db3_t db_;
|
||||
constexpr static const auto table_name = "meta";
|
||||
|
||||
private:
|
||||
@ -47,38 +48,54 @@ private:
|
||||
api_meta_map meta) -> api_error;
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
||||
std::string &api_path) -> api_error;
|
||||
void clear() override;
|
||||
|
||||
[[nodiscard]] auto get_api_path_list() -> std::vector<std::string>;
|
||||
void enumerate_api_path_list(
|
||||
std::function<void(const std::vector<std::string> &)> callback,
|
||||
stop_type_callback stop_requested_cb) const override;
|
||||
|
||||
[[nodiscard]] auto get_api_path(const std::string &source_path,
|
||||
std::string &api_path) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_api_path_list() const
|
||||
-> std::vector<std::string> override;
|
||||
|
||||
[[nodiscard]] auto get_item_meta(const std::string &api_path,
|
||||
api_meta_map &meta) -> api_error;
|
||||
api_meta_map &meta) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_item_meta(const std::string &api_path,
|
||||
const std::string &key,
|
||||
std::string &value) const -> api_error;
|
||||
std::string &value) const
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto get_pinned_files() const -> std::vector<std::string>;
|
||||
[[nodiscard]] auto get_pinned_files() const
|
||||
-> std::vector<std::string> override;
|
||||
|
||||
[[nodiscard]] auto get_total_item_count() const -> std::uint64_t;
|
||||
[[nodiscard]] auto get_total_item_count() const -> std::uint64_t override;
|
||||
|
||||
void remove_api_path(const std::string &api_path);
|
||||
[[nodiscard]] auto get_total_size() const -> std::uint64_t override;
|
||||
|
||||
void remove_api_path(const std::string &api_path) override;
|
||||
|
||||
[[nodiscard]] auto remove_item_meta(const std::string &api_path,
|
||||
const std::string &key) -> api_error;
|
||||
const std::string &key)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto rename_item_meta(const std::string &from_api_path,
|
||||
const std::string &to_api_path)
|
||||
-> api_error;
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto set_item_meta(const std::string &api_path,
|
||||
const std::string &key,
|
||||
const std::string &value) -> api_error;
|
||||
const std::string &value)
|
||||
-> api_error override;
|
||||
|
||||
[[nodiscard]] auto set_item_meta(const std::string &api_path,
|
||||
const api_meta_map &meta) -> api_error;
|
||||
const api_meta_map &meta)
|
||||
-> api_error override;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_PROVIDERS_META_DB_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DB_IMPL_SQLITE_META_DB_HPP_
|
34
repertory/librepertory/include/db/meta_db.hpp
Normal file
34
repertory/librepertory/include/db/meta_db.hpp
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
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_DB_META_DB_HPP_
|
||||
#define REPERTORY_INCLUDE_DB_META_DB_HPP_
|
||||
|
||||
#include "db/i_meta_db.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
|
||||
[[nodiscard]] auto create_meta_db(const app_config &cfg)
|
||||
-> std::unique_ptr<i_meta_db>;
|
||||
} // namespace repertory
|
||||
|
||||
#endif // REPERTORY_INCLUDE_DB_META_DB_HPP_
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,28 +19,25 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
||||
#define INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
||||
|
||||
#include "utils/single_thread_service_base.hpp"
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
||||
|
||||
namespace repertory {
|
||||
class directory_iterator;
|
||||
|
||||
class directory_cache final : public single_thread_service_base {
|
||||
class directory_cache final {
|
||||
public:
|
||||
using execute_callback = std::function<void(directory_iterator &)>;
|
||||
|
||||
private:
|
||||
struct open_directory {
|
||||
directory_iterator *iterator{nullptr};
|
||||
std::chrono::system_clock::time_point last_update{
|
||||
std::chrono::system_clock::now()};
|
||||
struct open_directory final {
|
||||
std::shared_ptr<directory_iterator> iterator;
|
||||
std::vector<std::uint64_t> handles;
|
||||
};
|
||||
|
||||
public:
|
||||
directory_cache() : single_thread_service_base("directory_cache") {}
|
||||
~directory_cache() override = default;
|
||||
directory_cache() = default;
|
||||
~directory_cache() = default;
|
||||
|
||||
directory_cache(const directory_cache &) = delete;
|
||||
directory_cache(directory_cache &&) = delete;
|
||||
@ -50,22 +47,22 @@ public:
|
||||
private:
|
||||
std::unordered_map<std::string, open_directory> directory_lookup_;
|
||||
std::recursive_mutex directory_mutex_;
|
||||
std::unique_ptr<std::thread> refresh_thread_;
|
||||
|
||||
protected:
|
||||
void service_function() override;
|
||||
|
||||
public:
|
||||
void execute_action(const std::string &api_path,
|
||||
const execute_callback &execute);
|
||||
|
||||
[[nodiscard]] auto remove_directory(const std::string &api_path)
|
||||
-> directory_iterator *;
|
||||
[[nodiscard]] auto get_directory(std::uint64_t handle)
|
||||
-> std::shared_ptr<directory_iterator>;
|
||||
|
||||
void remove_directory(directory_iterator *iterator);
|
||||
auto remove_directory(const std::string &api_path)
|
||||
-> std::shared_ptr<directory_iterator>;
|
||||
|
||||
void set_directory(const std::string &api_path, directory_iterator *iterator);
|
||||
void remove_directory(std::uint64_t handle);
|
||||
|
||||
void set_directory(const std::string &api_path, std::uint64_t handle,
|
||||
std::shared_ptr<directory_iterator> iterator);
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_DIRECTORY_CACHE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_DIRECTORY_ITERATOR_HPP_
|
||||
#define INCLUDE_DRIVES_DIRECTORY_ITERATOR_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_DIRECTORY_ITERATOR_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_DIRECTORY_ITERATOR_HPP_
|
||||
|
||||
#include "types/remote.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
@ -78,4 +78,4 @@ public:
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_DRIVES_DIRECTORY_ITERATOR_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_DIRECTORY_ITERATOR_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_EVICTION_HPP_
|
||||
#define INCLUDE_DRIVES_EVICTION_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_EVICTION_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_EVICTION_HPP_
|
||||
|
||||
#include "utils/single_thread_service_base.hpp"
|
||||
|
||||
@ -31,18 +31,19 @@ class i_provider;
|
||||
|
||||
class eviction final : public single_thread_service_base {
|
||||
public:
|
||||
eviction(i_provider &provider, const app_config &config, i_file_manager &fm)
|
||||
eviction(i_provider &provider, const app_config &config,
|
||||
i_file_manager &file_mgr)
|
||||
: single_thread_service_base("eviction"),
|
||||
provider_(provider),
|
||||
config_(config),
|
||||
fm_(fm) {}
|
||||
file_mgr_(file_mgr),
|
||||
provider_(provider) {}
|
||||
|
||||
~eviction() override = default;
|
||||
|
||||
private:
|
||||
i_provider &provider_;
|
||||
const app_config &config_;
|
||||
i_file_manager &fm_;
|
||||
i_file_manager &file_mgr_;
|
||||
i_provider &provider_;
|
||||
|
||||
private:
|
||||
[[nodiscard]] auto check_minimum_requirements(const std::string &file_path)
|
||||
@ -55,4 +56,4 @@ protected:
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_DRIVES_EVICTION_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_EVICTION_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,12 +19,12 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_FUSE_FUSE_BASE_HPP_
|
||||
#define INCLUDE_DRIVES_FUSE_FUSE_BASE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_BASE_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_BASE_HPP_
|
||||
#if !defined(_WIN32)
|
||||
|
||||
#include "events/event_system.hpp"
|
||||
#include "utils/path_utils.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
|
||||
namespace repertory {
|
||||
class app_config;
|
||||
@ -51,8 +51,8 @@ private:
|
||||
std::string mount_location_;
|
||||
|
||||
protected:
|
||||
bool atime_enabled_ = true;
|
||||
bool console_enabled_ = false;
|
||||
bool atime_enabled_{true};
|
||||
bool console_enabled_{false};
|
||||
std::optional<gid_t> forced_gid_;
|
||||
std::optional<uid_t> forced_uid_;
|
||||
std::optional<mode_t> forced_umask_;
|
||||
@ -64,26 +64,27 @@ private:
|
||||
struct fuse_operations fuse_ops_ {};
|
||||
|
||||
private:
|
||||
[[nodiscard]] auto execute_callback(
|
||||
const std::string &function_name, const char *from, const char *to,
|
||||
const std::function<api_error(const std::string &, const std::string &)>
|
||||
&cb,
|
||||
bool disable_logging = false) -> int;
|
||||
|
||||
[[nodiscard]] auto
|
||||
execute_callback(const std::string &function_name, const char *path,
|
||||
const std::function<api_error(const std::string &)> &cb,
|
||||
execute_callback(std::string_view function_name, const char *from,
|
||||
const char *to,
|
||||
const std::function<api_error(std::string, std::string)> &cb,
|
||||
bool disable_logging = false) -> int;
|
||||
|
||||
static void execute_void_callback(const std::string &function_name,
|
||||
[[nodiscard]] auto
|
||||
execute_callback(std::string_view function_name, const char *path,
|
||||
const std::function<api_error(std::string)> &cb,
|
||||
bool disable_logging = false) -> int;
|
||||
|
||||
static void execute_void_callback(std::string_view function_name,
|
||||
const std::function<void()> &cb);
|
||||
|
||||
static auto
|
||||
execute_void_pointer_callback(const std::string &function_name,
|
||||
execute_void_pointer_callback(std::string_view function_name,
|
||||
const std::function<void *()> &cb) -> void *;
|
||||
|
||||
void raise_fuse_event(std::string function_name, const std::string &api_path,
|
||||
int ret, bool disable_logging);
|
||||
void raise_fuse_event(std::string_view function_name,
|
||||
std::string_view api_path, int ret,
|
||||
bool disable_logging);
|
||||
|
||||
private:
|
||||
[[nodiscard]] static auto access_(const char *path, int mask) -> int;
|
||||
@ -603,4 +604,4 @@ public:
|
||||
} // namespace repertory
|
||||
|
||||
#endif // _WIN32
|
||||
#endif // INCLUDE_DRIVES_FUSE_FUSE_BASE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_BASE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_FUSE_FUSE_DRIVE_HPP_
|
||||
#define INCLUDE_DRIVES_FUSE_FUSE_DRIVE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_HPP_
|
||||
#if !defined(_WIN32)
|
||||
|
||||
#include "drives/fuse/fuse_drive_base.hpp"
|
||||
@ -63,11 +63,14 @@ private:
|
||||
std::shared_ptr<logging_consumer> logging_consumer_;
|
||||
std::shared_ptr<remote_fuse::remote_server> remote_server_;
|
||||
std::shared_ptr<full_server> server_;
|
||||
bool was_mounted_ = false;
|
||||
std::mutex stop_all_mtx_;
|
||||
bool was_mounted_{false};
|
||||
|
||||
private:
|
||||
void update_accessed_time(const std::string &api_path);
|
||||
|
||||
void stop_all();
|
||||
|
||||
protected:
|
||||
#if defined(__APPLE__)
|
||||
[[nodiscard]] auto chflags_impl(std::string api_path,
|
||||
@ -103,7 +106,7 @@ protected:
|
||||
struct fuse_file_info *file_info) -> api_error override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fgetattr_impl(std::string api_path, struct stat *st,
|
||||
fgetattr_impl(std::string api_path, struct stat *unix_st,
|
||||
struct fuse_file_info *file_info) -> api_error override;
|
||||
|
||||
#if defined(__APPLE__)
|
||||
@ -124,11 +127,11 @@ protected:
|
||||
|
||||
#if FUSE_USE_VERSION >= 30
|
||||
[[nodiscard]] auto
|
||||
getattr_impl(std::string api_path, struct stat *st,
|
||||
getattr_impl(std::string api_path, struct stat *unix_st,
|
||||
struct fuse_file_info *file_info) -> api_error override;
|
||||
#else
|
||||
[[nodiscard]] auto getattr_impl(std::string api_path,
|
||||
struct stat *st) -> api_error override;
|
||||
struct stat *unix_st) -> api_error override;
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__)
|
||||
@ -323,4 +326,4 @@ public:
|
||||
} // namespace repertory
|
||||
|
||||
#endif // _WIN32
|
||||
#endif // INCLUDE_DRIVES_FUSE_FUSE_DRIVE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_FUSE_FUSE_DRIVE_BASE_HPP_
|
||||
#define INCLUDE_DRIVES_FUSE_FUSE_DRIVE_BASE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_BASE_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_BASE_HPP_
|
||||
#if !defined(_WIN32)
|
||||
|
||||
#include "drives/fuse/fuse_base.hpp"
|
||||
@ -134,4 +134,4 @@ public:
|
||||
} // namespace repertory
|
||||
|
||||
#endif // _WIN32
|
||||
#endif // INCLUDE_DRIVES_FUSE_FUSE_DRIVE_BASE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_FUSE_DRIVE_BASE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_FUSE_I_FUSE_DRIVE_HPP_
|
||||
#define INCLUDE_DRIVES_FUSE_I_FUSE_DRIVE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_FUSE_I_FUSE_DRIVE_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_FUSE_I_FUSE_DRIVE_HPP_
|
||||
#if !defined(_WIN32)
|
||||
|
||||
#include "types/repertory.hpp"
|
||||
@ -81,4 +81,4 @@ public:
|
||||
} // namespace repertory
|
||||
|
||||
#endif
|
||||
#endif // INCLUDE_DRIVES_FUSE_I_FUSE_DRIVE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_I_FUSE_DRIVE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_FUSE_REMOTEFUSE_I_REMOTE_INSTANCE_HPP_
|
||||
#define INCLUDE_DRIVES_FUSE_REMOTEFUSE_I_REMOTE_INSTANCE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_I_REMOTE_INSTANCE_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_I_REMOTE_INSTANCE_HPP_
|
||||
|
||||
#include "drives/remote/i_remote_json.hpp"
|
||||
#include "types/remote.hpp"
|
||||
@ -30,26 +30,25 @@ class i_remote_instance : public virtual i_remote_json {
|
||||
INTERFACE_SETUP(i_remote_instance);
|
||||
|
||||
public:
|
||||
[[nodiscard]] virtual auto fuse_access(const char *path,
|
||||
const std::int32_t &mask)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_access(const char *path,
|
||||
const std::int32_t &mask) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_chflags(const char *path, std::uint32_t flags)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_chflags(const char *path, std::uint32_t flags) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_chmod(const char *path,
|
||||
const remote::file_mode &mode)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_chmod(const char *path,
|
||||
const remote::file_mode &mode) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_chown(const char *path,
|
||||
const remote::user_id &uid,
|
||||
const remote::group_id &gid)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_chown(const char *path, const remote::user_id &uid,
|
||||
const remote::group_id &gid) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_create(const char *path, const remote::file_mode &mode,
|
||||
const remote::open_flags &flags, remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
const remote::open_flags &flags,
|
||||
remote::file_handle &handle) -> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto fuse_destroy() -> packet::error_type = 0;
|
||||
|
||||
/*[[nodiscard]] virtual packet::error_type fuse_fallocate(const char *path,
|
||||
@ -61,24 +60,21 @@ public:
|
||||
fuse_fgetattr(const char *path, remote::stat &r_stat, bool &directory,
|
||||
const remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_fsetattr_x(const char *path,
|
||||
const remote::setattr_x &attr,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_fsetattr_x(const char *path, const remote::setattr_x &attr,
|
||||
const remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_fsync(const char *path,
|
||||
const std::int32_t &datasync,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_fsync(const char *path, const std::int32_t &datasync,
|
||||
const remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_ftruncate(const char *path,
|
||||
const remote::file_offset &size,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_ftruncate(const char *path, const remote::file_offset &size,
|
||||
const remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_getattr(const char *path,
|
||||
remote::stat &r_stat, bool &directory)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_getattr(const char *path, remote::stat &r_stat,
|
||||
bool &directory) -> packet::error_type = 0;
|
||||
|
||||
/*[[nodiscard]] virtual packet::error_type fuse_getxattr(const char *path,
|
||||
const char *name, char *value, const remote::file_size &size) = 0;
|
||||
@ -87,10 +83,9 @@ public:
|
||||
const char *name, char *value, const remote::file_size &size, std::uint32_t
|
||||
position) = 0;*/
|
||||
|
||||
[[nodiscard]] virtual auto fuse_getxtimes(const char *path,
|
||||
remote::file_time &bkuptime,
|
||||
remote::file_time &crtime)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_getxtimes(const char *path, remote::file_time &bkuptime,
|
||||
remote::file_time &crtime) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_init() -> packet::error_type = 0;
|
||||
|
||||
@ -98,65 +93,63 @@ public:
|
||||
char *buffer, const remote::file_size &size) = 0;*/
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_mkdir(const char *path, const remote::file_mode &mode)
|
||||
-> packet::error_type = 0;
|
||||
fuse_mkdir(const char *path,
|
||||
const remote::file_mode &mode) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_open(const char *path,
|
||||
const remote::open_flags &flags,
|
||||
remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_open(const char *path, const remote::open_flags &flags,
|
||||
remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_opendir(const char *path,
|
||||
remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_opendir(const char *path,
|
||||
remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual 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 = 0;
|
||||
[[nodiscard]] virtual 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 = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_readdir(const char *path, const remote::file_offset &offset,
|
||||
const remote::file_handle &handle, std::string &item_path)
|
||||
-> packet::error_type = 0;
|
||||
const remote::file_handle &handle,
|
||||
std::string &item_path) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_release(const char *path,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_release(const char *path,
|
||||
const remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_releasedir(const char *path,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_releasedir(const char *path,
|
||||
const remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
//[[nodiscard]] virtual packet::error_type fuse_removexattr(const char *path,
|
||||
// const char *name) =
|
||||
// 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_rename(const char *from, const char *to)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_rename(const char *from, const char *to) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_rmdir(const char *path)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_rmdir(const char *path) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_setattr_x(const char *path,
|
||||
remote::setattr_x &attr)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_setattr_x(const char *path,
|
||||
remote::setattr_x &attr) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_setbkuptime(const char *path,
|
||||
const remote::file_time &bkuptime)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_setbkuptime(const char *path,
|
||||
const remote::file_time &bkuptime) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_setchgtime(const char *path,
|
||||
const remote::file_time &chgtime)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_setchgtime(const char *path,
|
||||
const remote::file_time &chgtime) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_setcrtime(const char *path,
|
||||
const remote::file_time &crtime)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_setcrtime(const char *path,
|
||||
const remote::file_time &crtime) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_setvolname(const char *volname)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_setvolname(const char *volname) -> packet::error_type = 0;
|
||||
|
||||
/*[[nodiscard]] virtual packet::error_type fuse_setxattr(const char *path,
|
||||
const char *name, const char *value, const remote::file_size &size, const
|
||||
@ -165,36 +158,35 @@ public:
|
||||
const char *name, const char *value, const remote::file_size &size, const
|
||||
std::int32_t &flags, std::uint32_t position) = 0;*/
|
||||
|
||||
[[nodiscard]] virtual auto fuse_statfs(const char *path, std::uint64_t frsize,
|
||||
remote::statfs &r_stat)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_statfs(const char *path, std::uint64_t frsize,
|
||||
remote::statfs &r_stat) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_statfs_x(const char *path, std::uint64_t bsize, remote::statfs_x &r_stat)
|
||||
-> packet::error_type = 0;
|
||||
fuse_statfs_x(const char *path, std::uint64_t bsize,
|
||||
remote::statfs_x &r_stat) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_truncate(const char *path,
|
||||
const remote::file_offset &size)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_truncate(const char *path,
|
||||
const remote::file_offset &size) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_unlink(const char *path)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_unlink(const char *path) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_utimens(const char *path,
|
||||
const remote::file_time *tv,
|
||||
std::uint64_t op0, std::uint64_t op1)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_utimens(const char *path, const remote::file_time *tv, std::uint64_t op0,
|
||||
std::uint64_t op1) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_write(const char *path, const char *buffer,
|
||||
const remote::file_size &writeSize,
|
||||
const remote::file_offset &writeOffset,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto
|
||||
fuse_write(const char *path, const char *buffer,
|
||||
const remote::file_size &writeSize,
|
||||
const remote::file_offset &writeOffset,
|
||||
const remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto fuse_write_base64(
|
||||
const char *path, const char *buffer, const remote::file_size &writeSize,
|
||||
const remote::file_offset &writeOffset, const remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
const remote::file_offset &writeOffset,
|
||||
const remote::file_handle &handle) -> packet::error_type = 0;
|
||||
|
||||
virtual void set_fuse_uid_gid(const remote::user_id &uid,
|
||||
const remote::group_id &gid) = 0;
|
||||
@ -204,4 +196,4 @@ using remote_instance_factory =
|
||||
std::function<std::unique_ptr<i_remote_instance>()>;
|
||||
} // namespace repertory::remote_fuse
|
||||
|
||||
#endif // INCLUDE_DRIVES_FUSE_REMOTEFUSE_I_REMOTE_INSTANCE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_I_REMOTE_INSTANCE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_CLIENT_HPP_
|
||||
#define INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_CLIENT_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_CLIENT_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_CLIENT_HPP_
|
||||
|
||||
#include "comm/packet/packet_client.hpp"
|
||||
#include "drives/fuse/remotefuse/i_remote_instance.hpp"
|
||||
@ -51,9 +51,9 @@ public:
|
||||
[[nodiscard]] auto fuse_chmod(const char *path, const remote::file_mode &mode)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_chown(const char *path, const remote::user_id &uid,
|
||||
const remote::group_id &gid)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_chown(const char *path, const remote::user_id &uid,
|
||||
const remote::group_id &gid) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_destroy() -> packet::error_type override;
|
||||
|
||||
@ -67,23 +67,21 @@ public:
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_fsetattr_x(const char *path,
|
||||
const remote::setattr_x &attr,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_fsetattr_x(
|
||||
const char *path, const remote::setattr_x &attr,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_fsync(const char *path, const std::int32_t &datasync,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_fsync(const char *path, const std::int32_t &datasync,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_ftruncate(const char *path,
|
||||
const remote::file_offset &size,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_ftruncate(
|
||||
const char *path, const remote::file_offset &size,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_getattr(const char *path, remote::stat &st,
|
||||
bool &directory)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_getattr(const char *path, remote::stat &st,
|
||||
bool &directory) -> packet::error_type override;
|
||||
|
||||
/*[[nodiscard]] packet::error_type fuse_getxattr(const char *path, const char
|
||||
*name, char *value, const remote::file_size &size) override ;
|
||||
@ -92,10 +90,9 @@ public:
|
||||
*name, char *value, const remote::file_size &size, std::uint32_t position)
|
||||
override ;*/
|
||||
|
||||
[[nodiscard]] auto fuse_getxtimes(const char *path,
|
||||
remote::file_time &bkuptime,
|
||||
remote::file_time &crtime)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_getxtimes(const char *path, remote::file_time &bkuptime,
|
||||
remote::file_time &crtime) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_init() -> packet::error_type override;
|
||||
|
||||
@ -110,27 +107,25 @@ public:
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_create(const char *path, const remote::file_mode &mode,
|
||||
const remote::open_flags &flags, remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
const remote::open_flags &flags,
|
||||
remote::file_handle &handle) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_open(const char *path,
|
||||
const remote::open_flags &flags,
|
||||
remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_open(const char *path, const remote::open_flags &flags,
|
||||
remote::file_handle &handle) -> packet::error_type override;
|
||||
|
||||
[[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;
|
||||
[[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;
|
||||
|
||||
[[nodiscard]] auto fuse_rename(const char *from, const char *to)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_rename(const char *from,
|
||||
const char *to) -> packet::error_type override;
|
||||
|
||||
[[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;
|
||||
const remote::file_handle &handle,
|
||||
std::string &item_path) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_release(const char *path,
|
||||
const remote::file_handle &handle)
|
||||
@ -144,8 +139,8 @@ public:
|
||||
* char *name) override
|
||||
* ;*/
|
||||
|
||||
[[nodiscard]] auto fuse_rmdir(const char *path)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_rmdir(const char *path) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_setattr_x(const char *path, remote::setattr_x &attr)
|
||||
-> packet::error_type override;
|
||||
@ -162,8 +157,8 @@ public:
|
||||
const remote::file_time &crtime)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_setvolname(const char *volname)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_setvolname(const char *volname) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] /*packet::error_type fuse_setxattr(const char *path, const char
|
||||
*name, const char *value, const remote::file_size &size, const std::int32_t
|
||||
@ -174,48 +169,45 @@ public:
|
||||
std::int32_t &flags, std::uint32_t position) override ;*/
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_statfs(const char *path, std::uint64_t frsize, remote::statfs &st)
|
||||
-> packet::error_type override;
|
||||
fuse_statfs(const char *path, std::uint64_t frsize,
|
||||
remote::statfs &st) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_statfs_x(const char *path, std::uint64_t bsize,
|
||||
remote::statfs_x &st)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_statfs_x(const char *path, std::uint64_t bsize,
|
||||
remote::statfs_x &st) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_truncate(const char *path,
|
||||
const remote::file_offset &size)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_truncate(const char *path,
|
||||
const remote::file_offset &size) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_unlink(const char *path)
|
||||
-> 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;
|
||||
[[nodiscard]] auto
|
||||
fuse_utimens(const char *path, const remote::file_time *tv, std::uint64_t op0,
|
||||
std::uint64_t op1) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_write(const char *path, const char *buffer,
|
||||
const remote::file_size &write_size,
|
||||
const remote::file_offset &write_offset,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto
|
||||
fuse_write(const char *path, const char *buffer,
|
||||
const remote::file_size &write_size,
|
||||
const remote::file_offset &write_offset,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_write_base64(const char *path, const char *buffer,
|
||||
const remote::file_size &write_size,
|
||||
const remote::file_offset &write_offset,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_write_base64(
|
||||
const char *path, const char *buffer, const remote::file_size &write_size,
|
||||
const remote::file_offset &write_offset,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto json_create_directory_snapshot(const std::string &path,
|
||||
json &json_data)
|
||||
-> packet::error_type override;
|
||||
[[nodiscard]] auto json_create_directory_snapshot(
|
||||
const std::string &path, json &json_data) -> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto json_read_directory_snapshot(
|
||||
const std::string &path, const remote::file_handle &handle,
|
||||
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;
|
||||
[[nodiscard]] auto json_release_directory_snapshot(
|
||||
const std::string &path,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
|
||||
void set_fuse_uid_gid(const remote::user_id &uid,
|
||||
const remote::group_id &gid) override;
|
||||
@ -223,4 +215,4 @@ public:
|
||||
} // namespace remote_fuse
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_CLIENT_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_CLIENT_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_FUSE_DRIVE_HPP_
|
||||
#define INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_FUSE_DRIVE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_FUSE_DRIVE_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_FUSE_DRIVE_HPP_
|
||||
#if !defined(_WIN32)
|
||||
|
||||
#include "drives/fuse/fuse_base.hpp"
|
||||
@ -53,8 +53,8 @@ private:
|
||||
bool was_mounted_ = false;
|
||||
|
||||
private:
|
||||
void populate_stat(const remote::stat &r_stat, bool directory,
|
||||
struct stat &unix_st);
|
||||
static void populate_stat(const remote::stat &r_stat, bool directory,
|
||||
struct stat &unix_st);
|
||||
|
||||
protected:
|
||||
[[nodiscard]] auto access_impl(std::string api_path,
|
||||
@ -238,4 +238,4 @@ protected:
|
||||
} // namespace repertory
|
||||
|
||||
#endif // _WIN32
|
||||
#endif // INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_FUSE_DRIVE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_FUSE_DRIVE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_SERVER_HPP_
|
||||
#define INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_SERVER_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_SERVER_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_SERVER_HPP_
|
||||
#if !defined(_WIN32)
|
||||
|
||||
#include "drives/directory_cache.hpp"
|
||||
@ -38,6 +38,7 @@ public:
|
||||
|
||||
private:
|
||||
directory_cache directory_cache_;
|
||||
std::atomic<std::uint64_t> next_handle_{0U};
|
||||
|
||||
private:
|
||||
[[nodiscard]] auto construct_path(std::string path) -> std::string;
|
||||
@ -46,9 +47,11 @@ private:
|
||||
|
||||
[[nodiscard]] static auto empty_as_zero(const json &data) -> std::string;
|
||||
|
||||
[[nodiscard]] auto
|
||||
populate_file_info(const std::string &api_path,
|
||||
remote::file_info &file_info) -> packet::error_type;
|
||||
[[nodiscard]] auto get_next_handle() -> std::uint64_t;
|
||||
|
||||
[[nodiscard]] auto populate_file_info(const std::string &api_path,
|
||||
remote::file_info &file_info)
|
||||
-> packet::error_type;
|
||||
|
||||
void populate_file_info(const std::string &api_path, const UINT64 &file_size,
|
||||
const UINT32 &attributes,
|
||||
@ -58,9 +61,6 @@ private:
|
||||
|
||||
[[nodiscard]] auto update_to_windows_format(json &item) -> json &;
|
||||
|
||||
protected:
|
||||
void delete_open_directory(void *dir) override;
|
||||
|
||||
public:
|
||||
// FUSE Layer
|
||||
[[nodiscard]] auto fuse_access(const char *path, const std::int32_t &mask)
|
||||
@ -72,14 +72,14 @@ public:
|
||||
[[nodiscard]] auto fuse_chmod(const char *path, const remote::file_mode &mode)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_chown(const char *path, const remote::user_id &uid,
|
||||
const remote::group_id &gid) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_chown(const char *path, const remote::user_id &uid,
|
||||
const remote::group_id &gid)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_create(const char *path, const remote::file_mode &mode,
|
||||
const remote::open_flags &flags,
|
||||
remote::file_handle &handle) -> packet::error_type override;
|
||||
const remote::open_flags &flags, remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_destroy() -> packet::error_type override;
|
||||
|
||||
@ -88,25 +88,28 @@ public:
|
||||
remote::file_offset &length, const remote::file_handle &handle) override
|
||||
;*/
|
||||
|
||||
[[nodiscard]] auto fuse_fgetattr(
|
||||
const char *path, remote::stat &r_stat, bool &directory,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_fgetattr(const char *path, remote::stat &r_stat,
|
||||
bool &directory,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_fsetattr_x(
|
||||
const char *path, const remote::setattr_x &attr,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_fsetattr_x(const char *path,
|
||||
const remote::setattr_x &attr,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_fsync(const char *path, const std::int32_t &datasync,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_fsync(const char *path, const std::int32_t &datasync,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_ftruncate(
|
||||
const char *path, const remote::file_offset &size,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_ftruncate(const char *path,
|
||||
const remote::file_offset &size,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_getattr(const char *path, remote::stat &r_stat,
|
||||
bool &directory) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_getattr(const char *path, remote::stat &r_stat,
|
||||
bool &directory)
|
||||
-> packet::error_type override;
|
||||
|
||||
/*[[nodiscard]] packet::error_type fuse_getxattr(const char *path, const char
|
||||
*name, char *value, const remote::file_size &size) override ;
|
||||
@ -115,9 +118,10 @@ public:
|
||||
*name, char *value, const remote::file_size &size, std::uint32_t position)
|
||||
override ;*/
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_getxtimes(const char *path, remote::file_time &bkuptime,
|
||||
remote::file_time &crtime) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_getxtimes(const char *path,
|
||||
remote::file_time &bkuptime,
|
||||
remote::file_time &crtime)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_init() -> packet::error_type override;
|
||||
|
||||
@ -125,28 +129,30 @@ public:
|
||||
*buffer, const remote::file_size &size) override ;*/
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_mkdir(const char *path,
|
||||
const remote::file_mode &mode) -> packet::error_type override;
|
||||
fuse_mkdir(const char *path, const remote::file_mode &mode)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_open(const char *path, const remote::open_flags &flags,
|
||||
remote::file_handle &handle) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_open(const char *path,
|
||||
const remote::open_flags &flags,
|
||||
remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_opendir(const char *path, remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[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;
|
||||
[[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;
|
||||
|
||||
[[nodiscard]] auto fuse_rename(const char *from,
|
||||
const char *to) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_rename(const char *from, const char *to)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[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;
|
||||
const remote::file_handle &handle, std::string &item_path)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_release(const char *path,
|
||||
const remote::file_handle &handle)
|
||||
@ -160,8 +166,8 @@ public:
|
||||
* char *name) override
|
||||
* ;*/
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_rmdir(const char *path) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_rmdir(const char *path)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_setattr_x(const char *path, remote::setattr_x &attr)
|
||||
-> packet::error_type override;
|
||||
@ -178,8 +184,8 @@ public:
|
||||
const remote::file_time &crtime)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_setvolname(const char *volname) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_setvolname(const char *volname)
|
||||
-> packet::error_type override;
|
||||
|
||||
/*[[nodiscard]] packet::error_type fuse_setxattr(const char *path, const char
|
||||
*name, const char *value, const remote::file_size &size, const std::int32_t
|
||||
@ -189,67 +195,70 @@ public:
|
||||
char *name, const char *value, const remote::file_size &size, const
|
||||
std::int32_t &flags, std::uint32_t position) override ;*/
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_statfs(const char *path, std::uint64_t frsize,
|
||||
remote::statfs &r_stat) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_statfs(const char *path, std::uint64_t frsize,
|
||||
remote::statfs &r_stat)
|
||||
-> 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;
|
||||
[[nodiscard]] auto fuse_statfs_x(const char *path, std::uint64_t bsize,
|
||||
remote::statfs_x &r_stat)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_truncate(const char *path,
|
||||
const remote::file_offset &size) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_truncate(const char *path,
|
||||
const remote::file_offset &size)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_unlink(const char *path) -> 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;
|
||||
[[nodiscard]] auto fuse_utimens(const char *path, const remote::file_time *tv,
|
||||
std::uint64_t op0, std::uint64_t op1)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
fuse_write(const char *path, const char *buffer,
|
||||
const remote::file_size &write_size,
|
||||
const remote::file_offset &write_offset,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_write(const char *path, const char *buffer,
|
||||
const remote::file_size &write_size,
|
||||
const remote::file_offset &write_offset,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto fuse_write_base64(
|
||||
const char *path, const char *buffer, const remote::file_size &write_size,
|
||||
const remote::file_offset &write_offset,
|
||||
const remote::file_handle &handle) -> packet::error_type override;
|
||||
[[nodiscard]] auto fuse_write_base64(const char *path, const char *buffer,
|
||||
const remote::file_size &write_size,
|
||||
const remote::file_offset &write_offset,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
void set_fuse_uid_gid(const remote::user_id &,
|
||||
const remote::group_id &) override {}
|
||||
|
||||
// JSON Layer
|
||||
[[nodiscard]] auto
|
||||
winfsp_get_dir_buffer(PVOID /*file_desc*/,
|
||||
PVOID *& /*ptr*/) -> packet::error_type override {
|
||||
return STATUS_INVALID_HANDLE;
|
||||
[[nodiscard]] auto winfsp_get_dir_buffer(PVOID /*file_desc*/,
|
||||
PVOID *& /*ptr*/)
|
||||
-> packet::error_type override {
|
||||
return static_cast<packet::error_type>(STATUS_INVALID_HANDLE);
|
||||
}
|
||||
|
||||
[[nodiscard]] auto json_create_directory_snapshot(
|
||||
const std::string &path, json &json_data) -> packet::error_type override;
|
||||
[[nodiscard]] auto json_create_directory_snapshot(const std::string &path,
|
||||
json &json_data)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto json_read_directory_snapshot(
|
||||
const std::string &path, const remote::file_handle &handle,
|
||||
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;
|
||||
[[nodiscard]] auto
|
||||
json_release_directory_snapshot(const std::string &path,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type override;
|
||||
|
||||
// WinFSP Layer
|
||||
[[nodiscard]] auto winfsp_can_delete(PVOID file_desc, PWSTR file_name)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
winfsp_cleanup(PVOID file_desc, PWSTR file_name, UINT32 flags,
|
||||
BOOLEAN &was_closed) -> packet::error_type override;
|
||||
[[nodiscard]] auto winfsp_cleanup(PVOID file_desc, PWSTR file_name,
|
||||
UINT32 flags, BOOLEAN &was_deleted)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
winfsp_close(PVOID file_desc) -> packet::error_type override;
|
||||
[[nodiscard]] auto winfsp_close(PVOID file_desc)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
winfsp_create(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
|
||||
@ -264,60 +273,66 @@ public:
|
||||
remote::file_info *file_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_get_security_by_name(
|
||||
PWSTR file_name, PUINT32 attributes,
|
||||
std::uint64_t * /*security_descriptor_size*/,
|
||||
std::wstring & /*str_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;
|
||||
|
||||
[[nodiscard]] auto
|
||||
winfsp_mounted(const std::wstring &location) -> packet::error_type override;
|
||||
winfsp_get_security_by_name(PWSTR file_name, PUINT32 attributes,
|
||||
std::uint64_t * /*security_descriptor_size*/,
|
||||
std::wstring & /*str_descriptor*/)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
winfsp_open(PWSTR file_name, UINT32 create_options, UINT32 granted_access,
|
||||
PVOID *file_desc, remote::file_info *file_info,
|
||||
std::string &normalized_name) -> packet::error_type override;
|
||||
[[nodiscard]] auto winfsp_get_volume_info(UINT64 &total_size,
|
||||
UINT64 &free_size,
|
||||
std::string &volume_label)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
winfsp_overwrite(PVOID file_desc, UINT32 attributes,
|
||||
BOOLEAN replace_attributes, UINT64 /*allocation_size*/,
|
||||
remote::file_info *file_info) -> packet::error_type override;
|
||||
[[nodiscard]] auto winfsp_mounted(const std::wstring &location)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset, UINT32 length,
|
||||
PUINT32 bytes_transferred) -> packet::error_type override;
|
||||
[[nodiscard]] auto winfsp_open(PWSTR file_name, UINT32 create_options,
|
||||
UINT32 granted_access, PVOID *file_desc,
|
||||
remote::file_info *file_info,
|
||||
std::string &normalized_name)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
winfsp_read_directory(PVOID file_desc, PWSTR /*pattern*/, PWSTR marker,
|
||||
json &itemList) -> packet::error_type override;
|
||||
[[nodiscard]] auto winfsp_overwrite(PVOID file_desc, UINT32 attributes,
|
||||
BOOLEAN replace_attributes,
|
||||
UINT64 /*allocation_size*/,
|
||||
remote::file_info *file_info)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto
|
||||
winfsp_rename(PVOID /*file_desc*/, PWSTR file_name, PWSTR new_file_name,
|
||||
BOOLEAN replace_if_exists) -> packet::error_type override;
|
||||
[[nodiscard]] auto winfsp_read(PVOID file_desc, PVOID buffer, UINT64 offset,
|
||||
UINT32 length, PUINT32 bytes_transferred)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_read_directory(PVOID file_desc, PWSTR /*pattern*/,
|
||||
PWSTR marker, json &itemList)
|
||||
-> packet::error_type override;
|
||||
|
||||
[[nodiscard]] auto winfsp_rename(PVOID /*file_desc*/, PWSTR file_name,
|
||||
PWSTR new_file_name,
|
||||
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_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_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;
|
||||
PUINT32 bytes_transferred, remote::file_info *file_info)
|
||||
-> packet::error_type override;
|
||||
};
|
||||
} // namespace remote_fuse
|
||||
} // namespace repertory
|
||||
|
||||
#endif
|
||||
#endif // INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_SERVER_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_FUSE_REMOTEFUSE_REMOTE_SERVER_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_REMOTE_I_REMOTE_JSON_HPP_
|
||||
#define INCLUDE_DRIVES_REMOTE_I_REMOTE_JSON_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_REMOTE_I_REMOTE_JSON_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_REMOTE_I_REMOTE_JSON_HPP_
|
||||
|
||||
#include "comm/packet/packet.hpp"
|
||||
|
||||
@ -30,18 +30,17 @@ class i_remote_json {
|
||||
|
||||
public:
|
||||
[[nodiscard]] virtual auto
|
||||
json_create_directory_snapshot(const std::string &path, json &json_data)
|
||||
-> packet::error_type = 0;
|
||||
json_create_directory_snapshot(const std::string &path,
|
||||
json &json_data) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto json_read_directory_snapshot(
|
||||
const std::string &path, const remote::file_handle &handle,
|
||||
std::uint32_t page, json &json_data) -> packet::error_type = 0;
|
||||
|
||||
[[nodiscard]] virtual auto
|
||||
json_release_directory_snapshot(const std::string &path,
|
||||
const remote::file_handle &handle)
|
||||
-> packet::error_type = 0;
|
||||
[[nodiscard]] virtual auto json_release_directory_snapshot(
|
||||
const std::string &path,
|
||||
const remote::file_handle &handle) -> packet::error_type = 0;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_DRIVES_REMOTE_I_REMOTE_JSON_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_REMOTE_I_REMOTE_JSON_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,8 +19,8 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_REMOTE_REMOTE_OPEN_FILE_TABLE_HPP_
|
||||
#define INCLUDE_DRIVES_REMOTE_REMOTE_OPEN_FILE_TABLE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_REMOTE_REMOTE_OPEN_FILE_TABLE_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_REMOTE_REMOTE_OPEN_FILE_TABLE_HPP_
|
||||
|
||||
#include "types/remote.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
@ -33,65 +33,72 @@ protected:
|
||||
virtual ~remote_open_file_table() = default;
|
||||
|
||||
protected:
|
||||
struct compat_open_info {
|
||||
std::size_t count = 0u;
|
||||
std::string client_id = "";
|
||||
struct compat_open_info final {
|
||||
std::string client_id;
|
||||
std::vector<remote::file_handle> handles;
|
||||
std::string path;
|
||||
};
|
||||
|
||||
struct open_info {
|
||||
std::size_t count = 0u;
|
||||
std::string client_id = "";
|
||||
PVOID directory_buffer = nullptr;
|
||||
struct open_info final {
|
||||
std::string client_id;
|
||||
PVOID directory_buffer{nullptr};
|
||||
std::vector<native_handle> handles;
|
||||
std::string path;
|
||||
};
|
||||
|
||||
private:
|
||||
std::unordered_map<remote::file_handle, compat_open_info> compat_lookup_;
|
||||
std::recursive_mutex compat_mutex_;
|
||||
std::unordered_map<std::string, std::vector<void *>> directory_lookup_;
|
||||
std::recursive_mutex directory_mutex_;
|
||||
std::unordered_map<native_handle, open_info> file_lookup_;
|
||||
std::unordered_map<std::string, std::unique_ptr<compat_open_info>>
|
||||
compat_file_lookup_;
|
||||
std::unordered_map<remote::file_handle, std::string> compat_handle_lookup_;
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, std::vector<std::uint64_t>> directory_lookup_;
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, std::unique_ptr<open_info>> file_lookup_;
|
||||
std::unordered_map<native_handle, std::string> handle_lookup_;
|
||||
|
||||
private:
|
||||
mutable std::recursive_mutex file_mutex_;
|
||||
|
||||
protected:
|
||||
void add_directory(const std::string &client_id, void *dir);
|
||||
void add_directory(const std::string &client_id, std::uint64_t handle);
|
||||
|
||||
void close_all(const std::string &client_id);
|
||||
|
||||
virtual void delete_open_directory(void *dir) = 0;
|
||||
|
||||
#if defined(_WIN32)
|
||||
[[nodiscard]] auto get_directory_buffer(const native_handle &handle,
|
||||
PVOID *&buffer) -> bool;
|
||||
#endif // _WIN32
|
||||
|
||||
[[nodiscard]] auto
|
||||
get_open_file_path(const native_handle &handle) -> std::string;
|
||||
[[nodiscard]] auto get_open_file_path(const native_handle &handle)
|
||||
-> std::string;
|
||||
|
||||
[[nodiscard]] auto get_open_info(const native_handle &handle,
|
||||
open_info &oi) -> bool;
|
||||
[[nodiscard]] auto get_open_info(const native_handle &handle, open_info &oi)
|
||||
-> bool;
|
||||
|
||||
[[nodiscard]] auto has_open_directory(const std::string &client_id,
|
||||
void *dir) -> bool;
|
||||
std::uint64_t handle) -> bool;
|
||||
|
||||
[[nodiscard]] auto has_compat_open_info(const remote::file_handle &handle,
|
||||
int error_return) -> int;
|
||||
|
||||
template <typename error_type>
|
||||
[[nodiscard]] auto
|
||||
has_open_info(const native_handle &handle,
|
||||
const error_type &error_return) -> error_type {
|
||||
[[nodiscard]] auto has_open_info(const native_handle &handle,
|
||||
const error_type &error_return)
|
||||
-> error_type {
|
||||
recur_mutex_lock file_lock(file_mutex_);
|
||||
return ((file_lookup_.find(handle) == file_lookup_.end()) ? error_return
|
||||
: 0);
|
||||
return handle_lookup_.contains(handle) ? 0 : error_return;
|
||||
}
|
||||
|
||||
void remove_all(const std::string &file_path);
|
||||
|
||||
void remove_and_close_all(const native_handle &handle);
|
||||
|
||||
void remove_compat_open_info(const remote::file_handle &handle);
|
||||
|
||||
auto remove_directory(const std::string &client_id, void *dir) -> bool;
|
||||
auto remove_directory(const std::string &client_id, std::uint64_t handle)
|
||||
-> bool;
|
||||
|
||||
void remove_open_info(const native_handle &handle);
|
||||
|
||||
@ -103,12 +110,12 @@ protected:
|
||||
void set_compat_open_info(const remote::file_handle &handle,
|
||||
const std::string &file_path);
|
||||
|
||||
void set_open_info(const native_handle &handle, open_info oi);
|
||||
void set_open_info(const native_handle &handle, open_info op_info);
|
||||
|
||||
public:
|
||||
[[nodiscard]] auto
|
||||
get_open_file_count(const std::string &file_path) const -> std::size_t;
|
||||
[[nodiscard]] auto get_open_file_count(const std::string &file_path) const
|
||||
-> std::size_t;
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_DRIVES_REMOTE_REMOTE_OPEN_FILE_TABLE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_REMOTE_REMOTE_OPEN_FILE_TABLE_HPP_
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright <2018-2024> <scott.e.graves@protonmail.com>
|
||||
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
|
||||
@ -19,22 +19,25 @@
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
#ifndef INCLUDE_DRIVES_REMOTE_REMOTE_SERVER_BASE_HPP_
|
||||
#define INCLUDE_DRIVES_REMOTE_REMOTE_SERVER_BASE_HPP_
|
||||
#ifndef REPERTORY_INCLUDE_DRIVES_REMOTE_REMOTE_SERVER_BASE_HPP_
|
||||
#define REPERTORY_INCLUDE_DRIVES_REMOTE_REMOTE_SERVER_BASE_HPP_
|
||||
|
||||
#include "app_config.hpp"
|
||||
#include "comm/packet/client_pool.hpp"
|
||||
#include "comm/packet/packet.hpp"
|
||||
#include "comm/packet/packet_server.hpp"
|
||||
#include "drives/directory_iterator.hpp"
|
||||
#include "drives/fuse/remotefuse/i_remote_instance.hpp"
|
||||
#include "drives/remote/i_remote_json.hpp"
|
||||
#include "drives/remote/remote_open_file_table.hpp"
|
||||
#include "drives/winfsp/remotewinfsp/i_remote_instance.hpp"
|
||||
#include "events/event_system.hpp"
|
||||
#include "events/types/service_start_begin.hpp"
|
||||
#include "events/types/service_start_end.hpp"
|
||||
#include "events/types/service_stop_begin.hpp"
|
||||
#include "events/types/service_stop_end.hpp"
|
||||
#include "types/remote.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
#include "utils/Base64.hpp"
|
||||
#include "utils/path_utils.hpp"
|
||||
#include "utils/base64.hpp"
|
||||
#include "utils/path.hpp"
|
||||
|
||||
#define REPERTORY_DIRECTORY_PAGE_SIZE std::size_t(100U)
|
||||
|
||||
@ -54,14 +57,17 @@ public:
|
||||
: config_(config),
|
||||
drive_(drv),
|
||||
mount_location_(std::move(mount_location)),
|
||||
client_pool_(config.get_remote_client_pool_size()) {
|
||||
event_system::instance().raise<service_started>("remote_server_base");
|
||||
client_pool_(config.get_remote_mount().client_pool_size) {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
event_system::instance().raise<service_start_begin>(function_name,
|
||||
"remote_server_base");
|
||||
handler_lookup_.insert(
|
||||
{"::winfsp_can_delete",
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -76,7 +82,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -87,10 +93,10 @@ public:
|
||||
UINT32 flags{};
|
||||
DECODE_OR_RETURN(request, flags);
|
||||
|
||||
BOOLEAN was_closed{};
|
||||
BOOLEAN was_deleted{};
|
||||
ret = this->winfsp_cleanup(file_desc, file_name.data(), flags,
|
||||
was_closed);
|
||||
response.encode(was_closed);
|
||||
was_deleted);
|
||||
response.encode(was_deleted);
|
||||
|
||||
return ret;
|
||||
}});
|
||||
@ -99,7 +105,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -111,7 +117,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &client_id, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
std::wstring file_name;
|
||||
DECODE_OR_RETURN(request, file_name);
|
||||
@ -139,12 +145,12 @@ public:
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
#if defined(_WIN32)
|
||||
this->set_client_id(file_desc, client_id);
|
||||
#else
|
||||
#else // !defined(_WIN32)
|
||||
this->set_client_id(
|
||||
static_cast<native_handle>(
|
||||
reinterpret_cast<std::uintptr_t>(file_desc)),
|
||||
client_id);
|
||||
#endif
|
||||
#endif // defined(_WIN32)
|
||||
response.encode(file_desc);
|
||||
response.encode(file_info);
|
||||
response.encode(normalized_name);
|
||||
@ -158,7 +164,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -176,7 +182,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -193,7 +199,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
std::wstring file_name;
|
||||
DECODE_OR_RETURN(request, file_name);
|
||||
@ -220,30 +226,30 @@ public:
|
||||
|
||||
return ret;
|
||||
}});
|
||||
handler_lookup_.insert({"::winfsp_get_volume_info",
|
||||
[this](std::uint32_t, const std::string &,
|
||||
std::uint64_t, const std::string &, packet *,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
handler_lookup_.insert(
|
||||
{"::winfsp_get_volume_info",
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
UINT64 total_size{};
|
||||
UINT64 free_size{};
|
||||
std::string volume_label;
|
||||
if ((ret = this->winfsp_get_volume_info(
|
||||
total_size, free_size, volume_label)) ==
|
||||
STATUS_SUCCESS) {
|
||||
response.encode(total_size);
|
||||
response.encode(free_size);
|
||||
response.encode(volume_label);
|
||||
}
|
||||
return ret;
|
||||
}});
|
||||
UINT64 total_size{};
|
||||
UINT64 free_size{};
|
||||
std::string volume_label;
|
||||
if ((ret = this->winfsp_get_volume_info(
|
||||
total_size, free_size, volume_label)) == STATUS_SUCCESS) {
|
||||
response.encode(total_size);
|
||||
response.encode(free_size);
|
||||
response.encode(volume_label);
|
||||
}
|
||||
return ret;
|
||||
}});
|
||||
handler_lookup_.insert(
|
||||
{"::winfsp_mounted",
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
std::string version;
|
||||
DECODE_OR_RETURN(request, version);
|
||||
@ -259,7 +265,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &client_id, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
std::wstring file_name;
|
||||
DECODE_OR_RETURN(request, file_name);
|
||||
@ -279,12 +285,12 @@ public:
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
#if defined(_WIN32)
|
||||
this->set_client_id(file_desc, client_id);
|
||||
#else
|
||||
#else // !defined(_WIN32)
|
||||
this->set_client_id(
|
||||
static_cast<native_handle>(
|
||||
reinterpret_cast<std::uintptr_t>(file_desc)),
|
||||
client_id);
|
||||
#endif
|
||||
#endif // defined(_WIN32)
|
||||
response.encode(file_desc);
|
||||
response.encode(file_info);
|
||||
response.encode(normalized_name);
|
||||
@ -297,7 +303,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -325,7 +331,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -337,7 +343,7 @@ public:
|
||||
DECODE_OR_RETURN(request, length);
|
||||
|
||||
data_buffer buffer(length);
|
||||
UINT32 bytes_transferred = 0;
|
||||
UINT32 bytes_transferred{0};
|
||||
ret = this->winfsp_read(file_desc, buffer.data(), offset, length,
|
||||
&bytes_transferred);
|
||||
if (ret == STATUS_SUCCESS) {
|
||||
@ -353,7 +359,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -380,7 +386,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -403,7 +409,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -437,7 +443,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -461,7 +467,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
std::wstring location;
|
||||
DECODE_OR_RETURN(request, location);
|
||||
@ -473,7 +479,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = STATUS_SUCCESS;
|
||||
auto ret = static_cast<packet::error_type>(STATUS_SUCCESS);
|
||||
|
||||
HANDLE file_desc{};
|
||||
DECODE_OR_RETURN(request, file_desc);
|
||||
@ -492,7 +498,7 @@ public:
|
||||
|
||||
auto *buffer = request->current_pointer();
|
||||
|
||||
UINT32 bytes_transferred = 0;
|
||||
UINT32 bytes_transferred{0};
|
||||
remote::file_info file_info{};
|
||||
ret = this->winfsp_write(file_desc, buffer, offset, length,
|
||||
write_to_end, constrained_io,
|
||||
@ -508,7 +514,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -523,7 +529,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -538,7 +544,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -546,14 +552,14 @@ public:
|
||||
remote::file_mode mode;
|
||||
DECODE_OR_RETURN(request, mode);
|
||||
|
||||
return this->fuse_chmod(&path[0], mode);
|
||||
return this->fuse_chmod(path.c_str(), mode);
|
||||
}});
|
||||
handler_lookup_.insert(
|
||||
{"::fuse_chown",
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -564,14 +570,14 @@ public:
|
||||
remote::group_id gid{};
|
||||
DECODE_OR_RETURN(request, gid);
|
||||
|
||||
return this->fuse_chown(&path[0], uid, gid);
|
||||
return this->fuse_chown(path.c_str(), uid, gid);
|
||||
}});
|
||||
handler_lookup_.insert(
|
||||
{"::fuse_create",
|
||||
[this](std::uint32_t, const std::string &client_id, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -587,9 +593,9 @@ public:
|
||||
0) {
|
||||
#if defined(_WIN32)
|
||||
this->set_compat_client_id(handle, client_id);
|
||||
#else
|
||||
#else // !defined(_WIN32)
|
||||
this->set_client_id(static_cast<native_handle>(handle), client_id);
|
||||
#endif
|
||||
#endif // defined(_WIN32)
|
||||
response.encode(handle);
|
||||
}
|
||||
return ret;
|
||||
@ -603,7 +609,7 @@ public:
|
||||
/*handlerLookup_.insert({"::fuse_fallocate",
|
||||
[this](std::uint32_t serviceFlags, const std::string
|
||||
&client_id, std::uint64_t threadId, const std::string &method, packet
|
||||
*request, packet &response) -> packet::error_type { auto ret = 0;
|
||||
*request, packet &response) -> packet::error_type { auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -620,15 +626,15 @@ public:
|
||||
remote::file_handle handle;
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
return this->fuse_fallocate(&path[0], mode, offset,
|
||||
length, handle);
|
||||
return this->fuse_fallocate(path.c_str(), mode,
|
||||
offset, length, handle);
|
||||
}});*/
|
||||
handler_lookup_.insert(
|
||||
{"::fuse_fgetattr",
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -659,7 +665,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -677,7 +683,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -688,14 +694,14 @@ public:
|
||||
remote::file_handle handle;
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
return this->fuse_fsync(&path[0], dataSync, handle);
|
||||
return this->fuse_fsync(path.c_str(), dataSync, handle);
|
||||
}});
|
||||
handler_lookup_.insert(
|
||||
{"::fuse_ftruncate",
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -706,14 +712,14 @@ public:
|
||||
remote::file_handle handle;
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
return this->fuse_ftruncate(&path[0], size, handle);
|
||||
return this->fuse_ftruncate(path.c_str(), size, handle);
|
||||
}});
|
||||
handler_lookup_.insert(
|
||||
{"::fuse_getattr",
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -726,7 +732,7 @@ public:
|
||||
|
||||
remote::stat st{};
|
||||
bool directory = false;
|
||||
ret = this->fuse_getattr(&path[0], st, directory);
|
||||
ret = this->fuse_getattr(path.c_str(), st, directory);
|
||||
if (ret == 0) {
|
||||
st.st_uid = uid;
|
||||
st.st_gid = gid;
|
||||
@ -738,7 +744,7 @@ public:
|
||||
/*handlerLookup_.insert({"::fuse_getxattr",
|
||||
[this](std::uint32_t serviceFlags, const std::string
|
||||
&client_id, std::uint64_t threadId, const std::string &method, packet
|
||||
*request, packet &response) -> packet::error_type { auto ret = 0;
|
||||
*request, packet &response) -> packet::error_type { auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -749,13 +755,13 @@ public:
|
||||
remote::file_size size;
|
||||
DECODE_OR_RETURN(request, size);
|
||||
|
||||
return this->fuse_getxattr(&path[0], &name[0],
|
||||
return this->fuse_getxattr(path.c_str(), &name[0],
|
||||
nullptr, size);
|
||||
}});
|
||||
handlerLookup_.insert({"::fuse_getxattr_osx",
|
||||
[this](std::uint32_t serviceFlags, const std::string
|
||||
&client_id, std::uint64_t threadId, const std::string &method, packet
|
||||
*request, packet &response) -> packet::error_type { auto ret = 0;
|
||||
*request, packet &response) -> packet::error_type { auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -769,22 +775,23 @@ public:
|
||||
std::uint32_t position;
|
||||
DECODE_OR_RETURN(request, position);
|
||||
|
||||
return this->fuse_getxattr_osx(&path[0], &name[0],
|
||||
nullptr, size, position);
|
||||
return this->fuse_getxattr_osx(path.c_str(),
|
||||
&name[0], nullptr, size, position);
|
||||
}});*/
|
||||
handler_lookup_.insert(
|
||||
{"::fuse_getxtimes",
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
|
||||
remote::file_time bkuptime{};
|
||||
remote::file_time crtime{};
|
||||
if ((ret = this->fuse_getxtimes(&path[0], bkuptime, crtime)) == 0) {
|
||||
if ((ret = this->fuse_getxtimes(path.c_str(), bkuptime, crtime)) ==
|
||||
0) {
|
||||
response.encode(bkuptime);
|
||||
response.encode(crtime);
|
||||
}
|
||||
@ -799,7 +806,7 @@ public:
|
||||
/*handlerLookup_.insert({"::remote_fuseListxattr",
|
||||
[this](std::uint32_t serviceFlags, const std::string
|
||||
&client_id, std::uint64_t threadId, const std::string &method, packet
|
||||
*request, packet &response) -> packet::error_type { auto ret = 0;
|
||||
*request, packet &response) -> packet::error_type { auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -807,7 +814,7 @@ public:
|
||||
remote::file_size size;
|
||||
DECODE_OR_RETURN(request, size);
|
||||
|
||||
return this->fuse_listxattr(&path[0], nullptr,
|
||||
return this->fuse_listxattr(path.c_str(), nullptr,
|
||||
size);
|
||||
}});*/
|
||||
handler_lookup_.insert(
|
||||
@ -815,7 +822,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -823,14 +830,14 @@ public:
|
||||
remote::file_mode mode;
|
||||
DECODE_OR_RETURN(request, mode);
|
||||
|
||||
return this->fuse_mkdir(&path[0], mode);
|
||||
return this->fuse_mkdir(path.c_str(), mode);
|
||||
}});
|
||||
handler_lookup_.insert(
|
||||
{"::fuse_open",
|
||||
[this](std::uint32_t, const std::string &client_id, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -839,12 +846,12 @@ public:
|
||||
DECODE_OR_RETURN(request, flags);
|
||||
|
||||
remote::file_handle handle;
|
||||
if ((ret = this->fuse_open(&path[0], flags, handle)) >= 0) {
|
||||
if ((ret = this->fuse_open(path.c_str(), flags, handle)) >= 0) {
|
||||
#if defined(_WIN32)
|
||||
this->set_compat_client_id(handle, client_id);
|
||||
#else
|
||||
#else // !defined(_WIN32)
|
||||
this->set_client_id(static_cast<native_handle>(handle), client_id);
|
||||
#endif
|
||||
#endif // defined(_WIN32)
|
||||
response.encode(handle);
|
||||
}
|
||||
return ret;
|
||||
@ -854,14 +861,14 @@ public:
|
||||
[this](std::uint32_t, const std::string &client_id, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
|
||||
remote::file_handle handle = 0;
|
||||
if ((ret = this->fuse_opendir(&path[0], handle)) >= 0) {
|
||||
this->add_directory(client_id, reinterpret_cast<void *>(handle));
|
||||
remote::file_handle handle{0};
|
||||
if ((ret = this->fuse_opendir(path.c_str(), handle)) >= 0) {
|
||||
this->add_directory(client_id, handle);
|
||||
response.encode(handle);
|
||||
}
|
||||
return ret;
|
||||
@ -871,7 +878,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -886,10 +893,10 @@ public:
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
data_buffer buffer;
|
||||
if ((ret =
|
||||
this->fuse_read(&path[0], reinterpret_cast<char *>(&buffer),
|
||||
read_size, read_offset, handle)) > 0) {
|
||||
response.encode(&buffer[0], buffer.size());
|
||||
if ((ret = this->fuse_read(path.c_str(),
|
||||
reinterpret_cast<char *>(&buffer),
|
||||
read_size, read_offset, handle)) > 0) {
|
||||
response.encode(buffer.data(), buffer.size());
|
||||
}
|
||||
return ret;
|
||||
}});
|
||||
@ -898,7 +905,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &client_id, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -909,12 +916,11 @@ public:
|
||||
remote::file_handle handle;
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
if (this->has_open_directory(client_id,
|
||||
reinterpret_cast<void *>(handle))) {
|
||||
std::string filePath;
|
||||
ret = this->fuse_readdir(&path[0], offset, handle, filePath);
|
||||
if (this->has_open_directory(client_id, handle)) {
|
||||
std::string file_path;
|
||||
ret = this->fuse_readdir(path.c_str(), offset, handle, file_path);
|
||||
if (ret == 0) {
|
||||
response.encode(filePath);
|
||||
response.encode(file_path);
|
||||
}
|
||||
} else {
|
||||
ret = -EBADF;
|
||||
@ -927,7 +933,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -935,14 +941,14 @@ public:
|
||||
remote::file_handle handle;
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
return this->fuse_release(&path[0], handle);
|
||||
return this->fuse_release(path.c_str(), handle);
|
||||
}});
|
||||
handler_lookup_.insert(
|
||||
{"::fuse_releasedir",
|
||||
[this](std::uint32_t, const std::string &client_id, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -950,9 +956,8 @@ public:
|
||||
remote::file_handle handle;
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
ret = this->fuse_releasedir(&path[0], handle);
|
||||
if (this->remove_directory(client_id,
|
||||
reinterpret_cast<void *>(handle))) {
|
||||
ret = this->fuse_releasedir(path.c_str(), handle);
|
||||
if (this->remove_directory(client_id, handle)) {
|
||||
return ret;
|
||||
}
|
||||
return -EBADF;
|
||||
@ -960,7 +965,7 @@ public:
|
||||
/*handlerLookup_.insert({"::fuse_removexattr",
|
||||
[this](std::uint32_t serviceFlags, const std::string
|
||||
&client_id, std::uint64_t threadId, const std::string &method, packet
|
||||
*request, packet &response) -> packet::error_type { auto ret = 0;
|
||||
*request, packet &response) -> packet::error_type { auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -968,7 +973,8 @@ public:
|
||||
std::string name;
|
||||
DECODE_OR_RETURN(request, name);
|
||||
|
||||
return this->fuse_removexattr(&path[0], &name[0]);
|
||||
return this->fuse_removexattr(path.c_str(),
|
||||
&name[0]);
|
||||
}});*/
|
||||
handler_lookup_.insert(
|
||||
{"::fuse_rename",
|
||||
@ -1072,7 +1078,7 @@ public:
|
||||
/*handlerLookup_.insert({"::fuse_setxattr",
|
||||
[this](std::uint32_t serviceFlags, const std::string
|
||||
&client_id, std::uint64_t threadId, const std::string &method, packet
|
||||
*request, packet &response) -> packet::error_type { auto ret = 0;
|
||||
*request, packet &response) -> packet::error_type { auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -1093,7 +1099,7 @@ public:
|
||||
std::int32_t flags;
|
||||
DECODE_OR_RETURN(request, flags);
|
||||
|
||||
ret = this->fuse_setxattr(&path[0], &name[0],
|
||||
ret = this->fuse_setxattr(path.c_str(), &name[0],
|
||||
&value[0], size, flags);
|
||||
}
|
||||
return ret;
|
||||
@ -1101,7 +1107,7 @@ public:
|
||||
handlerLookup_.insert({"::fuse_setxattr_osx",
|
||||
[this](std::uint32_t serviceFlags, const std::string
|
||||
&client_id, std::uint64_t threadId, const std::string &method, packet
|
||||
*request, packet &response) -> packet::error_type { auto ret = 0;
|
||||
*request, packet &response) -> packet::error_type { auto ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -1125,8 +1131,8 @@ public:
|
||||
std::uint32_t position;
|
||||
DECODE_OR_RETURN(request, position);
|
||||
|
||||
ret = this->fuse_setxattr_osx(&path[0], &name[0],
|
||||
&value[0], size, flags, position);
|
||||
ret = this->fuse_setxattr_osx(path.c_str(),
|
||||
&name[0], &value[0], size, flags, position);
|
||||
}
|
||||
return ret;
|
||||
}});*/
|
||||
@ -1245,8 +1251,9 @@ public:
|
||||
remote::file_handle handle{};
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
ret = this->fuse_write(path.data(), buffer.data(), write_size,
|
||||
write_offset, handle);
|
||||
ret = this->fuse_write(
|
||||
path.data(), reinterpret_cast<const char *>(buffer.data()),
|
||||
write_size, write_offset, handle);
|
||||
}
|
||||
return ret;
|
||||
}});
|
||||
@ -1279,8 +1286,9 @@ public:
|
||||
remote::file_handle handle{};
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
ret = this->fuse_write(path.data(), buffer.data(), write_size,
|
||||
write_offset, handle);
|
||||
ret = this->fuse_write(path.data(),
|
||||
reinterpret_cast<char *>(buffer.data()),
|
||||
write_size, write_offset, handle);
|
||||
}
|
||||
return ret;
|
||||
}});
|
||||
@ -1301,8 +1309,7 @@ public:
|
||||
if ((ret = this->json_create_directory_snapshot(path.data(),
|
||||
json_data)) == 0) {
|
||||
this->add_directory(client_id,
|
||||
reinterpret_cast<void *>(
|
||||
json_data["handle"].get<std::uint64_t>()));
|
||||
json_data["handle"].get<std::uint64_t>());
|
||||
response.encode(json_data.dump(0));
|
||||
}
|
||||
return ret;
|
||||
@ -1312,7 +1319,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &client_id, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &response) -> packet::error_type {
|
||||
std::int32_t ret = 0;
|
||||
std::int32_t ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -1324,8 +1331,7 @@ public:
|
||||
DECODE_OR_RETURN(request, page);
|
||||
|
||||
ret = -EBADF;
|
||||
if (this->has_open_directory(client_id,
|
||||
reinterpret_cast<void *>(handle))) {
|
||||
if (this->has_open_directory(client_id, handle)) {
|
||||
json json_data;
|
||||
json_data["directory_list"] = std::vector<json>();
|
||||
json_data["page"] = page;
|
||||
@ -1343,7 +1349,7 @@ public:
|
||||
[this](std::uint32_t, const std::string &client_id, std::uint64_t,
|
||||
const std::string &, packet *request,
|
||||
packet &) -> packet::error_type {
|
||||
auto ret = 0;
|
||||
std::int32_t ret{0};
|
||||
|
||||
std::string path;
|
||||
DECODE_OR_RETURN(request, path);
|
||||
@ -1352,15 +1358,15 @@ public:
|
||||
DECODE_OR_RETURN(request, handle);
|
||||
|
||||
ret = this->json_release_directory_snapshot(path.data(), handle);
|
||||
if (this->remove_directory(client_id,
|
||||
reinterpret_cast<void *>(handle))) {
|
||||
if (this->remove_directory(client_id, handle)) {
|
||||
return ret;
|
||||
}
|
||||
return -EBADF;
|
||||
}});
|
||||
|
||||
packet_server_ = std::make_unique<packet_server>(
|
||||
config_.get_remote_port(), config_.get_remote_token(), 10,
|
||||
config_.get_remote_mount().api_port,
|
||||
config_.get_remote_mount().encryption_token, 10,
|
||||
[this](const std::string &client_id) {
|
||||
return this->closed_handler(client_id);
|
||||
},
|
||||
@ -1372,14 +1378,19 @@ public:
|
||||
method, request, response,
|
||||
message_complete);
|
||||
});
|
||||
event_system::instance().raise<service_start_end>(function_name,
|
||||
"remote_server_base");
|
||||
}
|
||||
|
||||
~remote_server_base() override {
|
||||
event_system::instance().raise<service_shutdown_begin>(
|
||||
"remote_server_base");
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
event_system::instance().raise<service_stop_begin>(function_name,
|
||||
"remote_server_base");
|
||||
client_pool_.shutdown();
|
||||
packet_server_.reset();
|
||||
event_system::instance().raise<service_shutdown_end>("remote_server_base");
|
||||
event_system::instance().raise<service_stop_end>(function_name,
|
||||
"remote_server_base");
|
||||
}
|
||||
|
||||
public:
|
||||
@ -1412,7 +1423,7 @@ private:
|
||||
const auto lookup_method_name =
|
||||
((idx == std::string::npos) ? "::" + method : method.substr(idx - 1));
|
||||
if (handler_lookup_.find(lookup_method_name) == handler_lookup_.end()) {
|
||||
message_complete(STATUS_NOT_IMPLEMENTED);
|
||||
message_complete(static_cast<packet::error_type>(STATUS_NOT_IMPLEMENTED));
|
||||
} else {
|
||||
client_pool_.execute(
|
||||
client_id, thread_id,
|
||||
@ -1430,13 +1441,7 @@ protected:
|
||||
path = utils::path::create_api_path(path.substr(mount_location_.size()));
|
||||
return path;
|
||||
}
|
||||
|
||||
void delete_open_directory(void *dir) override {
|
||||
if (dir != nullptr) {
|
||||
delete reinterpret_cast<directory_iterator *>(dir);
|
||||
}
|
||||
}
|
||||
};
|
||||
} // namespace repertory
|
||||
|
||||
#endif // INCLUDE_DRIVES_REMOTE_REMOTE_SERVER_BASE_HPP_
|
||||
#endif // REPERTORY_INCLUDE_DRIVES_REMOTE_REMOTE_SERVER_BASE_HPP_
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user