PSR SE2a4 2022/2023 G6 : Différence entre versions

De Wiki d'activités IMA
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)