/** * @brief Validate a transmission attempt * * This function is used to check both the #Azy_Client_Call_Id and the #Azy_Content * of an azy_client_call or azy_client_put attempt, and will additionally set * an #Azy_Client_Return_Cb and log the calling function name upon failure. * Note that this function also calls azy_content_error_reset. * Also note: THIS FUNCTION IS MEANT TO BE USED IN A MACRO!!!! * @param cli The client (NOT NULL) * @param err_content The content used to make the call which may contain an error (NOT NULL) * @param ret The call id * @param cb The callback to set for @p ret (NOT NULL) * @param func The function name of the calling function * @return This function returns #EINA_TRUE only if the call was successful and @p cb was set, else #EINA_FALSE */ Eina_Bool azy_client_call_checker(Azy_Client *cli, Azy_Content *err_content, Azy_Client_Call_Id ret, Azy_Client_Return_Cb cb, const char *func) { DBG("(cli=%p, cb=%p, func='%s')", cli, cb, func); EINA_SAFETY_ON_NULL_RETURN_VAL(cli, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(err_content, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE); if (!ret) return EINA_FALSE; if (azy_content_error_is_set(err_content)) { ERR("%s:\n%s", func ? func : "<calling function not specified>", azy_content_error_message_get(err_content)); azy_content_error_reset(err_content); return EINA_FALSE; } azy_content_error_reset(err_content); if (!azy_client_callback_set(cli, ret, cb)) { CRI("Could not set callback from %s!", func ? func : "<calling function not specified>"); return EINA_FALSE; } return EINA_TRUE; }
static Eina_Error ret_cb(Azy_Client *cli, Azy_Content *content, Eina_Binbuf *data) { Eina_Strbuf *buf; if (azy_content_error_is_set(content)) printf("Error encountered: %s\n", azy_content_error_message_get(content)); else { const Eina_List *cookies; printf("Success!\n"); buf = eina_strbuf_new(); cookies = azy_net_cookie_set_list_get(azy_content_net_get(content)); if (cookies) azy_net_cookie_set_list_generate(buf, cookies); cookies = azy_net_cookie_send_list_get(azy_content_net_get(content)); if (cookies) azy_net_cookie_send_list_generate(buf, cookies); printf("%s\n", eina_strbuf_string_get(buf)); eina_strbuf_free(buf); } if (!azy_client_current(cli)) azy_client_close(cli); return AZY_ERROR_NONE; }
static Eina_Bool check_err(Azy_Content *err) { if (!err) return EINA_TRUE; if (!azy_content_error_is_set(err)) return EINA_FALSE; printf("** ERROR **: %s\n", azy_content_error_message_get(err)); azy_content_error_reset(err); return EINA_TRUE; }
Eina_Bool azy_content_serialize_response_json(Azy_Content *content) { cJSON *object, *error; char *msg; if ((!content) || (content->buffer)) return EINA_FALSE; if (content->error_set) { object = cJSON_CreateObject(); cJSON_AddNullToObject(object, "result"); error = cJSON_CreateObject(); cJSON_AddNumberToObject(error, "code", content->faultcode); cJSON_AddStringToObject(error, "message", azy_content_error_message_get(content)); cJSON_AddItemToObject(object, "error", error); cJSON_AddNumberToObject(object, "id", content->id); } else if (content->retval) { object = cJSON_CreateObject(); cJSON_AddItemToObject(object, "result", azy_value_serialize_json(content->retval)); cJSON_AddNullToObject(object, "error"); cJSON_AddNumberToObject(object, "id", content->id); } else { DBG("No return found in %s!", __PRETTY_FUNCTION__); return EINA_FALSE; } if (eina_log_domain_level_check(azy_log_dom, EINA_LOG_LEVEL_DBG)) msg = cJSON_Print(object); else msg = cJSON_PrintUnformatted(object); if(!msg) goto free_object; azy_content_buffer_set_(content, (unsigned char *)msg, strlen(msg)); cJSON_Delete(object); return EINA_TRUE; free_object: cJSON_Delete(object); return EINA_FALSE; }