int ast_sip_cli_print_sorcery_objectset(void *obj, void *arg, int flags) { struct ast_sip_cli_context *context = arg; struct ast_variable *i; int max_name_width = 13; int max_value_width = 14; int width; char *separator; struct ast_variable *objset; if (!context->output_buffer) { return -1; } objset = ast_sorcery_objectset_create(ast_sip_get_sorcery(),obj); if (!objset) { return -1; } for (i = objset; i; i = i->next) { if (i->name) { width = strlen(i->name); max_name_width = width > max_name_width ? width : max_name_width; } if (i->value) { width = strlen(i->value); max_value_width = width > max_value_width ? width : max_value_width; } } separator = ast_alloca(max_name_width + max_value_width + 8); memset(separator, '=', max_name_width + max_value_width + 3); separator[max_name_width + max_value_width + 3] = 0; ast_str_append(&context->output_buffer, 0, " %-*s : %s\n", max_name_width, "ParameterName", "ParameterValue"); ast_str_append(&context->output_buffer, 0, " %s\n", separator); objset = ast_variable_list_sort(objset); for (i = objset; i; i = i->next) { ast_str_append(&context->output_buffer, 0, " %-*s : %s\n", max_name_width, i->name, i->value); } ast_variables_destroy(objset); return 0; }
static void return_sorcery_object(struct ast_sorcery *sorcery, void *sorcery_obj, struct ast_ari_response *response) { RAII_VAR(struct ast_json *, return_set, NULL, ast_json_unref); struct ast_variable *change_set; struct ast_variable *it_change_set; return_set = ast_json_array_create(); if (!return_set) { ast_ari_response_alloc_failed(response); return; } /* Note that we can't use the sorcery JSON change set directly, * as it will hand us back an Object (with fields), and we need * a more generic representation of whatever the API call asked * for, i.e., a list of tuples. */ change_set = ast_sorcery_objectset_create(sorcery, sorcery_obj); if (!change_set) { ast_ari_response_alloc_failed(response); return; } for (it_change_set = change_set; it_change_set; it_change_set = it_change_set->next) { struct ast_json *tuple; tuple = ast_json_pack("{s: s, s: s}", "attribute", it_change_set->name, "value", it_change_set->value); if (!tuple) { ast_variables_destroy(change_set); ast_ari_response_alloc_failed(response); return; } if (ast_json_array_append(return_set, tuple)) { ast_json_unref(tuple); ast_variables_destroy(change_set); ast_ari_response_alloc_failed(response); return; } } ast_variables_destroy(change_set); ast_ari_response_ok(response, ast_json_ref(return_set)); }