Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Elenco Telefonico Remoto - Server.c

Server.c

Caricato da:
Scarica il programma completo

  1. /* Server.c */
  2.  
  3. #include "macro.h"
  4. #include "manutenzione.h"
  5. #include "startServer.h"
  6. #include "funzioniServer.h"
  7.  
  8. void stampaMenu(){
  9.  
  10.         /* Stampo il menù principale del server (in formato colorato) */
  11.  
  12.         printf("\033[01;34m---------------------------------\n");fflush(stdout);
  13.         printf("-----------\033[00;34mMENU SERVER\033[01;34m-----------\n");fflush(stdout);
  14.         printf("---------------------------------\033[00m\n\n");fflush(stdout);
  15.         printf("\033[01;33m     1. Manutenzione\033[00m\n");fflush(stdout);
  16.         printf("\033[00;33m     2. Avvia server\033[00m\n");fflush(stdout);
  17.         printf("\n");fflush(stdout);
  18.         printf("        3. ESCI\n");fflush(stdout);
  19.         printf("\n\033[01;34m---------------------------------\n");fflush(stdout);
  20.         printf("---------------------------------");fflush(stdout);
  21.         printf("\n---------------------------------\033[00m\n");fflush(stdout);
  22. }
  23.  
  24. int modalita(){
  25.  
  26.         int modalita;
  27.         int testscanf;
  28.        
  29.         /* Stampo il menù principale del server */
  30.         stampaMenu();
  31.  
  32.         printf("\033[01;32mSelezionare l'opzione...\033[00m\n");fflush(stdout);
  33.        
  34.         /* Seleziono l'opzione desiderata scartando quelle "illegali" */
  35.         do{    
  36.                 testscanf = scanf("%d", &modalita);
  37.                 while(-1 == testscanf){
  38.                         if(errno != EINTR){
  39.                                 printf("\nErrore scanf\n");
  40.                                 chiusuraServer();
  41.                         }
  42.                         else{
  43.                                 testscanf = scanf("%d", &modalita);
  44.                         }
  45.                 }
  46.                 if(testscanf == 0 || modalita>3 || modalita<1){ // Ho scelto un'opzione "illegale"
  47.                         while(scanf("%*[^\n]") == -1){ // Svuoto l'input buffer
  48.                                 if(errno != EINTR){
  49.                                         printf("\nErrore scanf\n");
  50.                                         chiusuraServer();
  51.                                 }
  52.                         }
  53.                         printf("Opzione non valida...\n");fflush(stdout);
  54.                         printf("Selezionare l'opzione...\n\n");fflush(stdout);
  55.                         stampaMenu();
  56.                 }
  57.         } while(testscanf == 0 || modalita>3 || modalita<1);
  58.        
  59.         /* Ritorno il valore dell'opzione selezionata*/
  60.         return modalita;
  61. }
  62.  
  63. void inizializzazione(){
  64.  
  65.         printf("\nInizializzazione server in corso...\n\n");fflush(stdout);
  66.  
  67.         /* Testo l'apertura del file ElencoTelefonico.txt in lettura */
  68.         if(( ElencoTelefonico = fopen("ElencoTelefonico.txt", "r")) == NULL){
  69.                 printf("Non è possibile aprire l'elenco telefonico, verificare la consistenza dell'archivio\n\n");fflush(stdout);
  70.                 chiusuraServer();
  71.         }
  72.         else{
  73.                 printf("Apertura elenco telefonico avvenuta con successo...\n");fflush(stdout);
  74.         }
  75.         while(fclose(ElencoTelefonico) != 0){
  76.                 if(errno != EINTR){
  77.                         printf("\nErrore fclose\n");
  78.                         chiusuraServer();
  79.                 }
  80.         }
  81.        
  82.         /* Testo l'apertura del file Permessi.txt in lettura */
  83.         if(( Permessi = fopen("Permessi.txt", "r")) == NULL){
  84.                 printf("Non è possibile aprire l'elenco utenti, verificare la consistenza dell'archivio\n\n");fflush(stdout);
  85.                 chiusuraServer();
  86.         }
  87.         else{
  88.                 printf("Apertura elenco utenti avvenuta con successo...\n\n");fflush(stdout);
  89.         }
  90.         while(fclose(Permessi) != 0){
  91.                 if(errno != EINTR){
  92.                         printf("\nErrore fclose\n");
  93.                         chiusuraServer();
  94.                 }
  95.         }
  96. }
  97.  
  98. int main(int argc, char** argv){
  99.  
  100.         if(argc != 3){
  101.                 printf("\033[01;31m\nERRORE - Avviare il programma usando il comando: \033[00m%s [Indirizzo IP] [Porta]", argv[0]);fflush(stdout);
  102.                 chiusuraServer();
  103.         }
  104.         else{
  105.  
  106.                 /* Imposto la gestione dei segnali asincroni */
  107.                 signal(SIGINT, chiusuraServer);
  108.                 signal(SIGQUIT, chiusuraServer);
  109.                 signal(SIGILL, chiusuraServer);
  110.                 signal(SIGSEGV, chiusuraServer);
  111.                 signal(SIGTERM, chiusuraServer);
  112.  
  113.                 /* Ignoro il segnale SIGPIPE */
  114.                 signal(SIGPIPE, SIG_IGN);
  115.  
  116.                 /* Eseguo il test degli archivi */
  117.                 inizializzazione();
  118.  
  119.                 int opzione;
  120.                
  121.                 while(1){
  122.                         /* Seleziono l'opzione dal menù principale*/
  123.                         opzione = modalita();
  124.  
  125.                         /* Chiamo la funzione specifica per l'opzione selezionata */
  126.                         if(opzione==1) manutenzioneMain();
  127.                         if(opzione==2) startServer(argv);
  128.                         if(opzione==3) chiusuraServer();
  129.                 }
  130.         }
  131. }