|  | @@ -5,10 +5,17 @@
 | 
											
												
													
														|  |   * Created on 14 novembre 2018
 |  |   * Created on 14 novembre 2018
 | 
											
												
													
														|  |   */
 |  |   */
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +#include <stdlib.h>
 | 
											
												
													
														|  | 
 |  | +#include <stdio.h>
 | 
											
												
													
														|  | 
 |  | +#include <unistd.h>
 | 
											
												
													
														|  | 
 |  | +#include <string.h>
 | 
											
												
													
														|  |  #include "error.h"
 |  |  #include "error.h"
 | 
											
												
													
														|  |  #include "server.h"
 |  |  #include "server.h"
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/* ---  Fonctions privées --- */
 |  | 
 | 
											
												
													
														|  | 
 |  | +/* --- Extern --- */
 | 
											
												
													
														|  | 
 |  | +extern int serrno;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +/* --- Fonctions privées --- */
 | 
											
												
													
														|  |  void server_bind_tcp(Server this, int port) {
 |  |  void server_bind_tcp(Server this, int port) {
 | 
											
												
													
														|  |      /* Declaration variable */
 |  |      /* Declaration variable */
 | 
											
												
													
														|  |      int tmp;
 |  |      int tmp;
 | 
											
										
											
												
													
														|  | @@ -20,14 +27,16 @@ void server_bind_tcp(Server this, int port) {
 | 
											
												
													
														|  |      tmp = bind(this->socket, (struct sockaddr*) &this->serv, sizeof (struct sockaddr_in));
 |  |      tmp = bind(this->socket, (struct sockaddr*) &this->serv, sizeof (struct sockaddr_in));
 | 
											
												
													
														|  |      if (tmp == ERR) {
 |  |      if (tmp == ERR) {
 | 
											
												
													
														|  |          free(this);
 |  |          free(this);
 | 
											
												
													
														|  | -        neterror(BIND_ERROR)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        serrno = SEBIND;
 | 
											
												
													
														|  | 
 |  | +        addperror("Impossible de bind la socket");
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /* Listen */
 |  |      /* Listen */
 | 
											
												
													
														|  |      tmp = listen(this->socket, SOMAXCONN);
 |  |      tmp = listen(this->socket, SOMAXCONN);
 | 
											
												
													
														|  |      if (tmp == ERR) {
 |  |      if (tmp == ERR) {
 | 
											
												
													
														|  |          free(this);
 |  |          free(this);
 | 
											
												
													
														|  | -        neterror(BIND_ERROR)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        serrno = SEBIND;
 | 
											
												
													
														|  | 
 |  | +        addperror("Impossible d'ecouter");
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -35,18 +44,20 @@ void server_accept_tcp(Server this) {
 | 
											
												
													
														|  |      /* Accept */
 |  |      /* Accept */
 | 
											
												
													
														|  |      this->socket_client = accept(this->socket, NULL, NULL);
 |  |      this->socket_client = accept(this->socket, NULL, NULL);
 | 
											
												
													
														|  |      if (this->socket_client == ERR) {
 |  |      if (this->socket_client == ERR) {
 | 
											
												
													
														|  | -        free(this);
 |  | 
 | 
											
												
													
														|  | -        syserror("Erreur lors de la demande de connexion ", 3)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        serrno = SEACCEPT;
 | 
											
												
													
														|  | 
 |  | +        addperror("Impossible d'accepter");
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  ssize_t server_receive_tcp(Server this, char* buf, size_t size) {
 |  |  ssize_t server_receive_tcp(Server this, char* buf, size_t size) {
 | 
											
												
													
														|  |      int tmp;
 |  |      int tmp;
 | 
											
												
													
														|  |      /* Lecture message */
 |  |      /* Lecture message */
 | 
											
												
													
														|  | 
 |  | +    memset(buf, 0, size);
 | 
											
												
													
														|  |      tmp = read(this->socket_client, buf, size);
 |  |      tmp = read(this->socket_client, buf, size);
 | 
											
												
													
														|  |      if (tmp == ERR) {
 |  |      if (tmp == ERR) {
 | 
											
												
													
														|  | -        free(this);
 |  | 
 | 
											
												
													
														|  | -        syserror("Erreur lors de la reception ", 3)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        serrno = SERECEIVE;
 | 
											
												
													
														|  | 
 |  | +        addperror("Impossible de récupèrer les données");
 | 
											
												
													
														|  | 
 |  | +        return ERR;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      return tmp;
 |  |      return tmp;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
										
											
												
													
														|  | @@ -56,8 +67,8 @@ void server_send_tcp(Server this, char* msg) {
 | 
											
												
													
														|  |      /* Envoi message */
 |  |      /* Envoi message */
 | 
											
												
													
														|  |      tmp = write(this->socket_client, msg, strlen(msg) * sizeof (char));
 |  |      tmp = write(this->socket_client, msg, strlen(msg) * sizeof (char));
 | 
											
												
													
														|  |      if (tmp == ERR) {
 |  |      if (tmp == ERR) {
 | 
											
												
													
														|  | -        free(this);
 |  | 
 | 
											
												
													
														|  | -        syserror("Erreur lors de l'envoi ", 3)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        serrno = SESEND;
 | 
											
												
													
														|  | 
 |  | +        addperror("Impossible d'envoyer les données");
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -72,7 +83,9 @@ Server server_create_tcp() {
 | 
											
												
													
														|  |      this->socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 |  |      this->socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 | 
											
												
													
														|  |      if (this->socket == ERR) {
 |  |      if (this->socket == ERR) {
 | 
											
												
													
														|  |          free(this);
 |  |          free(this);
 | 
											
												
													
														|  | -        neterror(SOCKET_ERROR)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        serrno = SESOCKET;
 | 
											
												
													
														|  | 
 |  | +        addperror("Impossible de créer la socket");
 | 
											
												
													
														|  | 
 |  | +        return NULL;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |      this->addr = sizeof (struct sockaddr_in);
 |  |      this->addr = sizeof (struct sockaddr_in);
 | 
											
												
													
														|  |      memset(&this->serv, 0, sizeof (struct sockaddr_in));
 |  |      memset(&this->serv, 0, sizeof (struct sockaddr_in));
 | 
											
										
											
												
													
														|  | @@ -82,7 +95,9 @@ Server server_create_tcp() {
 | 
											
												
													
														|  |      tmp = setsockopt(this->socket, SOL_SOCKET, SO_REUSEADDR, &option, sizeof (option));
 |  |      tmp = setsockopt(this->socket, SOL_SOCKET, SO_REUSEADDR, &option, sizeof (option));
 | 
											
												
													
														|  |      if (tmp == -1) {
 |  |      if (tmp == -1) {
 | 
											
												
													
														|  |          free(this);
 |  |          free(this);
 | 
											
												
													
														|  | -        neterror(SOCKET_ERROR)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        serrno = SESOCKET;
 | 
											
												
													
														|  | 
 |  | +        addperror("Impossible de modifier les options de la socket");
 | 
											
												
													
														|  | 
 |  | +        return NULL;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /* Lien fonctions */
 |  |      /* Lien fonctions */
 | 
											
										
											
												
													
														|  | @@ -99,18 +114,14 @@ Server server_create_tcp() {
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  void server_close_client(Server this) {
 |  |  void server_close_client(Server this) {
 | 
											
												
													
														|  | -    /* Declaration variable */
 |  | 
 | 
											
												
													
														|  | -    int tmp;
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      /* Que pour TCP */
 |  |      /* Que pour TCP */
 | 
											
												
													
														|  |      if (this->type != SERV_TCP) {
 |  |      if (this->type != SERV_TCP) {
 | 
											
												
													
														|  |          return;
 |  |          return;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  |      /* Ferme */
 |  |      /* Ferme */
 | 
											
												
													
														|  | -    tmp = close(this->socket_client);
 |  | 
 | 
											
												
													
														|  | -    if (tmp == ERR) {
 |  | 
 | 
											
												
													
														|  | -        free(this);
 |  | 
 | 
											
												
													
														|  | -        syserror("Erreur lors de la fermeture de la socket ", 3)
 |  | 
 | 
											
												
													
														|  | 
 |  | +    if (close(this->socket_client) == ERR) {
 | 
											
												
													
														|  | 
 |  | +        serrno = SECLOSE;
 | 
											
												
													
														|  | 
 |  | +        addperror("Impossible de fermer la socket");
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  }
 |  |  }
 |