diff --git a/tests/data/test540 b/tests/data/test540
index aa62ca069..f82b24015 100644
--- a/tests/data/test540
+++ b/tests/data/test540
@@ -52,7 +52,7 @@ crypto
HTTP proxy auth Digest multi API re-using connection
-http://test.remote.server.com/path/540 http://%HOSTIP:%HTTPPORT silly:person
+http://test.remote.server.com/path/540 http://%HOSTIP:%HTTPPORT silly:person custom.set.host.name
@@ -63,24 +63,24 @@ http://test.remote.server.com/path/540 http://%HOSTIP:%HTTPPORT silly:person
GET http://test.remote.server.com/path/540 HTTP/1.1
-Host: test.remote.server.com
Pragma: no-cache
Accept: */*
Proxy-Connection: Keep-Alive
+Host: custom.set.host.name
GET http://test.remote.server.com/path/540 HTTP/1.1
Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"
-Host: test.remote.server.com
Pragma: no-cache
Accept: */*
Proxy-Connection: Keep-Alive
+Host: custom.set.host.name
GET http://test.remote.server.com/path/540 HTTP/1.1
Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"
-Host: test.remote.server.com
Pragma: no-cache
Accept: */*
Proxy-Connection: Keep-Alive
+Host: custom.set.host.name
diff --git a/tests/libtest/lib540.c b/tests/libtest/lib540.c
index 4b8e141b6..4d22eb575 100644
--- a/tests/libtest/lib540.c
+++ b/tests/libtest/lib540.c
@@ -13,14 +13,17 @@
* argv1 = URL
* argv2 = proxy
* argv3 = proxyuser:password
+ * argv4 = host name to use for the custom Host: header
*/
#include "test.h"
#define PROXY arg2
#define PROXYUSERPWD arg3
+#define HOST test_argv[4]
-static void init(CURLM *cm, const char* url, const char* userpwd)
+static void init(CURLM *cm, const char* url, const char* userpwd,
+ struct curl_slist *headers)
{
CURL *eh = curl_easy_init();
@@ -30,11 +33,13 @@ static void init(CURLM *cm, const char* url, const char* userpwd)
curl_easy_setopt(eh, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
curl_easy_setopt(eh, CURLOPT_VERBOSE, 1);
curl_easy_setopt(eh, CURLOPT_HEADER, 1);
+ curl_easy_setopt(eh, CURLOPT_HTTPHEADER, headers); /* custom Host: */
curl_multi_add_handle(cm, eh);
}
-static int loop(CURLM *cm, const char* url, const char* userpwd)
+static int loop(CURLM *cm, const char* url, const char* userpwd,
+ struct curl_slist *headers)
{
CURLMsg *msg;
long L;
@@ -42,7 +47,7 @@ static int loop(CURLM *cm, const char* url, const char* userpwd)
fd_set R, W, E;
struct timeval T;
- init(cm, url, userpwd);
+ init(cm, url, userpwd, headers);
while (U) {
while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(cm, &U));
@@ -102,18 +107,30 @@ static int loop(CURLM *cm, const char* url, const char* userpwd)
int test(char *URL)
{
CURLM *cm;
+ struct curl_slist *headers = NULL;
+ char buffer[246]; /* naively fixed-size */
+
+ if(test_argc < 4)
+ return 99;
+
+ sprintf(buffer, "Host: %s", HOST);
+
+ /* now add a custom Host: header */
+ headers = curl_slist_append(headers, buffer);
curl_global_init(CURL_GLOBAL_ALL);
cm = curl_multi_init();
- loop(cm, URL, PROXYUSERPWD);
+ loop(cm, URL, PROXYUSERPWD, headers);
fprintf(stderr, "lib540: now we do the request again\n");
- loop(cm, URL, PROXYUSERPWD);
+ loop(cm, URL, PROXYUSERPWD, headers);
curl_multi_cleanup(cm);
curl_global_cleanup();
+ curl_slist_free_all(headers);
+
return EXIT_SUCCESS;
}