/*****************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * $Id: fileupload.c,v 1.2 2004/10/16 13:17:15 giva Exp $
 */
#include "stdafx.h"
#include <stdio.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>

#include <sys/stat.h>
#include <fcntl.h>
size_t readFromFile(void *buffer,size_t size,size_t count,FILE *stream)
{
	return fread(buffer,size,count,stream);
}
int curl_debug(CURL * easyHandle, curl_infotype cType, char *data, size_t datasize, void * userRef) 
{
	printf("%s\n",data);
	return 0;
} 
typedef CURL* (*curl_init)(void);
typedef CURLcode (*curl_setopt)(CURL*,int,...);
typedef CURLcode (*curl_perform)(CURL*);
typedef void (*curl_clean)(CURL*);
int main(void) 
{ 

	CURL *curl; 
    CURLcode res; 
 
   HMODULE hDll  =   ::LoadLibrary("C:\\LibCurl\\libcurl.dll");

   curl_init init = (curl_init)::GetProcAddress(hDll,"curl_easy_init");
   curl_setopt setopt = (curl_setopt)::GetProcAddress(hDll,"curl_easy_setopt");
   curl_perform perform = (curl_perform)::GetProcAddress(hDll,"curl_easy_perform");
   curl_clean clean = (curl_clean)::GetProcAddress(hDll,"curl_easy_cleanup");
  
   FILE *fd;
   fd = fopen("C:\\winzip.log", "rb"); 
  struct stat file_info;
  stat("C:\\winzip.log", &file_info); 

   if(init)
   {
	   curl = (*init)();
	   res = (*setopt)(curl,CURLOPT_URL,"ftps://vamsi.APPIQ.COM/winzip.log");
	   res = (*setopt)(curl,CURLOPT_USERPWD,"xxxxx:xxxxx");
	   res = (*setopt)(curl,CURLOPT_READDATA,fd);
             (*setopt)(curl,CURLOPT_INFILESIZE_LARGE,(curl_off_t)file_info.st_size);
	   res = (*setopt)(curl,CURLOPT_READFUNCTION ,&readFromFile);
	   res = (*setopt)(curl,CURLOPT_UPLOAD,1);
			 (*setopt)(curl,CURLOPT_FTP_SSL ,CURLFTPSSL_ALL);
       res = (*setopt)(curl, CURLOPT_SSL_VERIFYPEER,FALSE);
	   res = (*setopt)(curl,CURLOPT_SSLKEY,"C:\\SamplePrograms\\Certificates\\Client\\client.key.pem");
	   res = (*setopt)(curl,CURLOPT_DEBUGFUNCTION,&curl_debug);
	   res = (*setopt)(curl,CURLOPT_SSLCERTPASSWD ,"vamsi");
	   (*setopt)(curl,CURLOPT_SSL_VERIFYHOST,1); 
	  (*setopt)(curl,CURLOPT_SSLVERSION,CURL_SSLVERSION_SSLv3);
	res = (*setopt)(curl,CURLOPT_CAINFO,"C:\\SFTP\\OpenSSL\\bin\\PEM\\\demoCA\\cacert.pem");
       res = (*setopt)(curl, CURLOPT_VERBOSE, 1);

	   res = (*perform)(curl);

	   (*clean)(curl);
   }
   return 0; 
} 

