aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJonathan Aillet <jonathan.aillet@iot.bzh>2019-08-05 18:15:53 +0200
committerJonathan Aillet <jonathan.aillet@iot.bzh>2019-08-12 12:23:11 +0200
commit8c08ae193531b6f9c86f58764af598016b696260 (patch)
tree50fd8538d722c264523b515f59f967ecc59e3a05 /src
parent660e714874277031d74ee81c802e4a948cbd0981 (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.c44
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,
- &currentHalData->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,
+ &currentHalData->internalHalData->probedDevicesListHead,
+ DEPENDENCY_FULL_JSON);
+ if(dependenciesArray)
+ json_object_object_add(requestAnswer, "dependencies", dependenciesArray);
streamsArray = HalUtlGetJsonArrayForAllMixersData(apiHandle,
&currentHalData->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,
&currentHalData->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");