diff options
author | saturneric <[email protected]> | 2023-12-03 12:28:46 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2023-12-03 12:28:46 +0000 |
commit | 883db05d54510e76b6548e107593187e1306117d (patch) | |
tree | a4de9d60d3bfeb69ba443129d208feef65250b2c /src/core/GpgCoreInit.cpp | |
parent | feat: improve memory security of function framework (diff) | |
download | GpgFrontend-883db05d54510e76b6548e107593187e1306117d.tar.gz GpgFrontend-883db05d54510e76b6548e107593187e1306117d.zip |
feat: general improvements of aync execution and memory security
Diffstat (limited to 'src/core/GpgCoreInit.cpp')
-rw-r--r-- | src/core/GpgCoreInit.cpp | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/src/core/GpgCoreInit.cpp b/src/core/GpgCoreInit.cpp index 97f9f68a..09b3a0ec 100644 --- a/src/core/GpgCoreInit.cpp +++ b/src/core/GpgCoreInit.cpp @@ -35,13 +35,15 @@ #include <boost/date_time.hpp> #include "core/function/GlobalSettingStation.h" -#include "core/function/basic/GpgFunctionObject.h" #include "core/function/gpg/GpgAdvancedOperator.h" #include "core/function/gpg/GpgContext.h" #include "core/module/ModuleManager.h" #include "core/thread/Task.h" #include "core/thread/TaskRunner.h" #include "core/thread/TaskRunnerGetter.h" +#include "core/utils/MemoryUtils.h" +#include "function/basic/ChannelObject.h" +#include "function/basic/SingletonStorage.h" namespace GpgFrontend { @@ -57,16 +59,19 @@ void InitCoreLoggingSystem(spdlog::level::level_enum level) { // sinks std::vector<spdlog::sink_ptr> sinks; - sinks.push_back(std::make_shared<spdlog::sinks::stderr_color_sink_mt>()); - sinks.push_back(std::make_shared<spdlog::sinks::rotating_file_sink_mt>( - logfile_path.u8string(), 1048576 * 32, 8)); + sinks.push_back(GpgFrontend::SecureCreateSharedObject< + spdlog::sinks::stderr_color_sink_mt>()); + sinks.push_back(GpgFrontend::SecureCreateSharedObject< + spdlog::sinks::rotating_file_sink_mt>(logfile_path.u8string(), + 1048576 * 32, 8)); // thread pool spdlog::init_thread_pool(1024, 2); // logger - auto core_logger = std::make_shared<spdlog::async_logger>( - "core", begin(sinks), end(sinks), spdlog::thread_pool()); + auto core_logger = + GpgFrontend::SecureCreateSharedObject<spdlog::async_logger>( + "core", begin(sinks), end(sinks), spdlog::thread_pool()); core_logger->set_pattern( "[%H:%M:%S.%e] [T:%t] [%=6n] %^[%=8l]%$ [%s:%#] [%!] -> %v (+%ius)"); @@ -75,7 +80,7 @@ void InitCoreLoggingSystem(spdlog::level::level_enum level) { // flush policy #ifdef DEBUG - core_logger->flush_on(spdlog::level::debug); + core_logger->flush_on(spdlog::level::trace); #else core_logger->flush_on(spdlog::level::err); #endif @@ -175,7 +180,7 @@ void InitGpgFrontendCore() { // init default channel auto& default_ctx = GpgFrontend::GpgContext::CreateInstance( - kGpgfrontendDefaultChannel, [=]() -> std::unique_ptr<ChannelObject> { + kGpgfrontendDefaultChannel, [=]() -> ChannelObjectPtr { GpgFrontend::GpgContextInitArgs args; // set key database path @@ -192,8 +197,8 @@ void InitGpgFrontendCore() { args.auto_import_missing_key = auto_import_missing_key; args.use_pinentry = use_pinentry_as_password_input_dialog; - return std::unique_ptr<ChannelObject>( - new GpgContext(args, kGpgfrontendDefaultChannel)); + return ConvertToChannelObjectPtr<>(SecureCreateUniqueObject<GpgContext>( + args, kGpgFrontendDefaultChannel)); }); // exit if failed @@ -201,15 +206,14 @@ void InitGpgFrontendCore() { SPDLOG_ERROR("default gnupg context init error"); }; - // async init no-ascii channel + // async init no-ascii(binary output) channel Thread::TaskRunnerGetter::GetInstance() .GetTaskRunner(Thread::TaskRunnerGetter::kTaskRunnerType_GPG) ->PostTask(new Thread::Task( [=](const DataObjectPtr& /*data_obj*/) -> int { // init non-ascii channel auto& ctx = GpgFrontend::GpgContext::CreateInstance( - kGpgfrontendNonAsciiChannel, - [=]() -> std::unique_ptr<ChannelObject> { + kGpgfrontendNonAsciiChannel, [=]() -> ChannelObjectPtr { GpgFrontend::GpgContextInitArgs args; args.ascii = false; @@ -229,8 +233,9 @@ void InitGpgFrontendCore() { args.auto_import_missing_key = auto_import_missing_key; args.use_pinentry = use_pinentry_as_password_input_dialog; - return std::unique_ptr<ChannelObject>( - new GpgContext(args, kGpgfrontendDefaultChannel)); + return ConvertToChannelObjectPtr<>( + SecureCreateUniqueObject<GpgContext>( + args, kGpgfrontendNonAsciiChannel)); }); if (!ctx.Good()) SPDLOG_ERROR("no-ascii channel init error"); @@ -257,13 +262,4 @@ void InitGpgFrontendCore() { void reset_gpgfrontend_core() { SingletonStorageCollection::GetInstance(true); } -void new_default_settings_channel(int channel) { - GpgFrontend::GpgContext::CreateInstance( - channel, [&]() -> std::unique_ptr<ChannelObject> { - GpgFrontend::GpgContextInitArgs args; - return std::unique_ptr<ChannelObject>( - new GpgContext(args, kGpgFrontendDefaultChannel)); - }); -} - } // namespace GpgFrontend
\ No newline at end of file |