/* * GPAC - Multimedia Framework C SDK * * Authors: Jean Le Feuvre, Pierre Souchay * Copyright (c) Telecom ParisTech 2000-2012 * All rights reserved * * This file is part of GPAC / common tools sub-project * * GPAC is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GPAC is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * */ #ifndef _GF_CACHE_H_ #define _GF_CACHE_H_ /*! * \file <gpac/cache.h> * \brief HTTP Cache management. */ /*! * \addtogroup dld_grp Downloader * \ingroup utils_grp * \brief HTTP Downloader Cache * * This section documents the file HTTP caching tools the GPAC framework. * * @{ */ #ifdef __cplusplus extern "C" { #endif #include <gpac/tools.h> /** * Handle for Cache Entries. * You can use the gf_cache_get_* functions to get the cache properties */ typedef struct __DownloadedCacheEntryStruct * DownloadedCacheEntry; typedef struct __CacheReaderStruct * GF_CacheReader; /** * Free The DownloadedCacheEntry handle * \param entry The entry to delete * \return GF_OK */ GF_Err gf_cache_delete_entry( const DownloadedCacheEntry entry ); /** * Get the ETag associated with this cache entry if any * \param entry The entry * \return The ETag if any was defined, NULL otherwise */ const char * gf_cache_get_etag_on_server( const DownloadedCacheEntry entry ); /** * Set the eTag in the cache. Data is duplicated, so original string can be freed by caller. * \param entry The entry * \param eTag The eTag to set * \return GF_OK if entry and eTag are valid, GF_BAD_PARAM otherwise */ GF_Err gf_cache_set_etag_on_disk(const DownloadedCacheEntry entry, const char * eTag ); /** * Get the ETag associated with this cache entry if any * \param entry The entry * \return The ETag if any was defined, NULL otherwise */ const char * gf_cache_get_etag_on_disk( const DownloadedCacheEntry entry ); /** * Set the eTag in the cache. Data is duplicated, so original string can be freed by caller. * \param entry The entry * \param eTag The eTag to set * \return GF_OK if entry and eTag are valid, GF_BAD_PARAM otherwise */ GF_Err gf_cache_set_etag_on_server(const DownloadedCacheEntry entry, const char * eTag ); /** * Get the Mime-Type associated with this cache entry. * \param entry The entry * \return The Mime-Type (never NULL if entry is valid) */ const char * gf_cache_get_mime_type( const DownloadedCacheEntry entry ); /** * Set the Mime-Type in the cache. Data is duplicated, so original string can be freed by caller. * \param entry The entry * \param mime_type The mime-type to set * \return GF_OK if entry and mime-type are valid, GF_BAD_PARAM otherwise */ GF_Err gf_cache_set_mime_type(const DownloadedCacheEntry entry, const char * mime_type ); /** * Get the URL associated with this cache entry. * \param entry The entry * \return The Hash key (never NULL if entry is valid) */ const char * gf_cache_get_url( const DownloadedCacheEntry entry ); /** * Get the Hash Key associated with this cache entry. * \param entry The entry * \return The Hash key (never NULL if entry is valid) */ const char * gf_cache_get_hash( const DownloadedCacheEntry entry ); /** * Tells whether a cache entry should be cached safely (no * \param entry The entry * \return 1 if entry should be cached */ Bool gf_cache_can_be_cached( const DownloadedCacheEntry entry ); /** * Get the Last-Modified information associated with this cache entry. * \param entry The entry * \return The Last-Modified header (can be NULL) */ const char * gf_cache_get_last_modified_on_disk ( const DownloadedCacheEntry entry ); /** * Get the Last-Modified information associated with this cache entry. * \param entry The entry * \return The Last-Modified header (can be NULL) */ const char * gf_cache_get_last_modified_on_server ( const DownloadedCacheEntry entry ); /** * Set the Last-Modified header for this cache entry * \param entry The entry * \param newLastModified The new value to set, will be duplicated * \return GF_OK if everything went alright, GF_BAD_PARAM if entry is NULL */ GF_Err gf_cache_set_last_modified_on_disk ( const DownloadedCacheEntry entry, const char * newLastModified ); /** * Set the Last-Modified header for this cache entry * \param entry The entry * \param newLastModified The new value to set, will be duplicated * \return GF_OK if everything went alright, GF_BAD_PARAM if entry is NULL */ GF_Err gf_cache_set_last_modified_on_server ( const DownloadedCacheEntry entry, const char * newLastModified ); /** * Get the file name of cache associated with this cache entry. * \param entry The entry * \return The Cache file (never NULL if entry is valid) */ const char * gf_cache_get_cache_filename( const DownloadedCacheEntry entry ); /** * Get the real file size of the cache entry * \param entry The entry * \return the file size */ u32 gf_cache_get_cache_filesize( const DownloadedCacheEntry entry ); /** * Flushes The disk cache for this entry (by persisting the property file * \param entry The entry */ GF_Err gf_cache_flush_disk_cache( const DownloadedCacheEntry entry ); GF_Err gf_cache_set_content_length( const DownloadedCacheEntry entry, u32 length ); u32 gf_cache_get_content_length( const DownloadedCacheEntry entry); /** * \brief append cache directives to an HTTP GET request * \param entry The entry of cache to use * \param httpRequest The HTTP GET request to populate. The request must have been allocated enough to handle the cache arguments * \return GF_OK if everything went fine, GF_BAD_PARAM if parameters are wrong */ GF_Err gf_cache_append_http_headers(const DownloadedCacheEntry entry, char * httpRequest); /* * Cache Management functions */ /*! * Delete all cached files in given directory starting with startpattern * \param directory to clean up * \return GF_OK if everything went fine */ GF_Err gf_cache_delete_all_cached_files(const char * directory); /* * Cache Reader functions */ GF_CacheReader gf_cache_reader_new(const DownloadedCacheEntry entry); GF_Err gf_cache_reader_del( GF_CacheReader handle ); s64 gf_cache_reader_seek_at( GF_CacheReader reader, u64 seekPosition); s64 gf_cache_reader_get_position( const GF_CacheReader reader); s64 gf_cache_reader_get_currentSize( GF_CacheReader reader ); s64 gf_cache_reader_get_full_size( GF_CacheReader reader ); s32 gf_cache_reader_read( GF_CacheReader reader, char * buff, s32 length); Bool gf_cache_check_if_cache_file_is_corrupted(const DownloadedCacheEntry entry); void gf_cache_entry_set_delete_files_when_deleted(const DownloadedCacheEntry entry); Bool gf_cache_entry_is_delete_files_when_deleted(const DownloadedCacheEntry entry); u32 gf_cache_get_sessions_count_for_cache_entry(const DownloadedCacheEntry entry); u64 gf_cache_get_start_range( const DownloadedCacheEntry entry ); u64 gf_cache_get_end_range( const DownloadedCacheEntry entry ); Bool gf_cache_are_headers_processed(const DownloadedCacheEntry entry); GF_Err gf_cache_set_headers_processed(const DownloadedCacheEntry entry); /*! @} */ #ifdef __cplusplus } #endif #endif /* _GF_CACHE_H_ */