#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <curl/curl.h>


FILE * input;

pthread_mutex_t locker = PTHREAD_MUTEX_INITIALIZER;

 
 void *pull_one_url(void *)
 {
   CURL *curl;
   char line[4096];
   char* url;

   while(true){
     curl = curl_easy_init();

     pthread_mutex_lock(&locker);
     if(!fgets(line,4096,input)){
       curl_easy_cleanup(curl);
       pthread_mutex_unlock(&locker);
       break;
     }

     url = new char[strlen(line)+1];
     strcpy(url,line);

     pthread_mutex_unlock(&locker);

     curl_easy_setopt(curl, CURLOPT_URL, url);
     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,1);
     curl_easy_perform(curl); /* ignores error */
     curl_easy_cleanup(curl);

     delete [] url;
   }

   return NULL;
 }
 
int main(int argc, char **argv){

  pthread_t tid[4];
  int i;
  int error;
  char line[4096];
  input = fopen(argv[1],"r");
  int numThread = atoi(argv[2]);
  

  for(i=0; i< numThread; i++) {
    error = pthread_create(&tid[i],
			   NULL, /* default attributes please */
			   pull_one_url,NULL);
    if(0 != error)
      fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
    else
      ;
  }
  
  /* now wait for all threads to terminate */
  for(i=0; i< numThread; i++) {
    error = pthread_join(tid[i], NULL);
    fprintf(stderr, "Thread %d terminated\n", i);
  }

  fclose(input);
  
  return 0;
}

