Loading CHANGES +4 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,10 @@ Changelog Daniel S (5 October 2007) - Michael Wallner made the CULROPT_COOKIELIST option support a new magic string: "FLUSH". Using that will cause libcurl to flush its cookies to the CURLOPT_COOKIEJAR file. - The new file docs/libcurl/ABI describes how we view ABI breakages, soname bumps and what the version number's significance to all that is. Loading @@ -25,7 +29,6 @@ Yang Tse (3 October 2007) - Fixed issue related with the use of ares_timeout() result. Daniel S (3 October 2007) - Alexey Pesternikov introduced CURLOPT_OPENSOCKETFUNCTION and CURLOPT_OPENSOCKETDATA to set a callback that allows an application to replace the socket() call used by libcurl. It basically allows the app to Loading RELEASE-NOTES +2 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ This release includes the following changes: o added CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 and --hostpubmd5 o renamed CURLE_SSL_PEER_CERTIFICATE to CURLE_PEER_FAILED_VERIFICATION o added CURLOPT_OPENSOCKETFUNCTION and CURLOPT_OPENSOCKETDATA o CULROPT_COOKIELIST supports "FLUSH" This release includes the following bugfixes: Loading Loading @@ -53,6 +54,6 @@ advice from friends like these: Dan Fandrich, Michal Marek, Gnter Knauf, Rob Crittenden, Immanuel Gregoire, Mark Davies, Max Katsev, Philip Langdale, Alex Fishman, Johnny Luong, Alexey Pesternikov, Yang Tse, Kim Rinnewitz Alexey Pesternikov, Yang Tse, Kim Rinnewitz, Michael Wallner Thanks! (and sorry if I forgot to mention someone) docs/libcurl/curl_easy_setopt.3 +3 −1 Original line number Diff line number Diff line Loading @@ -810,7 +810,9 @@ format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL cookie engine was not enabled it will enable its cookie engine. Passing a magic string \&"ALL" will erase all cookies known by cURL. (Added in 7.14.1) Passing the special string \&"SESS" will only erase all session cookies known by cURL. (Added in 7.15.4) by cURL. (Added in 7.15.4) Passing the special string \&"FLUSH" will write all cookies known by cURL to the file specified by \fICURLOPT_COOKIEJAR\fP. (Added in 7.17.1) .IP CURLOPT_HTTPGET Pass a long. If the long is non-zero, this forces the HTTP request to get back to GET. usable if a POST, HEAD, PUT or a custom request have been used Loading lib/url.c +40 −24 Original line number Diff line number Diff line Loading @@ -165,6 +165,10 @@ static void signalPipeClose(struct curl_llist *pipeline); static struct SessionHandle* gethandleathead(struct curl_llist *pipeline); #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) static void flush_cookies(struct SessionHandle *data, int cleanup); #endif #define MAX_PIPELINE_LENGTH 5 /* Loading Loading @@ -269,6 +273,36 @@ CURLcode Curl_dupset(struct SessionHandle * dst, struct SessionHandle * src) return r; } #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) static void flush_cookies(struct SessionHandle *data, int cleanup) { Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); if(data->set.str[STRING_COOKIEJAR]) { if(data->change.cookielist) { /* If there is a list of cookie files to read, do it first so that we have all the told files read before we write the new jar */ Curl_cookie_loadfiles(data); } /* we have a "destination" for all the cookies to get dumped to */ if(Curl_cookie_output(data->cookies, data->set.str[STRING_COOKIEJAR])) infof(data, "WARNING: failed to save cookies in %s\n", data->set.str[STRING_COOKIEJAR]); } else { if(cleanup && data->change.cookielist) /* since nothing is written, we can just free the list of cookie file names */ curl_slist_free_all(data->change.cookielist); /* clean up list */ } if(cleanup && (!data->share || (data->cookies != data->share->cookies))) { Curl_cookie_cleanup(data->cookies); } Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); } #endif /* * This is the internal function curl_easy_cleanup() calls. This should * cleanup and free all resources associated with this sessionhandle. Loading Loading @@ -380,30 +414,7 @@ CURLcode Curl_close(struct SessionHandle *data) Curl_safefree(data->state.headerbuff); #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); if(data->set.str[STRING_COOKIEJAR]) { if(data->change.cookielist) { /* If there is a list of cookie files to read, do it first so that we have all the told files read before we write the new jar */ Curl_cookie_loadfiles(data); } /* we have a "destination" for all the cookies to get dumped to */ if(Curl_cookie_output(data->cookies, data->set.str[STRING_COOKIEJAR])) infof(data, "WARNING: failed to save cookies in %s\n", data->set.str[STRING_COOKIEJAR]); } else { if(data->change.cookielist) /* since nothing is written, we can just free the list of cookie file names */ curl_slist_free_all(data->change.cookielist); /* clean up list */ } if( !data->share || (data->cookies != data->share->cookies) ) { Curl_cookie_cleanup(data->cookies); } Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); flush_cookies(data, 1); #endif Curl_digest_cleanup(data); Loading Loading @@ -1089,6 +1100,11 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, Curl_cookie_clearsess(data->cookies); break; } else if(strequal(argptr, "FLUSH")) { /* flush cookies to file */ flush_cookies(data, 0); break; } if(!data->cookies) /* if cookie engine was not running, activate it */ Loading Loading
CHANGES +4 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,10 @@ Changelog Daniel S (5 October 2007) - Michael Wallner made the CULROPT_COOKIELIST option support a new magic string: "FLUSH". Using that will cause libcurl to flush its cookies to the CURLOPT_COOKIEJAR file. - The new file docs/libcurl/ABI describes how we view ABI breakages, soname bumps and what the version number's significance to all that is. Loading @@ -25,7 +29,6 @@ Yang Tse (3 October 2007) - Fixed issue related with the use of ares_timeout() result. Daniel S (3 October 2007) - Alexey Pesternikov introduced CURLOPT_OPENSOCKETFUNCTION and CURLOPT_OPENSOCKETDATA to set a callback that allows an application to replace the socket() call used by libcurl. It basically allows the app to Loading
RELEASE-NOTES +2 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ This release includes the following changes: o added CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 and --hostpubmd5 o renamed CURLE_SSL_PEER_CERTIFICATE to CURLE_PEER_FAILED_VERIFICATION o added CURLOPT_OPENSOCKETFUNCTION and CURLOPT_OPENSOCKETDATA o CULROPT_COOKIELIST supports "FLUSH" This release includes the following bugfixes: Loading Loading @@ -53,6 +54,6 @@ advice from friends like these: Dan Fandrich, Michal Marek, Gnter Knauf, Rob Crittenden, Immanuel Gregoire, Mark Davies, Max Katsev, Philip Langdale, Alex Fishman, Johnny Luong, Alexey Pesternikov, Yang Tse, Kim Rinnewitz Alexey Pesternikov, Yang Tse, Kim Rinnewitz, Michael Wallner Thanks! (and sorry if I forgot to mention someone)
docs/libcurl/curl_easy_setopt.3 +3 −1 Original line number Diff line number Diff line Loading @@ -810,7 +810,9 @@ format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL cookie engine was not enabled it will enable its cookie engine. Passing a magic string \&"ALL" will erase all cookies known by cURL. (Added in 7.14.1) Passing the special string \&"SESS" will only erase all session cookies known by cURL. (Added in 7.15.4) by cURL. (Added in 7.15.4) Passing the special string \&"FLUSH" will write all cookies known by cURL to the file specified by \fICURLOPT_COOKIEJAR\fP. (Added in 7.17.1) .IP CURLOPT_HTTPGET Pass a long. If the long is non-zero, this forces the HTTP request to get back to GET. usable if a POST, HEAD, PUT or a custom request have been used Loading
lib/url.c +40 −24 Original line number Diff line number Diff line Loading @@ -165,6 +165,10 @@ static void signalPipeClose(struct curl_llist *pipeline); static struct SessionHandle* gethandleathead(struct curl_llist *pipeline); #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) static void flush_cookies(struct SessionHandle *data, int cleanup); #endif #define MAX_PIPELINE_LENGTH 5 /* Loading Loading @@ -269,6 +273,36 @@ CURLcode Curl_dupset(struct SessionHandle * dst, struct SessionHandle * src) return r; } #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) static void flush_cookies(struct SessionHandle *data, int cleanup) { Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); if(data->set.str[STRING_COOKIEJAR]) { if(data->change.cookielist) { /* If there is a list of cookie files to read, do it first so that we have all the told files read before we write the new jar */ Curl_cookie_loadfiles(data); } /* we have a "destination" for all the cookies to get dumped to */ if(Curl_cookie_output(data->cookies, data->set.str[STRING_COOKIEJAR])) infof(data, "WARNING: failed to save cookies in %s\n", data->set.str[STRING_COOKIEJAR]); } else { if(cleanup && data->change.cookielist) /* since nothing is written, we can just free the list of cookie file names */ curl_slist_free_all(data->change.cookielist); /* clean up list */ } if(cleanup && (!data->share || (data->cookies != data->share->cookies))) { Curl_cookie_cleanup(data->cookies); } Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); } #endif /* * This is the internal function curl_easy_cleanup() calls. This should * cleanup and free all resources associated with this sessionhandle. Loading Loading @@ -380,30 +414,7 @@ CURLcode Curl_close(struct SessionHandle *data) Curl_safefree(data->state.headerbuff); #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); if(data->set.str[STRING_COOKIEJAR]) { if(data->change.cookielist) { /* If there is a list of cookie files to read, do it first so that we have all the told files read before we write the new jar */ Curl_cookie_loadfiles(data); } /* we have a "destination" for all the cookies to get dumped to */ if(Curl_cookie_output(data->cookies, data->set.str[STRING_COOKIEJAR])) infof(data, "WARNING: failed to save cookies in %s\n", data->set.str[STRING_COOKIEJAR]); } else { if(data->change.cookielist) /* since nothing is written, we can just free the list of cookie file names */ curl_slist_free_all(data->change.cookielist); /* clean up list */ } if( !data->share || (data->cookies != data->share->cookies) ) { Curl_cookie_cleanup(data->cookies); } Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); flush_cookies(data, 1); #endif Curl_digest_cleanup(data); Loading Loading @@ -1089,6 +1100,11 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, Curl_cookie_clearsess(data->cookies); break; } else if(strequal(argptr, "FLUSH")) { /* flush cookies to file */ flush_cookies(data, 0); break; } if(!data->cookies) /* if cookie engine was not running, activate it */ Loading