PSR SE2a4 2022/2023 G6 : Différence entre versions
Ligne 33 : | Ligne 33 : | ||
uuid_unparse_lower(binuuid, uuid);//unique id en lettre minuscule | uuid_unparse_lower(binuuid, uuid);//unique id en lettre minuscule | ||
</pre> | </pre> | ||
− | On définit ici un identifiant unique pour pouvoir suivre le mail envoyé (éviter toutes collisions ou perdition de données)<br/> | + | On définit ici un identifiant unique pour pouvoir suivre le mail envoyé (éviter toutes collisions ou perdition de données).<br/> |
<pre> | <pre> | ||
Ligne 49 : | Ligne 49 : | ||
</pre> | </pre> | ||
On transforme les informations stockées dans la structure "state" en format de mail avec la source, le destinataire et le corps.<br/> | On transforme les informations stockées dans la structure "state" en format de mail avec la source, le destinataire et le corps.<br/> | ||
+ | <pre> | ||
+ | int server_process(int sfd) { | ||
+ | return smtp_process(sfd, processing_mail); | ||
+ | } | ||
+ | </pre> | ||
+ | <pre> | ||
+ | int main(void) { | ||
+ | log_init_default("-", LOG_DEBUG); | ||
+ | int sock = init_server("yamaha.germond.org", "8025", NULL); | ||
+ | |||
+ | if (sock < 0) { | ||
+ | LOG_C("Failed to start server"); | ||
+ | return EXIT_FAILURE; | ||
+ | } | ||
+ | |||
+ | int status = loop_server(sock, server_process); | ||
+ | |||
+ | if (status < 0) { | ||
+ | LOG_E("MTAext: server closed unexpectedly"); | ||
+ | }; | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </pre> | ||
+ | La fonction main permet d'initialiser et de lancer notre serveur <yamaha.germond.org> (récupérer l'adresse IPV4/V6) et d'informer des erreurs.<br/> | ||
'''Test code''' MTAext.c : vérification<br/> | '''Test code''' MTAext.c : vérification<br/> |
Version du 17 mars 2023 à 11:45
Infrastructure
Le serveur est disponible sur `yamaha.germond.org` (193.48.57.161), le DNS est hébergé sur mon (bastien) infrastructure[1]
[1]
03/02/2023
Création VM : yamaha (IP : 193.48.57.161)
Lancement de la VM
Ouverture du projet beta
Découverte STMPin
10/02/2023
Réécriture du code
-> à compléter par @Bastien.Germond
Création code Maildir/tmp -> réception message (MTAext.c)
Pour générer un identifiant unique, on utilise la librairie <libuuid> : #include <uuid/uuid.h>
https://stackoverflow.com/questions/51053568/generating-a-random-uuid-in-c
int processing_mail(struct smtp_state *state) { LOG_D("Processing mail..."); uuid_t binuuid;// Unique ID in binary uuid_generate_random(binuuid); char *uuid = malloc(37);//Nb of characters for unique id uuid_unparse_lower(binuuid, uuid);//unique id en lettre minuscule
On définit ici un identifiant unique pour pouvoir suivre le mail envoyé (éviter toutes collisions ou perdition de données).
if(fptr == NULL){ LOG_E("Couldn't open Maildir tmp"); exit(1); }
Ici, on utilise une fonction conditionnelle pour informer que l'on n'est pas parvenu à entrer dans le dossier de redirection de mail.
fprintf(fptr, "From: %s\r\n", state->sender); fprintf(fptr, "To: %s\r\n", state->recipient); fprintf(fptr, "%s\r\n", state->body); fclose(fptr);
On transforme les informations stockées dans la structure "state" en format de mail avec la source, le destinataire et le corps.
int server_process(int sfd) { return smtp_process(sfd, processing_mail); }
int main(void) { log_init_default("-", LOG_DEBUG); int sock = init_server("yamaha.germond.org", "8025", NULL); if (sock < 0) { LOG_C("Failed to start server"); return EXIT_FAILURE; } int status = loop_server(sock, server_process); if (status < 0) { LOG_E("MTAext: server closed unexpectedly"); }; return 0; }
La fonction main permet d'initialiser et de lancer notre serveur <yamaha.germond.org> (récupérer l'adresse IPV4/V6) et d'informer des erreurs.
Test code MTAext.c : vérification
Le mail est composé d'une entête et d'un corps de mail
-> compilation/execution de réception de mails (envoyeur, receveur, corps de mail, UUID)