/* funzioniClient.c */
#include "macro.h"
#include "funzioniClient.h"
int trovaRecord(int sock){
/* Invio al server il tipo di servizio desiderato */
while(write(sock, "TROVA", RISPOSTA) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
Record record, risultato;
/* Resetto i valori della struct record */
memset(record.nome, 0, sizeof(record.nome));
memset(record.cognome, 0, sizeof(record.cognome));
memset(record.numeroTelefono, 0, sizeof(record.numeroTelefono));
/* Resetto i valori della struct risultato */
memset(risultato.nome, 0, sizeof(risultato.nome));
memset(risultato.cognome, 0, sizeof(risultato.cognome));
memset(risultato.numeroTelefono, 0, sizeof(risultato.numeroTelefono));
/* Digito il nome da cercare */
printf("\nInserisci nome e premi INVIO ");fflush
(stdout
);
while(scanf("%s", record.nome) == -1){
if(errno != EINTR){
chiusuraClient();
}
}
/* Invio il nome al server */
while(write(sock, record.nome, strlen(record.nome)) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Digito il cognome da cercare */
printf("\nInserisci cognome e premi INVIO ");fflush
(stdout
);
while(scanf("%s", record.cognome) == -1){
if(errno != EINTR){
chiusuraClient();
}
}
/* Invio il cognome al server */
while(write(sock, record.cognome, strlen(record.cognome)) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Ricevo il nome-risultato dal server */
while(read(sock, risultato.nome, NOME) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Ricevo il cognome-risultato dal server */
while(read(sock, risultato.cognome, COGNOME) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Ricevo il numero-risultato dal server */
while(read(sock, risultato.numeroTelefono, NUMERO) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Il record cercato è inesistente */
if(strcmp(risultato.nome, "NULL") == 0){
printf("\nIl numero cercato è inesistente!\n");
premiInvio();
return 1;
}
else{
/* Stampo il record cercato */
printf("\n\n%-13s %-13s %s\n", "NOME", "COGNOME", "N. TEL");fflush
(stdout
);
printf("\n%-13s %-13s %s\n\n", risultato.
nome, risultato.
cognome, risultato.
numeroTelefono);fflush
(stdout
);
premiInvio();
return 1;
}
}
int aggiungiRecord(int sock){
/* Invio al server il tipo di servizio desiderato */
while(write(sock, "AGGIUNGI", RISPOSTA) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
char permessi[RISPOSTA];
/* Resetto il valore della stringa permessi */
memset(permessi, 0, strlen(permessi));
/* Ricevo il tipo di permesso dal server */
while(read(sock, permessi, RISPOSTA) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Ho i permessi sufficienti per questa operazione */
if(strcmp("NO", permessi) != 0){
Record record;
char risposta[RISPOSTA];
/* Resetto il valore della stringa risposta */
memset(risposta, 0, RISPOSTA);
/* Digito il nome da aggiungere */
printf("\nInserisci nome e premi INVIO ");fflush
(stdout
);
while(scanf("%s", record.nome) == -1){
if(errno != EINTR){
chiusuraClient();
}
}
/* Invio il nome al server */
while(write(sock, record.nome, NOME) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Digito il cognome da aggiungere */
printf("\nInserisci cognome e premi INVIO ");fflush
(stdout
);
while(scanf("%s", record.cognome) == -1){
if(errno != EINTR){
chiusuraClient();
}
}
/* Invio il cognome al server */
while(write(sock, record.cognome, COGNOME) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Digito il numero di telefono da aggiungere */
printf("\nInserisci numero di telefono e premi INVIO ");fflush
(stdout
);
while(scanf("%s", record.numeroTelefono) == -1){
if(errno != EINTR){
chiusuraClient();
}
}
/* Invio il numero di telefono al server */
while(write(sock, record.numeroTelefono, NUMERO) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Ricevo la risposta dal server */
while(read(sock, risposta, RISPOSTA) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Il record è già presente nell'archivio */
if(strcmp(risposta, "NO") == 0){
printf("\nTentativo fallito. Record già presente nell'archivio!\n");
premiInvio();
return 1;
}
/* Operazione conclusa con successo */
else{
printf("\nOperazione conclusa con successo!\n");
premiInvio();
return 1;
}
}
/* Non ho i permessi sufficienti per questa operazione */
else{
printf("\nPermessi non sufficienti per quest'operazione!\n");
premiInvio();
return 1;
}
}
int login(int sock){
int tentativi = 3;
printf("\n--------------\033[00;34mLOGIN\033[01;34m--------------\n");fflush
(stdout
);
Utente utente;
/* Resetto il valore della struct utente */
memset(utente.nickname, 0, sizeof(utente.nickname));
memset(utente.password, 0, sizeof(utente.password));
char risposta[RISPOSTA];
/* Resetto il valore della stringa risposta */
memset(risposta, 0, sizeof(risposta));
while(tentativi>0){
/* Digito il nickname e la password per il login */
printf("\nInserisci nickname: ");fflush
(stdout
);
while(scanf("%s", utente.nickname) == -1){
if(errno != EINTR){
chiusuraClient();
}
}
printf("\nInserisci password: ");fflush
(stdout
);
while(scanf("%s", utente.password) == -1){
if(errno != EINTR){
chiusuraClient();
}
}
printf("\n\nConnessione in corso...attendere...\n");
/* Ricevo il via libera dal server */
/* QUESTA READ PERMETTE L'ATTESA BLOCCANTE NEL CASO IN CUI PIÙ CLIENT SIANO CONNESSI AL SERVER */
while(read(sock, risposta, sizeof(risposta)) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
printf("Effettuata connessione al server\n");
/* Invio il nickname al server */
while(write(sock, utente.nickname, strlen(utente.nickname)) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Invio la password al server */
while(write(sock, utente.password, strlen(utente.password)) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Ricevo la risposta dal server */
while(read(sock, risposta, sizeof(risposta)) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush
(stdout
);
return -1;
}
else{
printf("La read è fallita\n");fflush
(stdout
);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush
(stdout
);
}
/* Login effettuato con successo */
if(strcmp(risposta, "OK") == 0){
printf("\nLogin effettuato con successo\n\n");
memset(risposta, 0, sizeof(risposta));
return 1;
}
/* Login errato, nuovo tentativo*/
if(strcmp(risposta, "NO") == 0){
printf("\nNickname o password ERRATI\n");
memset(risposta, 0, sizeof(risposta));
--tentativi;
if(tentativi == 2){
printf("Hai ancora %d tentativi di LOGIN\n", tentativi
);
}
if(tentativi == 1){
printf("Hai ancora %d tentativo di LOGIN\n", tentativi
);
}
premiInvio();
}
}
/* Login definitivamente fallito dopo 3 tentativi errati */
if(tentativi == 0){
printf("\nTentativo di LOGIN fallito\n");
chiusuraClient();
}
}
void premiInvio(){
printf("\nPremere INVIO per continuare...\n");
/* Svuoto l'input buffer */
while ( getchar() != '\n' );
/* Leggo dallo stdin SOLO \n */
while(scanf("%*[^\n]") == -1){
if(errno != EINTR){
chiusuraClient();
}
}
}
void chiusuraClient(){
printf("\033[00m\n\nCHIUSURA CLIENT IN CORSO...");fflush
(stdout
);
printf("\nCLIENT CHIUSO CORRETTAMENTE\n\n");fflush
(stdout
);
exit(0);
}