aboutsummaryrefslogtreecommitdiffstats
path: root/4a-hal-utilities
diff options
context:
space:
mode:
authorJonathan Aillet <jonathan.aillet@iot.bzh>2019-01-23 13:56:06 +0100
committerJonathan Aillet <jonathan.aillet@iot.bzh>2019-01-28 15:38:58 +0100
commit2b558bb1ec9f854769c556e84735e7dcd3a295e8 (patch)
treeb88875e5cff3759be7bb8c93e61fd892b16ced8e /4a-hal-utilities
parent20a22fadf78660394ca2ce8354530306288578fc (diff)
Migrate to newer application framework calls
Migrate from 'afb_api_call_sync_legacy' function to 'afb_api_call_sync' function, therefore, handle function return and response json differently from before. Change-Id: Ia7fb42188b8d41e22db2d824459a0d10ed6d6a8e Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to '4a-hal-utilities')
-rw-r--r--4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.c148
-rw-r--r--4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h45
-rw-r--r--4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c68
-rw-r--r--4a-hal-utilities/CMakeLists.txt1
4 files changed, 36 insertions, 226 deletions
diff --git a/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.c b/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.c
deleted file mode 100644
index bf88571..0000000
--- a/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2018 "IoT.bzh"
- * Author Jonathan Aillet <jonathan.aillet@iot.bzh>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <string.h>
-
-#include <afb/afb-binding.h>
-
-#include "4a-hal-utilities-appfw-responses-handler.h"
-
-/*******************************************************************************
- * Handle application framework response function *
- ******************************************************************************/
-
-enum CallError HalUtlHandleAppFwCallError(afb_api_t apiHandle, char *apiCalled, char *verbCalled, json_object *callReturnJ, char **returnedStatus, char **returnedInfo)
-{
- json_object *returnedRequestJ, *returnedStatusJ, *returnedInfoJ;
-
- if(! apiHandle || ! apiCalled || ! verbCalled || ! callReturnJ)
- return CALL_ERROR_INVALID_ARGS;
-
- if(! json_object_object_get_ex(callReturnJ, "request", &returnedRequestJ)) {
- AFB_API_WARNING(apiHandle, "Couldn't get response request object");
- return CALL_ERROR_REQUEST_UNAVAILABLE;
- }
-
- if(! json_object_is_type(returnedRequestJ, json_type_object)) {
- AFB_API_WARNING(apiHandle, "Response request object is not valid");
- return CALL_ERROR_REQUEST_NOT_VALID;
- }
-
- if(! json_object_object_get_ex(returnedRequestJ, "status", &returnedStatusJ)) {
- AFB_API_WARNING(apiHandle, "Couldn't get response status object");
- return CALL_ERROR_REQUEST_STATUS_UNAVAILABLE;
- }
-
- if(! json_object_is_type(returnedStatusJ, json_type_string)) {
- AFB_API_WARNING(apiHandle, "Response status object is not valid");
- return CALL_ERROR_REQUEST_STATUS_NOT_VALID;
- }
-
- *returnedStatus = (char *) json_object_get_string(returnedStatusJ);
-
- if(! strcmp(*returnedStatus, "unknown-api")) {
- AFB_API_WARNING(apiHandle, "Api %s not found", apiCalled);
- return CALL_ERROR_API_UNAVAILABLE;
- }
-
- if(! strcmp(*returnedStatus, "unknown-verb")) {
- AFB_API_WARNING(apiHandle, "Verb %s of api %s not found", verbCalled, apiCalled);
- return CALL_ERROR_VERB_UNAVAILABLE;
- }
-
- if(! json_object_object_get_ex(returnedRequestJ, "info", &returnedInfoJ)) {
- AFB_API_WARNING(apiHandle, "Couldn't get response info object");
- return CALL_ERROR_REQUEST_INFO_UNAVAILABLE;
- }
-
- if(! json_object_is_type(returnedInfoJ, json_type_string)) {
- AFB_API_WARNING(apiHandle, "Response info object is not valid");
- return CALL_ERROR_REQUEST_INFO_NOT_VALID;
- }
-
- *returnedInfo = (char *) json_object_get_string(returnedInfoJ);
-
- AFB_API_WARNING(apiHandle,
- "Api %s and verb %s found, but this error was raised : '%s' with this info : '%s'",
- apiCalled,
- verbCalled,
- *returnedStatus,
- *returnedInfo);
-
- return CALL_ERROR_RETURNED;
-}
-
-void HalUtlHandleAppFwCallErrorInRequest(afb_req_t request, char *apiCalled, char *verbCalled, json_object *callReturnJ, char *errorStatusToSend)
-{
- char *returnedStatus = NULL, *returnedInfo = NULL;
-
- afb_api_t apiHandle;
-
- if(! request || ! apiCalled || ! verbCalled || ! callReturnJ) {
- afb_req_fail_f(request, "invalid_args", "Invalid arguments");
- return;
- }
-
- if(! (apiHandle = afb_req_get_api(request))) {
- afb_req_fail_f(request, "api_handle", "Can't get hal manager api handle");
- return;
- }
-
- switch(HalUtlHandleAppFwCallError(apiHandle, apiCalled, verbCalled, callReturnJ, &returnedStatus, &returnedInfo)) {
- case CALL_ERROR_REQUEST_UNAVAILABLE:
- case CALL_ERROR_REQUEST_NOT_VALID:
- case CALL_ERROR_REQUEST_STATUS_UNAVAILABLE:
- case CALL_ERROR_REQUEST_STATUS_NOT_VALID:
- case CALL_ERROR_REQUEST_INFO_UNAVAILABLE:
- case CALL_ERROR_REQUEST_INFO_NOT_VALID:
- afb_req_fail(request, errorStatusToSend, "Error with response object");
- return;
-
- case CALL_ERROR_API_UNAVAILABLE:
- afb_req_fail_f(request, errorStatusToSend, "Api %s not found", apiCalled);
- return;
-
- case CALL_ERROR_VERB_UNAVAILABLE:
- afb_req_fail_f(request, errorStatusToSend, "Verb %s of api %s not found", verbCalled, apiCalled);
- return;
-
- case CALL_ERROR_RETURNED:
- afb_req_fail_f(request,
- errorStatusToSend,
- "Api %s and verb %s found, but this error was raised : '%s' with this info : '%s'",
- apiCalled,
- verbCalled,
- returnedStatus ? returnedStatus : "not returned",
- returnedInfo ? returnedInfo : "not returned");
- return;
-
- case CALL_ERROR_INVALID_ARGS:
- afb_req_fail_f(request,
- errorStatusToSend,
- "Api %s and verb %s found, but the arguments are invalid",
- apiCalled,
- verbCalled);
- return;
-
- default:
- afb_req_fail_f(request, errorStatusToSend, "Unknown error happened during call to verb %s of api %s", verbCalled, apiCalled);
- return;
- }
-} \ No newline at end of file
diff --git a/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h b/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h
deleted file mode 100644
index 2bdbaab..0000000
--- a/4a-hal-utilities/4a-hal-utilities-appfw-responses-handler.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2018 "IoT.bzh"
- * Author Jonathan Aillet <jonathan.aillet@iot.bzh>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _HAL_UTILITIES_APPFW_RESP_HANDLER_INCLUDE_
-#define _HAL_UTILITIES_APPFW_RESP_HANDLER_INCLUDE_
-
-#include <stdio.h>
-
-#include <wrap-json.h>
-
-#include <afb/afb-binding.h>
-
-// Enum for the type of error detected
-enum CallError {
- CALL_ERROR_INVALID_ARGS=-1,
- CALL_ERROR_REQUEST_UNAVAILABLE=-2,
- CALL_ERROR_REQUEST_NOT_VALID=-3,
- CALL_ERROR_REQUEST_STATUS_UNAVAILABLE=-4,
- CALL_ERROR_REQUEST_STATUS_NOT_VALID=-5,
- CALL_ERROR_API_UNAVAILABLE=-6,
- CALL_ERROR_VERB_UNAVAILABLE=-7,
- CALL_ERROR_REQUEST_INFO_UNAVAILABLE=-8,
- CALL_ERROR_REQUEST_INFO_NOT_VALID=-9,
- CALL_ERROR_RETURNED=-10,
-};
-
-// Handle application framework response function
-extern enum CallError HalUtlHandleAppFwCallError(afb_api_t apiHandle, char *apiCalled, char *verbCalled, json_object *callReturnJ, char **returnedStatus, char **returnedInfo);
-void HalUtlHandleAppFwCallErrorInRequest(afb_req_t request, char *apiCalled, char *verbCalled, json_object *callReturnJ, char *errorStatusToSend);
-
-#endif /* _HAL_UTILITIES_APPFW_RESP_HANDLER_INCLUDE_ */ \ No newline at end of file
diff --git a/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c b/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c
index 9f23787..3f30436 100644
--- a/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c
+++ b/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c
@@ -25,7 +25,6 @@
#include <ctl-config.h>
#include "4a-hal-utilities-data.h"
-#include "4a-hal-utilities-appfw-responses-handler.h"
#include "4a-hal-utilities-hal-streams-handler.h"
/*******************************************************************************
@@ -36,7 +35,7 @@ void HalUtlActionOnMixer(afb_req_t request, enum ActionOnMixerType actionType)
{
int idx, count;
- char *apiToCall;
+ char *apiToCall, *returnedError = NULL, *returnedInfo = NULL;
afb_api_t apiHandle;
CtlConfigT *ctrlConfig;
@@ -44,7 +43,7 @@ void HalUtlActionOnMixer(afb_req_t request, enum ActionOnMixerType actionType)
struct SpecificHalData *currentCtlHalData;
struct CtlHalMixerData *currentMixerData = NULL;
- json_object *requestJson, *returnJ = NULL, *responseJ, *toReturnJ = NULL;
+ json_object *requestJson, *responseJ = NULL, *toReturnJ = NULL;
if(! (apiHandle = afb_req_get_api(request))) {
afb_req_fail(request, "api_handle", "Can't get current hal controller api handle");
@@ -98,32 +97,48 @@ void HalUtlActionOnMixer(afb_req_t request, enum ActionOnMixerType actionType)
break;
default:
- afb_req_fail(request, "hal_call_data", "Can't get current call data");
+ afb_req_fail(request, "mixer_action_type", "Action type is unknown");
return;
}
for(idx = 0; idx < count; idx++) {
- if(afb_api_call_sync_legacy(apiHandle,
- apiToCall,
- currentMixerData->verbToCall,
- json_object_get(requestJson),
- &returnJ)) {
- HalUtlHandleAppFwCallErrorInRequest(request, apiToCall, currentMixerData->verbToCall, returnJ, "call_action");
- json_object_put(returnJ);
+ if(afb_api_call_sync(apiHandle,
+ apiToCall,
+ currentMixerData->verbToCall,
+ json_object_get(requestJson),
+ &responseJ,
+ &returnedError,
+ &returnedInfo)) {
+ if(responseJ)
+ json_object_put(responseJ);
if(toReturnJ)
json_object_put(toReturnJ);
+ afb_req_fail_f(request,
+ "mixer_call",
+ "Something went wrong during call to verb '%s' of api '%s' with error '%s' and info '%s' (call to mixer %i out of %i)",
+ currentMixerData->verbToCall,
+ apiToCall,
+ returnedError ? returnedError : "not returned",
+ returnedInfo ? returnedInfo : "not returned",
+ idx,
+ count);
+ free(returnedError);
+ free(returnedInfo);
return;
}
- if(wrap_json_unpack(returnJ, "{s:o}", "response", &responseJ)) {
+ if(! responseJ) {
+ if(toReturnJ)
+ json_object_put(toReturnJ);
afb_req_fail_f(request,
- "Seems that %s call to api %s succeed, but no response was found in : '%s'",
+ "mixer_call",
+ "Seems that %s call to api %s succeed but no response was returned (call to mixer %i out of %i)",
currentMixerData->verbToCall,
apiToCall,
- json_object_get_string(returnJ));
- json_object_put(returnJ);
- if(toReturnJ)
- json_object_put(toReturnJ);
+ idx,
+ count);
+ free(returnedError);
+ free(returnedInfo);
return;
}
@@ -137,28 +152,17 @@ void HalUtlActionOnMixer(afb_req_t request, enum ActionOnMixerType actionType)
switch(actionType) {
case ACTION_ON_MIXER_STREAM:
- toReturnJ = json_object_get(responseJ);
+ toReturnJ = responseJ;
break;
case ACTION_ON_MIXER_PLAYBACK:
case ACTION_ON_MIXER_CAPTURE:
- json_object_object_add(toReturnJ, currentMixerData->verbToCall, json_object_get(responseJ));
- break;
-
- case ACTION_ON_MIXER_ALL_STREAM:
- json_object_object_add(toReturnJ, currentMixerData->verb, json_object_get(responseJ));
- break;
-
- default:
+ json_object_object_add(toReturnJ, currentMixerData->verbToCall, responseJ);
+ currentMixerData = currentMixerData->next;
break;
- }
- json_object_put(returnJ);
-
- switch(actionType) {
- case ACTION_ON_MIXER_PLAYBACK:
- case ACTION_ON_MIXER_CAPTURE:
case ACTION_ON_MIXER_ALL_STREAM:
+ json_object_object_add(toReturnJ, currentMixerData->verb, responseJ);
currentMixerData = currentMixerData->next;
break;
diff --git a/4a-hal-utilities/CMakeLists.txt b/4a-hal-utilities/CMakeLists.txt
index 76cc511..d90dd11 100644
--- a/4a-hal-utilities/CMakeLists.txt
+++ b/4a-hal-utilities/CMakeLists.txt
@@ -23,7 +23,6 @@ PROJECT_TARGET_ADD(4a-hal-utilities)
# Define project Targets
ADD_LIBRARY(${TARGET_NAME} STATIC
4a-hal-utilities-alsa-data.c
- 4a-hal-utilities-appfw-responses-handler.c
4a-hal-utilities-data.c
4a-hal-utilities-hal-streams-handler.c
4a-hal-utilities-verbs-loader.c)