libgpac
Documentation of the core library of GPAC
Loading...
Searching...
No Matches
cache.c File Reference
#include <gpac/cache.h>
#include <gpac/network.h>
#include <gpac/download.h>
#include <gpac/token.h>
#include <gpac/thread.h>
#include <gpac/list.h>
#include <gpac/base_coding.h>
#include <gpac/tools.h>
#include <gpac/config_file.h>
#include <stdio.h>
#include <string.h>

Data Structures

struct  GF_CacheReader
 
struct  DownloadedRange
 
struct  DownloadedCacheEntry
 

Macros

#define CHECK_ENTRY   if (!entry) { GF_LOG(GF_LOG_WARNING, GF_LOG_CACHE, ("[CACHE] entry is null at " __FILE__ ":%d\n", __LINE__)); return GF_BAD_PARAM; }
 
#define _CACHE_TMP_SIZE   4096
 
#define _CACHE_HASH_SIZE   20
 
#define _CACHE_MAX_EXTENSION_SIZE   6
 

Enumerations

enum  CacheValid {
  MUST_REVALIDATE = 1 , IS_HTTPS = 1<<1 , CORRUPTED = 1<<2 , NO_CACHE = 1<<3 ,
  DELETED = 1<<4
}
 

Functions

Bool gf_cache_entry_persistent (const DownloadedCacheEntry entry)
 
void gf_cache_entry_set_persistent (const DownloadedCacheEntry entry)
 
Bool delete_cache_files (void *cbck, char *item_name, char *item_path, GF_FileEnumInfo *file_info)
 
Bool gather_cache_size (void *cbck, char *item_name, char *item_path, GF_FileEnumInfo *file_info)
 
u64 gf_cache_get_size (const char *directory)
 
GF_Err gf_cache_delete_all_cached_files (const char *directory)
 
void gf_cache_entry_set_delete_files_when_deleted (const DownloadedCacheEntry entry)
 
Bool gf_cache_entry_is_delete_files_when_deleted (const DownloadedCacheEntry entry)
 
const char * gf_cache_get_etag_on_server (const DownloadedCacheEntry entry)
 
const char * gf_cache_get_mime_type (const DownloadedCacheEntry entry)
 
GF_Err gf_cache_set_headers_processed (const DownloadedCacheEntry entry)
 
Bool gf_cache_are_headers_processed (const DownloadedCacheEntry entry)
 
GF_Err gf_cache_set_etag_on_server (const DownloadedCacheEntry entry, const char *eTag)
 
GF_Err gf_cache_set_etag_on_disk (const DownloadedCacheEntry entry, const char *eTag)
 
GF_Err gf_cache_set_mime_type (const DownloadedCacheEntry entry, const char *mime_type)
 
u64 gf_cache_get_start_range (const DownloadedCacheEntry entry)
 
u64 gf_cache_get_end_range (const DownloadedCacheEntry entry)
 
const char * gf_cache_get_url (const DownloadedCacheEntry entry)
 
const char * gf_cache_get_last_modified_on_server (const DownloadedCacheEntry entry)
 
GF_Err gf_cache_set_last_modified_on_server (const DownloadedCacheEntry entry, const char *newLastModified)
 
GF_Err gf_cache_set_last_modified_on_disk (const DownloadedCacheEntry entry, const char *newLastModified)
 
GF_Err gf_cache_flush_disk_cache (const DownloadedCacheEntry entry)
 
u32 gf_cache_get_cache_filesize (const DownloadedCacheEntry entry)
 
const char * gf_cache_get_cache_filename (const DownloadedCacheEntry entry)
 
GF_Err gf_cache_get_http_headers (const DownloadedCacheEntry entry, const char **etag, const char **last_modif)
 
DownloadedCacheEntry gf_cache_create_entry (GF_DownloadManager *dm, const char *cache_directory, const char *url, u64 start_range, u64 end_range, Bool mem_storage, GF_Mutex *mx)
 
GF_Err gf_cache_set_content_length (const DownloadedCacheEntry entry, u32 length)
 
u32 gf_cache_get_content_length (const DownloadedCacheEntry entry)
 
GF_Err gf_cache_close_write_cache (const DownloadedCacheEntry entry, const GF_DownloadSession *sess, Bool success)
 Close the write file pointer of cache This function also flushes all buffers, so cache will always be consistent after.
 
GF_Err gf_cache_open_write_cache (const DownloadedCacheEntry entry, const GF_DownloadSession *sess)
 Open the write file pointer of cache This function prepares calls for gf_cache_write_to_cache.
 
GF_Err gf_cache_write_to_cache (const DownloadedCacheEntry entry, const GF_DownloadSession *sess, const char *data, const u32 size, GF_Mutex *mx)
 
GF_Err gf_cache_delete_entry (const DownloadedCacheEntry entry)
 
Bool gf_cache_check_if_cache_file_is_corrupted (const DownloadedCacheEntry entry)
 
s32 gf_cache_remove_session_from_cache_entry (DownloadedCacheEntry entry, GF_DownloadSession *sess)
 
u32 gf_cache_get_sessions_count_for_cache_entry (const DownloadedCacheEntry entry)
 
s32 gf_cache_add_session_to_cache_entry (DownloadedCacheEntry entry, GF_DownloadSession *sess)
 
void gf_cache_set_end_range (DownloadedCacheEntry entry, u64 range_end)
 
Bool gf_cache_is_in_progress (const DownloadedCacheEntry entry)
 
Bool gf_cache_set_mime (const DownloadedCacheEntry entry, const char *mime)
 
Bool gf_cache_set_range (const DownloadedCacheEntry entry, u64 size, u64 start_range, u64 end_range)
 
Bool gf_cache_set_headers (const DownloadedCacheEntry entry, const char *headers)
 
char * gf_cache_get_forced_headers (const DownloadedCacheEntry entry)
 
void gf_cache_set_downtime (const DownloadedCacheEntry entry, u32 download_time_ms)
 
u32 gf_cache_get_downtime (const DownloadedCacheEntry entry)
 
Bool gf_cache_is_done (const DownloadedCacheEntry entry)
 
const u8gf_cache_get_content (const DownloadedCacheEntry entry, u32 *size)
 
void gf_cache_release_content (const DownloadedCacheEntry entry)
 
Bool gf_cache_is_deleted (const DownloadedCacheEntry entry)
 
Bool gf_cache_set_content (const DownloadedCacheEntry entry, GF_Blob *blob, Bool copy, GF_Mutex *mx)
 

Variables

static const char * CACHE_SECTION_NAME = "cache"
 
static const char * CACHE_SECTION_NAME_URL = "url"
 
static const char * CACHE_SECTION_NAME_RANGE = "range"
 
static const char * CACHE_SECTION_NAME_ETAG = "ETag"
 
static const char * CACHE_SECTION_NAME_MIME_TYPE = "Content-Type"
 
static const char * CACHE_SECTION_NAME_CONTENT_SIZE = "Content-Length"
 
static const char * CACHE_SECTION_NAME_LAST_MODIFIED = "Last-Modified"
 
static const char * cache_file_prefix = "gpac_cache_"
 
static const char * default_cache_file_suffix = ".dat"
 
static const char * cache_file_info_suffix = ".txt"
 

Data Structure Documentation

◆ __CacheReaderStruct

struct __CacheReaderStruct

cache object

Data Fields
FILE * readPtr
s64 readPosition

◆ __DownloadedRangeStruc

struct __DownloadedRangeStruc
Data Fields
u32 start
u32 end
const char * filename

◆ __DownloadedCacheEntryStruct

struct __DownloadedCacheEntryStruct

This opaque structure handles the data from the cache

Handle for Cache Entries. You can use the gf_cache_get_* functions to get the cache properties

Data Fields
char * url

URL of the cache (never NULL)

char * hash

Hash of the cache (never NULL)

char * cache_filename

Name of the cache filename, (can be NULL)

GF_Config * properties

Name of the cached properties filename , (can be NULL)

u32 contentLength

Theorical size of cache if any

u32 cacheSize

Real size of cache

u32 validity

GMT timestamp for revalidation

char * serverLastModified

The last modification time on the server

char * diskLastModified

The last modification time of the cache if any

char * serverETag

ETag if any

char * diskETag

ETag if any

char * mimeType

Mime-type (never NULL)

FILE * writeFilePtr

Write pointer for the cache

u32 written_in_cache

Bytes written during this cache session

enum CacheValid flags

Flag indicating whether we have to revalidate

const GF_DownloadSession * write_session
GF_List * sessions
Bool deletableFilesOnDelete
GF_DownloadManager * dm
u64 range_start
u64 range_end
Bool continue_file
Bool file_exists
u32 previousRangeContentLength
Bool headers_done
Bool memory_stored

Set to 1 if file is not stored on disk

u32 mem_allocated
u8 * mem_storage
char * forced_headers
u32 downtime
GF_Blob cache_blob
GF_Blob * external_blob
Bool persistent

Macro Definition Documentation

◆ CHECK_ENTRY

#define CHECK_ENTRY   if (!entry) { GF_LOG(GF_LOG_WARNING, GF_LOG_CACHE, ("[CACHE] entry is null at " __FILE__ ":%d\n", __LINE__)); return GF_BAD_PARAM; }

◆ _CACHE_TMP_SIZE

#define _CACHE_TMP_SIZE   4096

◆ _CACHE_HASH_SIZE

#define _CACHE_HASH_SIZE   20

◆ _CACHE_MAX_EXTENSION_SIZE

#define _CACHE_MAX_EXTENSION_SIZE   6

Enumeration Type Documentation

◆ CacheValid

enum CacheValid
Enumerator
MUST_REVALIDATE 
IS_HTTPS 
CORRUPTED 
NO_CACHE 
DELETED 

Function Documentation

◆ gf_cache_entry_persistent()

Bool gf_cache_entry_persistent ( const DownloadedCacheEntry  entry)

◆ gf_cache_entry_set_persistent()

void gf_cache_entry_set_persistent ( const DownloadedCacheEntry  entry)

◆ delete_cache_files()

Bool delete_cache_files ( void *  cbck,
char *  item_name,
char *  item_path,
GF_FileEnumInfo file_info 
)

◆ gather_cache_size()

Bool gather_cache_size ( void *  cbck,
char *  item_name,
char *  item_path,
GF_FileEnumInfo file_info 
)

◆ gf_cache_create_entry()

DownloadedCacheEntry gf_cache_create_entry ( GF_DownloadManager *  dm,
const char *  cache_directory,
const char *  url,
u64  start_range,
u64  end_range,
Bool  mem_storage,
GF_Mutex *  mx 
)

Creates a new cache entry

◆ gf_cache_close_write_cache()

GF_Err gf_cache_close_write_cache ( const DownloadedCacheEntry  entry,
const GF_DownloadSession *  sess,
Bool  success 
)

Close the write file pointer of cache This function also flushes all buffers, so cache will always be consistent after.

Parameters
entryThe entry to use
sessThe download session
success1 if cache write is success, false otherwise
Returns
GF_OK is everything went fine, GF_BAD_PARAM if entry is NULL, GF_IO_ERR if a failure occurs

◆ gf_cache_open_write_cache()

GF_Err gf_cache_open_write_cache ( const DownloadedCacheEntry  entry,
const GF_DownloadSession *  sess 
)

Open the write file pointer of cache This function prepares calls for gf_cache_write_to_cache.

Parameters
entryThe entry to use
sessThe download session
Returns
GF_OK is everything went fine, GF_BAD_PARAM if entry is NULL, GF_IO_ERR if a failure occurs

◆ gf_cache_write_to_cache()

GF_Err gf_cache_write_to_cache ( const DownloadedCacheEntry  entry,
const GF_DownloadSession *  sess,
const char *  data,
const u32  size,
GF_Mutex *  mx 
)

◆ gf_cache_remove_session_from_cache_entry()

s32 gf_cache_remove_session_from_cache_entry ( DownloadedCacheEntry  entry,
GF_DownloadSession *  sess 
)

Removes a session for a DownloadedCacheEntry

Parameters
entryThe entry
sessThe session to remove
Returns
the number of sessions left in the cached entry, -1 if one of the parameters is wrong

◆ gf_cache_add_session_to_cache_entry()

s32 gf_cache_add_session_to_cache_entry ( DownloadedCacheEntry  entry,
GF_DownloadSession *  sess 
)

Adds a session to a DownloadedCacheEntry. implemented in cache.c

Parameters
entryThe entry
sessThe session to add
Returns
the number of sessions in the cached entry, -1 if one of the parameters is wrong

◆ gf_cache_set_end_range()

void gf_cache_set_end_range ( DownloadedCacheEntry  entry,
u64  range_end 
)

◆ gf_cache_is_in_progress()

Bool gf_cache_is_in_progress ( const DownloadedCacheEntry  entry)

◆ gf_cache_set_mime()

Bool gf_cache_set_mime ( const DownloadedCacheEntry  entry,
const char *  mime 
)

◆ gf_cache_set_range()

Bool gf_cache_set_range ( const DownloadedCacheEntry  entry,
u64  size,
u64  start_range,
u64  end_range 
)

◆ gf_cache_set_headers()

Bool gf_cache_set_headers ( const DownloadedCacheEntry  entry,
const char *  headers 
)

◆ gf_cache_get_forced_headers()

char * gf_cache_get_forced_headers ( const DownloadedCacheEntry  entry)

◆ gf_cache_set_downtime()

void gf_cache_set_downtime ( const DownloadedCacheEntry  entry,
u32  download_time_ms 
)

◆ gf_cache_get_downtime()

u32 gf_cache_get_downtime ( const DownloadedCacheEntry  entry)

◆ gf_cache_is_done()

Bool gf_cache_is_done ( const DownloadedCacheEntry  entry)

◆ gf_cache_get_content()

const u8 * gf_cache_get_content ( const DownloadedCacheEntry  entry,
u32 size 
)

◆ gf_cache_release_content()

void gf_cache_release_content ( const DownloadedCacheEntry  entry)

◆ gf_cache_is_deleted()

Bool gf_cache_is_deleted ( const DownloadedCacheEntry  entry)

◆ gf_cache_set_content()

Bool gf_cache_set_content ( const DownloadedCacheEntry  entry,
GF_Blob blob,
Bool  copy,
GF_Mutex *  mx 
)

Variable Documentation

◆ CACHE_SECTION_NAME

const char* CACHE_SECTION_NAME = "cache"
static

◆ CACHE_SECTION_NAME_URL

const char* CACHE_SECTION_NAME_URL = "url"
static

◆ CACHE_SECTION_NAME_RANGE

const char* CACHE_SECTION_NAME_RANGE = "range"
static

◆ CACHE_SECTION_NAME_ETAG

const char* CACHE_SECTION_NAME_ETAG = "ETag"
static

◆ CACHE_SECTION_NAME_MIME_TYPE

const char* CACHE_SECTION_NAME_MIME_TYPE = "Content-Type"
static

◆ CACHE_SECTION_NAME_CONTENT_SIZE

const char* CACHE_SECTION_NAME_CONTENT_SIZE = "Content-Length"
static

◆ CACHE_SECTION_NAME_LAST_MODIFIED

const char* CACHE_SECTION_NAME_LAST_MODIFIED = "Last-Modified"
static

◆ cache_file_prefix

const char* cache_file_prefix = "gpac_cache_"
static

◆ default_cache_file_suffix

const char* default_cache_file_suffix = ".dat"
static

◆ cache_file_info_suffix

const char* cache_file_info_suffix = ".txt"
static