WUPS 0.6.1 support

This commit is contained in:
Maschell 2021-10-01 17:25:19 +02:00
parent 330fb36195
commit bd10088784
5 changed files with 32 additions and 17 deletions

View File

@ -47,8 +47,8 @@ public:
return this->description; return this->description;
} }
[[nodiscard]] const std::string &getId() const { [[nodiscard]] const std::string &getStorageId() const {
return this->description; return this->storageId;
} }
[[nodiscard]] size_t getSize() const { [[nodiscard]] size_t getSize() const {
@ -61,7 +61,7 @@ public:
const std::string& license, const std::string& license,
const std::string& buildtimestamp, const std::string& buildtimestamp,
const std::string& description, const std::string& description,
const std::string& id, const std::string& storageId,
size_t size); size_t size);
private: private:
@ -91,8 +91,8 @@ private:
this->description = description_; this->description = description_;
} }
void setId(const std::string &id_) { void setStorageId(const std::string &storageId_) {
this->id = id_; this->storageId = storageId_;
} }
void setSize(size_t size_) { void setSize(size_t size_) {
@ -105,6 +105,6 @@ private:
std::string license; std::string license;
std::string buildtimestamp; std::string buildtimestamp;
std::string description; std::string description;
std::string id; std::string storageId;
size_t size{}; size_t size{};
}; };

View File

@ -25,15 +25,18 @@ typedef enum GetPluginInformationInputType {
typedef uint32_t plugin_container_handle; typedef uint32_t plugin_container_handle;
typedef uint32_t plugin_data_handle; typedef uint32_t plugin_data_handle;
#define PLUGIN_INFORMATION_VERSION 0x00000001
/* plugin_information message */ /* plugin_information message */
typedef struct __attribute__((__packed__)) plugin_information { typedef struct __attribute__((__packed__)) plugin_information {
char id[256]; uint32_t plugin_information_version;
char name[256]; char name[256];
char author[256]; char author[256];
char buildTimestamp[256]; char buildTimestamp[256];
char description[256]; char description[256];
char license[256]; char license[256];
char version[256]; char version[256];
char storageId[256];
size_t size; size_t size;
} plugin_information; } plugin_information;

View File

@ -27,7 +27,7 @@ PluginMetaInformation::PluginMetaInformation(const std::string& name_,
const std::string& license_, const std::string& license_,
const std::string& buildtimestamp_, const std::string& buildtimestamp_,
const std::string& description_, const std::string& description_,
const std::string& id_, const std::string& storageId_,
size_t size_) { size_t size_) {
this->name = name_; this->name = name_;
this->author = author_; this->author = author_;
@ -36,5 +36,5 @@ PluginMetaInformation::PluginMetaInformation(const std::string& name_,
this->description = description_; this->description = description_;
this->license = license_; this->license = license_;
this->version = version_; this->version = version_;
this->id = id_; this->storageId = storageId_;
} }

View File

@ -28,13 +28,17 @@ std::optional<PluginMetaInformation> PluginUtils::getMetaInformationForBuffer(ch
return std::nullopt; return std::nullopt;
} }
if (info.plugin_information_version != PLUGIN_INFORMATION_VERSION) {
return std::nullopt;
}
PluginMetaInformation metaInfo(info.name, PluginMetaInformation metaInfo(info.name,
info.author, info.author,
info.version, info.version,
info.license, info.license,
info.buildTimestamp, info.buildTimestamp,
info.description, info.description,
info.id, info.storageId,
info.size); info.size);
return metaInfo; return metaInfo;
@ -47,13 +51,16 @@ std::optional<PluginMetaInformation> PluginUtils::getMetaInformationForPath(cons
// DEBUG_FUNCTION_LINE("Failed to load meta infos for %s\n", path.c_str()); // DEBUG_FUNCTION_LINE("Failed to load meta infos for %s\n", path.c_str());
return std::nullopt; return std::nullopt;
} }
if (info.plugin_information_version != PLUGIN_INFORMATION_VERSION) {
return std::nullopt;
}
PluginMetaInformation metaInfo(info.name, PluginMetaInformation metaInfo(info.name,
info.author, info.author,
info.version, info.version,
info.license, info.license,
info.buildTimestamp, info.buildTimestamp,
info.description, info.description,
info.id, info.storageId,
info.size); info.size);
return metaInfo; return metaInfo;
} }
@ -100,12 +107,14 @@ std::vector<PluginContainer> PluginUtils::getLoadedPlugins(uint32_t maxSize) {
handles[i] = 0xFFFFFFFF; handles[i] = 0xFFFFFFFF;
} }
if (WUPSGetLoadedPlugins(handles, maxSize, &realSize) != PLUGIN_BACKEND_API_ERROR_NONE) { uint32_t plugin_information_version = 0;
if (WUPSGetLoadedPlugins(handles, maxSize, &realSize, &plugin_information_version) != PLUGIN_BACKEND_API_ERROR_NONE) {
free(handles); free(handles);
// DEBUG_FUNCTION_LINE("Failed"); // DEBUG_FUNCTION_LINE("Failed");
return result; return result;
} }
if (realSize == 0) { if (realSize == 0 || plugin_information_version != PLUGIN_INFORMATION_VERSION) {
free(handles); free(handles);
// DEBUG_FUNCTION_LINE("realsize is 0"); // DEBUG_FUNCTION_LINE("realsize is 0");
return result; return result;
@ -139,13 +148,16 @@ std::vector<PluginContainer> PluginUtils::getLoadedPlugins(uint32_t maxSize) {
} }
for (uint32_t i = 0; i < realSize; i++) { for (uint32_t i = 0; i < realSize; i++) {
if (information[i].plugin_information_version != PLUGIN_INFORMATION_VERSION) {
continue;
}
PluginMetaInformation metaInfo(information[i].name, PluginMetaInformation metaInfo(information[i].name,
information[i].author, information[i].author,
information[i].version, information[i].version,
information[i].license, information[i].license,
information[i].buildTimestamp, information[i].buildTimestamp,
information[i].description, information[i].description,
information[i].id, information[i].storageId,
information[i].size); information[i].size);
PluginData pluginData((uint32_t) dataHandles[i]); PluginData pluginData((uint32_t) dataHandles[i]);
result.emplace_back(pluginData, metaInfo, handles[i]); result.emplace_back(pluginData, metaInfo, handles[i]);

View File

@ -45,7 +45,7 @@ extern PluginBackendApiErrorType WUPSGetPluginDataForContainerHandles(const plug
extern PluginBackendApiErrorType WUPSGetMetaInformation(const plugin_container_handle *plugin_container_handle_list, plugin_information *plugin_information_list, uint32_t buffer_size); extern PluginBackendApiErrorType WUPSGetMetaInformation(const plugin_container_handle *plugin_container_handle_list, plugin_information *plugin_information_list, uint32_t buffer_size);
extern PluginBackendApiErrorType WUPSGetLoadedPlugins(const plugin_container_handle *io_handles, uint32_t buffer_size, uint32_t *outSize); extern PluginBackendApiErrorType WUPSGetLoadedPlugins(const plugin_container_handle *io_handles, uint32_t buffer_size, uint32_t *outSize, uint32_t *plugin_information_version);
#ifdef __cplusplus #ifdef __cplusplus
} }