Asterisk - The Open Source Telephony Project GIT-master-0bf3178
Functions
res/res_aeap/message.c File Reference
#include "asterisk.h"
#include "asterisk/astobj2.h"
#include "asterisk/utils.h"
#include "asterisk/uuid.h"
#include "asterisk/res_aeap.h"
#include "asterisk/res_aeap_message.h"
Include dependency graph for res/res_aeap/message.c:

Go to the source code of this file.

Functions

struct ast_aeap_messageast_aeap_message_create1 (const struct ast_aeap_message_type *type, const void *params)
 Create an Asterisk external application message object. More...
 
struct ast_aeap_messageast_aeap_message_create2 (const struct ast_aeap_message_type *type, const char *msg_type, const char *name, const char *id, const void *params)
 Create an Asterisk external application message object. More...
 
struct ast_aeap_messageast_aeap_message_create_error (const struct ast_aeap_message_type *type, const char *name, const char *id, const char *error_msg)
 Create an Asterisk external application error response object. More...
 
struct ast_aeap_messageast_aeap_message_create_request (const struct ast_aeap_message_type *type, const char *name, const char *id, const void *params)
 Create an Asterisk external application request object. More...
 
struct ast_aeap_messageast_aeap_message_create_response (const struct ast_aeap_message_type *type, const char *name, const char *id, const void *params)
 Create an Asterisk external application response object. More...
 
void * ast_aeap_message_data (struct ast_aeap_message *message)
 Retrieve the core message data/body. More...
 
struct ast_aeap_messageast_aeap_message_deserialize (const struct ast_aeap_message_type *type, const void *buf, intmax_t size)
 Deserialize the given buffer into an Asterisk external application message object. More...
 
const char * ast_aeap_message_error_msg (const struct ast_aeap_message *message)
 Retrieve the error message if it has one. More...
 
int ast_aeap_message_error_msg_set (struct ast_aeap_message *message, const char *error_msg)
 Set an error message. More...
 
const char * ast_aeap_message_id (const struct ast_aeap_message *message)
 Retrieve a message id. More...
 
const char * ast_aeap_message_id_generate (struct ast_aeap_message *message)
 Generate an id, and set it for the message. More...
 
int ast_aeap_message_id_set (struct ast_aeap_message *message, const char *id)
 Set a message id. More...
 
int ast_aeap_message_is_named (const struct ast_aeap_message *message, const char *name)
 Check whether or not a message's name matches the given one. More...
 
int ast_aeap_message_is_request (const struct ast_aeap_message *message)
 Retrieve whether or not this is a request message. More...
 
int ast_aeap_message_is_response (const struct ast_aeap_message *message)
 Retrieve whether or not this is a response message. More...
 
const char * ast_aeap_message_name (const struct ast_aeap_message *message)
 Retrieve a message name. More...
 
enum AST_AEAP_DATA_TYPE ast_aeap_message_serial_type (const struct ast_aeap_message_type *type)
 Retrieve the serial type a message type. More...
 
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. More...
 
static struct ast_aeap_messagemessage_create (const struct ast_aeap_message_type *type)
 
static void message_destructor (void *obj)
 

Function Documentation

◆ ast_aeap_message_create1()

struct ast_aeap_message * ast_aeap_message_create1 ( const struct ast_aeap_message_type type,
const void *  params 
)

Create an Asterisk external application message object.

Parameters
typeThe type of message object to create
paramsAny parameter(s) to pass to the type's constructor
Returns
An ao2 reference counted AEAP message object, or NULL on error

Definition at line 59 of file res/res_aeap/message.c.

61{
62 struct ast_aeap_message *msg;
63
65 ast_assert(type->construct1 != NULL);
66
67 msg = message_create(type);
68 if (!msg) {
69 return NULL;
70 }
71
72 if (type->construct1(msg, params)) {
73 ast_log(LOG_ERROR, "AEAP message %s: unable to construct1\n", type->type_name);
74 ao2_ref(msg, -1);
75 return NULL;
76 }
77
78 return msg;
79}
#define ast_log
Definition: astobj2.c:42
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition: astobj2.h:459
static const char type[]
Definition: chan_ooh323.c:109
#define LOG_ERROR
static struct ast_aeap_message * message_create(const struct ast_aeap_message_type *type)
#define NULL
Definition: resample.c:96
Asterisk external application base message.
#define ast_assert(a)
Definition: utils.h:739

References ao2_ref, ast_assert, ast_log, LOG_ERROR, message_create(), NULL, and type.

Referenced by ast_aeap_message_deserialize().

◆ ast_aeap_message_create2()

struct ast_aeap_message * ast_aeap_message_create2 ( const struct ast_aeap_message_type type,
const char *  msg_type,
const char *  name,
const char *  id,
const void *  params 
)

Create an Asterisk external application message object.

Parameters
typeThe type of message object to create
msg_typeThe type of message (e.g. request or response)
nameThe name of the message
idThe message id
paramsOther optional parameter(s) to possibly use
Returns
An ao2 reference counted AEAP message object, or NULL on error

Definition at line 81 of file res/res_aeap/message.c.

83{
84 struct ast_aeap_message *msg;
85
87 ast_assert(type->construct2 != NULL);
88 ast_assert(msg_type != NULL);
90
91 msg = message_create(type);
92 if (!msg) {
93 return NULL;
94 }
95
96 if (type->construct2(msg, msg_type, name, id, params)) {
97 ast_log(LOG_ERROR, "AEAP message %s: unable to construct2\n", type->type_name);
98 ao2_ref(msg, -1);
99 return NULL;
100 }
101
102 return msg;
103}
static const char name[]
Definition: format_mp3.c:68

References ao2_ref, ast_assert, ast_log, LOG_ERROR, message_create(), name, NULL, and type.

Referenced by ast_aeap_message_create_request(), and ast_aeap_message_create_response().

◆ ast_aeap_message_create_error()

struct ast_aeap_message * ast_aeap_message_create_error ( const struct ast_aeap_message_type type,
const char *  name,
const char *  id,
const char *  error_msg 
)

Create an Asterisk external application error response object.

Parameters
typeThe type of message object to create
nameThe name of the message
idOptional id
error_msgError message to set
Returns
An ao2 reference counted AEAP response object, or NULL on error

Definition at line 129 of file res/res_aeap/message.c.

131{
132 struct ast_aeap_message *msg;
133
135 if (!msg) {
136 return NULL;
137 }
138
139 if (ast_aeap_message_error_msg_set(msg, error_msg)) {
140 ao2_ref(msg, -1);
141 return NULL;
142 }
143
144 return msg;
145}
int ast_aeap_message_error_msg_set(struct ast_aeap_message *message, const char *error_msg)
Set an error message.
struct ast_aeap_message * ast_aeap_message_create_response(const struct ast_aeap_message_type *type, const char *name, const char *id, const void *params)
Create an Asterisk external application response object.

References ao2_ref, ast_aeap_message_create_response(), ast_aeap_message_error_msg_set(), name, NULL, and type.

Referenced by handle_request_set(), and raise_msg_handler().

◆ ast_aeap_message_create_request()

struct ast_aeap_message * ast_aeap_message_create_request ( const struct ast_aeap_message_type type,
const char *  name,
const char *  id,
const void *  params 
)

Create an Asterisk external application request object.

Parameters
typeThe type of message object to create
nameThe name of the message
idOptional id (if NULL an id is generated)
paramsOther optional parameter(s) to possibly use
Returns
An ao2 reference counted AEAP request object, or NULL on error

Definition at line 105 of file res/res_aeap/message.c.

107{
108 struct ast_aeap_message *msg;
109
110 msg = ast_aeap_message_create2(type, "request", name, id, params);
111 if (!msg) {
112 return NULL;
113 }
114
115 if (!id && !ast_aeap_message_id_generate(msg)) {
116 ao2_ref(msg, -1);
117 return NULL;
118 }
119
120 return msg;
121}
struct ast_aeap_message * ast_aeap_message_create2(const struct ast_aeap_message_type *type, const char *msg_type, const char *name, const char *id, const void *params)
Create an Asterisk external application message object.
const char * ast_aeap_message_id_generate(struct ast_aeap_message *message)
Generate an id, and set it for the message.

References ao2_ref, ast_aeap_message_create2(), ast_aeap_message_id_generate(), name, NULL, and type.

Referenced by AST_TEST_DEFINE(), and speech_aeap_send_request().

◆ ast_aeap_message_create_response()

struct ast_aeap_message * ast_aeap_message_create_response ( const struct ast_aeap_message_type type,
const char *  name,
const char *  id,
const void *  params 
)

Create an Asterisk external application response object.

Parameters
typeThe type of message object to create
nameThe name of the message
idOptional id
paramsOther optional parameter(s) to possibly use
Returns
An ao2 reference counted AEAP response object, or NULL on error

Definition at line 123 of file res/res_aeap/message.c.

125{
126 return ast_aeap_message_create2(type, "response", name, id, params);
127}

References ast_aeap_message_create2(), name, and type.

Referenced by ast_aeap_message_create_error(), AST_TEST_DEFINE(), and handle_request_set().

◆ ast_aeap_message_data()

void * ast_aeap_message_data ( struct ast_aeap_message message)

Retrieve the core message data/body.

Parameters
messageA message object

Definition at line 232 of file res/res_aeap/message.c.

233{
235 ast_assert(message->type != NULL);
236
237 return message->type->data ? message->type->data(message) : NULL;
238}

References ast_assert, and NULL.

Referenced by handle_request_set(), handle_response_get(), and handle_response_setup().

◆ ast_aeap_message_deserialize()

struct ast_aeap_message * ast_aeap_message_deserialize ( const struct ast_aeap_message_type type,
const void *  buf,
intmax_t  size 
)

Deserialize the given buffer into an Asterisk external application message object.

Parameters
typeThe message type to create, and deserialize to
bufThe buffer to deserialize
sizeThe size/length of the buffer
Returns
An ao2 reference counted AEAP message object, or NULL on error

Definition at line 147 of file res/res_aeap/message.c.

149{
150 struct ast_aeap_message *msg;
151
152 ast_assert(type != NULL);
153 ast_assert(type->deserialize != NULL);
154
156 if (!msg) {
157 return NULL;
158 }
159
160 if (type->deserialize(msg, buf, size)) {
161 ao2_ref(msg, -1);
162 return NULL;
163 }
164
165 return msg;
166}
char buf[BUFSIZE]
Definition: eagi_proxy.c:66
struct ast_aeap_message * ast_aeap_message_create1(const struct ast_aeap_message_type *type, const void *params)
Create an Asterisk external application message object.

References ao2_ref, ast_aeap_message_create1(), ast_assert, buf, NULL, and type.

Referenced by raise_msg().

◆ ast_aeap_message_error_msg()

const char * ast_aeap_message_error_msg ( const struct ast_aeap_message message)

Retrieve the error message if it has one.

Parameters
messageA message object
Returns
The error message if available, or NULL

Definition at line 256 of file res/res_aeap/message.c.

257{
259 ast_assert(message->type != NULL);
260
261 return message->type->error_msg ? message->type->error_msg(message) : NULL;
262}

References ast_assert, and NULL.

Referenced by raise_msg_handler().

◆ ast_aeap_message_error_msg_set()

int ast_aeap_message_error_msg_set ( struct ast_aeap_message message,
const char *  error_msg 
)

Set an error message.

Parameters
messageA message object
error_msgThe error string to set
Returns
0 on success, -1 on error

Definition at line 264 of file res/res_aeap/message.c.

265{
267 ast_assert(message->type != NULL);
268
269 return message->type->error_msg_set ? message->type->error_msg_set(message, error_msg) : 0;
270}

References ast_assert, and NULL.

Referenced by ast_aeap_message_create_error().

◆ ast_aeap_message_id()

const char * ast_aeap_message_id ( const struct ast_aeap_message message)

Retrieve a message id.

Parameters
messageA message object
Returns
The message id, or an empty string

Definition at line 177 of file res/res_aeap/message.c.

178{
179 const char *id = NULL;
180
182 ast_assert(message->type != NULL);
183
184 if (message->type->id) {
185 id = message->type->id(message);
186 }
187
188 return id ? id : "";
189}
enum queue_result id
Definition: app_queue.c:1667

References ast_assert, id, and NULL.

Referenced by ast_aeap_message_id_generate(), ast_aeap_send_msg_tsx(), handle_msg(), handle_request_set(), raise_msg(), and raise_msg_handler().

◆ ast_aeap_message_id_generate()

const char * ast_aeap_message_id_generate ( struct ast_aeap_message message)

Generate an id, and set it for the message.

Parameters
messageA message object
Returns
the generated id on success, or NULL on error

Definition at line 199 of file res/res_aeap/message.c.

200{
201 char uuid_str[AST_UUID_STR_LEN];
202
203 ast_uuid_generate_str(uuid_str, sizeof(uuid_str));
204 if (strlen(uuid_str) != (AST_UUID_STR_LEN - 1)) {
205 ast_log(LOG_ERROR, "AEAP message %s failed to generate UUID for message '%s'",
206 message->type->type_name, ast_aeap_message_name(message));
207 return NULL;
208 }
209
211}
const char * ast_aeap_message_id(const struct ast_aeap_message *message)
Retrieve a message id.
const char * ast_aeap_message_name(const struct ast_aeap_message *message)
Retrieve a message name.
int ast_aeap_message_id_set(struct ast_aeap_message *message, const char *id)
Set a message id.
#define AST_UUID_STR_LEN
Definition: uuid.h:27
char * ast_uuid_generate_str(char *buf, size_t size)
Generate a UUID string.
Definition: uuid.c:141

References ast_aeap_message_id(), ast_aeap_message_id_set(), ast_aeap_message_name(), ast_log, ast_uuid_generate_str(), AST_UUID_STR_LEN, LOG_ERROR, and NULL.

Referenced by ast_aeap_message_create_request().

◆ ast_aeap_message_id_set()

int ast_aeap_message_id_set ( struct ast_aeap_message message,
const char *  id 
)

Set a message id.

Parameters
messageA message object
idThe id to set
Returns
0 on success, -1 on error

Definition at line 191 of file res/res_aeap/message.c.

192{
194 ast_assert(message->type != NULL);
195
196 return message->type->id_set ? message->type->id_set(message, id) : 0;
197}

References ast_assert, and NULL.

Referenced by ast_aeap_message_id_generate().

◆ ast_aeap_message_is_named()

int ast_aeap_message_is_named ( const struct ast_aeap_message message,
const char *  name 
)

Check whether or not a message's name matches the given one.

Note
Case insensitive
Parameters
messageA message object
nameThe name to check against
Returns
True if matched, false otherwise

Definition at line 227 of file res/res_aeap/message.c.

228{
229 return name ? !strcasecmp(ast_aeap_message_name(message), name) : 0;
230}

References ast_aeap_message_name(), and name.

Referenced by handle_msg(), and raise_msg_handler().

◆ ast_aeap_message_is_request()

int ast_aeap_message_is_request ( const struct ast_aeap_message message)

Retrieve whether or not this is a request message.

Parameters
messageA message object
Returns
True if the message is a request, false otherwise

Definition at line 240 of file res/res_aeap/message.c.

241{
243 ast_assert(message->type != NULL);
244
245 return message->type->is_request ? message->type->is_request(message) : 0;
246}

References ast_assert, and NULL.

Referenced by raise_msg().

◆ ast_aeap_message_is_response()

int ast_aeap_message_is_response ( const struct ast_aeap_message message)

Retrieve whether or not this is a response message.

Parameters
messageA message object
Returns
True if the message is a response, false otherwise

Definition at line 248 of file res/res_aeap/message.c.

249{
251 ast_assert(message->type != NULL);
252
253 return message->type->is_response ? message->type->is_response(message) : 0;
254}

References ast_assert, and NULL.

Referenced by raise_msg().

◆ ast_aeap_message_name()

const char * ast_aeap_message_name ( const struct ast_aeap_message message)

Retrieve a message name.

Parameters
messageA message object
Returns
The message name, or an empty string

Definition at line 213 of file res/res_aeap/message.c.

214{
215 const char *name = NULL;
216
218 ast_assert(message->type != NULL);
219
220 if (message->type->name) {
221 name = message->type->name(message);
222 }
223
224 return name ? name : "";
225}

References ast_assert, name, and NULL.

Referenced by ast_aeap_message_id_generate(), ast_aeap_message_is_named(), handle_msg(), handle_request_set(), raise_msg_handler(), and transaction_end().

◆ ast_aeap_message_serial_type()

enum AST_AEAP_DATA_TYPE ast_aeap_message_serial_type ( const struct ast_aeap_message_type type)

Retrieve the serial type a message type.

Parameters
typeA message type
Returns
The type's serial type

Definition at line 27 of file res/res_aeap/message.c.

28{
30
31 return type->serial_type;
32}

References ast_assert, NULL, and type.

Referenced by raise_msg().

◆ ast_aeap_message_serialize()

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.

Parameters
messageThe message object to serialize
buf[out] The buffer to hold the "packed" data
size[out] The size of the data written to the buffer
Returns
0 on success, -1 on error

Definition at line 168 of file res/res_aeap/message.c.

170{
172 ast_assert(message->type != NULL);
173
174 return message->type->serialize ? message->type->serialize(message, buf, size) : 0;
175}

References ast_assert, buf, and NULL.

Referenced by ast_aeap_send_msg().

◆ message_create()

static struct ast_aeap_message * message_create ( const struct ast_aeap_message_type type)
static

Definition at line 43 of file res/res_aeap/message.c.

44{
45 struct ast_aeap_message *msg;
46
49 if (!msg) {
50 ast_log(LOG_ERROR, "AEAP message %s: unable to create\n", type->type_name);
51 return NULL;
52 }
53
54 msg->type = type;
55
56 return msg;
57}
@ AO2_ALLOC_OPT_LOCK_NOLOCK
Definition: astobj2.h:367
#define ao2_t_alloc_options(data_size, destructor_fn, options, debug_msg)
Allocate and initialize an object.
Definition: astobj2.h:402
static void message_destructor(void *obj)
const struct ast_aeap_message_type * type

References AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_t_alloc_options, ast_log, LOG_ERROR, message_destructor(), NULL, type, and ast_aeap_message::type.

Referenced by ast_aeap_message_create1(), and ast_aeap_message_create2().

◆ message_destructor()

static void message_destructor ( void *  obj)
static

Definition at line 34 of file res/res_aeap/message.c.

35{
36 struct ast_aeap_message *msg = obj;
37
38 if (msg->type->destruct) {
39 msg->type->destruct(msg);
40 }
41}
void(* destruct)(struct ast_aeap_message *self)
Destruct/Cleanup object resources.

References ast_aeap_message_type::destruct, and ast_aeap_message::type.

Referenced by message_create().