#include <curl/curl.h>

void initEasyRequest(CURL* pEasy)
{
	// XXX replace this with login data for ANY server
	const char* sURL = "ftp://someserver/someFileThatDoesNotExist";
	const char* sUser = "someuser";
	const char* sPassword = "somepassword";

	CURLcode easyResult = curl_easy_setopt(pEasy, CURLOPT_URL, sURL );
	easyResult = curl_easy_setopt(pEasy, CURLOPT_USERNAME, sUser );
	easyResult = curl_easy_setopt(pEasy, CURLOPT_PASSWORD, sPassword );

	curl_easy_setopt(pEasy, CURLOPT_VERBOSE, 1);
}

void doMultiPerform(CURLM* pMulti)
{
	int  activeRequests;

	do
	{
		CURLMcode multiResult = curl_multi_perform(pMulti, &activeRequests );

		int messagesLeft;		
		while(true)
		{
			CURLMsg* pMessage = curl_multi_info_read( pMulti, &messagesLeft);
			if(pMessage==NULL)
				break;
		}
	}
	while(activeRequests>0);
}

int main(int argc, const char* argv[])
{
	curl_global_init(CURL_GLOBAL_ALL);

	CURL*	pEasy = curl_easy_init();
	CURL*	pEasy2 = curl_easy_init();	
	CURLM*	pMulti = curl_multi_init();
	CURLMcode multiResult;

	initEasyRequest(pEasy);
	
	multiResult = curl_multi_add_handle( pMulti, pEasy );
	doMultiPerform(pMulti);
	multiResult = curl_multi_remove_handle(pMulti, pEasy);
	
	initEasyRequest(pEasy2);
	
	multiResult = curl_multi_add_handle( pMulti, pEasy2 );
	doMultiPerform(pMulti);
	multiResult = curl_multi_remove_handle(pMulti, pEasy2);

	// the following crashes!
	curl_easy_cleanup(pEasy);

	curl_easy_cleanup(pEasy2);	

	curl_multi_cleanup(pMulti);

	curl_global_cleanup();

	return 0;
}
