général
curriculum vitae
contact

CARDIWEB
2007
2006
2005

Etudes
les projets
les sites web
les exposés

liens
OTB World
EPITA
PCN
CARDIWEB

 
   .-.     .-.     .-.     .-.     .-.     .-.     .-.     .-.     .-.     .-.
 .'   `._.'   `._.'   `._.'   `._.'   `._.'   `._.'   `._.'   `._.'   `._.'
						   ,,__
                                         ..  ..   / 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 !


 

 
 
     

| Copyright 2002 © OTB World Conception |
.:: version du site : v2.0 ::.