summaryrefslogtreecommitdiff
path: root/res/ari/resource_asterisk.c
diff options
context:
space:
mode:
Diffstat (limited to 'res/ari/resource_asterisk.c')
-rw-r--r--res/ari/resource_asterisk.c107
1 files changed, 104 insertions, 3 deletions
diff --git a/res/ari/resource_asterisk.c b/res/ari/resource_asterisk.c
index dac45714f..88f8d35cd 100644
--- a/res/ari/resource_asterisk.c
+++ b/res/ari/resource_asterisk.c
@@ -31,12 +31,113 @@
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-#include "resource_asterisk.h"
+#include "asterisk/ast_version.h"
+#include "asterisk/buildinfo.h"
+#include "asterisk/paths.h"
#include "asterisk/pbx.h"
+#include "resource_asterisk.h"
-void ast_ari_get_asterisk_info(struct ast_variable *headers, struct ast_get_asterisk_info_args *args, struct ast_ari_response *response)
+void ast_ari_get_asterisk_info(struct ast_variable *headers,
+ struct ast_get_asterisk_info_args *args,
+ struct ast_ari_response *response)
{
- ast_log(LOG_ERROR, "TODO: ari_get_asterisk_info\n");
+ RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
+ int show_all = args->only_count == 0;
+ int show_build = show_all;
+ int show_system = show_all;
+ int show_config = show_all;
+ int show_status = show_all;
+ size_t i;
+ int res = 0;
+
+ for (i = 0; i < args->only_count; ++i) {
+ if (strcasecmp("build", args->only[i]) == 0) {
+ show_build = 1;
+ } else if (strcasecmp("system", args->only[i]) == 0) {
+ show_system = 1;
+ } else if (strcasecmp("config", args->only[i]) == 0) {
+ show_config = 1;
+ } else if (strcasecmp("status", args->only[i]) == 0) {
+ show_status = 1;
+ } else {
+ ast_log(LOG_WARNING, "Unrecognized info section '%s'\n",
+ args->only[i]);
+ }
+ }
+
+ json = ast_json_object_create();
+
+ if (show_build) {
+ res |= ast_json_object_set(json, "build",
+ ast_json_pack(
+ "{ s: s, s: s, s: s,"
+ " s: s, s: s, s: s }",
+
+ "os", ast_build_os,
+ "kernel", ast_build_kernel,
+ "machine", ast_build_machine,
+
+ "options", AST_BUILDOPTS,
+ "date", ast_build_date,
+ "user", ast_build_user));
+ }
+
+ if (show_system) {
+ char eid_str[128];
+
+ ast_eid_to_str(eid_str, sizeof(eid_str), &ast_eid_default);
+
+ res |= ast_json_object_set(json, "system",
+ ast_json_pack("{ s: s, s: s }",
+ "version", ast_get_version(),
+ "entity_id", eid_str));
+ }
+
+ if (show_config) {
+ struct ast_json *config = ast_json_pack(
+ "{ s: s, s: s,"
+ " s: { s: s, s: s } }",
+
+ "name", ast_config_AST_SYSTEM_NAME,
+ "default_language", defaultlanguage,
+
+ "setid",
+ "user", ast_config_AST_RUN_USER,
+ "group", ast_config_AST_RUN_GROUP);
+
+ res |= ast_json_object_set(json, "config", config);
+
+ if (option_maxcalls) {
+ res |= ast_json_object_set(config, "max_channels",
+ ast_json_integer_create(option_maxcalls));
+ }
+
+ if (option_maxfiles) {
+ res |= ast_json_object_set(config, "max_open_files",
+ ast_json_integer_create(option_maxfiles));
+ }
+
+ if (option_maxload) {
+ res |= ast_json_object_set(config, "max_load",
+ ast_json_real_create(option_maxload));
+ }
+ }
+
+ if (show_status) {
+ res |= ast_json_object_set(json, "status",
+ ast_json_pack("{ s: o, s: o }",
+ "startup_time",
+ ast_json_timeval(ast_startuptime, NULL),
+ "last_reload_time",
+ ast_json_timeval(ast_lastreloadtime, NULL)));
+ }
+
+ if (res != 0) {
+ ast_ari_response_alloc_failed(response);
+ return;
+ }
+
+ ast_ari_response_ok(response, ast_json_ref(json));
}
void ast_ari_get_global_var(struct ast_variable *headers, struct ast_get_global_var_args *args, struct ast_ari_response *response)