Make the COOKIESESSION work better by creating a list of cookie files files
authorDaniel Stenberg <daniel@haxx.se>
Thu, 17 Oct 2002 07:10:39 +0000 (07:10 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 17 Oct 2002 07:10:39 +0000 (07:10 +0000)
when given in the curl_easy_setopt() and then parse them all on the first
curl_easy_perform() call instead.

lib/transfer.c
lib/url.c
lib/urldata.h

index 247e402869bccf8b2a43203c24f3624ac0eabb05..198864c307264d8432199b584c86cdf9d9a13440 100644 (file)
@@ -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! */
index c55ebdb197f5e836bd9c2a3030835cd6247c636d..eb4003b22a4b820aa83c7543c62c891c3219574a 100644 (file)
--- 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:
index f4cca8fda6d24d1f996f42b813bfde68dab4045a..6c15b9a44091de5555498741574025795ec16d6c 100644 (file)
@@ -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 */
 };
 
 /*