#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 */
}

int 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 );

	}

	if ( slist ) {
		/* clean up the headers list */
		curl_slist_free_all( slist );
	}

	return res;
}
