Coder Social home page Coder Social logo

ft_irc's Introduction

ft_irc

The ft_irc project is an exercise in creating an Internet Relay Chat (IRC) server in C++. The server should be able to handle multiple clients simultaneously and should not hang. It should be implemented using non-blocking file descriptors and a single poll() (or equivalent) for handling all input/output operations.

Requirements

To complete the ft_irc project, you must meet the following requirements:

  • Implement the IRC server in C++ 98.
  • Do not use forking.
  • Accept incoming IRC connections on the specified port.
  • Require a connection password for clients.
  • Implement the following commands: /nick, /join, /part, /users, /names, /msg, /send_file, /accept_file, /quit.

ft_irc's People

Contributors

mauricends avatar owllyy avatar simoncros avatar

Watchers

 avatar

ft_irc's Issues

INVITE

Commande: INVITE
Paramètres: {pseudonyme} {canal}

Le message INVITE est utilisé pour inviter des utilisateurs dans un canal. Le paramètre est le pseudonyme de la personne à inviter dans le canal destination . Il n'est pas nécessaire que le canal dans lequel la personne est invitée existe, ni même soit valide. Pour inviter une personne dans un canal en mode sur invitation (MODE +i), le client envoyant l'invitation doit être opérateur sur le canal désigné.

Réponses numériques :

       ERR_NEEDMOREPARAMS              ERR_NOSUCHNICK
       ERR_NOTONCHANNEL                ERR_USERONCHANNEL
       ERR_CHANOPRIVSNEEDED
       RPL_INVITING                    RPL_AWAY

Exemples:

:Angel INVITE Wiz #Dust ; L'utilisateur Angel invite WiZ sur le canal #Dust
INVITE Wiz #Twilight_Zone ; Commande pour inviter WiZ sur #Twilight_zone 

WHOIS

Commande: WHOIS
Paramètres: {masque de pseudo}[,masque de pseudo[,...]]

Ce message est utilisé pour obtenir des informations sur un utilisateur donné. Le serveur répondra à ce message avec des messages numériques indiquant les différents statuts de chacun des utilisateurs qui correspondent au (si vous pouvez les voir). S'il n'y a pas de joker dans le , toutes les informations auxquelles vous avez accès au sujet de ce pseudo seront présentées. On peut séparer la liste des pseudonymes avec une virgule (',').

La dernière version envoie une requête à un serveur spécifique. C'est utile si vous voulez savoir depuis combien de temps l'utilisateur concerné a été oisif, car seul le serveur local (celui auquel cet utilisateur est directement connecté) connaît cette information, alors que tout le reste est connu par tous les serveurs.

Réponses numériques :

       ERR_NOSUCHSERVER                ERR_NONICKNAMEGIVEN
       RPL_WHOISUSER                   RPL_WHOISCHANNELS
       RPL_WHOISCHANNELS               RPL_WHOISSERVER
       RPL_AWAY                        RPL_WHOISOPERATOR
       RPL_WHOISIDLE                   ERR_NOSUCHNICK
       RPL_ENDOFWHOIS

Exemples:

WHOIS wiz ; renvoie les informations disponibles sur le pseudo WiZ
WHOIS eff.org trillian ; demande au serveur eff.org les informations concernant trillian

NICK

Commande : NICK
Paramètres : {pseudonyme} [compteur de distance]

Le message NICK est utilisé pour donner un pseudonyme à un utilisateur, ou pour changer le pseudonyme précédent. Le paramètre n'est utilisé que par les serveurs, et sert à indiquer quelle est la distance entre un utilisateur et son serveur local. Une connexion locale a un compteur de distance de zéro. Si un client fournit un compteur de distance, il doit être ignoré.

Si un message NICK arrive à un serveur qui connaît déjà un autre client de pseudo identique, une collision de pseudonymes a lieu. Le résultat d'une collision de pseudonymes est la suppression de toutes les instances du pseudonyme de la base du serveur, et l'envoi d'un message KILL afin de retirer le pseudonyme des bases de données de tous les autres serveurs. Si le message NICK à l'origine de la collision de pseudonymes est un changement de pseudonyme, alors le pseudo originel (l'ancien) doit aussi être retiré.

Si le serveur reçoit un NICK identique d'un client auquel il est connecté directement, il peut envoyer un ERR_NICKCOLLISION au client local, ignorer la commande NICK, et ne pas générer de KILLs.

Réponses numériques :

       ERR_NONICKNAMEGIVEN             ERR_ERRONEUSNICKNAME
       ERR_NICKNAMEINUSE               ERR_NICKCOLLISION

Exemples:

NICK Wiz ; Ajout d'un nouveau pseudo "Wiz".
:WiZ NICK Kilroy ; WiZ change son pseudo en Kilroy. 

QUIT

Commande: QUIT
Paramètres: [Message de départ]

Une session de client se termine par un message QUIT. Le serveur doit rompre la connexion avec le client qui envoie un message QUIT. Si un <Message de départ> est fourni, il sera transmis au lieu du message par défaut, le pseudonyme.

Lorsqu'une division réseau a lieu (déconnexion de deux serveurs), le message de départ est composé du nom des deux serveurs en cause, séparés par un espace. Le premier nom est celui du serveur toujours connecté, et le second, celui qui est désormais inaccessible.

Si pour une autre raison, une connexion d'un client est fermée sans que le client ait envoyé de message QUIT (par exemple, le programme client se termine, et une fin de fichier est envoyée sur la socket), le serveur doit remplir le message QUIT avec un message reflétant la nature de l'événement à l'origine de cette déconnexion.

Réponses numériques:

       Aucune.

Exemples:

QUIT :Parti déjeuner ; Format de message préféré. 

LIST

Commande: LIST
Paramètres: [canal[,canal]]

Le message LIST est utilisé pour lister les canaux et leur sujet. Si le paramètre canal est utilisé, seul le statut de ces canaux est affiché. Les canaux privés sont listés (sans leur sujet) comme canal "Prv" à moins que le client qui génère la requête soit effectivement sur le canal. De même, les canaux secrets ne sont pas listés du tout, à moins que le client soit un membre du canal en question.

Réponses numériques :

       ERR_NOSUCHSERVER                RPL_LISTSTART
       RPL_LIST                        RPL_LISTEND

Exemples:

LIST ; Liste tous les canaux.
LIST #twilight_zone,#42 ; Liste les canaux #twilight_zone et #42 

NOTICE

Commande: NOTICE
Paramètres: {pseudonyme} {texte}

Le message NOTICE s'utilise de la même façon que PRIVMSG. La différence entre NOTICE et PRIVMSG est qu'aucune réponse automatique ne doit être envoyée en réponse à un message NOTICE. Ceci est aussi valable pour les serveurs - ils ne doivent pas renvoyer de message d'erreur à la réception d'un message NOTICE. Le but de cette règle est d'éviter les boucles entre les clients qui enverraient automatiquement quelque chose en réponse à une requête. Cela est typiquement utilisé par des automates (des clients qui ont une intelligence artificielle ou un autre programme interactif contrôlant leurs actions) qui répondent systématiquement aux réponses d'autres automates.

Voir PRIVMSG pour les détails sur les réponses, et pour les exemples.

MODE

Commande: MODE

La commande MODE est une commande à utilisation duale sur IRC. Elle permet aussi bien de changer les modes des utilisateurs que ceux des canaux. La raison à ce choix est qu'un jour les pseudonymes deviendront obsolètes et la propriété équivalente sera le canal.

Lors du traitement des messages MODE, il est recommandé de commencer par décomposer le message en entier, puis de réaliser les modifications résultantes.
4.2.3.1 Les modes des canaux

Paramètres: {canal} [[+|-]|o|p|s|i|t|n|b|v] [limite] [utilisateur] [masque de bannissement]

La commande MODE permet aux opérateurs de canal de changer les caractéristiques de 'leur' canal. Les serveurs doivent aussi pouvoir changer les modes du canal, de façon à pouvoir créer des opérateurs.

Les modes disponibles pour les canaux sont les suivants :
o - donne/retire les privilèges d'opérateur de canal
p - drapeau de canal privé
s - drapeau de canal secret
i - drapeau de canal accessible uniquement sur invitation
t - drapeau de sujet de canal modifiable uniquement par les opérateurs
n - pas de messages dans un canal provenant de clients à l'extérieur du canal
m - canal modéré
l - définit le nombre maximal de personnes dans un canal
b - définit un masque de bannissement pour interdire l'accès à des utilisateurs
v - donne/retire la possibilité de parler dans un canal modéré
k - définit la clé du canal (mot de passe)

Lors de l'utilisation des options 'o' et 'b', le nombre de paramètres est restreint à trois par commande, et ce pour n'importe quelle combinaison de 'o' et de 'b'.
4.2.3.2 Modes des utilisateurs

Paramètres: {pseudonyme} [[+|-]|i|w|s|o]

Les modes utilisateurs sont typiquement des modifications qui affectent la façon dont le client est vu par les autres, ou quels types de messages sont reçus. Une commande MODE n'est acceptée que si l'expéditeur du message et le pseudonyme donné en paramètre sont les mêmes.

Les modes disponibles sont :
i - marque un utilisateur comme invisible ;
s - marque un utilisateur comme recevant les notifications du serveur ;
w - l'utilisateur reçoit les WALLOPs ;
o - drapeau d'opérateur.

D'autres modes seront disponibles plus tard.

Si un utilisateur tente de devenir opérateur en utilisant le drapeau "+o", la tentative doit être ignorée. Par contre, il n'y a pas de restriction à ce que quelqu'un se 'deoppe' (en utilisant "-o").

Réponses numériques :

       ERR_NEEDMOREPARAMS              RPL_CHANNELMODEIS
       ERR_CHANOPRIVSNEEDED            ERR_NOSUCHNICK
       ERR_NOTONCHANNEL                ERR_KEYSET
       RPL_BANLIST                     RPL_ENDOFBANLIST
       ERR_UNKNOWNMODE                 ERR_NOSUCHCHANNEL

       ERR_USERSDONTMATCH              RPL_UMODEIS
       ERR_UMODEUNKNOWNFLAG

Exemples:

Utilisation des modes de canal:
MODE #Finnish +im ; Rend le canal #Finnish modéré et 'uniquement sur invitation'.
MODE #Finnish +o Kilroy ; Donne le privilège de 'chanop' à Kilroy sur le canal #Finnish.
MODE #Finnish +v Wiz ; Autorise WiZ à parler sur #Finnish.
MODE #Fins -s ; Annule le drapeau 'secret' du canal #Fins.
MODE #42 +k oulu ; Définit la clé comme "oulu".
MODE #eu-opers +l 10 ; Définit le nombre maximal d'utilisateurs dans le canal à 10.
MODE &oulu +b ; Liste les masques de bannissement du canal.
MODE &oulu +b *!*@* ; Interdit à quiconque de venir sur le canal.
MODE &oulu +b *!*@*.edu ; Interdit à tout utilisateur dont le nom d'hôte correspond à *.edu d'accéder au canal.

Utilisation des modes d'utilisateur :
:MODE WiZ -w ; supprime la réception des messages WALLOPS pour WiZ.
:Angel MODE Angel +i ; Message d'Angel pour se rendre invisible.
MODE WiZ -o ; WiZ se 'deoppe' (retire son statut d'opérateur). Le contraire ("MODE WiZ +o") ne doit pas être autorisé car cela court-circuiterait la commande OPER. 

PRIVMSG

Commande: PRIVMSG
Paramètres: {destinataire}{,destinataire} {texte à envoyer}

PRIVMSG est utilisé pour envoyer un message privé entre des utilisateurs. {destinataire} est le pseudonyme du destinataire du message. {destinataire} peut aussi être une liste de noms ou de canaux, séparés par des virgules.

Le paramètre {destinataire} peut aussi être un masque d'hôte (masque #) ou un masque de serveur (masque $). Le masque doit contenir au moins un (1) ".", et aucun joker après le dernier ".". Cette limitation a pour but d'empêcher les gens d'envoyer des messages à "#" ou à "$", ce qui provoquerait la diffusion à tous les utilisateurs ; l'expérience montre qu'on en abuse plus qu'on en use intelligemment, de façon responsable. Les jokers sont les caractères '*' et '?'. Ces extensions de PRIVMSG ne sont accessibles qu'aux opérateurs.

Réponses numériques:

       ERR_NORECIPIENT                 ERR_NOTEXTTOSEND
       ERR_CANNOTSENDTOCHAN            ERR_NOTOPLEVEL
       ERR_WILDTOPLEVEL                ERR_TOOMANYTARGETS
       ERR_NOSUCHNICK
       RPL_AWAY

Exemples:

:Angel PRIVMSG Wiz :Salut, est-ce que tu reçois ce message ? ; Message d'Angel à Wiz.
PRIVMSG Angel :oui, je le reçois ! ; Message à Angel.
PRIVMSG [email protected] :Hello ! ; Message à un client du serveur tolsun.oulu.fi dont le nom est "jto".
PRIVMSG $*.fi :Server tolsun.oulu.fi rebooting. ; Message à tous sur les serveurs dont les noms correspondent à *.fi.
PRIVMSG #*.edu :NSFNet is undergoing work, expect interruptions ; Message à tous les utilisateurs qui viennent d'un hôte dont le nom correspond à *.edu.

PING

Commande: PING
Paramètres:

Le message PING est utilisé pour tester la présence d'un client actif à l'autre bout de la connexion. Un message PING est envoyé régulièrement si aucune activité n'est détectée sur une connexion. Si la connexion ne répond pas à la commande PING dans un certain délai, la connexion est fermée.

Tout client qui reçoit un message PING doit répondre au serveur (serveur qui a envoyé le message PING) aussi rapidement que possible, avec un message PONG approprié pour indiquer qu'il est toujours là et actif. Les serveurs ne doivent pas répondre aux commandes PING, mais se fier au PING dans l'autre sens pour indiquer que la connexion est toujours active.

Réponses numériques :

       ERR_NOORIGIN                    ERR_NOSUCHSERVER

Exemples:

PING tolsun.oulu.fi ; serveur envoyant un message PING à un autre serveur pour indiquer qu'il est toujours actif.
PING WiZ ; message PING envoyé au pseudo WiZ

KILL

Commande: KILL
Paramètres: {pseudonyme} {commentaire}

Le message KILL est utilisé pour provoquer la fermeture de la connexion client/serveur par le serveur qui gère cette connexion. KILL est aussi utilisé par les serveurs qui rencontrent un doublon dans la liste des entrées de pseudonymes valides, afin de retirer les deux entrées. Elle est également accessible aux opérateurs.

Les clients qui ont des reconnexions automatiques rendent cette commande inefficace, car la déconnexion est brève. Cela permet tout de même d'interrompre un flux de données et est utile pour arrêter un flux abusif (trop important). Tout utilisateur peut demander à recevoir les messages KILL générés pour d'autres clients afin de garder un oeil sur les fauteurs de trouble éventuels.

Dans une arène où les pseudonymes doivent être globalement uniques, les messages KILL sont envoyés à chaque fois qu'un doublon est détecté (c'est-à-dire une tentative d'enregistrer deux utilisateurs avec le même pseudonyme) dans l'espoir qu'ils disparaîtront tous les deux, et qu'un seul réapparaîtra.

Le commentaire doit refléter la véritable raison du KILL. Pour les messages issus de serveurs, il est habituellement constitué des détails concernant les origines des deux pseudonymes en conflit. Les utilisateurs, eux, sont libres de fournir une raison adéquate, de façon à satisfaire ceux qui le voient. Afin de prévenir/d'éviter des KILL maquillés pour cacher l'identité de l'auteur d'être générés, le commentaire contient également un 'chemin de KILL' qui est mis à jour par tous les serveurs par lequel il passe, chacun ajoutant son nom au chemin.

Réponses numériques :

       ERR_NOPRIVILEGES                ERR_NEEDMOREPARAMS
       ERR_NOSUCHNICK                  ERR_CANTKILLSERVER

Exemple:

KILL David (csd.bu.edu <- tolsun.oulu.fi) ; Collision de pseudonymes entre csd.bu.edu et tolson.oulu.fi 

NOTE:
Il est recommandé que seuls les opérateurs soient autorisés à déconnecter d'autres utilisateurs avec un message KILL. Dans un monde parfait, même les opérateurs ne devraient pas avoir besoin de cette commande, et on laisserait les serveurs se débrouiller.

Channe Operator Features

KICK - Éjecte un client d'un canal
MODE - Change le mode d'un canal
INVITE - Invite un client dans un canal à accès sur invitation (mode +i)
TOPIC - Change le titre du canal, dans un canal en mode +t

Un opérateur de canal est identifié par un symbole '@' devant son pseudonyme à chaque fois qu'il est utilisé en association avec le canal (c'est à dire lors des réponses aux commandes NAMES, WHO et WHOIS)

NAMES

Commande: NAMES
Paramètres: [canal[,canal]]

En utilisant la commande NAMES, un utilisateur peut obtenir la liste des pseudonymes visibles sur n'importe quel canal qu'il peut voir. Les noms de canaux qu'il peut voir sont ceux qui ne sont ni privés (+p), ni secrets (+s), ou ceux sur lesquels il est actuellement. Le paramètre spécifie quels sont les canaux dont l'information est voulue, s'ils sont valides. Il n'y a pas de message d'erreur pour les noms de canaux invalides.

Si le paramètre n'est pas donné, la liste de tous les canaux et de leurs occupants est renvoyée. A la fin de cette liste, sont listés les utilisateurs visibles, mais qui n'appartiennent à aucun canal visible. Ils sont listés comme appartenant au 'canal' "*".

Réponses numériques:

       RPL_NAMREPLY                    RPL_ENDOFNAMES

Exemples:

NAMES #twilight_zone,#42 ; liste les utilisateurs visibles sur #twilight_zone et #42, si ces canaux vous sont visibles.
NAMES ; liste tous les canaux, et tous les utilisateurs visibles. 

PONG

Commande: PONG
Paramètres: {démon}

Le message PONG est la réponse à un message PING. Le paramètre démon est le nom du démon responsable du message PING généré.

Réponses numériques :

       ERR_NOORIGIN                    ERR_NOSUCHSERVER

Exemples:

PONG csd.bu.edu tolsun.oulu.fi ; message PONG de csd.bu.edu à tolsun.oulu.fi 

WHOWAS

Commande: WHOWAS
Paramètres: {pseudonyme} [compte]

WHOWAS permet de demander des informations concernant un utilisateur qui n'existe plus. Cela peut être dû à un changement de pseudonyme ou au fait que l'utilisateur ait quitté l'IRC. En réponse à cette requête, le serveur cherche un pseudo correspondant dans l'historique des pseudonymes (sans utiliser de jokers). L'historique est parcouru à l'envers, de façon à renvoyer l'entrée la plus récente en premier. S'il y a plusieurs entrées, jusqu'à {compte} entrées seront retournées (ou toutes si le paramètre {compte} n'est pas donné). Si le nombre passé n'est pas positif, une recherche complète a lieu.

Réponses numériques :

       ERR_NONICKNAMEGIVEN             ERR_WASNOSUCHNICK
       RPL_WHOWASUSER                  RPL_WHOISSERVER
       RPL_ENDOFWHOWAS

Exemples:

WHOWAS Wiz ; renvoie toutes les informations dans l'historique des pseudos au sujet du pseudo "WiZ";
WHOWAS Mermaid 9 ; renvoie, au maximum, les neufs entrées les plus récentes dans l'historique des pseudos pour "Mermaid";
WHOWAS Trillian 1 *.edu ; demande l'entrée la plus récente pour "Trillian" au premier serveur trouvé qui correspond à "*.edu". 

VERSION

Commande: VERSION
Paramètres: [serveur]

Le message VERSION est utilisé pour déterminer la version du programme serveur. Un paramètre optionnel est utilisé pour obtenir la version d'un programme serveur sur lequel un client n'est pas connecté directement.

Réponses numériques :

       ERR_NOSUCHSERVER                RPL_VERSION

Exemples:

:Wiz VERSION *.se ; message de Wiz pour vérifier la version d'un serveur correspondant à "*.se"
VERSION tolsun.oulu.fi ; vérifie la version du serveur "tolsun.oulu.fi".

STATS

Commande: STATS
Paramètres: [requête]

Le message STATS est utilisé pour obtenir les statistiques d'un serveur. L'implémentation de cette requête dépend énormément du serveur qui répond. Néanmoins, le serveur doit être capable de fournir les informations décrites dans les requêtes ci-dessous (ou équivalent).

Une requête peut être lancée par une unique lettre. Elle est transmise aux serveurs intermédiaires, ignorée et inaltérée. Les requêtes suivantes sont celles trouvées dans les implémentations courantes d'IRC, et fournissent une grande partie des informations de configuration du serveur. Bien qu'elles ne soient pas nécessairement gérées de la même façon par d'autres versions, tous les serveurs devraient être capables de fournir une réponse valide à la requête STATS, qui soit compatible avec les formats de réponse actuellement utilisées et le but de ces requêtes.

Les requêtes actuellement gérées sont :
c - renvoie la liste des serveurs qui peuvent se connecter, ou dont les connexions sont acceptées ;
h - renvoie la liste des serveurs qui sont forcés de se comporter comme des feuilles(L) , ou comme des noeuds (H) sur l'arbre des connexions ;
i - renvoie la liste des hôtes dont le serveur accepte les clients ;
k - retourne la liste des combinaisons de noms d'utilisateurs / noms d'hôtes qui sont bannis de ce serveur.
l - renvoie la liste des connexions d'un serveur, et montre, pour chacune d'entre elles, le trafic en octets et en messages, et ce, dans chaque direction ;
m - renvoie la liste des commandes gérées par le serveur, et le nombre d'utilisations de chacune d'entre elles, s'il n'est pas nul ;
o - renvoie la liste des hôtes depuis lesquels un client normal peut devenir opérateur ;
y - montre les lignes Y (Classe) du fichier de configuration du serveur ;
u - renvoie une chaîne décrivant depuis combien de temps le serveur fonctionne.

Réponses numériques :

       ERR_NOSUCHSERVER
       RPL_STATSCLINE                  RPL_STATSNLINE
       RPL_STATSILINE                  RPL_STATSKLINE
       RPL_STATSQLINE                  RPL_STATSLLINE
       RPL_STATSLINKINFO               RPL_STATSUPTIME
       RPL_STATSCOMMANDS               RPL_STATSOLINE
       RPL_STATSHLINE                  RPL_ENDOFSTATS

Exemples:

STATS m ; vérifie l'utilisation des commandes pour le serveur sur lequel vous êtes connecté.
:Wiz STATS c eff.org ; requête de WiZ pour information sur les lignes C/N du serveur eff.org 

PART

Commande: PART
Paramètres: {canal}[,canal]

Le message PART provoque le retrait du client expéditeur de la liste des utilisateurs actifs pour tous les canaux listés dans la chaîne de paramètres.

Réponses numériques:

       ERR_NEEDMOREPARAMS              ERR_NOSUCHCHANNEL
       ERR_NOTONCHANNEL

Exemples:

PART #twilight_zone ; quitte le canal "#twilight_zone"

PART #oz-ops,&group5 ; quitte les canaux "&group5" et "#oz-ops". 

KICK

Commande: KICK
Paramètres: {canal} {utilisateur} [commentaire]

La commande KICK est utilisée pour retirer par la force un utilisateur d'un canal (PART forcé).

Seul un opérateur de canal peut kicker un autre utilisateur hors d'un canal. Tout serveur qui reçoit un message KICK vérifie si le message est valide (c'est-à-dire si l'expéditeur est bien un opérateur du canal) avant d'ôter la victime du canal.

Réponses numériques :

       ERR_NEEDMOREPARAMS              ERR_NOSUCHCHANNEL
       ERR_BADCHANMASK                 ERR_CHANOPRIVSNEEDED
       ERR_NOTONCHANNEL

Exemples:

KICK &Melbourne Matthew ; Kick Matthew de &Melbourne
KICK #Finnish John :Speaking English ; Kick John de #Finnish en spécifiant "Speaking English" comme raison (commentaire).
:WiZ KICK #Finnish John ; Message KICK de WiZ pour retirer John du canal #Finnish

NOTE:

Il est possible d'étendre les paramètres de la commande KICK ainsi :
{canal}{,canal} {utilisateur}{,utilisateur} [commentaire]

INFO

Commande: INFO
Paramètres:

La commande INFO doit retourner une information qui décrit le serveur : sa version, quand il a été compilé, le numéro de mise à jour, quand il a été démarré, et toute autre information considérée comme pertinente.

Réponses numériques :

       ERR_NOSUCHSERVER
       RPL_INFO                        RPL_ENDOFINFO

Exemples:

INFO csd.bu.edu ; requête INFO pour csd.bu.edu
:Avalon INFO *.fi ; requête INFO d'Avalon à destination du premier serveur trouvé qui correspond à *.fi.
INFO Angel ; requête INFO à destination du serveur sur lequel est connecté Angel. 

WHO

Commande: WHO
Paramètres: [nom [o]]

Le message WHO est utilisé par un client pour générer une requête qui renvoie une liste d'informations qui correspondent au paramètre {nom} donné par le client. Si le paramètre nom est absent, tous les utilisateurs visibles (ceux qui ne sont pas invisibles (mode utilisateur +i) et qui n'ont pas de canal en commun avec le client émettant la requête) sont listés. Le même résultat peut être obtenu en utilisant le {nom} "0" ou tout joker correspondant à toutes les entrées possibles.

Le passé en paramètre est mis en correspondance avec les hôtes des utilisateurs, leurs véritables noms, et leurs pseudonymes si le canal {nom} n'est pas trouvé.

Si le paramètre "o" est passé, seuls les opérateurs sont listés, et ce, en fonction du masque fourni.

Réponses numériques :

       ERR_NOSUCHSERVER
       RPL_WHOREPLY                    RPL_ENDOFWHO

Exemples:

WHO *.fi ; Liste tous les utilisateurs qui correspondent à "*.fi".
WHO jto* o ; Liste tous les utilisateurs qui correspondent à "jto*", s'ils sont opérateurs.

USER

Commande: USER
Paramètres: {nom d'utilisateur} {hôte} {nom de serveur} {nom réel}

Le message USER est utilisé au début d'une connexion pour spécifier le nom d'utilisateur, le nom d'hôte, le nom de serveur, et le véritable nom d'un nouvel utilisateur. Il est aussi utilisé lors de la communication entre les serveurs pour indiquer l'arrivée d'un nouvel utilisateur sur IRC, puisque c'est seulement après avoir envoyé et le USER et le NICK qu'un utilisateur devient enregistré.

Entre serveurs, USER doit être préfixé du pseudonyme du client. Notez que le nom d'hôte et le nom de serveur sont généralement ignorés par le serveur IRC quand la commande USER vient directement d'un client (pour des raisons de sécurité), mais sont utilisés dans la communication de serveur à serveur. Cela signifie que NICK doit toujours être envoyé à un serveur distant quand un nouvel utilisateur est ajouté au reste du réseau, avant que le USER correspondant soit envoyé.

Notez aussi que le paramètre 'vrai nom' doit être le dernier paramètre, car il peut contenir des espaces, et il doit être préfixé par deux points (':') de façon à être reconnu comme tel.

Puisqu'il est facile pour un client de mentir sur son nom si on se base uniquement sur le message USER, il est recommandé d'utiliser un "serveur d'identité". Si l'hôte dont l'utilisateur se connecte a un serveur de ce type activé, le nom d'utilisateur est défini par la réponse de ce "serveur d'identité".

Réponses numériques :

       ERR_NEEDMOREPARAMS              ERR_ALREADYREGISTRED

Exemples:

USER guest tolmoon tolsun :Ronnie Reagan ; Utilisateur s'enregistrant avec un nom d'utilisateur de "guest" et un vrai nom de "Ronnie Reagan". :testnick USER guest tolmoon tolsun :Ronnie Reagan ; message entre les serveurs contenant le pseudonyme à qui appartient la commande USER. 

ADMIN

Commande: ADMIN
Paramètres:

Le message ADMIN est utilisé pour trouver le nom de l'administrateur du serveur courant.

Réponses numériques :

       ERR_NOSUCHSERVER
       RPL_ADMINME                     RPL_ADMINLOC1
       RPL_ADMINLOC2                   RPL_ADMINEMAIL

Exemples:

ADMIN tolsun.oulu.fi ; requête ADMIN de tolsun.oulu.fi
:WiZ ADMIN *.edu ; requête ADMIN de WiZ pour le premier serveur trouvé qui correspond à *.edu. 

TIME

Commande: TIME
Paramètres:

Le message TIME est utilisé pour obtenir l'heure locale d'un serveur donné. En absence de paramètre , le serveur recevant le message doit répondre à la requête.

Réponses numériques :

       ERR_NOSUCHSERVER                RPL_TIME

Exemples:

TIME tolsun.oulu.fi ; demande l'heure du serveur "tolson.oulu.fi"
Angel TIME *.au ; L'utilisateur Angel demande l'heure à un serveur correspondant à "*.au" 

PASS

Commande : PASS
Paramètres : {mot de passe}

La commande PASS est utilisée pour définir le 'mot de passe de connexion'. Le mot de passe peut et doit être défini avant toute tentative de connexion. A l'heure actuelle, cela signifie que les clients doivent envoyer une commande PASS avant d'envoyer la combinaison NICK/USER, et que les serveurs doivent envoyer une commande PASS avant toute commande SERVER. Le mot de passe fourni doit correspondre à celui contenu dans les lignes C/N (pour les serveurs) ou dans les lignes I (pour les clients). Il est possible d'envoyer plusieurs commandes PASS avant de s'enregistrer, mais seule la dernière est utilisée pour la vérification, et elle ne peut plus changer une fois la connexion établie.

Réponses numériques :

ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED

Exemple:
PASS motdepasssecretici

JOIN

Commande: JOIN
Paramètres: {canal}[,{canal}] [clé[,clé]]

La commande JOIN est utilisée par un client pour commencer à écouter un canal spécifique. L'accès à un canal est autorisé ou non uniquement par le serveur auquel le client est connecté ; tous les autres serveurs ajoutent automatiquement l'utilisateur au canal quand la demande vient d'un autre serveur. Les conditions qui affectent ceci sont les suivantes :

  1. L'utilisateur doit être invité si le canal est en mode "sur invitation seulement"
  2. Le pseudo/nom d'utilisateur/nom d'hôte ne doit pas correspondre à un bannissement actif.
  3. La bonne clé (mot de passe) doit être fournie si elle est définie.

Ceci est discuté plus en détails dans la description de la commande MODE (voir la section 4.2.3 pour plus de détails).

Une fois qu'un utilisateur a accès à un canal, il reçoit des notifications de toutes les commandes que son serveur reçoit et qui affectent le canal. Cela inclut MODE, KICK, PART, QUIT, et bien sûr PRIVMSG/NOTICE. La commande JOIN doit être diffusée à tous les serveurs du réseau pour qu'ils sachent où trouver qui est dans chaque canal. Cela permet une distribution optimale des messages PRIVMSG/NOTICE du canal.

Si un JOIN a lieu avec succès, on envoie à l'utilisateur le sujet du canal (en utilisant RPL_TOPIC) et la liste des utilisateurs du canal (en utilisant RPL_NAMREPLY), y compris lui-même.

Réponses numériques :

       ERR_NEEDMOREPARAMS              ERR_BANNEDFROMCHAN
       ERR_INVITEONLYCHAN              ERR_BADCHANNELKEY
       ERR_CHANNELISFULL               ERR_BADCHANMASK
       ERR_NOSUCHCHANNEL               ERR_TOOMANYCHANNELS
       RPL_TOPIC

Exemples:

JOIN #foobar ; accède au canal #foobar.

JOIN &foo fubar ; accède au canal &foo en utilisant la clé "fubar".

JOIN #foo,&bar fubar ; accède au canal #foo en utilisant la clé "fubar", et &bar en n'utilisant pas de clé.

JOIN #foo,#bar fubar,foobar ; accède au canal #foo en utilisant la clé "fubar", et au canal #bar en utilisant la clé "foobar".

JOIN #foo,#bar ; accède au canaux #foo and #bar.

:WiZ JOIN #Twilight_zone ; message JOIN de WiZ 

OPER

Commande: OPER
Paramètres: {utilisateur} {mot de passe}

Le message OPER est utilisé par un utilisateur normal pour obtenir le privilège d'opérateur. La combinaison de {utilisateur} et {mot de passe} est nécessaire pour obtenir le privilège Opérateur.

Si le client envoyant la commande OPER fournit un mot de passe correct pour l'utilisateur donné, le serveur informe le reste du réseau du nouvel opérateur en envoyant un "MODE +o" pour le pseudonyme.

Le message OPER n'a lieu qu'entre un client et un serveur.

Réponses numériques :

       ERR_NEEDMOREPARAMS              RPL_YOUREOPER
       ERR_NOOPERHOST                  ERR_PASSWDMISMATCH

Exemple:

OPER foo bar
; Tentative d'enregistrement en tant qu'opérateur, de l'utilisateur "foo" utilisant "bar" comme mot de passe. 

TOPIC

Commande: TOPIC
Paramètres: {canal} [sujet]

Le message TOPIC est utilisé pour modifier ou voir le sujet d'un canal. Le sujet du canal {canal} est renvoyé s'il n'y a pas de {sujet} fourni en paramètre. Si le paramètre {sujet} est présent, le sujet du canal changera si le mode du canal le permet.

Réponses numériques :

       ERR_NEEDMOREPARAMS              ERR_NOTONCHANNEL
       RPL_NOTOPIC                     RPL_TOPIC
       ERR_CHANOPRIVSNEEDED

Exemples:

:Wiz TOPIC #test :New topic ; L'utilisateur Wiz définit le sujet.
TOPIC #test :another topic ; Change le sujet du canal #test en "another topic".
TOPIC #test ; Vérifie le sujet de #test. 

Connection Client->Server

  1. Message PASS
    Paramètres : (mot de passe)
  2. Message NICK
    Paramètres : (pseudonyme) [ ]
  3. Message USER
    Paramètres: (nom d'utilisateur) (hôte) (nom de serveur) (nom réel)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.