diff options
author | saturneric <[email protected]> | 2024-07-27 12:18:26 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2024-07-27 12:18:26 +0000 |
commit | 5be04d1602355278814bc86c69ec9f648978be8c (patch) | |
tree | 6d691279591a267a6fe82bd3e9f84ced68dea214 /src | |
parent | fix: discover and solve some memory issues (diff) | |
download | GpgFrontend-5be04d1602355278814bc86c69ec9f648978be8c.tar.gz GpgFrontend-5be04d1602355278814bc86c69ec9f648978be8c.zip |
feat: improve sdk api for pinentry module
Diffstat (limited to 'src')
-rw-r--r-- | src/core/module/Event.cpp | 23 | ||||
-rw-r--r-- | src/core/module/Event.h | 14 | ||||
-rw-r--r-- | src/core/module/ModuleManager.h | 20 | ||||
-rw-r--r-- | src/sdk/GFSDKBasic.cpp | 4 | ||||
-rw-r--r-- | src/sdk/GFSDKBasic.h | 14 | ||||
-rw-r--r-- | src/sdk/GFSDKModule.cpp | 10 | ||||
-rw-r--r-- | src/sdk/GFSDKModule.h | 5 | ||||
-rw-r--r-- | src/sdk/private/CommonUtils.cpp | 19 | ||||
-rw-r--r-- | src/sdk/private/CommonUtils.h | 13 |
9 files changed, 77 insertions, 45 deletions
diff --git a/src/core/module/Event.cpp b/src/core/module/Event.cpp index a1fd2fdc..cbffb096 100644 --- a/src/core/module/Event.cpp +++ b/src/core/module/Event.cpp @@ -34,20 +34,17 @@ namespace GpgFrontend::Module { class Event::Impl { public: - Impl(QString event_id, std::initializer_list<ParameterInitializer> params, - EventCallback callback) + Impl(QString event_id, Params params, EventCallback callback) : event_identifier_(std::move(event_id)), callback_(std::move(callback)), callback_thread_(QThread::currentThread()) { - for (const auto& param : params) { - AddParameter(param); - } + data_.insert(params); } auto operator[](const QString& key) const -> std::optional<ParameterValue> { auto it_data = data_.find(key); if (it_data != data_.end()) { - return it_data->second; + return it_data.value(); } return std::nullopt; } @@ -81,7 +78,7 @@ class Event::Impl { } void ExecuteCallback(ListenerIdentifier listener_id, - const DataObjectPtr& data_object) { + const Params& data_object) { if (callback_) { if (!QMetaObject::invokeMethod( callback_thread_, @@ -107,7 +104,7 @@ class Event::Impl { GFModuleEventParam* p_param; int index = 0; - for (const auto& data : data_) { + for (const auto& data : data_.asKeyValueRange()) { p_param = static_cast<GFModuleEventParam*>( SecureMalloc(sizeof(GFModuleEventParam))); if (index++ == 0) event->params = p_param; @@ -126,14 +123,12 @@ class Event::Impl { private: EventIdentifier event_identifier_; EventTriggerIdentifier trigger_uuid_ = QUuid::createUuid().toString(); - std::map<QString, QString> data_; + QMap<QString, QString> data_; EventCallback callback_; QThread* callback_thread_ = nullptr; ///< }; -Event::Event(const QString& event_id, - std::initializer_list<ParameterInitializer> params, - EventCallback callback) +Event::Event(const QString& event_id, Params params, EventCallback callback) : p_(SecureCreateUniqueObject<Impl>(event_id, params, std::move(callback))) {} @@ -165,8 +160,8 @@ void Event::AddParameter(const QString& key, const QString& value) { p_->AddParameter(key, value); } -void Event::ExecuteCallback(ListenerIdentifier l_id, DataObjectPtr d_o) { - p_->ExecuteCallback(std::move(l_id), d_o); +void Event::ExecuteCallback(ListenerIdentifier l_id, const Params& param) { + p_->ExecuteCallback(std::move(l_id), param); } auto Event::ToModuleEvent() -> GFModuleEvent* { return p_->ToModuleEvent(); } diff --git a/src/core/module/Event.h b/src/core/module/Event.h index cb41c125..64c35592 100644 --- a/src/core/module/Event.h +++ b/src/core/module/Event.h @@ -50,16 +50,16 @@ class GPGFRONTEND_CORE_EXPORT Event { using ParameterValue = std::any; using EventIdentifier = QString; using ListenerIdentifier = QString; + using Params = QMap<QString, QString>; + using EventCallback = - std::function<void(EventIdentifier, ListenerIdentifier, DataObjectPtr)>; + std::function<void(EventIdentifier, ListenerIdentifier, Params)>; struct ParameterInitializer { QString key; QString value; }; - explicit Event(const QString&, - std::initializer_list<ParameterInitializer> = {}, - EventCallback = nullptr); + explicit Event(const QString&, Params = {}, EventCallback = nullptr); ~Event(); @@ -81,7 +81,7 @@ class GPGFRONTEND_CORE_EXPORT Event { void AddParameter(const QString& key, const QString& value); - void ExecuteCallback(ListenerIdentifier, DataObjectPtr); + void ExecuteCallback(ListenerIdentifier, const Params&); auto ToModuleEvent() -> GFModuleEvent*; @@ -91,10 +91,8 @@ class GPGFRONTEND_CORE_EXPORT Event { }; template <typename... Args> -auto MakeEvent(const EventIdentifier& event_id, Args&&... args, +auto MakeEvent(const EventIdentifier& event_id, const Event::Params& params, Event::EventCallback e_cb) -> EventReference { - std::initializer_list<Event::ParameterInitializer> params = { - Event::ParameterInitializer{std::forward<Args>(args)}...}; return GpgFrontend::SecureCreateSharedObject<Event>(event_id, params, e_cb); } diff --git a/src/core/module/ModuleManager.h b/src/core/module/ModuleManager.h index ea2d88cb..08abbd27 100644 --- a/src/core/module/ModuleManager.h +++ b/src/core/module/ModuleManager.h @@ -28,7 +28,6 @@ #pragma once -#include <mutex> #include <vector> #include "core/function/SecureMemoryAllocator.h" @@ -123,10 +122,10 @@ void RegisterAndActivateModule(Args&&... args) { } template <typename... Args> -void TriggerEvent(const EventIdentifier& event_id, Args&&... args, +void TriggerEvent(const EventIdentifier& event_id, + const Event::Params& params = {}, Event::EventCallback e_cb = nullptr) { - ModuleManager::GetInstance().TriggerEvent( - std::move(MakeEvent(event_id, std::forward<Args>(args)..., e_cb))); + ModuleManager::GetInstance().TriggerEvent(MakeEvent(event_id, params, e_cb)); } /** @@ -166,13 +165,12 @@ auto GPGFRONTEND_CORE_EXPORT ListenRTPublishEvent(QObject*, Namespace, Key, * @param key * @return std::vector<Key> */ -auto GPGFRONTEND_CORE_EXPORT ListRTChildKeys(const QString& namespace_, - const QString& key) - -> std::vector<Key>; +auto GPGFRONTEND_CORE_EXPORT ListRTChildKeys( + const QString& namespace_, const QString& key) -> std::vector<Key>; template <typename T> -auto RetrieveRTValueTyped(const QString& namespace_, const QString& key) - -> std::optional<T> { +auto RetrieveRTValueTyped(const QString& namespace_, + const QString& key) -> std::optional<T> { auto any_value = ModuleManager::GetInstance().RetrieveRTValue(namespace_, key); if (any_value && any_value->type() == typeid(T)) { @@ -183,8 +181,8 @@ auto RetrieveRTValueTyped(const QString& namespace_, const QString& key) template <typename T> auto RetrieveRTValueTypedOrDefault(const QString& namespace_, - const QString& key, const T& defaultValue) - -> T { + const QString& key, + const T& defaultValue) -> T { auto any_value = ModuleManager::GetInstance().RetrieveRTValue(namespace_, key); if (any_value && any_value->type() == typeid(T)) { diff --git a/src/sdk/GFSDKBasic.cpp b/src/sdk/GFSDKBasic.cpp index aefa022a..8b884c84 100644 --- a/src/sdk/GFSDKBasic.cpp +++ b/src/sdk/GFSDKBasic.cpp @@ -38,6 +38,10 @@ auto GFAllocateMemory(uint32_t size) -> void* { return GpgFrontend::SecureMemoryAllocator::Allocate(size); } +auto GFReallocateMemory(void* ptr, uint32_t size) -> void* { + return GpgFrontend::SecureMemoryAllocator::Reallocate(ptr, size); +} + void GFFreeMemory(void* ptr) { return GpgFrontend::SecureMemoryAllocator::Deallocate(ptr); } diff --git a/src/sdk/GFSDKBasic.h b/src/sdk/GFSDKBasic.h index 2a3071cd..93392857 100644 --- a/src/sdk/GFSDKBasic.h +++ b/src/sdk/GFSDKBasic.h @@ -59,6 +59,16 @@ auto GPGFRONTEND_MODULE_SDK_EXPORT GFAllocateMemory(uint32_t size) -> void*; /** * @brief * + * @param ptr + * @param size + * @return void* + */ +auto GPGFRONTEND_MODULE_SDK_EXPORT GFReallocateMemory(void* ptr, + uint32_t size) -> void*; + +/** + * @brief + * * @return const char* */ auto GPGFRONTEND_MODULE_SDK_EXPORT GFProjectVersion() -> const char*; @@ -119,6 +129,6 @@ auto GPGFRONTEND_MODULE_SDK_EXPORT GFAppActiveLocale() -> char*; * @param size * @return auto */ -auto GPGFRONTEND_MODULE_SDK_EXPORT GFAppRegisterTranslator(char* data, int size) - -> int; +auto GPGFRONTEND_MODULE_SDK_EXPORT GFAppRegisterTranslator(char* data, + int size) -> int; }
\ No newline at end of file diff --git a/src/sdk/GFSDKModule.cpp b/src/sdk/GFSDKModule.cpp index ecc4afd1..87c008ea 100644 --- a/src/sdk/GFSDKModule.cpp +++ b/src/sdk/GFSDKModule.cpp @@ -78,17 +78,13 @@ auto GFModuleListRTChildKeys(const char *namespace_, const char *key, void GFModuleTriggerModuleEventCallback(GFModuleEvent *module_event, const char *module_id, int argc, - char **argv) { - auto data_object = GpgFrontend::TransferParams(); - for (int i = 0; i < argc; i++) { - data_object->AppendObject(GFUnStrDup(argv[i])); - } - + GFModuleEventParam *p_argv) { + auto argv = ConvertEventParamsToMap(p_argv); auto event = GpgFrontend::Module::ModuleManager::GetInstance().SearchEvent( GFUnStrDup(module_event->trigger_id).toLower()); if (!event) return; - event.value()->ExecuteCallback(GFUnStrDup(module_id), data_object); + event.value()->ExecuteCallback(GFUnStrDup(module_id), argv); } auto GFModuleRetrieveRTValueOrDefaultBool(const char *namespace_, diff --git a/src/sdk/GFSDKModule.h b/src/sdk/GFSDKModule.h index 271a4ac4..1b9bbe42 100644 --- a/src/sdk/GFSDKModule.h +++ b/src/sdk/GFSDKModule.h @@ -92,6 +92,7 @@ GFModuleUpsertRTValueBool(const char *namespace_, const char *key, int value); auto GPGFRONTEND_MODULE_SDK_EXPORT GFModuleListRTChildKeys( const char *namespace_, const char *key, char ***child_keys) -> int32_t; -void GPGFRONTEND_MODULE_SDK_EXPORT GFModuleTriggerModuleEventCallback( - GFModuleEvent *event, const char *module_id, int argc, char **argv); +void GPGFRONTEND_MODULE_SDK_EXPORT +GFModuleTriggerModuleEventCallback(GFModuleEvent *event, const char *module_id, + int argc, GFModuleEventParam *argv); };
\ No newline at end of file diff --git a/src/sdk/private/CommonUtils.cpp b/src/sdk/private/CommonUtils.cpp index 16dc2db6..d6fec3db 100644 --- a/src/sdk/private/CommonUtils.cpp +++ b/src/sdk/private/CommonUtils.cpp @@ -30,6 +30,8 @@ #include <core/utils/MemoryUtils.h> +#include "GFSDKModule.h" + auto GFStrDup(const QString& str) -> char* { auto utf8_str = str.toUtf8(); auto* c_str = static_cast<char*>( @@ -80,3 +82,20 @@ auto QMapToCharArray(const QMap<QString, QString>& map, int& size) -> char** { return char_array; } + +auto ConvertEventParamsToMap(GFModuleEventParam* params) + -> QMap<QString, QString> { + QMap<QString, QString> param_map; + GFModuleEventParam* current = params; + GFModuleEventParam* last; + + while (current != nullptr) { + param_map[current->name] = GFUnStrDup(current->value); + + last = current; + current = current->next; + GpgFrontend::SecureFree(last); + } + + return param_map; +}
\ No newline at end of file diff --git a/src/sdk/private/CommonUtils.h b/src/sdk/private/CommonUtils.h index 85704797..514bcd5d 100644 --- a/src/sdk/private/CommonUtils.h +++ b/src/sdk/private/CommonUtils.h @@ -28,6 +28,8 @@ #pragma once +struct GFModuleEventParam; + /** * @brief * @@ -66,4 +68,13 @@ auto CharArrayToQMap(char **char_array, int size) -> QMap<QString, QString>; * @param size * @return char** */ -auto QMapToCharArray(const QMap<QString, QString> &map, int &size) -> char **;
\ No newline at end of file +auto QMapToCharArray(const QMap<QString, QString> &map, int &size) -> char **; + +/** + * @brief + * + * @param params + * @return QMap<QString, QString> + */ +auto ConvertEventParamsToMap(GFModuleEventParam *params) + -> QMap<QString, QString>;
\ No newline at end of file |