Contrôles des connaissances de aci
2. Projet de fin d’année

L’Internet Relay Chat protocol a été conçu et implémenté dès 1988 en Finlande par Jarkko Oikarinen, puis remanié en Avril 2000 sous forme de 4 RFC invalidant le RFC 1459 originel.

Le but du projet est de réaliser un client IRC simplifié quant au protocole décrit dans le RFC 2812 mais plus élaboré en ce qui concerne le corps des messages. Ceux-ci pourront en effet contenir une balise path de SVG, qu’il faudra interpréter avec X-window pour offrir aux utilisateurs la possibilité d’envoyer leur émoticones (alias smileys), plutôt que de se fier aux images standards de leurs interlocuteurs.

La simplification du protocole empêchant ce client de dialoguer avec un serveur IRC réel, il faudra tout d’abord détourner le serveur POP déjà étudié pour lui faire accepter quelques requêtes IRC simulant sommairement le service. Il n’est pas interdit cependant, en question subsidiaire, de mener le client jusqu’à une implémentation compatible avec un serveur complet.

Toute question à propos de ce projet devra passer par le forum à la fin de cet énoncé, afin que chacun profite des mêmes informations (pour cette raison, les questions posées par mail seront ignorées).

La remise du projet prendra la forme de quatre fichiers C nommés qi.c répondant aux quatre questions, un makefile ayant les buts qi, un fichier .h, et un fichier lib.c contenant les fonctions C publiées sur ce site et nécessaires à vos fonctions personnelles. Ce projet est à rendre par Delivery Builder (code IRC) pour le 28 Juin à minuit, le cachet de la méthode POST faisant foi.



1 Un serveur instantané de messagerie instantanée

Côté serveur, IRC est une sorte de serveur POP asynchrone : quand un utilisateur est authentifié, le serveur lui envoie le contenu de sa boite aux lettres instantanée dès qu’un nouveau message y est entré, et il vide la boîte aussitot. Lorsque l’utilisateur se déconnecte, il rend la boîte inaccessible en écriture.

De plus, un serveur IRC est une sorte de serveur SMTP en ce qu’il admet une commande PRIVMSG noms :texte, et dépose alors dans les boîtes instantanées des utilisateurs spécifiés par la liste noms le texte texte (repérable par le deux-points initial à ignorer ensuite).

Reprendre le mini serveur POP vu en travaux dirigés (Le Post Office Protocol coté serveur) afin qu’il accepte exclusivement les requêtes USER (en gardant la même méthode d’authentification que celle étudiée), QUIT et PRIVMSG (en implémentant la spécification ci-dessus). On conservera les mêmes conventions de réponses (OK/KO) que POP (ce qui n’est pas le cas en vrai).

Changer enfin ce serveur pour qu’il surveille toutes les secondes si la boite instantanée est non vide, auquel cas il l’envoie au client et la remet à zéro.


Obtenir un formulaire de soumission de comptes rendus

2 Un client IRC en mode texte

En vous inspirant du client POP vu en travaux sur machine (Le Post Office Protocol coté client), écrire un client IRC implémentant les requêtes suivantes :

En outre, le client doit s’attendre à des envois asynchrones du serveur, c’est-à-dire hors réponses aux envois du client, et tout en laissant son utilisateur émettre de nouvelles requêtes. Ces envois spontanés seront affichés sur le flux de sortie.


Obtenir un formulaire de soumission de comptes rendus

3 Un client IRC aussi client X-Window

On souhaite maintenant munir le client IRC d’une interface graphique un peu plus conviviale. Pour cela, on se connectera au serveur X-window et on ouvrira une fenêtre principale, incrustée dans sa partie basse d’une fenêtre fille destinée à recevoir la saisie d’une ligne par l’utilisateur, le reste de la fenetre principale étant dévolu à la réception des lignes envoyées par le serveur.

Le programme client aura deux arguments supplémentaires (en plus du serveur IRC et de son port) spécifiant les polices de caractères à utiliser pour la réception et pour la saisie. On se servira de la métrique de ces polices pour calculer la taille des deux fenêtres à ouvrir, de sorte que les lignes ne se chevauchent pas, et que les quatre marges ne soient pas plus grandes que le plus grand des caractères de la police.

On acceptera enfin un cinquième argument, de forme =lxc+x+y spécifiant les coordonnées x,y du bord supérieur droit de la fenêtre, ainsi que son nombre de lignes l et son nombre de colonnes c. Le nombre de lignes visibles envoyées par le serveur est donc l-1, et il faudra implémenter un défilement pour voir à tout moment les dernières lignes envoyées par le serveur, ainsi que la ligne en cours de saisie (effacée dès appui sur la touche entrée).

Pour être à l’écoute à la fois du serveur IRC et du serveur X-window, on pourra s’inspirer de l’implémentation de xhextris etudié à plusieurs reprises.


Obtenir un formulaire de soumission de comptes rendus

4 Emoticones de Bézier

On souhaite enfin interpréter dans les messages envoyés une éventuelle balise <path d=’...’ stroke=’...’> comme étant un chemin au sens de SVG. On se restreindra ici au commandes m l c, soit le positionnement relatif, la ligne droite relativement au point courant et la courbe de Bézier de même. L’attribut stroke sera supposé contenir un nom de couleur commun à X-window et à SVG.

Modifier votre réponse à la question précédente pour repérer cette balise et l’interpréter à l’aide de la fonction XDrawLines de X-window, et des Courbes de Bézier interactives étudiées en travaux dirigés.


Obtenir un formulaire de soumission de comptes rendus

5 Foire Aux Questions

Cliquer sur le lien ci-dessous pour poser une question à propos du devoir. Il n’est pas nécessaire de s’authentifier pour poser une question, mais celle-ci n’apparaitra qu’après lecture par le modérateur.

Pensez à donner un titre significatif et différent de tous les titres précédents afin qu’il soit facile de retrouver une question sur un sujet donné si le nombre de questions devient grand.


Obtenir un formulaire de soumission de comptes rendus

logo-spip E. Saint-James & F. Kordon - Master Informatique - UPMC Valid XHTML 1.0!
Calculé le 19 janvier 2021 à 07h45min