Asterisk - The Open Source Telephony Project  18.5.0
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"
#include "ari/ari_model_validators.h"
Include dependency graph for res_ari_sounds.c:

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 = "30ef0c93b36035ec78c9cfd712d36d9b" , .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. More...
 
static struct stasis_rest_handlers sounds_soundId
 REST handler for /api-docs/sounds.json. More...
 

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.

Macro Definition Documentation

◆ MAX_VALS

#define MAX_VALS   128

Definition at line 51 of file res_ari_sounds.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 237 of file res_ari_sounds.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 237 of file res_ari_sounds.c.

◆ ast_ari_sounds_get_cb()

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
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
[out]responseResponse to the HTTP request.

Definition at line 141 of file res_ari_sounds.c.

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

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

◆ ast_ari_sounds_list_cb()

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
get_paramsGET parameters in the HTTP request.
path_varsPath variables extracted from the request.
headersHTTP headers.
[out]responseResponse to the HTTP request.

Definition at line 77 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_log, ast_ari_sounds_list_args::format, ast_ari_sounds_list_args::lang, LOG_ERROR, ast_ari_response::message, ast_variable::name, ast_variable::next, NULL, ast_ari_response::response_code, and ast_variable::value.

81 {
82  struct ast_ari_sounds_list_args args = {};
83  struct ast_variable *i;
84 #if defined(AST_DEVMODE)
85  int is_valid;
86  int code;
87 #endif /* AST_DEVMODE */
88 
89  for (i = get_params; i; i = i->next) {
90  if (strcmp(i->name, "lang") == 0) {
91  args.lang = (i->value);
92  } else
93  if (strcmp(i->name, "format") == 0) {
94  args.format = (i->value);
95  } else
96  {}
97  }
98  if (ast_ari_sounds_list_parse_body(body, &args)) {
100  goto fin;
101  }
102  ast_ari_sounds_list(headers, &args, response);
103 #if defined(AST_DEVMODE)
104  code = response->response_code;
105 
106  switch (code) {
107  case 0: /* Implementation is still a stub, or the code wasn't set */
108  is_valid = response->message == NULL;
109  break;
110  case 500: /* Internal Server Error */
111  case 501: /* Not Implemented */
112  is_valid = 1;
113  break;
114  default:
115  if (200 <= code && code <= 299) {
116  is_valid = ast_ari_validate_list(response->message,
118  } else {
119  ast_log(LOG_ERROR, "Invalid error response %d for /sounds\n", code);
120  is_valid = 0;
121  }
122  }
123 
124  if (!is_valid) {
125  ast_log(LOG_ERROR, "Response validation failed for /sounds\n");
126  ast_ari_response_error(response, 500,
127  "Internal Server Error", "Response validation failed");
128  }
129 #endif /* AST_DEVMODE */
130 
131 fin: __attribute__((unused))
132  return;
133 }
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.
const char * args
#define NULL
Definition: resample.c:96
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:98
#define ast_log
Definition: astobj2.c:42
#define LOG_ERROR
Definition: logger.h:285
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:93
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.

◆ ast_ari_sounds_list_parse_body()

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:273
struct ast_json * ast_json_object_get(struct ast_json *object, const char *key)
Get a field from a JSON object.
Definition: json.c:397
Abstract JSON element (object, array, string, int, ...).

◆ AST_MODULE_SELF_SYM()

struct ast_module* AST_MODULE_SELF_SYM ( void  )

Definition at line 237 of file res_ari_sounds.c.

◆ load_module()

static int load_module ( void  )
static

Definition at line 218 of file res_ari_sounds.c.

References ast_ari_add_handler(), AST_MODFLAG_DEFAULT, AST_MODULE_INFO(), AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, AST_MODULE_SUPPORT_CORE, ASTERISK_GPL_KEY, and unload_module().

219 {
220  int res = 0;
221 
222 
223  res |= ast_ari_add_handler(&sounds);
224  if (res) {
225  unload_module();
227  }
228 
230 }
static int unload_module(void)
static struct stasis_rest_handlers sounds
REST handler for /api-docs/sounds.json.
int ast_ari_add_handler(struct stasis_rest_handlers *handler)
Definition: res_ari.c:179
Module has failed to load, may be in an inconsistent state.
Definition: module.h:78

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 212 of file res_ari_sounds.c.

References ast_ari_remove_handler().

Referenced by load_module().

213 {
215  return 0;
216 }
static struct stasis_rest_handlers sounds
REST handler for /api-docs/sounds.json.
int ast_ari_remove_handler(struct stasis_rest_handlers *handler)
Definition: res_ari.c:202

Variable Documentation

◆ __mod_info

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 = "30ef0c93b36035ec78c9cfd712d36d9b" , .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .requires = "res_ari,res_ari_model,res_stasis", }
static

Definition at line 237 of file res_ari_sounds.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 237 of file res_ari_sounds.c.

◆ sounds

struct stasis_rest_handlers sounds
static

REST handler for /api-docs/sounds.json.

Definition at line 203 of file res_ari_sounds.c.

Referenced by bridge_profile_sounds_alloc(), bridge_profile_sounds_destroy_cb(), bridge_template_handler(), and set_sound().

◆ sounds_soundId

struct stasis_rest_handlers sounds_soundId
static

REST handler for /api-docs/sounds.json.

Definition at line 193 of file res_ari_sounds.c.