From 156aad198f4708f041fbe35ecfb18b875176317d Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 17 Oct 2002 07:10:39 +0000 Subject: [PATCH] Make the COOKIESESSION work better by creating a list of cookie files files when given in the curl_easy_setopt() and then parse them all on the first curl_easy_perform() call instead. --- lib/transfer.c | 16 ++++++++++++++++ lib/url.c | 9 +++++++-- lib/urldata.h | 2 ++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/transfer.c b/lib/transfer.c index 247e40286..198864c30 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -1195,6 +1195,22 @@ CURLcode Curl_pretransfer(struct SessionHandle *data) data->state.this_is_a_follow = FALSE; /* reset this */ data->state.errorbuf = FALSE; /* no error has occurred */ + /* If there was a list of cookie files to read and we haven't done it before, + do it now! */ + if(data->change.cookielist) { + struct curl_slist *list = data->change.cookielist; + while(list) { + data->cookies = Curl_cookie_init(list->data, + data->cookies, + data->set.cookiesession); + list = list->next; + } + curl_slist_free_all(data->change.cookielist); /* clean up list */ + data->change.cookielist = NULL; /* don't do this again! */ + } + + + /* Allow data->set.use_port to set which port to use. This needs to be * disabled for example when we follow Location: headers to URLs using * different ports! */ diff --git a/lib/url.c b/lib/url.c index c55ebdb19..eb4003b22 100644 --- a/lib/url.c +++ b/lib/url.c @@ -183,6 +183,9 @@ CURLcode Curl_close(struct SessionHandle *data) if (data->share) data->share->dirty--; + if(data->change.cookielist) /* clean up list if any */ + curl_slist_free_all(data->change.cookielist); + if(data->state.auth_host) free(data->state.auth_host); @@ -552,8 +555,10 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...) */ cookiefile = (char *)va_arg(param, void *); if(cookiefile) - data->cookies = Curl_cookie_init(cookiefile, data->cookies, - data->set.cookiesession); + /* append the cookie file name to the list of file names, and deal with + them later */ + data->change.cookielist = + curl_slist_append(data->change.cookielist, cookiefile); break; case CURLOPT_COOKIEJAR: diff --git a/lib/urldata.h b/lib/urldata.h index f4cca8fda..6c15b9a44 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -582,6 +582,8 @@ struct DynamicStatic { bool proxy_alloc; /* http proxy string is malloc()'ed */ char *referer; /* referer string */ bool referer_alloc; /* referer sting is malloc()ed */ + struct curl_slist *cookielist; /* list of cookie files set by + curl_easy_setopt(COOKIEFILE) calls */ }; /*