diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am index 4c62a4a17..c636a0901 100644 --- a/tests/libtest/Makefile.am +++ b/tests/libtest/Makefile.am @@ -38,7 +38,7 @@ SUPPORTFILES = first.c test.h # here are all tools used for running libcurl tests noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \ - lib508 lib509 + lib508 lib509 lib510 lib500_SOURCES = lib500.c $(SUPPORTFILES) lib500_LDADD = $(LIBDIR)/libcurl.la @@ -79,3 +79,7 @@ lib508_DEPENDENCIES = $(LIBDIR)/libcurl.la lib509_SOURCES = lib509.c $(SUPPORTFILES) lib509_LDADD = $(LIBDIR)/libcurl.la lib509_DEPENDENCIES = $(LIBDIR)/libcurl.la + +lib510_SOURCES = lib510.c $(SUPPORTFILES) +lib510_LDADD = $(LIBDIR)/libcurl.la +lib510_DEPENDENCIES = $(LIBDIR)/libcurl.la diff --git a/tests/libtest/lib510.c b/tests/libtest/lib510.c new file mode 100644 index 000000000..1cf440bd3 --- /dev/null +++ b/tests/libtest/lib510.c @@ -0,0 +1,80 @@ +#include "test.h" + +static const char *post[]={ + "one", + "two", + "three", + "and a final longer crap: four", + NULL +}; + + +struct WriteThis { + int counter; +}; + +static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp) +{ + struct WriteThis *pooh = (struct WriteThis *)userp; + const char *data; + + if(size*nmemb < 1) + return 0; + + data = post[pooh->counter]; + + if(data) { + size_t len = strlen(data); + memcpy(ptr, data, len); + pooh->counter++; /* advance pointer */ + return len; + } + return 0; /* no more data left to deliver */ +} + +CURLcode test(char *URL) +{ + CURL *curl; + CURLcode res=CURLE_OK; + struct curl_slist *slist = NULL; + + struct WriteThis pooh; + pooh.counter = 0; + + slist = curl_slist_append(slist, "Transfer-Encoding: chunked"); + + curl = curl_easy_init(); + if(curl) { + /* First set the URL that is about to receive our POST. */ + curl_easy_setopt(curl, CURLOPT_URL, URL); + + /* Now specify we want to POST data */ + curl_easy_setopt(curl, CURLOPT_POST, TRUE); + + /* we want to use our own read function */ + curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); + + /* pointer to pass to our read function */ + curl_easy_setopt(curl, CURLOPT_INFILE, &pooh); + + /* get verbose debug output please */ + curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); + + /* include headers in the output */ + curl_easy_setopt(curl, CURLOPT_HEADER, TRUE); + + /* enforce chunked transfer by setting the header */ + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist); + + /* Perform the request, res will get the return code */ + res = curl_easy_perform(curl); + + /* always cleanup */ + curl_easy_cleanup(curl); + + /* clean up the headers list */ + curl_slist_free_all(slist); + + } + return res; +}