Guest User

Untitled

a guest
Oct 12th, 2018
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.59 KB | None | 0 0
  1. //SERVER
  2. #include "listaMessaggi.h"
  3.  
  4. #include <unistd.h>
  5. #include <netdb.h>
  6. #include <string.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <fcntl.h>
  10. #include <signal.h>
  11.  
  12. #define MAX_DIM 1072
  13. #define CODA 3
  14. #define ERRORE(x) {puts(x);exit(-1);}
  15. int connessione=0;
  16. int ds_sock;
  17. int socketclient; // socket del client dove la connessione viene accettata
  18. char buff[MAX_DIM];
  19.  
  20. char buffUser[20];
  21. char buffPass[20];
  22. int username;  //username dell'utente momentaneamente connesso
  23. int password;  //password dell'utente momentaneamente connesso
  24. listaMessaggi *lista;
  25.  
  26. int autenticazione(char *user, char *pass){// funzione da rivedere
  27.     int ris=-1;
  28.     char temp[MAX_DIM];
  29.  
  30.     FILE *fileAutentic=fopen("autenticazione", "w");//file per salvare gli utenti rgistrati
  31.     if(fileAutentic==NULL)
  32.         ERRORE("errore nella fopen\n");
  33.        
  34.     char *userid;
  35.     int userID = fscanf(fileAutentic, "%s", &userid) {
  36.         if(userID==-1)
  37.             ERRORE("errore nella fscanf\n");
  38.     }
  39.     while(userID!=0){// userID!=0, quindi ha letto un user
  40.         if(strcmp(temp,user)==0){ // vede se l'user passato è presente nel file
  41.             char *passID;
  42.             int password = fscanf(fileAutentic, "%s", &passID) {
  43.                 if(password==-1)
  44.                     ERRORE("errore nella fscanf\n");
  45.             }
  46.             if(strcmp(temp,pass)==0){ // confronta le password
  47.                 ris=0;// sono uguali, quindi l'utente già è presente; ris=0 e ha già  una sua lista messaggi
  48.             }
  49.         }
  50.     }
  51.     if(ris==-1){// l'utente non c'è, si deve iscrivere
  52.         int registraUser=fprintf(fileAutentic,"%s\n",user);
  53.         if(registraUser<0) ERRORE("errore nella read\n");
  54.         int registraPass=fprintf(fileAutentic,"%s\n",pass);
  55.         if(registraPass<0) ERRORE("errore nella read\n");
  56.         ris=1; //l'utente è si è appena registrato, non ha una sua lista messaggi, la si deve creare
  57.         lista=nuovaListaMess();
  58.     }  
  59.     int close=fclose(fileAutentic);
  60.     if (close < 0) ERRORE("errore nella fclose\n");
  61.     return ris;
  62. }
  63.  
  64. void funzione(){
  65.     int richiesta=recv (ds_sock,buff,MAX_DIM,0);
  66.     if(richiesta==-1) ERRORE("errore nella receive\n");  
  67.     if(strcmp(buff, '1')==0) leggiMess(lista);
  68.     if(strcmp(buff, '2')==0) salvaMessaggi(lista);
  69.     if(strcmp(buff, '3')==0) cancellaMessaggi(lista);
  70. }
  71.  
  72. void salvaMessaggi(listaMessaggi *lista){ // funzione da rivedere
  73.     //la lista viene creata nel momento in cui un utente si autentica.
  74.     messaggio *mess=lista->top;
  75.     char buffDest[20];
  76.     char buffMitt[20];
  77.     char buffOgg[30];
  78.     char buffTesto[1024];
  79.    
  80.     int destinatario=recv(socketclient,buffDest, sizeof(buffDest),0); // per sapere qual'è il destinatario
  81.     if(destinatario==-1) ERRORE("errore\n");
  82.    
  83.     int mittente=recv(socketclient,buffMitt, sizeof(buffMitt),0); // il mittente
  84.     if(mittente==-1) ERRORE("errore\n");
  85.  
  86.     int oggetto=recv(socketclient, buffOgg, sizeof(buffOgg),0); // oggetto
  87.     if(oggetto==-1) ERRORE("errore\n");
  88.        
  89.     int testo=recv(socketclient,buffTesto, sizeof(buffTesto),0);// testo
  90.     if(testo==-1) ERRORE("errore\n");
  91.    
  92.     if(strcmp(buffDest,mess->destinatario)==0) { //se il mess è per lui, ma non può essere lui xkè è lui che lo invia! come si fa?!?!?!?
  93.         inserisciMessaggio(lista,buffDest,buffMitt,buffOgg,buffTesto);        
  94.     }
  95.     else{ //il mess non è per lui, crea un altra lista con il nuovo destinatario
  96.         listaMessaggi *lista2=nuovaListaMess();
  97.         inserisciMessaggio(lista2,buffDest,buffMitt,buffOgg,buffTesto);
  98.     }
  99. }
  100. void cancellaMessaggi(listaMessaggi *lista){ //funzione che cancella
  101.     cancellaMessaggi(lista);
  102. }
  103.    
  104. void leggiMess(listaMessaggi *lista ){
  105.     char buff[MAX_DIM];
  106.     //richiesta di lettura di messaggi da parte del client
  107.      if(lista->top == NULL)
  108.         buff[0]=NULL;
  109.         send(socketclient, buff, MAX_DIM);
  110.     else{
  111.        
  112.         while(lista->top != NULL){
  113.             strcat( buff, lista->top->mittente );
  114.             strcat( buff, "\n" );
  115.             strcat( buff, lista->top->oggetto );
  116.             strcat( buff, "\n" );
  117.             strcat( buff, lista->top->testo );
  118.             send(socketclient,buff,MAX_DIM);   
  119.             lista->top = lista ->top->prossimoMess;
  120.         }
  121.     }
  122.    
  123. }
  124.  
  125.    
  126.  
  127. int main() {
  128.     struct sockaddr_in server;
  129.     struct sockaddr client;
  130.  
  131.     puts("###########################");
  132.     puts("# SCAMBIO MESSAGGI SERVER #");
  133.     puts("###########################");
  134.     puts("Avvio server....");
  135.     ds_sock = socket(AF_INET, SOCK_STREAM, 0);
  136.    
  137.     if (ds_sock < 0) {
  138.         ERRORE("errore nella creazione socket\n");
  139.     }
  140.     server.sin_family = AF_INET;
  141.     server.sin_port = htons(3000);
  142.    
  143.     server.sin_addr.s_addr= INADDR_ANY;
  144.  
  145.     signal(SIGINT, gestsignterm);
  146.     signal(SIGSTOP, gestsignterm);
  147.     signal(SIGHUP, gestsignterm);
  148.     signal(SIGQUIT, gestsignterm);
  149.     signal(SIGPIPE, gestsignbp);
  150.    
  151.     int k = bind(ds_sock, &server,sizeof(server));
  152.     if (k < 0) {
  153.         ERRORE("errore nella bind\n");
  154.     }
  155.     int e = listen(ds_sock, CODA);
  156.     if (e < 0) {
  157.         ERRORE("errore nella listen\n");
  158.     }
  159.     int length =sizeof(client);
  160.        
  161.     while(connessione=0) {
  162.         socketclient=accept(ds_sock, &client, length);
  163.         if (socketclient < 0) {
  164.         ERRORE("errore nella accept\n");
  165.        
  166.         }
  167.         connessione=1;
  168.     }
  169.     //prima deve partire l'autenticazione e ricevere user e pass
  170.     userArrivato=recv(socketclient, buffUser, sizeof(buffUser),0); // controllo degli errori
  171.     passArrivata=recv(socketclient, buffPass, sizeof(buffPass),0);
  172.     strcpy(username, buffUser[1]);
  173.     strcpy(password, buffPass[1]);
  174.     int ris=autenticazione(username, password);
  175.     if(ris>0)
  176.         funzione();
  177.     else ERRORE("non si è autenticato\n");
  178.     connessione=0;
  179.    
  180. }
  181. //gestione dei segnali
  182. void gestsignterm() {
  183.     puts("Terminazione Server...\n");
  184. }
  185. void gestsignbp() {
  186.     puts("Connessione terminata inaspettatamente dal client...\n");
  187. }
Add Comment
Please, Sign In to add comment