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

Sound resources. More...

#include "asterisk.h"
#include "asterisk/app.h"
#include "asterisk/module.h"
#include "asterisk/stasis_app.h"
#include "ari/resource_sounds.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_sounds_get_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 /sounds/{soundId}. More...
 
static void ast_ari_sounds_list_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 /sounds. More...
 
int ast_ari_sounds_list_parse_body (struct ast_json *body, struct ast_ari_sounds_list_args *args)
 Body parsing function for /sounds. 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 - Sound 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 sounds
 REST handler for /api-docs/sounds.json.
 
static struct stasis_rest_handlers sounds_soundId
 REST handler for /api-docs/sounds.json.
 

Detailed Description

Sound resources.

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

Definition in file res_ari_sounds.c.

Function Documentation

static void ast_ari_sounds_get_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 /sounds/{soundId}.

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 145 of file res_ari_sounds.c.

References ast_ari_response_error(), ast_ari_sounds_get(), ast_ari_validate_sound(), ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_response::response_code, ast_ari_sounds_get_args::sound_id, and ast_variable::value.

149 {
150  struct ast_ari_sounds_get_args args = {};
151  struct ast_variable *i;
152 #if defined(AST_DEVMODE)
153  int is_valid;
154  int code;
155 #endif /* AST_DEVMODE */
156 
157  for (i = path_vars; i; i = i->next) {
158  if (strcmp(i->name, "soundId") == 0) {
159  args.sound_id = (i->value);
160  } else
161  {}
162  }
163  ast_ari_sounds_get(headers, &args, response);
164 #if defined(AST_DEVMODE)
165  code = response->response_code;
166 
167  switch (code) {
168  case 0: /* Implementation is still a stub, or the code wasn't set */
169  is_valid = response->message == NULL;
170  break;
171  case 500: /* Internal Server Error */
172  case 501: /* Not Implemented */
173  is_valid = 1;
174  break;
175  default:
176  if (200 <= code && code <= 299) {
177  is_valid = ast_ari_validate_sound(
178  response->message);
179  } else {
180  ast_log(LOG_ERROR, "Invalid error response %d for /sounds/{soundId}\n", code);
181  is_valid = 0;
182  }
183  }
184 
185  if (!is_valid) {
186  ast_log(LOG_ERROR, "Response validation failed for /sounds/{soundId}\n");
187  ast_ari_response_error(response, 500,
188  "Internal Server Error", "Response validation failed");
189  }
190 #endif /* AST_DEVMODE */
191 
192 fin: __attribute__((unused))
193  return;
194 }
struct ast_variable * next
void ast_ari_sounds_get(struct ast_variable *headers, struct ast_ari_sounds_get_args *args, struct ast_ari_response *response)
Get a sound's details.
Structure for variables, used for configurations and for channel variables.
int response_code
Definition: ari.h:99
int ast_ari_validate_sound(struct ast_json *json)
Validator for Sound.
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_sounds_list_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 /sounds.

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 79 of file res_ari_sounds.c.

References ast_ari_response_alloc_failed(), ast_ari_response_error(), ast_ari_sounds_list(), ast_ari_sounds_list_parse_body(), ast_ari_validate_list(), ast_ari_validate_sound_fn(), ast_ari_sounds_list_args::format, ast_ari_sounds_list_args::lang, ast_ari_response::message, ast_variable::name, ast_variable::next, ast_ari_response::response_code, and ast_variable::value.

83 {
84  struct ast_ari_sounds_list_args args = {};
85  struct ast_variable *i;
86 #if defined(AST_DEVMODE)
87  int is_valid;
88  int code;
89 #endif /* AST_DEVMODE */
90 
91  for (i = get_params; i; i = i->next) {
92  if (strcmp(i->name, "lang") == 0) {
93  args.lang = (i->value);
94  } else
95  if (strcmp(i->name, "format") == 0) {
96  args.format = (i->value);
97  } else
98  {}
99  }
100  if (ast_ari_sounds_list_parse_body(body, &args)) {
102  goto fin;
103  }
104  ast_ari_sounds_list(headers, &args, response);
105 #if defined(AST_DEVMODE)
106  code = response->response_code;
107 
108  switch (code) {
109  case 0: /* Implementation is still a stub, or the code wasn't set */
110  is_valid = response->message == NULL;
111  break;
112  case 500: /* Internal Server Error */
113  case 501: /* Not Implemented */
114  is_valid = 1;
115  break;
116  default:
117  if (200 <= code && code <= 299) {
118  is_valid = ast_ari_validate_list(response->message,
120  } else {
121  ast_log(LOG_ERROR, "Invalid error response %d for /sounds\n", code);
122  is_valid = 0;
123  }
124  }
125 
126  if (!is_valid) {
127  ast_log(LOG_ERROR, "Response validation failed for /sounds\n");
128  ast_ari_response_error(response, 500,
129  "Internal Server Error", "Response validation failed");
130  }
131 #endif /* AST_DEVMODE */
132 
133 fin: __attribute__((unused))
134  return;
135 }
struct ast_variable * next
void ast_ari_sounds_list(struct ast_variable *headers, struct ast_ari_sounds_list_args *args, struct ast_ari_response *response)
List all sounds.
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 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
ari_validator ast_ari_validate_sound_fn(void)
Function pointer to ast_ari_validate_sound().
int ast_ari_validate_list(struct ast_json *json, int(*fn)(struct ast_json *))
Validator for a Swagger List[]/JSON array.
int ast_ari_sounds_list_parse_body(struct ast_json *body, struct ast_ari_sounds_list_args *args)
Body parsing function for /sounds.
int ast_ari_sounds_list_parse_body ( struct ast_json body,
struct ast_ari_sounds_list_args args 
)

Body parsing function for /sounds.

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 53 of file res_ari_sounds.c.

References ast_json_object_get(), ast_json_string_get(), ast_ari_sounds_list_args::format, and ast_ari_sounds_list_args::lang.

Referenced by ast_ari_sounds_list_cb().

56 {
57  struct ast_json *field;
58  /* Parse query parameters out of it */
59  field = ast_json_object_get(body, "lang");
60  if (field) {
61  args->lang = ast_json_string_get(field);
62  }
63  field = ast_json_object_get(body, "format");
64  if (field) {
65  args->format = ast_json_string_get(field);
66  }
67  return 0;
68 }
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, ...).