libgpac
Documentation of the core library of GPAC
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>
+ Include dependency graph for cache.c:

Data Structures

struct  DownloadedCacheEntry
 
struct  CacheInfo
 
struct  CacheGather
 

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_HASH_SIZE   20
 
#define _CACHE_MAX_EXTENSION_SIZE   6
 

Enumerations

enum  CacheValid { CORRUPTED = 1 , DELETED = 1<<1 , IN_PROGRESS = 1<<2 }
 

Functions

Bool gf_sys_check_process_id (u32 pid)
 Checks a process is valid. More...
 
Bool gf_cache_entry_persistent (const DownloadedCacheEntry entry)
 
void gf_cache_entry_set_persistent (const DownloadedCacheEntry entry)
 
static Bool cache_cleanup_processes (GF_Config *cfg)
 
static Bool gather_cache_files (void *cbck, char *item_name, char *item_path, GF_FileEnumInfo *file_info)
 
u64 gf_cache_cleanup (const char *directory, u32 max_size)
 
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)
 
static GF_LockStatus cache_entry_lock (const char *lockfile)
 
GF_Err gf_cache_flush_disk_cache (const DownloadedCacheEntry entry, Bool success)
 
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)
 
static void gf_cache_check_if_cache_file_is_corrupted (const DownloadedCacheEntry entry, const char *url, GF_Config *cfg)
 
DownloadedCacheEntry gf_cache_create_entry (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. More...
 
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. More...
 
GF_Err gf_cache_write_to_cache (const DownloadedCacheEntry entry, const GF_DownloadSession *sess, const char *data, const u32 size, GF_Mutex *mx)
 
void gf_cache_delete_entry (const DownloadedCacheEntry entry)
 
s32 gf_cache_remove_session_from_cache_entry (DownloadedCacheEntry entry, GF_DownloadSession *sess)
 
void gf_cache_set_max_age (const DownloadedCacheEntry entry, u32 max_age, Bool must_revalidate)
 
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)
 
u32 gf_cache_is_done (const DownloadedCacheEntry entry)
 
const u8gf_cache_get_content (const DownloadedCacheEntry entry, u32 *size, u32 *max_valid_size, Bool *was_modified)
 
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)
 
Bool gf_cache_entry_can_reuse (const DownloadedCacheEntry entry, Bool skip_revalidate)
 
Bool gf_cache_entry_is_shared (const DownloadedCacheEntry entry)
 
Bool gf_cache_is_mem (const DownloadedCacheEntry entry)
 
FILE * gf_cache_open_read (const DownloadedCacheEntry entry)
 

Variables

static const char * CACHE_SECTION_NAME = "cache"
 
static const char * CACHE_SECTION_KEY_URL = "url"
 
static const char * CACHE_SECTION_KEY_RANGE = "range"
 
static const char * CACHE_SECTION_KEY_ETAG = "ETag"
 
static const char * CACHE_SECTION_KEY_MIME_TYPE = "Content-Type"
 
static const char * CACHE_SECTION_KEY_CONTENT_SIZE = "Content-Length"
 
static const char * CACHE_SECTION_KEY_LAST_MODIFIED = "Last-Modified"
 
static const char * CACHE_SECTION_KEY_MAXAGE = "MaxAge"
 
static const char * CACHE_SECTION_KEY_MUST_REVALIDATE = "MustRevalidate"
 
static const char * CACHE_SECTION_KEY_NOCACHE = "NoCache"
 
static const char * CACHE_SECTION_KEY_CREATED = "Created"
 
static const char * CACHE_SECTION_KEY_LAST_HIT = "LastHit"
 
static const char * CACHE_SECTION_KEY_NUM_HIT = "NumHit"
 
static const char * CACHE_SECTION_KEY_INWRITE = "InWrite"
 
static const char * CACHE_SECTION_KEY_TODELETE = "ToDelete"
 
static const char * CACHE_SECTION_USERS = "users"
 
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

◆ __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

+ Collaboration diagram for DownloadedCacheEntry:
Data Fields
char * url
char * hash
char * cache_filename
char * cfg_filename
u32 contentLength
u32 cacheSize
char * serverLastModified
char * diskLastModified
char * serverETag
char * diskETag
char * mimeType
FILE * writeFilePtr
u32 written_in_cache
enum CacheValid flags
const GF_DownloadSession * write_session
GF_List * sessions
Bool discard_on_delete
u64 max_age
Bool must_revalidate
Bool other_in_use
u64 range_start
u64 range_end
Bool continue_file
u32 previousRangeContentLength
Bool headers_done
Bool memory_stored
u32 mem_allocated
u8 * mem_storage
GF_Blob cache_blob
GF_Blob * external_blob
char * forced_headers
u32 downtime
Bool persistent

◆ CacheInfo

struct CacheInfo
Data Fields
u32 op_type
u32 nb_entries
u32 total_size
u32 min_size
u32 max_size
u64 min_created
u64 max_created
u64 min_expire
u64 max_expire
u64 min_hit
u64 max_hit
u32 min_nb_hit
u32 max_nb_hit
u64 date_min
u64 date_max
char * name
u64 created
u64 last_hit
u32 nb_hit
u32 size

◆ CacheGather

struct CacheGather
Data Fields
GF_List * files
u64 tot_size

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_HASH_SIZE

#define _CACHE_HASH_SIZE   20

◆ _CACHE_MAX_EXTENSION_SIZE

#define _CACHE_MAX_EXTENSION_SIZE   6

Enumeration Type Documentation

◆ CacheValid

enum CacheValid
Enumerator
CORRUPTED 
DELETED 
IN_PROGRESS 

Function Documentation

◆ gf_cache_entry_persistent()

Bool gf_cache_entry_persistent ( const DownloadedCacheEntry  entry)
+ Here is the caller graph for this function:

◆ gf_cache_entry_set_persistent()

void gf_cache_entry_set_persistent ( const DownloadedCacheEntry  entry)
+ Here is the caller graph for this function:

◆ cache_cleanup_processes()

static Bool cache_cleanup_processes ( GF_Config *  cfg)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gather_cache_files()

static Bool gather_cache_files ( void *  cbck,
char *  item_name,
char *  item_path,
GF_FileEnumInfo file_info 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cache_entry_lock()

static GF_LockStatus cache_entry_lock ( const char *  lockfile)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_flush_disk_cache()

GF_Err gf_cache_flush_disk_cache ( const DownloadedCacheEntry  entry,
Bool  success 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_check_if_cache_file_is_corrupted()

static void gf_cache_check_if_cache_file_is_corrupted ( const DownloadedCacheEntry  entry,
const char *  url,
GF_Config *  cfg 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_create_entry()

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

Creates a new cache entry

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_close_write_cache()

GF_Err gf_cache_close_write_cache ( const DownloadedCacheEntry  entry,
const GF_DownloadSession *  sess,
Bool  success 
)
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
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_open_write_cache()

GF_Err gf_cache_open_write_cache ( const DownloadedCacheEntry  entry,
const GF_DownloadSession *  sess 
)
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
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_set_max_age()

void gf_cache_set_max_age ( const DownloadedCacheEntry  entry,
u32  max_age,
Bool  must_revalidate 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ 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
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_set_end_range()

void gf_cache_set_end_range ( DownloadedCacheEntry  entry,
u64  range_end 
)
+ Here is the caller graph for this function:

◆ gf_cache_is_in_progress()

Bool gf_cache_is_in_progress ( const DownloadedCacheEntry  entry)
+ Here is the caller graph for this function:

◆ gf_cache_set_mime()

Bool gf_cache_set_mime ( const DownloadedCacheEntry  entry,
const char *  mime 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_set_range()

Bool gf_cache_set_range ( const DownloadedCacheEntry  entry,
u64  size,
u64  start_range,
u64  end_range 
)
+ Here is the caller graph for this function:

◆ gf_cache_set_headers()

Bool gf_cache_set_headers ( const DownloadedCacheEntry  entry,
const char *  headers 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_get_forced_headers()

char* gf_cache_get_forced_headers ( const DownloadedCacheEntry  entry)
+ Here is the caller graph for this function:

◆ gf_cache_set_downtime()

void gf_cache_set_downtime ( const DownloadedCacheEntry  entry,
u32  download_time_ms 
)
+ Here is the caller graph for this function:

◆ gf_cache_get_downtime()

u32 gf_cache_get_downtime ( const DownloadedCacheEntry  entry)
+ Here is the caller graph for this function:

◆ gf_cache_is_done()

u32 gf_cache_is_done ( const DownloadedCacheEntry  entry)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_get_content()

const u8* gf_cache_get_content ( const DownloadedCacheEntry  entry,
u32 size,
u32 max_valid_size,
Bool was_modified 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_release_content()

void gf_cache_release_content ( const DownloadedCacheEntry  entry)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_is_deleted()

Bool gf_cache_is_deleted ( const DownloadedCacheEntry  entry)
+ Here is the caller graph for this function:

◆ gf_cache_set_content()

Bool gf_cache_set_content ( const DownloadedCacheEntry  entry,
GF_Blob blob,
Bool  copy,
GF_Mutex *  mx 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_entry_can_reuse()

Bool gf_cache_entry_can_reuse ( const DownloadedCacheEntry  entry,
Bool  skip_revalidate 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_cache_entry_is_shared()

Bool gf_cache_entry_is_shared ( const DownloadedCacheEntry  entry)
+ Here is the caller graph for this function:

◆ gf_cache_is_mem()

Bool gf_cache_is_mem ( const DownloadedCacheEntry  entry)
+ Here is the caller graph for this function:

◆ gf_cache_open_read()

FILE* gf_cache_open_read ( const DownloadedCacheEntry  entry)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ CACHE_SECTION_NAME

const char* CACHE_SECTION_NAME = "cache"
static

◆ CACHE_SECTION_KEY_URL

const char* CACHE_SECTION_KEY_URL = "url"
static

◆ CACHE_SECTION_KEY_RANGE

const char* CACHE_SECTION_KEY_RANGE = "range"
static

◆ CACHE_SECTION_KEY_ETAG

const char* CACHE_SECTION_KEY_ETAG = "ETag"
static

◆ CACHE_SECTION_KEY_MIME_TYPE

const char* CACHE_SECTION_KEY_MIME_TYPE = "Content-Type"
static

◆ CACHE_SECTION_KEY_CONTENT_SIZE

const char* CACHE_SECTION_KEY_CONTENT_SIZE = "Content-Length"
static

◆ CACHE_SECTION_KEY_LAST_MODIFIED

const char* CACHE_SECTION_KEY_LAST_MODIFIED = "Last-Modified"
static

◆ CACHE_SECTION_KEY_MAXAGE

const char* CACHE_SECTION_KEY_MAXAGE = "MaxAge"
static

◆ CACHE_SECTION_KEY_MUST_REVALIDATE

const char* CACHE_SECTION_KEY_MUST_REVALIDATE = "MustRevalidate"
static

◆ CACHE_SECTION_KEY_NOCACHE

const char* CACHE_SECTION_KEY_NOCACHE = "NoCache"
static

◆ CACHE_SECTION_KEY_CREATED

const char* CACHE_SECTION_KEY_CREATED = "Created"
static

◆ CACHE_SECTION_KEY_LAST_HIT

const char* CACHE_SECTION_KEY_LAST_HIT = "LastHit"
static

◆ CACHE_SECTION_KEY_NUM_HIT

const char* CACHE_SECTION_KEY_NUM_HIT = "NumHit"
static

◆ CACHE_SECTION_KEY_INWRITE

const char* CACHE_SECTION_KEY_INWRITE = "InWrite"
static

◆ CACHE_SECTION_KEY_TODELETE

const char* CACHE_SECTION_KEY_TODELETE = "ToDelete"
static

◆ CACHE_SECTION_USERS

const char* CACHE_SECTION_USERS = "users"
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