/***********************************************************************
 * 
 *  Copyright (C) 2006 Novell, Inc. All Rights Reserved.
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; version 2.1
 *  of the License.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, Novell, Inc.
 * 
 *  To contact Novell about this file by physical or electronic mail, 
 *  you may find current contact information at www.novell.com.
 * 
 *  Author: Juan Carlos Luciani <jluciani@novell.com>
 *
 ***********************************************************************/

#include "platform.h"


// Extern functions
extern
void NonHttpTest(void);

extern
void HttpTest(void);


// Globals
char usageString[] = "usage: test -a serverAddress -p serverPort [-s serviceName] [-h]\n";

char     *pServerAddress = NULL;
int      serverPort = 0;
bool     execHttpTest = false;

char     serviceName[] = "testService";
char     *pServiceName = serviceName;


/***********************************************************************
 *
 * dtoul()
 *
 ***********************************************************************/
int
dtoul(
   IN    char *cp,
   IN    int len)
{
   int   n = 0;
   int   i;

   for (i = 0; i < len; i++, cp++)
   {
      // Verify that we are dealing with a valid digit
      if (*cp >= '0' && *cp <= '9')
      {
         n = 10 * n + (*cp - '0');
      }
      else
      {
         printf("-dtoul- Found invalid digit\n");
         break;
      }
   }
      
   return n;
}


/***********************************************************************
 *
 * main()
 *
 ***********************************************************************/
int main(int argc, char* argv[])
{
   // Process input parameters
   int i = 1;
   while(argv[i] != NULL)
   {
      if (strcasecmp(argv[i], "-a") == 0)
      {
         // Server Address option, the next argument should
         // contain the address.
         i++;
         if (argv[i] != NULL)
         {
            pServerAddress = argv[i];
         }
         else
         {
            printf(usageString);
            return -1;
         }
      }
      else if (strcasecmp(argv[i], "-p") == 0)
      {
         // Server port option, the next argument should
         // contain the port.
         i++;
         if (argv[i] != NULL)
         {
            serverPort = htons(dtoul(argv[i], strlen(argv[i])));
         }
         else
         {
            printf(usageString);
            return -1;
         }
      }
      else if (strcasecmp(argv[i], "-s") == 0)
      {
         // Service name option, the next argument should
         // contain the name of the service to be targeted.
         i++;
         if (argv[i] != NULL)
         {
            pServiceName = argv[i];
         }
         else
         {
            printf(usageString);
            return -1;
         }
      }
      else if (strcasecmp(argv[i], "-h") == 0)
      {
         // Perform http test option
         execHttpTest = true;
      }

      // Advance to the next argument
      i++;
   }

   // Verify that the server address and port were specified
   if (pServerAddress && serverPort != 0)
   {
      // Repeat the test when indicated
      printf("Press 'Enter' to run test or 'n + Enter' to stop.\n");
      while(getchar() != 'n')
      {
         // Execute the appropriate test
         if (execHttpTest)
         {
            HttpTest();
         }
         else
         {
            NonHttpTest();
         }
         printf("Press 'Enter' to run test or 'n + Enter' to stop.\n");
      }
   }
   else
   {
      printf(usageString);
      return -1;
   }

   return 0;
}