#include 
#include 
#include 
#include 
#include 
#include 

#define MAX_ENTRIES 10

struct arquivo {
        int a_hora;
        unsigned int a_inte;
        unsigned long int a_status;
        unsigned long int a_in_octets ;
        unsigned long int a_in_descar ;
        unsigned long int a_in_erros  ;
        unsigned long int a_out_octets ;
        unsigned long int a_out_descar ;
        unsigned long int a_out_erros ;
        unsigned int mail_trafe ;
        unsigned int mail_erros ;
        unsigned int mail_status;
        } arq;
        
    unsigned char arq_mesant[6] ;
    
struct mensagem {
        int men_hora ;
        int men_codigo ;
       } mens ;

typedef struct {
    char *name;
    char *val;
} entry;

char *makeword(char *line, char stop);
char *fmakeword(FILE *f, char stop, int *len);
char x2c(char *what);
void unescape_url(char *url);
void plustospace(char *str);
struct tm *ldia;

main(int argc, char *argv[]) {
    entry entries[MAX_ENTRIES];
    register int x,m=0;
    int cl;
    FILE *fp,*fp1;
    unsigned long int as1_hora;
    unsigned long int as1_1_in_octets;
    unsigned long int as1_1_out_octets;
    unsigned long int as1_1_in_disc ;
    unsigned long int as1_1_in_erros ;
    unsigned long int as1_1_out_disc ;
    unsigned long int as1_1_out_erros ;
    unsigned long int as1_2_in_octets;
    unsigned long int as1_2_out_octets;
    unsigned long int as1_2_in_disc ;
    unsigned long int as1_2_in_erros ;
    unsigned long int as1_2_out_disc ;
    unsigned long int as1_2_out_erros ;
    unsigned long int as2_hora;
    unsigned long int as2_1_in_octets;
    unsigned long int as2_1_out_octets;
    unsigned long int as2_1_in_disc ;
    unsigned long int as2_1_in_erros ;
    unsigned long int as2_1_out_disc ;
    unsigned long int as2_1_out_erros ; 
    unsigned long int as2_2_in_octets;
    unsigned long int as2_2_out_octets;
    unsigned long int as2_2_in_disc ;
    unsigned long int as2_2_in_erros ;
    unsigned long int as2_2_out_disc ;
    unsigned long int as2_2_out_erros ;
    unsigned long int as_val1;
    unsigned long int as_val2;
    double as_val3;
    double as_val4;
    double as_val5;
    double as_val6;
    char diretorio1[46];
    char diretorio2[50];
    char mes[4] ;
    char nome_arq1[6];
    char nome_arq2[10];
    int dia; 
    int wcont ;
    as1_hora = 0;
    as1_1_in_octets = 0;
    as1_1_out_octets = 0;
    as1_2_in_octets = 0;
    as1_2_out_octets = 0;
    as2_hora = 0;
    as2_1_in_octets = 0;
    as2_1_out_octets = 0;
    as2_2_in_octets = 0;
    as2_2_out_octets = 0;
    
    strcpy(diretorio1,"/internet/celepar/bonato/mestrado/teste/");
    strcpy(diretorio2,"/internet/celepar/bonato/mestrado/teste/");
    diretorio1[45] = '\0';   
    diretorio2[49] = '\0';
    printf("Content-type: text/html%c%c",10,10);
    cl = atoi(getenv("CONTENT_LENGTH"));
    for(x=0;cl && (!feof(stdin));x++) {
        m=x;
        entries[x].val = fmakeword(stdin,'&',&cl);
        plustospace(entries[x].val);
        unescape_url(entries[x].val);
        entries[x].name = makeword(entries[x].val,'=');
        }
    mes[0] = entries[0].val[0] ;
    mes[1] = entries[0].val[1] ;
    mes[2] = entries[0].val[2] ;
    mes[3] = '\0' ;
      
    dia = atoi(entries[1].val) ;
    if (strcmp(mes,"Jan")==0 || strcmp(mes,"Fev")==0 ||
        strcmp(mes,"Mar")==0 || strcmp(mes,"Abr")==0 || 
        strcmp(mes,"Mai")==0 || strcmp(mes,"Jun")==0 || 
        strcmp(mes,"Jul")==0 || strcmp(mes,"Ago")==0 ||
        strcmp(mes,"Set")==0 || strcmp(mes,"Out")==0 ||
        strcmp(mes,"Nov")==0 || strcmp(mes,"Dez")==0) 
        {
        if(strcmp(mes,"Fev")==0)
           mes[2] = 'b';
        if(strcmp(mes,"Abr")==0)
           mes[1] = 'p';
        if(strcmp(mes,"Mai")==0)
           mes[2] = 'y';
        if(strcmp(mes,"Ago")==0)
           {
           mes[1] = 'u';
           mes[2] = 'g';
           }
        if(strcmp(mes,"Set")==0)
           mes[2] = 'p';
        if(strcmp(mes,"Out")==0)
           mes[1] = 'c';
        if(strcmp(mes,"Dez")==0)
           mes[2] = 'c';
        }
    else
        {
        printf("

Informar o mes corretamente
"); printf("

Os meses devem ser informados com a primeira letra maiuscula "); printf("e as demais letras em minusculo, como segue exemplo abaixo. "); printf("

Jan ; Fev ; Mar ; Abr ; Mai ; Jun ; Jul ; Ago ; Set ; Out ; Nov ou Dez"); exit(1) ; } if((strcmp(mes,"Jan")==0 || strcmp(mes,"Mar")==0 || strcmp(mes,"May")==0 || strcmp(mes,"Jul")==0 || strcmp(mes,"Aug")==0 || strcmp(mes,"Oct")==0 || strcmp(mes,"Dec")==0) && (dia < 1 || dia > 31)) { printf("

Informar o dia corretamente
"); exit(1) ; } if((strcmp(mes,"Apr")==0 || strcmp(mes,"Jun")==0 || strcmp(mes,"Sep")==0 || strcmp(mes,"Nov")==0) && (dia < 1 || dia > 30)) { printf("

Informar o dia corretamente
"); exit(1) ; } if(strcmp(mes,"Feb")==0 && (dia < 1 || dia > 29)) { printf("

Informar o dia corretamente
"); exit(1) ; } nome_arq1[0] = mes[0] ; nome_arq1[1] = mes[1] ; nome_arq1[2] = mes[2] ; nome_arq1[3] = entries[1].val[0] ; nome_arq1[4] = entries[1].val[1] ; nome_arq1[5] = '\0'; nome_arq2[0] = mes[0] ; nome_arq2[1] = mes[1] ; nome_arq2[2] = mes[2] ; nome_arq2[3] = entries[1].val[0] ; nome_arq2[4] = entries[1].val[1] ; nome_arq2[5] = 'm'; nome_arq2[6] = 'e'; nome_arq2[7] = 'n'; nome_arq2[8] = 's'; nome_arq2[9] = '\0'; strcat(diretorio1,nome_arq1); strcat(diretorio2,nome_arq2); if ((fp=fopen(diretorio1,"rb"))==NULL) { printf("

Problemas com a abertura do arquivo de log ...."); printf("

A causa provavel e que nao existem informacoes para o "); printf("
Dia e Mes especificado ."); exit(1); } if ((fp1=fopen(diretorio2,"rb"))==NULL) { printf("

Problemas com a abertura do arquivo de log ...."); printf("

A causa provavel e que nao existem informacoes para o "); printf("
Dia e Mes especificado ."); exit(1); } printf("

ESTATISTICA DO USO DAS INTERFACES DO ROTEADOR
"); printf("

200.6.40.99 curitiba.celepar.br

"); printf("
"); for(;;) { if (fread(&arq,sizeof(struct arquivo),1,fp)!=1) break; if(as1_1_in_octets == 0) { as1_hora = arq.a_hora; as1_1_in_octets = arq.a_in_octets; as1_1_out_octets = arq.a_out_octets; as1_1_in_disc = arq.a_in_descar ; as1_1_in_erros = arq.a_in_erros; as1_1_out_disc = arq.a_out_descar; as1_1_out_erros = arq.a_out_erros; } else { if(as1_2_in_octets == 0) { as1_2_in_octets = arq.a_in_octets; as1_2_out_octets = arq.a_out_octets; as1_2_in_disc = arq.a_in_descar ; as1_2_in_erros = arq.a_in_erros; as1_2_out_disc = arq.a_out_descar; as1_2_out_erros = arq.a_out_erros; } else { if(as2_1_in_octets == 0) { as2_hora = arq.a_hora; as2_1_in_octets = arq.a_in_octets; as2_1_out_octets = arq.a_out_octets; as2_1_in_disc = arq.a_in_descar ; as2_1_in_erros = arq.a_in_erros; as2_1_out_disc = arq.a_out_descar; as2_1_out_erros = arq.a_out_erros; } else { as2_2_in_octets = arq.a_in_octets; as2_2_out_octets = arq.a_out_octets; as2_2_in_disc = arq.a_in_descar ; as2_2_in_erros = arq.a_in_erros; as2_2_out_disc = arq.a_out_descar; as2_2_out_erros = arq.a_out_erros; } } } if (as2_2_out_octets != 0) { if (as2_1_in_octets < as1_1_in_octets) as_val1 = ((4294967295 - as1_1_in_octets) + as2_1_in_octets) ; else as_val1 = (as2_1_in_octets - as1_1_in_octets) ; if (as2_1_out_octets < as1_1_out_octets) as_val2 = ((4294967295 - as1_1_out_octets) + as2_1_out_octets) ; else as_val2 = (as2_1_out_octets - as1_1_out_octets) ; as_val3 = as_val1 + as_val2 ; as_val3 = as_val3 / 3600 ; as_val3 = as_val3 * 8 ; as_val3 = as_val3 / 100000; if (as2_2_in_octets < as1_2_in_octets) as_val1 = ((4294967295 - as1_2_in_octets) + as2_2_in_octets) ; else as_val1 = (as2_2_in_octets - as1_2_in_octets) ; if (as2_2_out_octets < as1_2_out_octets) as_val2 = ((4294967295 - as1_2_out_octets) + as2_2_out_octets) ; else as_val2 = (as2_2_out_octets - as1_2_out_octets) ; as_val4 = as_val1 + as_val2; as_val4 = as_val4 / 3600 ; as_val4 = as_val4 * 8; as_val4 = as_val4 / 2560; if (as2_1_in_disc < as1_1_in_disc) as_val1 = ((4294967295 - as1_1_in_disc) + as2_1_in_disc) ; else as_val1 = (as2_1_in_disc - as1_1_in_disc) ; if (as2_1_out_disc < as1_1_out_disc) as_val2 = ((4294967295 - as1_1_out_disc) + as2_1_out_disc) ; else as_val2 = (as2_1_out_disc - as1_1_out_disc) ; as_val5 = as_val1 + as_val2; if (as2_1_in_erros < as1_1_in_erros) as_val1 = ((4294967295 - as1_1_in_erros) + as2_1_in_erros) ; else as_val1 = (as2_1_in_erros - as1_1_in_erros) ; if (as2_1_out_erros < as1_1_out_erros) as_val2 = ((4294967295 - as1_1_out_erros) + as2_1_out_erros) ; else as_val2 = (as2_1_out_erros - as1_1_out_erros) ; as_val5 = as_val5 + as_val1 + as_val2; as_val5 = as_val5 * 100 ; as_val5 = as_val5 / 10000 ; if (as2_2_in_disc < as1_2_in_disc) as_val1 = ((4294967295 - as1_2_in_disc) + as2_2_in_disc) ; else as_val1 = (as2_2_in_disc - as1_2_in_disc) ; if (as2_2_out_disc < as1_2_out_disc) as_val2 = ((4294967295 - as1_2_out_disc) + as2_2_out_disc) ; else as_val2 = (as2_2_out_disc - as1_2_out_disc) ; as_val6 = as_val1 + as_val2; if (as2_2_in_erros < as1_2_in_erros) as_val1 = ((4294967295 - as1_2_in_erros) + as2_2_in_erros) ; else as_val1 = (as2_2_in_erros - as1_2_in_erros) ; if (as2_2_out_erros < as1_2_out_erros) as_val2 = ((4294967295 - as1_2_out_erros) + as2_2_out_erros) ; else as_val2 = (as2_2_out_erros - as1_2_out_erros) ; as_val6 = as_val6 + as_val1 + as_val2; as_val6 = as_val6 * 100 ; as_val6 = as_val6 / 10000 ; printf("
Hora Inicial %d:00 Hora Final %d:00",as1_hora,as2_hora); printf("
Percentual de utilizacao da Interface Local do Roteador (10 Mbps) : %.3f ",as_val3); printf("
Percentual de erros na Interface Local (10 Mbps) %.3f ",as_val5); printf("
Percentual de utilizacao da Interface Remota do Roteador (256 Kbps) : %.3f ",as_val4); printf("
Percentual de erros na Interface Remota (256 Kbps) %.3f ",as_val6); printf("
"); as1_hora = as2_hora ; as1_1_in_octets = as2_1_in_octets ; as1_1_in_disc = as2_1_in_disc; as1_1_in_erros = as2_1_in_erros; as1_1_out_disc = as2_1_out_disc; as1_1_out_erros = as2_1_out_erros; as1_1_out_octets = as2_1_out_octets ; as1_2_in_octets = as2_2_in_octets ; as1_2_out_octets = as2_2_out_octets ; as1_2_in_erros = as2_2_in_erros; as1_2_in_disc = as2_2_in_disc; as1_2_out_disc = as2_2_out_disc; as1_2_out_erros = as2_2_out_erros; as2_hora = 0 ; as2_1_in_octets = 0; as2_1_out_octets = 0; as2_1_in_erros = 0; as2_1_in_disc = 0; as2_1_out_erros = 0; as2_1_out_disc = 0; as2_2_in_octets = 0; as2_2_out_octets = 0; as2_2_in_erros = 0; as2_2_in_disc = 0; as2_2_out_erros = 0; as2_2_out_disc = 0; } } printf("

MENSAGENS DE ALERTA QUE FORAM ENVIDAS PARA O GERENTE

"); printf("
"); wcont = 0; for(;;) { if(fread(&mens,sizeof(struct mensagem),1,fp1)!=1) break; if(mens.men_codigo == 1) { wcont++; printf("
Hora %lu:00 - Trafego na interface Local (10 Mbps) do Roteador excedendo 50%.",mens.men_hora); printf("
"); } else if(mens.men_codigo == 2) { wcont++; printf("
Hora %lu:00 - Trafego na interface Remota (256 Kpbs) do Roteador excedendo 80%.",mens.men_hora); printf("
"); } else if(mens.men_codigo == 3) { wcont++; printf("
Hora %lu:00 - Interface Local (10 Mpbs) do Roteador esta DOWN.",mens.men_hora); printf("
"); } else if(mens.men_codigo == 4) { wcont++; printf("
Hora %lu:00 - Interface Remota (256 Kpbs) do Roteador esta DOWN.",mens.men_hora); printf("
"); } else if(mens.men_codigo == 5) { wcont++; printf("
Hora %lu:00 - Interface Local (10 Mpbs) do Roteador esta com excesso de erros.",mens.men_hora); printf("
"); } else if(mens.men_codigo == 6) { wcont++; printf("
Hora %lu:00 - Interface Remota (256 Kbps) do Roteador esta com excesso de erros.",mens.men_hora); printf("
"); } } if (wcont == 0) { printf("

Nao foi mandado nenhuma mensagem de aviso para o "); printf("Gerente, pois, nada de errado ocorreu."); printf("


"); } printf("

"); printf("

Marco Aurélio Bonato e Douglas Joé Peixoto de Azevedo"); printf("
Disciplina de Gerjncia de Redes - Professora Liane Tarouco
"); }