Asterisk - The Open Source Telephony Project  18.5.0
stasis_app_mailbox.h File Reference

Stasis Application Mailbox API. See StasisApplication API" for detailed documentation. More...

#include "asterisk/app.h"
#include "asterisk/stasis_app.h"
Include dependency graph for stasis_app_mailbox.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

enum  stasis_mailbox_result { STASIS_MAILBOX_OK, STASIS_MAILBOX_MISSING, STASIS_MAILBOX_ERROR }
 
enum stasis_mailbox_result stasis_app_mailbox_to_json (const char *name, struct ast_json **json)
 Convert mailbox to JSON. More...
 
struct ast_jsonstasis_app_mailboxes_to_json (void)
 
int stasis_app_mailbox_update (const char *name, int old_messages, int new_messages)
 Changes the state of a mailbox. More...
 
enum stasis_mailbox_result stasis_app_mailbox_delete (const char *name)
 Delete a mailbox controlled by ARI. More...
 

Detailed Description

Stasis Application Mailbox API. See StasisApplication API" for detailed documentation.

Author
Jonathan Rose kharw.nosp@m.ell@.nosp@m.digiu.nosp@m.m.co.nosp@m.m
Since
12

Definition in file stasis_app_mailbox.h.

Enumeration Type Documentation

◆ stasis_mailbox_result

Stasis mailbox operation result codes

Enumerator
STASIS_MAILBOX_OK 

Mailbox operation completed successfully

STASIS_MAILBOX_MISSING 

Mailbox of the requested name does not exist

STASIS_MAILBOX_ERROR 

Mailbox operation failed internally

Definition at line 37 of file stasis_app_mailbox.h.

37  {
38  /*! Mailbox operation completed successfully */
40  /*! Mailbox of the requested name does not exist */
42  /*! Mailbox operation failed internally */
44 };

Function Documentation

◆ stasis_app_mailbox_delete()

enum stasis_mailbox_result stasis_app_mailbox_delete ( const char *  name)

Delete a mailbox controlled by ARI.

Parameters
namethe name of the ARI controlled mailbox
Returns
a stasis mailbox application result

Definition at line 122 of file res_stasis_mailbox.c.

References ast_mwi_mailbox_delete(), ast_mwi_mailbox_get(), ast_mwi_mailbox_unref, mailbox, NULL, STASIS_MAILBOX_ERROR, STASIS_MAILBOX_MISSING, and STASIS_MAILBOX_OK.

Referenced by ast_ari_mailboxes_delete().

124 {
125  const struct ast_mwi_mailbox_object *mailbox;
126 
127  /* Make sure the mailbox actually exists before we delete it */
128  mailbox = ast_mwi_mailbox_get(name);
129  if (!mailbox) {
130  return STASIS_MAILBOX_MISSING;
131  }
132 
133  ast_mwi_mailbox_unref(mailbox);
134  mailbox = NULL;
135 
136  /* Now delete the mailbox */
138  return STASIS_MAILBOX_ERROR;
139  }
140 
141  return STASIS_MAILBOX_OK;
142 }
#define NULL
Definition: resample.c:96
static char mailbox[AST_MAX_MAILBOX_UNIQUEID]
Definition: chan_mgcp.c:204
const struct ast_mwi_mailbox_object * ast_mwi_mailbox_get(const char *mailbox_id)
Get matching external MWI object.
int ast_mwi_mailbox_delete(const char *mailbox_id)
Delete matching external MWI object.
static const char name[]
Definition: cdr_mysql.c:74
#define ast_mwi_mailbox_unref(mailbox)
Convienience unref function for mailbox object.

◆ stasis_app_mailbox_to_json()

enum stasis_mailbox_result stasis_app_mailbox_to_json ( const char *  name,
struct ast_json **  json 
)

Convert mailbox to JSON.

Parameters
namethe name of the mailbox
jsonIf the query is successful, this pointer at this address will be set to the JSON representation of the mailbox
Returns
stasis mailbox result code indicating success or failure and cause
NULL on error.

Definition at line 46 of file res_stasis_mailbox.c.

References ast_mwi_mailbox_get(), ast_mwi_mailbox_unref, mailbox, mailbox_to_json(), STASIS_MAILBOX_ERROR, STASIS_MAILBOX_MISSING, and STASIS_MAILBOX_OK.

Referenced by ast_ari_mailboxes_get().

48 {
49  struct ast_json *mailbox_json;
50  const struct ast_mwi_mailbox_object *mailbox;
51 
52  mailbox = ast_mwi_mailbox_get(name);
53  if (!mailbox) {
55  }
56 
57  mailbox_json = mailbox_to_json(mailbox);
58  if (!mailbox_json) {
59  ast_mwi_mailbox_unref(mailbox);
60  return STASIS_MAILBOX_ERROR;
61  }
62 
63  *json = mailbox_json;
64 
65  return STASIS_MAILBOX_OK;
66 }
static char mailbox[AST_MAX_MAILBOX_UNIQUEID]
Definition: chan_mgcp.c:204
const struct ast_mwi_mailbox_object * ast_mwi_mailbox_get(const char *mailbox_id)
Get matching external MWI object.
static struct ast_json * mailbox_to_json(const struct ast_mwi_mailbox_object *mailbox)
static const char name[]
Definition: cdr_mysql.c:74
#define ast_mwi_mailbox_unref(mailbox)
Convienience unref function for mailbox object.
Abstract JSON element (object, array, string, int, ...).

◆ stasis_app_mailbox_update()

int stasis_app_mailbox_update ( const char *  name,
int  old_messages,
int  new_messages 
)

Changes the state of a mailbox.

Note
Implicitly creates the mailbox.
Parameters
nameThe name of the ARI controlled mailbox
old_messagescount of old (read) messages in the mailbox
new_messagescount of new (unread) messages in the mailbox
Returns
0 if successful
-1 on internal error.

Definition at line 101 of file res_stasis_mailbox.c.

References ast_mwi_mailbox_alloc(), ast_mwi_mailbox_set_msgs_new(), ast_mwi_mailbox_set_msgs_old(), ast_mwi_mailbox_unref, ast_mwi_mailbox_update(), and mailbox.

Referenced by ast_ari_mailboxes_update().

103 {
105  int res = 0;
106 
107  mailbox = ast_mwi_mailbox_alloc(name);
108  if (!mailbox) {
109  return -1;
110  }
111  ast_mwi_mailbox_set_msgs_new(mailbox, new_messages);
112  ast_mwi_mailbox_set_msgs_old(mailbox, old_messages);
113  if (ast_mwi_mailbox_update(mailbox)) {
114  res = -1;
115  }
116 
117  ast_mwi_mailbox_unref(mailbox);
118 
119  return res;
120 }
struct ast_mwi_mailbox_object * ast_mwi_mailbox_alloc(const char *mailbox_id)
Allocate an external MWI object.
void ast_mwi_mailbox_set_msgs_new(struct ast_mwi_mailbox_object *mailbox, unsigned int num_msgs)
Set the number of new messages.
int ast_mwi_mailbox_update(struct ast_mwi_mailbox_object *mailbox)
Update the external MWI counts with the given object.
static char mailbox[AST_MAX_MAILBOX_UNIQUEID]
Definition: chan_mgcp.c:204
static const char name[]
Definition: cdr_mysql.c:74
#define ast_mwi_mailbox_unref(mailbox)
Convienience unref function for mailbox object.
void ast_mwi_mailbox_set_msgs_old(struct ast_mwi_mailbox_object *mailbox, unsigned int num_msgs)
Set the number of old messages.

◆ stasis_app_mailboxes_to_json()

struct ast_json* stasis_app_mailboxes_to_json ( void  )

brief Convert mailboxes to json array

Returns
JSON representation of the mailboxes
NULL on error.

Definition at line 68 of file res_stasis_mailbox.c.

References ao2_iterator_destroy(), ao2_iterator_init(), ao2_iterator_next, ao2_ref, array(), ast_json_array_append(), ast_json_array_create(), ast_json_unref(), ast_mwi_mailbox_get_all(), ast_mwi_mailbox_unref, mailbox, mailbox_to_json(), mailboxes, and NULL.

Referenced by ast_ari_mailboxes_list().

69 {
71  struct ao2_container *mailboxes;
72  struct ao2_iterator iter;
73  const struct ast_mwi_mailbox_object *mailbox;
74 
75  if (!array) {
76  return NULL;
77  }
78 
79  mailboxes = ast_mwi_mailbox_get_all();
80  if (!mailboxes) {
81  ast_json_unref(array);
82  return NULL;
83  }
84 
85  iter = ao2_iterator_init(mailboxes, 0);
86  for (; (mailbox = ao2_iterator_next(&iter)); ast_mwi_mailbox_unref(mailbox)) {
87  struct ast_json *appending = mailbox_to_json(mailbox);
88  if (!appending || ast_json_array_append(array, appending)) {
89  /* Failed to append individual mailbox to the array. Abort. */
90  ast_json_unref(array);
91  array = NULL;
92  break;
93  }
94  }
95  ao2_iterator_destroy(&iter);
96  ao2_ref(mailboxes, -1);
97 
98  return array;
99 }
struct ao2_container * ast_mwi_mailbox_get_all(void)
Get all external MWI objects.
void ast_json_unref(struct ast_json *value)
Decrease refcount on value. If refcount reaches zero, value is freed.
Definition: json.c:73
static struct stasis_rest_handlers mailboxes
REST handler for /api-docs/mailboxes.json.
void ao2_iterator_destroy(struct ao2_iterator *iter)
Destroy a container iterator.
#define NULL
Definition: resample.c:96
static char mailbox[AST_MAX_MAILBOX_UNIQUEID]
Definition: chan_mgcp.c:204
#define ao2_ref(o, delta)
Definition: astobj2.h:464
struct ast_json * ast_json_array_create(void)
Create a empty JSON array.
Definition: json.c:352
int ast_json_array_append(struct ast_json *array, struct ast_json *value)
Append to an array.
Definition: json.c:368
static int array(struct ast_channel *chan, const char *cmd, char *var, const char *value)
#define ao2_iterator_next(iter)
Definition: astobj2.h:1933
static struct ast_json * mailbox_to_json(const struct ast_mwi_mailbox_object *mailbox)
#define ast_mwi_mailbox_unref(mailbox)
Convienience unref function for mailbox object.
When we need to walk through a container, we use an ao2_iterator to keep track of the current positio...
Definition: astobj2.h:1841
Abstract JSON element (object, array, string, int, ...).
Generic container type.
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags) attribute_warn_unused_result
Create an iterator for a container.