Asterisk - The Open Source Telephony Project  21.4.1
Macros | Functions | Variables
res_ari_asterisk.c File Reference

Asterisk resources. More...

#include "asterisk.h"
#include "asterisk/app.h"
#include "asterisk/module.h"
#include "asterisk/stasis_app.h"
#include "ari/resource_asterisk.h"

Go to the source code of this file.

Macros

#define MAX_VALS   128
 

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
static void ast_ari_asterisk_add_log_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/logging/{logChannelName}. More...
 
int ast_ari_asterisk_add_log_parse_body (struct ast_json *body, struct ast_ari_asterisk_add_log_args *args)
 Body parsing function for /asterisk/logging/{logChannelName}. More...
 
static void ast_ari_asterisk_delete_log_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/logging/{logChannelName}. More...
 
static void ast_ari_asterisk_delete_object_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/config/dynamic/{configClass}/{objectType}/{id}. More...
 
static void ast_ari_asterisk_get_global_var_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/variable. More...
 
int ast_ari_asterisk_get_global_var_parse_body (struct ast_json *body, struct ast_ari_asterisk_get_global_var_args *args)
 Body parsing function for /asterisk/variable. More...
 
static void ast_ari_asterisk_get_info_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/info. More...
 
int ast_ari_asterisk_get_info_parse_body (struct ast_json *body, struct ast_ari_asterisk_get_info_args *args)
 Body parsing function for /asterisk/info. More...
 
static void ast_ari_asterisk_get_module_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/modules/{moduleName}. More...
 
static void ast_ari_asterisk_get_object_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/config/dynamic/{configClass}/{objectType}/{id}. More...
 
static void ast_ari_asterisk_list_log_channels_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/logging. More...
 
static void ast_ari_asterisk_list_modules_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/modules. More...
 
static void ast_ari_asterisk_load_module_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/modules/{moduleName}. More...
 
static void ast_ari_asterisk_ping_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/ping. More...
 
static void ast_ari_asterisk_reload_module_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/modules/{moduleName}. More...
 
static void ast_ari_asterisk_rotate_log_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/logging/{logChannelName}/rotate. More...
 
static void ast_ari_asterisk_set_global_var_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/variable. More...
 
int ast_ari_asterisk_set_global_var_parse_body (struct ast_json *body, struct ast_ari_asterisk_set_global_var_args *args)
 Body parsing function for /asterisk/variable. More...
 
static void ast_ari_asterisk_unload_module_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/modules/{moduleName}. More...
 
static void ast_ari_asterisk_update_object_cb (struct ast_tcptls_session_instance *ser, struct ast_variable *get_params, struct ast_variable *path_vars, struct ast_variable *headers, struct ast_json *body, struct ast_ari_response *response)
 Parameter parsing callback for /asterisk/config/dynamic/{configClass}/{objectType}/{id}. More...
 
int ast_ari_asterisk_update_object_parse_body (struct ast_json *body, struct ast_ari_asterisk_update_object_args *args)
 Body parsing function for /asterisk/config/dynamic/{configClass}/{objectType}/{id}. More...
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int load_module (void)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "RESTful API module - Asterisk resources" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "da6642af068ee5e6490c5b1d2cc1d238" , .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .requires = "res_ari,res_ari_model,res_stasis", }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct stasis_rest_handlers asterisk
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_config
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_config_dynamic
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_config_dynamic_configClass
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_config_dynamic_configClass_objectType
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_config_dynamic_configClass_objectType_id
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_info
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_logging
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_logging_logChannelName
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_logging_logChannelName_rotate
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_modules
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_modules_moduleName
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_ping
 REST handler for /api-docs/asterisk.json.
 
static struct stasis_rest_handlers asterisk_variable
 REST handler for /api-docs/asterisk.json.
 

Detailed Description

Asterisk resources.

Author
David M. Lee, II dlee@.nosp@m.digi.nosp@m.um.co.nosp@m.m

Definition in file res_ari_asterisk.c.

Function Documentation

static void ast_ari_asterisk_add_log_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/logging/{logChannelName}.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 827 of file res_ari_asterisk.c.

References ast_ari_asterisk_add_log(), ast_ari_asterisk_add_log_parse_body(), ast_ari_response_alloc_failed(), ast_ari_response_error(), ast_ari_validate_void(), ast_ari_asterisk_add_log_args::configuration, ast_ari_asterisk_add_log_args::log_channel_name, ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_response::response_code, and ast_variable::value.

831 {
832  struct ast_ari_asterisk_add_log_args args = {};
833  struct ast_variable *i;
834 #if defined(AST_DEVMODE)
835  int is_valid;
836  int code;
837 #endif /* AST_DEVMODE */
838 
839  for (i = get_params; i; i = i->next) {
840  if (strcmp(i->name, "configuration") == 0) {
841  args.configuration = (i->value);
842  } else
843  {}
844  }
845  for (i = path_vars; i; i = i->next) {
846  if (strcmp(i->name, "logChannelName") == 0) {
847  args.log_channel_name = (i->value);
848  } else
849  {}
850  }
851  if (ast_ari_asterisk_add_log_parse_body(body, &args)) {
853  goto fin;
854  }
855  ast_ari_asterisk_add_log(headers, &args, response);
856 #if defined(AST_DEVMODE)
857  code = response->response_code;
858 
859  switch (code) {
860  case 0: /* Implementation is still a stub, or the code wasn't set */
861  is_valid = response->message == NULL;
862  break;
863  case 500: /* Internal Server Error */
864  case 501: /* Not Implemented */
865  case 400: /* Bad request body */
866  case 409: /* Log channel could not be created. */
867  is_valid = 1;
868  break;
869  default:
870  if (200 <= code && code <= 299) {
871  is_valid = ast_ari_validate_void(
872  response->message);
873  } else {
874  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/logging/{logChannelName}\n", code);
875  is_valid = 0;
876  }
877  }
878 
879  if (!is_valid) {
880  ast_log(LOG_ERROR, "Response validation failed for /asterisk/logging/{logChannelName}\n");
881  ast_ari_response_error(response, 500,
882  "Internal Server Error", "Response validation failed");
883  }
884 #endif /* AST_DEVMODE */
885 
886 fin: __attribute__((unused))
887  return;
888 }
struct ast_variable * next
Structure for variables, used for configurations and for channel variables.
void ast_ari_response_alloc_failed(struct ast_ari_response *response)
Fill in response with a 500 message for allocation failures.
Definition: res_ari.c:298
int ast_ari_asterisk_add_log_parse_body(struct ast_json *body, struct ast_ari_asterisk_add_log_args *args)
Body parsing function for /asterisk/logging/{logChannelName}.
int ast_ari_validate_void(struct ast_json *json)
Validator for native Swagger void.
Definition: res_ari_model.c:91
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
void ast_ari_asterisk_add_log(struct ast_variable *headers, struct ast_ari_asterisk_add_log_args *args, struct ast_ari_response *response)
Adds a log channel.
struct ast_json * message
Definition: ari.h:94
int ast_ari_asterisk_add_log_parse_body ( struct ast_json body,
struct ast_ari_asterisk_add_log_args args 
)

Body parsing function for /asterisk/logging/{logChannelName}.

Parameters
bodyThe JSON body from which to parse parameters.
[out]argsThe args structure to parse into.
Return values
zeroon success
non-zeroon failure

Definition at line 805 of file res_ari_asterisk.c.

References ast_json_object_get(), ast_json_string_get(), and ast_ari_asterisk_add_log_args::configuration.

Referenced by ast_ari_asterisk_add_log_cb().

808 {
809  struct ast_json *field;
810  /* Parse query parameters out of it */
811  field = ast_json_object_get(body, "configuration");
812  if (field) {
813  args->configuration = ast_json_string_get(field);
814  }
815  return 0;
816 }
const char * ast_json_string_get(const struct ast_json *string)
Get the value of a JSON string.
Definition: json.c:283
struct ast_json * ast_json_object_get(struct ast_json *object, const char *key)
Get a field from a JSON object.
Definition: json.c:407
Abstract JSON element (object, array, string, int, ...).
static void ast_ari_asterisk_delete_log_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/logging/{logChannelName}.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 898 of file res_ari_asterisk.c.

References ast_ari_asterisk_delete_log(), ast_ari_response_error(), ast_ari_validate_void(), ast_ari_asterisk_delete_log_args::log_channel_name, ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_response::response_code, and ast_variable::value.

902 {
903  struct ast_ari_asterisk_delete_log_args args = {};
904  struct ast_variable *i;
905 #if defined(AST_DEVMODE)
906  int is_valid;
907  int code;
908 #endif /* AST_DEVMODE */
909 
910  for (i = path_vars; i; i = i->next) {
911  if (strcmp(i->name, "logChannelName") == 0) {
912  args.log_channel_name = (i->value);
913  } else
914  {}
915  }
916  ast_ari_asterisk_delete_log(headers, &args, response);
917 #if defined(AST_DEVMODE)
918  code = response->response_code;
919 
920  switch (code) {
921  case 0: /* Implementation is still a stub, or the code wasn't set */
922  is_valid = response->message == NULL;
923  break;
924  case 500: /* Internal Server Error */
925  case 501: /* Not Implemented */
926  case 404: /* Log channel does not exist. */
927  is_valid = 1;
928  break;
929  default:
930  if (200 <= code && code <= 299) {
931  is_valid = ast_ari_validate_void(
932  response->message);
933  } else {
934  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/logging/{logChannelName}\n", code);
935  is_valid = 0;
936  }
937  }
938 
939  if (!is_valid) {
940  ast_log(LOG_ERROR, "Response validation failed for /asterisk/logging/{logChannelName}\n");
941  ast_ari_response_error(response, 500,
942  "Internal Server Error", "Response validation failed");
943  }
944 #endif /* AST_DEVMODE */
945 
946 fin: __attribute__((unused))
947  return;
948 }
struct ast_variable * next
void ast_ari_asterisk_delete_log(struct ast_variable *headers, struct ast_ari_asterisk_delete_log_args *args, struct ast_ari_response *response)
Deletes a log channel.
Structure for variables, used for configurations and for channel variables.
int ast_ari_validate_void(struct ast_json *json)
Validator for native Swagger void.
Definition: res_ari_model.c:91
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
static void ast_ari_asterisk_delete_object_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/config/dynamic/{configClass}/{objectType}/{id}.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 205 of file res_ari_asterisk.c.

References ast_ari_asterisk_delete_object(), ast_ari_response_error(), ast_ari_validate_void(), ast_ari_asterisk_delete_object_args::config_class, ast_ari_asterisk_delete_object_args::id, ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_asterisk_delete_object_args::object_type, ast_ari_response::response_code, and ast_variable::value.

209 {
210  struct ast_ari_asterisk_delete_object_args args = {};
211  struct ast_variable *i;
212 #if defined(AST_DEVMODE)
213  int is_valid;
214  int code;
215 #endif /* AST_DEVMODE */
216 
217  for (i = path_vars; i; i = i->next) {
218  if (strcmp(i->name, "configClass") == 0) {
219  args.config_class = (i->value);
220  } else
221  if (strcmp(i->name, "objectType") == 0) {
222  args.object_type = (i->value);
223  } else
224  if (strcmp(i->name, "id") == 0) {
225  args.id = (i->value);
226  } else
227  {}
228  }
229  ast_ari_asterisk_delete_object(headers, &args, response);
230 #if defined(AST_DEVMODE)
231  code = response->response_code;
232 
233  switch (code) {
234  case 0: /* Implementation is still a stub, or the code wasn't set */
235  is_valid = response->message == NULL;
236  break;
237  case 500: /* Internal Server Error */
238  case 501: /* Not Implemented */
239  case 403: /* Could not delete object */
240  case 404: /* {configClass|objectType|id} not found */
241  is_valid = 1;
242  break;
243  default:
244  if (200 <= code && code <= 299) {
245  is_valid = ast_ari_validate_void(
246  response->message);
247  } else {
248  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/config/dynamic/{configClass}/{objectType}/{id}\n", code);
249  is_valid = 0;
250  }
251  }
252 
253  if (!is_valid) {
254  ast_log(LOG_ERROR, "Response validation failed for /asterisk/config/dynamic/{configClass}/{objectType}/{id}\n");
255  ast_ari_response_error(response, 500,
256  "Internal Server Error", "Response validation failed");
257  }
258 #endif /* AST_DEVMODE */
259 
260 fin: __attribute__((unused))
261  return;
262 }
struct ast_variable * next
Structure for variables, used for configurations and for channel variables.
int ast_ari_validate_void(struct ast_json *json)
Validator for native Swagger void.
Definition: res_ari_model.c:91
int response_code
Definition: ari.h:99
void ast_ari_asterisk_delete_object(struct ast_variable *headers, struct ast_ari_asterisk_delete_object_args *args, struct ast_ari_response *response)
Delete a dynamic configuration object.
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
static void ast_ari_asterisk_get_global_var_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/variable.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 1031 of file res_ari_asterisk.c.

References ast_ari_asterisk_get_global_var(), ast_ari_asterisk_get_global_var_parse_body(), ast_ari_response_alloc_failed(), ast_ari_response_error(), ast_ari_validate_variable(), ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_response::response_code, ast_variable::value, and ast_ari_asterisk_get_global_var_args::variable.

1035 {
1036  struct ast_ari_asterisk_get_global_var_args args = {};
1037  struct ast_variable *i;
1038 #if defined(AST_DEVMODE)
1039  int is_valid;
1040  int code;
1041 #endif /* AST_DEVMODE */
1042 
1043  for (i = get_params; i; i = i->next) {
1044  if (strcmp(i->name, "variable") == 0) {
1045  args.variable = (i->value);
1046  } else
1047  {}
1048  }
1049  if (ast_ari_asterisk_get_global_var_parse_body(body, &args)) {
1051  goto fin;
1052  }
1053  ast_ari_asterisk_get_global_var(headers, &args, response);
1054 #if defined(AST_DEVMODE)
1055  code = response->response_code;
1056 
1057  switch (code) {
1058  case 0: /* Implementation is still a stub, or the code wasn't set */
1059  is_valid = response->message == NULL;
1060  break;
1061  case 500: /* Internal Server Error */
1062  case 501: /* Not Implemented */
1063  case 400: /* Missing variable parameter. */
1064  is_valid = 1;
1065  break;
1066  default:
1067  if (200 <= code && code <= 299) {
1068  is_valid = ast_ari_validate_variable(
1069  response->message);
1070  } else {
1071  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/variable\n", code);
1072  is_valid = 0;
1073  }
1074  }
1075 
1076  if (!is_valid) {
1077  ast_log(LOG_ERROR, "Response validation failed for /asterisk/variable\n");
1078  ast_ari_response_error(response, 500,
1079  "Internal Server Error", "Response validation failed");
1080  }
1081 #endif /* AST_DEVMODE */
1082 
1083 fin: __attribute__((unused))
1084  return;
1085 }
struct ast_variable * next
int ast_ari_validate_variable(struct ast_json *json)
Validator for Variable.
int ast_ari_asterisk_get_global_var_parse_body(struct ast_json *body, struct ast_ari_asterisk_get_global_var_args *args)
Body parsing function for /asterisk/variable.
Structure for variables, used for configurations and for channel variables.
void ast_ari_asterisk_get_global_var(struct ast_variable *headers, struct ast_ari_asterisk_get_global_var_args *args, struct ast_ari_response *response)
Get the value of a global variable.
void ast_ari_response_alloc_failed(struct ast_ari_response *response)
Fill in response with a 500 message for allocation failures.
Definition: res_ari.c:298
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
int ast_ari_asterisk_get_global_var_parse_body ( struct ast_json body,
struct ast_ari_asterisk_get_global_var_args args 
)

Body parsing function for /asterisk/variable.

Parameters
bodyThe JSON body from which to parse parameters.
[out]argsThe args structure to parse into.
Return values
zeroon success
non-zeroon failure

Definition at line 1009 of file res_ari_asterisk.c.

References ast_json_object_get(), ast_json_string_get(), and ast_ari_asterisk_get_global_var_args::variable.

Referenced by ast_ari_asterisk_get_global_var_cb().

1012 {
1013  struct ast_json *field;
1014  /* Parse query parameters out of it */
1015  field = ast_json_object_get(body, "variable");
1016  if (field) {
1017  args->variable = ast_json_string_get(field);
1018  }
1019  return 0;
1020 }
const char * ast_json_string_get(const struct ast_json *string)
Get the value of a JSON string.
Definition: json.c:283
struct ast_json * ast_json_object_get(struct ast_json *object, const char *key)
Get a field from a JSON object.
Definition: json.c:407
Abstract JSON element (object, array, string, int, ...).
static void ast_ari_asterisk_get_info_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/info.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 310 of file res_ari_asterisk.c.

References ast_ari_asterisk_get_info(), ast_ari_asterisk_get_info_parse_body(), ast_ari_response_alloc_failed(), ast_ari_response_error(), ast_ari_validate_asterisk_info(), ast_malloc, ast_strdup, ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_asterisk_get_info_args::only, ast_ari_asterisk_get_info_args::only_count, ast_ari_asterisk_get_info_args::only_parse, ast_ari_response::response_code, and ast_variable::value.

314 {
315  struct ast_ari_asterisk_get_info_args args = {};
316  struct ast_variable *i;
317 #if defined(AST_DEVMODE)
318  int is_valid;
319  int code;
320 #endif /* AST_DEVMODE */
321 
322  for (i = get_params; i; i = i->next) {
323  if (strcmp(i->name, "only") == 0) {
324  /* Parse comma separated list */
325  char *vals[MAX_VALS];
326  size_t j;
327 
328  args.only_parse = ast_strdup(i->value);
329  if (!args.only_parse) {
331  goto fin;
332  }
333 
334  if (strlen(args.only_parse) == 0) {
335  /* ast_app_separate_args can't handle "" */
336  args.only_count = 1;
337  vals[0] = args.only_parse;
338  } else {
339  args.only_count = ast_app_separate_args(
340  args.only_parse, ',', vals,
341  ARRAY_LEN(vals));
342  }
343 
344  if (args.only_count == 0) {
346  goto fin;
347  }
348 
349  if (args.only_count >= MAX_VALS) {
350  ast_ari_response_error(response, 400,
351  "Bad Request",
352  "Too many values for only");
353  goto fin;
354  }
355 
356  args.only = ast_malloc(sizeof(*args.only) * args.only_count);
357  if (!args.only) {
359  goto fin;
360  }
361 
362  for (j = 0; j < args.only_count; ++j) {
363  args.only[j] = (vals[j]);
364  }
365  } else
366  {}
367  }
368  if (ast_ari_asterisk_get_info_parse_body(body, &args)) {
370  goto fin;
371  }
372  ast_ari_asterisk_get_info(headers, &args, response);
373 #if defined(AST_DEVMODE)
374  code = response->response_code;
375 
376  switch (code) {
377  case 0: /* Implementation is still a stub, or the code wasn't set */
378  is_valid = response->message == NULL;
379  break;
380  case 500: /* Internal Server Error */
381  case 501: /* Not Implemented */
382  is_valid = 1;
383  break;
384  default:
385  if (200 <= code && code <= 299) {
387  response->message);
388  } else {
389  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/info\n", code);
390  is_valid = 0;
391  }
392  }
393 
394  if (!is_valid) {
395  ast_log(LOG_ERROR, "Response validation failed for /asterisk/info\n");
396  ast_ari_response_error(response, 500,
397  "Internal Server Error", "Response validation failed");
398  }
399 #endif /* AST_DEVMODE */
400 
401 fin: __attribute__((unused))
402  ast_free(args.only_parse);
403  ast_free(args.only);
404  return;
405 }
struct ast_variable * next
void ast_ari_asterisk_get_info(struct ast_variable *headers, struct ast_ari_asterisk_get_info_args *args, struct ast_ari_response *response)
Gets Asterisk system information.
Structure for variables, used for configurations and for channel variables.
#define ast_strdup(str)
A wrapper for strdup()
Definition: astmm.h:241
void ast_ari_response_alloc_failed(struct ast_ari_response *response)
Fill in response with a 500 message for allocation failures.
Definition: res_ari.c:298
int response_code
Definition: ari.h:99
#define ast_malloc(len)
A wrapper for malloc()
Definition: astmm.h:191
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
int ast_ari_validate_asterisk_info(struct ast_json *json)
Validator for AsteriskInfo.
int ast_ari_asterisk_get_info_parse_body(struct ast_json *body, struct ast_ari_asterisk_get_info_args *args)
Body parsing function for /asterisk/info.
int ast_ari_asterisk_get_info_parse_body ( struct ast_json body,
struct ast_ari_asterisk_get_info_args args 
)

Body parsing function for /asterisk/info.

Parameters
bodyThe JSON body from which to parse parameters.
[out]argsThe args structure to parse into.
Return values
zeroon success
non-zeroon failure

Definition at line 263 of file res_ari_asterisk.c.

References ast_json_array_get(), ast_json_array_size(), ast_json_object_get(), ast_json_string_get(), ast_json_typeof(), ast_malloc, ast_ari_asterisk_get_info_args::only, and ast_ari_asterisk_get_info_args::only_count.

Referenced by ast_ari_asterisk_get_info_cb().

266 {
267  struct ast_json *field;
268  /* Parse query parameters out of it */
269  field = ast_json_object_get(body, "only");
270  if (field) {
271  /* If they were silly enough to both pass in a query param and a
272  * JSON body, free up the query value.
273  */
274  ast_free(args->only);
275  if (ast_json_typeof(field) == AST_JSON_ARRAY) {
276  /* Multiple param passed as array */
277  size_t i;
278  args->only_count = ast_json_array_size(field);
279  args->only = ast_malloc(sizeof(*args->only) * args->only_count);
280 
281  if (!args->only) {
282  return -1;
283  }
284 
285  for (i = 0; i < args->only_count; ++i) {
286  args->only[i] = ast_json_string_get(ast_json_array_get(field, i));
287  }
288  } else {
289  /* Multiple param passed as single value */
290  args->only_count = 1;
291  args->only = ast_malloc(sizeof(*args->only) * args->only_count);
292  if (!args->only) {
293  return -1;
294  }
295  args->only[0] = ast_json_string_get(field);
296  }
297  }
298  return 0;
299 }
const char * ast_json_string_get(const struct ast_json *string)
Get the value of a JSON string.
Definition: json.c:283
#define ast_malloc(len)
A wrapper for malloc()
Definition: astmm.h:191
enum ast_json_type ast_json_typeof(const struct ast_json *value)
Get the type of value.
Definition: json.c:78
struct ast_json * ast_json_object_get(struct ast_json *object, const char *key)
Get a field from a JSON object.
Definition: json.c:407
size_t ast_json_array_size(const struct ast_json *array)
Get the size of a JSON array.
Definition: json.c:366
Abstract JSON element (object, array, string, int, ...).
struct ast_json * ast_json_array_get(const struct ast_json *array, size_t index)
Get an element from an array.
Definition: json.c:370
static void ast_ari_asterisk_get_module_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/modules/{moduleName}.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 519 of file res_ari_asterisk.c.

References ast_ari_asterisk_get_module(), ast_ari_response_error(), ast_ari_validate_module(), ast_ari_response::message, ast_ari_asterisk_get_module_args::module_name, ast_variable::name, ast_variable::next, ast_ari_response::response_code, and ast_variable::value.

523 {
524  struct ast_ari_asterisk_get_module_args args = {};
525  struct ast_variable *i;
526 #if defined(AST_DEVMODE)
527  int is_valid;
528  int code;
529 #endif /* AST_DEVMODE */
530 
531  for (i = path_vars; i; i = i->next) {
532  if (strcmp(i->name, "moduleName") == 0) {
533  args.module_name = (i->value);
534  } else
535  {}
536  }
537  ast_ari_asterisk_get_module(headers, &args, response);
538 #if defined(AST_DEVMODE)
539  code = response->response_code;
540 
541  switch (code) {
542  case 0: /* Implementation is still a stub, or the code wasn't set */
543  is_valid = response->message == NULL;
544  break;
545  case 500: /* Internal Server Error */
546  case 501: /* Not Implemented */
547  case 404: /* Module could not be found in running modules. */
548  case 409: /* Module information could not be retrieved. */
549  is_valid = 1;
550  break;
551  default:
552  if (200 <= code && code <= 299) {
553  is_valid = ast_ari_validate_module(
554  response->message);
555  } else {
556  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/modules/{moduleName}\n", code);
557  is_valid = 0;
558  }
559  }
560 
561  if (!is_valid) {
562  ast_log(LOG_ERROR, "Response validation failed for /asterisk/modules/{moduleName}\n");
563  ast_ari_response_error(response, 500,
564  "Internal Server Error", "Response validation failed");
565  }
566 #endif /* AST_DEVMODE */
567 
568 fin: __attribute__((unused))
569  return;
570 }
struct ast_variable * next
Structure for variables, used for configurations and for channel variables.
void ast_ari_asterisk_get_module(struct ast_variable *headers, struct ast_ari_asterisk_get_module_args *args, struct ast_ari_response *response)
Get Asterisk module information.
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
int ast_ari_validate_module(struct ast_json *json)
Validator for Module.
static void ast_ari_asterisk_get_object_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/config/dynamic/{configClass}/{objectType}/{id}.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 62 of file res_ari_asterisk.c.

References ast_ari_asterisk_get_object(), ast_ari_response_error(), ast_ari_validate_config_tuple_fn(), ast_ari_validate_list(), ast_ari_asterisk_get_object_args::config_class, ast_ari_asterisk_get_object_args::id, ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_asterisk_get_object_args::object_type, ast_ari_response::response_code, and ast_variable::value.

66 {
67  struct ast_ari_asterisk_get_object_args args = {};
68  struct ast_variable *i;
69 #if defined(AST_DEVMODE)
70  int is_valid;
71  int code;
72 #endif /* AST_DEVMODE */
73 
74  for (i = path_vars; i; i = i->next) {
75  if (strcmp(i->name, "configClass") == 0) {
76  args.config_class = (i->value);
77  } else
78  if (strcmp(i->name, "objectType") == 0) {
79  args.object_type = (i->value);
80  } else
81  if (strcmp(i->name, "id") == 0) {
82  args.id = (i->value);
83  } else
84  {}
85  }
86  ast_ari_asterisk_get_object(headers, &args, response);
87 #if defined(AST_DEVMODE)
88  code = response->response_code;
89 
90  switch (code) {
91  case 0: /* Implementation is still a stub, or the code wasn't set */
92  is_valid = response->message == NULL;
93  break;
94  case 500: /* Internal Server Error */
95  case 501: /* Not Implemented */
96  case 404: /* {configClass|objectType|id} not found */
97  is_valid = 1;
98  break;
99  default:
100  if (200 <= code && code <= 299) {
101  is_valid = ast_ari_validate_list(response->message,
103  } else {
104  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/config/dynamic/{configClass}/{objectType}/{id}\n", code);
105  is_valid = 0;
106  }
107  }
108 
109  if (!is_valid) {
110  ast_log(LOG_ERROR, "Response validation failed for /asterisk/config/dynamic/{configClass}/{objectType}/{id}\n");
111  ast_ari_response_error(response, 500,
112  "Internal Server Error", "Response validation failed");
113  }
114 #endif /* AST_DEVMODE */
115 
116 fin: __attribute__((unused))
117  return;
118 }
struct ast_variable * next
ari_validator ast_ari_validate_config_tuple_fn(void)
Function pointer to ast_ari_validate_config_tuple().
Structure for variables, used for configurations and for channel variables.
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
void ast_ari_asterisk_get_object(struct ast_variable *headers, struct ast_ari_asterisk_get_object_args *args, struct ast_ari_response *response)
Retrieve a dynamic configuration object.
int ast_ari_validate_list(struct ast_json *json, int(*fn)(struct ast_json *))
Validator for a Swagger List[]/JSON array.
static void ast_ari_asterisk_list_log_channels_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/logging.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 762 of file res_ari_asterisk.c.

References ast_ari_asterisk_list_log_channels(), ast_ari_response_error(), ast_ari_validate_list(), ast_ari_validate_log_channel_fn(), ast_ari_response::message, and ast_ari_response::response_code.

766 {
768 #if defined(AST_DEVMODE)
769  int is_valid;
770  int code;
771 #endif /* AST_DEVMODE */
772 
773  ast_ari_asterisk_list_log_channels(headers, &args, response);
774 #if defined(AST_DEVMODE)
775  code = response->response_code;
776 
777  switch (code) {
778  case 0: /* Implementation is still a stub, or the code wasn't set */
779  is_valid = response->message == NULL;
780  break;
781  case 500: /* Internal Server Error */
782  case 501: /* Not Implemented */
783  is_valid = 1;
784  break;
785  default:
786  if (200 <= code && code <= 299) {
787  is_valid = ast_ari_validate_list(response->message,
789  } else {
790  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/logging\n", code);
791  is_valid = 0;
792  }
793  }
794 
795  if (!is_valid) {
796  ast_log(LOG_ERROR, "Response validation failed for /asterisk/logging\n");
797  ast_ari_response_error(response, 500,
798  "Internal Server Error", "Response validation failed");
799  }
800 #endif /* AST_DEVMODE */
801 
802 fin: __attribute__((unused))
803  return;
804 }
int response_code
Definition: ari.h:99
ari_validator ast_ari_validate_log_channel_fn(void)
Function pointer to ast_ari_validate_log_channel().
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
void ast_ari_asterisk_list_log_channels(struct ast_variable *headers, struct ast_ari_asterisk_list_log_channels_args *args, struct ast_ari_response *response)
Gets Asterisk log channel information.
struct ast_json * message
Definition: ari.h:94
int ast_ari_validate_list(struct ast_json *json, int(*fn)(struct ast_json *))
Validator for a Swagger List[]/JSON array.
static void ast_ari_asterisk_list_modules_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/modules.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 467 of file res_ari_asterisk.c.

References ast_ari_asterisk_list_modules(), ast_ari_response_error(), ast_ari_validate_list(), ast_ari_validate_module_fn(), ast_ari_response::message, and ast_ari_response::response_code.

471 {
472  struct ast_ari_asterisk_list_modules_args args = {};
473 #if defined(AST_DEVMODE)
474  int is_valid;
475  int code;
476 #endif /* AST_DEVMODE */
477 
478  ast_ari_asterisk_list_modules(headers, &args, response);
479 #if defined(AST_DEVMODE)
480  code = response->response_code;
481 
482  switch (code) {
483  case 0: /* Implementation is still a stub, or the code wasn't set */
484  is_valid = response->message == NULL;
485  break;
486  case 500: /* Internal Server Error */
487  case 501: /* Not Implemented */
488  is_valid = 1;
489  break;
490  default:
491  if (200 <= code && code <= 299) {
492  is_valid = ast_ari_validate_list(response->message,
494  } else {
495  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/modules\n", code);
496  is_valid = 0;
497  }
498  }
499 
500  if (!is_valid) {
501  ast_log(LOG_ERROR, "Response validation failed for /asterisk/modules\n");
502  ast_ari_response_error(response, 500,
503  "Internal Server Error", "Response validation failed");
504  }
505 #endif /* AST_DEVMODE */
506 
507 fin: __attribute__((unused))
508  return;
509 }
ari_validator ast_ari_validate_module_fn(void)
Function pointer to ast_ari_validate_module().
void ast_ari_asterisk_list_modules(struct ast_variable *headers, struct ast_ari_asterisk_list_modules_args *args, struct ast_ari_response *response)
List Asterisk modules.
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
int ast_ari_validate_list(struct ast_json *json, int(*fn)(struct ast_json *))
Validator for a Swagger List[]/JSON array.
static void ast_ari_asterisk_load_module_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/modules/{moduleName}.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 580 of file res_ari_asterisk.c.

References ast_ari_asterisk_load_module(), ast_ari_response_error(), ast_ari_validate_void(), ast_ari_response::message, ast_ari_asterisk_load_module_args::module_name, ast_variable::name, ast_variable::next, ast_ari_response::response_code, and ast_variable::value.

584 {
585  struct ast_ari_asterisk_load_module_args args = {};
586  struct ast_variable *i;
587 #if defined(AST_DEVMODE)
588  int is_valid;
589  int code;
590 #endif /* AST_DEVMODE */
591 
592  for (i = path_vars; i; i = i->next) {
593  if (strcmp(i->name, "moduleName") == 0) {
594  args.module_name = (i->value);
595  } else
596  {}
597  }
598  ast_ari_asterisk_load_module(headers, &args, response);
599 #if defined(AST_DEVMODE)
600  code = response->response_code;
601 
602  switch (code) {
603  case 0: /* Implementation is still a stub, or the code wasn't set */
604  is_valid = response->message == NULL;
605  break;
606  case 500: /* Internal Server Error */
607  case 501: /* Not Implemented */
608  case 409: /* Module could not be loaded. */
609  is_valid = 1;
610  break;
611  default:
612  if (200 <= code && code <= 299) {
613  is_valid = ast_ari_validate_void(
614  response->message);
615  } else {
616  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/modules/{moduleName}\n", code);
617  is_valid = 0;
618  }
619  }
620 
621  if (!is_valid) {
622  ast_log(LOG_ERROR, "Response validation failed for /asterisk/modules/{moduleName}\n");
623  ast_ari_response_error(response, 500,
624  "Internal Server Error", "Response validation failed");
625  }
626 #endif /* AST_DEVMODE */
627 
628 fin: __attribute__((unused))
629  return;
630 }
struct ast_variable * next
Structure for variables, used for configurations and for channel variables.
void ast_ari_asterisk_load_module(struct ast_variable *headers, struct ast_ari_asterisk_load_module_args *args, struct ast_ari_response *response)
Load an Asterisk module.
int ast_ari_validate_void(struct ast_json *json)
Validator for native Swagger void.
Definition: res_ari_model.c:91
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
static void ast_ari_asterisk_ping_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/ping.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 415 of file res_ari_asterisk.c.

References ast_ari_asterisk_ping(), ast_ari_response_error(), ast_ari_validate_asterisk_ping(), ast_ari_response::message, and ast_ari_response::response_code.

419 {
420  struct ast_ari_asterisk_ping_args args = {};
421 #if defined(AST_DEVMODE)
422  int is_valid;
423  int code;
424 #endif /* AST_DEVMODE */
425 
426  ast_ari_asterisk_ping(headers, &args, response);
427 #if defined(AST_DEVMODE)
428  code = response->response_code;
429 
430  switch (code) {
431  case 0: /* Implementation is still a stub, or the code wasn't set */
432  is_valid = response->message == NULL;
433  break;
434  case 500: /* Internal Server Error */
435  case 501: /* Not Implemented */
436  is_valid = 1;
437  break;
438  default:
439  if (200 <= code && code <= 299) {
441  response->message);
442  } else {
443  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/ping\n", code);
444  is_valid = 0;
445  }
446  }
447 
448  if (!is_valid) {
449  ast_log(LOG_ERROR, "Response validation failed for /asterisk/ping\n");
450  ast_ari_response_error(response, 500,
451  "Internal Server Error", "Response validation failed");
452  }
453 #endif /* AST_DEVMODE */
454 
455 fin: __attribute__((unused))
456  return;
457 }
int ast_ari_validate_asterisk_ping(struct ast_json *json)
Validator for AsteriskPing.
int response_code
Definition: ari.h:99
void ast_ari_asterisk_ping(struct ast_variable *headers, struct ast_ari_asterisk_ping_args *args, struct ast_ari_response *response)
Response pong message.
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
static void ast_ari_asterisk_reload_module_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/modules/{moduleName}.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 701 of file res_ari_asterisk.c.

References ast_ari_asterisk_reload_module(), ast_ari_response_error(), ast_ari_validate_void(), ast_ari_response::message, ast_ari_asterisk_reload_module_args::module_name, ast_variable::name, ast_variable::next, ast_ari_response::response_code, and ast_variable::value.

705 {
706  struct ast_ari_asterisk_reload_module_args args = {};
707  struct ast_variable *i;
708 #if defined(AST_DEVMODE)
709  int is_valid;
710  int code;
711 #endif /* AST_DEVMODE */
712 
713  for (i = path_vars; i; i = i->next) {
714  if (strcmp(i->name, "moduleName") == 0) {
715  args.module_name = (i->value);
716  } else
717  {}
718  }
719  ast_ari_asterisk_reload_module(headers, &args, response);
720 #if defined(AST_DEVMODE)
721  code = response->response_code;
722 
723  switch (code) {
724  case 0: /* Implementation is still a stub, or the code wasn't set */
725  is_valid = response->message == NULL;
726  break;
727  case 500: /* Internal Server Error */
728  case 501: /* Not Implemented */
729  case 404: /* Module not found in running modules. */
730  case 409: /* Module could not be reloaded. */
731  is_valid = 1;
732  break;
733  default:
734  if (200 <= code && code <= 299) {
735  is_valid = ast_ari_validate_void(
736  response->message);
737  } else {
738  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/modules/{moduleName}\n", code);
739  is_valid = 0;
740  }
741  }
742 
743  if (!is_valid) {
744  ast_log(LOG_ERROR, "Response validation failed for /asterisk/modules/{moduleName}\n");
745  ast_ari_response_error(response, 500,
746  "Internal Server Error", "Response validation failed");
747  }
748 #endif /* AST_DEVMODE */
749 
750 fin: __attribute__((unused))
751  return;
752 }
struct ast_variable * next
Structure for variables, used for configurations and for channel variables.
int ast_ari_validate_void(struct ast_json *json)
Validator for native Swagger void.
Definition: res_ari_model.c:91
int response_code
Definition: ari.h:99
void ast_ari_asterisk_reload_module(struct ast_variable *headers, struct ast_ari_asterisk_reload_module_args *args, struct ast_ari_response *response)
Reload an Asterisk module.
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
static void ast_ari_asterisk_rotate_log_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/logging/{logChannelName}/rotate.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 958 of file res_ari_asterisk.c.

References ast_ari_asterisk_rotate_log(), ast_ari_response_error(), ast_ari_validate_void(), ast_ari_asterisk_rotate_log_args::log_channel_name, ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_response::response_code, and ast_variable::value.

962 {
963  struct ast_ari_asterisk_rotate_log_args args = {};
964  struct ast_variable *i;
965 #if defined(AST_DEVMODE)
966  int is_valid;
967  int code;
968 #endif /* AST_DEVMODE */
969 
970  for (i = path_vars; i; i = i->next) {
971  if (strcmp(i->name, "logChannelName") == 0) {
972  args.log_channel_name = (i->value);
973  } else
974  {}
975  }
976  ast_ari_asterisk_rotate_log(headers, &args, response);
977 #if defined(AST_DEVMODE)
978  code = response->response_code;
979 
980  switch (code) {
981  case 0: /* Implementation is still a stub, or the code wasn't set */
982  is_valid = response->message == NULL;
983  break;
984  case 500: /* Internal Server Error */
985  case 501: /* Not Implemented */
986  case 404: /* Log channel does not exist. */
987  is_valid = 1;
988  break;
989  default:
990  if (200 <= code && code <= 299) {
991  is_valid = ast_ari_validate_void(
992  response->message);
993  } else {
994  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/logging/{logChannelName}/rotate\n", code);
995  is_valid = 0;
996  }
997  }
998 
999  if (!is_valid) {
1000  ast_log(LOG_ERROR, "Response validation failed for /asterisk/logging/{logChannelName}/rotate\n");
1001  ast_ari_response_error(response, 500,
1002  "Internal Server Error", "Response validation failed");
1003  }
1004 #endif /* AST_DEVMODE */
1005 
1006 fin: __attribute__((unused))
1007  return;
1008 }
struct ast_variable * next
Structure for variables, used for configurations and for channel variables.
int ast_ari_validate_void(struct ast_json *json)
Validator for native Swagger void.
Definition: res_ari_model.c:91
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
void ast_ari_asterisk_rotate_log(struct ast_variable *headers, struct ast_ari_asterisk_rotate_log_args *args, struct ast_ari_response *response)
Rotates a log channel.
static void ast_ari_asterisk_set_global_var_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/variable.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 1112 of file res_ari_asterisk.c.

References ast_ari_asterisk_set_global_var(), ast_ari_asterisk_set_global_var_parse_body(), ast_ari_response_alloc_failed(), ast_ari_response_error(), ast_ari_validate_void(), ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_response::response_code, ast_variable::value, ast_ari_asterisk_set_global_var_args::value, and ast_ari_asterisk_set_global_var_args::variable.

1116 {
1117  struct ast_ari_asterisk_set_global_var_args args = {};
1118  struct ast_variable *i;
1119 #if defined(AST_DEVMODE)
1120  int is_valid;
1121  int code;
1122 #endif /* AST_DEVMODE */
1123 
1124  for (i = get_params; i; i = i->next) {
1125  if (strcmp(i->name, "variable") == 0) {
1126  args.variable = (i->value);
1127  } else
1128  if (strcmp(i->name, "value") == 0) {
1129  args.value = (i->value);
1130  } else
1131  {}
1132  }
1133  if (ast_ari_asterisk_set_global_var_parse_body(body, &args)) {
1135  goto fin;
1136  }
1137  ast_ari_asterisk_set_global_var(headers, &args, response);
1138 #if defined(AST_DEVMODE)
1139  code = response->response_code;
1140 
1141  switch (code) {
1142  case 0: /* Implementation is still a stub, or the code wasn't set */
1143  is_valid = response->message == NULL;
1144  break;
1145  case 500: /* Internal Server Error */
1146  case 501: /* Not Implemented */
1147  case 400: /* Missing variable parameter. */
1148  is_valid = 1;
1149  break;
1150  default:
1151  if (200 <= code && code <= 299) {
1152  is_valid = ast_ari_validate_void(
1153  response->message);
1154  } else {
1155  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/variable\n", code);
1156  is_valid = 0;
1157  }
1158  }
1159 
1160  if (!is_valid) {
1161  ast_log(LOG_ERROR, "Response validation failed for /asterisk/variable\n");
1162  ast_ari_response_error(response, 500,
1163  "Internal Server Error", "Response validation failed");
1164  }
1165 #endif /* AST_DEVMODE */
1166 
1167 fin: __attribute__((unused))
1168  return;
1169 }
struct ast_variable * next
Structure for variables, used for configurations and for channel variables.
void ast_ari_response_alloc_failed(struct ast_ari_response *response)
Fill in response with a 500 message for allocation failures.
Definition: res_ari.c:298
int ast_ari_validate_void(struct ast_json *json)
Validator for native Swagger void.
Definition: res_ari_model.c:91
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
int ast_ari_asterisk_set_global_var_parse_body(struct ast_json *body, struct ast_ari_asterisk_set_global_var_args *args)
Body parsing function for /asterisk/variable.
void ast_ari_asterisk_set_global_var(struct ast_variable *headers, struct ast_ari_asterisk_set_global_var_args *args, struct ast_ari_response *response)
Set the value of a global variable.
int ast_ari_asterisk_set_global_var_parse_body ( struct ast_json body,
struct ast_ari_asterisk_set_global_var_args args 
)

Body parsing function for /asterisk/variable.

Parameters
bodyThe JSON body from which to parse parameters.
[out]argsThe args structure to parse into.
Return values
zeroon success
non-zeroon failure

Definition at line 1086 of file res_ari_asterisk.c.

References ast_json_object_get(), ast_json_string_get(), ast_ari_asterisk_set_global_var_args::value, and ast_ari_asterisk_set_global_var_args::variable.

Referenced by ast_ari_asterisk_set_global_var_cb().

1089 {
1090  struct ast_json *field;
1091  /* Parse query parameters out of it */
1092  field = ast_json_object_get(body, "variable");
1093  if (field) {
1094  args->variable = ast_json_string_get(field);
1095  }
1096  field = ast_json_object_get(body, "value");
1097  if (field) {
1098  args->value = ast_json_string_get(field);
1099  }
1100  return 0;
1101 }
const char * ast_json_string_get(const struct ast_json *string)
Get the value of a JSON string.
Definition: json.c:283
struct ast_json * ast_json_object_get(struct ast_json *object, const char *key)
Get a field from a JSON object.
Definition: json.c:407
Abstract JSON element (object, array, string, int, ...).
static void ast_ari_asterisk_unload_module_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/modules/{moduleName}.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 640 of file res_ari_asterisk.c.

References ast_ari_asterisk_unload_module(), ast_ari_response_error(), ast_ari_validate_void(), ast_ari_response::message, ast_ari_asterisk_unload_module_args::module_name, ast_variable::name, ast_variable::next, ast_ari_response::response_code, and ast_variable::value.

644 {
645  struct ast_ari_asterisk_unload_module_args args = {};
646  struct ast_variable *i;
647 #if defined(AST_DEVMODE)
648  int is_valid;
649  int code;
650 #endif /* AST_DEVMODE */
651 
652  for (i = path_vars; i; i = i->next) {
653  if (strcmp(i->name, "moduleName") == 0) {
654  args.module_name = (i->value);
655  } else
656  {}
657  }
658  ast_ari_asterisk_unload_module(headers, &args, response);
659 #if defined(AST_DEVMODE)
660  code = response->response_code;
661 
662  switch (code) {
663  case 0: /* Implementation is still a stub, or the code wasn't set */
664  is_valid = response->message == NULL;
665  break;
666  case 500: /* Internal Server Error */
667  case 501: /* Not Implemented */
668  case 404: /* Module not found in running modules. */
669  case 409: /* Module could not be unloaded. */
670  is_valid = 1;
671  break;
672  default:
673  if (200 <= code && code <= 299) {
674  is_valid = ast_ari_validate_void(
675  response->message);
676  } else {
677  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/modules/{moduleName}\n", code);
678  is_valid = 0;
679  }
680  }
681 
682  if (!is_valid) {
683  ast_log(LOG_ERROR, "Response validation failed for /asterisk/modules/{moduleName}\n");
684  ast_ari_response_error(response, 500,
685  "Internal Server Error", "Response validation failed");
686  }
687 #endif /* AST_DEVMODE */
688 
689 fin: __attribute__((unused))
690  return;
691 }
struct ast_variable * next
Structure for variables, used for configurations and for channel variables.
int ast_ari_validate_void(struct ast_json *json)
Validator for native Swagger void.
Definition: res_ari_model.c:91
int response_code
Definition: ari.h:99
void ast_ari_asterisk_unload_module(struct ast_variable *headers, struct ast_ari_asterisk_unload_module_args *args, struct ast_ari_response *response)
Unload an Asterisk module.
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
static void ast_ari_asterisk_update_object_cb ( struct ast_tcptls_session_instance ser,
struct ast_variable get_params,
struct ast_variable path_vars,
struct ast_variable headers,
struct ast_json body,
struct ast_ari_response response 
)
static

Parameter parsing callback for /asterisk/config/dynamic/{configClass}/{objectType}/{id}.

Parameters
serTCP/TLS session object
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
body
[out]responseResponse to the HTTP request.

Definition at line 136 of file res_ari_asterisk.c.

References ast_ari_asterisk_update_object(), ast_ari_response_error(), ast_ari_validate_config_tuple_fn(), ast_ari_validate_list(), ast_ari_asterisk_update_object_args::config_class, ast_ari_asterisk_update_object_args::fields, ast_ari_asterisk_update_object_args::id, ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_asterisk_update_object_args::object_type, ast_ari_response::response_code, and ast_variable::value.

140 {
141  struct ast_ari_asterisk_update_object_args args = {};
142  struct ast_variable *i;
143 #if defined(AST_DEVMODE)
144  int is_valid;
145  int code;
146 #endif /* AST_DEVMODE */
147 
148  for (i = path_vars; i; i = i->next) {
149  if (strcmp(i->name, "configClass") == 0) {
150  args.config_class = (i->value);
151  } else
152  if (strcmp(i->name, "objectType") == 0) {
153  args.object_type = (i->value);
154  } else
155  if (strcmp(i->name, "id") == 0) {
156  args.id = (i->value);
157  } else
158  {}
159  }
160  args.fields = body;
161  ast_ari_asterisk_update_object(headers, &args, response);
162 #if defined(AST_DEVMODE)
163  code = response->response_code;
164 
165  switch (code) {
166  case 0: /* Implementation is still a stub, or the code wasn't set */
167  is_valid = response->message == NULL;
168  break;
169  case 500: /* Internal Server Error */
170  case 501: /* Not Implemented */
171  case 400: /* Bad request body */
172  case 403: /* Could not create or update object */
173  case 404: /* {configClass|objectType} not found */
174  is_valid = 1;
175  break;
176  default:
177  if (200 <= code && code <= 299) {
178  is_valid = ast_ari_validate_list(response->message,
180  } else {
181  ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/config/dynamic/{configClass}/{objectType}/{id}\n", code);
182  is_valid = 0;
183  }
184  }
185 
186  if (!is_valid) {
187  ast_log(LOG_ERROR, "Response validation failed for /asterisk/config/dynamic/{configClass}/{objectType}/{id}\n");
188  ast_ari_response_error(response, 500,
189  "Internal Server Error", "Response validation failed");
190  }
191 #endif /* AST_DEVMODE */
192 
193 fin: __attribute__((unused))
194  return;
195 }
struct ast_variable * next
ari_validator ast_ari_validate_config_tuple_fn(void)
Function pointer to ast_ari_validate_config_tuple().
Structure for variables, used for configurations and for channel variables.
int response_code
Definition: ari.h:99
void ast_ari_response_error(struct ast_ari_response *response, int response_code, const char *response_text, const char *message_fmt,...)
Fill in an error ast_ari_response.
Definition: res_ari.c:259
struct ast_json * message
Definition: ari.h:94
void ast_ari_asterisk_update_object(struct ast_variable *headers, struct ast_ari_asterisk_update_object_args *args, struct ast_ari_response *response)
Create or update a dynamic configuration object.
int ast_ari_validate_list(struct ast_json *json, int(*fn)(struct ast_json *))
Validator for a Swagger List[]/JSON array.
int ast_ari_asterisk_update_object_parse_body ( struct ast_json body,
struct ast_ari_asterisk_update_object_args args 
)

Body parsing function for /asterisk/config/dynamic/{configClass}/{objectType}/{id}.

Parameters
bodyThe JSON body from which to parse parameters.
[out]argsThe args structure to parse into.
Return values
zeroon success
non-zeroon failure

Definition at line 119 of file res_ari_asterisk.c.

122 {
123  /* Parse query parameters out of it */
124  return 0;
125 }