Commit 1a2c5f60f3e15f360675b2c962f5aab22abdefd1

Authored by skhinach
1 parent 5940bf6e

Quelques modifs finales

@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 #include <errno.h> 9 #include <errno.h>
10 10
11 11
12 -int initializeSocketUDP(char* service) 12 +int initializeSocketUDP(char* service, char* adresse)
13 { 13 {
14 int sock_id; 14 int sock_id;
15 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 15 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) @@ -21,7 +21,7 @@ int initializeSocketUDP(char* service)
21 //precisions.ai_flags = AI_PASSIVE; 21 //precisions.ai_flags = AI_PASSIVE;
22 22
23 /*"172.26.145.35"*/ 23 /*"172.26.145.35"*/
24 - if(getaddrinfo("192.168.1.66", service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); } 24 + if(getaddrinfo(adresse, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); }
25 25
26 int n=0; 26 int n=0;
27 27
@@ -70,7 +70,7 @@ int sendUDPBroadcast(char* message, int port) @@ -70,7 +70,7 @@ int sendUDPBroadcast(char* message, int port)
70 70
71 char tmp_str[15]; 71 char tmp_str[15];
72 sprintf(tmp_str, "%d", port); 72 sprintf(tmp_str, "%d", port);
73 - int sock_id=initializeSocketUDP( tmp_str ); 73 + int sock_id=initializeSocketUDP( tmp_str , "255.255.255.255");
74 74
75 printf("Initialize via Broadcast %d\n", sock_id); 75 printf("Initialize via Broadcast %d\n", sock_id);
76 76
@@ -93,7 +93,7 @@ int sendUDPUnicast(char* address, char* message, int port) @@ -93,7 +93,7 @@ int sendUDPUnicast(char* address, char* message, int port)
93 93
94 char tmp_str[15]; 94 char tmp_str[15];
95 sprintf(tmp_str, "%d", port); 95 sprintf(tmp_str, "%d", port);
96 - int sock_id=initializeSocketUDP( tmp_str ); 96 + int sock_id=initializeSocketUDP( tmp_str , address);
97 printf("Initialize via Unicast %d\n", sock_id); 97 printf("Initialize via Unicast %d\n", sock_id);
98 98
99 if(sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) &addrUDP, sizeof(addrUDP)) < 0 ) { fprintf(stderr, "Error sendto %d\n", errno); return(-1); } 99 if(sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) &addrUDP, sizeof(addrUDP)) < 0 ) { fprintf(stderr, "Error sendto %d\n", errno); return(-1); }
@@ -31,7 +31,7 @@ void reponseSonde(time_t last_time, time_t seuil_temps) @@ -31,7 +31,7 @@ void reponseSonde(time_t last_time, time_t seuil_temps)
31 31
32 if(ecart > seuil_temps) 32 if(ecart > seuil_temps)
33 { 33 {
34 - sendUDPBroadcast(msg1,2020); 34 + sendUDPUnicast("172.26.145.35", msg1, 2020);
35 } 35 }
36 else 36 else
37 { 37 {
Threads/Page.html deleted
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -<!doctype html>  
2 -<html>  
3 - <head>  
4 - <meta charset ="utf-8">  
5 - <title> Interface Tangible </title>  
6 - </meta>  
7 - </head>  
8 - <body>  
9 - </body>  
10 -</html>  
Threads/threadSocket.c
@@ -13,20 +13,25 @@ @@ -13,20 +13,25 @@
13 #include "libthrd.h" 13 #include "libthrd.h"
14 14
15 15
16 -void vider_interfaces(struct interface_info* interfaces[20]) 16 +void vider_interfaces(Arg_Thread* argument)
17 { 17 {
  18 + pthread_mutex_lock(&(argument->requete_mutex)); // Section critique
  19 +
18 for(int i=0; i<20; i++) 20 for(int i=0; i<20; i++)
19 { 21 {
20 - if(interfaces[i]!=NULL) 22 + if(argument->interfaces[i]!=NULL)
21 { 23 {
22 - free(interfaces[i]);  
23 - interfaces[i]=NULL; 24 + free(argument->interfaces[i]);
  25 + argument->interfaces[i]=NULL;
24 } 26 }
25 } 27 }
  28 +
  29 + pthread_mutex_unlock(&(argument->requete_mutex)); // Libération de la section critique
  30 +
26 } 31 }
27 32
28 33
29 -int httpReponse(FILE* sockdial_stream, struct interface_info* interfaces[20]) 34 +int httpReponse(FILE* sockdial_stream, Arg_Thread* argument)
30 { 35 {
31 char message[]={0x00,0x00}; 36 char message[]={0x00,0x00};
32 37
@@ -34,9 +39,13 @@ int httpReponse(FILE* sockdial_stream, struct interface_info* interfaces[20]) @@ -34,9 +39,13 @@ int httpReponse(FILE* sockdial_stream, struct interface_info* interfaces[20])
34 39
35 struct PageWeb* page; 40 struct PageWeb* page;
36 41
37 - sleep(2); // Temps d'attente avant de recevoir les informations 42 + sleep(10); // Temps d'attente avant de recevoir les informations
38 43
39 - createPage(&page, interfaces); // Permet de creer la pageweb (http.c) 44 + pthread_mutex_lock(&(argument->requete_mutex)); // Section critique
  45 +
  46 + createPage(&page, argument->interfaces); // Permet de creer la pageweb (http.c)
  47 +
  48 + pthread_mutex_unlock(&(argument->requete_mutex)); // Libération de la section critique
40 49
41 char buffer[BUFF_SIZE]; // Le buffer de message pour l'emission 50 char buffer[BUFF_SIZE]; // Le buffer de message pour l'emission
42 // char buff_rec[BUFF_SIZE]; // Le buffer de message à la reception 51 // 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]) @@ -57,26 +66,30 @@ int httpReponse(FILE* sockdial_stream, struct interface_info* interfaces[20])
57 66
58 67
59 68
60 -int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], struct interface_info* interfaces[20], char adresse[20]) 69 +int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], Arg_Thread* argument, char adresse[20])
61 { 70 {
62 printf("Interface : %x %x - Adresse : %s - Taille : %ld\n", packet[0], packet[1], adresse, strlen(packet)); 71 printf("Interface : %x %x - Adresse : %s - Taille : %ld\n", packet[0], packet[1], adresse, strlen(packet));
63 72
64 char buffer[BUFF_SIZE]; 73 char buffer[BUFF_SIZE];
65 74
  75 + // On lock le mutex car on rentre dans la section critique (modification de la structure interfaces)
  76 +
  77 + pthread_mutex_lock(&(argument->requete_mutex));
  78 +
66 int i=0; 79 int i=0;
67 - while(interfaces[i]!=NULL && strcmp(adresse,interfaces[i]->adresse)!=0) 80 + while(argument->interfaces[i]!=NULL && strcmp(adresse, argument->interfaces[i]->adresse)!=0)
68 { 81 {
69 i++; 82 i++;
70 } 83 }
71 84
72 - if(interfaces[0]!=NULL) 85 + if(argument->interfaces[0]!=NULL)
73 printf("Il y a %d associations\n", i+1); 86 printf("Il y a %d associations\n", i+1);
74 else 87 else
75 printf("Il n'y aucune association\n"); 88 printf("Il n'y aucune association\n");
76 89
77 90
78 - if(interfaces[i]!=NULL)  
79 - interfaces[i]->status=-1; 91 + if(argument->interfaces[i]!=NULL)
  92 + argument->interfaces[i]->status=-1;
80 93
81 94
82 if(packet[0]==0x20 && (packet[1]==0x01 || packet[1]==0x00) ) 95 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 @@ -84,21 +97,24 @@ int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], struct inter
84 //L'interface a correctement répondu, on la rajoute à la liste des interfaces 97 //L'interface a correctement répondu, on la rajoute à la liste des interfaces
85 printf("L'interface a correctement répondu\n"); 98 printf("L'interface a correctement répondu\n");
86 99
87 - if(interfaces[i]==NULL) 100 + if(argument->interfaces[i]==NULL)
88 { 101 {
89 - interfaces[i]=malloc(sizeof(struct interface_info));  
90 - strcpy(interfaces[i]->adresse, adresse); 102 + argument->interfaces[i]=malloc(sizeof(struct interface_info));
  103 + strcpy(argument->interfaces[i]->adresse, adresse);
91 } 104 }
92 105
93 if(packet[1]==0x01) 106 if(packet[1]==0x01)
94 - interfaces[i]->status=1; 107 + argument->interfaces[i]->status=1;
95 else 108 else
96 - interfaces[i]->status=0; 109 + argument->interfaces[i]->status=0;
97 110
98 } 111 }
99 else 112 else
100 { // L'interface n a pas correctement répondu 113 { // L'interface n a pas correctement répondu
  114 +
  115 + pthread_mutex_unlock(&(argument->requete_mutex)); // Libération de la section critique
101 printf("L'interface n'a pas correctement répondu\n"); 116 printf("L'interface n'a pas correctement répondu\n");
  117 +
102 return -1; 118 return -1;
103 } 119 }
104 120
@@ -121,6 +137,9 @@ int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], struct inter @@ -121,6 +137,9 @@ int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], struct inter
121 } 137 }
122 */ 138 */
123 139
  140 +
  141 + pthread_mutex_unlock(&(argument->requete_mutex)); // Libération de la section critique
  142 +
124 return 0; 143 return 0;
125 } 144 }
126 145
@@ -144,13 +163,13 @@ void* reponseConnexion(void* arg_sock_interf) @@ -144,13 +163,13 @@ void* reponseConnexion(void* arg_sock_interf)
144 printf("Le message reçu : %s\n", buff_rec); 163 printf("Le message reçu : %s\n", buff_rec);
145 164
146 165
147 - //pthread_mutex_lock(&(argument->requete_mutex)); 166 +
148 167
149 //Distingue la requête HTTP... 168 //Distingue la requête HTTP...
150 if(strstr(buff_rec, "GET")!=NULL && strstr(buff_rec, "HTTP")!=NULL) 169 if(strstr(buff_rec, "GET")!=NULL && strstr(buff_rec, "HTTP")!=NULL)
151 { 170 {
152 - vider_interfaces(argument->interfaces);  
153 - httpReponse(sockdial_stream, argument->interfaces); 171 + vider_interfaces(argument);
  172 + httpReponse(sockdial_stream, argument);
154 } 173 }
155 else //.. d'une requête interface 174 else //.. d'une requête interface
156 { 175 {
@@ -160,11 +179,10 @@ void* reponseConnexion(void* arg_sock_interf) @@ -160,11 +179,10 @@ void* reponseConnexion(void* arg_sock_interf)
160 { 179 {
161 char adresse[20]; 180 char adresse[20];
162 sprintf(adresse, "%s", inet_ntoa(((struct sockaddr_in*)&tmp_addr)->sin_addr)); 181 sprintf(adresse, "%s", inet_ntoa(((struct sockaddr_in*)&tmp_addr)->sin_addr));
163 - interfaceReponse(sockdial_stream, buff_rec, argument->interfaces, adresse); 182 + interfaceReponse(sockdial_stream, buff_rec, argument, adresse);
164 } 183 }
165 } 184 }
166 185
167 - //pthread_mutex_unlock(&(argument->requete_mutex));  
168 186
169 printf("Sock : %d // Stream : %p \n", sock, sockdial_stream); 187 printf("Sock : %d // Stream : %p \n", sock, sockdial_stream);
170 188