Aller au contenu principal

3. Diagramme d'état et de flux (State and Flow Diagram)

Une fois la connexion entre le client et le serveur établie, une connexion IMAP4rev2 se trouve dans l'un des quatre états. L'état initial est identifié dans le message d'accueil du serveur. La plupart des commandes ne sont valides que dans certains états. C'est une erreur de protocole pour le client de tenter une commande alors que la connexion est dans un état inapproprié, et le serveur répondra avec un résultat de completion de commande BAD ou NO (selon l'implémentation du serveur).

3.1 État non authentifié (Not Authenticated State)

Dans l'état non authentifié, le client doit (doit) fournir des informations d'authentification avant que la plupart des commandes ne soient autorisées. Cet état est entré lorsqu'une connexion démarre, sauf si la connexion a été pré-authentifiée.

3.2 État authentifié (Authenticated State)

Dans l'état authentifié, le client est authentifié et doit (doit) sélectionner une boîte aux lettres pour y accéder avant que les commandes affectant les messages ne soient autorisées. Cet état est entré lorsqu'une connexion pré-authentifiée démarre, lorsque des informations d'authentification acceptables ont été fournies, après une erreur lors de la sélection d'une boîte aux lettres, ou après une commande CLOSE ou UNSELECT réussie.

3.3 État sélectionné (Selected State)

Dans un état sélectionné, une boîte aux lettres a été sélectionnée pour y accéder. Cet état est entré lorsqu'une boîte aux lettres a été sélectionnée avec succès.

3.4 État de déconnexion (Logout State)

Dans l'état de déconnexion, la connexion est en cours de terminaison. Cet état peut être entré suite à une demande du client (via la commande LOGOUT) ou par une action unilatérale de la part du client ou du serveur.

Si le client demande l'état de déconnexion, le serveur doit (doit) envoyer une réponse BYE non étiquetée et une réponse OK étiquetée à la commande LOGOUT avant que le serveur ne ferme la connexion ; et le client doit (doit) lire la réponse OK étiquetée à la commande LOGOUT avant que le client ne ferme la connexion.

Un serveur ne devrait pas (ne devrait pas) fermer unilatéralement la connexion sans envoyer d'abord une réponse BYE non étiquetée contenant la raison de cette action. Un client ne devrait pas (ne devrait pas) fermer unilatéralement la connexion ; au lieu de cela, il devrait (devrait) émettre une commande LOGOUT. Si le serveur détecte que le client a fermé unilatéralement la connexion, le serveur peut (peut) omettre la réponse BYE non étiquetée et simplement fermer sa connexion.

Diagramme de transition d'état

                  +----------------------+
|connection established|
+----------------------+
||
\/
+--------------------------------------+
| server greeting |
+--------------------------------------+
|| (1) || (2) || (3)
\/ || ||
+-----------------+ || ||
|Not Authenticated| || ||
+-----------------+ || ||
|| (7) || (4) || ||
|| \/ \/ ||
|| +----------------+ ||
|| | Authenticated |<=++ ||
|| +----------------+ || ||
|| || (7) || (5) || (6) ||
|| || \/ || ||
|| || +--------+ || ||
|| || |Selected|==++ ||
|| || +--------+ ||
|| || || (7) ||
\/ \/ \/ \/
+--------------------------------------+
| Logout |
+--------------------------------------+
||
\/
+-------------------------------+
|both sides close the connection|
+-------------------------------+

Légende

  • (1) connexion sans pré-authentification (message d'accueil OK)
  • (2) connexion pré-authentifiée (message d'accueil PREAUTH)
  • (3) connexion rejetée (message d'accueil BYE)
  • (4) commande LOGIN ou AUTHENTICATE réussie
  • (5) commande SELECT ou EXAMINE réussie
  • (6) commande CLOSE ou UNSELECT, code de réponse CLOSED non sollicité, ou commande SELECT ou EXAMINE échouée
  • (7) commande LOGOUT, arrêt du serveur, ou connexion fermée