From 8a645a7a14c4e737c0c1136d1c4b9e11019e3eb1 Mon Sep 17 00:00:00 2001 From: jroyan <jerome.royan@b-com.com> Date: Tue, 24 Sep 2024 16:28:13 +0200 Subject: [PATCH] update to build and run with last openAPI commit --- EtsiClientGen/CMakeLists.txt | 207 +++------------- EtsiClientGen/patches/applyPatches.sh | 27 ++- EtsiClientGen/patches/applyYamlPatch.sh | 2 + .../fixCEncodingInformationStructure.patch | 4 +- EtsiClientGen/patches/fixCError.patch | 46 ---- .../fixCRelocalizationInformation.patch | 34 +++ .../fixCRelocalizationInformationAPI.patch | 33 +++ EtsiClientGen/patches/fixCTrackable.patch | 223 +++++++++++++----- EtsiClientGen/patches/fixCTrackableType.patch | 31 +++ .../patches/fixCTypeWorldStorage.patch | 31 +++ EtsiClientGen/patches/fixCUnitSystem.patch | 29 +++ EtsiClientGen/patches/fixCWorldAnchor.patch | 139 +++++++++++ ...horAPI.patch => fixCWorldAnchorsAPI.patch} | 0 EtsiClientGen/patches/fixCWorldLink.patch | 203 +++++++++++++++- EtsiClientGen/patches/fixCWorldLinkAPI.patch | 36 --- EtsiClientGen/patches/fixCWorldLinksAPI.patch | 6 +- EtsiClientGen/patches/fixCommonOpenAPI.patch | 107 +++++++++ EtsiClientGen/patches/fixHeaderError.patch | 37 --- .../patches/fixHeaderTrackableType.patch | 13 +- .../patches/fixHeaderTypeWorldStorage.patch | 26 ++ .../patches/fixHeaderUnitSystem.patch | 8 +- arf005 | 2 +- package.json | 7 +- 23 files changed, 860 insertions(+), 391 deletions(-) create mode 100755 EtsiClientGen/patches/applyYamlPatch.sh delete mode 100644 EtsiClientGen/patches/fixCError.patch create mode 100644 EtsiClientGen/patches/fixCRelocalizationInformation.patch create mode 100644 EtsiClientGen/patches/fixCRelocalizationInformationAPI.patch create mode 100644 EtsiClientGen/patches/fixCTypeWorldStorage.patch create mode 100644 EtsiClientGen/patches/fixCUnitSystem.patch create mode 100644 EtsiClientGen/patches/fixCWorldAnchor.patch rename EtsiClientGen/patches/{fixCWorldAnchorAPI.patch => fixCWorldAnchorsAPI.patch} (100%) delete mode 100644 EtsiClientGen/patches/fixCWorldLinkAPI.patch create mode 100644 EtsiClientGen/patches/fixCommonOpenAPI.patch delete mode 100644 EtsiClientGen/patches/fixHeaderError.patch create mode 100644 EtsiClientGen/patches/fixHeaderTypeWorldStorage.patch diff --git a/EtsiClientGen/CMakeLists.txt b/EtsiClientGen/CMakeLists.txt index 2dafe10..63c56bc 100644 --- a/EtsiClientGen/CMakeLists.txt +++ b/EtsiClientGen/CMakeLists.txt @@ -14,97 +14,36 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) find_package(OpenSSL) find_package(CURL REQUIRED) -#if (OPENSSL_FOUND) -# message (STATUS "OPENSSL found") - -# set(CMAKE_C_FLAGS "-DOPENSSL") -# if(CMAKE_VERSION VERSION_LESS 3.4) -# include_directories(${OPENSSL_INCLUDE_DIR}) -# include_directories(${OPENSSL_INCLUDE_DIRS}) -# link_directories(${OPENSSL_LIBRARIES}) -# endif() - -# message(STATUS "Using OpenSSL ${OPENSSL_VERSION}") -#else() -# message (STATUS "OpenSSL Not found.") -#endif() - set(pkgName "worldStorageCClient") # this default version can be overridden in PreTarget.cmake set(PROJECT_VERSION_MAJOR 2) -set(PROJECT_VERSION_MINOR 1) +set(PROJECT_VERSION_MINOR 0) set(PROJECT_VERSION_PATCH 0) -#if( (DEFINED CURL_INCLUDE_DIR) AND (DEFINED CURL_LIBRARIES)) -# include_directories(${CURL_INCLUDE_DIR}) -# set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${CURL_LIBRARIES} ) -#else() -# find_package(CURL 7.58.0 REQUIRED) -# if(CURL_FOUND) -# include_directories(${CURL_INCLUDE_DIR}) -# set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${CURL_LIBRARIES} ) -# else(CURL_FOUND) -# message(FATAL_ERROR "Could not find the CURL library and development files.") -# endif() -#endif() - -set(SRCS - src/list.c - src/apiKey.c - src/apiClient.c - src/binary.c - external/cJSON.c - model/object.c - model/capability.c - model/encoding_information_structure.c - model/error.c - model/get_relocalization_information_200_response.c - model/get_relocalization_information_uuids_parameter_inner.c - model/mode_world_storage.c - model/relocalization_information.c - model/relocalization_information_reloc_objects_inner.c - model/trackable.c - model/trackable_type.c - model/type_world_storage.c - model/unit_system.c - model/world_anchor.c - model/world_link.c - api/DefaultAPI.c - api/RelocalizationInformationAPI.c - api/TrackablesAPI.c - api/WorldAnchorsAPI.c - api/WorldLinksAPI.c +set(GENERATED_SOURCES_INCLUDE_DIRS + ${CMAKE_CURRENT_LIST_DIR}/include + ${CMAKE_CURRENT_LIST_DIR}/external + ${CMAKE_CURRENT_LIST_DIR}/model + ${CMAKE_CURRENT_LIST_DIR}/api +) +file(GLOB SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/external/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/model/*.c + ${CMAKE_CURRENT_SOURCE_DIR}/api/*.c ) -set(HDRS - include/apiClient.h - include/list.h - include/binary.h - include/keyValuePair.h - external/cJSON.h - model/object.h - model/capability.h - model/encoding_information_structure.h - model/error.h - model/get_relocalization_information_200_response.h - model/get_relocalization_information_uuids_parameter_inner.h - model/mode_world_storage.h - model/relocalization_information.h - model/relocalization_information_reloc_objects_inner.h - model/trackable.h - model/trackable_type.h - model/type_world_storage.h - model/unit_system.h - model/world_anchor.h - model/world_link.h - api/DefaultAPI.h - api/RelocalizationInformationAPI.h - api/TrackablesAPI.h - api/WorldAnchorsAPI.h - api/WorldLinksAPI.h +file(GLOB HDRS + ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/external/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/model/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/api/*.h +) +include_directories( + ${GENERATED_SOURCES_INCLUDE_DIRS} ) include(PreTarget.cmake OPTIONAL) @@ -112,12 +51,17 @@ include(PreTarget.cmake OPTIONAL) set(PROJECT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") # Add library with project file with project name as library name -add_library(${pkgName} STATIC ${SRCS} ${HDRS}) -# Link dependent libraries -#if(NOT CMAKE_VERSION VERSION_LESS 3.4) -# target_link_libraries(${pkgName} PRIVATE OpenSSL::SSL OpenSSL::Crypto) -#endif() -#target_link_libraries(${pkgName} PUBLIC ${CURL_LIBRARIES} ) +add_library(${pkgName} STATIC) + +target_sources(${pkgName} + PRIVATE + ${SRCS}) + +target_include_directories(${pkgName} + PUBLIC + ${GENERATED_SOURCES_INCLUDE_DIRS} +) + target_link_libraries(${pkgName} PUBLIC openssl::openssl @@ -125,98 +69,11 @@ target_link_libraries(${pkgName} -lpthread ) -target_include_directories( - ${pkgName} PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}> - $<INSTALL_INTERFACE:include> -) - -#include(PostTarget.cmake OPTIONAL) - -# installation of libraries, headers, and config files -#if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in) -# install(TARGETS ${pkgName} DESTINATION lib) -# foreach(HDR_FILE ${HDRS}) -# get_filename_component(HDR_DIRECTORY ${HDR_FILE} DIRECTORY) -# get_filename_component(ABSOLUTE_HDR_DIRECTORY ${HDR_DIRECTORY} ABSOLUTE) -# file(RELATIVE_PATH RELATIVE_HDR_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${ABSOLUTE_HDR_DIRECTORY}) -# install(FILES ${HDR_FILE} DESTINATION include/${pkgName}/${RELATIVE_HDR_PATH}) -# endforeach() -#else() -# include(GNUInstallDirs) -# install(TARGETS ${pkgName} DESTINATION lib EXPORT ${pkgName}Targets) install(TARGETS ${pkgName} DESTINATION lib) +# install(FILES ${HDRS} DESTINATION include/${pkgName}) foreach(HDR_FILE ${HDRS}) get_filename_component(HDR_DIRECTORY ${HDR_FILE} DIRECTORY) get_filename_component(ABSOLUTE_HDR_DIRECTORY ${HDR_DIRECTORY} ABSOLUTE) file(RELATIVE_PATH RELATIVE_HDR_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${ABSOLUTE_HDR_DIRECTORY}) install(FILES ${HDR_FILE} DESTINATION include/${pkgName}/${RELATIVE_HDR_PATH}) endforeach() - -# include(CMakePackageConfigHelpers) -# write_basic_package_version_file( -# "${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}ConfigVersion.cmake" -# VERSION "${PROJECT_VERSION_STRING}" -# COMPATIBILITY AnyNewerVersion -# ) - -# export(EXPORT ${pkgName}Targets -# FILE "${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}Targets.cmake" -# NAMESPACE ${pkgName}:: -# ) - -# configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in -# "${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}Config.cmake" -# @ONLY -# ) - -# set(ConfigPackageLocation lib/cmake/${pkgName}) -# install(EXPORT ${pkgName}Targets -# FILE -# ${pkgName}Targets.cmake -# NAMESPACE -# ${pkgName}:: -# DESTINATION -# ${ConfigPackageLocation} -# ) -# install( -# FILES -# "${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}Config.cmake" -# "${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}ConfigVersion.cmake" -# DESTINATION -# ${ConfigPackageLocation} -# ) -#endif() - -# make installation packages -#include(Packing.cmake OPTIONAL) - -# Setting file variables to null -#set(SRCS "") -#set(HDRS "") - - -## This section shows how to use the above compiled library to compile the source files -## set source files -#set(SRCS -# unit-tests/manual-DefaultAPI.c -# unit-tests/manual-RelocalizationInformationAPI.c -# unit-tests/manual-TrackablesAPI.c -# unit-tests/manual-WorldAnchorsAPI.c -# unit-tests/manual-WorldLinksAPI.c -#) - -##set header files -#set(HDRS -#) - -## loop over all files in SRCS variable -#foreach(SOURCE_FILE ${SRCS}) -# # Get only the file name from the file as add_executable does not support executable with slash("/") -# get_filename_component(FILE_NAME_ONLY ${SOURCE_FILE} NAME_WE) -# # Remove .c from the file name and set it as executable name -# string( REPLACE ".c" "" EXECUTABLE_FILE ${FILE_NAME_ONLY}) -# # Add executable for every source file in SRCS -# add_executable(unit-${EXECUTABLE_FILE} ${SOURCE_FILE}) -# # Link above created library to executable and dependent library curl -# target_link_libraries(unit-${EXECUTABLE_FILE} ${CURL_LIBRARIES} ${pkgName} ) -#endforeach(SOURCE_FILE ${SRCS}) diff --git a/EtsiClientGen/patches/applyPatches.sh b/EtsiClientGen/patches/applyPatches.sh index 1dfd8e6..3c71722 100755 --- a/EtsiClientGen/patches/applyPatches.sh +++ b/EtsiClientGen/patches/applyPatches.sh @@ -1,17 +1,26 @@ #!/bin/bash -#patch -u ../model/encoding_information_structure.c -i fixCEncodingInformationStructure.patch -#patch -u ../model/error.c -i fixCError.patch -#patch -u ../model/trackable.c -i fixCTrackable.patch patch -u ../api/TrackablesAPI.c -i fixCTrackableAPI.patch -#patch -u ../model/trackable_type.c -i fixCTrackableType.patch -patch -u ../api/WorldAnchorsAPI.c -i fixCWorldAnchorAPI.patch -patch -u ../model/world_link.c -i fixCWorldLink.patch patch -u ../api/WorldLinksAPI.c -i fixCWorldLinksAPI.patch -#patch -u ../model/error.h -i fixHeaderError.patch +patch -u ../api/WorldAnchorsAPI.c -i fixCWorldAnchorsAPI.patch +patch -u ../api/RelocalizationInformationAPI.c -i fixCRelocalizationInformationAPI.patch + patch -u ../model/trackable.h -i fixHeaderTrackable.patch -#patch -u ../model/trackable_type.h -i fixHeaderTrackableType.patch -#patch -u ../model/unit_system.h -i fixHeaderUnitSystem.patch +patch -u ../model/trackable.c -i fixCTrackable.patch patch -u ../model/world_link.h -i fixHeaderWorldLink.patch +patch -u ../model/world_link.c -i fixCWorldLink.patch +patch -u ../model/world_anchor.c -i fixCWorldAnchor.patch +patch -u ../model/relocalization_information.c -i fixCRelocalizationInformation.patch +patch -u ../model/trackable_type.h -i fixHeaderTrackableType.patch +patch -u ../model/trackable_type.c -i fixCTrackableType.patch +patch -u ../model/unit_system.h -i fixHeaderUnitSystem.patch +patch -u ../model/unit_system.c -i fixCUnitSystem.patch +patch -u ../model/type_world_storage.h -i fixHeaderTypeWorldStorage.patch +patch -u ../model/type_world_storage.c -i fixCTypeWorldStorage.patch +patch -u ../model/encoding_information_structure.c -i fixCEncodingInformationStructure.patch + + + + diff --git a/EtsiClientGen/patches/applyYamlPatch.sh b/EtsiClientGen/patches/applyYamlPatch.sh new file mode 100755 index 0000000..c2c36a6 --- /dev/null +++ b/EtsiClientGen/patches/applyYamlPatch.sh @@ -0,0 +1,2 @@ +#!/bin/bash +cp ../arf005/API/common/commonopenapi.yaml ../arf005/API/common/commonopenapiOriginal.yaml && patch -u ../arf005/API/common/commonopenapi.yaml -i patches/fixCommonOpenAPI.patch \ No newline at end of file diff --git a/EtsiClientGen/patches/fixCEncodingInformationStructure.patch b/EtsiClientGen/patches/fixCEncodingInformationStructure.patch index d931482..1c59759 100644 --- a/EtsiClientGen/patches/fixCEncodingInformationStructure.patch +++ b/EtsiClientGen/patches/fixCEncodingInformationStructure.patch @@ -1,5 +1,5 @@ ---- encoding_information_structure_origin.c 2024-05-28 14:41:34.817357145 +0200 -+++ encoding_information_structure.c 2024-05-22 18:34:03.566752000 +0200 +--- encoding_information_structure.c 2024-09-24 10:49:45.759574129 +0200 ++++ encoding_information_structure_corrected.c 2024-09-24 10:33:23.787521014 +0200 @@ -56,7 +56,7 @@ if (world_storage_api_encoding_information_structure_DATAFORMAT_NULL == encoding_information_structure->data_format) { goto fail; diff --git a/EtsiClientGen/patches/fixCError.patch b/EtsiClientGen/patches/fixCError.patch deleted file mode 100644 index 4e39e74..0000000 --- a/EtsiClientGen/patches/fixCError.patch +++ /dev/null @@ -1,46 +0,0 @@ ---- error_origin.c 2024-05-28 14:41:34.827357147 +0200 -+++ error.c 2024-05-21 17:10:43.422284000 +0200 -@@ -5,11 +5,11 @@ - - - --error_t *error_create( -+error__t *error_create( - int code, - char *message - ) { -- error_t *error_local_var = malloc(sizeof(error_t)); -+ error__t *error_local_var = malloc(sizeof(error__t)); - if (!error_local_var) { - return NULL; - } -@@ -20,7 +20,7 @@ - } - - --void error_free(error_t *error) { -+void error_free(error__t *error) { - if(NULL == error){ - return ; - } -@@ -32,7 +32,7 @@ - free(error); - } - --cJSON *error_convertToJSON(error_t *error) { -+cJSON *error_convertToJSON(error__t *error) { - cJSON *item = cJSON_CreateObject(); - - // error->code -@@ -60,9 +60,9 @@ - return NULL; - } - --error_t *error_parseFromJSON(cJSON *errorJSON){ -+error__t *error_parseFromJSON(cJSON *errorJSON){ - -- error_t *error_local_var = NULL; -+ error__t *error_local_var = NULL; - - // error->code - cJSON *code = cJSON_GetObjectItemCaseSensitive(errorJSON, "code"); diff --git a/EtsiClientGen/patches/fixCRelocalizationInformation.patch b/EtsiClientGen/patches/fixCRelocalizationInformation.patch new file mode 100644 index 0000000..f89113c --- /dev/null +++ b/EtsiClientGen/patches/fixCRelocalizationInformation.patch @@ -0,0 +1,34 @@ +--- relocalization_information.c 2024-09-24 10:36:39.887514876 +0200 ++++ relocalization_information_corrected.c 2024-09-24 10:34:40.147520509 +0200 +@@ -75,11 +75,17 @@ + + // relocalization_information->request_type + if(relocalization_information->request_type != world_storage_api_relocalization_information__NULL) { +- cJSON *request_type_local_JSON = type_world_storage_convertToJSON(relocalization_information->request_type); ++ cJSON *request_type_local_JSON = type_world_storage_type_world_storage_convertToJSON(*relocalization_information->request_type); + if(request_type_local_JSON == NULL) { + goto fail; // custom + } +- cJSON_AddItemToObject(item, "requestType", request_type_local_JSON); ++ char *type_str = cJSON_GetStringValue(request_type_local_JSON); ++ if (type_str == NULL) { ++ goto fail; ++ } ++ if (cJSON_AddStringToObject(item, "requestType", type_str) == NULL) { ++ goto fail; ++ } + if(item->child == NULL) { + goto fail; + } +@@ -133,9 +139,10 @@ + } + + // relocalization_information->request_type ++ request_type_local_nonprim = (type_world_storage_t *)malloc(sizeof(type_world_storage_t)); + cJSON *request_type = cJSON_GetObjectItemCaseSensitive(relocalization_informationJSON, "requestType"); + if (request_type) { +- request_type_local_nonprim = type_world_storage_parseFromJSON(request_type); //custom ++ *request_type_local_nonprim = type_world_storage_type_world_storage_parseFromJSON(request_type); //custom + } + + // relocalization_information->reloc_objects diff --git a/EtsiClientGen/patches/fixCRelocalizationInformationAPI.patch b/EtsiClientGen/patches/fixCRelocalizationInformationAPI.patch new file mode 100644 index 0000000..0fb19c7 --- /dev/null +++ b/EtsiClientGen/patches/fixCRelocalizationInformationAPI.patch @@ -0,0 +1,33 @@ +--- RelocalizationInformationAPI.c 2024-09-24 12:40:39.813589333 +0200 ++++ RelocalizationInformationAPI_corrected.c 2024-09-24 12:47:02.502313400 +0200 +@@ -47,14 +47,28 @@ + // query parameters + if (uuids) + { +- list_addElement(localVarQueryParameters,uuids); ++ listEntry_t *uuid = NULL; ++ list_ForEach(uuid, uuids) { ++ char *element = (char *)uuid->data; ++ char *key = strdup("uuids"); ++ keyValuePair_t *keyPair = keyValuePair_create(key, element); ++ list_addElement(localVarQueryParameters, keyPair); ++ } + } + ++ + // query parameters + if (capabilities) + { +- list_addElement(localVarQueryParameters,capabilities); ++ listEntry_t *cap = NULL; ++ list_ForEach(cap, capabilities) { ++ char *element = (char *)cap->data; ++ char *key = strdup("capabilities"); ++ keyValuePair_t *keyPair = keyValuePair_create(key, element); ++ list_addElement(localVarQueryParameters, keyPair); ++ } + } ++ + list_addElement(localVarHeaderType,"application/json"); //produces + apiClient_invoke(apiClient, + localVarPath, diff --git a/EtsiClientGen/patches/fixCTrackable.patch b/EtsiClientGen/patches/fixCTrackable.patch index 8440edc..8db2e0d 100644 --- a/EtsiClientGen/patches/fixCTrackable.patch +++ b/EtsiClientGen/patches/fixCTrackable.patch @@ -1,54 +1,7 @@ ---- trackable_origin.c 2024-05-28 14:41:34.877357153 +0200 -+++ trackable.c 2024-05-22 18:50:02.874278000 +0200 -@@ -3,42 +3,6 @@ - #include <stdio.h> - #include "trackable.h" - -- --char* trackable_trackable_type_ToString(world_storage_api_trackable__e trackable_type) { -- char* trackable_typeArray[] = { "NULL", "FIDUCIAL_MARKER", "IMAGE_MARKER", "MESH", "MAP", "GEOPOSE", "OTHER" }; -- return trackable_typeArray[trackable_type]; --} -- --world_storage_api_trackable__e trackable_trackable_type_FromString(char* trackable_type){ -- int stringToReturn = 0; -- char *trackable_typeArray[] = { "NULL", "FIDUCIAL_MARKER", "IMAGE_MARKER", "MESH", "MAP", "GEOPOSE", "OTHER" }; -- size_t sizeofArray = sizeof(trackable_typeArray) / sizeof(trackable_typeArray[0]); -- while(stringToReturn < sizeofArray) { -- if(strcmp(trackable_type, trackable_typeArray[stringToReturn]) == 0) { -- return stringToReturn; -- } -- stringToReturn++; -- } -- return 0; --} --char* trackable_unit_ToString(world_storage_api_trackable__e unit) { -- char* unitArray[] = { "NULL", "MM", "CM", "DM", "M", "DAM", "HM", "KM", "INCH", "FOOT", "YARD", "MILE" }; -- return unitArray[unit]; --} -- --world_storage_api_trackable__e trackable_unit_FromString(char* unit){ -- int stringToReturn = 0; -- char *unitArray[] = { "NULL", "MM", "CM", "DM", "M", "DAM", "HM", "KM", "INCH", "FOOT", "YARD", "MILE" }; -- size_t sizeofArray = sizeof(unitArray) / sizeof(unitArray[0]); -- while(stringToReturn < sizeofArray) { -- if(strcmp(unit, unitArray[stringToReturn]) == 0) { -- return stringToReturn; -- } -- stringToReturn++; -- } -- return 0; --} -- - trackable_t *trackable_create( - char *uuid, - char *name, -@@ -162,10 +126,10 @@ - - - // trackable->trackable_type -- if (world_storage_api_trackable__NULL == trackable->trackable_type) { -+ if (world_storage_api_trackable_type__NULL == trackable->trackable_type) { +--- trackable.c 2024-09-24 10:36:39.897514879 +0200 ++++ trackable_corrected.c 2024-09-24 10:33:09.037517067 +0200 +@@ -165,11 +165,18 @@ + if (world_storage_api_trackable__NULL == trackable->trackable_type) { goto fail; } - cJSON *trackable_type_local_JSON = trackable_type_convertToJSON(trackable->trackable_type); @@ -56,12 +9,20 @@ if(trackable_type_local_JSON == NULL) { goto fail; // custom } -@@ -217,10 +181,10 @@ - - - // trackable->unit -- if (world_storage_api_trackable__NULL == trackable->unit) { -+ if (world_storage_api_unit_system__NULL == trackable->unit) { +- cJSON_AddItemToObject(item, "trackableType", trackable_type_local_JSON); ++ char *type_str = cJSON_GetStringValue(trackable_type_local_JSON); ++ if (type_str == NULL) { ++ goto fail; ++ } ++ if (cJSON_AddStringToObject(item, "trackableType", type_str) == NULL) { ++ goto fail; ++ } ++ + if(item->child == NULL) { + goto fail; + } +@@ -220,11 +227,17 @@ + if (world_storage_api_trackable__NULL == trackable->unit) { goto fail; } - cJSON *unit_local_JSON = unit_system_convertToJSON(trackable->unit); @@ -69,7 +30,64 @@ if(unit_local_JSON == NULL) { goto fail; // custom } -@@ -342,7 +306,7 @@ +- cJSON_AddItemToObject(item, "unit", unit_local_JSON); ++ char *unit_str = cJSON_GetStringValue(unit_local_JSON); ++ if (unit_str == NULL) { ++ goto fail; ++ } ++ if (cJSON_AddStringToObject(item, "unit", unit_str) == NULL) { ++ goto fail; ++ } + if(item->child == NULL) { + goto fail; + } +@@ -249,22 +262,25 @@ + + + // trackable->keyvalue_tags +- if (!trackable->keyvalue_tags) { +- goto fail; +- } +- cJSON *keyvalue_tags = cJSON_AddObjectToObject(item, "keyvalueTags"); +- if(keyvalue_tags == NULL) { +- goto fail; //primitive map container +- } +- cJSON *localMapObject = keyvalue_tags; +- listEntry_t *keyvalue_tagsListEntry; + if (trackable->keyvalue_tags) { +- list_ForEach(keyvalue_tagsListEntry, trackable->keyvalue_tags) { +- keyValuePair_t *localKeyValue = (keyValuePair_t*)keyvalue_tagsListEntry->data; +- } ++ cJSON *keyvalue_tags_JSON = cJSON_CreateObject(); ++ listEntry_t *listEntry = NULL; ++ list_ForEach(listEntry, trackable->keyvalue_tags) { ++ ++ keyValuePair_t *pair = (keyValuePair_t *)listEntry->data; ++ if (pair && pair->value) { ++ cJSON *values_array = cJSON_CreateArray(); ++ listEntry_t *valueEntry = NULL; ++ list_ForEach(valueEntry, (list_t*)pair->value) { ++ char *value = (char *)valueEntry->data; ++ cJSON_AddItemToArray(values_array, cJSON_CreateString(value)); ++ } ++ cJSON_AddItemToObject(keyvalue_tags_JSON, pair->key, values_array); ++ } ++ } ++ cJSON_AddItemToObject(item, "keyvalueTags", keyvalue_tags_JSON); + } + +- + // trackable->confidence + if(trackable->confidence) { + if(cJSON_AddNumberToObject(item, "confidence", trackable->confidence) == NULL) { +@@ -336,13 +352,14 @@ + } + + // trackable->trackable_type ++ trackable_type_local_nonprim = (trackable_type_t *)malloc(sizeof(trackable_type_t)); + cJSON *trackable_type = cJSON_GetObjectItemCaseSensitive(trackableJSON, "trackableType"); + if (!trackable_type) { + goto end; } @@ -78,12 +96,99 @@ // trackable->trackable_encoding_information cJSON *trackable_encoding_information = cJSON_GetObjectItemCaseSensitive(trackableJSON, "trackableEncodingInformation"); -@@ -400,7 +364,7 @@ +@@ -394,13 +411,14 @@ } + // trackable->unit ++ unit_local_nonprim = (unit_system_t *)malloc(sizeof(unit_system_t)); + cJSON *unit = cJSON_GetObjectItemCaseSensitive(trackableJSON, "unit"); + if (!unit) { + goto end; + } +- - unit_local_nonprim = unit_system_parseFromJSON(unit); //custom ++ + *unit_local_nonprim = unit_system_unit_system_parseFromJSON(unit); //custom // trackable->trackable_size cJSON *trackable_size = cJSON_GetObjectItemCaseSensitive(trackableJSON, "trackableSize"); +@@ -432,24 +450,43 @@ + + // trackable->keyvalue_tags + cJSON *keyvalue_tags = cJSON_GetObjectItemCaseSensitive(trackableJSON, "keyvalueTags"); +- if (!keyvalue_tags) { +- goto end; +- } +- +- +- cJSON *keyvalue_tags_local_map = NULL; +- if(!cJSON_IsObject(keyvalue_tags) && !cJSON_IsNull(keyvalue_tags)) +- { +- goto end;//primitive map container +- } +- if(cJSON_IsObject(keyvalue_tags)) +- { ++ if (keyvalue_tags) { ++ if (!cJSON_IsObject(keyvalue_tags)) { ++ goto end; ++ } + keyvalue_tagsList = list_createList(); +- keyValuePair_t *localMapKeyPair; +- cJSON_ArrayForEach(keyvalue_tags_local_map, keyvalue_tags) +- { +- cJSON *localMapObject = keyvalue_tags_local_map; +- list_addElement(keyvalue_tagsList , localMapKeyPair); ++ if (!keyvalue_tagsList) { ++ goto end; ++ } ++ cJSON *key = NULL; ++ cJSON_ArrayForEach(key, keyvalue_tags) { ++ if (cJSON_IsArray(key)) { ++ list_t *valuesList = list_createList(); ++ if (!valuesList) { ++ goto end; ++ } ++ cJSON *value = NULL; ++ cJSON_ArrayForEach(value, key) { ++ if (cJSON_IsString(value)) { ++ char *valueString = strdup(value->valuestring); ++ if (!valueString) { ++ goto end; ++ } ++ list_addElement(valuesList, valueString); ++ } ++ } ++ keyValuePair_t *pair = malloc(sizeof(keyValuePair_t)); ++ if (!pair) { ++ goto end; ++ } ++ pair->key = strdup(key->string); ++ if (!pair->key) { ++ free(pair); ++ goto end; ++ } ++ pair->value = valuesList; ++ list_addElement(keyvalue_tagsList, pair); ++ } + } + } + +@@ -480,7 +517,7 @@ + return trackable_local_var; + end: + if (trackable_type_local_nonprim) { +- trackable_type_free(trackable_type_local_nonprim); ++ free(trackable_type_local_nonprim); + trackable_type_local_nonprim = NULL; + } + if (trackable_encoding_information_local_nonprim) { +@@ -497,7 +534,7 @@ + local_crsList = NULL; + } + if (unit_local_nonprim) { +- unit_system_free(unit_local_nonprim); ++ free(unit_local_nonprim); + unit_local_nonprim = NULL; + } + if (trackable_sizeList) { diff --git a/EtsiClientGen/patches/fixCTrackableType.patch b/EtsiClientGen/patches/fixCTrackableType.patch index e69de29..5e59767 100644 --- a/EtsiClientGen/patches/fixCTrackableType.patch +++ b/EtsiClientGen/patches/fixCTrackableType.patch @@ -0,0 +1,31 @@ +--- trackable_type.c 2024-09-24 10:41:35.625293525 +0200 ++++ trackable_type_corrected.c 2024-09-24 10:34:24.617518820 +0200 +@@ -23,8 +23,9 @@ + } + + cJSON *trackable_type_trackable_type_convertToJSON(world_storage_api_trackable_type__e trackable_type) { +- cJSON *item = cJSON_CreateObject(); +- if(cJSON_AddStringToObject(item, "trackable_type", trackable_type_trackable_type_ToString(trackable_type)) == NULL) { ++ cJSON *item =cJSON_CreateString(trackable_type_trackable_type_ToString(trackable_type));; ++ if(item == NULL) { ++ + goto fail; + } + return item; +@@ -34,13 +35,12 @@ + } + + world_storage_api_trackable_type__e trackable_type_trackable_type_parseFromJSON(cJSON *trackable_typeJSON) { +- world_storage_api_trackable_type__e *trackable_type = NULL; + world_storage_api_trackable_type__e trackable_typeVariable; +- cJSON *trackable_typeVar = cJSON_GetObjectItemCaseSensitive(trackable_typeJSON, "trackable_type"); +- if(!cJSON_IsString(trackable_typeVar) || (trackable_typeVar->valuestring == NULL)){ ++ if(!cJSON_IsString(trackable_typeJSON)){ ++ + goto end; + } +- trackable_typeVariable = trackable_type_trackable_type_FromString(trackable_typeVar->valuestring); ++ trackable_typeVariable = trackable_type_trackable_type_FromString(trackable_typeJSON->valuestring); + return trackable_typeVariable; + end: + return 0; diff --git a/EtsiClientGen/patches/fixCTypeWorldStorage.patch b/EtsiClientGen/patches/fixCTypeWorldStorage.patch new file mode 100644 index 0000000..df7e52f --- /dev/null +++ b/EtsiClientGen/patches/fixCTypeWorldStorage.patch @@ -0,0 +1,31 @@ +--- type_world_storage.c 2024-09-24 10:50:11.879568737 +0200 ++++ type_world_storage_corrected.c 2024-09-24 10:51:42.190336300 +0200 +@@ -23,8 +23,10 @@ + } + + cJSON *type_world_storage_type_world_storage_convertToJSON(world_storage_api_type_world_storage__e type_world_storage) { +- cJSON *item = cJSON_CreateObject(); +- if(cJSON_AddStringToObject(item, "type_world_storage", type_world_storage_type_world_storage_ToString(type_world_storage)) == NULL) { ++ cJSON *item = cJSON_CreateString(type_world_storage_type_world_storage_ToString(type_world_storage)); ++ if(item == NULL) { ++ ++ + goto fail; + } + return item; +@@ -34,13 +36,11 @@ + } + + world_storage_api_type_world_storage__e type_world_storage_type_world_storage_parseFromJSON(cJSON *type_world_storageJSON) { +- world_storage_api_type_world_storage__e *type_world_storage = NULL; + world_storage_api_type_world_storage__e type_world_storageVariable; +- cJSON *type_world_storageVar = cJSON_GetObjectItemCaseSensitive(type_world_storageJSON, "type_world_storage"); +- if(!cJSON_IsString(type_world_storageVar) || (type_world_storageVar->valuestring == NULL)){ ++ if(!cJSON_IsString(type_world_storageJSON)){ + goto end; + } +- type_world_storageVariable = type_world_storage_type_world_storage_FromString(type_world_storageVar->valuestring); ++ type_world_storageVariable = type_world_storage_type_world_storage_FromString(type_world_storageJSON->valuestring); + return type_world_storageVariable; + end: + return 0; diff --git a/EtsiClientGen/patches/fixCUnitSystem.patch b/EtsiClientGen/patches/fixCUnitSystem.patch new file mode 100644 index 0000000..2f9bdb8 --- /dev/null +++ b/EtsiClientGen/patches/fixCUnitSystem.patch @@ -0,0 +1,29 @@ +--- unit_system.c 2024-09-24 10:50:11.879568737 +0200 ++++ unit_system_corrected.c 2024-09-24 10:54:29.880310200 +0200 +@@ -23,8 +23,8 @@ + } + + cJSON *unit_system_unit_system_convertToJSON(world_storage_api_unit_system__e unit_system) { +- cJSON *item = cJSON_CreateObject(); +- if(cJSON_AddStringToObject(item, "unit_system", unit_system_unit_system_ToString(unit_system)) == NULL) { ++ cJSON *item = cJSON_CreateString(unit_system_unit_system_ToString(unit_system)); ++ if (item == NULL) { + goto fail; + } + return item; +@@ -34,13 +34,11 @@ + } + + world_storage_api_unit_system__e unit_system_unit_system_parseFromJSON(cJSON *unit_systemJSON) { +- world_storage_api_unit_system__e *unit_system = NULL; + world_storage_api_unit_system__e unit_systemVariable; +- cJSON *unit_systemVar = cJSON_GetObjectItemCaseSensitive(unit_systemJSON, "unit_system"); +- if(!cJSON_IsString(unit_systemVar) || (unit_systemVar->valuestring == NULL)){ ++ if(!cJSON_IsString(unit_systemJSON)){ + goto end; + } +- unit_systemVariable = unit_system_unit_system_FromString(unit_systemVar->valuestring); ++ unit_systemVariable = unit_system_unit_system_FromString(unit_systemJSON->valuestring); + return unit_systemVariable; + end: + return 0; diff --git a/EtsiClientGen/patches/fixCWorldAnchor.patch b/EtsiClientGen/patches/fixCWorldAnchor.patch new file mode 100644 index 0000000..5bac89f --- /dev/null +++ b/EtsiClientGen/patches/fixCWorldAnchor.patch @@ -0,0 +1,139 @@ +--- world_anchor.c 2024-09-24 10:36:39.937514888 +0200 ++++ world_anchor_corrected.c 2024-09-24 10:32:46.927512827 +0200 +@@ -146,11 +146,17 @@ + if (world_storage_api_world_anchor__NULL == world_anchor->unit) { + goto fail; + } +- cJSON *unit_local_JSON = unit_system_convertToJSON(world_anchor->unit); ++ cJSON *unit_local_JSON = unit_system_unit_system_convertToJSON(*world_anchor->unit); + if(unit_local_JSON == NULL) { + goto fail; // custom + } +- cJSON_AddItemToObject(item, "unit", unit_local_JSON); ++ char *unit_str = cJSON_GetStringValue(unit_local_JSON); ++ if (unit_str == NULL) { ++ goto fail; ++ } ++ if (cJSON_AddStringToObject(item, "unit", unit_str) == NULL) { ++ goto fail; ++ } + if(item->child == NULL) { + goto fail; + } +@@ -175,19 +181,23 @@ + + + // world_anchor->keyvalue_tags +- if (!world_anchor->keyvalue_tags) { +- goto fail; +- } +- cJSON *keyvalue_tags = cJSON_AddObjectToObject(item, "keyvalueTags"); +- if(keyvalue_tags == NULL) { +- goto fail; //primitive map container +- } +- cJSON *localMapObject = keyvalue_tags; +- listEntry_t *keyvalue_tagsListEntry; + if (world_anchor->keyvalue_tags) { +- list_ForEach(keyvalue_tagsListEntry, world_anchor->keyvalue_tags) { +- keyValuePair_t *localKeyValue = (keyValuePair_t*)keyvalue_tagsListEntry->data; +- } ++ cJSON *keyvalue_tags_JSON = cJSON_CreateObject(); ++ listEntry_t *listEntry = NULL; ++ list_ForEach(listEntry, world_anchor->keyvalue_tags) { ++ ++ keyValuePair_t *pair = (keyValuePair_t *)listEntry->data; ++ if (pair && pair->value) { ++ cJSON *values_array = cJSON_CreateArray(); ++ listEntry_t *valueEntry = NULL; ++ list_ForEach(valueEntry, (list_t*)pair->value) { ++ char *value = (char *)valueEntry->data; ++ cJSON_AddItemToArray(values_array, cJSON_CreateString(value)); ++ } ++ cJSON_AddItemToObject(keyvalue_tags_JSON, pair->key, values_array); ++ } ++ } ++ cJSON_AddItemToObject(item, "keyvalueTags", keyvalue_tags_JSON); + } + + return item; +@@ -276,13 +286,14 @@ + } + + // world_anchor->unit ++ unit_local_nonprim = (unit_system_t *)malloc(sizeof(unit_system_t)); + cJSON *unit = cJSON_GetObjectItemCaseSensitive(world_anchorJSON, "unit"); + if (!unit) { + goto end; + } + + +- unit_local_nonprim = unit_system_parseFromJSON(unit); //custom ++ *unit_local_nonprim = unit_system_unit_system_parseFromJSON(unit); //custom + + // world_anchor->world_anchor_size + cJSON *world_anchor_size = cJSON_GetObjectItemCaseSensitive(world_anchorJSON, "worldAnchorSize"); +@@ -314,28 +325,46 @@ + + // world_anchor->keyvalue_tags + cJSON *keyvalue_tags = cJSON_GetObjectItemCaseSensitive(world_anchorJSON, "keyvalueTags"); +- if (!keyvalue_tags) { +- goto end; +- } +- +- +- cJSON *keyvalue_tags_local_map = NULL; +- if(!cJSON_IsObject(keyvalue_tags) && !cJSON_IsNull(keyvalue_tags)) +- { +- goto end;//primitive map container +- } +- if(cJSON_IsObject(keyvalue_tags)) +- { ++ if (keyvalue_tags) { ++ if(!cJSON_IsObject(keyvalue_tags)) { ++ goto end; ++ } + keyvalue_tagsList = list_createList(); +- keyValuePair_t *localMapKeyPair; +- cJSON_ArrayForEach(keyvalue_tags_local_map, keyvalue_tags) +- { +- cJSON *localMapObject = keyvalue_tags_local_map; +- list_addElement(keyvalue_tagsList , localMapKeyPair); ++ if (!keyvalue_tagsList) { ++ goto end; ++ } ++ cJSON *key = NULL; ++ cJSON_ArrayForEach(key, keyvalue_tags) { ++ if (cJSON_IsArray(key)) { ++ list_t *valuesList = list_createList(); ++ if (!valuesList) { ++ goto end; ++ } ++ cJSON *value = NULL; ++ cJSON_ArrayForEach(value, key) { ++ if (cJSON_IsString(value)) { ++ char *valueString = strdup(value->valuestring); ++ if (!valueString) { ++ goto end; ++ } ++ list_addElement(valuesList, valueString); ++ } ++ } ++ keyValuePair_t *pair = malloc(sizeof(keyValuePair_t)); ++ if (!pair) { ++ goto end; ++ } ++ pair->key = strdup(key->string); ++ if (!pair->key) { ++ free(pair); ++ goto end; ++ } ++ pair->value = valuesList; ++ list_addElement(keyvalue_tagsList, pair); ++ } + } + } + +- + world_anchor_local_var = world_anchor_create ( + uuid && !cJSON_IsNull(uuid) ? strdup(uuid->valuestring) : NULL, + strdup(name->valuestring), diff --git a/EtsiClientGen/patches/fixCWorldAnchorAPI.patch b/EtsiClientGen/patches/fixCWorldAnchorsAPI.patch similarity index 100% rename from EtsiClientGen/patches/fixCWorldAnchorAPI.patch rename to EtsiClientGen/patches/fixCWorldAnchorsAPI.patch diff --git a/EtsiClientGen/patches/fixCWorldLink.patch b/EtsiClientGen/patches/fixCWorldLink.patch index a9b6a9b..9dda6a3 100644 --- a/EtsiClientGen/patches/fixCWorldLink.patch +++ b/EtsiClientGen/patches/fixCWorldLink.patch @@ -1,5 +1,5 @@ ---- world_link_origin.c 2024-05-17 23:43:30.883486119 +0200 -+++ world_link.c 2024-05-17 23:43:53.193634445 +0200 +--- world_link.c 2024-09-24 12:39:53.283530971 +0200 ++++ world_link_corrected.c 2024-09-24 12:39:28.875931800 +0200 @@ -4,58 +4,6 @@ #include "world_link.h" @@ -59,7 +59,7 @@ world_link_t *world_link_create( char *uuid, char *creator_uuid, -@@ -177,7 +125,7 @@ +@@ -177,28 +125,40 @@ // world_link->type_from @@ -67,17 +67,47 @@ + if (world_storage_api_type_world_storage__NULL == world_link->type_from) { goto fail; } - cJSON *type_from_local_JSON = type_world_storage_convertToJSON(world_link->type_from); -@@ -191,7 +139,7 @@ - +- cJSON *type_from_local_JSON = type_world_storage_convertToJSON(world_link->type_from); ++ cJSON *type_from_local_JSON = type_world_storage_type_world_storage_convertToJSON(*world_link->type_from); + if(type_from_local_JSON == NULL) { + goto fail; // custom + } +- cJSON_AddItemToObject(item, "typeFrom", type_from_local_JSON); ++ char *type_from_str = cJSON_GetStringValue(type_from_local_JSON); ++ if (type_from_str == NULL) { ++ goto fail; ++ } ++ if (cJSON_AddStringToObject(item, "typeFrom", type_from_str) == NULL) { ++ goto fail; ++ } + if(item->child == NULL) { + goto fail; + } +- // world_link->type_to - if (world_storage_api_world_link__NULL == world_link->type_to) { + if (world_storage_api_type_world_storage__NULL == world_link->type_to) { goto fail; } - cJSON *type_to_local_JSON = type_world_storage_convertToJSON(world_link->type_to); -@@ -223,7 +171,7 @@ +- cJSON *type_to_local_JSON = type_world_storage_convertToJSON(world_link->type_to); ++ cJSON *type_to_local_JSON = type_world_storage_type_world_storage_convertToJSON(*world_link->type_to); + if(type_to_local_JSON == NULL) { + goto fail; // custom + } +- cJSON_AddItemToObject(item, "typeTo", type_to_local_JSON); ++ char *type_to_str = cJSON_GetStringValue(type_to_local_JSON); ++ if (type_to_str == NULL) { ++ goto fail; ++ } ++ if (cJSON_AddStringToObject(item, "typeTo", type_to_str) == NULL) { ++ goto fail; ++ } ++ + if(item->child == NULL) { + goto fail; + } +@@ -223,33 +183,44 @@ // world_link->unit @@ -85,4 +115,159 @@ + if (world_storage_api_unit_system__NULL == world_link->unit) { goto fail; } - cJSON *unit_local_JSON = unit_system_convertToJSON(world_link->unit); +- cJSON *unit_local_JSON = unit_system_convertToJSON(world_link->unit); ++ cJSON *unit_local_JSON = unit_system_unit_system_convertToJSON(*world_link->unit); + if(unit_local_JSON == NULL) { + goto fail; // custom + } +- cJSON_AddItemToObject(item, "unit", unit_local_JSON); ++ char *unit_str = cJSON_GetStringValue(unit_local_JSON); ++ if (unit_str == NULL) { ++ goto fail; ++ } ++ if (cJSON_AddStringToObject(item, "unit", unit_str) == NULL) { ++ goto fail; ++ } ++ + if(item->child == NULL) { + goto fail; + } + + + // world_link->keyvalue_tags +- if (!world_link->keyvalue_tags) { +- goto fail; +- } +- cJSON *keyvalue_tags = cJSON_AddObjectToObject(item, "keyvalueTags"); +- if(keyvalue_tags == NULL) { +- goto fail; //primitive map container +- } +- cJSON *localMapObject = keyvalue_tags; +- listEntry_t *keyvalue_tagsListEntry; + if (world_link->keyvalue_tags) { +- list_ForEach(keyvalue_tagsListEntry, world_link->keyvalue_tags) { +- keyValuePair_t *localKeyValue = (keyValuePair_t*)keyvalue_tagsListEntry->data; +- } ++ cJSON *keyvalue_tags_JSON = cJSON_CreateObject(); ++ listEntry_t *listEntry = NULL; ++ list_ForEach(listEntry, world_link->keyvalue_tags) { ++ ++ keyValuePair_t *pair = (keyValuePair_t *)listEntry->data; ++ if (pair && pair->value) { ++ cJSON *values_array = cJSON_CreateArray(); ++ listEntry_t *valueEntry = NULL; ++ list_ForEach(valueEntry, (list_t*)pair->value) { ++ char *value = (char *)valueEntry->data; ++ cJSON_AddItemToArray(values_array, cJSON_CreateString(value)); ++ } ++ cJSON_AddItemToObject(keyvalue_tags_JSON, pair->key, values_array); ++ } ++ } ++ cJSON_AddItemToObject(item, "keyvalueTags", keyvalue_tags_JSON); + } + + return item; +@@ -325,22 +296,24 @@ + } + + // world_link->type_from ++ type_from_local_nonprim = (type_world_storage_t *)malloc(sizeof(type_world_storage_t)); + cJSON *type_from = cJSON_GetObjectItemCaseSensitive(world_linkJSON, "typeFrom"); + if (!type_from) { + goto end; + } + + +- type_from_local_nonprim = type_world_storage_parseFromJSON(type_from); //custom ++ *type_from_local_nonprim = type_world_storage_type_world_storage_parseFromJSON(type_from); //custom + + // world_link->type_to ++ type_to_local_nonprim = (type_world_storage_t *)malloc(sizeof(type_world_storage_t)); + cJSON *type_to = cJSON_GetObjectItemCaseSensitive(world_linkJSON, "typeTo"); + if (!type_to) { + goto end; + } + + +- type_to_local_nonprim = type_world_storage_parseFromJSON(type_to); //custom ++ *type_to_local_nonprim = type_world_storage_type_world_storage_parseFromJSON(type_to); //custom + + // world_link->transform + cJSON *transform = cJSON_GetObjectItemCaseSensitive(world_linkJSON, "transform"); +@@ -371,38 +344,57 @@ + } + + // world_link->unit ++ unit_local_nonprim = (unit_system_t *)malloc(sizeof(unit_system_t)); + cJSON *unit = cJSON_GetObjectItemCaseSensitive(world_linkJSON, "unit"); + if (!unit) { + goto end; + } + + +- unit_local_nonprim = unit_system_parseFromJSON(unit); //custom ++ *unit_local_nonprim = unit_system_unit_system_parseFromJSON(unit); //custom + + // world_link->keyvalue_tags + cJSON *keyvalue_tags = cJSON_GetObjectItemCaseSensitive(world_linkJSON, "keyvalueTags"); +- if (!keyvalue_tags) { +- goto end; +- } +- +- +- cJSON *keyvalue_tags_local_map = NULL; +- if(!cJSON_IsObject(keyvalue_tags) && !cJSON_IsNull(keyvalue_tags)) +- { +- goto end;//primitive map container +- } +- if(cJSON_IsObject(keyvalue_tags)) +- { ++ if (keyvalue_tags) { ++ if (!cJSON_IsObject(keyvalue_tags)) { ++ goto end; ++ } + keyvalue_tagsList = list_createList(); +- keyValuePair_t *localMapKeyPair; +- cJSON_ArrayForEach(keyvalue_tags_local_map, keyvalue_tags) +- { +- cJSON *localMapObject = keyvalue_tags_local_map; +- list_addElement(keyvalue_tagsList , localMapKeyPair); ++ if (!keyvalue_tagsList) { ++ goto end; ++ } ++ cJSON *key = NULL; ++ cJSON_ArrayForEach(key, keyvalue_tags) { ++ if (cJSON_IsArray(key)) { ++ list_t *valuesList = list_createList(); ++ if (!valuesList) { ++ goto end; ++ } ++ cJSON *value = NULL; ++ cJSON_ArrayForEach(value, key) { ++ if (cJSON_IsString(value)) { ++ char *valueString = strdup(value->valuestring); ++ if (!valueString) { ++ goto end; ++ } ++ list_addElement(valuesList, valueString); ++ } ++ } ++ keyValuePair_t *pair = malloc(sizeof(keyValuePair_t)); ++ if (!pair) { ++ goto end; ++ } ++ pair->key = strdup(key->string); ++ if (!pair->key) { ++ free(pair); ++ goto end; ++ } ++ pair->value = valuesList; ++ list_addElement(keyvalue_tagsList, pair); ++ } + } + } + +- + world_link_local_var = world_link_create ( + uuid && !cJSON_IsNull(uuid) ? strdup(uuid->valuestring) : NULL, + strdup(creator_uuid->valuestring), diff --git a/EtsiClientGen/patches/fixCWorldLinkAPI.patch b/EtsiClientGen/patches/fixCWorldLinkAPI.patch deleted file mode 100644 index 39f5867..0000000 --- a/EtsiClientGen/patches/fixCWorldLinkAPI.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- WorldLinksAPI.c 2024-09-02 13:42:52.254209754 +0200 -+++ WorldLinksAPI_corrected.c 2024-09-02 13:41:49.032856993 +0200 -@@ -156,15 +156,6 @@ - sprintf(localVarToReplace_worldLinkUUID, "{%s}", "worldLinkUUID"); - - localVarPath = strReplace(localVarPath, localVarToReplace_worldLinkUUID, worldLinkUUID); -- if(worldLinkUUID == NULL) { -- goto end; -- } -- char* localVarToReplace_worldLinkUUID = malloc(sizeOfPathParams_worldLinkUUID); -- sprintf(localVarToReplace_worldLinkUUID, "{%s}", "worldLinkUUID"); -- -- localVarPath = strReplace(localVarPath, localVarToReplace_worldLinkUUID, worldLinkUUID); -- -- - - // header parameters - char *keyHeader_token = NULL; -@@ -266,16 +257,7 @@ - sprintf(localVarToReplace_worldLinkUUID, "{%s}", "worldLinkUUID"); - - localVarPath = strReplace(localVarPath, localVarToReplace_worldLinkUUID, worldLinkUUID); -- if(worldLinkUUID == NULL) { -- goto end; -- } -- char* localVarToReplace_worldLinkUUID = malloc(sizeOfPathParams_worldLinkUUID); -- sprintf(localVarToReplace_worldLinkUUID, "{%s}", "worldLinkUUID"); -- -- localVarPath = strReplace(localVarPath, localVarToReplace_worldLinkUUID, worldLinkUUID); -- -- -- -+ - // header parameters - char *keyHeader_token = NULL; - char * valueHeader_token = 0; diff --git a/EtsiClientGen/patches/fixCWorldLinksAPI.patch b/EtsiClientGen/patches/fixCWorldLinksAPI.patch index 5f603b6..fce3fa7 100644 --- a/EtsiClientGen/patches/fixCWorldLinksAPI.patch +++ b/EtsiClientGen/patches/fixCWorldLinksAPI.patch @@ -1,5 +1,5 @@ ---- WorldLinksAPI.c 2024-09-17 23:30:43.463539480 +0200 -+++ WorldLinksAPI_corrected.c 2024-09-17 23:30:37.923482059 +0200 +--- WorldLinksAPI.c 2024-09-24 15:47:06.664747821 +0200 ++++ WorldLinksAPI_corrected.c 2024-09-24 15:46:51.276018300 +0200 @@ -156,16 +156,7 @@ sprintf(localVarToReplace_worldLinkUUID, "{%s}", "worldLinkUUID"); @@ -18,7 +18,7 @@ // header parameters char *keyHeader_token = NULL; char * valueHeader_token = 0; -@@ -266,15 +257,6 @@ +@@ -270,15 +261,6 @@ sprintf(localVarToReplace_worldLinkUUID, "{%s}", "worldLinkUUID"); localVarPath = strReplace(localVarPath, localVarToReplace_worldLinkUUID, worldLinkUUID); diff --git a/EtsiClientGen/patches/fixCommonOpenAPI.patch b/EtsiClientGen/patches/fixCommonOpenAPI.patch new file mode 100644 index 0000000..4dba501 --- /dev/null +++ b/EtsiClientGen/patches/fixCommonOpenAPI.patch @@ -0,0 +1,107 @@ +diff --git a/API/common/commonopenapi.yaml b/API/common/commonopenapi.yaml +index 138ff61..28abc48 100644 +--- a/API/common/commonopenapi.yaml ++++ b/API/common/commonopenapi.yaml +@@ -101,7 +101,7 @@ components: + type: string + example: "Success 2xx" + +- Error: ++ ErrorMessage: + type: object + properties: + message: +@@ -205,7 +205,7 @@ components: + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + example: "Bad request" + + 400_InvalidUUID: +@@ -213,7 +213,7 @@ components: + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + example: "The format of the UUID is incorrect" + + 401_NullResponse: +@@ -221,7 +221,7 @@ components: + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + example: "Null response" + + 403_Forbidden: +@@ -229,7 +229,7 @@ components: + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + example: "Not allowed" + + 404_NotFound: +@@ -237,7 +237,7 @@ components: + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + example: "Not found" + + 404_NotFoundUUID: +@@ -245,7 +245,7 @@ components: + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + example: "Element not found" + + 405_NotSupported: +@@ -253,7 +253,7 @@ components: + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + example: "Not supported" + + 4xx_UnexpectedError: # Can be referenced as '#/components/responses/GenericError' +@@ -261,14 +261,14 @@ components: + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + + 409_NotEmptyUUID: + description: Invalid UUID, id must be a Nil value. + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + example: "The element you sent has already a value and can't be sent to the world storage" + + ######################## +@@ -279,11 +279,11 @@ components: + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' + + 5xx_UnexpectedError: + description: Unexpected server error. + content: + application/json: + schema: +- $ref: '#/components/schemas/Error' ++ $ref: '#/components/schemas/ErrorMessage' diff --git a/EtsiClientGen/patches/fixHeaderError.patch b/EtsiClientGen/patches/fixHeaderError.patch deleted file mode 100644 index a66ab2f..0000000 --- a/EtsiClientGen/patches/fixHeaderError.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- error_origin.h 2024-05-28 14:41:34.817357145 +0200 -+++ error.h 2024-05-21 17:10:12.662278000 +0200 -@@ -13,27 +13,27 @@ - #include "../include/keyValuePair.h" - #include "../include/binary.h" - --typedef struct error_t error_t; -+typedef struct error__t error__t; - - - - --typedef struct error_t { -+typedef struct error__t { - int code; //numeric - char *message; // string - --} error_t; -+} error__t; - --error_t *error_create( -+error__t *error_create( - int code, - char *message - ); - --void error_free(error_t *error); -+void error_free(error__t *error); - --error_t *error_parseFromJSON(cJSON *errorJSON); -+error__t *error_parseFromJSON(cJSON *errorJSON); - --cJSON *error_convertToJSON(error_t *error); -+cJSON *error_convertToJSON(error__t *error); - - #endif /* _error_H_ */ - diff --git a/EtsiClientGen/patches/fixHeaderTrackableType.patch b/EtsiClientGen/patches/fixHeaderTrackableType.patch index ffd6214..97579f8 100644 --- a/EtsiClientGen/patches/fixHeaderTrackableType.patch +++ b/EtsiClientGen/patches/fixHeaderTrackableType.patch @@ -1,15 +1,14 @@ ---- trackable_type_origin.h 2024-05-28 14:41:34.877357153 +0200 -+++ trackable_type.h 2024-05-22 17:57:49.859596000 +0200 -@@ -13,20 +13,20 @@ +--- trackable_type.h 2024-09-24 10:41:35.615292793 +0200 ++++ trackable_type_corrected.h 2024-09-24 10:34:14.237518388 +0200 +@@ -13,20 +13,18 @@ #include "../include/keyValuePair.h" #include "../include/binary.h" -typedef struct trackable_type_t trackable_type_t; +- +- + // Enum for trackable_type - --// Enum for trackable_type - -+// Enum for trackable_type typedef enum { world_storage_api_trackable_type__NULL = 0, world_storage_api_trackable_type__FIDUCIAL_MARKER, world_storage_api_trackable_type__IMAGE_MARKER, world_storage_api_trackable_type__MESH, world_storage_api_trackable_type__MAP, world_storage_api_trackable_type__GEOPOSE, world_storage_api_trackable_type__OTHER } world_storage_api_trackable_type__e; +typedef world_storage_api_trackable_type__e trackable_type_t; diff --git a/EtsiClientGen/patches/fixHeaderTypeWorldStorage.patch b/EtsiClientGen/patches/fixHeaderTypeWorldStorage.patch new file mode 100644 index 0000000..b2cb24a --- /dev/null +++ b/EtsiClientGen/patches/fixHeaderTypeWorldStorage.patch @@ -0,0 +1,26 @@ +--- type_world_storage.h 2024-09-24 10:50:11.879568737 +0200 ++++ type_world_storage_corrected.h 2024-09-24 10:53:25.510780600 +0200 +@@ -13,20 +13,18 @@ + #include "../include/keyValuePair.h" + #include "../include/binary.h" + +-typedef struct type_world_storage_t type_world_storage_t; +- +- + // Enum for type_world_storage + + typedef enum { world_storage_api_type_world_storage__NULL = 0, world_storage_api_type_world_storage__TRACKABLE, world_storage_api_type_world_storage__ANCHOR, world_storage_api_type_world_storage__UNKNOWN } world_storage_api_type_world_storage__e; ++typedef world_storage_api_type_world_storage__e type_world_storage_t; + + char* type_world_storage_type_world_storage_ToString(world_storage_api_type_world_storage__e type_world_storage); + + world_storage_api_type_world_storage__e type_world_storage_type_world_storage_FromString(char* type_world_storage); + +-//cJSON *type_world_storage_type_world_storage_convertToJSON(world_storage_api_type_world_storage__e type_world_storage); ++cJSON *type_world_storage_type_world_storage_convertToJSON(world_storage_api_type_world_storage__e type_world_storage); + +-//world_storage_api_type_world_storage__e type_world_storage_type_world_storage_parseFromJSON(cJSON *type_world_storageJSON); ++world_storage_api_type_world_storage__e type_world_storage_type_world_storage_parseFromJSON(cJSON *type_world_storageJSON); + + #endif /* _type_world_storage_H_ */ + diff --git a/EtsiClientGen/patches/fixHeaderUnitSystem.patch b/EtsiClientGen/patches/fixHeaderUnitSystem.patch index 6ee54be..5571f0e 100644 --- a/EtsiClientGen/patches/fixHeaderUnitSystem.patch +++ b/EtsiClientGen/patches/fixHeaderUnitSystem.patch @@ -1,6 +1,6 @@ ---- unit_system_origin.h 2024-05-28 14:41:34.887357155 +0200 -+++ unit_system.h 2024-05-22 18:37:07.017974000 +0200 -@@ -13,20 +13,17 @@ +--- unit_system.h 2024-09-24 10:41:35.635294256 +0200 ++++ unit_system_corrected.h 2024-09-22 21:05:43.053799949 +0200 +@@ -13,20 +13,18 @@ #include "../include/keyValuePair.h" #include "../include/binary.h" @@ -8,7 +8,7 @@ - - // Enum for unit_system -- + typedef enum { world_storage_api_unit_system__NULL = 0, world_storage_api_unit_system__MM, world_storage_api_unit_system__CM, world_storage_api_unit_system__DM, world_storage_api_unit_system__M, world_storage_api_unit_system__DAM, world_storage_api_unit_system__HM, world_storage_api_unit_system__KM, world_storage_api_unit_system__INCH, world_storage_api_unit_system__FOOT, world_storage_api_unit_system__YARD, world_storage_api_unit_system__MILE } world_storage_api_unit_system__e; +typedef world_storage_api_unit_system__e unit_system_t; diff --git a/arf005 b/arf005 index 5734880..7e50e43 160000 --- a/arf005 +++ b/arf005 @@ -1 +1 @@ -Subproject commit 5734880080c52572af65fe6d2703228ed6ee5653 +Subproject commit 7e50e43e90a8dcd958944e8e9ceda05c7668db48 diff --git a/package.json b/package.json index 24b8bbf..98b9d6a 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,14 @@ "Last change: June 2024" ], "name": "worldstoragecclient", - "version": "2.1.0", + "version": "2.0.0", "description": "ISG ARF World Storage C client based on libcurl", "main": "index.js", "scripts": { - "generate": "cd EtsiClientGen && java -jar /usr/local/lib/node_modules/@openapitools/openapi-generator-cli/versions/7.5.0.jar generate -i ../arf005/API/worldstorage/worldstorageopenapi.yaml --skip-validate-spec -g c -o . && cd patches && ./applyPatches.sh", + "generate": "cd EtsiClientGen && ./patches/applyYamlPatch.sh && java -jar /usr/local/lib/node_modules/@openapitools/openapi-generator-cli/versions/7.5.0.jar generate -i ../arf005/API/worldstorage/worldstorageopenapi.yaml --skip-validate-spec -g c -o . && cd patches && ./applyPatches.sh && sudo mv -f ../../arf005/API/common/commonopenapiOriginal.yaml ../../arf005/API/common/commonopenapi.yaml", "dependencies": "", - "build": "cd EtsiClientGen && conan install . --build=missing -s build_type=Debug && cd build && cmake -DCMAKE_BUILD_TYPE=Debug .. --preset conan-debug && cd Debug && cmake --build . && sudo make install" + "build": "cd EtsiClientGen && conan install . --build=missing && cd build && cmake .. --preset conan-release && cd Release && cmake --build . && sudo make install", + "buildDebug": "cd EtsiClientGen && conan install -s build_type=Debug . --build=missing && cd build && cmake .. --preset conan-debug && cd Debug && cmake --build . --config Debug && sudo make install" }, "generator-cli": { "version": "7.5.0" -- GitLab