ARI: Add the ability to download the media associated with a stored recording
[asterisk/asterisk.git] / include / asterisk / stasis_app_recording.h
index e8b4558..bded306 100644 (file)
 #include "asterisk/app.h"
 #include "asterisk/stasis_app.h"
 
+/*! @{ */
+
+/*! \brief Structure representing a recording stored on disk */
+struct stasis_app_stored_recording;
+
+/*!
+ * \brief Returns the filename for this recording, for use with streamfile.
+ *
+ * The returned string will be valid until the \a recording object is freed.
+ *
+ * \param recording Recording to query.
+ * \return Absolute path to the recording file, without the extension.
+ * \return \c NULL on error.
+ */
+const char *stasis_app_stored_recording_get_file(
+       struct stasis_app_stored_recording *recording);
+
+/*!
+ * \brief Returns the full filename, with extension, for this recording.
+ * \since 14.0.0
+ *
+ * \param recording Recording to query.
+ *
+ * \return Absolute path to the recording file, with the extension.
+ * \return \c NULL on error
+ */
+const char *stasis_app_stored_recording_get_filename(
+       struct stasis_app_stored_recording *recording);
+
+/*!
+ * \brief Returns the extension for this recording.
+ * \since 14.0.0
+ *
+ * \param recording Recording to query.
+ *
+ * \return The extension associated with this recording.
+ * \return \c NULL on error
+ */
+const char *stasis_app_stored_recording_get_extension(
+       struct stasis_app_stored_recording *recording);
+
+/*!
+ * \brief Convert stored recording info to JSON.
+ *
+ * \param recording Recording to convert.
+ * \return JSON representation.
+ * \return \c NULL on error.
+ */
+struct ast_json *stasis_app_stored_recording_to_json(
+       struct stasis_app_stored_recording *recording);
+
+/*!
+ * \brief Find all stored recordings on disk.
+ *
+ * \return Container of \ref stasis_app_stored_recording objects.
+ * \return \c NULL on error.
+ */
+struct ao2_container *stasis_app_stored_recording_find_all(void);
+
+/*!
+ * \brief Creates a stored recording object, with the given name.
+ *
+ * \param name Name of the recording.
+ * \return New recording object.
+ * \return \c NULL if recording is not found. \c errno is set to indicate why
+ *     - \c ENOMEM - out of memeory
+ *     - \c EACCES - file permissions (or recording is outside the config dir)
+ *     - Any of the error codes for stat(), opendir(), readdir()
+ */
+struct stasis_app_stored_recording *stasis_app_stored_recording_find_by_name(
+       const char *name);
+
+/*!
+ * \brief Copy a recording.
+ *
+ * \param src_recording The recording to copy
+ * \param dst The destination of the recording to make
+ * \param dst_recording If successful, the stored recording created as a result of the copy
+ *
+ * \retval 0 on success
+ * \retval Non-zero on error
+ */
+int stasis_app_stored_recording_copy(struct stasis_app_stored_recording *src_recording, const char *dst,
+       struct stasis_app_stored_recording **dst_recording);
+
+/*!
+ * \brief Delete a recording from disk.
+ *
+ * \param recording Recording to delete.
+ * \return 0 on success.
+ * \return Non-zero on error.
+ */
+int stasis_app_stored_recording_delete(
+       struct stasis_app_stored_recording *recording);
+
+/*! @} */
+
+/*! @{ */
+
 /*! Opaque struct for handling the recording of media to a file. */
 struct stasis_app_recording;
 
@@ -78,6 +177,7 @@ struct stasis_app_recording_options {
        AST_DECLARE_STRING_FIELDS(
                AST_STRING_FIELD(name); /*!< name Name of the recording. */
                AST_STRING_FIELD(format);       /*!< Format to be recorded (wav, gsm, etc.) */
+               AST_STRING_FIELD(target); /*!< URI of what is being recorded */
                );
        /*! Number of seconds of silence before ending the recording. */
        int max_silence_seconds;
@@ -216,4 +316,6 @@ enum stasis_app_recording_oper_results stasis_app_recording_operation(
  */
 struct stasis_message_type *stasis_app_recording_snapshot_type(void);
 
+/*! @} */
+
 #endif /* _ASTERISK_STASIS_APP_RECORDING_H */