.-. .-. .-. .-. .-. .-. .-. .-. .-. .-.
.' `._.' `._.' `._.' `._.' `._.' `._.' `._.' `._.' `._.'
,,__
.. .. / o._) .---
##### # # #### # # /--'/--\ \-'|| .----. .'
# # # # # # # / \_/ / | .' '..'
# # # # #### ###### .'\ \__\ __.'.' .' ì-._
##### # # # # # )\ | )\ | _.'
# # # # # # # # // \\ // \\
# # #### #### # # ||_ \\|_ \\_
'--' '--'' '--'
-. .-. .-. .-. .-. .-. .-. .-. .-. .-.
`._.' `._.' `._.' `._.' `._.' `._.' `._.' `._.' `._.' `._
-------------------------------------------------------------------------------
Modalités de rendu
-------------------------------------------------------------------------------
Groupe de News: epita.cours.c-unix.a1
date de rendu: Dimanche 8 Décmbre - 8h00 AM
Nombre de personnes par groupe: 5
Répertoire de rendu: ~/c/rendu/rush/myirc
Droits sur les répertoires: 700 sur ~/c/rendu/rush et ~/c/rendu
700 pour les scripts tels que
configure
600 pour les fichiers
o+x sur ~/ ~/c/ ~/c/rendu
Avant de commencer a lire ce sujet, l'un des membres de votre groupe
doit envoyer un mail a boulla_c, avec pour sujet : "Vivent les acus",
et un corps vide. Ce mail valide l'inscription de votre groupe au
rush.
printf '-- \nVive le rush\n' | mail -s "Vivent les acus" boulla_c
Le rendu ne doit être fais que sur un seul compte, celui-ci contenant un
fichier 'AUTHORS' conforme au CSS EPITA.
-------------------------------------------------------------------------------
INTRODUCTION
-------------------------------------------------------------------------------
* Pourquoi un Rush ?
Les rushs, d'habitude petites gateries réservées au élèves de la spé
SRS, sont des épreuves limités dans le temps. Du fait que vous soyez
par groupe et que le sujet a était judicieusement étudié pour que vous
ayez entièrement le temps de faire le projet, le rush à pour ambition
de vous apprendre à vous organiser à gérer votre temps, en tant que
personne mais aussi en temps que groupe.
Il va donc vous falloir vous répartir les tâches si vous voulez
terminer à l'heure. Et sachez aussi qu'un bon travail d'équipe
commence sur papier, et non dans le code.
* Qu'est-ce qu'IRC ?
L'IRC permet d'accéder à des canaux (channels) sur lesquels conversent
diverses personnes, et donc de participer à leur conversation, mais
aussi de créer soi-même un canal temporaire où bavarder avec qui vous
le souhaitez.
Ces canaux sont publics ; les propos que vous y tenez sont donc
accessibles à tous ceux qui, à un moment ou à un autre, se branchent
sur ce canal. Vous avez néanmoins la possibilité, si ce souhait est
partagé (pas question de forcer la main a une pamela ou bratt meme si
il(elle) vous parait tres allechant au premier abord), d'entamer un
dialogue privé avec une personne particulière, auquel cas les autres
personnes connectées au canal n'auront plus connaissance des paroles
échangées.
Les conversations se tiennent sous couvert d'un pseudonyme et qu'il
n'est donc pas possible de connaître l'identité réelle des
interlocuteurs. C'est évidemment à la fois la limite du système (on
peut vous mentir allègrement) et ce qui lui donne son côté piquant
(vous pouvez parler sans entraves...mais jusqu'a certaines limites).
Il va de soi que les canaux du style Minitel rose constituent une des
attractions de l'IRC...
-------------------------------------------------------------------------------
Contraintes techniques
-------------------------------------------------------------------------------
Vous devez coder ce projet en C.
Toutes les fonctions déjà vues en cours sont autorisées, mais toute
fonction utilisée doit pouvoir être justifiée.
Toutes autorisées sauf:
fork(2)
Vous n'avez pas droit à un pointeur ou à une stucture globale. Au pire
vous avez la possibilité d'utiliser une variable globale si vous
utilisez des signaux.
-------------------------------------------------------------------------------
Soutenance
-------------------------------------------------------------------------------
Vous devrez venir en soutenance avec une presentation de votre travail
et des résultats obtenus. Vous devrez vous appuyer sur une
présentation magic point ou des slides en LaTeX.
Les slides sont à fournir au format électronique uniquement au début
de la soutenance.
Vous devrez notamment mettre en avant durant votre soutenance la
manière dont vous vous serez servi de l'indice donné en réunion adm
vendredi. Faites attention à garder votre fiche d'indice en bon état,
afin que votre ACU de soutenance puisse savoir quel était votre
indice.
-------------------------------------------------------------------------------
Description
-------------------------------------------------------------------------------
Le but de ce rush est d'écrire un programme permettant de converser à
plusieurs en utilisant les terminfos (terminfo(5)) et les sockets
(socket(2)).
Le projet est composé de deux parties distinctes :
* le serveur, qui reçoit les connections et gère les clients
* le client, qui se connecte au serveur et qui permet de discuter
avec d'autres clients.
Vous devez faire les deux parties. Si l'une n'est pas faite, l'autre
ne sera pas corrigée.
_____________
< Le Serveur >
/ \~~~/ \ -------------
,----( .. ) /
/ \__ __/ /
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
Le serveur est un programme lancé sur une machine et qui attend les
connections du ou des clients. Le serveur prend en paramètre un numéro de
port optionnel (option -p) sinon il demande au système d'en choisir un.
ex:
$ ./myircd -p 666
(NB: Il est conseillé d'utiliser votre uid comme numéro de port).
Lorsque plusieurs clients sont connecté au serveur, ce dernier doit envoyer
ce qu'il reçoit d'un client vers tous les autres clients.
_____________
< Le Client >
/ \~~~/ \ -------------
,----( .. ) /
/ \__ __/ /
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
Le client pourra être lancé sur une machine différente que le
serveur. Il se connectera au serveur et au port spécifié en argument.
ex:
$ ./myirc lucifer 666
Le nom de la machine sur lequel est lancé le serveur peut être soit un
nom de machine, soit une adresse IP. A vous de résoudre les noms.
Les clients ne doivent communiquer entre eux que par l'intermédiaire du
serveur.
Chaque client pourra être lancé sur une machine différente.
Le 'design' du client est à la charge de votre imagination. On peut
imaginer la partie inférieur de l'écran (celle où apparaissent les
messages des autres clients) comme une interface de client irc. Libre
à vous d'ajouter ce qu'il faut avant chaque portion de texte pour que
l'on comprenne qui dit quoi (couleur, nicks, etc.). A vous aussi de
voir comment différencier commandes et texte simple.
_____________
< NIVEAU 0 >
/ \~~~/ \ -------------
,----( .. ) /
/ \__ __/ /
/| (\ |)
^ \ /___\ /\ |
|__| |__|-"
Au niveau 0, le client doit pouvoir :
- se connecter au serveur
- entrer dans un canal de discussion
- Discuter publiquement, c'est à dire que tout le monde peut lire
ce que tout le monde écrit
- Discuter en privé avec une autre personne, sous réserve que cette
personne soit d'accord
La fenêtre du client pourra être redimensionnée en cours d'exécution
du programme, et donc devra être rafraîchie.
_____________
< NIVEAU 1 >
/ \~~~/ \ -------------
,----( oo ) /
/ \__ __/ /
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
Dans ce niveau, chaque client peut créer un canal temporaire, dans
lequel peuvent venir discuter n'importe quel autre client.
Le créateur du canal temporaire est dit le 'bot' ('robot' abrégé). Le
bot peut dans son canal :
- kicker une personne, c'est à dire demander au serveur de la
déconnecter.
- bannir une personne ou une adresse IP. Une fois bannie, une
personne ne peut plus se connecter au canal.
- donner des droits sur le canal (kick et/ou ban) a un autre
utilisateur.
_____________
< NIVEAU 2 >
/ \~~~/ \ -------------
,----( 00 ) /
/ \__ __/ /
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
Faire une interface pour le serveur. Il faut pouvoir avec cette
interface:
- afficher la liste des cannaux ainsi que le nombre
d'utilisateur par canal
- afficher la liste des utilisateurs connectés au serveur
Sur l'interface du client ou pourra affichier des caractères en gras
et/ou en couleur, selon des balises arbitrairement choisies par vos
soins.
! ! ! _____________
< NIVEAU 3 >
/ \~~~/ \ -------------
,----( 00 ) /
/ \__ __/ /
/| (\ |)
^ \ /___\ /\ |
|__| |__|-"
Deux clients pourront s'échanger des fichiers. Les transfers ne
transiteront pas par le serveur, mais se feront directement entre les
deux clients.
-------------------------------------------------------------------------------
Manuels recommandés
-------------------------------------------------------------------------------
ioctl(2) select(2) sigaction(2) socket(2) terminfo(5)
Vous pouvez définir votre propre protocole de communication. Cependant il
est fortement conseilé de suivre la RFC décrivant le protocole IRC (RFC
1459). Vous trouverez tout ce qu'il vous faut en matière de RFC par ici :
http://www.rfc-editor.org/
------------------------------------------------------------------------------
Modalités de rendus et contraintes
------------------------------------------------------------------------------
Votre répertoire de rendu doit contenir vos sources, le rapport en
latex, un fichier Makefile, et optionnellement un script configure,
ou un fichier Rules.make, ...
Votre Makefile doit contenir deux règles de construction principales,
portant le nom des exécutables qu'elles doivent générer: "myirc" et
"myircd".
Les tests de validation du code susceptibles d'être éffectués par la
moulinette de correction appartiennent a l'ensemble des tests qui ne
produisent pas de warnings avec GCC 3 et les options "-Wall -W
-pedantic -std=c99". Ceci ne signifie _pas_ que vous deviez
obligatoirement utiliser ce compilateur, juste que celui-là ne doit
pas générer d'erreurs.
Une version de GCC 3.2 est dispo ici:
/u/dp/public/arch/`uname -m`-`uname -s`/bin/gcc-3.2
Les autres modalités de rendu (règles de Makefile, options de
compilation), ainsi que vos sources, doivent être conformes aux
spécifications correspondantes du CSS << norme >>.
Note: N'oubliez pas le fichier AUTHORS, spécifié dans le CSS.
------------------------------------------------------------------------------
Archive de rendu
------------------------------------------------------------------------------
Une fois que vous avez terminé votre travail, vous devez rendre vos sources
dans le fichier :
~/c/rendu/$USER-rush-myirc.tar.gz.gpg
Pour generer ce fichier, utilisez le script ~acu/mbin/rendu.sh, comme suit :
~acu/mbin/rendu.sh rush myirc
Attention: Cette archive doit etre lisible par tout le monde.
------------------------------------------------------------------------------
Rappels
------------------------------------------------------------------------------
Avant de poser une question sur les news, réflechissez, relisez le passage
correspondant dans le sujet et dans les manuels fournis.
Tout ce qui n'est pas explicitement demandé n'est pas à faire.
Allez tous a la X-mas jeudi prochain !
|