Commit a69a94a7be2bbd51fb9c7aaf1b69b39db37babe0

Authored by skhinach
2 parents 6ebb4a20 8a59b888

Ajout de gestion de requêtes

Sioux/client.c renamed to Network/client.c
Network/sender.c
... ... @@ -20,8 +20,8 @@ int initializeSocketUDP(char* service)
20 20 precisions.ai_socktype = SOCK_DGRAM;
21 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 26 int n=0;
27 27  
... ... @@ -46,7 +46,10 @@ int initializeSocketUDP(char* service)
46 46  
47 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 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 63 {
61 64 static struct sockaddr_in addrUDP;
62 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 68 struct in_addr tmpadd={0xffffffff};
66 69 addrUDP.sin_addr=tmpadd;
... ... @@ -110,3 +113,4 @@ int main(void)
110 113 }
111 114  
112 115 */
  116 +
... ...
Network/sender.o deleted
No preview for this file type
Network/sniffer.c
... ... @@ -5,62 +5,42 @@
5 5 #include <netinet/in.h>
6 6 #include <arpa/inet.h>
7 7  
8   -#define SZ_DEV 10
  8 +#define SZ_DEV_PCAP 10
  9 +
9 10  
10   -/*
11 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 14 static int num=0, loop=1;
15 15 num++;
16 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 23 bpf_u_int32 mask; // Masque de l'adresse réseau de l'interface à sniffer
29 24 bpf_u_int32 net; // Adresse réseau de l'interface à sniffer
30 25  
31 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 28 struct bpf_program filter; // Filtre défini par une structure
37 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 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 35 // Permet d'obtenir l'adresse ip de l'interface demandée*/
59 36 /* pcap permet de lister les interfaces et obtenir les adresses ip de ces dernières
60 37 * On utilise la fonction pcap_findalldevs
61   - *//*
  38 + */
  39 +
  40 +
62 41  
63 42 pcap_if_t* interfaces;
  43 +
64 44 if(pcap_findalldevs(&interfaces, buf_err)!=0) { printf("%s\n", buf_err); return(EXIT_FAILURE); }
65 45  
66 46 for(pcap_if_t* i=interfaces; i!=NULL; i=i->next)
... ... @@ -82,7 +62,7 @@ int main(int argc, char *argv[])
82 62  
83 63  
84 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 67 //printf("%s\n", buf_err);
88 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 71  
92 72  
93 73 // Activation du device
94   - if ((status=pcap_activate(dev_handle))!=0)
  74 + if ((status=pcap_activate(*dev_handle))!=0)
95 75 {
96 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 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 95 char filter_str[50]="arp";
115 96 if( strcmp(ip,"null")!=0 )
116 97 {
... ... @@ -120,26 +101,74 @@ int main(int argc, char *argv[])
120 101  
121 102  
122 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 107 return(EXIT_FAILURE);
127 108 }
128 109  
129 110  
130 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 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 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 65 {
66 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 78 printf("------- Début boucle serveur TCP -------\n\n");
69 79  
70 80 while(1)
... ... @@ -73,7 +83,9 @@ int boucleServeur(int socket, void(* fctConnex)(int))
73 83 if((sock_dial=accept(socket, NULL, NULL)) < 0){ fprintf(stderr, "Error accept dialogue\n"); return -1; }
74 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 @@
  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 3 <head>
4 4 <meta charset ="utf-8">
5 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 106 </meta>
7 107 </head>
8 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 134 </body>
10 135 </html>
... ...
Sioux/Tableau.css 0 → 100644
... ... @@ -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 @@
  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   -#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 1 #include <avr/io.h>
2 2 #include <util/delay.h>
3 3 #include <stdio.h>
4   -
  4 +#include <string.h>
  5 +#include <stdlib.h>
  6 +#include <stdbool.h>
5 7 #include "serial.h"
6 8 #include "ethernet.h"
7 9 #include "w5100.h"
... ... @@ -9,65 +11,102 @@
9 11  
10 12 #define MAC_SIZE 6
11 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 80 uint8_t mac[MAC_SIZE] = {0xA0,0xBD,0xCD,0xDD,0xED,0xFD};
17 81 uint8_t ip[IPV4_SIZE] = {172,26,145,205};
18 82 uint8_t gateway[4] = {172,26,145,254};
19 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 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 5 :100040000C9451000C9451000C9451000C945100EC
6 6 :100050000C9451000C9451000C9451000C945100DC
7 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 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 555 :00000001FF
... ...
Tangible/tangibleInterface.o 100755 → 100644
No preview for this file type
Threads/Makefile
... ... @@ -14,15 +14,18 @@ LDFLAGS=-lpthread
14 14  
15 15 all: $(LIB)
16 16  
17   -$(LIB): threadSocket.o
  17 +$(LIB): http.o threadSocket.o
18 18 rm -f $@
19 19 $(CLIBS) $(LDIR)$@ $^
20 20 ranlib $(LDIR)$@
21 21 rm -f *.o
22   -
  22 +
  23 +
23 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 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 5 #include <stdio.h>
2 6 #include <stdlib.h>
3 7 #include <pthread.h>
4 8 #include <string.h>
5 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 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 161 printf("Fin de la connexion\n");
  162 +
95 163 fclose(sockdial_stream);
  164 +
96 165 pthread_exit(NULL);
97 166 }
98 167  
99 168  
100 169  
101   -
102 170 int lanceThread(void(* fonction) (void *), void* arg, int size)
103 171 {
104 172 pthread_t thr_id;
... ...
bin/Makefile 100644 → 100755
... ... @@ -2,7 +2,7 @@
2 2 CC=gcc
3 3 CFLAGS=-W -Wall -Wextra -g
4 4 CLIBS=ar -rcs
5   -LIB=libnet.a
  5 +LIB=libnet.a libthrd.a
6 6 LDIR=../libs/
7 7 LIBS=$(LDIR)libnet.a $(LDIR)libthrd.a
8 8 IDIR=../includes/
... ... @@ -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 23 cd ../Threads/ && make
17 24 cd ../Network/ && make
18 25 $(CC) -o $@ $< -I$(IDIR) $(LDIR)libnet.a $(LDIR)libthrd.a $(CFLAGS) $(LDFLAGS)
... ... @@ -25,5 +32,9 @@ test: test.c
25 32 clean:
26 33 cd ../Threads/ && make clean
27 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 5 #include <string.h>
6 6 #include <signal.h>
7 7 #include "libnet.h"
8   -
  8 +#include <time.h>
9 9  
10 10 int sock_fd;
11 11  
... ... @@ -24,7 +24,7 @@ void handler(int sig)
24 24  
25 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 28 char opt;
29 29 int longindex;
30 30  
... ... @@ -32,7 +32,7 @@ void argPortParsing(int argc, char* argv[], char* port)
32 32  
33 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 36 printf("%s\n", optarg);
37 37 }
38 38 else
... ... @@ -44,6 +44,7 @@ void argPortParsing(int argc, char* argv[], char* port)
44 44  
45 45 int main(int argc, char* argv[])
46 46 {
  47 +
47 48 char port[10]="80";
48 49 argPortParsing(argc, argv, port);
49 50  
... ... @@ -53,10 +54,7 @@ int main(int argc, char* argv[])
53 54 if( (sock_fd=initialisationServeur(port)) ==-1 ) { fprintf(stderr, "Initialisation du serveur impossible\n"); return -1; }
54 55  
55 56 boucleServeur(sock_fd, (void*)&reponseConnexion);
56   -
57 57  
58   - sendUDPBroadcast("BroadWesh", 2020);
59   - sendUDPUnicast("192.168.0.37", "Coucou", 2020);
60 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 @@
  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 @@
  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 1 #ifndef __LIBNET_H__
2 2 #define __LIBNET_H__
3 3  
  4 +#include <pcap.h>
  5 +
  6 +
4 7 int boucleServeur(int socket, void(* fctConnex)(int));
5 8 int lanceThread(void(* fonction) (void *), void* arg, int size);
6 9 void* reponseConnexion(void* sock);
... ... @@ -8,6 +11,10 @@ int initialisationServeur(char* service);
8 11 int initializeSocketUDP(char* service);
9 12 int sendUDPBroadcast(char* message, int port);
10 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 20 #endif
... ...
includes/libthrd.h 100644 → 100755
1 1 #ifndef __LIBTHRD_H__
2 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 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