Merge branch 'js/http-custom-headers'

HTTP transport clients learned to throw extra HTTP headers at the
server, specified via http.extraHeader configuration variable.

* js/http-custom-headers:
  http: support sending custom HTTP headers
This commit is contained in:
Junio C Hamano
2016-05-06 14:45:43 -07:00
7 changed files with 61 additions and 10 deletions

35
http.c
View File

@ -114,6 +114,7 @@ static unsigned long http_auth_methods = CURLAUTH_ANY;
static struct curl_slist *pragma_header;
static struct curl_slist *no_pragma_header;
static struct curl_slist *extra_http_headers;
static struct active_request_slot *active_queue_head;
@ -323,6 +324,19 @@ static int http_options(const char *var, const char *value, void *cb)
#endif
}
if (!strcmp("http.extraheader", var)) {
if (!value) {
return config_error_nonbool(var);
} else if (!*value) {
curl_slist_free_all(extra_http_headers);
extra_http_headers = NULL;
} else {
extra_http_headers =
curl_slist_append(extra_http_headers, value);
}
return 0;
}
/* Fall back on the default ones */
return git_default_config(var, value, cb);
}
@ -678,8 +692,10 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
if (remote)
var_override(&http_proxy_authmethod, remote->http_proxy_authmethod);
pragma_header = curl_slist_append(pragma_header, "Pragma: no-cache");
no_pragma_header = curl_slist_append(no_pragma_header, "Pragma:");
pragma_header = curl_slist_append(http_copy_default_headers(),
"Pragma: no-cache");
no_pragma_header = curl_slist_append(http_copy_default_headers(),
"Pragma:");
#ifdef USE_CURL_MULTI
{
@ -765,6 +781,9 @@ void http_cleanup(void)
#endif
curl_global_cleanup();
curl_slist_free_all(extra_http_headers);
extra_http_headers = NULL;
curl_slist_free_all(pragma_header);
pragma_header = NULL;
@ -1163,6 +1182,16 @@ int run_one_slot(struct active_request_slot *slot,
return handle_curl_result(results);
}
struct curl_slist *http_copy_default_headers(void)
{
struct curl_slist *headers = NULL, *h;
for (h = extra_http_headers; h; h = h->next)
headers = curl_slist_append(headers, h->data);
return headers;
}
static CURLcode curlinfo_strbuf(CURL *curl, CURLINFO info, struct strbuf *buf)
{
char *ptr;
@ -1380,7 +1409,7 @@ static int http_request(const char *url,
{
struct active_request_slot *slot;
struct slot_results results;
struct curl_slist *headers = NULL;
struct curl_slist *headers = http_copy_default_headers();
struct strbuf buf = STRBUF_INIT;
const char *accept_language;
int ret;