ARI: Add mailboxes resource for controlling and polling external MWI
[asterisk/asterisk.git] / res / ari / resource_mailboxes.c
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2013, Digium, Inc.
5  *
6  * Jonathan Rose <jrose@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*! \file
20  *
21  * \brief /api-docs/mailboxes.{format} implementation- Mailboxes resources
22  *
23  * \author Jonathan Rose <jrose@digium.com>
24  */
25
26 #include "asterisk.h"
27 #include "asterisk/stasis_app_mailbox.h"
28
29 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
30
31 #include "resource_mailboxes.h"
32
33 void ast_ari_mailboxes_list(struct ast_variable *headers,
34         struct ast_ari_mailboxes_list_args *args,
35         struct ast_ari_response *response)
36 {
37         struct ast_json *json;
38
39         if (!(json = stasis_app_mailboxes_to_json())) {
40                 ast_ari_response_error(response, 500,
41                         "Internal Server Error", "Error building response");
42                 return;
43         }
44
45         ast_ari_response_ok(response, json);
46 }
47 void ast_ari_mailboxes_get(struct ast_variable *headers,
48         struct ast_ari_mailboxes_get_args *args,
49         struct ast_ari_response *response)
50 {
51         struct ast_json *json;
52
53         switch (stasis_app_mailbox_to_json(args->mailbox_name, &json)) {
54         case STASIS_MAILBOX_MISSING:
55                 ast_ari_response_error(response, 404,
56                         "Not Found", "Mailbox is does not exist");
57                 return;
58         case STASIS_MAILBOX_ERROR:
59                 ast_ari_response_error(response, 500,
60                         "Internal Server Error", "Error building response");
61                 return;
62         case STASIS_MAILBOX_OK:
63                 ast_ari_response_ok(response, json);
64         }
65 }
66 void ast_ari_mailboxes_update(struct ast_variable *headers,
67         struct ast_ari_mailboxes_update_args *args,
68         struct ast_ari_response *response)
69 {
70         if (stasis_app_mailbox_update(args->mailbox_name, args->old_messages, args->new_messages)) {
71                 ast_ari_response_error(response, 500, "Internal Server Error", "Error updating mailbox");
72                 return;
73         }
74
75         ast_ari_response_no_content(response);
76 }
77 void ast_ari_mailboxes_delete(struct ast_variable *headers,
78         struct ast_ari_mailboxes_delete_args *args,
79         struct ast_ari_response *response)
80 {
81         switch (stasis_app_mailbox_delete(args->mailbox_name)) {
82         case STASIS_MAILBOX_MISSING:
83                 ast_ari_response_error(response, 404,
84                         "Not Found", "Mailbox does not exist");
85                 return;
86         case STASIS_MAILBOX_ERROR:
87                 ast_ari_response_error(response, 500,
88                         "INternal Server Error", "Failed to delete the mailbox");
89                 return;
90         case STASIS_MAILBOX_OK:
91                 ast_ari_response_no_content(response);
92         }
93 }