/*********************************************************/
/*    Autori:                                            */
/*            Pelosi Giovanni, 346787, pelosi            */
/*            Pesce  Agatino,  456868, pesce             */
/*                                                       */
/*  Progetto: Sistemi 2: biblioteca                      */
/*  Data Pr.: 9/2/96                                     */
/*      File: main.c                                     */
/*                                                       */
/*********************************************************/

#include  <stdlib.h>
#include  <stdio.h>
#include  <string.h>

#include  "hstdio.h"
#include  "support.h"
#include  "socket.h"
#include  "server.h"
#include  "libro.h"

static char * FileCatalogo="catalogo.txt";
static char * Biblio=NULL;
static char * serverService;
static int    serverPort;

/*
************************************************************************
*
*   chiusura server
*
************************************************************************
*/

static void CleanUp(void)
{
  ExitServer();
  ExitSocket();
  ExitLibro();
  ExitStdio();
}

/*
************************************************************************
*
*   inizializzazione server
*
************************************************************************
*/

static void Initialize(void)
{
  InitStdio();
  InitLibro(FileCatalogo);
  InitSocket();
  InitServer(Biblio);
}


/*
************************************************************************
*
*   terminazione server con stampa argomenti
*
************************************************************************
*/


static void ExitUsage(char * mess)
{
  printf("\n%s\n",mess);
  puts(   "\n");
  puts(   "Utilizzo: server [-b 'nome server'] [-f 'catalogo'] [host:port [host:port]] \n");
  exit(-1);
}

/*
************************************************************************
*
*   analisi argomenti linea comando
*
************************************************************************
*/


static void  ParseArgs( int argc, char* argv[] )
{
  char* c;
  argc--;argv++;          /* argv[0]: program */

  while (argc)
    {
		if (!strcmp(*argv,"-b"))   /* nome bibioteca */
		  {
			 argc--;argv++;
			 if (!argc)
				ExitUsage("specificare -b 'biblioteca' ");
			 Biblio = *argv;
			 argc--;argv++;
			 continue;
		  }
		if (!strcmp(*argv,"-f"))   /* catalogo */
		  {
			 argc--;argv++;
			 if (!argc)
				ExitUsage("specificare -f 'catalogo' ");
			 FileCatalogo = *argv;
			 argc--;argv++;
			 continue;
		  }

		if (!strcmp(*argv,"-p"))   /* server port */
		  {
			 argc--;argv++;
			 if (!argc)
				ExitUsage("specificare port o service");
			 if ((serverPort = atoi(*argv)) == 0)
				serverService = *argv;
			 argc--;argv++;
			 continue;
		  }

		if ((c = strstr(*argv,":")) != 0)     /* peer hostname:port */
		  {
			 *c++ = 0;
			 if (AddRemoteHost(*argv,c)==ERROR)
				ExitUsage("numero host eccessivo");
			 argc--;argv++;
			 continue;
		  }
		ExitUsage("parametro errato");
	 }

  if (!FileCatalogo)              FileCatalogo    = "catalogo.txt";
  if (!Biblio)                            Biblio                  = "localhost";
}


/*
************************************************************************
*
*   main server
*
************************************************************************
*/


int  main( int argc, char* argv[] )
{
  ParseArgs(argc,argv);
  Initialize();
  Server();
  CleanUp();
  exit(0);
  return 0;
}