Address JSON thread safety issues.
[asterisk/asterisk.git] / res / ari / resource_asterisk.c
1 /* -*- C -*-
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2012 - 2013, Digium, Inc.
5  *
6  * David M. Lee, II <dlee@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*! \file
20  *
21  * \brief Implementation for ARI stubs.
22  *
23  * \author David M. Lee, II <dlee@digium.com>
24  */
25
26 /*** MODULEINFO
27         <support_level>core</support_level>
28  ***/
29
30 #include "asterisk.h"
31
32 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
33
34 #include "resource_asterisk.h"
35 #include "asterisk/pbx.h"
36
37 void ast_ari_get_asterisk_info(struct ast_variable *headers, struct ast_get_asterisk_info_args *args, struct ast_ari_response *response)
38 {
39         ast_log(LOG_ERROR, "TODO: ari_get_asterisk_info\n");
40 }
41
42 void ast_ari_get_global_var(struct ast_variable *headers, struct ast_get_global_var_args *args, struct ast_ari_response *response)
43 {
44         RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
45         RAII_VAR(struct ast_str *, tmp, ast_str_create(32), ast_free);
46
47         const char *value;
48
49         ast_assert(response != NULL);
50
51         if (!tmp) {
52                 ast_ari_response_alloc_failed(response);
53                 return;
54         }
55
56         value = ast_str_retrieve_variable(&tmp, 0, NULL, NULL, args->variable);
57
58         if (!(json = ast_json_pack("{s: s}", "value", S_OR(value, "")))) {
59                 ast_ari_response_alloc_failed(response);
60                 return;
61         }
62
63         ast_ari_response_ok(response, ast_json_ref(json));
64 }
65
66 void ast_ari_set_global_var(struct ast_variable *headers, struct ast_set_global_var_args *args, struct ast_ari_response *response)
67 {
68         ast_assert(response != NULL);
69
70         if (ast_strlen_zero(args->variable)) {
71                 ast_ari_response_error(
72                         response, 400, "Bad Request",
73                         "Variable name is required");
74                 return;
75         }
76
77         pbx_builtin_setvar_helper(NULL, args->variable, args->value);
78
79         ast_ari_response_no_content(response);
80 }