//scansioneLog2.c
#include <stdio.h>
#include <string.h>


int main()
{
   int len, i;
   int n_elem=0;
   int n_utenti=0;
   int n_php =0, n_htm =0, n_png =0, n_home =0;
   char c;
   float media;
   
   int ip1=-1, ip2=-1, ip3=-1, ip4=-1 ; //li inizializzo
   int t_ip1, t_ip2, t_ip3, t_ip4 ; // variabili d'appoggio
   char data[256];
   char operation[256];
   char page[256];

   char nomefile[]="t2.log";
   FILE * Fp1 ;

   // Apro il file in modalita' read il file di testo
   Fp1 = fopen(nomefile, "r");
   if (Fp1==NULL){
      printf("File %s not found\n", nomefile);  
      exit(-1); 
   }
   
   t_ip1 = ip1;
   t_ip2 = ip2;
   t_ip3 = ip3;
   t_ip4 = ip4;
   while ( fscanf(Fp1, "%d.", &ip1  ) > 0 )
   { 
      fscanf(Fp1, "%d.%d.%d",  &ip2, &ip3, &ip4 );
      fscanf(Fp1, " - - [%s +0200] %s", data , operation);
      fscanf(Fp1, " %s HTTP/1.1", page);
       
      printf(  "%d.%d.%d.%d \n", ip1, ip2, ip3, ip4 );
      printf(  "  data:      %s  \n", data  );
      printf(  "  operation: %s  \n", operation  );
      printf(  "  page:      %s  \n", page  );
       	
      /* a)  conta il numero di elementi che sono stati richiesti al server come 
             pagine, immagini, ecc... (cioč il numero di righe) ; 
      */   
      n_elem++; 
        
      /* b) conta il numero di 
            utenti connessi (successione semplice) nel modo seguente:
      159.149.67.22     Conta = 1 
      159.149.67.22     Conta = 1 (non e' cambiato dal precedente)
      159.149.67.22     Conta = 1 (non e' cambiato dal precedente)
      151.42.178.106    Conta = 2
      151.42.178.106    Conta = 2 (non e' cambiato dal precedente)
      151.42.178.106    Conta = 2 (non e' cambiato dal precedente)
      151.42.178.106    Conta = 2 (non e' cambiato dal precedente)
      159.149.67.22     Conta = 3 
      151.42.178.106    Conta = 4 
      159.149.67.22     Conta = 5 
      */
      if (t_ip1 != ip1 || t_ip2!= ip2 || t_ip3!= ip3 || t_ip4 != ip4)
         n_utenti ++;
 
      /* c) conta quante volte sono richieste nel file di log t2.log
         - le pagine php
         - le pagine htm o html
         - le immagini png
         - la pagina home /
      */
      len = strlen(page);
      if(len == 1 && page [0] == '/')
         n_home ++;
      for (i=0; i<len-3; i++)
      {  
       
         if (page[i]== '.' && page[i+1]== 'p' && page[i+2]== 'h' && page[i+3]== 'p')
         { 
            n_php++;
            break;
         }
         if (page[i]== '.' && page[i+1]== 'h' && page[i+2]== 't' && page[i+3]== 'm')
         { 
            n_htm++;
            break;
         }
         if (page[i]== '.' && page[i+1]== 'p' && page[i+2]== 'n' && page[i+3]== 'g')
         { 
            n_png++;
            break;
         }
      }
      // per adesso vado elegantemente fino in fondo alla riga.... ma non e' cosi'....
      while ( fscanf(Fp1, "%c", &c ) > 0 )
      {
         if (c ==  '\n' )  break;
            printf("%c" , c);
      }           
      printf( " \n\n\n" );
      t_ip1 = ip1;
      t_ip2 = ip2;
      t_ip3 = ip3;
      t_ip4 = ip4;
   }
   
   /* d) conta il numero medio di oggetti richiesti dagli utenti come il rapporto
    fra il numero di righe (calcolato al punto b) ed il numero di utenti 
    (calcolato al punto a)
   */
   
   media = (float) n_elem / n_utenti;
   
   printf("Numero di elementi richiesti al server: %d \n", n_elem);
   printf("Numero di utenti: %d \n", n_utenti);
   printf("Media di oggetti richiesti dagli utenti: %g \n", media);
   printf("Numero pagine php richieste: %d \n", n_php);
   printf("Numero pagine htm richieste: %d \n", n_htm);
   printf("Numero pagine png richieste: %d \n", n_png);
   printf("Numero pagine home richieste: %d \n", n_home);
   
   getchar();
   fflush (Fp1);
   fclose (Fp1);
   exit(0); 
}  // main