mirror of https://github.com/asterisk/asterisk
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
5.0 KiB
176 lines
5.0 KiB
/*
|
|
* Asterisk -- An open source telephony toolkit.
|
|
*
|
|
* Copyright (C) 2015, Digium, Inc.
|
|
*
|
|
* Matt Jordan <mjordan@digium.com>
|
|
*
|
|
* See http://www.asterisk.org for more information about
|
|
* the Asterisk project. Please do not directly contact
|
|
* any of the maintainers of this project for assistance;
|
|
* the project provides a web site, mailing lists and IRC
|
|
* channels for your use.
|
|
*
|
|
* This program is free software, distributed under the terms of
|
|
* the GNU General Public License Version 2. See the LICENSE file
|
|
* at the top of the source tree.
|
|
*/
|
|
|
|
/*!
|
|
* \file
|
|
* \brief An in-memory media cache
|
|
*/
|
|
|
|
#ifndef _ASTERISK_MEDIA_CACHE_H
|
|
#define _ASTERISK_MEDIA_CACHE_H
|
|
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct ast_variable;
|
|
|
|
/*!
|
|
* \brief Check if an item exists in the cache
|
|
*
|
|
* \param uri The unique URI for the media item
|
|
*
|
|
* \retval 0 uri does not exist in cache
|
|
* \retval 1 uri does exist in cache
|
|
*/
|
|
int ast_media_cache_exists(const char *uri);
|
|
|
|
/*!
|
|
* \brief Retrieve an item from the cache
|
|
*
|
|
* \param uri The unique URI for the media item
|
|
* \param preferred_file_name The preferred name for the file storing the
|
|
* media once it is retrieved. Can be NULL.
|
|
* \param file_path Buffer to store the full path to the media in the
|
|
* cache
|
|
* \param len The length of the buffer pointed to by \c file_path
|
|
*
|
|
* \retval 0 The item was retrieved successfully
|
|
* \retval -1 The item could not be retrieved
|
|
*
|
|
* Example Usage:
|
|
* \code
|
|
* char media[PATH_MAX];
|
|
* int res;
|
|
*
|
|
* res = ast_media_cache_retrieve("http://localhost/foo.wav", NULL,
|
|
* media, sizeof(media));
|
|
* \endcode
|
|
*
|
|
* \details
|
|
* Retrieving an item will cause the \ref bucket Bucket backend associated
|
|
* with the URI scheme in \c uri to be queried. If the Bucket backend
|
|
* does not require an update, the cached information is used to find the
|
|
* file associated with \c uri, and \c file_path is populated with the
|
|
* location of the media file associated with \c uri.
|
|
*
|
|
* If the item is not in the cache, the item will be retrieved using the
|
|
* \ref bucket backend. When this occurs, if \c preferred_file_name is given,
|
|
* it will be used as the destination file for the retrieval. When retrieval
|
|
* of the media from the backend is complete, \c file_path is then populated
|
|
* as before.
|
|
*/
|
|
int ast_media_cache_retrieve(const char *uri, const char *preferred_file_name,
|
|
char *file_path, size_t len);
|
|
|
|
/*!
|
|
* \brief Retrieve metadata from an item in the cache
|
|
*
|
|
* \param uri The unique URI for the media item
|
|
* \param key The key of the metadata to retrieve
|
|
* \param value Buffer to store the value in
|
|
* \param len The length of the buffer pointed to by \c value
|
|
*
|
|
* \retval 0 The metadata was retrieved successfully
|
|
* \retval -1 The metadata could not be retrieved
|
|
*
|
|
* Example Usage:
|
|
* \code
|
|
*
|
|
* int res;
|
|
* char file_size[32];
|
|
*
|
|
* res = ast_media_cache_retrieve_metadata("http://localhost/foo.wav", "size",
|
|
* file_size, sizeof(file_size));
|
|
* \endcode
|
|
*/
|
|
int ast_media_cache_retrieve_metadata(const char *uri, const char *key,
|
|
char *value, size_t len);
|
|
|
|
/*!
|
|
* \brief Create/update a cached media item
|
|
*
|
|
* \param uri The unique URI for the media item to store in the cache
|
|
* \param file_path Full path to the media file to be cached
|
|
* \param metadata Metadata to store with the cached item
|
|
*
|
|
* \retval 0 The item was cached
|
|
* \retval -1 An error occurred when creating/updating the item
|
|
*
|
|
* Example Usage:
|
|
* \code
|
|
* int res;
|
|
*
|
|
* res = ast_media_cache_create_or_update("http://localhost/foo.wav",
|
|
* "/tmp/foo.wav", NULL);
|
|
* \endcode
|
|
*
|
|
* \note This method will overwrite whatever has been provided by the
|
|
* \ref bucket backend.
|
|
*
|
|
* \details
|
|
* While \ref ast_media_cache_retrieve is used to retrieve media from
|
|
* some \ref bucket provider, this method allows for overwriting what
|
|
* is provided by a backend with some local media. This is useful for
|
|
* reconstructing or otherwise associating local media with a remote
|
|
* URI, deferring updating of the media from the backend to some later
|
|
* retrieval.
|
|
*/
|
|
int ast_media_cache_create_or_update(const char *uri, const char *file_path,
|
|
struct ast_variable *metadata);
|
|
|
|
/*!
|
|
* \brief Remove an item from the media cache
|
|
*
|
|
* \param uri The unique URI for the media item to store in the cache
|
|
*
|
|
* \retval 0 success
|
|
* \retval -1 error
|
|
*
|
|
* Example Usage:
|
|
* \code
|
|
* int res;
|
|
*
|
|
* res = ast_media_cache_delete("http://localhost/foo.wav");
|
|
* \endcode
|
|
*
|
|
* \details
|
|
* This removes an item completely from the media cache. Any files local
|
|
* on disk associated with the item are deleted as well.
|
|
*
|
|
* \note It is up to the \ref bucket implementation whether or not this
|
|
* affects any non-local storage
|
|
*/
|
|
int ast_media_cache_delete(const char *uri);
|
|
|
|
/*!
|
|
* \brief Initialize the media cache
|
|
*
|
|
* \note This should only be called once, during Asterisk initialization
|
|
*
|
|
* \retval 0 success
|
|
* \retval -1 error
|
|
*/
|
|
int ast_media_cache_init(void);
|
|
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif /* _ASTERISK_MEDIA_CACHE_H */
|