388 const char *request_url,
402 const char *request_url,
cookie_t ***cookies,
403 size_t *cookie_count);
655 bool include_http_only);
667 const char *path,
bool secure_only,
668 bool include_http_only);
784 size_t *buffer_size);
818 const char *request_domain);
975#define COOKIE_MAX_NAME_LENGTH 256
978#define COOKIE_MAX_VALUE_LENGTH 4096
981#define COOKIE_MAX_DOMAIN_LENGTH 253
984#define COOKIE_MAX_PATH_LENGTH 1024
987#define COOKIE_DEFAULT_MAX_COOKIES 3000
990#define COOKIE_DEFAULT_MAX_PER_DOMAIN 50
993#define COOKIE_DEFAULT_MAX_AGE_SECONDS (365 * 24 * 60 * 60)
1008#define COOKIE_IS_VALID_FOR_HTTP(cookie) \
1009 ((cookie) != NULL && !cookie_is_expired((cookie), time(NULL)))
1019#define COOKIE_IS_VALID_FOR_HTTPS(cookie) \
1020 (COOKIE_IS_VALID_FOR_HTTP(cookie) && (!cookie_is_secure(cookie) || true))
void cookie_set_expires(cookie_t *cookie, time_t expires)
Set cookie expiration time.
Definition cookie.c:956
void cookie_set_http_only(cookie_t *cookie, bool http_only)
Set HttpOnly flag.
Definition cookie.c:994
void cookie_set_samesite(cookie_t *cookie, cookie_samesite_t samesite)
Set SameSite attribute.
Definition cookie.c:1005
void cookie_set_priority(cookie_t *cookie, cookie_priority_t priority)
Set Priority attribute.
Definition cookie.c:1011
void cookie_set_max_age(cookie_t *cookie, int64_t max_age_seconds)
Set cookie max-age.
Definition cookie.c:970
void cookie_set_secure(cookie_t *cookie, bool secure)
Set Secure flag.
Definition cookie.c:983
void cookie_free(cookie_t *cookie)
Free a cookie.
Definition cookie.c:941
cookie_t * cookie_new(const char *name, const char *value, const char *domain, const char *path)
Create a new cookie.
Definition cookie.c:871
cookie_parse_result_t cookie_parse_set_cookie_headers(const char **header_values, size_t count, const char *request_url, cookie_t ***cookies, size_t *cookie_count)
Parse multiple Set-Cookie headers.
cookie_t * cookie_clone(const cookie_t *cookie)
Clone a cookie.
Definition cookie.c:912
cookie_parse_result_t cookie_parse_set_cookie(const char *header_value, const char *request_url, cookie_t **cookie)
Parse a Set-Cookie header.
Definition cookie.c:1193
char * cookie_url_encode(const char *decoded)
URL-encode a string.
char * cookie_url_decode(const char *encoded)
URL-decode a string.
cookie_flags_t
Cookie attribute flags.
Definition cookie.h:46
@ COOKIE_FLAG_PERSISTENT
Definition cookie.h:51
@ COOKIE_FLAG_SESSION
Definition cookie.h:50
@ COOKIE_FLAG_SECURE
Definition cookie.h:47
@ COOKIE_FLAG_HOST_ONLY
Definition cookie.h:49
@ COOKIE_FLAG_HTTP_ONLY
Definition cookie.h:48
bool cookie_is_expired(const cookie_t *cookie, time_t current_time)
Check if cookie is expired.
Definition cookie.c:1033
bool cookie_is_http_only(const cookie_t *cookie)
Check if cookie has HttpOnly flag.
Definition cookie.c:1025
cookie_samesite_t cookie_get_samesite(const cookie_t *cookie)
Get cookie's SameSite attribute.
Definition cookie.c:1045
void cookie_touch(cookie_t *cookie)
Update cookie's last access time.
Definition cookie.c:1053
bool cookie_is_secure(const cookie_t *cookie)
Check if cookie has Secure flag.
Definition cookie.c:1021
cookie_priority_t cookie_get_priority(const cookie_t *cookie)
Get cookie's priority.
Definition cookie.c:1049
bool cookie_is_session(const cookie_t *cookie)
Check if cookie is a session cookie.
Definition cookie.c:1029
bool cookie_is_host_only(const cookie_t *cookie)
Check if cookie is host-only.
Definition cookie.c:1041
struct cookie_jar cookie_jar_t
Container for multiple cookies.
Definition cookie.h:28
struct cookie_domain_bucket cookie_domain_bucket_t
Domain bucket for cookie storage.
cookie_iterator_t cookie_jar_iterator(cookie_jar_t *jar)
Create iterator for all cookies in jar.
Definition cookie.c:1788
cookie_t * cookie_iterator_next(cookie_iterator_t *iter)
Get next cookie from iterator.
Definition cookie.c:1836
bool cookie_iterator_has_next(const cookie_iterator_t *iter)
Check if iterator has more cookies.
Definition cookie.c:1881
void cookie_iterator_reset(cookie_iterator_t *iter)
Reset iterator to beginning.
Definition cookie.c:1917
cookie_iterator_t cookie_jar_iterator_domain(cookie_jar_t *jar, const char *domain)
Create iterator for cookies in specific domain.
Definition cookie.c:1814
struct cookie_iterator cookie_iterator_t
Iterator for traversing cookies.
Definition cookie.h:31
cookie_jar_t * cookie_jar_new(void)
Create a new cookie jar with default configuration.
Definition cookie.c:756
void cookie_jar_clear(cookie_jar_t *jar)
Clear all cookies from a jar.
Definition cookie.c:827
cookie_jar_t * cookie_jar_new_with_config(const cookie_jar_config_t *config)
Create a new cookie jar with custom configuration.
Definition cookie.c:761
cookie_jar_config_t cookie_jar_default_config(void)
Get default cookie jar configuration.
Definition cookie.c:739
size_t cookie_jar_count(const cookie_jar_t *jar)
Get total number of cookies in jar.
Definition cookie.c:854
void cookie_jar_free(cookie_jar_t *jar)
Free a cookie jar and all its cookies.
Definition cookie.c:796
size_t cookie_jar_count_for_domain(const cookie_jar_t *jar, const char *domain)
Get number of cookies for a specific domain.
Definition cookie.c:858
char * cookie_default_path(const char *url)
Extract default path from URL.
Definition cookie.c:1132
bool cookie_domain_matches(const char *cookie_domain, const char *request_domain)
Check if cookie domain matches request domain.
Definition cookie.c:1063
bool cookie_path_matches(const char *cookie_path, const char *request_path)
Check if cookie path matches request path.
Definition cookie.c:1092
char * cookie_canonicalize_domain(const char *domain)
Convert domain to canonical lowercase form.
Definition cookie.c:1117
bool cookie_is_public_suffix(const char *domain)
Check if domain is a public suffix.
Definition cookie.c:1168
struct cookie_match cookie_match_t
Cookie match result.
cookie_parse_result_t
Cookie parsing result codes.
Definition cookie.h:204
@ COOKIE_PARSE_SUCCESS
Definition cookie.h:205
@ COOKIE_PARSE_ERROR_INVALID_VALUE
Definition cookie.h:208
@ COOKIE_PARSE_ERROR_INVALID_EXPIRES
Definition cookie.h:211
@ COOKIE_PARSE_ERROR_INVALID_NAME
Definition cookie.h:207
@ COOKIE_PARSE_ERROR_MEMORY
Definition cookie.h:212
@ COOKIE_PARSE_ERROR_INVALID_DOMAIN
Definition cookie.h:209
@ COOKIE_PARSE_ERROR_INVALID_FORMAT
Definition cookie.h:206
@ COOKIE_PARSE_ERROR_INVALID_PATH
Definition cookie.h:210
bool cookie_jar_load_binary(cookie_jar_t *jar, const char *filename)
Load cookies from binary file.
Definition cookie.c:1990
bool cookie_jar_save_binary(const cookie_jar_t *jar, const char *filename)
Save cookies to binary file.
Definition cookie.c:1954
bool cookie_jar_load_binary_buffer(cookie_jar_t *jar, const char *buffer, size_t buffer_size)
Load cookies from memory buffer.
Definition cookie.c:2047
char * cookie_jar_save_binary_buffer(const cookie_jar_t *jar, size_t *buffer_size)
Save cookies to memory buffer.
Definition cookie.c:2027
cookie_priority_t
Cookie priority levels.
Definition cookie.h:86
@ COOKIE_PRIORITY_LOW
Definition cookie.h:87
@ COOKIE_PRIORITY_MEDIUM
Definition cookie.h:88
@ COOKIE_PRIORITY_HIGH
Definition cookie.h:89
char * cookie_match_to_header(const cookie_match_t *matches)
Convert cookie matches to HTTP Cookie header.
Definition cookie.c:1746
cookie_match_t * cookie_jar_get_cookies_for_url(cookie_jar_t *jar, const char *url, bool include_http_only)
Get cookies that match a URL.
Definition cookie.c:1642
void cookie_match_free(cookie_match_t *matches)
Free a list of cookie matches.
Definition cookie.c:1738
cookie_match_t * cookie_jar_get_cookies(cookie_jar_t *jar, const char *domain, const char *path, bool secure_only, bool include_http_only)
Get cookies matching domain and path.
Definition cookie.c:1688
cookie_samesite_t
SameSite attribute values.
Definition cookie.h:67
@ COOKIE_SAMESITE_STRICT
Definition cookie.h:70
@ COOKIE_SAMESITE_LAX
Definition cookie.h:69
@ COOKIE_SAMESITE_NONE
Definition cookie.h:68
size_t cookie_jar_remove_domain(cookie_jar_t *jar, const char *domain)
Remove all cookies for a domain.
Definition cookie.c:1548
bool cookie_jar_add(cookie_jar_t *jar, cookie_t *cookie)
Add a cookie to a jar.
Definition cookie.c:1483
size_t cookie_jar_cleanup_expired(cookie_jar_t *jar)
Remove expired cookies from jar.
Definition cookie.c:1574
size_t cookie_jar_remove_session(cookie_jar_t *jar)
Remove all session cookies from jar.
Definition cookie.c:1607
bool cookie_jar_remove(cookie_jar_t *jar, const char *name, const char *domain, const char *path)
Remove a specific cookie from jar.
Definition cookie.c:1523
cookie_priority_t cookie_priority_from_string(const char *str)
Convert string to Priority enum.
Definition cookie.c:1442
cookie_samesite_t cookie_samesite_from_string(const char *str)
Convert string to SameSite enum.
Definition cookie.c:1415
const char * cookie_samesite_to_string(cookie_samesite_t samesite)
Convert SameSite enum to string.
Definition cookie.c:1402
const char * cookie_parse_error_string(cookie_parse_result_t result)
Get error message for parse result.
Definition cookie.c:1456
const char * cookie_priority_to_string(cookie_priority_t priority)
Convert Priority enum to string.
Definition cookie.c:1429
struct cookie cookie_t
Individual HTTP cookie.
Definition cookie.h:25
bool cookie_is_valid_value(const char *value)
Check if cookie value is valid.
Definition cookie.c:715
bool cookie_is_valid_name(const char *name)
Check if cookie name is valid.
Definition cookie.c:700
Domain bucket for cookie storage.
Definition cookie.h:172
size_t count
Definition cookie.h:175
char * domain
Definition cookie.h:173
cookie_t * cookies
Definition cookie.h:174
struct cookie_domain_bucket * next
Definition cookie.h:176
Cookie iterator implementation.
Definition cookie.h:246
const char * domain_filter
Definition cookie.h:251
cookie_jar_t * jar
Definition cookie.h:247
bool include_http_only
Definition cookie.h:252
cookie_domain_bucket_t * current_bucket
Definition cookie.h:249
cookie_t * current_cookie
Definition cookie.h:250
size_t bucket_index
Definition cookie.h:248
Cookie jar configuration.
Definition cookie.h:148
size_t max_cookies_per_domain
Definition cookie.h:150
const char * persistent_file
Definition cookie.h:156
time_t max_age_seconds
Definition cookie.h:155
bool accept_persistent_cookies
Definition cookie.h:153
bool accept_third_party
Definition cookie.h:154
bool accept_session_cookies
Definition cookie.h:152
size_t max_cookie_size
Definition cookie.h:151
size_t max_cookies_total
Definition cookie.h:149
Cookie jar implementation.
Definition cookie.h:184
cookie_domain_bucket_t ** domain_buckets
Definition cookie.h:186
bool dirty
Definition cookie.h:189
time_t last_cleanup
Definition cookie.h:190
cookie_jar_config_t config
Definition cookie.h:185
size_t bucket_count
Definition cookie.h:187
size_t total_cookies
Definition cookie.h:188
Cookie match result.
Definition cookie.h:228
cookie_t * cookie
Definition cookie.h:229
struct cookie_match * next
Definition cookie.h:230
HTTP cookie structure.
Definition cookie.h:105
char * path
Path attribute.
Definition cookie.h:113
char * domain
Domain attribute.
Definition cookie.h:111
struct cookie * prev
Previous cookie in linked list.
Definition cookie.h:132
time_t last_access_time
When cookie was last accessed.
Definition cookie.h:120
cookie_priority_t priority
Priority level.
Definition cookie.h:127
time_t creation_time
When cookie was created.
Definition cookie.h:118
time_t expires
Expiration time (0 for session cookies)
Definition cookie.h:116
char * name
Cookie name.
Definition cookie.h:107
cookie_flags_t flags
Cookie attribute flags.
Definition cookie.h:123
struct cookie * next
Next cookie in linked list.
Definition cookie.h:130
char * value
Cookie value.
Definition cookie.h:109
cookie_samesite_t samesite
SameSite attribute.
Definition cookie.h:125