int login(int sock) {
int tentativi = 3;
printf("n----LOGIN----n");
Utente utente;memset(utente.nickname,0,sizeof(utente.nickname));
memset(utente.password,0,sizeof(utente.password));
char conferma[CONFERMA];
memset(conferma,0,sizeof(conferma));
while(tentativi > 0) {
//Acquisizione datiprintf("Inserisci nickname: %s", utente.nickname);
while(scanf("%s", utente.nickname) == -1){
if(errno != EINTR){
printf("nErrore scanfn");
chiudiClient();
} } char *pass = getpass("nInserisci la password: "); //La password viene nascosta
strcpy(utente.password,pass);
printf("n");
//Invio datiwhile(write(sock, utente.nickname, sizeof(utente.nickname))
int login(int sock) {
int tentativi = 3;
printf("n----LOGIN----n");
Utente utente;memset(utente.nickname,0,sizeof(utente.nickname));
memset(utente.password,0,sizeof(utente.password));
char conferma[CONFERMA];
memset(conferma,0,sizeof(conferma));
while(tentativi > 0) {
//Acquisizione datiprintf("Inserisci nickname: %s", utente.nickname);
while(scanf("%s", utente.nickname) == -1){
if(errno != EINTR){
printf("nErrore scanfn");
chiudiClient();
} } char *pass = getpass("nInserisci la password: "); //La password viene nascosta
strcpy(utente.password,pass);
printf("n");
//Invio datiwhile(write(sock, utente.nickname, sizeof(utente.nickname)) < = 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("nErrore nella write di [nickname]: CONNESSIONE FALLITAn");
return -1;
}else{
printf("La write di [nickname] è fallitan");
return -1;
} }printf("Errore system call write [nickname]n");
}while(write(sock, utente.password, sizeof(utente.password)) < = 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("nErrore nella write di [password]: CONNESSIONE FALLITAn");
return -1;
}else{
printf("La write di [password] è fallitan");
return -1;
} }printf("Errore system call write [password]n");
} //Attendo la conferma e ricevo il permessowhile(read(sock, conferma, CONFERMA) < = 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("nErrore nella read di [conferma]: CONNESSIONE FALLITAn");
return -1;
}else{
printf("La read di [conferma] è fallitan");
return -1;
} }printf("Errore system call read [conferma]n");
}if(strcmp(conferma, "OK") == 0){
printf("nLogin effettuato con successon");
memset(conferma,0,sizeof(conferma));
//Ricevo il permessoint permesso;
read(sock,&permesso,4);
return permesso;
}if(strcmp(conferma, "NO") == 0){
memset(conferma,0,sizeof(conferma));
--tentativi;
if(tentativi == 2){
printf("nNickname o Password errati: Hai ancora 2 tentativi");
}if(tentativi == 1){
printf("nNickname o Password errati: Hai ancora 1 tentativo");
} } }if(tentativi == 0) {
printf("nLogin fallito, tentativi esauritin");
return -1;
}}int login(int sock) {
int tentativi = 3;
while(tentativi > 0) {
Utente utente;memset(utente.nickname,0,sizeof(utente.nickname));
memset(utente.password,0,sizeof(utente.password));
//Acquisizione datiwhile(read(sock, utente.nickname, NICKNAME) < = 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("nErrore nella read di [nickname]: CONNESSIONE FALLITAn");
return -1;
}else{
printf("La read di [nickname] è fallitan");
return -1;
} }printf("Errore system call read [nickname]n");
}while(read(sock, utente.password, PASSWORD) < = 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("nErrore nella read di [password]: CONNESSIONE FALLITAn");
return -1;
}else{
printf("La read di [password] è fallitan");
return -1;
} }printf("Errore system call read [password]n");
} //Cerco l'utenteUtente temp = cercaUtente(utente);
//Utente trovatoif((strcmp(utente.nickname, temp.nickname) == 0) && (strcmp(utente.password, temp.password) == 0)){
while(write(sock,"OK", CONFERMA) < = 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("nErrore nella write di [ok]: CONNESSIONE FALLITAn");
return -1;
}else{
printf("La write di [ok] è fallitan");
return -1;
} }printf("Errore system call write [ok]n");
}memset(utente.nickname, 0, sizeof(utente.nickname));
memset(utente.password, 0, sizeof(utente.password));
//Invio il permesso al clientint permesso = temp.permesso;
write(sock,&permesso,4);
return temp.permesso;
} //Utente non trovatoelse {
while(write(sock,"NO", CONFERMA) < = 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("nErrore nella write di [no]: CONNESSIONE FALLITAn");
return -1;
}else{
printf("La write di [no] è fallitan");
return -1;
} }printf("Errore system call write [no]n");
}--tentativi;
printf("nHai ancora %d tentativi a disposizionen", tentativi);
memset(utente.nickname, 0, sizeof(utente.nickname));
memset(utente.password, 0, sizeof(utente.password));
} }printf("nLogin fallito dopo 3 tentativin");
return -1;
}