Asterisk - The Open Source Telephony Project GIT-master-7e7a603
Data Structures | Macros | Typedefs | Enumerations | Functions
res_aeap.h File Reference

Asterisk External Application Protocol API. More...

#include <stdint.h>
Include dependency graph for res_aeap.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ast_aeap_message_handler
 An Asterisk external application message handler. More...
 
struct  ast_aeap_params
 Callbacks and other parameters used by an Asterisk external application object. More...
 
struct  ast_aeap_tsx_params
 Parameters to be used when sending a transaction based message. More...
 

Macros

#define AEAP_CONFIG_CLIENT   "client"
 

Typedefs

typedef int(* ast_aeap_on_message) (struct ast_aeap *aeap, struct ast_aeap_message *message, void *obj)
 Event raised when a message is received. More...
 
typedef void(* ast_aeap_on_timeout) (struct ast_aeap *aeap, struct ast_aeap_message *message, void *obj)
 Event raised when a sent message does not receive a reply within a specified time interval. More...
 
typedef void(* ast_aeap_user_obj_cleanup) (void *obj)
 Callback to cleanup a user object. More...
 

Enumerations

enum  AST_AEAP_DATA_TYPE { AST_AEAP_DATA_TYPE_NONE , AST_AEAP_DATA_TYPE_BINARY , AST_AEAP_DATA_TYPE_STRING }
 Supported Asterisk external application data types. More...
 

Functions

const struct ast_format_capast_aeap_client_config_codecs (const struct ast_aeap_client_config *cfg)
 Retrieve codec capabilities from the configuration. More...
 
int ast_aeap_client_config_has_protocol (const struct ast_aeap_client_config *cfg, const char *protocol)
 Check a given protocol against that in an Asterisk external application configuration. More...
 
struct ao2_containerast_aeap_client_configs_get (const char *protocol)
 Retrieve a listing of all client configuration objects by protocol. More...
 
int ast_aeap_connect (struct ast_aeap *aeap, const char *url, const char *protocol, int timeout)
 Connect to an external application. More...
 
struct ast_aeapast_aeap_create (const char *type, const struct ast_aeap_params *params)
 Create an Asterisk external application object. More...
 
struct ast_aeapast_aeap_create_and_connect (const char *type, const struct ast_aeap_params *params, const char *url, const char *protocol, int timeout)
 Create and connect to an Asterisk external application. More...
 
struct ast_aeapast_aeap_create_and_connect_by_id (const char *id, const struct ast_aeap_params *params, int timeout)
 Create and connect to an Asterisk external application by sorcery id. More...
 
struct ast_aeapast_aeap_create_by_id (const char *id, const struct ast_aeap_params *params)
 Create an Asterisk external application object by sorcery id. More...
 
struct ast_variableast_aeap_custom_fields_get (const char *id)
 Retrieve a list of custom configuration fields. More...
 
int ast_aeap_disconnect (struct ast_aeap *aeap)
 Disconnect an Asterisk external application object. More...
 
int ast_aeap_send_binary (struct ast_aeap *aeap, const void *buf, uintmax_t size)
 Send a binary data to an external application. More...
 
int ast_aeap_send_msg (struct ast_aeap *aeap, struct ast_aeap_message *msg)
 Send a message to an external application. More...
 
int ast_aeap_send_msg_tsx (struct ast_aeap *aeap, struct ast_aeap_tsx_params *params)
 Send a transaction based message to an external application using the given parameters. More...
 
struct ast_sorceryast_aeap_sorcery (void)
 Retrieve the AEAP sorcery object. More...
 
void * ast_aeap_user_data_object_by_id (struct ast_aeap *aeap, const char *id)
 Retrieve a registered user data object by its id. More...
 
int ast_aeap_user_data_register (struct ast_aeap *aeap, const char *id, void *obj, ast_aeap_user_obj_cleanup cleanup)
 Register a user data object. More...
 
void ast_aeap_user_data_unregister (struct ast_aeap *aeap, const char *id)
 Un-register a user data object. More...
 

Detailed Description

Asterisk External Application Protocol API.

Definition in file res_aeap.h.

Macro Definition Documentation

◆ AEAP_CONFIG_CLIENT

#define AEAP_CONFIG_CLIENT   "client"

Definition at line 35 of file res_aeap.h.

Typedef Documentation

◆ ast_aeap_on_message

typedef int(* ast_aeap_on_message) (struct ast_aeap *aeap, struct ast_aeap_message *message, void *obj)

Event raised when a message is received.

Parameters
aeapAn Asterisk external application object
messageThe received message
objAssociated user object
Returns
0 on if message handled, otherwise non-zero

Definition at line 101 of file res_aeap.h.

◆ ast_aeap_on_timeout

typedef void(* ast_aeap_on_timeout) (struct ast_aeap *aeap, struct ast_aeap_message *message, void *obj)

Event raised when a sent message does not receive a reply within a specified time interval.

Parameters
aeapAn Asterisk external application object
messageThe message sent that received no response
objAssociated user object

Definition at line 123 of file res_aeap.h.

◆ ast_aeap_user_obj_cleanup

typedef void(* ast_aeap_user_obj_cleanup) (void *obj)

Callback to cleanup a user object.

Parameters
objThe user object

Definition at line 130 of file res_aeap.h.

Enumeration Type Documentation

◆ AST_AEAP_DATA_TYPE

Supported Asterisk external application data types.

Enumerator
AST_AEAP_DATA_TYPE_NONE 
AST_AEAP_DATA_TYPE_BINARY 
AST_AEAP_DATA_TYPE_STRING 

Definition at line 135 of file res_aeap.h.

135 {
139};
@ AST_AEAP_DATA_TYPE_NONE
Definition: res_aeap.h:136
@ AST_AEAP_DATA_TYPE_BINARY
Definition: res_aeap.h:137
@ AST_AEAP_DATA_TYPE_STRING
Definition: res_aeap.h:138

Function Documentation

◆ ast_aeap_client_config_codecs()

const struct ast_format_cap * ast_aeap_client_config_codecs ( const struct ast_aeap_client_config cfg)

Retrieve codec capabilities from the configuration.

Parameters
cfgA configuration object
Returns
The configuration's codec capabilities

Definition at line 131 of file res_aeap.c.

132{
133 return cfg->codecs;
134}
struct ast_format_cap * codecs
Definition: res_aeap.c:81

References ast_aeap_client_config::codecs.

Referenced by load_engine().

◆ ast_aeap_client_config_has_protocol()

int ast_aeap_client_config_has_protocol ( const struct ast_aeap_client_config cfg,
const char *  protocol 
)

Check a given protocol against that in an Asterisk external application configuration.

Parameters
cfgA configuration object
protocolThe protocol to check
Returns
True if the configuration's protocol matches, false otherwise

Definition at line 136 of file res_aeap.c.

138{
139 return !strcmp(protocol, cfg->protocol);
140}
const ast_string_field protocol
Definition: res_aeap.c:79

References ast_aeap_client_config::protocol.

Referenced by load_engine(), and unload_engine().

◆ ast_aeap_client_configs_get()

struct ao2_container * ast_aeap_client_configs_get ( const char *  protocol)

Retrieve a listing of all client configuration objects by protocol.

Note
Caller is responsible for the returned container's reference.
Parameters
protocolAn optional protocol to filter on (if NULL returns all client configs)
Returns
A container of client configuration objects

Definition at line 142 of file res_aeap.c.

143{
144 struct ao2_container *container;
145 struct ast_variable *var;
146
147 var = protocol ? ast_variable_new("protocol ==", protocol, "") : NULL;
148
151
153
154 return container;
155}
#define var
Definition: ast_expr2f.c:605
#define ast_variable_new(name, value, filename)
void ast_variables_destroy(struct ast_variable *var)
Free variable list.
Definition: extconf.c:1262
static struct ast_sorcery * aeap_sorcery
Definition: res_aeap.c:65
#define AEAP_CONFIG_CLIENT
Definition: res_aeap.h:35
struct ao2_container * container
Definition: res_fax.c:501
#define NULL
Definition: resample.c:96
@ AST_RETRIEVE_FLAG_MULTIPLE
Return all matching objects.
Definition: sorcery.h:120
@ AST_RETRIEVE_FLAG_ALL
Perform no matching, return all objects.
Definition: sorcery.h:123
void * ast_sorcery_retrieve_by_fields(const struct ast_sorcery *sorcery, const char *type, unsigned int flags, struct ast_variable *fields)
Retrieve an object or multiple objects using specific fields.
Definition: sorcery.c:1897
Generic container type.
Structure for variables, used for configurations and for channel variables.

References AEAP_CONFIG_CLIENT, aeap_sorcery, AST_RETRIEVE_FLAG_ALL, AST_RETRIEVE_FLAG_MULTIPLE, ast_sorcery_retrieve_by_fields(), ast_variable_new, ast_variables_destroy(), container, NULL, and var.

Referenced by client_config_show(), client_config_show_all(), load_module(), speech_observer_loaded(), and unload_module().

◆ ast_aeap_connect()

int ast_aeap_connect ( struct ast_aeap aeap,
const char *  url,
const char *  protocol,
int  timeout 
)

Connect to an external application.

Parameters
aeapAn Asterisk external application object
urlThe url to connect to
protocolA protocol to use
timeoutHow long (in milliseconds) to attempt to connect (-1 equals infinite)
Returns
0 if able to connect, -1 on error

Definition at line 338 of file aeap.c.

339{
340 SCOPED_AO2LOCK(lock, aeap);
341
343 /* Should already be connected, so nothing to do */
344 return 0;
345 }
346
347 if (aeap_transport_connect(aeap->transport, url, protocol, timeout)) {
348 aeap_error(aeap, NULL, "unable to connect transport");
349 return -1;
350 }
351
353 aeap_receive, aeap)) {
354 aeap_error(aeap, NULL, "unable to start read thread: %s",
355 strerror(errno));
357 return -1;
358 }
359
360 return 0;
361}
int ast_aeap_disconnect(struct ast_aeap *aeap)
Disconnect an Asterisk external application object.
Definition: aeap.c:381
static void * aeap_receive(void *data)
Definition: aeap.c:269
ast_mutex_t lock
Definition: app_sla.c:331
#define SCOPED_AO2LOCK(varname, obj)
scoped lock specialization for ao2 mutexes.
Definition: lock.h:604
int errno
#define aeap_error(obj, name, fmt,...)
Log an Asterisk external application error.
static char url[512]
struct aeap_transport * transport
Definition: aeap.c:55
pthread_t read_thread_id
Definition: aeap.c:57
int aeap_transport_connect(struct aeap_transport *transport, const char *url, const char *protocol, int timeout)
Connect a transport.
Definition: transport.c:48
int aeap_transport_is_connected(struct aeap_transport *transport)
Whether or not the transport is in a connected state.
Definition: transport.c:85
#define ast_pthread_create_background(a, b, c, d)
Definition: utils.h:592

References aeap_error, aeap_receive(), aeap_transport_connect(), aeap_transport_is_connected(), ast_aeap_disconnect(), ast_pthread_create_background, errno, lock, NULL, ast_aeap::read_thread_id, SCOPED_AO2LOCK, ast_aeap::transport, and url.

Referenced by ast_aeap_create_and_connect().

◆ ast_aeap_create()

struct ast_aeap * ast_aeap_create ( const char *  type,
const struct ast_aeap_params params 
)

Create an Asterisk external application object.

Parameters
typeThe type of underlying transport
paramsCallbacks and other parameters to use
Returns
A new ao2 reference counted aeap object, or NULL on error

Definition at line 88 of file aeap.c.

90{
91 struct ast_aeap *aeap;
92
93 aeap = ao2_alloc(sizeof(*aeap), aeap_destructor);
94 if (!aeap) {
95 ast_log(LOG_ERROR, "AEAP: unable to create");
96 return NULL;
97 }
98
99 aeap->params = params;
101
103 aeap_user_data_hash_fn, NULL, aeap_user_data_cmp_fn);
104 if (!aeap->user_data) {
105 aeap_error(aeap, NULL, "unable to create user data container");
106 ao2_ref(aeap, -1);
107 return NULL;
108 }
109
111 if (!aeap->transactions) {
112 aeap_error(aeap, NULL, "unable to create transactions container");
113 ao2_ref(aeap, -1);
114 return NULL;
115 }
116
117 aeap->transport = aeap_transport_create(transport_type);
118 if (!aeap->transport) {
119 aeap_error(aeap, NULL, "unable to create transport");
120 ao2_ref(aeap, -1);
121 return NULL;
122 }
123
124 return aeap;
125}
static void aeap_destructor(void *obj)
Definition: aeap.c:67
#define USER_DATA_BUCKETS
Definition: aeap.c:45
#define ast_log
Definition: astobj2.c:42
@ AO2_ALLOC_OPT_LOCK_MUTEX
Definition: astobj2.h:363
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition: astobj2.h:459
#define ao2_alloc(data_size, destructor_fn)
Definition: astobj2.h:409
#define ao2_container_alloc_hash(ao2_options, container_options, n_buckets, hash_fn, sort_fn, cmp_fn)
Allocate and initialize a hash container with the desired number of buckets.
Definition: astobj2.h:1303
#define LOG_ERROR
#define AST_PTHREADT_NULL
Definition: lock.h:66
Definition: aeap.c:47
const struct ast_aeap_params * params
Definition: aeap.c:49
struct ao2_container * transactions
Definition: aeap.c:53
struct ao2_container * user_data
Definition: aeap.c:51
struct ao2_container * aeap_transactions_create(void)
Create an Asterisk external application transactions container.
Definition: transaction.c:272
struct aeap_transport * aeap_transport_create(const char *type)
Create an Asterisk external application transport.
Definition: transport.c:27

References aeap_destructor(), aeap_error, aeap_transactions_create(), aeap_transport_create(), ao2_alloc, AO2_ALLOC_OPT_LOCK_MUTEX, ao2_container_alloc_hash, ao2_ref, ast_log, AST_PTHREADT_NULL, LOG_ERROR, NULL, ast_aeap::params, ast_aeap::read_thread_id, ast_aeap::transactions, ast_aeap::transport, ast_aeap::user_data, and USER_DATA_BUCKETS.

Referenced by aeap_create(), and ast_aeap_create_and_connect().

◆ ast_aeap_create_and_connect()

struct ast_aeap * ast_aeap_create_and_connect ( const char *  type,
const struct ast_aeap_params params,
const char *  url,
const char *  protocol,
int  timeout 
)

Create and connect to an Asterisk external application.

Parameters
typeThe type of client connection to make
paramsCallbacks and other parameters to use
urlThe url to connect to
protocolA protocol to use
timeoutHow long (in milliseconds) to attempt to connect (-1 equals infinite)
Returns
A new ao2 reference counted aeap object, or NULL on error

Definition at line 363 of file aeap.c.

365{
366 struct ast_aeap *aeap;
367
368 aeap = ast_aeap_create(type, params);
369 if (!aeap) {
370 return NULL;
371 }
372
373 if (ast_aeap_connect(aeap, url, protocol, timeout)) {
374 ao2_ref(aeap, -1);
375 return NULL;
376 }
377
378 return aeap;
379}
struct ast_aeap * ast_aeap_create(const char *transport_type, const struct ast_aeap_params *params)
Create an Asterisk external application object.
Definition: aeap.c:88
int ast_aeap_connect(struct ast_aeap *aeap, const char *url, const char *protocol, int timeout)
Connect to an external application.
Definition: aeap.c:338
static const char type[]
Definition: chan_ooh323.c:109

References ao2_ref, ast_aeap_connect(), ast_aeap_create(), NULL, ast_aeap::params, type, and url.

Referenced by aeap_create(), and AST_TEST_DEFINE().

◆ ast_aeap_create_and_connect_by_id()

struct ast_aeap * ast_aeap_create_and_connect_by_id ( const char *  id,
const struct ast_aeap_params params,
int  timeout 
)

Create and connect to an Asterisk external application by sorcery id.

Parameters
idThe sorcery id to lookup
paramsCallbacks and other parameters to use
timeoutHow long (in milliseconds) to attempt to connect (-1 equals infinite)
Returns
A new ao2 reference counted aeap object, or NULL on error

Definition at line 322 of file res_aeap.c.

324{
325 return aeap_create(id, params, 1, timeout);
326}
static struct ast_aeap * aeap_create(const char *id, const struct ast_aeap_params *params, int connect, int timeout)
Definition: res_aeap.c:284

References aeap_create(), and ast_aeap::params.

Referenced by speech_aeap_engine_create().

◆ ast_aeap_create_by_id()

struct ast_aeap * ast_aeap_create_by_id ( const char *  id,
const struct ast_aeap_params params 
)

Create an Asterisk external application object by sorcery id.

Parameters
idThe sorcery id to lookup
paramsCallbacks and other parameters to use
Returns
A new ao2 reference counted aeap object, or NULL on error

Definition at line 317 of file res_aeap.c.

318{
319 return aeap_create(id, params, 0, 0);
320}

References aeap_create(), and ast_aeap::params.

◆ ast_aeap_custom_fields_get()

struct ast_variable * ast_aeap_custom_fields_get ( const char *  id)

Retrieve a list of custom configuration fields.

Parameters
idconfiguration id/sorcery lookup key
Returns
variables, or NULL on error

Definition at line 328 of file res_aeap.c.

329{
330 struct ast_aeap_client_config *cfg;
331 struct ast_variable *vars;
332
333 cfg = client_config_get(id);
334 if (!cfg) {
335 ast_log(LOG_WARNING, "AEAP: no client configuration '%s' to get fields\n", id);
336 return NULL;
337 }
338
340
341 ao2_ref(cfg, -1);
342 return vars;
343}
#define LOG_WARNING
static struct ast_aeap_client_config * client_config_get(const char *id)
Definition: res_aeap.c:157
#define ast_sorcery_objectset_create(sorcery, object)
Create an object set (KVP list) for an object.
Definition: sorcery.h:1137

References aeap_sorcery, ao2_ref, ast_log, ast_sorcery_objectset_create, client_config_get(), LOG_WARNING, and NULL.

Referenced by speech_aeap_engine_create().

◆ ast_aeap_disconnect()

int ast_aeap_disconnect ( struct ast_aeap aeap)

Disconnect an Asterisk external application object.

Note
Depending on the underlying transport this call may block
Parameters
aeapAn Asterisk external application object
Returns
0 on success, -1 on error

Definition at line 381 of file aeap.c.

382{
383 ao2_lock(aeap);
384
386
387 if (aeap->read_thread_id != AST_PTHREADT_NULL) {
388 /*
389 * The read thread calls disconnect if an error occurs, so
390 * unlock the aeap before "joining" to avoid a deadlock.
391 */
392 ao2_unlock(aeap);
393 pthread_join(aeap->read_thread_id, NULL);
394 ao2_lock(aeap);
395
397 }
398
399 ao2_unlock(aeap);
400
401 return 0;
402}
#define ao2_unlock(a)
Definition: astobj2.h:729
#define ao2_lock(a)
Definition: astobj2.h:717
int aeap_transport_disconnect(struct aeap_transport *transport)
Disconnect a transport.
Definition: transport.c:94

References aeap_transport_disconnect(), ao2_lock, ao2_unlock, AST_PTHREADT_NULL, NULL, ast_aeap::read_thread_id, and ast_aeap::transport.

Referenced by aeap_destructor(), aeap_receive(), and ast_aeap_connect().

◆ ast_aeap_send_binary()

int ast_aeap_send_binary ( struct ast_aeap aeap,
const void *  buf,
uintmax_t  size 
)

Send a binary data to an external application.

Parameters
aeapAn Asterisk external application object
bufBinary data to send
sizeThe size of the binary data
Returns
0 on success, -1 on error

Definition at line 434 of file aeap.c.

435{
436 return aeap_send(aeap, buf, size, AST_AEAP_DATA_TYPE_BINARY);
437}
static int aeap_send(struct ast_aeap *aeap, const void *buf, uintmax_t size, enum AST_AEAP_DATA_TYPE type)
Definition: aeap.c:404
char buf[BUFSIZE]
Definition: eagi_proxy.c:66

References aeap_send(), AST_AEAP_DATA_TYPE_BINARY, and buf.

Referenced by speech_aeap_engine_write().

◆ ast_aeap_send_msg()

int ast_aeap_send_msg ( struct ast_aeap aeap,
struct ast_aeap_message msg 
)

Send a message to an external application.

Note
"Steals" the given message reference, thus callers are not required to un-ref the message object after calling this function.
Parameters
aeapAn Asterisk external application object
msgThe message to send
Returns
0 on success, -1 on error

Definition at line 439 of file aeap.c.

440{
441 void *buf;
442 intmax_t size;
443 int res;
444
445 if (!msg) {
446 aeap_error(aeap, NULL, "no message to send");
447 return -1;
448 }
449
450 if (ast_aeap_message_serialize(msg, &buf, &size)) {
451 aeap_error(aeap, NULL, "unable to serialize outgoing message");
452 ao2_ref(msg, -1);
453 return -1;
454 }
455
456 res = aeap_send(aeap, buf, size, msg->type->serial_type);
457
458 ast_free(buf);
459 ao2_ref(msg, -1);
460
461 return res;
462}
#define ast_free(a)
Definition: astmm.h:180
int ast_aeap_message_serialize(const struct ast_aeap_message *message, void **buf, intmax_t *size)
Serialize the given message object into a byte/char buffer.
enum AST_AEAP_DATA_TYPE serial_type
const struct ast_aeap_message_type * type

References aeap_error, aeap_send(), ao2_ref, ast_aeap_message_serialize(), ast_free, buf, NULL, ast_aeap_message_type::serial_type, and ast_aeap_message::type.

Referenced by ast_aeap_send_msg_tsx(), handle_request_set(), and raise_msg_handler().

◆ ast_aeap_send_msg_tsx()

int ast_aeap_send_msg_tsx ( struct ast_aeap aeap,
struct ast_aeap_tsx_params params 
)

Send a transaction based message to an external application using the given parameters.

Note
"Steals" the given message reference, thus callers are not required to un-ref the message object after calling this function.
Also handles cleaning up the user object if the obj_cleanup callback is specified in "params".
Parameters
aeapAn Asterisk external application object
params(optional) Additional parameters to consider when sending. Heap allocation not required.
Returns
0 on success, -1 on error

Definition at line 464 of file aeap.c.

465{
466 struct aeap_transaction *tsx = NULL;
467 int res = 0;
468
469 if (!params) {
470 return -1;
471 }
472
473 if (!params->msg) {
475 aeap_error(aeap, NULL, "no message to send");
476 return -1;
477 }
478
479 /* The transaction will take over params cleanup, which includes the msg reference */
482 if (!tsx) {
483 return -1;
484 }
485
487 aeap_transaction_end(tsx, -1); /* Removes container, and tsx ref */
488 return -1;
489 }
490
491 if (aeap_transaction_start(tsx)) {
492 aeap_transaction_end(tsx, -1); /* Removes container, and tsx ref */
493 return -1;
494 }
495
496 res = aeap_transaction_result(tsx);
497
498 ao2_ref(tsx, -1);
499
500 return res;
501}
int ast_aeap_send_msg(struct ast_aeap *aeap, struct ast_aeap_message *msg)
Send a message to an external application.
Definition: aeap.c:439
#define ao2_bump(obj)
Bump refcount on an AO2 object by one, returning the object.
Definition: astobj2.h:480
const char * ast_aeap_message_id(const struct ast_aeap_message *message)
Retrieve a message id.
struct ast_aeap * aeap
Definition: transaction.c:34
struct ast_aeap_tsx_params params
Definition: transaction.c:46
struct ast_aeap_message * msg
Definition: res_aeap.h:333
int aeap_transaction_result(struct aeap_transaction *tsx)
Get a transaction's result.
Definition: transaction.c:222
struct aeap_transaction * aeap_transaction_create_and_add(struct ao2_container *transactions, const char *id, struct ast_aeap_tsx_params *params, struct ast_aeap *aeap)
Create a transaction object, and add it to the given container.
Definition: transaction.c:232
void aeap_transaction_end(struct aeap_transaction *tsx, int result)
End a transaction, and remove it from the given container.
Definition: transaction.c:217
int aeap_transaction_start(struct aeap_transaction *tsx)
Start the transaction.
Definition: transaction.c:198
void aeap_transaction_params_cleanup(struct ast_aeap_tsx_params *params)
Clean up parameter references, and possibly call optional user object cleanup.
Definition: transaction.c:67

References aeap_transaction::aeap, aeap_error, aeap_transaction_create_and_add(), aeap_transaction_end(), aeap_transaction_params_cleanup(), aeap_transaction_result(), aeap_transaction_start(), ao2_bump, ao2_ref, ast_aeap_message_id(), ast_aeap_send_msg(), ast_aeap_tsx_params::msg, NULL, aeap_transaction::params, and ast_aeap::transactions.

Referenced by AST_TEST_DEFINE(), and speech_aeap_send_request().

◆ ast_aeap_sorcery()

struct ast_sorcery * ast_aeap_sorcery ( void  )

Retrieve the AEAP sorcery object.

Returns
the AEAP sorcery object

Definition at line 67 of file res_aeap.c.

67 {
68 return aeap_sorcery;
69}

References aeap_sorcery.

Referenced by load_module(), and unload_module().

◆ ast_aeap_user_data_object_by_id()

void * ast_aeap_user_data_object_by_id ( struct ast_aeap aeap,
const char *  id 
)

Retrieve a registered user data object by its id.

Note
Depending on how it was registered the returned user data object's lifetime may be managed by the given "aeap" object. If it was registered with a cleanup handler that [potentially] frees it the caller of this function must ensure it's done using the returned object before it's unregistered.
Parameters
aeapAn Asterisk external application object
idThe look up id for the object
Returns
A user data object

Definition at line 174 of file aeap.c.

175{
176 struct aeap_user_data *data;
177 void *obj;
178
179 data = ao2_find(aeap->user_data, id, OBJ_SEARCH_KEY);
180 if (!data) {
181 return NULL;
182 }
183
184 obj = data->obj;
185 ao2_ref(data, -1);
186
187 /*
188 * Returned object's lifetime is based on how it was registered.
189 * See public function docs for more info
190 */
191 return obj;
192}
#define ao2_find(container, arg, flags)
Definition: astobj2.h:1736
@ OBJ_SEARCH_KEY
The arg parameter is a search key, but is not an object.
Definition: astobj2.h:1101
void * obj
Definition: aeap.c:37

References ao2_find, ao2_ref, NULL, aeap_user_data::obj, OBJ_SEARCH_KEY, and ast_aeap::user_data.

Referenced by ast_aeap_speech_on_error(), handle_msg(), handle_request_set(), handle_string(), and handle_timeout().

◆ ast_aeap_user_data_register()

int ast_aeap_user_data_register ( struct ast_aeap aeap,
const char *  id,
void *  obj,
ast_aeap_user_obj_cleanup  cleanup 
)

Register a user data object.

Note
The "cleanup" is called on un-register, if one is specified
Parameters
aeapAn Asterisk external application object
idThe look up id for the object
objThe user object to register
cleanupOptional user object clean up callback
Returns
0 on success, -1 on error

Definition at line 150 of file aeap.c.

152{
153 struct aeap_user_data *data;
154
155 data = aeap_user_data_create(id, obj, cleanup);
156 if (!data) {
157 return -1;
158 }
159
160 if (!ao2_link(aeap->user_data, data)) {
161 ao2_ref(data, -1);
162 return -1;
163 }
164
165 ao2_ref(data, -1);
166 return 0;
167}
static struct aeap_user_data * aeap_user_data_create(const char *id, void *obj, ast_aeap_user_obj_cleanup cleanup)
Definition: aeap.c:127
#define ao2_link(container, obj)
Add an object to a container.
Definition: astobj2.h:1532
static void * cleanup(void *unused)
Definition: pbx_realtime.c:124

References aeap_user_data_create(), ao2_link, ao2_ref, cleanup(), aeap_user_data::obj, and ast_aeap::user_data.

Referenced by AST_TEST_DEFINE(), and speech_aeap_engine_create().

◆ ast_aeap_user_data_unregister()

void ast_aeap_user_data_unregister ( struct ast_aeap aeap,
const char *  id 
)

Un-register a user data object.

Note
If specified on register, the "cleanup" callback is called during unregister.
Parameters
aeapAn Asterisk external application object
idThe look up id for the object

Definition at line 169 of file aeap.c.

170{
172}
@ OBJ_NODATA
Definition: astobj2.h:1044
@ OBJ_UNLINK
Definition: astobj2.h:1039

References ao2_find, OBJ_NODATA, OBJ_SEARCH_KEY, OBJ_UNLINK, and ast_aeap::user_data.

Referenced by AST_TEST_DEFINE().