Commit 1a2c5f60f3e15f360675b2c962f5aab22abdefd1
1 parent
5940bf6e
Quelques modifs finales
Showing
4 changed files
with
45 additions
and
37 deletions
Show diff stats
Network/sender.c
@@ -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); } |
Network/sniffer.c
@@ -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
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 |