/***********************************************************************
 *
 *    tcpserver_blocker
 *
 *    Author: Nico Schottelius
 *    Date: 2006-08-04
 *
 *    Check for valid argv
 */

#include <unistd.h>        /* read/write  */
#include <string.h>        /* strlen      */
#include <sys/types.h>     /* opendir     */
#include <dirent.h>        /* opendir     */
#include <stdlib.h>        /* atoi        */

#include "analyzer.h"

/***********************************************************************
 * ARGV: argv[0] logdir intervall max_conns cmd [cmd_params ...]
 */
int do_argv(int argc, char **argv)
{ 
   DIR *logdir;
   int tmp;

   if(argc < ARGV_COUNT_MIN) {
      write(2,MSG_USAGE,strlen(MSG_USAGE));
      return 0;
   }
   options.logdir       = *++argv;
   options.begin        = strtoul(*++argv,NULL,10);
   
   options.intervals    = NULL;
   options.ipns         = NULL;

   ++argv;
   tmp=0;
   /* read intervals */
   while(*argv != NULL) {
      if(!strncmp("--",*argv,2)) {
         ++argv;
         break;
      }
      options.intervals = realloc(options.intervals, (tmp+1) * sizeof(int));
      if(!options.intervals) return 0;
      options.intervals[tmp] = strtoul(*argv,NULL,10);

      mini_printf(*argv,2);
      mini_printf("\n",2);
      ++argv;
      ++tmp;
   }
   if(tmp > 0) {
      options.intervals[tmp] = -1;
   } else {
      write(2,MSG_USAGE,strlen(MSG_USAGE));
      return 0;
   }

   /* read ipns */
   tmp=0;
   while(*argv != NULL) {
//      options.ipns = realloc(options.ipns, (tmp+1) * 4);
      /* the following line makes problems using glibc */
      options.ipns = realloc(options.ipns, (tmp+1) * sizeof(char *));
      if(!options.ipns) return 0;
      options.ipns[tmp] = *argv;
      mini_printf("b:",2);
      mini_printf(options.ipns[tmp],2);
      mini_printf("\n",2);
      options.ipns[++tmp] = NULL;

      ++argv;
   }
   if(tmp > 0) {
      options.ipns[tmp] = NULL;
   } else {
      options.ipns = NULL;
   }

   /* check logdir */
   logdir = opendir(options.logdir);
   if(!logdir) {
      print_errno(options.logdir);
      return 0;
   }
   closedir(logdir);

   return 1;
}
