/***************************************************************************
   *                                  _   _ ____  _
   *  Project                     ___| | | |  _ \| |
   *                             / __| | | | |_) | |
   *                            | (__| |_| |  _ <| |___
   *                             \___|\___/|_| \_\_____|
   *
   * $Id: ftpget.c,v 1.7 2008-02-27 09:06:15 bagder Exp $
   */
  
  #include <stdio.h>
  

  #include </usr/local/curl/include/curl/curl.h>
  #include </usr/local/curl/include/curl/types.h>
  #include </usr/local/curl/include/curl/easy.h>
  
  /*
   * This is an example showing how to get multiple files from an FTP server.
   */
  
  struct FtpFile {
    const char *filename;
    FILE *stream;
  };


  
  static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
  {
    struct FtpFile *out=(struct FtpFile *)stream;
    if(out && !out->stream) {
      /* open file for writing */
printf("+++++++++   out->filename = ========%s=========\n", out->filename);
      out->stream=fopen(out->filename, "wb");
      if(!out->stream)
        return -1; /* failure, can't open file to write */
    }

    return fwrite(buffer, size, nmemb, out->stream);
  }
  
  
  int main(void)
  {
    CURL *curl;
    CURLcode res;

    struct FtpFile NlstFile={
      "NLST.txt", /* name to store the file as if succesful */
      NULL
    };

    struct FtpFile ftpfile;
    ftpfile.stream = NULL;

    curl_global_init(CURL_GLOBAL_DEFAULT);
  
    curl = curl_easy_init();
    if(curl) {

      struct curl_slist* list = NULL;
//      list = curl_slist_append(list, "CWD FTP");
//      list = curl_slist_append(list, "PWD");
      list = curl_slist_append(list, "NLST ART*");
//      curl_easy_setopt(curl, CURLOPT_URL,"ftp://geniosol9.hcl.com/FTP/ART*");
	curl_easy_setopt(curl, CURLOPT_URL,"ftp://geniosol9.hcl.com/FTP");
      
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
 
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &NlstFile);
  
      curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);

      curl_easy_setopt(curl, CURLOPT_USERPWD, "sambuild:builder1");

      curl_easy_setopt(curl, CURLOPT_QUOTE, list);
  
//      curl_easy_setopt(curl, CURLOPT_FTPLISTONLY, 1);

      res = curl_easy_perform(curl);

      curl_easy_setopt(curl, CURLOPT_QUOTE, NULL);

      curl_slist_free_all(list); 

	if (NlstFile.stream)
		fclose(NlstFile.stream);

	FILE* pFile;
	char fname [100];
	pFile = fopen("NLST.txt", "r");
	if(pFile == NULL)
	{
	}

/*
	list = curl_slist_append(list, "TYPE I");
	curl_easy_setopt(curl, CURLOPT_QUOTE, list);
*/

      curl_easy_setopt(curl, CURLOPT_FTPLISTONLY, 0);
	char URL[100];
	while (fgets( fname, 100, pFile)!=NULL)
	{
		int len = strlen(fname);
		fname[len -1] = '\0';
		strcpy(URL, "ftp://geniosol9.hcl.com/FTP/");
printf ("------- fname = ------------%s---------\n", fname);
		strcat(URL, fname);
printf("URL = %s", URL);
		ftpfile.filename=fname;
printf("ftpfile.filename=--------%s----------\n", ftpfile.filename);
		ftpfile.stream = NULL;

      curl_easy_setopt(curl, CURLOPT_URL,URL);                      
//	curl_easy_setopt(curl, CURLOPT_URL,"ftp://geniosol9.hcl.com//tmp/filesize");


	curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
      res = curl_easy_perform(curl);

	if(ftpfile.stream)
      		fclose(ftpfile.stream); 

	fname[0] = '\0';
	}  

	fclose(pFile);

      curl_easy_cleanup(curl);
  
      if(CURLE_OK != res) {
        fprintf(stderr, "curl told us %d\n", res);
      }
    }
  
    curl_global_cleanup();
  
    return 0;
  }

