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