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

  #include <curl/curl.h>
  #include <curl/types.h>
  #include <curl/easy.h>

  using namespace std;
  
#define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000

  /*
   * This is an example showing how to send an email via SMTP
   */
  
struct timeval tutil_tvnow(void); 
static const char *text[]={
  "one",
  "two",
  "three",
  " Hello, this is CURL email SMTP",
  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 = text[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 */
}
 
 struct timeval tutil_tvnow(void)
{
  /*
  ** time() returns the value of time in seconds since the Epoch.
  */
  struct timeval now;
  now.tv_sec = (long)time(NULL);
  now.tv_usec = 0;
  return now;
}
 

long tutil_tvdiff(struct timeval newer, struct timeval older)
{
  return (newer.tv_sec-older.tv_sec)*1000+
    (newer.tv_usec-older.tv_usec)/1000;
}


  int main(void)
  {
    CURL *curl;
    CURLM *mcurl;
    CURLcode res;
    CURLMcode mres;
    int running = 1;
    struct timeval mp_start;
    char mp_timedout = 0;
    struct WriteThis pooh;
    pooh.counter = 0;

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

      struct curl_slist* rcpt_list = NULL;
      rcpt_list = curl_slist_append(rcpt_list, "arossen@opentext.com");
      rcpt_list = curl_slist_append(rcpt_list, "arossen@rogers.com");



      curl_easy_setopt(curl, CURLOPT_URL,"smtp://smtp.broadband.rogers.com:587");
      curl_easy_setopt(curl, CURLOPT_USERNAME, "arossen@rogers.com");

      curl_easy_setopt(curl, CURLOPT_PASSWORD, "XXXXXXX");

      curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
 
     curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "<arossen@rogers.com>");

      curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, rcpt_list);

      curl_easy_setopt(curl, CURLOPT_READDATA, &pooh);
  
      curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);

      curl_easy_setopt(curl, CURLOPT_SSLVERSION, 0);

      curl_easy_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE, 0);

//      res = curl_easy_perform(curl);

	curl_multi_add_handle(mcurl, curl);

mp_timedout = 0;
mp_start = tutil_tvnow();

while(running){
        mres = curl_multi_perform(mcurl, &running);
	if (tutil_tvdiff(tutil_tvnow(), mp_start) >
        MULTI_PERFORM_HANG_TIMEOUT) {
      mp_timedout = 1;
      break;
    }

if (running <= 0) {
      fprintf(stderr, "nothing left running.\n");
      break;
    }
  }


if (mp_timedout) {
    if (mp_timedout) fprintf(stderr, "mp_timedout\n");
    fprintf(stderr, "ABORTING TEST, since it seems "
            "that it would have run forever.\n");
    //res = TEST_ERR_RUNS_FOREVER;
  }

      curl_slist_free_all(rcpt_list);


    curl_multi_remove_handle(mcurl, curl);
    curl_multi_cleanup(mcurl);


      curl_easy_cleanup(curl);
  
      curl_global_cleanup();
  
    return 0;
  }

    return -1;
}

