X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=http.h;h=905b4629a47789705c13745fd56ce0c91adea41b;hb=f3cad0ad82e24966bf7bcc8a47670c54c30e4b18;hp=72abac20f856b45c873cc370f23c7df08b650370;hpb=27ee189163070f53a87e033171a45520f70b242e;p=git.git diff --git a/http.h b/http.h index 72abac20f..905b4629a 100644 --- a/http.h +++ b/http.h @@ -6,6 +6,17 @@ #include #include +#include "strbuf.h" +#include "remote.h" + +/* + * We detect based on the cURL version if multi-transfer is + * usable in this implementation and define this symbol accordingly. + * This is not something Makefile should set nor users should pass + * via CFLAGS. + */ +#undef USE_CURL_MULTI + #if LIBCURL_VERSION_NUM >= 0x071000 #define USE_CURL_MULTI #define DEFAULT_MAX_REQUESTS 5 @@ -48,18 +59,14 @@ struct active_request_slot struct buffer { - size_t posn; - size_t size; - void *buffer; + struct strbuf buf; + size_t posn; }; /* Curl request read/write callbacks */ -extern size_t fread_buffer(void *ptr, size_t eltsize, size_t nmemb, - struct buffer *buffer); -extern size_t fwrite_buffer(const void *ptr, size_t eltsize, - size_t nmemb, struct buffer *buffer); -extern size_t fwrite_null(const void *ptr, size_t eltsize, - size_t nmemb, struct buffer *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); /* Slot lifecycle functions */ extern struct active_request_slot *get_active_slot(void); @@ -74,30 +81,27 @@ extern void add_fill_function(void *data, int (*fill)(void *)); extern void step_active_slots(void); #endif -extern void http_init(void); +extern void http_init(struct remote *remote); extern void http_cleanup(void); extern int data_received; extern int active_requests; -#ifndef NO_CURL_EASY_DUPHANDLE -extern CURL *curl_default; -#endif extern char curl_errorstr[CURL_ERROR_SIZE]; -extern int curl_ssl_verify; -extern char *ssl_cert; -#if LIBCURL_VERSION_NUM >= 0x070902 -extern char *ssl_key; -#endif -#if LIBCURL_VERSION_NUM >= 0x070908 -extern char *ssl_capath; -#endif -extern char *ssl_cainfo; -extern long curl_low_speed_limit; -extern long curl_low_speed_time; - -extern struct curl_slist *pragma_header; -extern struct curl_slist *no_range_header; +static inline int missing__target(int code, int result) +{ + return /* file:// URL -- do we ever use one??? */ + (result == CURLE_FILE_COULDNT_READ_FILE) || + /* http:// and https:// URL */ + (code == 404 && result == CURLE_HTTP_RETURNED_ERROR) || + /* ftp:// URL */ + (code == 550 && result == CURLE_FTP_COULDNT_RETR_FILE) + ; +} + +#define missing_target(a) missing__target((a)->http_code, (a)->curl_result) + +extern int http_fetch_ref(const char *base, struct ref *ref); #endif /* HTTP_H */