diff options
Diffstat (limited to 'lib/http.c')
-rw-r--r-- | lib/http.c | 69 |
1 files changed, 35 insertions, 34 deletions
diff --git a/lib/http.c b/lib/http.c index 3084d3211..388f7debf 100644 --- a/lib/http.c +++ b/lib/http.c @@ -1230,7 +1230,6 @@ CURLcode Curl_http(struct connectdata *conn) char *buf = data->state.buffer; /* this is a short cut to the buffer */ CURLcode result=CURLE_OK; struct HTTP *http; - struct Cookie *co=NULL; /* no cookies from start */ char *ppath = conn->path; char *host = conn->host.name; const char *te = ""; /* tranfer-encoding */ @@ -1399,15 +1398,6 @@ CURLcode Curl_http(struct connectdata *conn) return CURLE_OUT_OF_MEMORY; } - if(data->cookies) { - Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); - co = Curl_cookie_getlist(data->cookies, - conn->allocptr.cookiehost? - conn->allocptr.cookiehost:host, ppath, - (bool)(conn->protocol&PROT_HTTPS?TRUE:FALSE)); - Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); - } - if (conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy && !(conn->protocol&PROT_HTTPS)) { @@ -1611,40 +1601,51 @@ CURLcode Curl_http(struct connectdata *conn) http->p_pragma?http->p_pragma:"", http->p_accept?http->p_accept:"", (data->set.encoding && *data->set.encoding && conn->allocptr.accept_encoding)? - conn->allocptr.accept_encoding:"", /* 08/28/02 jhrg */ - (data->change.referer && conn->allocptr.ref)?conn->allocptr.ref:"" /* Referer: <data> <CRLF> */, + conn->allocptr.accept_encoding:"", + (data->change.referer && conn->allocptr.ref)?conn->allocptr.ref:"" /* Referer: <data> */, te ); if(result) return result; - if(co) { - int count=0; - struct Cookie *store=co; - /* now loop through all cookies that matched */ - while(co) { - if(co->value) { - if(0 == count) { - result = add_bufferf(req_buffer, "Cookie: "); + if(data->cookies) { + struct Cookie *co; /* no cookies from start */ + + Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); + co = Curl_cookie_getlist(data->cookies, + conn->allocptr.cookiehost? + conn->allocptr.cookiehost:host, ppath, + (bool)(conn->protocol&PROT_HTTPS?TRUE:FALSE)); + Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); + + if(co) { + int count=0; + struct Cookie *store=co; + /* now loop through all cookies that matched */ + while(co) { + if(co->value) { + if(0 == count) { + result = add_bufferf(req_buffer, "Cookie: "); + if(result) + break; + } + result = add_bufferf(req_buffer, + "%s%s=%s", count?"; ":"", + co->name, co->value); if(result) - return result; + break; + count++; } - result = add_bufferf(req_buffer, - "%s%s=%s", count?"; ":"", co->name, co->value); - if(result) - return result; - count++; + co = co->next; /* next cookie please */ } - co = co->next; /* next cookie please */ - } - if(count) { - result = add_buffer(req_buffer, "\r\n", 2); - if(result) - return result; + if(count && (CURLE_OK == result)) + result = add_buffer(req_buffer, "\r\n", 2); + + Curl_cookie_freelist(store); /* free the cookie list */ } - Curl_cookie_freelist(store); /* free the cookie list */ - co=NULL; + if(result) + return result; } if(data->set.timecondition) { |