YooGoo

 
 
Bienvenue sur YooGoo
 
 

 
 
News

Description du Projet
Avancement du Projet
L'équipe
Photos du Projet et du reste
 
 

 
 
Téléchargement

Le Client
Le Serveur
Les Sources Serveur
Les Sources Client
Cahiers des Charges
Soutenance 1
Soutenance 2
Soutenance 3
Soutenance Finale
 
 

 
 
Contacts

Franck Tetzlaff CV Tessari Marco CV Bouhelier Stéphane CV Pouiller Jérôme CV
 
 

 
 

Les canaux

Qu'est-ce qu'un canal, un salon et un chatroom?

Le principal but de YooGoo est d'accueillir ses utilisateurs sur des canaux. Un canal peut aussi être appelé Chatroom ou salon. Un salon est un "lieu" (ici, virtuel) où les utilisateurs discutent entre eux. Chaque phrase de chaque utilisateur est retransmise à tous les autres utilisateurs connectés sur le même salon.

Principes d'un Canal.

Un canal correspond en gros à une liste d'utilisateurs. Effectivement, toutes les fonctions basiques d'un canal peuvent se faire sur une liste. Lorsqu'un utilisateur envoie un message à un canal (MSGCHAN CANAL MESSAGE), on envoie un message à chaque utilisateur de la liste. Le message renvoyé a la structure suivante:

        msgChan Canal Pseudo_de_l_expéditeur Message

Lorsqu'un utilisateur arrive ou part du canal, un message informe les autres utilisateurs de l'évènement. Lorsqu'un utilisateur essaye de joindre un canal qui n'existe pas celui-ci est automatiquement créé. De même, lorsque le dernier utilisateur d'un canal s'en va, ce dernier est automatiquement détruit. Ceci pourra être modifié en changeant l'option KEEP que nous verrons plus loin.

L'utilisateur aura aussi besoin de savoir qui est connecté avec lui sur le canal. La fonction GETCONNECTED renvoie la liste des utilisateurs d'un canal. Pour cette fonction, nous utilisons la méthodes des RPL_ ... RPL_END. Un message RPL_GETCONNECTED est envoyé pour chaque utilisateur. La fin de la liste est signalée par le message RPL_ENDGETCONNECTEDS. GETCONNECTEDS renvoie aussi le statut et le grade des utilisateurs. Nous verrons tout a l'heure la hiérarchie sur les canaux. Ces information seront utiles au client pour faire la liste des connectés.

Par exemple :

            <- getconnecteds Epita
            -> Rpl_GetConnecteds Epita Danao ONLINE ChanRoot
            -> Rpl_GetConnecteds Epita Zapata AWAY User
            -> Rpl_GetConnecteds Epita Folken DND User
            -> Rpl_GetConnecteds Epita Hargos ONLINE Op
            -> Rpl_EndGetConnecteds
            -> 0 Inf_Ok

Hiérarchie et droits sur les canaux.

Les fonctions précédentes permettent d'avoir un canal de base. YooGoo permet une gestion avancée des canaux en ajoutant des droits à certains utilisateurs. Pour un utilisateur novice, cette partie administrative est totalement transparente. Son client lui affiche la liste des canaux, il fait un double click sur l'un d'entre eux pour le joindre puis, il peut discuter. Il existe quatre grades sur YooGoo. Tout d'abord l'utilisateur normal sans droit particulier. Il peut créer un canal (c'est-à-dire joindre un canal qui n'éxiste pas). A ce moment, il est considèré fondateur du canal et obtient tous les droits sur le canal. Il peut nommer une autre personne comme fondateur du canal pour par exemple l'administrer à deux ou bien avoir un utilisateur avec pouvoir de secours en cas de problème. Ces utilisateurs sont appelés ChanRoots. Il est possible sur des gros canaux d'avoir besoin de sous fifres pour gérer le canal. Mais, il peut être dangereux de leurs donner tous les droits. Ces utilisateur, avec des droits moins importants que le ChanRoot, sont des Opérateurs (on dira "Op" (prononcer Opé) dans la pratique). Chanroot peut décider des droits des Op. Enfin, tout en haut de l'échelle se trouve Root, c'est à dire l'administrateur du serveur. Il a le droits de tout faire, il n'a aucune barrière. Nous parlerons plus longuement de ses fonctions dans la partie "Fonctions d'administrations". Signalons enfin, qu'un utilisateur peut être banni d'un canal. Lorsqu'un utilisateur se joint à un canal, on vérifie tout d'abord qu'il n'est pas banni, si c'est le cas, sa demande est refusée et il ne peut joindre le canal.

Pour savoir quel grade a chaque utilisateur sur un canal, nous utilisons trois listes de pseudonymes (ou NickName, en anglais). Vu que les pseudo(nymes) sont protégés par mot de passe, on est sûr de l'identité d'un utilisateur. Il n'est donc pas possible de devenir ChanRoot sur un canal en usurpant l'identité de celui-ci. Les fonctions suivantes permettent l'ajout et la suppression dans les listes des ChanRoot/Op/bannis :

  • CHANROOT CANAL PSEUDO (nomme un ChanRoot)
  • DECHANROOT CANAL PSEUDO (supprime un utilisateur de la liste des ChanRoot)
  • OP CANAL PSEUDO (nomme un Op)
  • DEOP CANAL PSEUDO (supprime un utilisateur de la liste des Op)
  • BAN CANAL PSEUDO (bannit un utilisateur)
  • DEBAN CANAL PSEUDO (supprime un utilisateur de la liste des Bannis)

Pour gérer les droit des op, nous utilisons donc un entier où chaque bit correspond à une fonction que les op peuvent utiliser. Si le bit est à 0, ils n'y ont pas accès, sinon, ils peuvent utiliser la commande. ChanRoot a accès à la commande CHMOD CANAL COMMANDE {ONOFF} qui permet aux ops d'utiliser ou non $<$Commande$>$. La fonction CHMOD utilise un masque de bit pour mettre à jour la variable Droit. Si ChanRoot décide de mettre toutes les commandes sur OFF, l'OP n'a alors pas plus de droits d'un utilisateur normal. Si ChanRoot décide de mettre toutes les commandes sur ON, les OP ont alors presque autant de pouvoir que lui. Lors de la création du canal, les Ops ont par défaut tous les droits. Tous les champs sont donc à 1. Les seules commandes qui ne peuvent jamais devenir accessible aux OP sont CHANROOT (Nommer un ChanRoot), DECHANROOT (supprimer un utilisateur de la liste des ChanRoot), CHMOD (Modifier les droits des Ops) et CHKEEP et CHPRIV (que nous verrons plus bas). Ainsi, pour chaque commande d'administration du serveur, on vérifie que le demandeur est ChanRoot OU (Op ET A_le_Droit).

Voici un exemple de ce qui peut se passer sur un canal Epita où Hargos est ChanRoot, Danao est Op et Lamer est un utilisateur normal:

            Hargos -> ChMod Epita Ban OFF
            Hargos <- Inf_Ok
            **** Si l'op n'a pas le droit de bannir ***
            Danao -> ban Epita Lamer
            Danao <- Err_Privileges
            *** On modifie la variable Droit ***
            Hargos -> ChMod Epita Ban On
            Hargos <- Inf_Ok
            *** Ca marche ***
            Danao -> ban Epita Lamer
            *** Tout le canal est averti de l'évènement ***
            Danao <- ban Danao Epita Lamer
            Hargos <- ban Danao Epita Lamer
            Lamer <- ban Danao Epita Lamer
            Danao <- Inf_Ok

Aux fonctions permettant de gérer la hiérarchie sur le canal s'ajoute les fonctions permettant de gérer les petits détails du canal. Tout d'abord, la fonction KICK CANAL NICK. Quand un utilisateur ne respecte pas les règles sur un canal, un op peut décider de "kicker" celui ci, c'est-à-dire, le forcer à partir du canal. Ceci n'empêchera pas l'utilisateur de revenir tout de suite après, mais, elle sert d'avertissement au bannissement (généralement accompagné d'un kick). Un canal possède aussi des champs pour le nom du canal, son sujet, son mot de passe et sa catégorie. Ces champs peuvent être respectivement modifiées par CHCHANNAME, CHCHANTOPIC, CHCHANPASS et CHCHANCAT. Le sujet permet de donner un aperçu du sujet de discussion du canal. Le mot de passe empêche de joindre le canal si on ne le possède pas. Si la variable est vide, cela signifie qu'il n'y a pas de mot passe. Lorsqu'un utilisateur joint un canal protégé par mot de passe, il doit passer celui-ci en paramètre de la commande Join. On compare ce mot de passe avec celui du canal. S'ils sont différents, l'accès est refusé. Enfin, à la catégorie correspond un nombre qui permet de savoir sur quel sujet est le canal (A la manière catégories Yahoo : Informatique, Voyage, Informations, etc...)

Informations sur un canal.

Toutes ces informations peuvent être récupérées grâce à la commande WHAT CANAL. Cette commande renvoie diverses info sur le canal sous la forme suivante: RPL_WHAT NOM SUJET DROITS_DES_OP CATEGORIE NOMBRE_DE_CONNECTES NOMBRE_D'OP NOMBRE_DE_CHANROOT NOMBRE_DE_BANNIS.

Un utilisateur peut aussi recevoir la liste des ChanRoot/Op/bannis du canal grâce aux commande GETCHANROOTS, GETOPS, GETBANS. Ces commandes renvoient une liste de nom de la même façon que GETCONNECTEDS. C'est à dire RPL_GETOPS... RPL_ENDGETOPS... etc

Enfin, pour que les utilisateurs puissent parfaitement utiliser les canaux, il faut une commande permettant de donner la liste de ceux-ci. GETCHANS effectue cette tâche. Le message renvoyé est basé sur le même modèle que GETCONNECTED, GETBANS, etc...

Canal permanent, privé et invitations.

Au début de cette partie, nous avons dit que lorsque le dernier connecté sur un canal s'en allait, le canal était détruit. La variable Droits possède un bit supplémentaire permettant d'empêcher cela lorsque ce bit est à 1. CHKEEP permet de modifier la valeur de ce bit. CHKEEP n'est utilisable que pas ChanRoot. Ainsi, lorsque le dernier utilisateur s'en va, le canal et toute sa configuration sont conservés.

Nous savons qu'il existe deux sortes d'utilisateurs dans YooGoo, les enregistrés et les non-enregistrés. De plus les diverses listes utilisées pour l'administration d'un canal sauvegardent les noms des utilisateurs. Ces raisons font qu'un administrateur de canal peut désirer qu'il n'y ait que des utilisateurs enregistrés sur son canal. Pour cela il existe un fanion PRIVÉ. Celui-ci fonctionne comme le fanion KEEP. Il n'est utilisable que par le ChanRoot. Une fois activé, seuls les utilisateurs enregistrés pourront joindre le canal.

Nous avons vu qu'il est possible de protéger l'accès à un canal par un mot de passe. Ainsi pour permettre à quelqu'un de rejoindre le canal il faut lui donner le mot de passe. Mais cette méthode peut être dangereuse, le mot de passe peut rapidement tomber entre de mauvaises mains. Les ops et chanroot ont alors une autre méthode pour permettre à un utilisateur lambda d'accéder au canal : ils peuvent l'inviter. La commande INVITE USER et DEINVITE USER permet la gestion des invités. Ces fonctions marchent comme les OP/DEOP, grâce à une liste. Lorsqu'un utilisateur essaye de joindre un canal qui est protégé par un mot de passe on regarde s'il est invité. Si oui, on le supprime de la liste d'invité et il peut rejoindre le canal. Ainsi une invitation n'est valable qu'une fois. De plus la liste d'invité n'est pas sauvegardée. Ces deux points peuvent sembler fastidieux mais permettent aux ops d'avoir un maximum de contrôle des allées et venues dans leur canal.

 
 

 
 
Documentation

FAQ
Conception du Protocole
SDK en Ligne
Télécharger SDK
Cahiers des Charges
Soutenance 1
Soutenance 2
Soutenance 3
Soutenance Finale

Comment marche...
Les Canaux
Le Profile
L'administration
La Base de Données
La Cryptographie
Winsock
Le Multithreading
 
 

 
 
Liens

Epita
EpiTarget
Hallucinetik - Zone 42
poupouill.fr.st Minosis (Spé C2)
La Spé C1
La Sup C1
 
 


 
 
made in Epita Powered by ApachePHP Scripting Language

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2000 by YooGoo Team
Des remarques, des question, des choses pas claires? Hargos@ifrance.com