From 12d70e1792a5b1ff08d4b58fb49fb9e58d6551a8 Mon Sep 17 00:00:00 2001 From: saturneric Date: Thu, 29 Feb 2024 00:32:43 +0800 Subject: feat: upgrade module system 1. load module and resolve symbols at runtime 2. restrict sdk functions and structures to c style 3. add some core api to support it --- src/module/sdk/Basic.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'src/module/sdk/Basic.cpp') diff --git a/src/module/sdk/Basic.cpp b/src/module/sdk/Basic.cpp index 63859763..35ce8054 100644 --- a/src/module/sdk/Basic.cpp +++ b/src/module/sdk/Basic.cpp @@ -24,4 +24,52 @@ * * SPDX-License-Identifier: GPL-3.0-or-later * - */ \ No newline at end of file + */ + +#include "Basic.h" + +#include "core/function/SecureMemoryAllocator.h" +#include "core/function/gpg/GpgCommandExecutor.h" + +auto AllocateMemory(uint32_t size) -> void* { + return GpgFrontend::SecureMemoryAllocator::Allocate(size); +} + +void FreeMemory(void* ptr) { + return GpgFrontend::SecureMemoryAllocator::Deallocate(ptr); +} + +void ExecuteCommandSync(const char* cmd, int32_t argc, const char** argv, + CommandExeucteCallback cb, void* data) { + QStringList args; + for (int i = 0; i < argc; i++) { + args.append(QString::fromUtf8(argv[i])); + } + + GpgFrontend::GpgCommandExecutor::ExecuteContext context{ + cmd, args, [=](int exit_code, const QString& out, const QString& err) { + cb(data, exit_code, out.toUtf8(), err.toUtf8()); + }}; + + GpgFrontend::GpgCommandExecutor::ExecuteSync(context); +} + +void ExecuteCommandBatchSync(int32_t context_size, + const CommandExecuteContext* context) { + QList contexts; + for (int i = 0; i < context_size; i++) { + auto exec_context = context[i]; + QStringList args; + for (int i = 0; i < exec_context.argc; i++) { + args.append(QString::fromUtf8(exec_context.argv[i])); + } + contexts.append( + {exec_context.cmd, args, + [data = exec_context.data, cb = exec_context.cb]( + int exit_code, const QString& out, const QString& err) { + cb(data, exit_code, out.toUtf8(), err.toUtf8()); + }}); + } + + GpgFrontend::GpgCommandExecutor::ExecuteConcurrentlySync(contexts); +} \ No newline at end of file -- cgit v1.2.3