diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-08-05 18:15:53 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2019-08-12 12:23:11 +0200 |
commit | 8c08ae193531b6f9c86f58764af598016b696260 (patch) | |
tree | 50fd8538d722c264523b515f59f967ecc59e3a05 /src | |
parent | 660e714874277031d74ee81c802e4a948cbd0981 (diff) |
Optimize hal 'info' response json allocation
Optimize hal 'info' response json allocation by removing
empty objects/arrays from response.
BUG-AGL: SPEC-2733
Change-Id: I521626b67076b603ab1caa974b697246c8fff759
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to 'src')
-rw-r--r-- | src/4a-internals-hal/4a-internals-hal-cb.c | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/src/4a-internals-hal/4a-internals-hal-cb.c b/src/4a-internals-hal/4a-internals-hal-cb.c index 71bf464..cc8fea5 100644 --- a/src/4a-internals-hal/4a-internals-hal-cb.c +++ b/src/4a-internals-hal/4a-internals-hal-cb.c @@ -1276,8 +1276,6 @@ int InternalHalHalDependenciesConfig(afb_api_t apiHandle, CtlSectionT *section, void InternalHalInfo(afb_req_t request) { - int wrapRet; - char *apiToCall, *returnedError = NULL, *returnedInfo = NULL; afb_api_t apiHandle; @@ -1334,40 +1332,28 @@ void InternalHalInfo(afb_req_t request) return; } - dependenciesArray = HalUtlGetJsonArrayForAvailableDependencies(apiHandle, - ¤tHalData->internalHalData->probedDevicesListHead, - DEPENDENCY_FULL_JSON); - if(! dependenciesArray) { - afb_req_fail(request, "dependencies_data", "Didn't succeed to generate dependencies data array"); - return; - } + requestAnswer = json_object_new_object(); + + dependenciesArray = HalUtlGetJsonArrayForAllDependencies(apiHandle, + ¤tHalData->internalHalData->probedDevicesListHead, + DEPENDENCY_FULL_JSON); + if(dependenciesArray) + json_object_object_add(requestAnswer, "dependencies", dependenciesArray); streamsArray = HalUtlGetJsonArrayForAllMixersData(apiHandle, ¤tHalData->internalHalData->streamsDataListHead); - if(! streamsArray) { - afb_req_fail(request, "streams_data", "Didn't succeed to generate streams data array"); - return; - } + if(! streamsArray) + streamsArray = json_object_new_array(); // Always return an array for 4a-hl-api (to prevent segfault) + json_object_object_add(requestAnswer, "streams", streamsArray); controlsArray = HalUtGetJsonArrayForAllHalMapControls(apiHandle, ¤tHalData->internalHalData->halMapListHead); - if(! controlsArray) { - afb_req_fail(request, "controls_data", "Didn't succeed to generate controls data array"); - return; - } + if(controlsArray) + json_object_object_add(requestAnswer, "controls", controlsArray); - wrapRet = wrap_json_pack(&requestAnswer, - "{s:o s:o s:o}", - "streams", streamsArray, - "controls", controlsArray, - "dependencies", dependenciesArray); - if(wrapRet) { - afb_req_fail(request, - "halinfo_json_object", - "Didn't succeed to allocate hal info response json object"); - json_object_put(streamsArray); - json_object_put(controlsArray); - return; + if(! json_object_get_object(requestAnswer)->count) { + json_object_put(requestAnswer); + requestAnswer = NULL; } afb_req_success(request, requestAnswer, "Requested data"); |