diff options
author | Daniel Stenberg <daniel@haxx.se> | 2004-01-30 09:26:23 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2004-01-30 09:26:23 +0000 |
commit | 3d99b566a639379e873721e9f29bd04a9df9a861 (patch) | |
tree | 94ad1431daa6d08165c0a22438d2682ea2860753 /tests/libtest/lib510.c | |
parent | 99a3e2d769c5eca02e60d88d76fb8821f94c059c (diff) |
added lib510.c for callback POST using chunked encoding
Diffstat (limited to 'tests/libtest/lib510.c')
-rw-r--r-- | tests/libtest/lib510.c | 80 |
1 files changed, 80 insertions, 0 deletions
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; +} |