Dependencies:   EthernetNetIf NetServices mbed HTTPServer

Committer:
etudiant12
Date:
Mon May 23 05:40:11 2011 +0000
Revision:
0:96cf274f19bc

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
etudiant12 0:96cf274f19bc 1 #include "stdio.h"
etudiant12 0:96cf274f19bc 2 #include "time.h"
etudiant12 0:96cf274f19bc 3 #include "stdlib.h"
etudiant12 0:96cf274f19bc 4 #include "string.h"
etudiant12 0:96cf274f19bc 5 #include "EthernetNetIf.h"
etudiant12 0:96cf274f19bc 6 #include "HTTPServer.h"
etudiant12 0:96cf274f19bc 7 #include "NTPClient.h"
etudiant12 0:96cf274f19bc 8 #include "SMTPClient.h"
etudiant12 0:96cf274f19bc 9 #include "fonctions.h"
etudiant12 0:96cf274f19bc 10 #include <mbed.h>
etudiant12 0:96cf274f19bc 11 #include <scmRTOS.h>
etudiant12 0:96cf274f19bc 12
etudiant12 0:96cf274f19bc 13 #define HOSTNAME "mbedSE"
etudiant12 0:96cf274f19bc 14
etudiant12 0:96cf274f19bc 15
etudiant12 0:96cf274f19bc 16
etudiant12 0:96cf274f19bc 17 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 18 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 19 // Creation des types
etudiant12 0:96cf274f19bc 20 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 21 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 22
etudiant12 0:96cf274f19bc 23 //Definition des types process
etudiant12 0:96cf274f19bc 24 typedef OS::process<OS::pr0, 300> TProc1;
etudiant12 0:96cf274f19bc 25 typedef OS::process<OS::pr1, 300> TProc2;
etudiant12 0:96cf274f19bc 26 typedef OS::process<OS::pr2, 300> TProc3;
etudiant12 0:96cf274f19bc 27
etudiant12 0:96cf274f19bc 28 //Definition du type adresse_IP
etudiant12 0:96cf274f19bc 29 typedef struct {
etudiant12 0:96cf274f19bc 30 uint8_t champs1;
etudiant12 0:96cf274f19bc 31 uint8_t champs2;
etudiant12 0:96cf274f19bc 32 uint8_t champs3;
etudiant12 0:96cf274f19bc 33 uint8_t champs4;
etudiant12 0:96cf274f19bc 34 } adresse_IP;
etudiant12 0:96cf274f19bc 35
etudiant12 0:96cf274f19bc 36 // Definition du type de configuration du serveur SMTP pour l'envoi de mail
etudiant12 0:96cf274f19bc 37 typedef struct {
etudiant12 0:96cf274f19bc 38 adresse_IP IP;
etudiant12 0:96cf274f19bc 39 int port;
etudiant12 0:96cf274f19bc 40 string user;
etudiant12 0:96cf274f19bc 41 string password;
etudiant12 0:96cf274f19bc 42 string domain;
etudiant12 0:96cf274f19bc 43 string from_address;
etudiant12 0:96cf274f19bc 44 string to_address;
etudiant12 0:96cf274f19bc 45
etudiant12 0:96cf274f19bc 46 } ConfSMTP;
etudiant12 0:96cf274f19bc 47
etudiant12 0:96cf274f19bc 48
etudiant12 0:96cf274f19bc 49 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 50 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 51 // Declaration des variables
etudiant12 0:96cf274f19bc 52 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 53 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 54
etudiant12 0:96cf274f19bc 55 NTPClient ntp;
etudiant12 0:96cf274f19bc 56 LocalFileSystem local("local");
etudiant12 0:96cf274f19bc 57 Serial pc(USBTX, USBRX); // tx, rx
etudiant12 0:96cf274f19bc 58 EthernetNetIf eth(HOSTNAME);
etudiant12 0:96cf274f19bc 59 //HTTPServer svr;
etudiant12 0:96cf274f19bc 60
etudiant12 0:96cf274f19bc 61 string StationName;
etudiant12 0:96cf274f19bc 62
etudiant12 0:96cf274f19bc 63 adresse_IP IP;
etudiant12 0:96cf274f19bc 64 adresse_IP NM;
etudiant12 0:96cf274f19bc 65 adresse_IP GW;
etudiant12 0:96cf274f19bc 66 adresse_IP DNS;
etudiant12 0:96cf274f19bc 67 adresse_IP NTP;
etudiant12 0:96cf274f19bc 68 ConfSMTP SMTP;
etudiant12 0:96cf274f19bc 69
etudiant12 0:96cf274f19bc 70 //Differents Processus pour le multitache
etudiant12 0:96cf274f19bc 71 TProc1 Proc1;
etudiant12 0:96cf274f19bc 72 TProc2 Proc2;
etudiant12 0:96cf274f19bc 73 TProc3 Proc3;
etudiant12 0:96cf274f19bc 74
etudiant12 0:96cf274f19bc 75 //Differents evenements pouvant declencher un processus en attente
etudiant12 0:96cf274f19bc 76 OS::TEventFlag acquisition_de_lheure;
etudiant12 0:96cf274f19bc 77
etudiant12 0:96cf274f19bc 78 //Heure machine et heure serveur
etudiant12 0:96cf274f19bc 79
etudiant12 0:96cf274f19bc 80 time_t timer;
etudiant12 0:96cf274f19bc 81 time_t local_time;
etudiant12 0:96cf274f19bc 82 int server_time_h=0;
etudiant12 0:96cf274f19bc 83 int server_time_m=0;
etudiant12 0:96cf274f19bc 84 int server_time_s=0;
etudiant12 0:96cf274f19bc 85 int local_time_h=0;
etudiant12 0:96cf274f19bc 86 int local_time_min=0;
etudiant12 0:96cf274f19bc 87 int local_time_s=0;
etudiant12 0:96cf274f19bc 88 char hour [2];
etudiant12 0:96cf274f19bc 89 char mins [4];
etudiant12 0:96cf274f19bc 90 char sec [6];
etudiant12 0:96cf274f19bc 91 struct tm * server_time;
etudiant12 0:96cf274f19bc 92
etudiant12 0:96cf274f19bc 93 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 94 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 95 // Mise en place des fonctions
etudiant12 0:96cf274f19bc 96 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 97 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 98
etudiant12 0:96cf274f19bc 99
etudiant12 0:96cf274f19bc 100 // Creation du fichier de config
etudiant12 0:96cf274f19bc 101 void creation_fichier_de_config()
etudiant12 0:96cf274f19bc 102 {
etudiant12 0:96cf274f19bc 103 FILE *p_fichier;
etudiant12 0:96cf274f19bc 104 p_fichier = fopen("/local/config.txt", "r"); // Ouverture en lecture pour verifier son existence
etudiant12 0:96cf274f19bc 105
etudiant12 0:96cf274f19bc 106 if (p_fichier == NULL) // Test pour voir si le fichier existe ou pas
etudiant12 0:96cf274f19bc 107
etudiant12 0:96cf274f19bc 108 {
etudiant12 0:96cf274f19bc 109 // On utilise le caractere # pour marquer les lignes de commentaires
etudiant12 0:96cf274f19bc 110 pc.printf("le fichier n' existe pas, il faut le creer \n");
etudiant12 0:96cf274f19bc 111 p_fichier = fopen("/local/config.txt", "w"); // Ouverture en ecriture pour le creer
etudiant12 0:96cf274f19bc 112 fprintf(p_fichier, "Station:observatoire\n");
etudiant12 0:96cf274f19bc 113 fprintf(p_fichier, "#configuration reseau \n");
etudiant12 0:96cf274f19bc 114 fprintf(p_fichier, "######################################## \n");
etudiant12 0:96cf274f19bc 115 fprintf(p_fichier, "IP:xxx.xxx.xxx.xxx\n");
etudiant12 0:96cf274f19bc 116 fprintf(p_fichier, "NM:xxx.xxx.xxx.xxx\n");
etudiant12 0:96cf274f19bc 117 fprintf(p_fichier, "GW:xxx.xxx.xxx.xxx\n");
etudiant12 0:96cf274f19bc 118 fprintf(p_fichier, "DNS:xxx.xxx.xxx.xxx\n");
etudiant12 0:96cf274f19bc 119 fprintf(p_fichier, "NTPxxx.xxx.xxx.xxx\n");
etudiant12 0:96cf274f19bc 120 fprintf(p_fichier, "SMTP:xxx.xxx.xxx.xxx\n");
etudiant12 0:96cf274f19bc 121 fprintf(p_fichier, "PORT:xx\n");
etudiant12 0:96cf274f19bc 122 fprintf(p_fichier, "USER:xxxxx\n");
etudiant12 0:96cf274f19bc 123 fprintf(p_fichier, "PASSWORD:xxxxx\n");
etudiant12 0:96cf274f19bc 124 fprintf(p_fichier, "DOMAIN:xxxxxxxxxx\n");
etudiant12 0:96cf274f19bc 125 fprintf(p_fichier, "FROM_ADDRESS:xxxxxxxxxxxxxxx\n");
etudiant12 0:96cf274f19bc 126 fprintf(p_fichier, "TO_ADDRESS:xxxxxxxxxxxxxxxx\n");
etudiant12 0:96cf274f19bc 127 fprintf(p_fichier, "######################################## \n");
etudiant12 0:96cf274f19bc 128 fclose(p_fichier);
etudiant12 0:96cf274f19bc 129 pc.printf("le fichier a ete cree\n");
etudiant12 0:96cf274f19bc 130 } else {
etudiant12 0:96cf274f19bc 131 fclose(p_fichier);
etudiant12 0:96cf274f19bc 132 pc.printf("le fichier de configuration existe \n");
etudiant12 0:96cf274f19bc 133 }
etudiant12 0:96cf274f19bc 134 }
etudiant12 0:96cf274f19bc 135
etudiant12 0:96cf274f19bc 136
etudiant12 0:96cf274f19bc 137 //Lecture du fichier de config et recuperation des donnees reseaux
etudiant12 0:96cf274f19bc 138 void lecture_du_fichier_de_config() {
etudiant12 0:96cf274f19bc 139 FILE *p_fichier;
etudiant12 0:96cf274f19bc 140 p_fichier = fopen("/local/config.txt","r"); // Ouverture en lecture seule pour recuperer les donnees
etudiant12 0:96cf274f19bc 141 pc.printf("lecture du fichier de configuration \n");
etudiant12 0:96cf274f19bc 142
etudiant12 0:96cf274f19bc 143 char ligne[100];
etudiant12 0:96cf274f19bc 144 char *ligne_de_commentaire;
etudiant12 0:96cf274f19bc 145
etudiant12 0:96cf274f19bc 146 while ( feof(p_fichier) != TRUE ) { // On verifie que le pointeur du fichier n'est pas &#65533; la fin du fichier
etudiant12 0:96cf274f19bc 147 //feof() renvoie FALSE si pointeur different de fin de fichier sinon renvoie TRUE
etudiant12 0:96cf274f19bc 148
etudiant12 0:96cf274f19bc 149 fgets(ligne,100,p_fichier); // aquisition d'une ligne pour la traiter
etudiant12 0:96cf274f19bc 150
etudiant12 0:96cf274f19bc 151 if ( feof(p_fichier)) //on a pas atteint la fin du fichier
etudiant12 0:96cf274f19bc 152 {
etudiant12 0:96cf274f19bc 153 break;
etudiant12 0:96cf274f19bc 154 }
etudiant12 0:96cf274f19bc 155
etudiant12 0:96cf274f19bc 156 ligne_de_commentaire = strchr(ligne, '#'); // verification que la ligne ne soit pas du commentaire
etudiant12 0:96cf274f19bc 157 // strchhr retourne l'adresse du premier caractere demande trouve
etudiant12 0:96cf274f19bc 158 // si il n'y en a pas il retourne NULL
etudiant12 0:96cf274f19bc 159
etudiant12 0:96cf274f19bc 160 if (ligne_de_commentaire==NULL) { // la ligne n'est pas du commentaire
etudiant12 0:96cf274f19bc 161
etudiant12 0:96cf274f19bc 162 char *s=0;
etudiant12 0:96cf274f19bc 163 char **test;
etudiant12 0:96cf274f19bc 164 int lim1=0;
etudiant12 0:96cf274f19bc 165 int lim2=0;
etudiant12 0:96cf274f19bc 166
etudiant12 0:96cf274f19bc 167 /******************************/
etudiant12 0:96cf274f19bc 168 /*lecture du nom de la station*/
etudiant12 0:96cf274f19bc 169 /******************************/
etudiant12 0:96cf274f19bc 170 lim1 = str_istr(ligne, "Station:"); //recherche de l'emplacement de la chaine de caractere correspondante
etudiant12 0:96cf274f19bc 171
etudiant12 0:96cf274f19bc 172 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 173 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 174 StationName=str_sub(ligne,lim1+8,lim2);
etudiant12 0:96cf274f19bc 175 pc.printf("Station: %s\n",StationName);
etudiant12 0:96cf274f19bc 176 }
etudiant12 0:96cf274f19bc 177
etudiant12 0:96cf274f19bc 178 /******************************/
etudiant12 0:96cf274f19bc 179 /* lecture de l'adresse IP */
etudiant12 0:96cf274f19bc 180 /******************************/
etudiant12 0:96cf274f19bc 181 lim1 = str_istr(ligne, "IP:");
etudiant12 0:96cf274f19bc 182 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 183 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 184 s=str_sub(ligne,lim1+3,lim2);
etudiant12 0:96cf274f19bc 185 test = str_split(s, "."); //separation de la chaine en sous chaine separee par le caractere "."
etudiant12 0:96cf274f19bc 186
etudiant12 0:96cf274f19bc 187 //Transfert de l'ip vers la meroire
etudiant12 0:96cf274f19bc 188 IP.champs1=(uint8_t)atoi(test[0]);
etudiant12 0:96cf274f19bc 189 IP.champs2=(uint8_t)atoi(test[1]);
etudiant12 0:96cf274f19bc 190 IP.champs3=(uint8_t)atoi(test[2]);
etudiant12 0:96cf274f19bc 191 IP.champs4=(uint8_t)atoi(test[3]);
etudiant12 0:96cf274f19bc 192 pc.printf("IP: %d.%d.%d.%d\n",IP.champs1,IP.champs2,IP.champs3,IP.champs4);
etudiant12 0:96cf274f19bc 193 }
etudiant12 0:96cf274f19bc 194
etudiant12 0:96cf274f19bc 195 /******************************/
etudiant12 0:96cf274f19bc 196 /* lecture du netmask */
etudiant12 0:96cf274f19bc 197 /******************************/
etudiant12 0:96cf274f19bc 198 lim1 = str_istr(ligne, "NM:");
etudiant12 0:96cf274f19bc 199 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 200 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 201 s=str_sub(ligne,lim1+3,lim2);
etudiant12 0:96cf274f19bc 202 test = str_split(s, ".");
etudiant12 0:96cf274f19bc 203
etudiant12 0:96cf274f19bc 204 //Transfert du net masque vers la memoire
etudiant12 0:96cf274f19bc 205 NM.champs1=(uint8_t)atoi(test[0]);
etudiant12 0:96cf274f19bc 206 NM.champs2=(uint8_t)atoi(test[1]);
etudiant12 0:96cf274f19bc 207 NM.champs3=(uint8_t)atoi(test[2]);
etudiant12 0:96cf274f19bc 208 NM.champs4=(uint8_t)atoi(test[3]);
etudiant12 0:96cf274f19bc 209 pc.printf("NM: %d.%d.%d.%d\n",NM.champs1,NM.champs2,NM.champs3,NM.champs4);
etudiant12 0:96cf274f19bc 210 }
etudiant12 0:96cf274f19bc 211
etudiant12 0:96cf274f19bc 212 /******************************/
etudiant12 0:96cf274f19bc 213 /* lecture de la passerelle */
etudiant12 0:96cf274f19bc 214 /******************************/
etudiant12 0:96cf274f19bc 215 lim1 = str_istr(ligne, "GW:");
etudiant12 0:96cf274f19bc 216 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 217 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 218 s=str_sub(ligne,lim1+3,lim2);
etudiant12 0:96cf274f19bc 219 test = str_split(s, ".");
etudiant12 0:96cf274f19bc 220
etudiant12 0:96cf274f19bc 221 //Transfert de la gateway vers la memoire
etudiant12 0:96cf274f19bc 222 GW.champs1=(uint8_t)atoi(test[0]);
etudiant12 0:96cf274f19bc 223 GW.champs2=(uint8_t)atoi(test[1]);
etudiant12 0:96cf274f19bc 224 GW.champs3=(uint8_t)atoi(test[2]);
etudiant12 0:96cf274f19bc 225 GW.champs4=(uint8_t)atoi(test[3]);
etudiant12 0:96cf274f19bc 226 pc.printf("GW: %d.%d.%d.%d\n",GW.champs1,GW.champs2,GW.champs3,GW.champs4);
etudiant12 0:96cf274f19bc 227 }
etudiant12 0:96cf274f19bc 228
etudiant12 0:96cf274f19bc 229 /******************************/
etudiant12 0:96cf274f19bc 230 /* lecture IP serveur DNS */
etudiant12 0:96cf274f19bc 231 /******************************/
etudiant12 0:96cf274f19bc 232 lim1 = str_istr(ligne, "DNS:");
etudiant12 0:96cf274f19bc 233 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 234 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 235 s=str_sub(ligne,lim1+4,lim2);
etudiant12 0:96cf274f19bc 236 test = str_split(s, ".");
etudiant12 0:96cf274f19bc 237
etudiant12 0:96cf274f19bc 238 //Transfert du DNS vers la memoire
etudiant12 0:96cf274f19bc 239 DNS.champs1=(uint8_t)atoi(test[0]);
etudiant12 0:96cf274f19bc 240 DNS.champs2=(uint8_t)atoi(test[1]);
etudiant12 0:96cf274f19bc 241 DNS.champs3=(uint8_t)atoi(test[2]);
etudiant12 0:96cf274f19bc 242 DNS.champs4=(uint8_t)atoi(test[3]);
etudiant12 0:96cf274f19bc 243 pc.printf("DNS: %d.%d.%d.%d\n",DNS.champs1,DNS.champs2,DNS.champs3,DNS.champs4);
etudiant12 0:96cf274f19bc 244 }
etudiant12 0:96cf274f19bc 245
etudiant12 0:96cf274f19bc 246 /******************************/
etudiant12 0:96cf274f19bc 247 /* lecture IP serveur NTP */
etudiant12 0:96cf274f19bc 248 /******************************/
etudiant12 0:96cf274f19bc 249 lim1 = str_istr(ligne, "NTP:");
etudiant12 0:96cf274f19bc 250 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 251 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 252 s=str_sub(ligne,lim1+4,lim2);
etudiant12 0:96cf274f19bc 253 test = str_split(s, ".");
etudiant12 0:96cf274f19bc 254
etudiant12 0:96cf274f19bc 255 //Transfert du NTP vers la memoire
etudiant12 0:96cf274f19bc 256 NTP.champs1=(uint8_t)atoi(test[0]);
etudiant12 0:96cf274f19bc 257 NTP.champs2=(uint8_t)atoi(test[1]);
etudiant12 0:96cf274f19bc 258 NTP.champs3=(uint8_t)atoi(test[2]);
etudiant12 0:96cf274f19bc 259 NTP.champs4=(uint8_t)atoi(test[3]);
etudiant12 0:96cf274f19bc 260 pc.printf("NTP: %d.%d.%d.%d\n",NTP.champs1,NTP.champs2,NTP.champs3,NTP.champs4);
etudiant12 0:96cf274f19bc 261 }
etudiant12 0:96cf274f19bc 262
etudiant12 0:96cf274f19bc 263 /******************************/
etudiant12 0:96cf274f19bc 264 /* lecture configuration SMTP */
etudiant12 0:96cf274f19bc 265 /******************************/
etudiant12 0:96cf274f19bc 266 lim1 = str_istr(ligne, "SMTP:");
etudiant12 0:96cf274f19bc 267 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 268 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 269 s=str_sub(ligne,lim1+5,lim2);
etudiant12 0:96cf274f19bc 270 test = str_split(s, ".");
etudiant12 0:96cf274f19bc 271 //Transfert du SMTP vers la memoire
etudiant12 0:96cf274f19bc 272 SMTP.IP.champs1=(uint8_t)atoi(test[0]);
etudiant12 0:96cf274f19bc 273 SMTP.IP.champs2=(uint8_t)atoi(test[1]);
etudiant12 0:96cf274f19bc 274 SMTP.IP.champs3=(uint8_t)atoi(test[2]);
etudiant12 0:96cf274f19bc 275 SMTP.IP.champs4=(uint8_t)atoi(test[3]);
etudiant12 0:96cf274f19bc 276 pc.printf("SMTP: %d.%d.%d.%d\n",SMTP.IP.champs1,SMTP.IP.champs2,SMTP.IP.champs3,SMTP.IP.champs4);
etudiant12 0:96cf274f19bc 277 }
etudiant12 0:96cf274f19bc 278
etudiant12 0:96cf274f19bc 279 //lecture du port
etudiant12 0:96cf274f19bc 280 lim1 = str_istr(ligne, "PORT:");
etudiant12 0:96cf274f19bc 281 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 282 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 283 SMTP.port=(uint8_t)atoi(str_sub(ligne,lim1+5,lim2-1));
etudiant12 0:96cf274f19bc 284 pc.printf("Port: %d\n",SMTP.port);
etudiant12 0:96cf274f19bc 285
etudiant12 0:96cf274f19bc 286 }
etudiant12 0:96cf274f19bc 287 //lecture de l'utilisateur
etudiant12 0:96cf274f19bc 288 lim1 = str_istr(ligne, "USER:");
etudiant12 0:96cf274f19bc 289 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 290 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 291 SMTP.user=str_sub(ligne,lim1+5,lim2-1);
etudiant12 0:96cf274f19bc 292 pc.printf("User: %s\n",SMTP.user);
etudiant12 0:96cf274f19bc 293 }
etudiant12 0:96cf274f19bc 294 //lecture du mot de passe
etudiant12 0:96cf274f19bc 295 lim1 = str_istr(ligne, "PASSWORD:");
etudiant12 0:96cf274f19bc 296 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 297 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 298 SMTP.password=str_sub(ligne,lim1+9,lim2-1);
etudiant12 0:96cf274f19bc 299 pc.printf("Password: %s\n",SMTP.password);
etudiant12 0:96cf274f19bc 300 }
etudiant12 0:96cf274f19bc 301 //lecture du domaine
etudiant12 0:96cf274f19bc 302 lim1 = str_istr(ligne, "DOMAIN:");
etudiant12 0:96cf274f19bc 303 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 304 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 305 SMTP.domain=str_sub(ligne,lim1+7,lim2-1);
etudiant12 0:96cf274f19bc 306 pc.printf("Domain: %s\n",SMTP.domain);
etudiant12 0:96cf274f19bc 307 }
etudiant12 0:96cf274f19bc 308 //lecture de l'adresse de destination
etudiant12 0:96cf274f19bc 309 lim1 = str_istr(ligne, "FROM_ADDRESS:");
etudiant12 0:96cf274f19bc 310 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 311 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 312 SMTP.from_address=str_sub(ligne,lim1+13,lim2-1);
etudiant12 0:96cf274f19bc 313 pc.printf("From adress: %s\n",SMTP.from_address);
etudiant12 0:96cf274f19bc 314 }
etudiant12 0:96cf274f19bc 315 //lecture de l' adresse de destination
etudiant12 0:96cf274f19bc 316 lim1 = str_istr(ligne, "TO_ADDRESS:");
etudiant12 0:96cf274f19bc 317 if (lim1!=-1) {
etudiant12 0:96cf274f19bc 318 lim2 = str_istr(ligne, "\n");
etudiant12 0:96cf274f19bc 319 SMTP.to_address=str_sub(ligne,lim1+11,lim2-1);
etudiant12 0:96cf274f19bc 320 pc.printf("To adress: %s\n",SMTP.to_address);
etudiant12 0:96cf274f19bc 321 }
etudiant12 0:96cf274f19bc 322 }
etudiant12 0:96cf274f19bc 323 }
etudiant12 0:96cf274f19bc 324 fclose(p_fichier);
etudiant12 0:96cf274f19bc 325 }
etudiant12 0:96cf274f19bc 326
etudiant12 0:96cf274f19bc 327
etudiant12 0:96cf274f19bc 328 // Telechargement de l'heure sur le serveur NTP
etudiant12 0:96cf274f19bc 329 int telechargement_heure(int initial) {
etudiant12 0:96cf274f19bc 330
etudiant12 0:96cf274f19bc 331 bool connection_etablie = FALSE;
etudiant12 0:96cf274f19bc 332
etudiant12 0:96cf274f19bc 333 // Connection au serveur NTP
etudiant12 0:96cf274f19bc 334 pc.printf("Connection au serveur NTP\n");
etudiant12 0:96cf274f19bc 335 pc.printf("Adresse serveur: %d.%d.%d.%d\n",NTP.champs1,NTP.champs2,NTP.champs3,NTP.champs4);
etudiant12 0:96cf274f19bc 336 Host serverNTP(IpAddr(NTP.champs1,NTP.champs2,NTP.champs3,NTP.champs4),123,"");
etudiant12 0:96cf274f19bc 337
etudiant12 0:96cf274f19bc 338 // Verification de reussite de la connection
etudiant12 0:96cf274f19bc 339 NTPResult ntpResult=ntp.setTime(serverNTP);
etudiant12 0:96cf274f19bc 340 if( ntpResult == NTP_OK )
etudiant12 0:96cf274f19bc 341 {
etudiant12 0:96cf274f19bc 342 pc.printf("Connection etablie\r\n");
etudiant12 0:96cf274f19bc 343 connection_etablie = TRUE;
etudiant12 0:96cf274f19bc 344 }
etudiant12 0:96cf274f19bc 345 else {
etudiant12 0:96cf274f19bc 346
etudiant12 0:96cf274f19bc 347 pc.printf("Erreur lors de la connection au serveur, description:\n");
etudiant12 0:96cf274f19bc 348
etudiant12 0:96cf274f19bc 349 if ( ntpResult == NTP_PRTCL )
etudiant12 0:96cf274f19bc 350 {
etudiant12 0:96cf274f19bc 351 pc.printf("NTP Protocol error.\r\n") ;
etudiant12 0:96cf274f19bc 352 }
etudiant12 0:96cf274f19bc 353 else if ( ntpResult == NTP_TIMEOUT )
etudiant12 0:96cf274f19bc 354 {
etudiant12 0:96cf274f19bc 355 pc.printf("Connection timeout.\r\n");
etudiant12 0:96cf274f19bc 356 }
etudiant12 0:96cf274f19bc 357 else if ( ntpResult == NTP_DNS )
etudiant12 0:96cf274f19bc 358 {
etudiant12 0:96cf274f19bc 359 pc.printf("Could not resolve DNS hostname.\r\n") ;
etudiant12 0:96cf274f19bc 360 }
etudiant12 0:96cf274f19bc 361 else if ( ntpResult == NTP_PROCESSING )
etudiant12 0:96cf274f19bc 362 {
etudiant12 0:96cf274f19bc 363 pc.printf("Processing.\r\n");
etudiant12 0:96cf274f19bc 364 }
etudiant12 0:96cf274f19bc 365 else
etudiant12 0:96cf274f19bc 366 {
etudiant12 0:96cf274f19bc 367 pc.printf("Erreur inconnue");
etudiant12 0:96cf274f19bc 368 }
etudiant12 0:96cf274f19bc 369
etudiant12 0:96cf274f19bc 370 }//Fin du else affichant les erreurs
etudiant12 0:96cf274f19bc 371
etudiant12 0:96cf274f19bc 372 // Si erreur lors de la premiere tentative: deuxieme essai
etudiant12 0:96cf274f19bc 373 if( ntpResult != NTP_OK )
etudiant12 0:96cf274f19bc 374 {
etudiant12 0:96cf274f19bc 375 pc.printf("\nDeuxieme essai de recuperation de l'heure\n");
etudiant12 0:96cf274f19bc 376
etudiant12 0:96cf274f19bc 377 NTPResult ntpResult=ntp.setTime(serverNTP);
etudiant12 0:96cf274f19bc 378 if( ntpResult == NTP_OK )
etudiant12 0:96cf274f19bc 379 {
etudiant12 0:96cf274f19bc 380 pc.printf("Connection etablie\r\n");
etudiant12 0:96cf274f19bc 381 connection_etablie = TRUE;
etudiant12 0:96cf274f19bc 382
etudiant12 0:96cf274f19bc 383 }
etudiant12 0:96cf274f19bc 384 else {
etudiant12 0:96cf274f19bc 385
etudiant12 0:96cf274f19bc 386 pc.printf("Erreur lors de la connection au serveur, description:\n");
etudiant12 0:96cf274f19bc 387
etudiant12 0:96cf274f19bc 388 if ( ntpResult == NTP_PRTCL )
etudiant12 0:96cf274f19bc 389 {
etudiant12 0:96cf274f19bc 390 pc.printf("NTP Protocol error.\r\n") ;
etudiant12 0:96cf274f19bc 391 }
etudiant12 0:96cf274f19bc 392 else if ( ntpResult == NTP_TIMEOUT )
etudiant12 0:96cf274f19bc 393 {
etudiant12 0:96cf274f19bc 394 pc.printf("Connection timeout.\r\n");
etudiant12 0:96cf274f19bc 395 }
etudiant12 0:96cf274f19bc 396 else if ( ntpResult == NTP_DNS )
etudiant12 0:96cf274f19bc 397 {
etudiant12 0:96cf274f19bc 398 pc.printf("Could not resolve DNS hostname.\r\n") ;
etudiant12 0:96cf274f19bc 399 }
etudiant12 0:96cf274f19bc 400 else if ( ntpResult == NTP_PROCESSING )
etudiant12 0:96cf274f19bc 401 {
etudiant12 0:96cf274f19bc 402 pc.printf("Processing.\r\n");
etudiant12 0:96cf274f19bc 403 }
etudiant12 0:96cf274f19bc 404 else
etudiant12 0:96cf274f19bc 405 {
etudiant12 0:96cf274f19bc 406 pc.printf("Erreur inconnue");
etudiant12 0:96cf274f19bc 407 }
etudiant12 0:96cf274f19bc 408 }
etudiant12 0:96cf274f19bc 409 }
etudiant12 0:96cf274f19bc 410
etudiant12 0:96cf274f19bc 411 if( connection_etablie == FALSE )
etudiant12 0:96cf274f19bc 412 {
etudiant12 0:96cf274f19bc 413 pc.printf("Connection impossible");
etudiant12 0:96cf274f19bc 414 ////////////////////////////////////////////////////////////////
etudiant12 0:96cf274f19bc 415 ////////////////////////////////////////////////////////////////
etudiant12 0:96cf274f19bc 416 //Ecrire ici le rapport d'erreur dans le fichier sur carte SD //
etudiant12 0:96cf274f19bc 417 ////////////////////////////////////////////////////////////////
etudiant12 0:96cf274f19bc 418 ////////////////////////////////////////////////////////////////
etudiant12 0:96cf274f19bc 419 return 0;
etudiant12 0:96cf274f19bc 420 }
etudiant12 0:96cf274f19bc 421 else{
etudiant12 0:96cf274f19bc 422
etudiant12 0:96cf274f19bc 423 //connection etablie, recuperation de l'heure du serveur
etudiant12 0:96cf274f19bc 424 timer=time(NULL);
etudiant12 0:96cf274f19bc 425
etudiant12 0:96cf274f19bc 426 //si nous en phase d'initialisation l'heure machine = l'heure serveur
etudiant12 0:96cf274f19bc 427 if( initial == 0)
etudiant12 0:96cf274f19bc 428 {
etudiant12 0:96cf274f19bc 429 local_time = timer;
etudiant12 0:96cf274f19bc 430 }
etudiant12 0:96cf274f19bc 431
etudiant12 0:96cf274f19bc 432 server_time = localtime(&timer);
etudiant12 0:96cf274f19bc 433
etudiant12 0:96cf274f19bc 434 //Recuperation des differentes composantes de l'heure
etudiant12 0:96cf274f19bc 435 strcpy (hour,"");
etudiant12 0:96cf274f19bc 436 strftime (hour,2,"%H",server_time);
etudiant12 0:96cf274f19bc 437 server_time_h = atoi(hour);
etudiant12 0:96cf274f19bc 438
etudiant12 0:96cf274f19bc 439 strcpy (mins,"");
etudiant12 0:96cf274f19bc 440 strftime(mins,4,"%M",server_time);
etudiant12 0:96cf274f19bc 441 server_time_m = atoi(mins);
etudiant12 0:96cf274f19bc 442
etudiant12 0:96cf274f19bc 443 strcpy (sec,"");
etudiant12 0:96cf274f19bc 444 strftime (sec,6,"%S",server_time);
etudiant12 0:96cf274f19bc 445 server_time_s = atoi(sec);
etudiant12 0:96cf274f19bc 446 pc.printf("Heure serveur: %dh%dm%ds\n", server_time_h, server_time_m, server_time_s);
etudiant12 0:96cf274f19bc 447 return 1;
etudiant12 0:96cf274f19bc 448
etudiant12 0:96cf274f19bc 449 }
etudiant12 0:96cf274f19bc 450 }
etudiant12 0:96cf274f19bc 451
etudiant12 0:96cf274f19bc 452 // printf("L'heure courante est: %s\n",asctime(localtime(&timer)));
etudiant12 0:96cf274f19bc 453
etudiant12 0:96cf274f19bc 454
etudiant12 0:96cf274f19bc 455 // Configuration connection reseau Ethernet
etudiant12 0:96cf274f19bc 456 void configuration_reseau_static()
etudiant12 0:96cf274f19bc 457 {
etudiant12 0:96cf274f19bc 458 EthernetNetIf eth(IpAddr(IP.champs1,IP.champs2,IP.champs3,IP.champs4),
etudiant12 0:96cf274f19bc 459 IpAddr(NM.champs1,NM.champs2,NM.champs3,NM.champs4),
etudiant12 0:96cf274f19bc 460 IpAddr(GW.champs1,GW.champs2,GW.champs3,GW.champs4),
etudiant12 0:96cf274f19bc 461 IpAddr(DNS.champs1,DNS.champs2,DNS.champs3,DNS.champs4));
etudiant12 0:96cf274f19bc 462
etudiant12 0:96cf274f19bc 463 pc.printf("Debut configuration\n");
etudiant12 0:96cf274f19bc 464 EthernetErr ethErr = eth.setup();
etudiant12 0:96cf274f19bc 465 if(ethErr)
etudiant12 0:96cf274f19bc 466 {
etudiant12 0:96cf274f19bc 467 pc.printf("Echec de la configuration\n");
etudiant12 0:96cf274f19bc 468 }
etudiant12 0:96cf274f19bc 469 pc.printf("Configuration reseau OK\n");
etudiant12 0:96cf274f19bc 470 }
etudiant12 0:96cf274f19bc 471
etudiant12 0:96cf274f19bc 472 // Configuration connection reseau Ethernet
etudiant12 0:96cf274f19bc 473 void configuration_reseau_dynamic()
etudiant12 0:96cf274f19bc 474 {
etudiant12 0:96cf274f19bc 475
etudiant12 0:96cf274f19bc 476 pc.printf("Debut configuration\n");
etudiant12 0:96cf274f19bc 477 EthernetErr ethErr = eth.setup();
etudiant12 0:96cf274f19bc 478 if( ethErr == ETH_OK )
etudiant12 0:96cf274f19bc 479 {
etudiant12 0:96cf274f19bc 480 IpAddr ip = eth.getIp();
etudiant12 0:96cf274f19bc 481 pc.printf("Utilisation du protocol DHCP\n");
etudiant12 0:96cf274f19bc 482 pc.printf("IP fournie: %d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]);
etudiant12 0:96cf274f19bc 483 }
etudiant12 0:96cf274f19bc 484 else pc.printf ("Echec de la configuration\n");
etudiant12 0:96cf274f19bc 485
etudiant12 0:96cf274f19bc 486 }
etudiant12 0:96cf274f19bc 487
etudiant12 0:96cf274f19bc 488
etudiant12 0:96cf274f19bc 489
etudiant12 0:96cf274f19bc 490 int main(){
etudiant12 0:96cf274f19bc 491
etudiant12 0:96cf274f19bc 492 wait(8);
etudiant12 0:96cf274f19bc 493 pc.printf("\n****************************\n");
etudiant12 0:96cf274f19bc 494 pc.printf("Initialisation connection reseau\n");
etudiant12 0:96cf274f19bc 495 pc.printf("****************************\n\n");
etudiant12 0:96cf274f19bc 496
etudiant12 0:96cf274f19bc 497 wait(2);
etudiant12 0:96cf274f19bc 498 //Generation et lecture fichier de configuration
etudiant12 0:96cf274f19bc 499 pc.printf("\nFichier de configuration\n");
etudiant12 0:96cf274f19bc 500 creation_fichier_de_config();
etudiant12 0:96cf274f19bc 501 lecture_du_fichier_de_config();
etudiant12 0:96cf274f19bc 502
etudiant12 0:96cf274f19bc 503 wait(2);
etudiant12 0:96cf274f19bc 504 //configuration reseau
etudiant12 0:96cf274f19bc 505 pc.printf("\nConfiguration reseau\n");
etudiant12 0:96cf274f19bc 506 //configuration_reseau_static();
etudiant12 0:96cf274f19bc 507 configuration_reseau_dynamic();
etudiant12 0:96cf274f19bc 508
etudiant12 0:96cf274f19bc 509 wait(2);
etudiant12 0:96cf274f19bc 510 //initialisation heure locale
etudiant12 0:96cf274f19bc 511 pc.printf("\nConnection reseau NTP et initialisation de l'heure\n");
etudiant12 0:96cf274f19bc 512 telechargement_heure(0);
etudiant12 0:96cf274f19bc 513
etudiant12 0:96cf274f19bc 514
etudiant12 0:96cf274f19bc 515 wait(2);
etudiant12 0:96cf274f19bc 516 pc.printf("\n\n****************************\n");
etudiant12 0:96cf274f19bc 517 pc.printf("Lancement de la gestion multitache\n");
etudiant12 0:96cf274f19bc 518 pc.printf("****************************\n\n");
etudiant12 0:96cf274f19bc 519 // run
etudiant12 0:96cf274f19bc 520 OS::Run();
etudiant12 0:96cf274f19bc 521 }
etudiant12 0:96cf274f19bc 522
etudiant12 0:96cf274f19bc 523 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 524 template<> OS_PROCESS void TProc1::Exec()
etudiant12 0:96cf274f19bc 525 {
etudiant12 0:96cf274f19bc 526 for(;;)
etudiant12 0:96cf274f19bc 527 {
etudiant12 0:96cf274f19bc 528 Sleep(3000); //Attente 3000ms
etudiant12 0:96cf274f19bc 529 pc.printf("Execution Process 1\n");
etudiant12 0:96cf274f19bc 530
etudiant12 0:96cf274f19bc 531 }
etudiant12 0:96cf274f19bc 532 }
etudiant12 0:96cf274f19bc 533
etudiant12 0:96cf274f19bc 534 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 535 template<> OS_PROCESS void TProc2::Exec()
etudiant12 0:96cf274f19bc 536 {
etudiant12 0:96cf274f19bc 537 for(;;)
etudiant12 0:96cf274f19bc 538 {
etudiant12 0:96cf274f19bc 539 Sleep(5000); //Attente 5000ms
etudiant12 0:96cf274f19bc 540 pc.printf("Execution Process 2\n");
etudiant12 0:96cf274f19bc 541
etudiant12 0:96cf274f19bc 542 }
etudiant12 0:96cf274f19bc 543 }
etudiant12 0:96cf274f19bc 544
etudiant12 0:96cf274f19bc 545 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 546 template<> OS_PROCESS void TProc3::Exec()
etudiant12 0:96cf274f19bc 547 {
etudiant12 0:96cf274f19bc 548 for (;;)
etudiant12 0:96cf274f19bc 549 {
etudiant12 0:96cf274f19bc 550
etudiant12 0:96cf274f19bc 551 char c = pc.getc();
etudiant12 0:96cf274f19bc 552 if(c == 'a')
etudiant12 0:96cf274f19bc 553 {
etudiant12 0:96cf274f19bc 554 telechargement_heure(1);
etudiant12 0:96cf274f19bc 555 }
etudiant12 0:96cf274f19bc 556
etudiant12 0:96cf274f19bc 557
etudiant12 0:96cf274f19bc 558
etudiant12 0:96cf274f19bc 559 }
etudiant12 0:96cf274f19bc 560 }
etudiant12 0:96cf274f19bc 561
etudiant12 0:96cf274f19bc 562 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 563 // Timer des process, c'est ici qu'on peut creer des evenement pour synchro les taches
etudiant12 0:96cf274f19bc 564 void OS::SystemTimerUserHook()
etudiant12 0:96cf274f19bc 565 {
etudiant12 0:96cf274f19bc 566 //Interrogation du serveur pour maintenir connection
etudiant12 0:96cf274f19bc 567 Net::poll();
etudiant12 0:96cf274f19bc 568
etudiant12 0:96cf274f19bc 569 }
etudiant12 0:96cf274f19bc 570 //---------------------------------------------------------------------------
etudiant12 0:96cf274f19bc 571 void OS::IdleProcessUserHook()
etudiant12 0:96cf274f19bc 572 {
etudiant12 0:96cf274f19bc 573 __WFI();
etudiant12 0:96cf274f19bc 574 }
etudiant12 0:96cf274f19bc 575 //-----------------------------------------------------------------------------