next up previous contents
Next: Requêtes et réponses ARP Up: Gestion des Threads et Previous: Quelques détails sur les   Contents

File sécurisée : Nicolas

Nous avons donc pensé à une structure chaînée, qui nous permettrait avec une espace de mémoire restreint de pointer vers autant de paquets qu'il est nécessaire. Mais comment organiser cette structure? L'idée principale est de conserver l'ordre des paquets, c'est une 'file d'attente'. Nous avons donc recréé une file (FIFO) chaînée. Mais cette structure de file doit suivre certaines particularités. Premièrement, vu que ces files seront utilisées par des threads, il pourra se produire le cas ou deux threads voudront accéder en même temps à la même file, ce qui entraînerait une perte définitive de la tête par exemple.
Pour résoudre ce problème , chaque file est sécurisée par un booléen, qui fait parti de l'enregistrement qui contient :
La taille de la file permet de limiter et de contrôler un flux de données trop important. Dans ce cas précis, il pourra s'opérer la destruction totale de la file pour éviter un débordement de mémoire ou tout autre problème.
Mais ce n'est pas la seule raison, le scanner de port et le trace-route, nouvellement ajouté au projet, bénéficient de ce fonctionnement. Lorsque le scanner (réciproquement trace-route) devra envoyer un paquet, il lui suffira de l'ajouter dans la file d'envoi. De plus, lorsque notre filtre détectera un paquet pour le scanner (réciproquement trace-route), il lui sera transmis via la file du scanner (réciproquement trace-route). Bien sûr, ces deux nouveaux outils vous seront détaillés par la suite.
Nous avons donc utilisé à plusieurs reprises cette file : premièrement pour stocker les paquets erronés, et deuxièmement, pour les réponses du scanner et du trace-route.
  1. Le type file_securise :
    il s'agit d'un enregistrement qui contient un pointeur vers le noeud de fin de file, le booléen qui dit si la file est bloquée, un troisième champ qui indique la taille de la file.
     
  2. Le type file est un pointeur sur le type noeud.
     
  3. Le type noeud est un enregistrement qui contient un pointeur sur le paquet, la taille du paquet, et son précédent.
     
Nous n'avions aucun intérêt à parcourir ces files. Nous avons donc fait au plus économique de façon à ce que les fonctions Enfiler et Défiler soient très courtes.
Au debut de chacune des fonctions, tant que la file est bloquée, on ne fait rien. Dès qu'elle est débloquée, la fonction bloque la file à son tour. A la fin de chaque fonction, la file est débloquée.  
 
 


 
 
 
 
 
 
 
 
 

next up previous contents
Next: Requêtes et réponses ARP Up: Gestion des Threads et Previous: Quelques détails sur les   Contents
root 2002-06-23