/*********************************************************/
/* 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;
}