Commit a69a94a7be2bbd51fb9c7aaf1b69b39db37babe0

Authored by skhinach
2 parents 6ebb4a20 8a59b888

Ajout de gestion de requêtes

Sioux/client.c renamed to Network/client.c
@@ -20,8 +20,8 @@ int initializeSocketUDP(char* service) @@ -20,8 +20,8 @@ int initializeSocketUDP(char* service)
20 precisions.ai_socktype = SOCK_DGRAM; 20 precisions.ai_socktype = SOCK_DGRAM;
21 //precisions.ai_flags = AI_PASSIVE; 21 //precisions.ai_flags = AI_PASSIVE;
22 22
23 -  
24 - if(getaddrinfo("192.168.0.14", service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); } 23 +/*"172.26.145.35"*/
  24 + if(getaddrinfo(NULL, service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); }
25 25
26 int n=0; 26 int n=0;
27 27
@@ -46,7 +46,10 @@ int initializeSocketUDP(char* service) @@ -46,7 +46,10 @@ int initializeSocketUDP(char* service)
46 46
47 int val=1; 47 int val=1;
48 48
49 - if(setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR|SO_BROADCAST, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); } 49 + if(setsockopt(sock_id, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); }
  50 +
  51 + if(setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); }
  52 +
50 53
51 if(bind(sock_id, resultat->ai_addr, resultat->ai_addrlen)) { fprintf(stderr, "Erreur bind\n"); return(-1); } 54 if(bind(sock_id, resultat->ai_addr, resultat->ai_addrlen)) { fprintf(stderr, "Erreur bind\n"); return(-1); }
52 55
@@ -60,7 +63,7 @@ int sendUDPBroadcast(char* message, int port) @@ -60,7 +63,7 @@ int sendUDPBroadcast(char* message, int port)
60 { 63 {
61 static struct sockaddr_in addrUDP; 64 static struct sockaddr_in addrUDP;
62 addrUDP.sin_family=AF_INET; 65 addrUDP.sin_family=AF_INET;
63 - addrUDP.sin_port=htons(port); 66 + addrUDP.sin_port=htons(port); // Converti au format réseau
64 67
65 struct in_addr tmpadd={0xffffffff}; 68 struct in_addr tmpadd={0xffffffff};
66 addrUDP.sin_addr=tmpadd; 69 addrUDP.sin_addr=tmpadd;
@@ -110,3 +113,4 @@ int main(void) @@ -110,3 +113,4 @@ int main(void)
110 } 113 }
111 114
112 */ 115 */
  116 +
Network/sender.o deleted
No preview for this file type
@@ -5,62 +5,42 @@ @@ -5,62 +5,42 @@
5 #include <netinet/in.h> 5 #include <netinet/in.h>
6 #include <arpa/inet.h> 6 #include <arpa/inet.h>
7 7
8 -#define SZ_DEV 10 8 +#define SZ_DEV_PCAP 10
  9 +
9 10
10 -/*  
11 // Fonction lors de la detection d'un paquet 11 // Fonction lors de la detection d'un paquet
12 -void arp_detect(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) 12 +void arp_detect(/*u_char *args, const struct pcap_pkthdr *header, const u_char *packet*/)
13 { 13 {
14 static int num=0, loop=1; 14 static int num=0, loop=1;
15 num++; 15 num++;
16 printf("Voici le paquet arp numéro : %d\n", num); 16 printf("Voici le paquet arp numéro : %d\n", num);
17 17
18 - if(num==10) { loop++; num=0; printf("10 paquets ARP ont été reçus !\n");} 18 + if(num==10) { loop++; num=0; printf("10 paquets ARP ont été reçus pour la boucle %d !\n", loop);}
19 } 19 }
20 20
21 -*/  
22 -/*  
23 -  
24 -int main(int argc, char *argv[])  
25 -{  
26 - int cnt=10; // Correspond au nombre de paquets arp  
27 - 21 +int initialize_sniffer(pcap_t** dev_handle, char dev[])
  22 +{
28 bpf_u_int32 mask; // Masque de l'adresse réseau de l'interface à sniffer 23 bpf_u_int32 mask; // Masque de l'adresse réseau de l'interface à sniffer
29 bpf_u_int32 net; // Adresse réseau de l'interface à sniffer 24 bpf_u_int32 net; // Adresse réseau de l'interface à sniffer
30 25
31 char ip[18]="null"; 26 char ip[18]="null";
32 27
33 - char dev[SZ_DEV]; // Nom de l'interface à sniffer  
34 - pcap_t *dev_handle; // Handle vers le device (correspondant à l'interface à sniffer)  
35 -  
36 struct bpf_program filter; // Filtre défini par une structure 28 struct bpf_program filter; // Filtre défini par une structure
37 char buf_err[PCAP_ERRBUF_SIZE]; // Buffer qui stockera les erreurs rencontrées le cas échéant 29 char buf_err[PCAP_ERRBUF_SIZE]; // Buffer qui stockera les erreurs rencontrées le cas échéant
38 -  
39 - int dev_donne=0; // Vérifie si le device a été donné  
40 int status; 30 int status;
41 31
42 - for(int i=1; i<argc-1; i++)  
43 - {  
44 - if(strcmp(argv[i], "-dev")==0 || strcmp(argv[i], "-d")==0)  
45 - {  
46 - strcpy(dev, argv[i+1]);  
47 - dev_donne=1;  
48 - }  
49 - }  
50 32
51 33
52 - if(!dev_donne)  
53 - strcpy(dev, "eth0");  
54 34
55 - printf("Device: %s\n", dev);  
56 -  
57 -  
58 // Permet d'obtenir l'adresse ip de l'interface demandée*/ 35 // Permet d'obtenir l'adresse ip de l'interface demandée*/
59 /* pcap permet de lister les interfaces et obtenir les adresses ip de ces dernières 36 /* pcap permet de lister les interfaces et obtenir les adresses ip de ces dernières
60 * On utilise la fonction pcap_findalldevs 37 * On utilise la fonction pcap_findalldevs
61 - *//* 38 + */
  39 +
  40 +
62 41
63 pcap_if_t* interfaces; 42 pcap_if_t* interfaces;
  43 +
64 if(pcap_findalldevs(&interfaces, buf_err)!=0) { printf("%s\n", buf_err); return(EXIT_FAILURE); } 44 if(pcap_findalldevs(&interfaces, buf_err)!=0) { printf("%s\n", buf_err); return(EXIT_FAILURE); }
65 45
66 for(pcap_if_t* i=interfaces; i!=NULL; i=i->next) 46 for(pcap_if_t* i=interfaces; i!=NULL; i=i->next)
@@ -82,7 +62,7 @@ int main(int argc, char *argv[]) @@ -82,7 +62,7 @@ int main(int argc, char *argv[])
82 62
83 63
84 // Création du handle du device 64 // Création du handle du device
85 - if ((dev_handle=pcap_create(dev, buf_err))==NULL) 65 + if ((*dev_handle=pcap_create(dev, buf_err))==NULL)
86 { 66 {
87 //printf("%s\n", buf_err); 67 //printf("%s\n", buf_err);
88 fprintf(stderr, "Le handle n'a pas pu être créé sur le device %s. Vérifiez s'il est bien existant.\n", dev); 68 fprintf(stderr, "Le handle n'a pas pu être créé sur le device %s. Vérifiez s'il est bien existant.\n", dev);
@@ -91,7 +71,7 @@ int main(int argc, char *argv[]) @@ -91,7 +71,7 @@ int main(int argc, char *argv[])
91 71
92 72
93 // Activation du device 73 // Activation du device
94 - if ((status=pcap_activate(dev_handle))!=0) 74 + if ((status=pcap_activate(*dev_handle))!=0)
95 { 75 {
96 fprintf(stderr, "Le sniffer ne peut être activé sur le device %s\n Code d'erreur : %d \n", dev, status); 76 fprintf(stderr, "Le sniffer ne peut être activé sur le device %s\n Code d'erreur : %d \n", dev, status);
97 77
@@ -111,6 +91,7 @@ int main(int argc, char *argv[]) @@ -111,6 +91,7 @@ int main(int argc, char *argv[])
111 printf("Masque : %d.%d.%d.%d \n", mask & 0xff, (mask >> 8) & 0xff, (mask >> 16) & 0xff, (mask >> 24) & 0xff); 91 printf("Masque : %d.%d.%d.%d \n", mask & 0xff, (mask >> 8) & 0xff, (mask >> 16) & 0xff, (mask >> 24) & 0xff);
112 92
113 93
  94 + // Conception du filtre (on vérifie si on a la bonne ip)
114 char filter_str[50]="arp"; 95 char filter_str[50]="arp";
115 if( strcmp(ip,"null")!=0 ) 96 if( strcmp(ip,"null")!=0 )
116 { 97 {
@@ -120,26 +101,74 @@ int main(int argc, char *argv[]) @@ -120,26 +101,74 @@ int main(int argc, char *argv[])
120 101
121 102
122 // "Analyse" du filtre de paquets de type arp 103 // "Analyse" du filtre de paquets de type arp
123 - if(pcap_compile(dev_handle, &filter, filter_str, 0, net)==-1) 104 + if(pcap_compile(*dev_handle, &filter, filter_str, 0, net)==-1)
124 { 105 {
125 - fprintf(stderr, "Le filtre n'a pas pu être analysé : %s\n", pcap_geterr(dev_handle)); 106 + fprintf(stderr, "Le filtre n'a pas pu être analysé : %s\n", pcap_geterr(*dev_handle));
126 return(EXIT_FAILURE); 107 return(EXIT_FAILURE);
127 } 108 }
128 109
129 110
130 // Installation du filtre de paquets 111 // Installation du filtre de paquets
131 - if(pcap_setfilter(dev_handle, &filter) == -1) 112 + if(pcap_setfilter(*dev_handle, &filter) == -1)
132 { 113 {
133 - fprintf(stderr, "Impossible d'installer le filtre : %s\n", pcap_geterr(dev_handle)); 114 + fprintf(stderr, "Impossible d'installer le filtre : %s\n", pcap_geterr(*dev_handle));
134 return(EXIT_FAILURE); 115 return(EXIT_FAILURE);
135 } 116 }
136 117
  118 + return 0;
  119 +
  120 +
  121 +}
  122 +
  123 +int ecouteReseau(int argc, char* argv[])
  124 +{
  125 + int cnt=10; // Correspond au nombre de paquets arp
137 126
138 - struct pcap_pkthdr packet_header; // Header du paquet comportant des informations sur la réception du paquet (temps de reception etc...)  
139 - const u_char *packet; // Contenant du paquet 127 + char dev[SZ_DEV_PCAP]; // Nom de l'interface à sniffer
  128 + pcap_t *dev_handle; // Handle vers le device (correspondant à l'interface à sniffer)
140 129
141 - pcap_loop(dev_handle, 10, arp_detect, NULL); // Boucle jusque 10 paquets arp reçus  
142 - 130 +
  131 +
  132 + // Vérifie si le device a été donné
  133 + // ------------------------
  134 +
  135 + int dev_donne=0;
  136 +
  137 + for(int i=1; i<argc-1; i++)
  138 + {
  139 + if(strcmp(argv[i], "-dev")==0 || strcmp(argv[i], "-d")==0)
  140 + {
  141 + strcpy(dev, argv[i+1]);
  142 + dev_donne=1;
  143 + }
  144 + }
  145 +
  146 + if(!dev_donne)
  147 + strcpy(dev, "eth0");
  148 +
  149 + printf("Device: %s\n", dev);
  150 +
  151 + // ------------------------
  152 +
  153 +
  154 +
  155 +
  156 + // struct pcap_pkthdr packet_header; // Header du paquet comportant des informations sur la réception du paquet (temps de reception etc...)
  157 + // const u_char *packet; // Contenant du paquet
  158 +
  159 + if(initialize_sniffer(&dev_handle, dev)!=0) return(-1);
  160 +
  161 + pcap_loop(dev_handle, cnt, arp_detect, NULL); // Boucle jusque 10 paquets arp reçus
  162 +
  163 + return 0;
  164 +}
  165 +
  166 +/*
  167 +
  168 +int main(int argc, char *argv[])
  169 +{
  170 + ecouteReseau(argc, argv);
  171 +
143 return(0); 172 return(0);
144 } 173 }
145 174
Network/sniffer.o deleted
No preview for this file type
Network/tcpserver.c 100644 → 100755
@@ -65,6 +65,16 @@ int boucleServeur(int socket, void(* fctConnex)(int)) @@ -65,6 +65,16 @@ int boucleServeur(int socket, void(* fctConnex)(int))
65 { 65 {
66 int sock_dial; 66 int sock_dial;
67 67
  68 + //On utilisera la structure Arg_Thread (définie dans libthrd.h) qui comprend la socket de dialogue et le tableau pointeurs vers une structure donnant les infos des interfaces.
  69 + //En effet, cette structure d'informations d'interface permet d'être utilisée comme une base de données, comprenant l'adresse de l'interface et son statut
  70 + //Les threads partageant la mémoire, ces infos seront partagées.
  71 + Arg_Thread arg_sock_interf;
  72 +
  73 + //On initialise les interfaces
  74 + for(int i=0; i<20; i++)
  75 + arg_sock_interf.interfaces[i]=NULL;
  76 +
  77 +
68 printf("------- Début boucle serveur TCP -------\n\n"); 78 printf("------- Début boucle serveur TCP -------\n\n");
69 79
70 while(1) 80 while(1)
@@ -73,7 +83,9 @@ int boucleServeur(int socket, void(* fctConnex)(int)) @@ -73,7 +83,9 @@ int boucleServeur(int socket, void(* fctConnex)(int))
73 if((sock_dial=accept(socket, NULL, NULL)) < 0){ fprintf(stderr, "Error accept dialogue\n"); return -1; } 83 if((sock_dial=accept(socket, NULL, NULL)) < 0){ fprintf(stderr, "Error accept dialogue\n"); return -1; }
74 printf("Dialogue ACCEPTED\n"); 84 printf("Dialogue ACCEPTED\n");
75 85
76 - lanceThread((void*)fctConnex, (void*)&sock_dial, sizeof(sock_dial)); 86 + arg_sock_interf.socket=sock_dial;
  87 +
  88 + lanceThread((void*)fctConnex, (void*)&arg_sock_interf, sizeof(arg_sock_interf));
77 } 89 }
78 } 90 }
79 91
Network/tcpserver.o deleted
No preview for this file type
Page.html 0 → 100755
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  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>
Sioux/Page.html 100644 → 100755
@@ -3,8 +3,133 @@ @@ -3,8 +3,133 @@
3 <head> 3 <head>
4 <meta charset ="utf-8"> 4 <meta charset ="utf-8">
5 <title> Interface Tangible </title> 5 <title> Interface Tangible </title>
  6 +<!--
  7 + <style>
  8 +
  9 + body
  10 + {
  11 + font-family: 'lato', sans-serif;
  12 + }
  13 +
  14 +
  15 + .container
  16 + {
  17 + max-width: 1000px;
  18 + margin-left: auto;
  19 + margin-right: auto;
  20 + padding-left: 10px;
  21 + padding-right: 10px;
  22 + }
  23 +
  24 + h2
  25 + {
  26 + font-size: 26px;
  27 + margin: 20px 0;
  28 + text-align: center;
  29 + }
  30 +
  31 +
  32 + li
  33 + {
  34 + border-radius: 3px;
  35 + padding: 25px 30px;
  36 + display: flex;
  37 + justify-content: space-between;
  38 + margin-bottom: 25px;
  39 + }
  40 +
  41 + .table-entete
  42 + {
  43 + background-color: #95A5A6;
  44 + font-size: 14px;
  45 + text-transform: uppercase;
  46 + letter-spacing: 0.03em;
  47 + }
  48 +
  49 + .table-ligne
  50 + {
  51 + background-color: #ffffff;
  52 + box-shadow: 0px 0px 9px 0px rgba(0,0,0,0.1);
  53 + }
  54 +
  55 + .nom
  56 + {
  57 + flex-basis: 40%;
  58 + }
  59 +
  60 + .etat
  61 + {
  62 + flex-basis: 60%;
  63 + }
  64 +
  65 + @media all and (max-width: 767px)
  66 + {
  67 + .table-entete
  68 + {
  69 + display: none;
  70 + }
  71 +
  72 + .table-ligne
  73 + {
  74 +
  75 + }
  76 +
  77 + li
  78 + {
  79 + display: block;
  80 + }
  81 +
  82 + .col
  83 + {
  84 + flex-basis: 100%;
  85 + }
  86 +
  87 + .col
  88 + {
  89 + display: flex;
  90 + padding: 10px 0;
  91 + &:before
  92 + {
  93 + color: #6C7A89;
  94 + padding-right: 10px;
  95 + content: attr(data-label);
  96 + flex-basis: 50%;
  97 + text-align: right;
  98 + }
  99 + }
  100 + }
  101 +
  102 +
  103 +
  104 + </style>
  105 + -->
6 </meta> 106 </meta>
7 </head> 107 </head>
8 <body> 108 <body>
  109 + <div class="container">
  110 + <h2>Interfaces Tangibles</h2>
  111 + <ul class="tableau">
  112 + <li class="table-entete">
  113 + <div class="col nom">Interfaces</div>
  114 + <div class="col etat">Etat</div>
  115 + </li>
  116 + <li class="table-ligne">
  117 + <div class="col nom" data-label="Nom">42235</div>
  118 + <div class="col etat" data-label="Customer Name">John Doe</div>
  119 + </li>
  120 + <li class="table-ligne">
  121 + <div class="col nom" data-label="Nom">42442</div>
  122 + <div class="col etat" data-label="Customer Name">Jennifer Smith</div>
  123 + </li>
  124 + <li class="table-ligne">
  125 + <div class="col nom" data-label="Nom">42257</div>
  126 + <div class="col etat" data-label="Customer Name">John Smith</div>
  127 + </li>
  128 + <li class="table-ligne">
  129 + <div class="col nom" data-label="Nom">42311</div>
  130 + <div class="col etat" data-label="Customer Name">John Carpenter</div>
  131 + </li>
  132 + </ul>
  133 + </div>
9 </body> 134 </body>
10 </html> 135 </html>
Sioux/Tableau.css 0 → 100644
@@ -0,0 +1,102 @@ @@ -0,0 +1,102 @@
  1 +
  2 +
  3 +body
  4 +{
  5 + font-family: 'lato', sans-serif;
  6 +}
  7 +
  8 +
  9 +.container
  10 +{
  11 + max-width: 1000px;
  12 + margin-left: auto;
  13 + margin-right: auto;
  14 + padding-left: 10px;
  15 + padding-right: 10px;
  16 +}
  17 +
  18 +h2
  19 +{
  20 + font-size: 26px;
  21 + margin: 20px 0;
  22 + text-align: center;
  23 +}
  24 +
  25 +
  26 +li
  27 +{
  28 + border-radius: 3px;
  29 + padding: 25px 30px;
  30 + display: flex;
  31 + justify-content: space-between;
  32 + margin-bottom: 25px;
  33 +}
  34 +
  35 +.table-entete
  36 +{
  37 + background-color: #95A5A6;
  38 + font-size: 14px;
  39 + text-transform: uppercase;
  40 + letter-spacing: 0.03em;
  41 +}
  42 +
  43 +.table-ligne
  44 +{
  45 + background-color: #ffffff;
  46 + box-shadow: 0px 0px 9px 0px rgba(0,0,0,0.1);
  47 +}
  48 +
  49 +.nom
  50 +{
  51 + flex-basis: 40%;
  52 +}
  53 +
  54 +.etat
  55 + {
  56 + flex-basis: 60%;
  57 +}
  58 +
  59 +.no_inter
  60 +{
  61 + text-align: center;
  62 + flex-basis: 100%;
  63 +}
  64 +
  65 +@media all and (max-width: 767px)
  66 +{
  67 + .table-entete
  68 + {
  69 + display: none;
  70 + }
  71 +
  72 + .table-ligne
  73 + {
  74 +
  75 + }
  76 +
  77 + li
  78 + {
  79 + display: block;
  80 + }
  81 +
  82 + .col
  83 + {
  84 + flex-basis: 100%;
  85 + }
  86 +
  87 + .col
  88 + {
  89 + display: flex;
  90 + padding: 10px 0;
  91 + &:before
  92 + {
  93 + color: #6C7A89;
  94 + padding-right: 10px;
  95 + content: attr(data-label);
  96 + flex-basis: 50%;
  97 + text-align: right;
  98 + }
  99 + }
  100 +}
  101 +
  102 +
Sioux/client deleted
No preview for this file type
Sioux/http.c 0 → 100644
@@ -0,0 +1,117 @@ @@ -0,0 +1,117 @@
  1 +#include "http.h"
  2 +
  3 +
  4 +void freePage(struct PageWeb** page)
  5 +{
  6 + if(*page!=NULL)
  7 + {
  8 + if((*page)->html_contents!=NULL) free((*page)->html_contents);
  9 + free(*page);
  10 + }
  11 +}
  12 +
  13 +
  14 +
  15 +void getWeb(char* pageName, struct PageWeb** page)
  16 +{
  17 + *page=malloc(sizeof(struct PageWeb));
  18 +
  19 + FILE* pageFile=fopen(pageName, "r+");
  20 +
  21 + if(pageFile!=NULL)
  22 + {
  23 + fseek(pageFile, 0L, SEEK_END);
  24 + long nbr_char=ftell(pageFile);
  25 + fseek(pageFile, 0L, SEEK_SET);
  26 +
  27 +
  28 + (*page)->html_contents=malloc(nbr_char*sizeof(char));
  29 + fread(((*page)->html_contents),1,nbr_char,pageFile);
  30 +
  31 + fclose(pageFile);
  32 + }
  33 + else
  34 + {
  35 + char erreur[]="<h1> 404 PAGE NOT FOUND </h1>\r\n\r\n La page que vous cherchez n'a pas été trouvée, sans doute parce que vous êtes nul.";
  36 + (*page)->html_contents=malloc(strlen(erreur)*sizeof(char));
  37 + strcpy((*page)->html_contents, erreur);
  38 + }
  39 +
  40 + (*page)->size=strlen(((*page)->html_contents));
  41 +
  42 +
  43 +}
  44 +
  45 +void createPage(struct PageWeb** page, struct interface_info* interfaces[20])
  46 +{
  47 + *page=malloc(sizeof(struct PageWeb));
  48 +
  49 + (*page)->html_contents=malloc(BUFF_SIZE*sizeof(char));
  50 +
  51 + strcpy((*page)->html_contents,"");
  52 +
  53 + //Header de la page
  54 + strcat((*page)->html_contents,"<!doctype html>\r\n<html>\r\n<head>\r\n<meta charset =\"utf-8\">\r\n<title> Interfaces Tangibles </title>\r\n</meta>");
  55 +
  56 + // Intégration de la fiche de style
  57 + FILE* css_file=fopen("../Sioux/Tableau.css", "r+");
  58 +
  59 + if(css_file!=NULL)
  60 + {
  61 + char style_str[BUFF_SIZE];
  62 +
  63 + strcat((*page)->html_contents,"<style>");
  64 +
  65 + fseek(css_file, 0L, SEEK_END);
  66 + long nbr_char=ftell(css_file);
  67 + fseek(css_file, 0L, SEEK_SET);
  68 +
  69 + fread(style_str,1,nbr_char,css_file);
  70 +
  71 + strcat((*page)->html_contents,style_str);
  72 +
  73 + strcat((*page)->html_contents,"</style>");
  74 + fclose(css_file);
  75 +
  76 + }
  77 +
  78 + strcat((*page)->html_contents,"</head><body><div class=\"container\"><h2>Interfaces Tangibles</h2><ul class=\"tableau\">");
  79 + strcat((*page)->html_contents,"<li class=\"table-entete\"><div class=\"col nom\">Interfaces</div><div class=\"col etat\">Etat</div></li>");
  80 +
  81 + int nbr_interfaces=0;
  82 +
  83 + while(interfaces[nbr_interfaces]!=NULL)
  84 + nbr_interfaces++;
  85 +
  86 + if(nbr_interfaces==0)
  87 + strcat((*page)->html_contents,"<li class=\"table-ligne\">\n<div class=\"no_inter\" data-label=\"NoInter\"> Aucune interface </div>");
  88 + else
  89 + {
  90 + for(int i=0; i<nbr_interfaces; i++)
  91 + {
  92 + if(interfaces[i]->status >= 0)
  93 + {
  94 + strcat((*page)->html_contents,"<li class=\"table-ligne\">\n<div class=\"col nom\" data-label=\"Nom\">");
  95 + strcat((*page)->html_contents,interfaces[i]->adresse);
  96 + switch(interfaces[i]->status)
  97 + {
  98 + case(0):
  99 + strcat((*page)->html_contents,"</div>\n<div class=\"col etat\" style=\"color: red\" data-label=\"Etat\">Mode Sommeil</div>\n");
  100 + break;
  101 + case(1):
  102 + strcat((*page)->html_contents,"</div>\n<div class=\"col etat\" style=\"color: green\" data-label=\"Etat\">Mode Eveillé</div>\n");
  103 + break;
  104 + }
  105 + strcat((*page)->html_contents,"</li>");
  106 + }
  107 + }
  108 + }
  109 +
  110 + strcat((*page)->html_contents,"</ul>\n</div>\n</body>\n</html>");
  111 +
  112 + (*page)->size=strlen(((*page)->html_contents));
  113 +
  114 +}
  115 +
  116 +
  117 +
Sioux/sioux deleted
No preview for this file type
Sioux/threadsSocket.c deleted
@@ -1,21 +0,0 @@ @@ -1,21 +0,0 @@
1 -#include <stdio.h>  
2 -#include <stdlib.h>  
3 -#include <pthread.h>  
4 -  
5 -  
6 -int lanceThread(void(* fonction) (void *), void* arg, int size)  
7 -{  
8 - pthread_t thr_id;  
9 -  
10 - if(pthread_create(&thr_id, NULL, fonction, arg)!=0) { fprintf(stderr, "Le thread n'a pas pu être créé.\n"); return -1; }  
11 -  
12 - pthread_detach(thr_id);  
13 -  
14 -  
15 -  
16 -}  
17 -  
18 -int main(void)  
19 -{  
20 -  
21 -}  
Tangible/tangibleInterface
No preview for this file type
Tangible/tangibleInterface.c
1 #include <avr/io.h> 1 #include <avr/io.h>
2 #include <util/delay.h> 2 #include <util/delay.h>
3 #include <stdio.h> 3 #include <stdio.h>
4 - 4 +#include <string.h>
  5 +#include <stdlib.h>
  6 +#include <stdbool.h>
5 #include "serial.h" 7 #include "serial.h"
6 #include "ethernet.h" 8 #include "ethernet.h"
7 #include "w5100.h" 9 #include "w5100.h"
@@ -9,65 +11,102 @@ @@ -9,65 +11,102 @@
9 11
10 #define MAC_SIZE 6 12 #define MAC_SIZE 6
11 #define IPV4_SIZE 4 13 #define IPV4_SIZE 4
  14 +bool isComMem = false; // Commande déjà enregistrée ou non?
  15 +bool sleep = true; //Etat de l'interface : true = mode sommeil / false = mode eveillé
12 16
13 -int main(void) 17 +SOCKET sUDP=0;
  18 +SOCKET sTCP=1;
  19 +
  20 +uint8 comMem[2]; //Commande en mémoire
  21 +
  22 +uint8_t addr[IPV4_SIZE];
  23 +uint16_t port;
  24 +
  25 +
  26 +void request(uint8 rq [2])
14 { 27 {
15 - uint8 com[4],per[14]; 28 +
  29 + if (!isComMem) //Aucune commande en mémoire
  30 + {
  31 + isComMem = true;
  32 + comMem[0] = rq[0]; comMem[1] = rq [1];
  33 + }
  34 +
  35 + uint8 x = rq [0] & 0xE0; //Récupération de la commande
  36 + x = x >> 5;
  37 + uint16 y = rq[0] & 0x1F; //Récupération du pourcentage
  38 + y = y << 8;
  39 + y += rq[1];
  40 + uint16 per = (100*y)/8192; //2^13 = 100 %
  41 + switch(x)
  42 + {
  43 +
  44 + case 0:
  45 + printf("REQUEST STATUS\n");
  46 + //ENVOI TCP ICI , renvoi x = 0x01
  47 + comMem[0] = rq[0]; comMem[1] = rq [1]; //save
  48 + break;
  49 +
  50 + case 2:
  51 + printf("SET / UNSET SLEEP\n");
  52 + if (y == 0x0001)
  53 + {
  54 + sleep = false;
  55 + printf("MODE EVEILLE\n");
  56 + }
  57 + else if (y == 0x0000)
  58 + {
  59 + sleep = true;
  60 + printf("MODE SOMMEIL\n");
  61 + }
  62 + comMem[0] = rq[0]; comMem[1] = rq [1]; //save
  63 + break;
  64 +
  65 + case 3:
  66 + // ENVOI TCP ICI , envoi de comMem[2]
  67 + break;
  68 + case 5:
  69 + //Envoi à l'interface secondaire ordre + pourcentage.
  70 +
  71 + break;
  72 + }
  73 +
  74 +
  75 +
  76 +}
  77 +
  78 +int main(void)
  79 +{
16 uint8_t mac[MAC_SIZE] = {0xA0,0xBD,0xCD,0xDD,0xED,0xFD}; 80 uint8_t mac[MAC_SIZE] = {0xA0,0xBD,0xCD,0xDD,0xED,0xFD};
17 uint8_t ip[IPV4_SIZE] = {172,26,145,205}; 81 uint8_t ip[IPV4_SIZE] = {172,26,145,205};
18 uint8_t gateway[4] = {172,26,145,254}; 82 uint8_t gateway[4] = {172,26,145,254};
19 uint8_t mask[4] = {255,255,255,0}; 83 uint8_t mask[4] = {255,255,255,0};
20 - int isUDP = 0;  
21 - const char answer [16] = "I'm ok";  
22 84
23 - uint8 buf[16];  
24 - uint8_t addr[IPV4_SIZE];  
25 - uint16_t port; 85 + uint8 buf[2];
26 uint16 datasize; 86 uint16 datasize;
27 - uint8_t addrpifou[IPV4_SIZE]={172,26,145,35};  
28 - uint16 size;  
29 - SOCKET sUDP=0;  
30 - SOCKET sTCP=1;  
31 - init_printf();  
32 - ethernet_init(mac,ip,gateway,mask);  
33 - if (!socket(sUDP,Sn_MR_UDP,2020,0))  
34 - {  
35 - return -1;  
36 - }  
37 - if (!socket(sTCP,Sn_MR_TCP,2020,0))  
38 - {  
39 - return -1;  
40 - }  
41 - while(1) 87 +
  88 + init_printf();
  89 + ethernet_init(mac,ip,gateway,mask);
  90 + if (!socket(sUDP,Sn_MR_UDP,2020,0))
  91 + {
  92 + return -1;
  93 + }
  94 + if (!socket(sTCP,Sn_MR_TCP,2020,0))
  95 + {
  96 + return -1;
  97 + }
  98 +
  99 + while(1)
  100 + {
  101 + if((datasize=recvfrom(sUDP,buf,sizeof(buf),addr,&port)) == 2)
42 { 102 {
43 - if((datasize=recvfrom(sUDP,buf,sizeof(buf),addr,&port)) == 17)  
44 - {  
45 - com[0]=buf[0];  
46 - com[1]=buf[1];  
47 - com[2]=buf[2];  
48 - com[3]='\0';  
49 - per[0]=buf[3];  
50 - per[1]=buf[4];  
51 - per[2]=buf[5];  
52 - per[3]=buf[6];  
53 - per[4]=buf[7];  
54 - per[5]=buf[8];  
55 - per[6]=buf[9];  
56 - per[7]=buf[10];  
57 - per[8]=buf[11];  
58 - per[9]=buf[12];  
59 - per[10]=buf[13];  
60 - per[11]=buf[14];  
61 - per[12]=buf[15];  
62 - per[13]='\0';  
63 - printf("Com : %s\n",com);  
64 - printf("Per : %s\n",per);  
65 - } 103 + printf("RECEIVED\n");
  104 + request(buf);
66 } 105 }
67 - printf("RESET\n");  
68 - close(sTCP);  
69 - close(sUDP);  
70 - return 0; 106 + if (datasize!=0)
  107 + printf(" DATASIZE = %d\n",datasize);
  108 + }
  109 + close(sTCP);
  110 + close(sUDP);
  111 + return 0;
71 } 112 }
72 -  
73 -//send(sTCP,(uint8*)answer, (uint16)sizeof(answer));  
Tangible/tangibleInterface.hex 100755 → 100644
@@ -5,544 +5,551 @@ @@ -5,544 +5,551 @@
5 :100040000C9451000C9451000C9451000C945100EC 5 :100040000C9451000C9451000C9451000C945100EC
6 :100050000C9451000C9451000C9451000C945100DC 6 :100050000C9451000C9451000C9451000C945100DC
7 :100060000C9451000C94510011241FBECFEFD8E026 7 :100060000C9451000C94510011241FBECFEFD8E026
8 -:10007000DEBFCDBF13E0A0E0B1E0EEEBFFE102C0D8  
9 -:1000800005900D92A836B107D9F723E0A8E6B3E0B2  
10 -:1000900001C01D92A43AB207E1F70E94050C0C942E  
11 -:1000A000DD0F0C940000E82FF0E0E856FC4F808153  
12 -:1000B0000895E82FF0E0E856FC4F60830895E82F9C  
13 -:1000C000F0E0EE0FFF1FE858FC4F8081918108950A  
14 -:1000D000E82FF0E0EE0FFF1FE058FC4F8081918188  
15 -:1000E0000895E82FF0E0EE0FFF1FE857FC4F8081E6  
16 -:1000F00091810895E82FF0E0EE0FFF1FE057FC4FCD  
17 -:10010000808191810895E82FF0E0EE0FFF1FE859FC  
18 -:10011000FC4F808191810895E82FF0E0EE0FFF1FE2  
19 -:10012000E059FC4F80819181089524B12C6224B95B  
20 -:100130002A9A25B1277D25B920E52CBD2A9820EFE4  
21 -:100140002EBD0DB407FEFDCF9EBD0DB407FEFDCF45  
22 -:100150008EBD0DB407FEFDCF6EBD0DB407FEFDCF05  
23 -:100160002A9A81E0089524B12C6224B92A9A25B1F3  
24 -:10017000277D25B920E52CBD2A982FE02EBD0DB492  
25 -:1001800007FEFDCF9EBD0DB407FEFDCF8EBD0DB4A5  
26 -:1001900007FEFDCF1EBC0DB407FEFDCF8EB52A9A1B  
27 -:1001A000089524B12C6224B92A9A25B1277D25B956  
28 -:1001B00020E52CBDFB019B01240F351F60EFE217EA  
29 -:1001C000F307A9F02A986EBD0DB407FEFDCF9EBDC2  
30 -:1001D0000DB407FEFDCF8EBD0DB407FEFDCF7191AE  
31 -:1001E0007EBD0DB407FEFDCF2A9A0196E8CFCA0165  
32 -:1001F000089524B12C6224B92A9A25B1277D25B906  
33 -:1002000020E52CBDFB019B01240F351F6FE0E21799  
34 -:10021000F307B1F02A986EBD0DB407FEFDCF9EBD69  
35 -:100220000DB407FEFDCF8EBD0DB407FEFDCF1EBC85  
36 -:100230000DB407FEFDCF7EB571932A9A0196E7CFE4  
37 -:10024000CA0108952F923F924F925F926F927F92D0  
38 -:100250008F929F92AF92BF92CF92DF92EF92FF92D6  
39 -:100260000F931F93CF93DF93CDB7DEB728970FB6C9  
40 -:10027000F894DEBF0FBECDBF282E362E88E291E067  
41 -:100280000E94F80C622D8BE190E00E949500632D96  
42 -:100290008AE190E00E94950080E090E490937103E1  
43 -:1002A0008093700380E090E69093690380936803E5  
44 -:1002B00083E391E00E94F80C88E6882E83E0982E74  
45 -:1002C00090E7A92E93E0B92E20E833E038872F83FA  
46 -:1002D00008E713E028E8C22E23E0D22E30E9E32E0F  
47 -:1002E00033E0F32E1A821982412C512C1C821B827E  
48 -:1002F000612C712C222D30E03E832D83232C312C58  
49 -:10030000AF81B88511961C921E92F801118210825D  
50 -:100310002B813C8121153042B4F58D819E8109806D  
51 -:1003200002C0959587950A94E2F7837099278230E9  
52 -:100330009105A9F083309105D9F0019739F080E05B  
53 -:1003400094E08D939C93EFEFF3E01AC0E0E0F8E0C7  
54 -:10035000AF81B885ED93FC93EFEFF7E011C0E0E0DB  
55 -:10036000F0E1AF81B885ED93FC93EFEFFFE008C0BB  
56 -:10037000E0E0F0E2AF81B885ED93FC93EFEFFFE1B1  
57 -:10038000D701ED93FC934114F0E25F069CF5C101A7  
58 -:10039000098002C0959587950A94E2F783709927A2  
59 -:1003A00082309105A9F083309105D1F0019741F099  
60 -:1003B000E0E0F4E0D801ED93FC93EFEFF3E017C039  
61 -:1003C000E0E0F8E0D801ED93FC93EFEFF7E00FC029  
62 -:1003D000E0E0F0E1D801ED93FC93EFEFFFE007C020  
63 -:1003E000E0E0F0E2D801ED93FC93EFEFFFE1D601FE  
64 -:1003F000ED93FC93AF81B8858D919D91B887AF83C4  
65 -:100400002B813C81280F391F3C832B83D8012D91F0  
66 -:100410003D918D01420E531E61147104D9F0EF819C  
67 -:10042000F885349760817181F5013297408151815F  
68 -:10043000460F571FF50151834083FD0134976081BA  
69 -:100440007181F401329740815181460F571FD401C9  
70 -:100450004D935C93F40160817181F2E08F0E911CE9  
71 -:10046000D5014C9111965C91B2E0AB0EB11C3F935B  
72 -:100470002F939F938F937F936F935F934F937F926D  
73 -:100480006F92ACE5B1E0BF93AF930E94E20CFFEF37  
74 -:100490006F1A7F0A29813A812E5F3F4F3A83298361  
75 -:1004A00032E0C30ED11C42E0E40EF11C0FB6F8940A  
76 -:1004B000DEBF0FBECDBF94E06916710409F020CFF6  
77 -:1004C00028960FB6F894DEBF0FBECDBFDF91CF9157  
78 -:1004D0001F910F91FF90EF90DF90CF90BF90AF9062  
79 -:1004E0009F908F907F906F905F904F903F902F9054  
80 -:1004F0000895682F80E090E80C94950080E80C94B3  
81 -:100500007902CF93DF93EC01688181E090E00E9453  
82 -:100510009500698182E090E00E9495006A8183E005  
83 -:1005200090E00E9495006B8184E090E0DF91CF9194  
84 -:100530000C949500CF93DF93EC0181E090E00E9452  
85 -:10054000B300888382E090E00E94B300898383E057  
86 -:1005500090E00E94B3008A8384E090E00E94B300A0  
87 -:100560008B83DF91CF910895CF93DF93EC01688166  
88 -:1005700085E090E00E949500698186E090E00E940D  
89 -:1005800095006A8187E090E00E9495006B8188E089  
90 -:1005900090E0DF91CF910C949500CF93DF93EC0125  
91 -:1005A000688189E090E00E94950069818AE090E08E  
92 -:1005B0000E9495006A818BE090E00E9495006B811B  
93 -:1005C0008CE090E00E9495006C818DE090E00E94AC  
94 -:1005D00095006D818EE090E0DF91CF910C949500B5  
95 -:1005E000CF93DF93EC0168818FE090E00E9495004B  
96 -:1005F000698180E190E00E9495006A8181E190E04C  
97 -:100600000E9495006B8182E190E0DF91CF910C9484  
98 -:10061000950085E190E00C94B300CF93C82F692F2B  
99 -:1006200087E190E00E9495006C2F88E190E0CF91E7  
100 -:100630000C949500682F89E190E00C949500682F48  
101 -:1006400086E190E00C949500CF93DF93EC0181E07C  
102 -:1006500090E00E94B300888382E090E00E94B300A3  
103 -:10066000898383E090E00E94B3008A8384E090E075  
104 -:100670000E94B3008B83DF91CF910895CF93DF93D6  
105 -:10068000EC0185E090E00E94B300888386E090E072  
106 -:100690000E94B300898387E090E00E94B3008A83C0  
107 -:1006A00088E090E00E94B3008B83DF91CF910895A2  
108 -:1006B000CF93DF93EC0189E090E00E94B300888340  
109 -:1006C0008AE090E00E94B30089838BE090E00E9472  
110 -:1006D000B3008A838CE090E00E94B3008B838DE0AE  
111 -:1006E00090E00E94B3008C838EE090E00E94B30003  
112 -:1006F0008D83DF91CF910895CF93DF93EC018FE04D  
113 -:1007000090E00E94B300888380E190E00E94B300F3  
114 -:10071000898381E190E00E94B3008A8382E190E0C6  
115 -:100720000E94B3008B83DF91CF9108950F931F93A5  
116 -:10073000CF93DF938B01C82FD0E02496DC2FCC27FA  
117 -:10074000CE0106960E94B300F8018083CE01079681  
118 -:100750000E94B300F8018183CE0108960E94B30085  
119 -:10076000F8018283CE0109960E94B300F8018383C9  
120 -:10077000CE010A960E94B300F8018483CE010B9645  
121 -:100780000E94B300F8018583DF91CF911F910F91F3  
122 -:1007900008950F931F93CF93DF938B01C82FD0E061  
123 -:1007A0002496DC2FCC27FB016081CE0106960E94A7  
124 -:1007B0009500F8016181CE0107960E949500F8012D  
125 -:1007C0006281CE0108960E949500F8016381CE01F6  
126 -:1007D00009960E949500F8016481CE010A960E9454  
127 -:1007E0009500F8016581CE010B96DF91CF911F91A5  
128 -:1007F0000F910C9495000F931F93CF93DF938B0170  
129 -:10080000C82FD0E02496DC2FCC27CE010C960E9476  
130 -:10081000B300F8018083CE010D960E94B300F80169  
131 -:100820008183CE010E960E94B300F8018283CE012F  
132 -:100830000F960E94B300F8018383DF91CF911F913F  
133 -:100840000F9108950F931F93CF93DF938B01C82FC0  
134 -:10085000D0E02496DC2FCC27FB016081CE010C96E2  
135 -:100860000E949500F8016181CE010D960E949500CD  
136 -:10087000F8016281CE010E960E949500F801638115  
137 -:10088000CE010F96DF91CF911F910F910C9495009F  
138 -:100890000F931F93CF93DF938B01C82FD0E0249643  
139 -:1008A000DC2FCC27CE0140960E94B300F801808354  
140 -:1008B000CE0141960E94B300F8018183DF91CF9170  
141 -:1008C0001F910F9108950F931F93CF93DF938B0187  
142 -:1008D000C82FD0E02496DC2FCC27FB016081CE010D  
143 -:1008E00040960E949500F8016181CE014196DF910A  
144 -:1008F000CF911F910F910C9495001F93CF93DF938D  
145 -:10090000162F672FC82FD0E02496DC2FCC27CE01DE  
146 -:1009100042960E949500612FCE014396DF91CF91C0  
147 -:100920001F910C94950090E0982F88278A5E9B4F2A  
148 -:100930000C94950090E0982F88278C5E9B4F0C9428  
149 -:10094000950090E0982F88278E5F9B4F0C94B30002  
150 -:1009500090E0982F88278D5F9B4F0C94B300CF9227  
151 -:10096000DF92EF92FF920F931F93CF93DF93C82FE5  
152 -:10097000D0E02496DC2FCC277E0180E2E80EF11C2B  
153 -:10098000A19600E010E0C7010E94B300C82ED12C50  
154 -:10099000DC2CCC24CE010E94B300C80ED11CC114A3  
155 -:1009A000D10461F0C7010E94B300082F10E0102F9E  
156 -:1009B0000027CE010E94B300080F111D0C151D0564  
157 -:1009C00011F7C801DF91CF911F910F91FF90EF9028  
158 -:1009D000DF90CF900895CF92DF92EF92FF920F9326  
159 -:1009E0001F93CF93DF93C82FD0E02496DC2FCC2722  
160 -:1009F0007E0186E2E80EF11CA79600E010E0C70138  
161 -:100A00000E94B300C82ED12CDC2CCC24CE010E9435  
162 -:100A1000B300C80ED11CC114D10461F0C7010E94FB  
163 -:100A2000B300082F10E0102F0027CE010E94B30062  
164 -:100A3000080F111D0C151D0511F7C801DF91CF918D  
165 -:100A40001F910F91FF90EF90DF90CF900895CF927C  
166 -:100A5000DF92EF92FF920F931F93CF93DF93E82FD4  
167 -:100A6000F0E0EE0FFF1FDF01A057BC4F8D919C916E  
168 -:100A7000DA01A823B923EF01C059DC4FE880F980DF  
169 -:100A8000CD018E0D9F1DE058FC4FC081D181AD017D  
170 -:100A9000420F531FC417D50778F489016B01CA1B95  
171 -:100AA000DB0BAE010E94D100A8014C1B5D0BB6010F  
172 -:100AB0006C0F7D1FC70101C0A901DF91CF911F916C  
173 -:100AC0000F91FF90EF90DF90CF900C94D1008F9218  
174 -:100AD0009F92BF92CF92DF92EF92FF920F931F935C  
175 -:100AE000CF93DF9300D0CDB7DEB7B82E7A0190E078  
176 -:100AF0000496982E8824640184E2C80ED11CC60195  
177 -:100B000069837A830E94B300082F10E0102F00271A  
178 -:100B100085E2880E911CC4010E94B300080F111DCC  
179 -:100B20009701A80169817A818B2D0E9427050E0DFE  
180 -:100B30001F1D612FC6010E949500602FC4010F90F8  
181 -:100B40000F90DF91CF911F910F91FF90EF90DF9069  
182 -:100B5000CF90BF909F908F900C949500AF92BF92D2  
183 -:100B6000CF92DF92EF92FF920F931F93CF93DF9379  
184 -:100B7000DA01A901E82FF0E0EE0FFF1FEF01C857DF  
185 -:100B8000DC4F888199816B01C822D922EF01C859B5  
186 -:100B9000DC4FE880F980C6018E0D9F1DE858FC4FA0  
187 -:100BA000C081D1819601240F351FC217D30780F46D  
188 -:100BB0008A015D01CC19DD09AE01BD010E94F90079  
189 -:100BC000A8014C1B5D0BB5016C0F7D1FC70101C057  
190 -:100BD000BD01DF91CF911F910F91FF90EF90DF90BA  
191 -:100BE000CF90BF90AF900C94F9009F92AF92BF92BC 8 +:10007000DEBFCDBF13E0A0E0B1E0E4EEFFE102C0DF
  9 +:1000800005900D92AA3AB107D9F723E0AAEAB3E0A6
  10 +:1000900001C01D92A03FB207E1F70E944D0C0C94E5
  11 +:1000A000F00F0C9400000F931F93CF93DF938C01FC
  12 +:1000B0008091AB0381110AC081E08093AB03F8010A
  13 +:1000C00080818093E20381818093E303F801C08102
  14 +:1000D00091818C2F82958695877019F0823021F05E
  15 +:1000E00025C086E191E019C0CF71D0E0DC2FCC278C
  16 +:1000F000C90FD11D85E291E00E940B0DC130D105E1
  17 +:1001000029F41092010187E391E007C0CD2B39F467
  18 +:1001100081E08093010184E491E00E940B0DF801DD
  19 +:1001200080818093E20381818093E303DF91CF910B
  20 +:100130001F910F910895E82FF0E0E452FC4F808169
  21 +:100140000895E82FF0E0E452FC4F60830895E82F13
  22 +:10015000F0E0EE0FFF1FE454FC4F80819181089581
  23 +:10016000E82FF0E0EE0FFF1FEC53FC4F80819181F0
  24 +:100170000895E82FF0E0EE0FFF1FE453FC4F80815D
  25 +:1001800091810895E82FF0E0EE0FFF1FEC52FC4F35
  26 +:10019000808191810895E82FF0E0EE0FFF1FE45574
  27 +:1001A000FC4F808191810895E82FF0E0EE0FFF1F52
  28 +:1001B000EC54FC4F80819181089524B12C6224B9C4
  29 +:1001C0002A9A25B1277D25B920E52CBD2A9820EF54
  30 +:1001D0002EBD0DB407FEFDCF9EBD0DB407FEFDCFB5
  31 +:1001E0008EBD0DB407FEFDCF6EBD0DB407FEFDCF75
  32 +:1001F0002A9A81E0089524B12C6224B92A9A25B163
  33 +:10020000277D25B920E52CBD2A982FE02EBD0DB401
  34 +:1002100007FEFDCF9EBD0DB407FEFDCF8EBD0DB414
  35 +:1002200007FEFDCF1EBC0DB407FEFDCF8EB52A9A8A
  36 +:10023000089524B12C6224B92A9A25B1277D25B9C5
  37 +:1002400020E52CBDFB019B01240F351F60EFE21759
  38 +:10025000F307A9F02A986EBD0DB407FEFDCF9EBD31
  39 +:100260000DB407FEFDCF8EBD0DB407FEFDCF71911D
  40 +:100270007EBD0DB407FEFDCF2A9A0196E8CFCA01D4
  41 +:10028000089524B12C6224B92A9A25B1277D25B975
  42 +:1002900020E52CBDFB019B01240F351F6FE0E21709
  43 +:1002A000F307B1F02A986EBD0DB407FEFDCF9EBDD9
  44 +:1002B0000DB407FEFDCF8EBD0DB407FEFDCF1EBCF5
  45 +:1002C0000DB407FEFDCF7EB571932A9A0196E7CF54
  46 +:1002D000CA0108952F923F924F925F926F927F9240
  47 +:1002E0008F929F92AF92BF92CF92DF92EF92FF9246
  48 +:1002F0000F931F93CF93DF93CDB7DEB728970FB639
  49 +:10030000F894DEBF0FBECDBF282E362E8AE691E0D0
  50 +:100310000E940B0D622D8BE190E00E94DD00632DA9
  51 +:100320008AE190E00E94DD0080E090E49093B503C4
  52 +:100330008093B40380E090E69093AD038093AC0388
  53 +:1003400085E791E00E940B0D8CEA882E83E0982EC1
  54 +:1003500094EBA92E93E0B92E24EC33E038872F8359
  55 +:100360000CEB13E02CECC22E23E0D22E34EDE32E66
  56 +:1003700033E0F32E1A821982412C512C1C821B82ED
  57 +:10038000612C712C222D30E03E832D83232C312CC7
  58 +:10039000AF81B88511961C921E92F80111821082CD
  59 +:1003A0002B813C8121153042B4F58D819E810980DD
  60 +:1003B00002C0959587950A94E2F783709927823059
  61 +:1003C0009105A9F083309105D9F0019739F080E0CB
  62 +:1003D00094E08D939C93EFEFF3E01AC0E0E0F8E037
  63 +:1003E000AF81B885ED93FC93EFEFF7E011C0E0E04B
  64 +:1003F000F0E1AF81B885ED93FC93EFEFFFE008C02B
  65 +:10040000E0E0F0E2AF81B885ED93FC93EFEFFFE120
  66 +:10041000D701ED93FC934114F0E25F069CF5C10116
  67 +:10042000098002C0959587950A94E2F78370992711
  68 +:1004300082309105A9F083309105D1F0019741F008
  69 +:10044000E0E0F4E0D801ED93FC93EFEFF3E017C0A8
  70 +:10045000E0E0F8E0D801ED93FC93EFEFF7E00FC098
  71 +:10046000E0E0F0E1D801ED93FC93EFEFFFE007C08F
  72 +:10047000E0E0F0E2D801ED93FC93EFEFFFE1D6016D
  73 +:10048000ED93FC93AF81B8858D919D91B887AF8333
  74 +:100490002B813C81280F391F3C832B83D8012D9160
  75 +:1004A0003D918D01420E531E61147104D9F0EF810C
  76 +:1004B000F885349760817181F501329740815181CF
  77 +:1004C000460F571FF50151834083FD01349760812A
  78 +:1004D0007181F401329740815181460F571FD40139
  79 +:1004E0004D935C93F40160817181F2E08F0E911C59
  80 +:1004F000D5014C9111965C91B2E0AB0EB11C3F93CB
  81 +:100500002F939F938F937F936F935F934F937F92DC
  82 +:100510006F92AEE9B1E0BF93AF930E94F50CFFEF8D
  83 +:100520006F1A7F0A29813A812E5F3F4F3A832983D0
  84 +:1005300032E0C30ED11C42E0E40EF11C0FB6F89479
  85 +:10054000DEBF0FBECDBF94E06916710409F020CF65
  86 +:1005500028960FB6F894DEBF0FBECDBFDF91CF91C6
  87 +:100560001F910F91FF90EF90DF90CF90BF90AF90D1
  88 +:100570009F908F907F906F905F904F903F902F90C3
  89 +:100580000895682F80E090E80C94DD0080E80C94DA
  90 +:10059000C102CF93DF93EC01688181E090E00E947B
  91 +:1005A000DD00698182E090E00E94DD006A8183E0E5
  92 +:1005B00090E00E94DD006B8184E090E0DF91CF91BC
  93 +:1005C0000C94DD00CF93DF93EC0181E090E00E947A
  94 +:1005D000FB00888382E090E00E94FB00898383E037
  95 +:1005E00090E00E94FB008A8384E090E00E94FB0080
  96 +:1005F0008B83DF91CF910895CF93DF93EC016881D6
  97 +:1006000085E090E00E94DD00698186E090E00E9434
  98 +:10061000DD006A8187E090E00E94DD006B8188E068
  99 +:1006200090E0DF91CF910C94DD00CF93DF93EC014C
  100 +:10063000688189E090E00E94DD0069818AE090E0B5
  101 +:100640000E94DD006A818BE090E00E94DD006B81FA
  102 +:100650008CE090E00E94DD006C818DE090E00E94D3
  103 +:10066000DD006D818EE090E0DF91CF910C94DD0094
  104 +:10067000CF93DF93EC0168818FE090E00E94DD0072
  105 +:10068000698180E190E00E94DD006A8181E190E073
  106 +:100690000E94DD006B8182E190E0DF91CF910C94AC
  107 +:1006A000DD0085E190E00C94FB00CF93C82F692F0B
  108 +:1006B00087E190E00E94DD006C2F88E190E0CF910F
  109 +:1006C0000C94DD00682F89E190E00C94DD00682F28
  110 +:1006D00086E190E00C94DD00CF93DF93EC0181E0A4
  111 +:1006E00090E00E94FB00888382E090E00E94FB0083
  112 +:1006F000898383E090E00E94FB008A8384E090E09D
  113 +:100700000E94FB008B83DF91CF910895CF93DF93FD
  114 +:10071000EC0185E090E00E94FB00888386E090E099
  115 +:100720000E94FB00898387E090E00E94FB008A839F
  116 +:1007300088E090E00E94FB008B83DF91CF910895C9
  117 +:10074000CF93DF93EC0189E090E00E94FB00888367
  118 +:100750008AE090E00E94FB0089838BE090E00E9499
  119 +:10076000FB008A838CE090E00E94FB008B838DE08D
  120 +:1007700090E00E94FB008C838EE090E00E94FB00E2
  121 +:100780008D83DF91CF910895CF93DF93EC018FE0BC
  122 +:1007900090E00E94FB00888380E190E00E94FB00D3
  123 +:1007A000898381E190E00E94FB008A8382E190E0EE
  124 +:1007B0000E94FB008B83DF91CF9108950F931F93CD
  125 +:1007C000CF93DF938B01C82FD0E02496DC2FCC276A
  126 +:1007D000CE0106960E94FB00F8018083CE010796A9
  127 +:1007E0000E94FB00F8018183CE0108960E94FB0065
  128 +:1007F000F8018283CE0109960E94FB00F8018383F1
  129 +:10080000CE010A960E94FB00F8018483CE010B966C
  130 +:100810000E94FB00F8018583DF91CF911F910F911A
  131 +:1008200008950F931F93CF93DF938B01C82FD0E0D0
  132 +:100830002496DC2FCC27FB016081CE0106960E9416
  133 +:10084000DD00F8016181CE0107960E94DD00F8010C
  134 +:100850006281CE0108960E94DD00F8016381CE011D
  135 +:1008600009960E94DD00F8016481CE010A960E947B
  136 +:10087000DD00F8016581CE010B96DF91CF911F91CC
  137 +:100880000F910C94DD000F931F93CF93DF938B0197
  138 +:10089000C82FD0E02496DC2FCC27CE010C960E94E6
  139 +:1008A000FB00F8018083CE010D960E94FB00F80149
  140 +:1008B0008183CE010E960E94FB00F8018283CE0157
  141 +:1008C0000F960E94FB00F8018383DF91CF911F9167
  142 +:1008D0000F9108950F931F93CF93DF938B01C82F30
  143 +:1008E000D0E02496DC2FCC27FB016081CE010C9652
  144 +:1008F0000E94DD00F8016181CE010D960E94DD00AD
  145 +:10090000F8016281CE010E960E94DD00F80163813C
  146 +:10091000CE010F96DF91CF911F910F910C94DD00C6
  147 +:100920000F931F93CF93DF938B01C82FD0E02496B2
  148 +:10093000DC2FCC27CE0140960E94FB00F80180837B
  149 +:10094000CE0141960E94FB00F8018183DF91CF9197
  150 +:100950001F910F9108950F931F93CF93DF938B01F6
  151 +:10096000C82FD0E02496DC2FCC27FB016081CE017C
  152 +:1009700040960E94DD00F8016181CE014196DF9131
  153 +:10098000CF911F910F910C94DD001F93CF93DF93B4
  154 +:10099000162F672FC82FD0E02496DC2FCC27CE014E
  155 +:1009A00042960E94DD00612FCE014396DF91CF91E8
  156 +:1009B0001F910C94DD0090E0982F88278A5E9B4F52
  157 +:1009C0000C94DD0090E0982F88278C5E9B4F0C9450
  158 +:1009D000DD0090E0982F88278E5F9B4F0C94FB00E2
  159 +:1009E00090E0982F88278D5F9B4F0C94FB00CF924F
  160 +:1009F000DF92EF92FF920F931F93CF93DF93C82F55
  161 +:100A0000D0E02496DC2FCC277E0180E2E80EF11C9A
  162 +:100A1000A19600E010E0C7010E94FB00C82ED12C77
  163 +:100A2000DC2CCC24CE010E94FB00C80ED11CC114CA
  164 +:100A3000D10461F0C7010E94FB00082F10E0102FC5
  165 +:100A40000027CE010E94FB00080F111D0C151D058B
  166 +:100A500011F7C801DF91CF911F910F91FF90EF9097
  167 +:100A6000DF90CF900895CF92DF92EF92FF920F9395
  168 +:100A70001F93CF93DF93C82FD0E02496DC2FCC2791
  169 +:100A80007E0186E2E80EF11CA79600E010E0C701A7
  170 +:100A90000E94FB00C82ED12CDC2CCC24CE010E945D
  171 +:100AA000FB00C80ED11CC114D10461F0C7010E9423
  172 +:100AB000FB00082F10E0102F0027CE010E94FB0042
  173 +:100AC000080F111D0C151D0511F7C801DF91CF91FD
  174 +:100AD0001F910F91FF90EF90DF90CF900895CF92EC
  175 +:100AE000DF92EF92FF920F931F93CF93DF93E82F44
  176 +:100AF000F0E0EE0FFF1FDF01AC52BC4F8D919C91D7
  177 +:100B0000DA01A823B923EF01CC54DC4FE880F98047
  178 +:100B1000CD018E0D9F1DEC53FC4FC081D181AD01E5
  179 +:100B2000420F531FC417D50778F489016B01CA1B04
  180 +:100B3000DB0BAE010E941901A8014C1B5D0BB60135
  181 +:100B40006C0F7D1FC70101C0A901DF91CF911F91DB
  182 +:100B50000F91FF90EF90DF90CF900C9419018F923E
  183 +:100B60009F92BF92CF92DF92EF92FF920F931F93CB
  184 +:100B7000CF93DF9300D0CDB7DEB7B82E7A0190E0E7
  185 +:100B80000496982E8824640184E2C80ED11CC60104
  186 +:100B900069837A830E94FB00082F10E0102F002742
  187 +:100BA00085E2880E911CC4010E94FB00080F111DF4
  188 +:100BB0009701A80169817A818B2D0E946F050E0D26
  189 +:100BC0001F1D612FC6010E94DD00602FC4010F9020
  190 +:100BD0000F90DF91CF911F910F91FF90EF90DF90D9
  191 +:100BE000CF90BF909F908F900C94DD00AF92BF92FA
192 :100BF000CF92DF92EF92FF920F931F93CF93DF93E9 192 :100BF000CF92DF92EF92FF920F931F93CF93DF93E9
193 -:100C0000982E6B017A01082F10E00C5F1F4F102FF8  
194 -:100C10000027580188E2A80EB11CC5010E94B3004C  
195 -:100C2000C82FD0E0DC2FCC27075D1F4FC8010E94E2  
196 -:100C3000B300C80FD11DDF93CF938DE791E09F9351  
197 -:100C40008F930E94E20C9701A601BE01892D0E949C  
198 -:100C5000AE05CE0DDF1D6D2FC5010E9495000F90D2  
199 -:100C60000F900F900F906C2FC801DF91CF911F91C3  
200 -:100C70000F91FF90EF90DF90CF90BF90AF909F903B  
201 -:100C80000C9495000F931F93CF93DF93C82F85E9A2  
202 -:100C900091E00E94F80CD0E02496DC2FCC278E0146  
203 -:100CA0000F5F1F4F60E1C8010E949500C8010E94BC  
204 -:100CB000B3008111FBCF6FEFCE010296DF91CF9190  
205 -:100CC0001F910F910C949500CF92DF92EF92FF92BB  
206 -:100CD0000F931F93CF93DF93C82FC62E8A01D22E76  
207 -:100CE0008EE991E00E94F80C8FEF8C0DEC2EF12C28  
208 -:100CF0008530D0F58C2F0E944206E7012496DC2F28  
209 -:100D0000CC276C2D6D29CE010E949500CE01049652  
210 -:100D10009E012B5F3F4F69010115110529F0612FDD  
211 -:100D20000E949500602F0FC020919C0330919D037D  
212 -:100D30002F5F3F4F30939D0320939C03632F0E94AE  
213 -:100D4000950060919C03C6010E9495008E010F5F83  
214 -:100D50001F4F61E0C8010E949500C8010E94B300C6  
215 -:100D60008111FBCF11E001C010E0E7012496DC2FD8  
216 -:100D7000CC27CE010E94B300082FCE0103960E941B  
217 -:100D8000B3001F920F931F928F9388EA91E09F9375  
218 -:100D90008F930E94E20C0F900F900F900F900F9086  
219 -:100DA0000F90812FDF91CF911F910F91FF90EF90C6  
220 -:100DB000DF90CF9008950F931F93CF93DF93C82FA9  
221 -:100DC00089EC91E00E94F80CD0E02496DC2FCC272F  
222 -:100DD0008E010D5F1F4FC8010E94B3008331D9F40B  
223 -:100DE000219662E0CE010E949500CE010E94B300E0  
224 -:100DF0008111FBCFC8010E94B3001F928F9383ED36  
225 -:100E000091E09F938F930E94E20C0F900F900F90B0  
226 -:100E10000F9081E005C081EE91E00E94F80C80E027  
227 -:100E2000DF91CF911F910F910895CF93DF93C82F3A  
228 -:100E300088EF91E00E94F80CD0E0DC2FCC27CD5F4A  
229 -:100E4000DB4FCE010E94B3008431B1F4CE010E9489  
230 -:100E5000B3008731D9F7CE010E94B3001F928F9360  
231 -:100E600083ED91E09F938F930E94E20C0F900F907F  
232 -:100E70000F900F9081E005C082E092E00E94F80C94  
233 -:100E800080E0DF91CF910895EF92FF920F931F932F  
234 -:100E9000CF93DF93C82F8B017A018AE192E00E9401  
235 -:100EA000F80CF80160816F3F51F481818F3F99F414  
236 -:100EB00082818F3F81F483818F3F69F40FC061117C  
237 -:100EC0000AC0F8018181811106C08281811103C0AD  
238 -:100ED0008381882319F0E114F10431F481EE91E06B  
239 -:100EE0000E94F80C80E02FC0D0E02496DC2FCC27A5  
240 -:100EF000CE010C960E949500F8016181CE010D96FD  
241 -:100F00000E949500F8016281CE010E960E94950024  
242 -:100F1000F8016381CE010F960E9495006F2DCE01DE  
243 -:100F200040960E9495006E2DCE0141960E9495003C  
244 -:100F3000219664E0CE010E949500CE010E94B3008C  
245 -:100F40008111FBCF81E0DF91CF911F910F91FF9035  
246 -:100F5000EF900895CF93DF93C82F87E192E00E942E  
247 -:100F6000F80CD0E0DC2FCC27CF5FDB4F68E0CE0160  
248 -:100F70000E949500CE010E94B3008111FBCFDF914A  
249 -:100F8000CF9108958F929F92AF92BF92CF92DF92AE  
250 -:100F9000EF92FF921F93CF93DF93182F4B017A01AB  
251 -:100FA00082E493E00E94F80C812F0E9468008E1565  
252 -:100FB0009F0520F4812F0E9468007C01C12FD0E0A2  
253 -:100FC0002496DC2FCC275E0183E0A80EB11C812F74  
254 -:100FD0000E94AF046C01C5010E94B3008731A9F0E3  
255 -:100FE0008C3199F0DF92CF921F921F9385E292E0AD  
256 -:100FF0009F938F930E94E20C0F900F900F900F9091  
257 -:101000000F900F90E12CF12C03C0CE14DF04F8F206  
258 -:10101000A701B401812F0E9467056E018FEFC81AE6  
259 -:10102000D80A60E2C6010E949500C6010E94B30082  
260 -:101030008111FBCF2296CE010E94B30084FD0FC028  
261 -:10104000C5010E94B3008111F6CF8DE492E00E94A9  
262 -:10105000F80C812F0E94420680E090E005C060E11C  
263 -:10106000CE010E949500C701DF91CF911F91FF90A3  
264 -:10107000EF90DF90CF90BF90AF909F908F900895AA  
265 -:10108000BF92CF92DF92EF92FF920F931F93CF9375  
266 -:10109000DF93B82E6B018A01C82FD0E02496DC2F95  
267 -:1010A000CC277E0183E0E80EF11CC7010E94B3004B  
268 -:1010B000873191F0C7010E94B3001F928F938BE597  
269 -:1010C00092E09F938F930E94E20C0F900F900F90ED  
270 -:1010D0000F908FEF9FEF26C080E00E94EB047C0111  
271 -:1010E00018161906ECF48EE692E00E94F80CE01651  
272 -:1010F000F10620F00115110589F001C08701A80152  
273 -:10110000B6018B2D0E94F505219660E4CE010E9468  
274 -:101110009500CE010E94B3008111FBCFC80102C02F  
275 -:1011200080E090E0DF91CF911F910F91FF90EF90C1  
276 -:10113000DF90CF90BF9008958F929F92BF92CF92F1  
277 -:10114000DF92EF92FF920F931F93CF93DF93B82E0E  
278 -:101150004B01EA01790186E792E00E94F80C8B2DA1  
279 -:101160000E9468008C179D0728F48B2D0E94680050  
280 -:101170006C0101C06E01F7016081611109C08181BC  
281 -:10118000811106C08281811103C08381882331F0DF  
282 -:101190000115110519F0C114D10429F5DF93CF937E  
283 -:1011A0001F930F93F70183811F928F9382811F9268  
284 -:1011B0008F9381811F928F931F926F931F92BF9283  
285 -:1011C00080E892E09F938F930E94E20C81EE91E081  
286 -:1011D0000E94F80C8DB79EB740960FB6F8949EBF4C  
287 -:1011E0000FBE8DBF49C0CB2DD0E02496DC2FCC277D  
288 -:1011F000CE010C960E949500F7016181CE010D96FB  
289 -:101200000E949500F7016281CE010E960E94950022  
290 -:10121000F7016381CE010F960E949500612FCE01E8  
291 -:1012200040960E949500602FCE0141960E94950045  
292 -:10123000A601B4018B2D0E9467058E010F5F1F4F21  
293 -:1012400060E2C8010E949500C8010E94B3008111AC  
294 -:10125000FBCF2296CE010E94B30084FD10C0CE01C8  
295 -:101260000E94B30083FFF6CF8CE593E00E94F80C58  
296 -:1012700068E1CE010E94950080E090E005C060E149  
297 -:10128000CE010E949500C601DF91CF911F910F9171  
298 -:10129000FF90EF90DF90CF90BF909F908F90089538  
299 -:1012A0002F923F924F925F926F927F928F929F9276  
300 -:1012B000AF92BF92CF92DF92EF92FF920F931F9364  
301 -:1012C000CF93DF93CDB7DEB72A970FB6F894DEBF82  
302 -:1012D0000FBECDBF782E4B016A0179011A870987AD  
303 -:1012E0000E94EB04892B09F42BC188EA92E00E944A  
304 -:1012F000F80C872D0E94EB04682E392ECD2809F4B6  
305 -:1013000017C1472C512C84E0480E511C542C442406  
306 -:10131000520198E2A90EB11CC5010E94B300082F2A  
307 -:1013200010E0102F00276201E9E2CE0ED11CC601A9  
308 -:101330000E94B300080F111D3F926F921F930F93ED  
309 -:1013400084EB92E09F938F930E94E20CC2010E9473  
310 -:10135000B3000F900F900F900F900F900F90877029  
311 -:10136000833009F464C0843009F4ABC0823009F0E2  
312 -:10137000D0C028E030E0AE014F5F5F4FB801872D4D  
313 -:101380000E94AE051801F8E02F0E311C8981F7018B  
314 -:1013900080838A8181838B8182838C8183838D8109  
315 -:1013A00090E0982F88272E81820F911DE985FA857C  
316 -:1013B000918380830F8110E0102F00278885080F0C  
317 -:1013C000111D1F930F9384ED92E09F938F930E94C2  
318 -:1013D000E20CE985FA8581818F9380818F938AEE73  
319 -:1013E00092E09F938F930E94E20CF70183811F92FA  
320 -:1013F0008F9382811F928F9381811F928F9380811F  
321 -:101400001F928F938DEF92E09F938F930E94E20C37  
322 -:101410009801A401B101872D0E94AE057101E00E73  
323 -:10142000F11E6F2DC5010E9495006E2D41C026E072  
324 -:1014300030E0AE014F5F5F4FB801872D0E94AE05CF  
325 -:10144000180196E0290E311C8981F70180838A8179  
326 -:1014500081838B8182838C8183830D8110E0102FA7  
327 -:1014600000278E81080F111D87E193E00E94F80C80  
328 -:10147000F70183811F928F9382811F928F938181C5  
329 -:101480001F928F9380811F928F938DEF92E09F9395  
330 -:101490008F930E94E20C9801A401B101872D0E9454  
331 -:1014A000AE05200E311E632DC5010E949500622DF0  
332 -:1014B000C6010E9495000FB6F894DEBF0FBECDBFE7  
333 -:1014C0002AC022E030E0AE014F5F5F4FB801872DA8  
334 -:1014D0000E94AE05780192E0E90EF11C098110E04E  
335 -:1014E000902F88270A8110E002501109080F191F58  
336 -:1014F0009801A401B701872D0E94AE05E00EF11EF0  
337 -:101500006F2DC5010E9495006E2DC6010E949500A9  
338 -:1015100002C000E010E0EFEF4E1A5E0A60E4C20184  
339 -:101520000E949500C2010E94B3008111FBCF02C04E  
340 -:1015300000E010E08BE293E00E94F80CC80102C0CA  
341 -:1015400080E090E02A960FB6F894DEBF0FBECDBFC4  
342 -:10155000DF91CF911F910F91FF90EF90DF90CF908F  
343 -:10156000BF90AF909F908F907F906F905F904F90C3  
344 -:101570003F902F900895CF92DF92FF920F931F9389  
345 -:10158000CF93DF93F82E6B01EA018EE393E00E9484  
346 -:10159000F80C8F2D0E9468008C179D0728F48F2D62  
347 -:1015A0000E9468008C0101C08E010115110589F4AB  
348 -:1015B0001F921F92DF93CF938AE493E09F938F93C0  
349 -:1015C0000E94E20C0F900F900F900F900F900F90D1  
350 -:1015D00030C0A801B6018F2D0E946705CF2DD0E045  
351 -:1015E0002496DC2FCC276E018FEFC81AD80A60E250  
352 -:1015F000C6010E949500C6010E94B3008111FBCF75  
353 -:101600006E0182E0C80ED11C2396C6010E94B30071  
354 -:1016100084FD12C0CE010E94B300C6010E94B30037  
355 -:1016200083FFF3CF88E593E00E94F80C8F2D0E9492  
356 -:10163000420680E090E005C060E1C6010E9495008E  
357 -:10164000C801DF91CF911F910F91FF90DF90CF9054  
358 -:101650000895CF92DF92EF92FF920F931F93CF9353  
359 -:10166000DF936C017B018A01E9010E947E0265E53E  
360 -:1016700085E50E942201C6010E94CD02C7010E9499  
361 -:10168000F002C8010E948102CE01DF91CF911F912B  
362 -:101690000F91FF90EF90DF90CF900C94B402809365  
363 -:1016A000BB0084E88093BC008091BC0087FFFCCF26  
364 -:1016B00008951092B9008CE08093B80084E0809384  
365 -:1016C000BC000895CF9394EA9093BC009091BC0025  
366 -:1016D00097FFFCCF9091B900987F983011F080E08F  
367 -:1016E00015C0C62F880F0E944F0B8091B900887FCC  
368 -:1016F0008831A9F78C2F0E944F0B8091B900887F09  
369 -:10170000883269F784E98093BC0081E0CF91089525  
370 -:10171000CF93DF9394EA9093BC009091BC0097FF25  
371 -:10172000FCCF9091B900987F983011F080E01EC0F6  
372 -:10173000C42FD62F880F0E944F0B8091B900887F4D  
373 -:101740008831A1F78D2F0E944F0B8091B900887FBF  
374 -:10175000883261F78C2F0E944F0B8091B900887FEF  
375 -:10176000883221F784E98093BC0081E0DF91CF913A  
376 -:101770000895092E000CAA0BBB0B9C01AD0184E05F  
377 -:10178000220F331F441F551F8A95D1F760E074E282  
378 -:1017900084EF90E00E94C00C215031093093C500C5  
379 -:1017A0002093C40088E18093C10086E08093C2004A  
380 -:1017B000E0ECF0E080818D7F808308959091C000FF  
381 -:1017C00095FFFCCF8093C6000895CF93C82F8A3031  
382 -:1017D00019F48DE00E94DE0B8C2F0E94DE0B80E05E  
383 -:1017E00090E0CF9108958091C00087FFFCCF809159  
384 -:1017F000C600089580E895E20E94B90B80E091E070  
385 -:101800009093A1038093A00308958F929F92AF922B  
386 -:10181000BF92CF92DF92EF92FF920F931F93CF93DD  
387 -:10182000DF93CDB7DEB7EA970FB6F894DEBF0FBEF1  
388 -:10183000CDBF86E0EEE0F1E0DE015F9601900D9213  
389 -:101840008A95E1F72CEA29AB9AE19AAB81E98BAB57  
390 -:101850003DEC3CAB2DA79EA78FA78EEF88AB8FEFFB  
391 -:1018600089A78AA78BA71CA60E94FA0B9E01275D59  
392 -:101870003F4FAE01435D5F4FBE016F5C7F4FCE01B6  
393 -:101880004F960E94290B20E044EE57E062E080E092  
394 -:101890000E946406882309F45EC020E044EE57E00D  
395 -:1018A00061E081E00E946406882309F454C04E017F  
396 -:1018B00085E3880E911C84E1A82E81E0B82E6E018C  
397 -:1018C00091E1C90ED11C9EE1E92E91E0F92E8E0125  
398 -:1018D000075C1F4F9E012B5D3F4F40E150E0BE0172  
399 -:1018E0006F5F7F4F80E00E945009419781F78981A7  
400 -:1018F0008DAB8A818EAB8B818FAB18AE8C81898B3F  
401 -:101900008D818A8B8E818B8B8F818C8B88858D8B43  
402 -:1019100089858E8B8A858F8B8B85888F8C85898F27  
403 -:101920008D858A8F8E858B8F8F858C8F88898D8F03  
404 -:101930001E8E9F928F92BF92AF920E94E20CDF9216  
405 -:10194000CF92FF92EF920E94E20C0FB6F894DEBFA6  
406 -:101950000FBECDBFBCCF8FEF9FEFEA960FB6F894C6  
407 -:10196000DEBF0FBECDBFDF91CF911F910F91FF90D2  
408 -:10197000EF90DF90CF90BF90AF909F908F900895A1  
409 -:10198000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F83  
410 -:10199000EE1FFF1FA217B307E407F50720F0A21BF5  
411 -:1019A000B30BE40BF50B661F771F881F991F1A9462  
412 -:1019B00069F760957095809590959B01AC01BD018C  
413 -:1019C000CF010895A0E0B0E0E8EEFCE00C94B60F83  
414 -:1019D000AE014B5F5F4FFA0161917191AF01809150  
415 -:1019E000A0039091A1030E94280DE2E00C94D20F75  
416 -:1019F0000F931F93CF93DF93E091A003F091A10386  
417 -:101A0000238121FF1BC08C01D0E0C0E0F80181914F  
418 -:101A10008F016091A0037091A103DB011896ED91F5  
419 -:101A2000FC911997882331F00995892B79F3DFEF21  
420 -:101A3000CFEFECCF8AE00995892B19F08FEF9FEF5C  
421 -:101A400002C08D2F9C2FDF91CF911F910F91089590  
422 -:101A5000ACE0B0E0EEE2FDE00C94A60F7C016B017F  
423 -:101A60008A01FC0117821682838181FFBDC1CE01EC  
424 -:101A700001964C01F7019381F60193FD859193FF47  
425 -:101A800081916F01882309F4ABC1853239F493FD4C  
426 -:101A9000859193FF81916F01853229F4B70190E020  
427 -:101AA0000E94100FE7CF512C312C20E02032A0F4FF  
428 -:101AB0008B3269F030F4803259F0833269F420615E  
429 -:101AC0002CC08D3239F0803339F4216026C0226079  
430 -:101AD000246023C0286021C027FD27C030ED380FC7  
431 -:101AE0003A3078F426FF06C0FAE05F9E300D1124EC  
432 -:101AF000532E13C08AE0389E300D1124332E2062FD  
433 -:101B00000CC08E3221F426FD6BC1206406C08C36D9  
434 -:101B100011F4206802C0883641F4F60193FD8591E6  
435 -:101B200093FF81916F018111C1CF982F9F7D9554B3  
436 -:101B3000933028F40C5F1F4FFFE3F9830DC0833609  
437 -:101B400031F0833771F0833509F05BC022C0F801B2  
438 -:101B5000808189830E5F1F4F44244394512C54018C  
439 -:101B600015C03801F2E06F0E711CF801A080B18041  
440 -:101B700026FF03C0652D70E002C06FEF7FEFC50147  
441 -:101B80002C870E94050F2C0183012C852F77222E94  
442 -:101B900017C03801F2E06F0E711CF801A080B1800F  
443 -:101BA00026FF03C0652D70E002C06FEF7FEFC50117  
444 -:101BB0002C870E94FA0E2C012C852068222E83018E  
445 -:101BC00023FC1BC0832D90E048165906B0F4B701E2  
446 -:101BD00080E290E00E94100F3A94F4CFF50127FCC8  
447 -:101BE000859127FE81915F01B70190E00E94100F5F  
448 -:101BF00031103A94F1E04F1A51084114510471F731  
449 -:101C0000E5C0843611F0893639F5F80127FF07C0A1  
450 -:101C100060817181828193810C5F1F4F08C0608158  
451 -:101C20007181072E000C880B990B0E5F1F4F2F76CA  
452 -:101C3000722E97FF09C090958095709561957F4FA2  
453 -:101C40008F4F9F4F2068722E2AE030E0A4010E943F  
454 -:101C5000480FA82EA81844C0853729F42F7EB22E2D  
455 -:101C60002AE030E025C0F22FF97FBF2E8F36C1F079  
456 -:101C700018F4883579F0B4C0803719F0883721F02E  
457 -:101C8000AFC02F2F2061B22EB4FE0DC08B2D84600B  
458 -:101C9000B82E09C024FF0AC09F2F9660B92E06C037  
459 -:101CA00028E030E005C020E130E002C020E132E071  
460 -:101CB000F801B7FE07C060817181828193810C5F5A  
461 -:101CC0001F4F06C06081718180E090E00E5F1F4F62  
462 -:101CD000A4010E94480FA82EA818FB2DFF777F2E85  
463 -:101CE00076FE0BC0372D3E7FA51450F474FE0AC05B  
464 -:101CF00072FC08C0372D3E7E05C0BA2C372D03C0BC  
465 -:101D0000BA2C01C0B52C34FF0DC0FE01EA0DF11D47  
466 -:101D10008081803311F4397E09C032FF06C0B3944C  
467 -:101D2000B39404C0832F867809F0B39433FD13C0B5  
468 -:101D300030FF06C05A2CB31418F4530C5B18B32CA4  
469 -:101D4000B31468F4B70180E290E03C870E94100F62  
470 -:101D5000B3943C85F5CFB31410F43B1801C0312C7B  
471 -:101D600034FF12C0B70180E390E03C870E94100F5F  
472 -:101D70003C8532FF17C031FD03C088E790E002C008  
473 -:101D800088E590E0B7010CC0832F867859F031FFC9  
474 -:101D900002C08BE201C080E237FD8DE2B70190E026  
475 -:101DA0000E94100FA51438F4B70180E390E00E9460  
476 -:101DB000100F5A94F7CFAA94F401EA0DF11D808117  
477 -:101DC000B70190E00E94100FA110F5CF332009F465  
478 -:101DD00051CEB70180E290E00E94100F3A94F6CF06  
479 -:101DE000F7018681978102C08FEF9FEF2C96E2E189  
480 -:101DF0000C94C20FFC010590615070400110D8F79F  
481 -:101E0000809590958E0F9F1F0895FC016150704042  
482 -:101E100001900110D8F7809590958E0F9F1F08951F  
483 -:101E20000F931F93CF93DF93FB01238121FD03C009  
484 -:101E30008FEF9FEF28C022FF16C046815781248173  
485 -:101E400035814217530744F4A081B1819D012F5F72  
486 -:101E50003F4F318320838C93268137812F5F3F4F03  
487 -:101E60003783268310C0EB01092F182F0084F185DA  
488 -:101E7000E02D0995892BE1F68E819F8101969F8344  
489 -:101E80008E83812F902FDF91CF911F910F91089515  
490 -:101E9000FA01AA27283051F1203181F1E8946F939B  
491 -:101EA0006E7F6E5F7F4F8F4F9F4FAF4FB1E03ED041  
492 -:101EB000B4E03CD0670F781F891F9A1FA11D680FDF  
493 -:101EC000791F8A1F911DA11D6A0F711D811D911D12  
494 -:101ED000A11D20D009F468943F912AE0269F112487  
495 -:101EE0003019305D3193DEF6CF010895462F4770EB  
496 -:101EF000405D4193B3E00FD0C9F7F6CF462F4F7046  
497 -:101F0000405D4A3318F0495D31FD4052419302D0A3  
498 -:101F1000A9F7EACFB4E0A695979587957795679549  
499 -:101F2000BA95C9F700976105710508959B01AC0149  
500 -:101F30000A2E06945795479537952795BA95C9F770  
501 -:101F4000620F731F841F951FA01D08952F923F924B  
502 -:101F50004F925F926F927F928F929F92AF92BF92B9  
503 -:101F6000CF92DF92EF92FF920F931F93CF93DF9365  
504 -:101F7000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBEC2  
505 -:101F8000CDBF09942A88398848885F846E847D840F  
506 -:101F90008C849B84AA84B984C884DF80EE80FD8011  
507 -:101FA0000C811B81AA81B981CE0FD11D0FB6F89487  
508 -:0E1FB000DEBF0FBECDBFED010895F894FFCF48  
509 -:101FBE000000000200000000E50B00000000A0BDC4  
510 -:101FCE00CDDDEDFD436F6D203A2025730A0050657F  
511 -:101FDE0072203A2025730A00737973696E6974282A  
512 -:101FEE00290D004368616E6E656C203A2053454E94  
513 -:101FFE0044204D454D2053495A45203A20524543E1  
514 -:10200E0056204D454D2053495A450D002564203A22  
515 -:10201E0020252E3478203A20252E3478203A20257B  
516 -:10202E002E3478203A20252E34780D0A004953524A  
517 -:10203E005F52583A2072645F707472203A20252ED7  
518 -:10204E0034780D0A00636C6F736528290D00736F69  
519 -:10205E00636B657428290D00536E5F5352203D202B  
520 -:10206E00252E3278202C2050726F746F636F6C2087  
521 -:10207E003D20252E32780D0A006C697374656E282A  
522 -:10208E00290D00737461747573203D2025780D0A37  
523 -:10209E00004661696C5B696E76616C69642069707B  
524 -:1020AE002C706F72745D0D00616363657074282906  
525 -:1020BE000D004661696C5B6E6F74206C697374659C  
526 -:1020CE006E696E675D0D00646973636F6E6E656336  
527 -:1020DE007428290D00736F636B6574202564206668  
528 -:1020EE0072656573697A652825642920656D70743B  
529 -:1020FE0079206F72206572726F720D0A00534F4312  
530 -:10210E004B5F434C4F5345442E0D00426164207388  
531 -:10211E007461747573203D20253032780A00726523  
532 -:10212E00637628290D0073656E64746F28290D007F  
533 -:10213E002564204661696C5B252E32782E252E3261  
534 -:10214E00782E252E32782E252E32782C20252E64B0  
535 -:10215E002C2025645D0D0A007265637666726F6DC4  
536 -:10216E0028290D004953525F52583A2072645F700D  
537 -:10217E007472203A20252E34782073697A653D25B5  
538 -:10218E00640D0A00554450206D736720232564208A  
539 -:10219E00617272697665640D0A00736F757263659C  
540 -:1021AE0020506F7274203A2025750D0A00736F75DA  
541 -:1021BE00726365204950203A2025642E25642E2511  
542 -:1021CE00642E25640D0A00495020524157206D732C  
543 -:1021DE006720617272697665640D0072656376665A  
544 -:1021EE00726F6D282920656E64202E2E0D00696792  
545 -:1021FE006D7073656E6428290D0025642046616933  
546 -:10220E006C5B25645D0D0A0069676D7073656E64A5  
547 -:08221E00206661696C2E0D00C1 193 +:100C0000DA01A901E82FF0E0EE0FFF1FEF01C45356
  194 +:100C1000DC4F888199816B01C822D922EF01C4552C
  195 +:100C2000DC4FE880F980C6018E0D9F1DE454FC4F17
  196 +:100C3000C081D1819601240F351FC217D30780F4DC
  197 +:100C40008A015D01CC19DD09AE01BD010E9441019F
  198 +:100C5000A8014C1B5D0BB5016C0F7D1FC70101C0C6
  199 +:100C6000BD01DF91CF911F910F91FF90EF90DF9029
  200 +:100C7000CF90BF90AF900C9441019F92AF92BF92E2
  201 +:100C8000CF92DF92EF92FF920F931F93CF93DF9358
  202 +:100C9000982E6B017A01082F10E00C5F1F4F102F68
  203 +:100CA0000027580188E2A80EB11CC5010E94FB0074
  204 +:100CB000C82FD0E0DC2FCC27075D1F4FC8010E9452
  205 +:100CC000FB00C80FD11DDF93CF938FEB91E09F9373
  206 +:100CD0008F930E94F50C9701A601BE01892D0E94F9
  207 +:100CE000F605CE0DDF1D6D2FC5010E94DD000F90B2
  208 +:100CF0000F900F900F906C2FC801DF91CF911F9133
  209 +:100D00000F91FF90EF90DF90CF90BF90AF909F90AA
  210 +:100D10000C94DD000F931F93CF93DF93C82F87EDC3
  211 +:100D200091E00E940B0DD0E02496DC2FCC278E01A1
  212 +:100D30000F5F1F4F60E1C8010E94DD00C8010E94E3
  213 +:100D4000FB008111FBCF6FEFCE010296DF91CF91B7
  214 +:100D50001F910F910C94DD00CF92DF92EF92FF92E2
  215 +:100D60000F931F93CF93DF93C82FC62E8A01D22EE5
  216 +:100D700080EE91E00E940B0D8FEF8C0DEC2EF12C8C
  217 +:100D80008530D0F58C2F0E948A06E7012496DC2F4F
  218 +:100D9000CC276C2D6D29CE010E94DD00CE0104967A
  219 +:100DA0009E012B5F3F4F69010115110529F0612F4D
  220 +:100DB0000E94DD00602F0FC02091E0033091E1031D
  221 +:100DC0002F5F3F4F3093E1032093E003632F0E9496
  222 +:100DD000DD006091E003C6010E94DD008E010F5F1F
  223 +:100DE0001F4F61E0C8010E94DD00C8010E94FB00A6
  224 +:100DF0008111FBCF11E001C010E0E7012496DC2F48
  225 +:100E0000CC27CE010E94FB00082FCE0103960E9442
  226 +:100E1000FB001F920F931F928F938AEE91E09F9396
  227 +:100E20008F930E94F50C0F900F900F900F900F90E2
  228 +:100E30000F90812FDF91CF911F910F91FF90EF9035
  229 +:100E4000DF90CF9008950F931F93CF93DF93C82F18
  230 +:100E50008BE092E00E940B0DD0E02496DC2FCC2793
  231 +:100E60008E010D5F1F4FC8010E94FB008331D9F432
  232 +:100E7000219662E0CE010E94DD00CE010E94FB00BF
  233 +:100E80008111FBCFC8010E94FB001F928F9385E167
  234 +:100E900092E09F938F930E94F50C0F900F900F900C
  235 +:100EA0000F9081E005C083E292E00E940B0D80E08C
  236 +:100EB000DF91CF911F910F910895CF93DF93C82FAA
  237 +:100EC0008AE392E00E940B0DD0E0DC2FCC27CD5FAF
  238 +:100ED000DB4FCE010E94FB008431B1F4CE010E94B1
  239 +:100EE000FB008731D9F7CE010E94FB001F928F9340
  240 +:100EF00085E192E09F938F930E94F50C0F900F90E5
  241 +:100F00000F900F9081E005C084E492E00E940B0DE9
  242 +:100F100080E0DF91CF910895EF92FF920F931F939E
  243 +:100F2000CF93DF93C82F8B017A018CE592E00E946A
  244 +:100F30000B0DF80160816F3F51F481818F3F99F46F
  245 +:100F400082818F3F81F483818F3F69F40FC06111EB
  246 +:100F50000AC0F8018181811106C08281811103C01C
  247 +:100F60008381882319F0E114F10431F483E292E0E3
  248 +:100F70000E940B0D80E02FC0D0E02496DC2FCC2700
  249 +:100F8000CE010C960E94DD00F8016181CE010D9624
  250 +:100F90000E94DD00F8016281CE010E960E94DD0004
  251 +:100FA000F8016381CE010F960E94DD006F2DCE0106
  252 +:100FB00040960E94DD006E2DCE0141960E94DD001C
  253 +:100FC000219664E0CE010E94DD00CE010E94FB006C
  254 +:100FD0008111FBCF81E0DF91CF911F910F91FF90A5
  255 +:100FE000EF900895CF93DF93C82F89E592E00E9498
  256 +:100FF0000B0DD0E0DC2FCC27CF5FDB4F68E0CE01BC
  257 +:101000000E94DD00CE010E94FB008111FBCFDF9129
  258 +:10101000CF9108958F929F92AF92BF92CF92DF921D
  259 +:10102000EF92FF921F93CF93DF93182F4B017A011A
  260 +:1010300084E893E00E940B0D812F0E94B0008E1572
  261 +:101040009F0520F4812F0E94B0007C01C12FD0E0C9
  262 +:101050002496DC2FCC275E0183E0A80EB11C812FE3
  263 +:101060000E94F7046C01C5010E94FB008731A9F0C2
  264 +:101070008C3199F0DF92CF921F921F9387E692E016
  265 +:101080009F938F930E94F50C0F900F900F900F90ED
  266 +:101090000F900F90E12CF12C03C0CE14DF04F8F276
  267 +:1010A000A701B401812F0E94AF056E018FEFC81A0E
  268 +:1010B000D80A60E2C6010E94DD00C6010E94FB0062
  269 +:1010C0008111FBCF2296CE010E94FB0084FD0FC050
  270 +:1010D000C5010E94FB008111F6CF8FE892E00E94CB
  271 +:1010E0000B0D812F0E948A0680E090E005C060E130
  272 +:1010F000CE010E94DD00C701DF91CF911F91FF90CB
  273 +:10110000EF90DF90CF90BF90AF909F908F90089519
  274 +:10111000BF92CF92DF92EF92FF920F931F93CF93E4
  275 +:10112000DF93B82E6B018A01C82FD0E02496DC2F04
  276 +:10113000CC277E0183E0E80EF11CC7010E94FB0072
  277 +:10114000873191F0C7010E94FB001F928F938DE9B8
  278 +:1011500092E09F938F930E94F50C0F900F900F9049
  279 +:101160000F908FEF9FEF26C080E00E9433057C0137
  280 +:1011700018161906ECF480EB92E00E940B0DE016B5
  281 +:10118000F10620F00115110589F001C08701A801C1
  282 +:10119000B6018B2D0E943D06219660E4CE010E948F
  283 +:1011A000DD00CE010E94FB008111FBCFC80102C00F
  284 +:1011B00080E090E0DF91CF911F910F91FF90EF9031
  285 +:1011C000DF90CF90BF9008958F929F92BF92CF9261
  286 +:1011D000DF92EF92FF920F931F93CF93DF93B82E7E
  287 +:1011E0004B01EA01790188EB92E00E940B0D8B2DF7
  288 +:1011F0000E94B0008C179D0728F48B2D0E94B00030
  289 +:101200006C0101C06E01F7016081611109C081812B
  290 +:10121000811106C08281811103C08381882331F04E
  291 +:101220000115110519F0C114D10429F5DF93CF93ED
  292 +:101230001F930F93F70183811F928F9382811F92D7
  293 +:101240008F9381811F928F931F926F931F92BF92F2
  294 +:1012500082EC92E09F938F930E94F50C83E292E0E0
  295 +:101260000E940B0D8DB79EB740960FB6F8949EBFA7
  296 +:101270000FBE8DBF49C0CB2DD0E02496DC2FCC27EC
  297 +:10128000CE010C960E94DD00F7016181CE010D9622
  298 +:101290000E94DD00F7016281CE010E960E94DD0002
  299 +:1012A000F7016381CE010F960E94DD00612FCE0110
  300 +:1012B00040960E94DD00602FCE0141960E94DD0025
  301 +:1012C000A601B4018B2D0E94AF058E010F5F1F4F49
  302 +:1012D00060E2C8010E94DD00C8010E94FB0081118C
  303 +:1012E000FBCF2296CE010E94FB0084FD10C0CE01F0
  304 +:1012F0000E94FB0083FFF6CF8EE993E00E940B0D66
  305 +:1013000068E1CE010E94DD0080E090E005C060E170
  306 +:10131000CE010E94DD00C601DF91CF911F910F9198
  307 +:10132000FF90EF90DF90CF90BF909F908F900895A7
  308 +:101330002F923F924F925F926F927F928F929F92E5
  309 +:10134000AF92BF92CF92DF92EF92FF920F931F93D3
  310 +:10135000CF93DF93CDB7DEB72A970FB6F894DEBFF1
  311 +:101360000FBECDBF782E4B016A0179011A8709871C
  312 +:101370000E943305892B09F42BC18AEE92E00E946A
  313 +:101380000B0D872D0E943305682E392ECD2809F4C8
  314 +:1013900017C1472C512C84E0480E511C542C442476
  315 +:1013A000520198E2A90EB11CC5010E94FB00082F52
  316 +:1013B00010E0102F00276201E9E2CE0ED11CC60119
  317 +:1013C0000E94FB00080F111D3F926F921F930F9315
  318 +:1013D00086EF92E09F938F930E94F50CC2010E94CA
  319 +:1013E000FB000F900F900F900F900F900F90877051
  320 +:1013F000833009F464C0843009F4ABC0823009F052
  321 +:10140000D0C028E030E0AE014F5F5F4FB801872DBC
  322 +:101410000E94F6051801F8E02F0E311C8981F701B2
  323 +:1014200080838A8181838B8182838C8183838D8178
  324 +:1014300090E0982F88272E81820F911DE985FA85EB
  325 +:10144000918380830F8110E0102F00278885080F7B
  326 +:10145000111D1F930F9386E193E09F938F930E943A
  327 +:10146000F50CE985FA8581818F9380818F938CE2D9
  328 +:1014700093E09F938F930E94F50CF70183811F9255
  329 +:101480008F9382811F928F9381811F928F9380818E
  330 +:101490001F928F938FE393E09F938F930E94F50C9D
  331 +:1014A0009801A401B101872D0E94F6057101E00E9B
  332 +:1014B000F11E6F2DC5010E94DD006E2D41C026E09A
  333 +:1014C00030E0AE014F5F5F4FB801872D0E94F605F7
  334 +:1014D000180196E0290E311C8981F70180838A81E9
  335 +:1014E00081838B8182838C8183830D8110E0102F17
  336 +:1014F00000278E81080F111D89E593E00E940B0DD6
  337 +:10150000F70183811F928F9382811F928F93818134
  338 +:101510001F928F9380811F928F938FE393E09F930D
  339 +:101520008F930E94F50C9801A401B101872D0E94B0
  340 +:10153000F605200E311E632DC5010E94DD00622DCF
  341 +:10154000C6010E94DD000FB6F894DEBF0FBECDBF0E
  342 +:101550002AC022E030E0AE014F5F5F4FB801872D17
  343 +:101560000E94F605780192E0E90EF11C098110E075
  344 +:10157000902F88270A8110E002501109080F191FC7
  345 +:101580009801A401B701872D0E94F605E00EF11E17
  346 +:101590006F2DC5010E94DD006E2DC6010E94DD0089
  347 +:1015A00002C000E010E0EFEF4E1A5E0A60E4C201F4
  348 +:1015B0000E94DD00C2010E94FB008111FBCF02C02E
  349 +:1015C00000E010E08DE693E00E940B0DC80102C020
  350 +:1015D00080E090E02A960FB6F894DEBF0FBECDBF34
  351 +:1015E000DF91CF911F910F91FF90EF90DF90CF90FF
  352 +:1015F000BF90AF909F908F907F906F905F904F9033
  353 +:101600003F902F900895CF92DF92FF920F931F93F8
  354 +:10161000CF93DF93F82E6B01EA0180E893E00E94FC
  355 +:101620000B0D8F2D0E94B0008C179D0728F48F2D75
  356 +:101630000E94B0008C0101C08E010115110589F4D2
  357 +:101640001F921F92DF93CF938CE893E09F938F9329
  358 +:101650000E94F50C0F900F900F900F900F900F902D
  359 +:1016600030C0A801B6018F2D0E94AF05CF2DD0E06C
  360 +:101670002496DC2FCC276E018FEFC81AD80A60E2BF
  361 +:10168000C6010E94DD00C6010E94FB008111FBCF54
  362 +:101690006E0182E0C80ED11C2396C6010E94FB0099
  363 +:1016A00084FD12C0CE010E94FB00C6010E94FB0017
  364 +:1016B00083FFF3CF8AE993E00E940B0D8F2D0E94E8
  365 +:1016C0008A0680E090E005C060E1C6010E94DD006E
  366 +:1016D000C801DF91CF911F910F91FF90DF90CF90C4
  367 +:1016E0000895CF92DF92EF92FF920F931F93CF93C3
  368 +:1016F000DF936C017B018A01E9010E94C60265E566
  369 +:1017000085E50E946A01C6010E941503C7010E9477
  370 +:101710003803C8010E94C902CE01DF91CF911F9109
  371 +:101720000F91FF90EF90DF90CF900C94FC0280938C
  372 +:10173000BB0084E88093BC008091BC0087FFFCCF95
  373 +:1017400008951092B9008CE08093B80084E08093F3
  374 +:10175000BC000895CF9394EA9093BC009091BC0094
  375 +:1017600097FFFCCF9091B900987F983011F080E0FE
  376 +:1017700015C0C62F880F0E94970B8091B900887FF3
  377 +:101780008831A9F78C2F0E94970B8091B900887F30
  378 +:10179000883269F784E98093BC0081E0CF91089595
  379 +:1017A000CF93DF9394EA9093BC009091BC0097FF95
  380 +:1017B000FCCF9091B900987F983011F080E01EC066
  381 +:1017C000C42FD62F880F0E94970B8091B900887F75
  382 +:1017D0008831A1F78D2F0E94970B8091B900887FE7
  383 +:1017E000883261F78C2F0E94970B8091B900887F17
  384 +:1017F000883221F784E98093BC0081E0DF91CF91AA
  385 +:101800000895092E000CAA0BBB0B9C01AD0184E0CE
  386 +:10181000220F331F441F551F8A95D1F760E074E2F1
  387 +:1018200084EF90E00E94D30C215031093093C50021
  388 +:101830002093C40088E18093C10086E08093C200B9
  389 +:10184000E0ECF0E080818D7F808308959091C0006E
  390 +:1018500095FFFCCF8093C6000895CF93C82F8A30A0
  391 +:1018600019F48DE00E94260C8C2F0E94260C80E03B
  392 +:1018700090E0CF9108958091C00087FFFCCF8091C8
  393 +:10188000C600089580E895E20E94010C82E091E094
  394 +:101890009093ED038093EC030895EF92FF920F93E2
  395 +:1018A0001F93CF93DF93CDB7DEB764970FB6F8944D
  396 +:1018B000DEBF0FBECDBF86E0E0E1F1E0DE011196B4
  397 +:1018C00001900D928A95E1F72CEA2F879AE1988B87
  398 +:1018D00081E9898B3DEC3A8B2B879C878D878EEF36
  399 +:1018E0008E878FEF8F83888789871A860E94420CA4
  400 +:1018F0009E01295F3F4FAE01455F5F4FBE01615FB3
  401 +:101900007F4FCE0101960E94710B20E044EE57E01C
  402 +:1019100062E08091AA030E94AC068823A9F120E02E
  403 +:1019200044EE57E061E0809100010E94AC068823FC
  404 +:1019300059F18AE5E82E81E0F82E08EE13E024EE56
  405 +:1019400033E042E050E0BE016D5E7F4F8091AA031C
  406 +:101950000E9498098C018230910549F481E591E05B
  407 +:101960000E940B0DCE0143960E94530002C0892BAA
  408 +:1019700021F31F930F93FF92EF920E94F50C0F90AB
  409 +:101980000F900F900F90D9CF8FEF9FEF64960FB607
  410 +:10199000F894DEBF0FBECDBFDF91CF911F910F91A5
  411 +:1019A000FF90EF900895A1E21A2EAA1BBB1BFD0128
  412 +:1019B0000DC0AA1FBB1FEE1FFF1FA217B307E4072E
  413 +:1019C000F50720F0A21BB30BE40BF50B661F771F86
  414 +:1019D000881F991F1A9469F7609570958095909566
  415 +:1019E0009B01AC01BD01CF010895A0E0B0E0EBEF99
  416 +:1019F000FCE00C94C90FAE014B5F5F4FFA0161919F
  417 +:101A00007191AF018091EC039091ED030E943B0D29
  418 +:101A1000E2E00C94E50F0F931F93CF93DF93E091D7
  419 +:101A2000EC03F091ED03238121FF1BC08C01D0E07A
  420 +:101A3000C0E0F80181918F016091EC037091ED039A
  421 +:101A4000DB011896ED91FC911997882331F00995E7
  422 +:101A5000892B79F3DFEFCFEFECCF8AE00995892B63
  423 +:101A600019F08FEF9FEF02C08D2F9C2FDF91CF9148
  424 +:101A70001F910F910895ACE0B0E0E1E4FDE00C941B
  425 +:101A8000B90F7C016B018A01FC01178216828381E8
  426 +:101A900081FFBDC1CE0101964C01F7019381F60192
  427 +:101AA00093FD859193FF81916F01882309F4ABC168
  428 +:101AB000853239F493FD859193FF81916F018532D1
  429 +:101AC00029F4B70190E00E94230FE7CF512C312C6D
  430 +:101AD00020E02032A0F48B3269F030F4803259F0EB
  431 +:101AE000833269F420612CC08D3239F0803339F4AF
  432 +:101AF000216026C02260246023C0286021C027FD09
  433 +:101B000027C030ED380F3A3078F426FF06C0FAE0EF
  434 +:101B10005F9E300D1124532E13C08AE0389E300D85
  435 +:101B20001124332E20620CC08E3221F426FD6BC1AD
  436 +:101B3000206406C08C3611F4206802C0883641F457
  437 +:101B4000F60193FD859193FF81916F018111C1CFC2
  438 +:101B5000982F9F7D9554933028F40C5F1F4FFFE31F
  439 +:101B6000F9830DC0833631F0833771F0833509F086
  440 +:101B70005BC022C0F801808189830E5F1F4F44241F
  441 +:101B80004394512C540115C03801F2E06F0E711CC2
  442 +:101B9000F801A080B18026FF03C0652D70E002C06F
  443 +:101BA0006FEF7FEFC5012C870E94180F2C01830176
  444 +:101BB0002C852F77222E17C03801F2E06F0E711C92
  445 +:101BC000F801A080B18026FF03C0652D70E002C03F
  446 +:101BD0006FEF7FEFC5012C870E940D0F2C012C8524
  447 +:101BE0002068222E830123FC1BC0832D90E0481621
  448 +:101BF0005906B0F4B70180E290E00E94230F3A94B6
  449 +:101C0000F4CFF50127FC859127FE81915F01B70193
  450 +:101C100090E00E94230F31103A94F1E04F1A5108DE
  451 +:101C20004114510471F7E5C0843611F0893639F555
  452 +:101C3000F80127FF07C060817181828193810C5F69
  453 +:101C40001F4F08C060817181072E000C880B990B13
  454 +:101C50000E5F1F4F2F76722E97FF09C090958095CB
  455 +:101C6000709561957F4F8F4F9F4F2068722E2AE0AD
  456 +:101C700030E0A4010E945B0FA82EA81844C085374D
  457 +:101C800029F42F7EB22E2AE030E025C0F22FF97F12
  458 +:101C9000BF2E8F36C1F018F4883579F0B4C0803784
  459 +:101CA00019F0883721F0AFC02F2F2061B22EB4FE7B
  460 +:101CB0000DC08B2D8460B82E09C024FF0AC09F2F51
  461 +:101CC0009660B92E06C028E030E005C020E130E083
  462 +:101CD00002C020E132E0F801B7FE07C060817181E7
  463 +:101CE000828193810C5F1F4F06C06081718180E00B
  464 +:101CF00090E00E5F1F4FA4010E945B0FA82EA81852
  465 +:101D0000FB2DFF777F2E76FE0BC0372D3E7FA5146F
  466 +:101D100050F474FE0AC072FC08C0372D3E7E05C028
  467 +:101D2000BA2C372D03C0BA2C01C0B52C34FF0DC01E
  468 +:101D3000FE01EA0DF11D8081803311F4397E09C066
  469 +:101D400032FF06C0B394B39404C0832F867809F0A1
  470 +:101D5000B39433FD13C030FF06C05A2CB31418F4EB
  471 +:101D6000530C5B18B32CB31468F4B70180E290E015
  472 +:101D70003C870E94230FB3943C85F5CFB31410F435
  473 +:101D80003B1801C0312C34FF12C0B70180E390E052
  474 +:101D90003C870E94230F3C8532FF17C031FD03C0F2
  475 +:101DA00088E790E002C088E590E0B7010CC0832F7F
  476 +:101DB000867859F031FF02C08BE201C080E237FD26
  477 +:101DC0008DE2B70190E00E94230FA51438F4B7010B
  478 +:101DD00080E390E00E94230F5A94F7CFAA94F40175
  479 +:101DE000EA0DF11D8081B70190E00E94230FA11040
  480 +:101DF000F5CF332009F451CEB70180E290E00E9484
  481 +:101E0000230F3A94F6CFF7018681978102C08FEFB6
  482 +:101E10009FEF2C96E2E10C94D50FFC0105906150E8
  483 +:101E200070400110D8F7809590958E0F9F1F0895F0
  484 +:101E3000FC016150704001900110D8F78095909599
  485 +:101E40008E0F9F1F08950F931F93CF93DF93FB0176
  486 +:101E5000238121FD03C08FEF9FEF28C022FF16C012
  487 +:101E600046815781248135814217530744F4A0816C
  488 +:101E7000B1819D012F5F3F4F318320838C93268159
  489 +:101E800037812F5F3F4F3783268310C0EB01092F27
  490 +:101E9000182F0084F185E02D0995892BE1F68E81BC
  491 +:101EA0009F8101969F838E83812F902FDF91CF9109
  492 +:101EB0001F910F910895FA01AA27283051F120317E
  493 +:101EC00081F1E8946F936E7F6E5F7F4F8F4F9F4FCE
  494 +:101ED000AF4FB1E03ED0B4E03CD0670F781F891F10
  495 +:101EE0009A1FA11D680F791F8A1F911DA11D6A0FDE
  496 +:101EF000711D811D911DA11D20D009F468943F9191
  497 +:101F00002AE0269F11243019305D3193DEF6CF018F
  498 +:101F10000895462F4770405D4193B3E00FD0C9F755
  499 +:101F2000F6CF462F4F70405D4A3318F0495D31FDC2
  500 +:101F30004052419302D0A9F7EACFB4E0A695979515
  501 +:101F4000879577956795BA95C9F7009761057105EB
  502 +:101F500008959B01AC010A2E069457954795379535
  503 +:101F60002795BA95C9F7620F731F841F951FA01D8F
  504 +:101F700008952F923F924F925F926F927F928F922D
  505 +:101F80009F92AF92BF92CF92DF92EF92FF920F9308
  506 +:101F90001F93CF93DF93CDB7DEB7CA1BDB0B0FB612
  507 +:101FA000F894DEBF0FBECDBF09942A8839884888CF
  508 +:101FB0005F846E847D848C849B84AA84B984C88465
  509 +:101FC000DF80EE80FD800C811B81AA81B981CE0F5C
  510 +:101FD000D11D0FB6F894DEBF0FBECDBFED01089541
  511 +:041FE000F894FFCFA3
  512 +:101FE400010100000002000000002D0C00000000B0
  513 +:101FF400A0BDCDDDEDFD52455155455354205354FC
  514 +:102004004154555300534554202F20554E534554A5
  515 +:1020140020534C454550004D4F44452045564549B5
  516 +:102024004C4C45004D4F444520534F4D4D45494C74
  517 +:1020340000524543454956454400204441544153C8
  518 +:10204400495A45203D2025640A00737973696E69F5
  519 +:102054007428290D004368616E6E656C203A205324
  520 +:10206400454E44204D454D2053495A45203A20526F
  521 +:10207400454356204D454D2053495A450D0025648E
  522 +:10208400203A20252E3478203A20252E3478203A00
  523 +:1020940020252E3478203A20252E34780D0A004944
  524 +:1020A40053525F52583A2072645F707472203A201F
  525 +:1020B400252E34780D0A00636C6F736528290D0092
  526 +:1020C400736F636B657428290D00536E5F53522040
  527 +:1020D4003D20252E3278202C2050726F746F636F50
  528 +:1020E4006C203D20252E32780D0A006C69737465CE
  529 +:1020F4006E28290D00737461747573203D20257852
  530 +:102104000D0A004661696C5B696E76616C696420D6
  531 +:1021140069702C706F72745D0D0061636365707417
  532 +:1021240028290D004661696C5B6E6F74206C6973BD
  533 +:1021340074656E696E675D0D00646973636F6E6EBE
  534 +:1021440065637428290D00736F636B6574202564BF
  535 +:10215400206672656573697A652825642920656D32
  536 +:10216400707479206F72206572726F720D0A005359
  537 +:102174004F434B5F434C4F5345442E0D0042616423
  538 +:1021840020737461747573203D20253032780A0001
  539 +:102194007265637628290D0073656E64746F28294F
  540 +:1021A4000D002564204661696C5B252E32782E254E
  541 +:1021B4002E32782E252E32782E252E32782C20257C
  542 +:1021C4002E642C2025645D0D0A00726563766672A8
  543 +:1021D4006F6D28290D004953525F52583A2072649A
  544 +:1021E4005F707472203A20252E34782073697A65E2
  545 +:1021F4003D25640D0A00554450206D736720232546
  546 +:102204006420617272697665640D0A00736F757279
  547 +:10221400636520506F7274203A2025750D0A00738F
  548 +:102224006F75726365204950203A2025642E256419
  549 +:102234002E25642E25640D0A004950205241572052
  550 +:102244006D736720617272697665640D00726563EF
  551 +:102254007666726F6D282920656E64202E2E0D001F
  552 +:1022640069676D7073656E6428290D0025642046C6
  553 +:1022740061696C5B25645D0D0A0069676D70736547
  554 +:0A2284006E64206661696C2E0D0087
548 :00000001FF 555 :00000001FF
Tangible/tangibleInterface.o 100755 → 100644
No preview for this file type
@@ -14,15 +14,18 @@ LDFLAGS=-lpthread @@ -14,15 +14,18 @@ LDFLAGS=-lpthread
14 14
15 all: $(LIB) 15 all: $(LIB)
16 16
17 -$(LIB): threadSocket.o 17 +$(LIB): http.o threadSocket.o
18 rm -f $@ 18 rm -f $@
19 $(CLIBS) $(LDIR)$@ $^ 19 $(CLIBS) $(LDIR)$@ $^
20 ranlib $(LDIR)$@ 20 ranlib $(LDIR)$@
21 rm -f *.o 21 rm -f *.o
22 - 22 +
  23 +
23 threadSocket.o: threadSocket.c 24 threadSocket.o: threadSocket.c
24 - $(CC) -o $@ -c $^ $(CFLAGS) $(LDFLAGS) 25 + $(CC) -o $@ -c $^ -I$(IDIR) $(CFLAGS)
25 26
  27 +http.o: ../Sioux/http.c
  28 + $(CC) -o $@ -c $^ -I$(IDIR) $(CFLAGS)
26 29
27 # 30 #
28 # La cible de nettoyage 31 # La cible de nettoyage
Threads/Page.html 100644 → 100755
Threads/threadSocket.c 100644 → 100755
  1 +#include <sys/types.h>
  2 +#include <sys/socket.h>
  3 +#include <arpa/inet.h>
  4 +#include <netdb.h>
1 #include <stdio.h> 5 #include <stdio.h>
2 #include <stdlib.h> 6 #include <stdlib.h>
3 #include <pthread.h> 7 #include <pthread.h>
4 #include <string.h> 8 #include <string.h>
5 #include <unistd.h> 9 #include <unistd.h>
  10 +#include <time.h>
  11 +#include "http.h"
  12 +#include "libnet.h"
  13 +#include "libthrd.h"
6 14
7 -#define BUFF_SIZE 1000  
8 15
  16 +void vider_interfaces(struct interface_info* interfaces[20])
  17 +{
  18 + for(int i=0; i<20; i++)
  19 + {
  20 + if(interfaces[i]!=NULL)
  21 + {
  22 + free(interfaces[i]);
  23 + interfaces[i]=NULL;
  24 + }
  25 + }
  26 +}
9 27
10 28
  29 +int httpReponse(FILE* sockdial_stream, struct interface_info* interfaces[20])
  30 +{
  31 + char message[]={0x00,0x00};
11 32
12 -struct PageWeb  
13 -{  
14 - int size;  
15 - char* html_contents;  
16 -}; 33 + sendUDPBroadcast(message, 2020);
17 34
  35 + struct PageWeb* page;
18 36
  37 + sleep(0.5); // Temps d'attente avant de recevoir les informations
19 38
  39 + createPage(&page, interfaces); // Permet de creer la pageweb (http.c)
20 40
21 -void freePage(struct PageWeb** page)  
22 -{  
23 - if(*page!=NULL)  
24 - {  
25 - if((*page)->html_contents!=NULL) free((*page)->html_contents);  
26 - free(*page);  
27 - }  
28 -} 41 + char buffer[BUFF_SIZE]; // Le buffer de message pour l'emission
  42 + // char buff_rec[BUFF_SIZE]; // Le buffer de message à la reception
29 43
  44 + strcat(buffer,"HTTP/1.1 200 OK\r\nServer: Serveur Sioux\r\nContent-Type: text/html; charset=UTF-8\r\nConnection: Keep-alive\r\n\r\n"); // Header HTTP
30 45
  46 + fprintf(sockdial_stream, "%s", buffer);
31 47
32 -void getWeb(char* pageName, struct PageWeb** page)  
33 -{  
34 - *page=malloc(sizeof(struct PageWeb)); 48 + strcpy(buffer, page->html_contents);
35 49
36 - FILE* pageFile=fopen(pageName, "r+"); 50 + fprintf(sockdial_stream, "%s", buffer);
37 51
38 - if(pageFile!=NULL)  
39 - {  
40 - fseek(pageFile, 0L, SEEK_END);  
41 - long nbr_char=ftell(pageFile);  
42 - fseek(pageFile, 0L, SEEK_SET); 52 + freePage(&page);
43 53
  54 + return 0;
  55 +}
44 56
45 - (*page)->html_contents=malloc(nbr_char*sizeof(char));  
46 - fread(((*page)->html_contents),1,nbr_char,pageFile);  
47 57
48 - (*page)->size=strlen(((*page)->html_contents));  
49 - fclose(pageFile);  
50 - }  
51 - else 58 +
  59 +
  60 +int interfaceReponse(FILE* sockdial_stream, char packet[BUFF_SIZE], struct interface_info* interfaces[20], char adresse[20])
  61 +{
  62 + printf("Interface : %s - Adresse : %s\n", packet, adresse);
  63 +
  64 + char buffer[BUFF_SIZE];
  65 +
  66 + int i=0;
  67 + while(interfaces[i]!=NULL && strcmp(adresse,interfaces[i]->adresse)!=0)
52 { 68 {
53 - char erreur[]="<h1> 404 PAGE NOT FOUND </h1>\r\n\r\n La page que vous cherchez n'a pas été trouvée, sans doute parce que vous êtes nul.";  
54 - (*page)->html_contents=malloc(strlen(erreur)*sizeof(char));  
55 - strcpy((*page)->html_contents, erreur); 69 + i++;
56 } 70 }
57 71
58 -} 72 + if(interfaces[0]!=NULL)
  73 + printf("Il y a %d associations\n", i+1);
  74 + else
  75 + printf("Il n'y aucune association\n");
59 76
60 77
  78 + if(interfaces[i]!=NULL)
  79 + interfaces[i]->status=-1;
61 80
62 81
63 -void* reponseConnexion(void* sock)  
64 -{  
65 - printf("Connected\n"); // Affiche le fait que qqn soit connecté 82 + if(strlen(packet)>=2 && packet[0]=='A' && (packet[1]=='A' || packet[1]=='B') )
  83 + {
  84 + //L'interface a correctement répondu, on la rajoute à la liste des interfaces
  85 + printf("L'interface a correctement répondu\n");
66 86
67 - struct PageWeb* page; 87 + if(interfaces[i]==NULL)
  88 + {
  89 + interfaces[i]=malloc(sizeof(struct interface_info));
  90 + strcpy(interfaces[i]->adresse, adresse);
  91 + }
68 92
69 - getWeb("../Sioux/Page.html", &page); 93 + if(packet[1]==0x01)
  94 + interfaces[i]->status=1;
  95 + else
  96 + interfaces[i]->status=0;
70 97
71 - char buff_rec[BUFF_SIZE];  
72 - char buffer[BUFF_SIZE]; 98 + }
  99 + else // L'interface n a pas correctement répondu
  100 + return -1;
73 101
74 - strcat(buffer,"HTTP/1.1 200 OK\r\nServer: Serveur fait maison\r\nContent-Type: text/html; charset=UTF-8\r\nConnection: Keep-alive\r\n\r\n");  
75 - strcat(buffer, page->html_contents);  
76 102
77 - freePage(&page);  
78 103
79 - FILE* sockdial_stream = fdopen(*((int*)(sock)), "a+");  
80 -  
81 - printf("Sock : %d // Stream : %p \n", *((int*)(sock)), sockdial_stream);  
82 -  
83 - fprintf(sockdial_stream, "%s", buffer); 104 + strcpy(buffer, "\x60\x00"); // Demande la commande en mémoire
  105 +
  106 + fprintf(sockdial_stream, "%s", buffer); // Transmission du message
  107 +
  108 + fgets(packet, BUFF_SIZE, sockdial_stream); // Attente de reception du message
  109 +
  110 +
84 111
85 - printf("WAIT\n"); 112 + if( strlen(packet)>=2 && (packet[0]&0xE0)==0x10 )
  113 + interfaces[i]->commande = (packet[0]&0x01)*256+packet[1];
  114 + else
  115 + {
  116 + interfaces[i]->commande = -1;
  117 + return -1; // Si le message n'est pas reçu correctement
  118 + }
  119 +
  120 + return 0;
  121 +}
  122 +
  123 +
  124 +
  125 +void* reponseConnexion(void* arg_sock_interf)
  126 +{
  127 + Arg_Thread *argument=(Arg_Thread*)(arg_sock_interf);
  128 + int sock=argument->socket;
  129 +
  130 + printf("Connected\n"); // Affiche le fait que qqn soit connecté
  131 +
  132 + FILE* sockdial_stream = fdopen(sock, "a+");
  133 +
  134 + char buff_rec[BUFF_SIZE]; // Le buffer de message à la reception
  135 + // char buffer[BUFF_SIZE]; // Le buffer de message pour l'emission
86 136
87 fgets(buff_rec, BUFF_SIZE, sockdial_stream); 137 fgets(buff_rec, BUFF_SIZE, sockdial_stream);
88 138
89 - printf("Le message reçu : %s", buff_rec); 139 + printf("Le message reçu : %s\n", buff_rec);
90 140
91 - fprintf(sockdial_stream, "Ceci est une réponse du serveur TCP.\n"); 141 + //Distingue la requête HTTP...
  142 + if(strstr(buff_rec, "GET")!=NULL && strstr(buff_rec, "HTTP")!=NULL)
  143 + {
  144 + vider_interfaces(argument->interfaces);
  145 + httpReponse(sockdial_stream, argument->interfaces);
  146 + }
  147 + else //.. d'une requête interface
  148 + {
  149 + struct sockaddr_storage tmp_addr;
  150 + socklen_t addr_len=sizeof(tmp_addr);
  151 + if(getpeername(sock, (struct sockaddr*)&tmp_addr, &addr_len)==0)
  152 + {
  153 + char adresse[20];
  154 + sprintf(adresse, "%s", inet_ntoa(((struct sockaddr_in*)&tmp_addr)->sin_addr));
  155 + interfaceReponse(sockdial_stream, buff_rec, argument->interfaces, adresse);
  156 + }
  157 + }
  158 +
  159 + printf("Sock : %d // Stream : %p \n", sock, sockdial_stream);
92 160
93 - strcpy(buffer, "START");  
94 printf("Fin de la connexion\n"); 161 printf("Fin de la connexion\n");
  162 +
95 fclose(sockdial_stream); 163 fclose(sockdial_stream);
  164 +
96 pthread_exit(NULL); 165 pthread_exit(NULL);
97 } 166 }
98 167
99 168
100 169
101 -  
102 int lanceThread(void(* fonction) (void *), void* arg, int size) 170 int lanceThread(void(* fonction) (void *), void* arg, int size)
103 { 171 {
104 pthread_t thr_id; 172 pthread_t thr_id;
bin/Makefile 100644 → 100755
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 CC=gcc 2 CC=gcc
3 CFLAGS=-W -Wall -Wextra -g 3 CFLAGS=-W -Wall -Wextra -g
4 CLIBS=ar -rcs 4 CLIBS=ar -rcs
5 -LIB=libnet.a 5 +LIB=libnet.a libthrd.a
6 LDIR=../libs/ 6 LDIR=../libs/
7 LIBS=$(LDIR)libnet.a $(LDIR)libthrd.a 7 LIBS=$(LDIR)libnet.a $(LDIR)libthrd.a
8 IDIR=../includes/ 8 IDIR=../includes/
@@ -10,9 +10,16 @@ LDFLAGS=-lpthread -lpcap @@ -10,9 +10,16 @@ LDFLAGS=-lpthread -lpcap
10 10
11 11
12 12
13 -all: test 13 +all: sonde serverTCP
14 14
15 -test: test.c 15 +serverTCP: serverTCP.c
  16 + cd ../Threads/ && make
  17 + cd ../Network/ && make
  18 + $(CC) -o $@ $< -I$(IDIR) -L$(LDIR) $(LDIR)libthrd.a $(LDIR)libnet.a $(CFLAGS) $(LDFLAGS)
  19 + rm -f *.o
  20 +
  21 +
  22 +sonde: sonde.c
16 cd ../Threads/ && make 23 cd ../Threads/ && make
17 cd ../Network/ && make 24 cd ../Network/ && make
18 $(CC) -o $@ $< -I$(IDIR) $(LDIR)libnet.a $(LDIR)libthrd.a $(CFLAGS) $(LDFLAGS) 25 $(CC) -o $@ $< -I$(IDIR) $(LDIR)libnet.a $(LDIR)libthrd.a $(CFLAGS) $(LDFLAGS)
@@ -25,5 +32,9 @@ test: test.c @@ -25,5 +32,9 @@ test: test.c
25 clean: 32 clean:
26 cd ../Threads/ && make clean 33 cd ../Threads/ && make clean
27 cd ../Network/ && make clean 34 cd ../Network/ && make clean
28 - rm -f *.o test 35 + rm -f *.o sonde serverTCP
  36 +
  37 +
  38 +# cd ../Threads/ && make
  39 +# cd ../Network/ && make
29 40
bin/serverTCP 0 → 100755
No preview for this file type
bin/test.c renamed to bin/serverTCP.c
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 #include <string.h> 5 #include <string.h>
6 #include <signal.h> 6 #include <signal.h>
7 #include "libnet.h" 7 #include "libnet.h"
8 - 8 +#include <time.h>
9 9
10 int sock_fd; 10 int sock_fd;
11 11
@@ -24,7 +24,7 @@ void handler(int sig) @@ -24,7 +24,7 @@ void handler(int sig)
24 24
25 void argPortParsing(int argc, char* argv[], char* port) 25 void argPortParsing(int argc, char* argv[], char* port)
26 { 26 {
27 - struct option port_arg={"port", 1, NULL, 'p'}; 27 + struct option port_arg={"port", 1, NULL, 'p'}; //
28 char opt; 28 char opt;
29 int longindex; 29 int longindex;
30 30
@@ -32,7 +32,7 @@ void argPortParsing(int argc, char* argv[], char* port) @@ -32,7 +32,7 @@ void argPortParsing(int argc, char* argv[], char* port)
32 32
33 if(opt=='p') 33 if(opt=='p')
34 { 34 {
35 - strcpy(port, optarg); 35 + strcpy(port, optarg); //optarg est une variable instanciée dans la librairie getopt
36 printf("%s\n", optarg); 36 printf("%s\n", optarg);
37 } 37 }
38 else 38 else
@@ -44,6 +44,7 @@ void argPortParsing(int argc, char* argv[], char* port) @@ -44,6 +44,7 @@ void argPortParsing(int argc, char* argv[], char* port)
44 44
45 int main(int argc, char* argv[]) 45 int main(int argc, char* argv[])
46 { 46 {
  47 +
47 char port[10]="80"; 48 char port[10]="80";
48 argPortParsing(argc, argv, port); 49 argPortParsing(argc, argv, port);
49 50
@@ -53,10 +54,7 @@ int main(int argc, char* argv[]) @@ -53,10 +54,7 @@ int main(int argc, char* argv[])
53 if( (sock_fd=initialisationServeur(port)) ==-1 ) { fprintf(stderr, "Initialisation du serveur impossible\n"); return -1; } 54 if( (sock_fd=initialisationServeur(port)) ==-1 ) { fprintf(stderr, "Initialisation du serveur impossible\n"); return -1; }
54 55
55 boucleServeur(sock_fd, (void*)&reponseConnexion); 56 boucleServeur(sock_fd, (void*)&reponseConnexion);
56 -  
57 57
58 - sendUDPBroadcast("BroadWesh", 2020);  
59 - sendUDPUnicast("192.168.0.37", "Coucou", 2020);  
60 return 0; 58 return 0;
61 } 59 }
62 60
bin/sonde 0 → 100755
No preview for this file type
bin/sonde.c 0 → 100755
@@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
  1 +#include <stdlib.h>
  2 +#include <stdio.h>
  3 +#include <unistd.h>
  4 +#include <getopt.h>
  5 +#include <string.h>
  6 +#include <signal.h>
  7 +#include "libnet.h"
  8 +#include <time.h>
  9 +
  10 +int sock_fd;
  11 +
  12 +struct sigaction action;
  13 +
  14 +void handler(int sig)
  15 +{
  16 + if(sig==SIGINT)
  17 + {
  18 + printf("\nINTERRUPTION SOCKET : %d\n\n", sock_fd);
  19 + close(sock_fd);
  20 + exit(1);
  21 + }
  22 +}
  23 +
  24 +
  25 +void argPortParsing(int argc, char* argv[], char* port)
  26 +{
  27 + struct option port_arg={"port", 1, NULL, 'p'}; //
  28 + char opt;
  29 + int longindex;
  30 +
  31 + while( (opt=getopt_long(argc, argv, "p:", &port_arg, &longindex)) !='p' && opt!=-1) {}
  32 +
  33 + if(opt=='p')
  34 + {
  35 + strcpy(port, optarg);
  36 + printf("%s\n", optarg);
  37 + }
  38 + else
  39 + {
  40 + printf("La syntaxe doit être de la forme %s -p <port> ou %s --port <port>\n\n", argv[0], argv[0]);
  41 + }
  42 +}
  43 +
  44 +
  45 +int main(int argc, char* argv[])
  46 +{
  47 +/*
  48 + char port[10]="80";
  49 + argPortParsing(argc, argv, port);
  50 +
  51 + action.sa_handler=&handler;
  52 + sigaction(SIGINT, &action, NULL);
  53 +
  54 + if( (sock_fd=initialisationServeur(port)) ==-1 ) { fprintf(stderr, "Initialisation du serveur impossible\n"); return -1; }
  55 +
  56 + boucleServeur(sock_fd, (void*)&reponseConnexion);
  57 +
  58 +
  59 + sendUDPBroadcast("BroadWesh", 2020);
  60 + sendUDPUnicast("192.168.0.37", "Coucou", 2020);
  61 + */
  62 +
  63 + char msg[2] = {0x40,0x01};
  64 +
  65 + while(1)
  66 + {
  67 + if(ecouteReseau(argc, argv)!=0){ return -1;}
  68 + if(sendUDPBroadcast(msg, 2020)){ return -1;}
  69 + //sendUDPUnicast("172.26.145.205",msg, 2020);
  70 + }
  71 + return 0;
  72 +}
  73 +
bin/test deleted
No preview for this file type
includes/http.h 0 → 100644
@@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
  1 +#ifndef __HTTP_H__
  2 +#define __HTTP_H__
  3 +
  4 +#include <stdio.h>
  5 +#include <stdlib.h>
  6 +#include <pthread.h>
  7 +#include <string.h>
  8 +#include <unistd.h>
  9 +#include <time.h>
  10 +
  11 +
  12 +#define BUFF_SIZE 100000
  13 +
  14 +
  15 +struct interface_info
  16 +{
  17 + char adresse[20];
  18 + int status;
  19 + int commande;
  20 +};
  21 +
  22 +
  23 +
  24 +struct PageWeb
  25 +{
  26 + int size;
  27 + char* html_contents;
  28 +};
  29 +
  30 +
  31 +
  32 +void freePage(struct PageWeb** page);
  33 +void getWeb(char* pageName, struct PageWeb** page);
  34 +void createPage(struct PageWeb** page, struct interface_info* interfaces[20]);
  35 +
  36 +#endif
includes/libnet.h 100644 → 100755
1 #ifndef __LIBNET_H__ 1 #ifndef __LIBNET_H__
2 #define __LIBNET_H__ 2 #define __LIBNET_H__
3 3
  4 +#include <pcap.h>
  5 +
  6 +
4 int boucleServeur(int socket, void(* fctConnex)(int)); 7 int boucleServeur(int socket, void(* fctConnex)(int));
5 int lanceThread(void(* fonction) (void *), void* arg, int size); 8 int lanceThread(void(* fonction) (void *), void* arg, int size);
6 void* reponseConnexion(void* sock); 9 void* reponseConnexion(void* sock);
@@ -8,6 +11,10 @@ int initialisationServeur(char* service); @@ -8,6 +11,10 @@ int initialisationServeur(char* service);
8 int initializeSocketUDP(char* service); 11 int initializeSocketUDP(char* service);
9 int sendUDPBroadcast(char* message, int port); 12 int sendUDPBroadcast(char* message, int port);
10 int sendUDPUnicast(char* address, char* message, int port); 13 int sendUDPUnicast(char* address, char* message, int port);
  14 +void arp_detect(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);
  15 +int initialize_sniffer(pcap_t** dev_handle, char dev[]);
  16 +int ecouteReseau(int argc, char* argv[]);
  17 +
11 18
12 19
13 #endif 20 #endif
includes/libthrd.h 100644 → 100755
1 #ifndef __LIBTHRD_H__ 1 #ifndef __LIBTHRD_H__
2 #define __LIBTHRD_H__ 2 #define __LIBTHRD_H__
3 3
4 -void* reponseConnexion(void* sock); 4 +#include "http.h"
  5 +
  6 +typedef struct{int socket; struct interface_info* interfaces[20];} Arg_Thread;
  7 +
  8 +void* reponseConnexion(void* arg_sock_interf);
5 9
6 int lanceThread(void(* fonction) (void *), void* arg, int size); 10 int lanceThread(void(* fonction) (void *), void* arg, int size);
7 11
libs/libnet.a
No preview for this file type
libs/libthrd.a
No preview for this file type