From 1a2c5f60f3e15f360675b2c962f5aab22abdefd1 Mon Sep 17 00:00:00 2001 From: skhinach Date: Thu, 25 Apr 2019 20:10:10 +0200 Subject: [PATCH] Quelques modifs finales --- Network/sender.c | 8 ++++---- Network/sniffer.c | 2 +- Threads/Page.html | 10 ---------- Threads/threadSocket.c | 62 ++++++++++++++++++++++++++++++++++++++++---------------------- 4 files changed, 45 insertions(+), 37 deletions(-) delete mode 100755 Threads/Page.html diff --git a/Network/sender.c b/Network/sender.c index a6fd979..8c569a9 100755 --- a/Network/sender.c +++ b/Network/sender.c @@ -9,7 +9,7 @@ #include -int initializeSocketUDP(char* service) +int initializeSocketUDP(char* service, char* adresse) { int sock_id; struct addrinfo precisions, *resultat=NULL, *origine; // On stocke dans précisions nos besoins pour le socket, dans resultat l'adresse qui respectera les requêtes @@ -21,7 +21,7 @@ int initializeSocketUDP(char* service) //precisions.ai_flags = AI_PASSIVE; /*"172.26.145.35"*/ - if(getaddrinfo("192.168.1.66", service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); } + if(getaddrinfo(adresse, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); } int n=0; @@ -70,7 +70,7 @@ int sendUDPBroadcast(char* message, int port) char tmp_str[15]; sprintf(tmp_str, "%d", port); - int sock_id=initializeSocketUDP( tmp_str ); + int sock_id=initializeSocketUDP( tmp_str , "255.255.255.255"); printf("Initialize via Broadcast %d\n", sock_id); @@ -93,7 +93,7 @@ int sendUDPUnicast(char* address, char* message, int port) char tmp_str[15]; sprintf(tmp_str, "%d", port); - int sock_id=initializeSocketUDP( tmp_str ); + int sock_id=initializeSocketUDP( tmp_str , address); printf("Initialize via Unicast %d\n", sock_id); if(sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) &addrUDP, sizeof(addrUDP)) < 0 ) { fprintf(stderr, "Error sendto %d\n", errno); return(-1); } diff --git a/Network/sniffer.c b/Network/sniffer.c index c13afbb..631a041 100755 --- a/Network/sniffer.c +++ b/Network/sniffer.c @@ -31,7 +31,7 @@ void reponseSonde(time_t last_time, time_t seuil_temps) if(ecart > seuil_temps) { - sendUDPBroadcast(msg1,2020); + sendUDPUnicast("172.26.145.35", msg1, 2020); } else { diff --git a/Threads/Page.html b/Threads/Page.html deleted file mode 100755 index 3d538cb..0000000 --- a/Threads/Page.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Interface Tangible - - - - - diff --git a/Threads/threadSocket.c b/Threads/threadSocket.c index b683851..4a9fa43 100755 --- a/Threads/threadSocket.c +++ b/Threads/threadSocket.c @@ -13,20 +13,25 @@ #include "libthrd.h" -void vider_interfaces(struct interface_info* interfaces[20]) +void vider_interfaces(Arg_Thread* argument) { + pthread_mutex_lock(&(argument->requete_mutex)); // Section critique + for(int i=0; i<20; i++) { - if(interfaces[i]!=NULL) + if(argument->interfaces[i]!=NULL) { - free(interfaces[i]); - interfaces[i]=NULL; + free(argument->interfaces[i]); + argument->interfaces[i]=NULL; } } + + pthread_mutex_unlock(&(argument->requete_mutex)); // Libération de la section critique + } -int httpReponse(FILE* sockdial_stream, struct interface_info* interfaces[20]) +int httpReponse(FILE* sockdial_stream, Arg_Thread* argument) { char message[]={0x00,0x00}; @@ -34,9 +39,13 @@ int httpReponse(FILE* sockdial_stream, struct interface_info* interfaces[20]) struct PageWeb* page; - sleep(2); // Temps d'attente avant de recevoir les informations + sleep(10); // Temps d'attente avant de recevoir les informations - createPage(&page, interfaces); // Permet de creer la pageweb (http.c) + pthread_mutex_lock(&(argument->requete_mutex)); // Section critique + + createPage(&page, argument->interfaces); // Permet de creer la pageweb (http.c) + + pthread_mutex_unlock(&(argument->requete_mutex)); // Libération de la section critique char buffer[BUFF_SIZE]; // Le buffer de message pour l'emission // char buff_rec[BUFF_SIZE]; // Le buffer de message à la reception @@ -57,26 +66,30 @@ int httpReponse(FILE* sockdial_stream, struct interface_info* interfaces[20]) -int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], struct interface_info* interfaces[20], char adresse[20]) +int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], Arg_Thread* argument, char adresse[20]) { printf("Interface : %x %x - Adresse : %s - Taille : %ld\n", packet[0], packet[1], adresse, strlen(packet)); char buffer[BUFF_SIZE]; + // On lock le mutex car on rentre dans la section critique (modification de la structure interfaces) + + pthread_mutex_lock(&(argument->requete_mutex)); + int i=0; - while(interfaces[i]!=NULL && strcmp(adresse,interfaces[i]->adresse)!=0) + while(argument->interfaces[i]!=NULL && strcmp(adresse, argument->interfaces[i]->adresse)!=0) { i++; } - if(interfaces[0]!=NULL) + if(argument->interfaces[0]!=NULL) printf("Il y a %d associations\n", i+1); else printf("Il n'y aucune association\n"); - if(interfaces[i]!=NULL) - interfaces[i]->status=-1; + if(argument->interfaces[i]!=NULL) + argument->interfaces[i]->status=-1; if(packet[0]==0x20 && (packet[1]==0x01 || packet[1]==0x00) ) @@ -84,21 +97,24 @@ int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], struct inter //L'interface a correctement répondu, on la rajoute à la liste des interfaces printf("L'interface a correctement répondu\n"); - if(interfaces[i]==NULL) + if(argument->interfaces[i]==NULL) { - interfaces[i]=malloc(sizeof(struct interface_info)); - strcpy(interfaces[i]->adresse, adresse); + argument->interfaces[i]=malloc(sizeof(struct interface_info)); + strcpy(argument->interfaces[i]->adresse, adresse); } if(packet[1]==0x01) - interfaces[i]->status=1; + argument->interfaces[i]->status=1; else - interfaces[i]->status=0; + argument->interfaces[i]->status=0; } else { // L'interface n a pas correctement répondu + + pthread_mutex_unlock(&(argument->requete_mutex)); // Libération de la section critique printf("L'interface n'a pas correctement répondu\n"); + return -1; } @@ -121,6 +137,9 @@ int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], struct inter } */ + + pthread_mutex_unlock(&(argument->requete_mutex)); // Libération de la section critique + return 0; } @@ -144,13 +163,13 @@ void* reponseConnexion(void* arg_sock_interf) printf("Le message reçu : %s\n", buff_rec); - //pthread_mutex_lock(&(argument->requete_mutex)); + //Distingue la requête HTTP... if(strstr(buff_rec, "GET")!=NULL && strstr(buff_rec, "HTTP")!=NULL) { - vider_interfaces(argument->interfaces); - httpReponse(sockdial_stream, argument->interfaces); + vider_interfaces(argument); + httpReponse(sockdial_stream, argument); } else //.. d'une requête interface { @@ -160,11 +179,10 @@ void* reponseConnexion(void* arg_sock_interf) { char adresse[20]; sprintf(adresse, "%s", inet_ntoa(((struct sockaddr_in*)&tmp_addr)->sin_addr)); - interfaceReponse(sockdial_stream, buff_rec, argument->interfaces, adresse); + interfaceReponse(sockdial_stream, buff_rec, argument, adresse); } } - //pthread_mutex_unlock(&(argument->requete_mutex)); printf("Sock : %d // Stream : %p \n", sock, sockdial_stream); -- libgit2 0.21.2