libcoap
4.3.0
|
API functions for CoAP Caching. More...
Typedefs | |
typedef void(* | coap_cache_app_data_free_callback_t) (void *data) |
Callback to free off the app data when the cache-entry is being deleted / freed off. More... | |
typedef enum coap_cache_session_based_t | coap_cache_session_based_t |
typedef enum coap_cache_record_pdu_t | coap_cache_record_pdu_t |
Enumerations | |
enum | coap_cache_session_based_t { COAP_CACHE_NOT_SESSION_BASED , COAP_CACHE_IS_SESSION_BASED } |
enum | coap_cache_record_pdu_t { COAP_CACHE_NOT_RECORD_PDU , COAP_CACHE_RECORD_PDU } |
Functions | |
coap_cache_key_t * | coap_cache_derive_key (const coap_session_t *session, const coap_pdu_t *pdu, coap_cache_session_based_t session_based) |
Calculates a cache-key for the given CoAP PDU. More... | |
coap_cache_key_t * | coap_cache_derive_key_w_ignore (const coap_session_t *session, const coap_pdu_t *pdu, coap_cache_session_based_t session_based, const uint16_t *ignore_options, size_t ignore_count) |
Calculates a cache-key for the given CoAP PDU. More... | |
void | coap_delete_cache_key (coap_cache_key_t *cache_key) |
Delete the cache-key. More... | |
int | coap_cache_ignore_options (coap_context_t *context, const uint16_t *options, size_t count) |
Define the CoAP options that are not to be included when calculating the cache-key. More... | |
coap_cache_entry_t * | coap_new_cache_entry (coap_session_t *session, const coap_pdu_t *pdu, coap_cache_record_pdu_t record_pdu, coap_cache_session_based_t session_based, unsigned int idle_time) |
Create a new cache-entry hash keyed by cache-key derived from the PDU. More... | |
void | coap_delete_cache_entry (coap_context_t *context, coap_cache_entry_t *cache_entry) |
Remove a cache-entry from the hash list and free off all the appropriate contents apart from app_data. More... | |
coap_cache_entry_t * | coap_cache_get_by_key (coap_context_t *context, const coap_cache_key_t *cache_key) |
Searches for a cache-entry identified by cache_key . More... | |
coap_cache_entry_t * | coap_cache_get_by_pdu (coap_session_t *session, const coap_pdu_t *pdu, coap_cache_session_based_t session_based) |
Searches for a cache-entry corresponding to pdu . More... | |
const coap_pdu_t * | coap_cache_get_pdu (const coap_cache_entry_t *cache_entry) |
Returns the PDU information stored in the coap_cache entry. More... | |
void | coap_cache_set_app_data (coap_cache_entry_t *cache_entry, void *data, coap_cache_app_data_free_callback_t callback) |
Stores data with the given cache entry. More... | |
void * | coap_cache_get_app_data (const coap_cache_entry_t *cache_entry) |
Returns any application-specific data that has been stored with cache_entry using the function coap_cache_set_app_data(). More... | |
API functions for CoAP Caching.
typedef void(* coap_cache_app_data_free_callback_t) (void *data) |
Callback to free off the app data when the cache-entry is being deleted / freed off.
data | The app data to be freed off. |
Definition at line 33 of file coap_cache.h.
typedef enum coap_cache_record_pdu_t coap_cache_record_pdu_t |
typedef enum coap_cache_session_based_t coap_cache_session_based_t |
Enumerator | |
---|---|
COAP_CACHE_NOT_RECORD_PDU | |
COAP_CACHE_RECORD_PDU |
Definition at line 40 of file coap_cache.h.
Enumerator | |
---|---|
COAP_CACHE_NOT_SESSION_BASED | |
COAP_CACHE_IS_SESSION_BASED |
Definition at line 35 of file coap_cache.h.
coap_cache_key_t* coap_cache_derive_key | ( | const coap_session_t * | session, |
const coap_pdu_t * | pdu, | ||
coap_cache_session_based_t | session_based | ||
) |
Calculates a cache-key for the given CoAP PDU.
See https://tools.ietf.org/html/rfc7252#section-5.6 for an explanation of CoAP cache keys.
Specific CoAP options can be removed from the cache-key. Examples of this are the BLOCK1 and BLOCK2 options - which make no real sense including them in a client or server environment, but should be included in a proxy caching environment where things are cached on a per block basis. This is done globally by calling the coap_cache_ignore_options() function.
NOTE: The returned cache-key needs to be freed off by the caller by calling coap_cache_delete_key().
session | The session to add into cache-key if session_based is set. |
pdu | The CoAP PDU for which a cache-key is to be calculated. |
session_based | COAP_CACHE_IS_SESSION_BASED if session based cache-key, else COAP_CACHE_NOT_SESSION_BASED. |
NULL
if failure. Definition at line 129 of file coap_cache.c.
coap_cache_key_t* coap_cache_derive_key_w_ignore | ( | const coap_session_t * | session, |
const coap_pdu_t * | pdu, | ||
coap_cache_session_based_t | session_based, | ||
const uint16_t * | ignore_options, | ||
size_t | ignore_count | ||
) |
Calculates a cache-key for the given CoAP PDU.
See https://tools.ietf.org/html/rfc7252#section-5.6 for an explanation of CoAP cache keys.
Specific CoAP options can be removed from the cache-key. Examples of this are the BLOCK1 and BLOCK2 options - which make no real sense including them in a client or server environment, but should be included in a proxy caching environment where things are cached on a per block basis. This is done individually by specifying cache_ignore_count
and cache_ignore_options
.
NOTE: The returned cache-key needs to be freed off by the caller by calling coap_cache_delete_key().
session | The session to add into cache-key if session_based is set. |
pdu | The CoAP PDU for which a cache-key is to be calculated. |
session_based | COAP_CACHE_IS_SESSION_BASED if session based cache-key, else COAP_CACHE_NOT_SESSION_BASED. |
ignore_options | The array of options to ignore. |
ignore_count | The number of options to ignore. |
NULL
if failure. Definition at line 68 of file coap_cache.c.
void* coap_cache_get_app_data | ( | const coap_cache_entry_t * | cache_entry | ) |
Returns any application-specific data that has been stored with cache_entry
using the function coap_cache_set_app_data().
This function will return NULL
if no data has been stored.
cache_entry | The CoAP cache entry. |
NULL
if no data stored. Definition at line 251 of file coap_cache.c.
coap_cache_entry_t* coap_cache_get_by_key | ( | coap_context_t * | context, |
const coap_cache_key_t * | cache_key | ||
) |
Searches for a cache-entry identified by cache_key
.
This function returns the corresponding cache-entry or NULL
if not found.
context | The context to use. |
cache_key | The cache-key to get the hashed coap-entry. |
cache_key
or NULL
if not found. Definition at line 186 of file coap_cache.c.
coap_cache_entry_t* coap_cache_get_by_pdu | ( | coap_session_t * | session, |
const coap_pdu_t * | pdu, | ||
coap_cache_session_based_t | session_based | ||
) |
Searches for a cache-entry corresponding to pdu
.
This function returns the corresponding cache-entry or NULL
if not found.
session | The session to use. |
pdu | The CoAP request to search for. |
session_based | COAP_CACHE_IS_SESSION_BASED if session based cache-key to be used, else COAP_CACHE_NOT_SESSION_BASED. |
request
or NULL
if not found. Definition at line 201 of file coap_cache.c.
const coap_pdu_t* coap_cache_get_pdu | ( | const coap_cache_entry_t * | cache_entry | ) |
Returns the PDU information stored in the coap_cache
entry.
cache_entry | The CoAP cache entry. |
Definition at line 238 of file coap_cache.c.
int coap_cache_ignore_options | ( | coap_context_t * | context, |
const uint16_t * | options, | ||
size_t | count | ||
) |
Define the CoAP options that are not to be included when calculating the cache-key.
Options that are defined as Non-Cache and the Observe option are always ignored.
context | The context to save the ignored options information in. |
options | The array of options to ignore. |
count | The number of options to ignore. Use 0 to reset the options matching. |
1
if successful, else 0
. Definition at line 42 of file coap_cache.c.
void coap_cache_set_app_data | ( | coap_cache_entry_t * | cache_entry, |
void * | data, | ||
coap_cache_app_data_free_callback_t | callback | ||
) |
Stores data
with the given cache entry.
This function overwrites any value that has previously been stored with cache_entry
.
cache_entry | The CoAP cache entry. |
data | The data pointer to store with wih the cache entry. Note that this data must be valid during the lifetime of cache_entry . |
callback | The callback to call to free off this data when the cache-entry is deleted, or NULL if not required. |
Definition at line 243 of file coap_cache.c.
void coap_delete_cache_entry | ( | coap_context_t * | context, |
coap_cache_entry_t * | cache_entry | ||
) |
Remove a cache-entry from the hash list and free off all the appropriate contents apart from app_data.
context | The context to use. |
cache_entry | The cache-entry to remove. |
Definition at line 220 of file coap_cache.c.
void coap_delete_cache_key | ( | coap_cache_key_t * | cache_key | ) |
Delete the cache-key.
cache_key | The cache-key to delete. |
Definition at line 138 of file coap_cache.c.
coap_cache_entry_t* coap_new_cache_entry | ( | coap_session_t * | session, |
const coap_pdu_t * | pdu, | ||
coap_cache_record_pdu_t | record_pdu, | ||
coap_cache_session_based_t | session_based, | ||
unsigned int | idle_time | ||
) |
Create a new cache-entry hash keyed by cache-key derived from the PDU.
If session_based
is set, then this cache-entry will get deleted when the session is freed off. If record_pdu
is set, then the copied PDU will get freed off when this cache-entry is deleted.
The cache-entry is maintained on a context hash list.
session | The session to use to derive the context from. |
pdu | The pdu to use to generate the cache-key. |
record_pdu | COAP_CACHE_RECORD_PDU if to take a copy of the PDU for later use, else COAP_CACHE_NOT_RECORD_PDU. |
session_based | COAP_CACHE_IS_SESSION_BASED if to associate this cache-entry with the the session (which is embedded in the cache-entry), else COAP_CACHE_NOT_SESSION_BASED. |
idle_time | Idle time in seconds before cache-entry is expired. If set to 0, it does not expire (but will get deleted if the session is deleted and it is session_based). |
NULL
if failure. Definition at line 143 of file coap_cache.c.