summaryrefslogtreecommitdiff
path: root/res/ari
diff options
context:
space:
mode:
Diffstat (limited to 'res/ari')
-rw-r--r--res/ari/ari_model_validators.c45
-rw-r--r--res/ari/ari_model_validators.h6
-rw-r--r--res/ari/resource_recordings.c110
-rw-r--r--res/ari/resource_recordings.h11
4 files changed, 115 insertions, 57 deletions
diff --git a/res/ari/ari_model_validators.c b/res/ari/ari_model_validators.c
index 6932cf5ac..0905642c8 100644
--- a/res/ari/ari_model_validators.c
+++ b/res/ari/ari_model_validators.c
@@ -1061,46 +1061,27 @@ int ast_ari_validate_stored_recording(struct ast_json *json)
{
int res = 1;
struct ast_json_iter *iter;
- int has_formats = 0;
- int has_id = 0;
+ int has_format = 0;
+ int has_name = 0;
for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
- if (strcmp("duration_seconds", ast_json_object_iter_key(iter)) == 0) {
- int prop_is_valid;
- prop_is_valid = ast_ari_validate_int(
- ast_json_object_iter_value(iter));
- if (!prop_is_valid) {
- ast_log(LOG_ERROR, "ARI StoredRecording field duration_seconds failed validation\n");
- res = 0;
- }
- } else
- if (strcmp("formats", ast_json_object_iter_key(iter)) == 0) {
- int prop_is_valid;
- has_formats = 1;
- prop_is_valid = ast_ari_validate_list(
- ast_json_object_iter_value(iter),
- ast_ari_validate_string);
- if (!prop_is_valid) {
- ast_log(LOG_ERROR, "ARI StoredRecording field formats failed validation\n");
- res = 0;
- }
- } else
- if (strcmp("id", ast_json_object_iter_key(iter)) == 0) {
+ if (strcmp("format", ast_json_object_iter_key(iter)) == 0) {
int prop_is_valid;
- has_id = 1;
+ has_format = 1;
prop_is_valid = ast_ari_validate_string(
ast_json_object_iter_value(iter));
if (!prop_is_valid) {
- ast_log(LOG_ERROR, "ARI StoredRecording field id failed validation\n");
+ ast_log(LOG_ERROR, "ARI StoredRecording field format failed validation\n");
res = 0;
}
} else
- if (strcmp("time", ast_json_object_iter_key(iter)) == 0) {
+ if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
int prop_is_valid;
- prop_is_valid = ast_ari_validate_date(
+ has_name = 1;
+ prop_is_valid = ast_ari_validate_string(
ast_json_object_iter_value(iter));
if (!prop_is_valid) {
- ast_log(LOG_ERROR, "ARI StoredRecording field time failed validation\n");
+ ast_log(LOG_ERROR, "ARI StoredRecording field name failed validation\n");
res = 0;
}
} else
@@ -1112,13 +1093,13 @@ int ast_ari_validate_stored_recording(struct ast_json *json)
}
}
- if (!has_formats) {
- ast_log(LOG_ERROR, "ARI StoredRecording missing required field formats\n");
+ if (!has_format) {
+ ast_log(LOG_ERROR, "ARI StoredRecording missing required field format\n");
res = 0;
}
- if (!has_id) {
- ast_log(LOG_ERROR, "ARI StoredRecording missing required field id\n");
+ if (!has_name) {
+ ast_log(LOG_ERROR, "ARI StoredRecording missing required field name\n");
res = 0;
}
diff --git a/res/ari/ari_model_validators.h b/res/ari/ari_model_validators.h
index e8ef8e210..a8a856f15 100644
--- a/res/ari/ari_model_validators.h
+++ b/res/ari/ari_model_validators.h
@@ -937,10 +937,8 @@ ari_validator ast_ari_validate_stasis_start_fn(void);
* - name: string (required)
* - state: string (required)
* StoredRecording
- * - duration_seconds: int
- * - formats: List[string] (required)
- * - id: string (required)
- * - time: Date
+ * - format: string (required)
+ * - name: string (required)
* FormatLangPair
* - format: string (required)
* - language: string (required)
diff --git a/res/ari/resource_recordings.c b/res/ari/resource_recordings.c
index f87ff0a0a..d6803469f 100644
--- a/res/ari/resource_recordings.c
+++ b/res/ari/resource_recordings.c
@@ -30,21 +30,111 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/stasis_app_recording.h"
#include "resource_recordings.h"
-void ast_ari_get_stored_recordings(struct ast_variable *headers, struct ast_get_stored_recordings_args *args, struct ast_ari_response *response)
-{
- ast_log(LOG_ERROR, "TODO: ast_ari_get_stored_recordings\n");
-}
-void ast_ari_get_stored_recording(struct ast_variable *headers, struct ast_get_stored_recording_args *args, struct ast_ari_response *response)
+void ast_ari_get_stored_recordings(struct ast_variable *headers,
+ struct ast_get_stored_recordings_args *args,
+ struct ast_ari_response *response)
{
- ast_log(LOG_ERROR, "TODO: ast_ari_get_stored_recording\n");
+ RAII_VAR(struct ao2_container *, recordings, NULL, ao2_cleanup);
+ RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
+ struct ao2_iterator i;
+ void *obj;
+
+ recordings = stasis_app_stored_recording_find_all();
+
+ if (!recordings) {
+ ast_ari_response_alloc_failed(response);
+ return;
+ }
+
+ json = ast_json_array_create();
+ if (!json) {
+ ast_ari_response_alloc_failed(response);
+ return;
+ }
+
+ i = ao2_iterator_init(recordings, 0);
+ while ((obj = ao2_iterator_next(&i))) {
+ RAII_VAR(struct stasis_app_stored_recording *, recording, obj,
+ ao2_cleanup);
+
+ int r = ast_json_array_append(
+ json, stasis_app_stored_recording_to_json(recording));
+ if (r != 0) {
+ ast_ari_response_alloc_failed(response);
+ ao2_iterator_destroy(&i);
+ return;
+ }
+ }
+ ao2_iterator_destroy(&i);
+
+ ast_ari_response_ok(response, ast_json_ref(json));
}
-void ast_ari_delete_stored_recording(struct ast_variable *headers, struct ast_delete_stored_recording_args *args, struct ast_ari_response *response)
+
+void ast_ari_get_stored_recording(struct ast_variable *headers,
+ struct ast_get_stored_recording_args *args,
+ struct ast_ari_response *response)
{
- ast_log(LOG_ERROR, "TODO: ast_ari_delete_stored_recording\n");
+ RAII_VAR(struct stasis_app_stored_recording *, recording, NULL,
+ ao2_cleanup);
+ RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
+
+ recording = stasis_app_stored_recording_find_by_name(
+ args->recording_name);
+ if (recording == NULL) {
+ ast_ari_response_error(response, 404, "Not Found",
+ "Recording not found");
+ return;
+ }
+
+ json = stasis_app_stored_recording_to_json(recording);
+ if (json == NULL) {
+ ast_ari_response_error(response, 500,
+ "Internal Server Error", "Error building response");
+ return;
+ }
+
+ ast_ari_response_ok(response, ast_json_ref(json));
}
-void ast_ari_get_live_recordings(struct ast_variable *headers, struct ast_get_live_recordings_args *args, struct ast_ari_response *response)
+
+void ast_ari_delete_stored_recording(struct ast_variable *headers,
+ struct ast_delete_stored_recording_args *args,
+ struct ast_ari_response *response)
{
- ast_log(LOG_ERROR, "TODO: ast_ari_get_live_recordings\n");
+ RAII_VAR(struct stasis_app_stored_recording *, recording, NULL,
+ ao2_cleanup);
+ int res;
+
+ recording = stasis_app_stored_recording_find_by_name(
+ args->recording_name);
+ if (recording == NULL) {
+ ast_ari_response_error(response, 404, "Not Found",
+ "Recording not found");
+ return;
+ }
+
+ res = stasis_app_stored_recording_delete(recording);
+
+ if (res != 0) {
+ switch (errno) {
+ case EACCES:
+ case EPERM:
+ ast_ari_response_error(response, 500,
+ "Internal Server Error",
+ "Delete failed");
+ break;
+ default:
+ ast_log(LOG_WARNING,
+ "Unexpected error deleting recording %s: %s\n",
+ args->recording_name, strerror(errno));
+ ast_ari_response_error(response, 500,
+ "Internal Server Error",
+ "Delete failed");
+ break;
+ }
+ return;
+ }
+
+ ast_ari_response_no_content(response);
}
void ast_ari_get_live_recording(struct ast_variable *headers,
diff --git a/res/ari/resource_recordings.h b/res/ari/resource_recordings.h
index 2529766e7..682b45c56 100644
--- a/res/ari/resource_recordings.h
+++ b/res/ari/resource_recordings.h
@@ -76,17 +76,6 @@ struct ast_delete_stored_recording_args {
* \param[out] response HTTP response
*/
void ast_ari_delete_stored_recording(struct ast_variable *headers, struct ast_delete_stored_recording_args *args, struct ast_ari_response *response);
-/*! \brief Argument struct for ast_ari_get_live_recordings() */
-struct ast_get_live_recordings_args {
-};
-/*!
- * \brief List libe recordings.
- *
- * \param headers HTTP headers
- * \param args Swagger parameters
- * \param[out] response HTTP response
- */
-void ast_ari_get_live_recordings(struct ast_variable *headers, struct ast_get_live_recordings_args *args, struct ast_ari_response *response);
/*! \brief Argument struct for ast_ari_get_live_recording() */
struct ast_get_live_recording_args {
/*! \brief The name of the recording */