aboutsummaryrefslogtreecommitdiff
path: root/http.h
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2009-04-01 19:48:24 +0300
committerJunio C Hamano <gitster@pobox.com>2009-04-02 13:04:07 -0700
commit3944ba0cb0ef5119dc9d1708c572855fca88fc43 (patch)
treeda494b01663a7405ad7c53254aa7ba5b23ee6aeb /http.h
parentdffc13166ba8950b2ddbac2406042751f96841b7 (diff)
downloadgit-3944ba0cb0ef5119dc9d1708c572855fca88fc43.tar.gz
git-3944ba0cb0ef5119dc9d1708c572855fca88fc43.tar.xz
Allow curl to rewind the read buffers
When using multi-pass authentication methods, the curl library may need to rewind the read buffers (depending on how much already has been fed to the server) used for providing data to HTTP PUT, POST or PROPFIND, and in order to allow the library to do so, we need to tell it how by providing either an ioctl callback or a seek callback. This patch adds an ioctl callback, which should be usable on older curl versions (since 7.12.3) than the seek callback (introduced in curl 7.18.0). Some HTTP servers (such as Apache) give an 401 error reply immediately after receiving the headers (so no data has been read from the read buffers, and thus no rewinding is needed), but other servers (such as Lighttpd) only replies after the whole request has been sent and all data has been read from the read buffers, making rewinding necessary. Signed-off-by: Martin Storsjo <martin@martin.st> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'http.h')
-rw-r--r--http.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/http.h b/http.h
index 905b4629a..26abebed1 100644
--- a/http.h
+++ b/http.h
@@ -37,6 +37,10 @@
#define CURLE_HTTP_RETURNED_ERROR CURLE_HTTP_NOT_FOUND
#endif
+#if LIBCURL_VERSION_NUM < 0x070c03
+#define NO_CURL_IOCTL
+#endif
+
struct slot_results
{
CURLcode curl_result;
@@ -67,6 +71,9 @@ struct buffer
extern size_t fread_buffer(void *ptr, size_t eltsize, size_t nmemb, void *strbuf);
extern size_t fwrite_buffer(const void *ptr, size_t eltsize, size_t nmemb, void *strbuf);
extern size_t fwrite_null(const void *ptr, size_t eltsize, size_t nmemb, void *strbuf);
+#ifndef NO_CURL_IOCTL
+extern curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp);
+#endif
/* Slot lifecycle functions */
extern struct active_request_slot *get_active_slot(void);