From 0a305eb79f444db81b4f6ae8c6f201af46f1888e Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 29 Sep 2008 12:22:10 +0000 Subject: - Bug #2107803 (http://curl.haxx.se/bug/view.cgi?id=2107803) "no CURLINFO_REDIRECT_URL in multi mode" also contained a patch that fixed the problem. --- CHANGES | 5 +++++ RELEASE-NOTES | 1 + lib/multi.c | 15 ++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 9d2c2eda6..035efb5b2 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,11 @@ Changelog +Daniel Stenberg (29 Sep 2008) +- Bug #2107803 (http://curl.haxx.se/bug/view.cgi?id=2107803) "no + CURLINFO_REDIRECT_URL in multi mode" also contained a patch that fixed the + problem. + Daniel Stenberg (25 Sep 2008) - Emanuele Bovisio submitted bug report #2126435. We fixed the HTTP Digest auth code to not behave badly when getting a blank realm with diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 2ddecf450..dc93e9f22 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -28,6 +28,7 @@ This release includes the following bugfixes: o thread-safety issues addressed for NSS-powered libcurls o removed the use of mktime() and gmtime(_r)() in date parsing and conversions o HTTP Digest with a blank realm did wrong + o CURLINFO_REDIRECT_URL didn't work with the multi interface This release includes the following known bugs: diff --git a/lib/multi.c b/lib/multi.c index 0fd1aa15b..6eda8c1c8 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -1310,7 +1310,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, /* Check if we can move pending requests to send pipe */ checkPendPipeline(easy->easy_conn); - /* When we follow redirects, must to go back to the CONNECT state */ + /* When we follow redirects or is set to retry the connection, we must + to go back to the CONNECT state */ if(easy->easy_handle->req.newurl || retry) { if(!retry) { /* if the URL is a follow-location and not just a retried request @@ -1335,6 +1336,18 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } else { /* after the transfer is done, go DONE */ + + /* but first check to see if we got a location info even though we're + not following redirects */ + if (easy->easy_handle->req.location) { + newurl = easy->easy_handle->req.location; + easy->easy_handle->req.location = NULL; + easy->result = Curl_follow(easy->easy_handle, newurl, FOLLOW_FAKE); + if (easy->result) + free(newurl); + break; + } + multistate(easy, CURLM_STATE_DONE); result = CURLM_CALL_MULTI_PERFORM; } -- cgit v1.2.3