diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-06-01 22:55:57 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-10-08 15:51:00 +0200 |
commit | 069f177dd6a06d5274beed509ab85792263fb5e8 (patch) | |
tree | b5b79eb335af9fe304429a14c720f0b0e2d94b7d /4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-handler.c | |
parent | 8943be0ab8f315d935c9bfe7b46523c4e94b0025 (diff) |
Handle mixer responses correctly
Use a function to handle mixer responses on stream action calls correctly.
Before, there was no differencations between responses from api calls
that didn't end well.
Now, we print a different message if the api/verb is not found and if
the request was transfered but an error occured during it.
Change-Id: Ib4f9c3cf14b6612cd14762b74466ce484fdfb09d
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
Diffstat (limited to '4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-handler.c')
-rw-r--r-- | 4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-handler.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-handler.c b/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-handler.c index 21c99af..180a878 100644 --- a/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-handler.c +++ b/4a-hal/4a-hal-controllers/4a-hal-controllers-mixer-handler.c @@ -30,6 +30,72 @@ * HAL controllers hanlde mixer responses functions * ******************************************************************************/ +void HalCtlsHandleMixerCallError(AFB_ReqT request, char *apiCalled, char *verbCalled, json_object *callReturnJ, char *errorStatus) +{ + char *returnedStatus, *returnedInfo; + + json_object *returnedRequestJ, *returnedStatusJ, *returnedInfoJ; + + if(! json_object_object_get_ex(callReturnJ, "request", &returnedRequestJ)) { + AFB_ReqFail(request, errorStatus, "Couldn't get response request object"); + return; + } + + if(! json_object_is_type(returnedRequestJ, json_type_object)) { + AFB_ReqFail(request, errorStatus, "Response request object is not valid"); + return; + } + + if(! json_object_object_get_ex(returnedRequestJ, "status", &returnedStatusJ)) { + AFB_ReqFail(request, errorStatus, "Couldn't get response status object"); + return; + } + + if(! json_object_is_type(returnedStatusJ, json_type_string)) { + AFB_ReqFail(request, errorStatus, "Response status object is not valid"); + return; + } + + returnedStatus = (char *) json_object_get_string(returnedStatusJ); + + if(! strcmp(returnedStatus, "unknown-api")) { + AFB_ReqFailF(request, + errorStatus, + "Api %s not found", + apiCalled); + return; + } + + if(! strcmp(returnedStatus, "unknown-verb")) { + AFB_ReqFailF(request, + errorStatus, + "Verb %s of api %s not found", + verbCalled, + apiCalled); + return; + } + + if(! json_object_object_get_ex(returnedRequestJ, "info", &returnedInfoJ)) { + AFB_ReqFail(request, errorStatus, "Couldn't get response info object"); + return; + } + + if(! json_object_is_type(returnedInfoJ, json_type_string)) { + AFB_ReqFail(request, errorStatus, "Response info object is not valid"); + return; + } + + returnedInfo = (char *) json_object_get_string(returnedInfoJ); + + AFB_ReqFailF(request, + errorStatus, + "Api %s and verb %s found, but this error was raised : '%s' with this info : '%s'", + apiCalled, + verbCalled, + returnedStatus, + returnedInfo); +} + int HalCtlsHandleMixerAttachResponse(AFB_ReqT request, struct CtlHalStreamsDataT *currentHalStreamsData, json_object *mixerResponseJ) { int err = 0; |