CommunityChatContattiDoc.UtentiChiSiamoIntroduzioneIRCIntroStoriaGlossarioFAQComandiIRCServicesmIRCeScriptWebChatCercaFAQServereServicesComandiIRCCmdUnreal3.2NickServChanServMemoServOperServGuideVarieAcronimiIRCInstallazioneJVMEmoticonsDCCeFastwebGuidaOPGuidaIRCopRFCeProtocolliRFC1459RFC2810RFC2811RFC2812RFC2813DCCDCC2CTCPPoliciesNetiquetteHelpersOpersSicurezzaFirewallSockseProxyFirewalleProxyTutorialClientsIRCWindowsLinuxMACWebChatmIRC&ScriptmIRCScriptItalianiScriptEsteriAdd-OnSegnalaScriptLoginStaff
RFC e Protocolli - RFC 1459

A.1. RFC1459 - Il protocollo IRC

Network Working Group

J. Oikarinen

Request for commentts: 1459

D. Reed

May 1993

 

Protocollo per l'Internet Relay Chat

Posizione di questo memorandum

Questo memorandum delinea un Protocollo Sperimentale per la comunità di Internet. Discussioni e suggerimenti, per il miglioramento dello stesso, sono graditi. Si prega di fare riferimento all'edizione corrente del "IAB Official Protocol Standards" per la standardizzazione e la definizione della posizione di questo protocollo. La distribuzione di questo memorandum è libera.

Riassunto

Il protocollo IRC fu sviluppato durante gli ultimi 4 anni(1) da quando fu implementato per la prima volta come mezzo in grado di permettere agli utenti di parlare tra loro su un BBS (BBS: Bullettin Board System. E' un sistema a gestione privata al quale ci si può collegare tramite linea telefonica e che mette a disposizione programmi, dati, aree di messaggi etc.. nell'ambito della cosiddetta telematica amatoriale.- N.d.T.). Attualmente esso sostiene un network mondiale di server e clients, e si sta espandendo per far fronte alla crescente espansione dell'utenza. Negli ultimi 2 anni, il numero medio di utenti connessi al network IRC principale si è decuplicato. Il protocollo IRC è un protocollo, basato su stringhe di testo, il cui interlocutore più semplice consiste in un programma capace di stabilire una connessione col server.

Indice

Index


1. INTRODUZIONE

Il protocollo IRC (Internet Relay Chat) è stato progettato e costruito, con un lavoro durato diversi anni, per la realizzazione di scambi di messaggi scritti in tempo reale. Questo documento descrive il protocollo di IRC attualmente in uso. (2) Il protocollo IRC è stato sviluppato su un sistema che usa il protocollo di rete TCP/IP, senza nessuna necessità, tuttavia, che questa rimanga il suo solo ambito di utilizzo. L'IRC stesso è un sistema di teleconferenza che (mediante l'uso del modello client-server) è stato adattato per lavorare su molte macchine di modelli diversi. Un tipico sistema comporta un singolo processo (il server) che costituisce un punto centrale al quale i client (o altri server) possono connettersi, realizzando i necessari invio e distribuzione contemporanea su più utenti del messaggio ed altre funzioni.

Indice


1.1 I Servers

Il server forma la spina dorsale di IRC, fornendo un punto al quale i client possono connettersi per parlarsi gli uni con gli altri, ed un punto di connessione per altri server, formando così una rete IRC. L'unica configurazione di rete permessa ai server di IRC è quella di un albero [vedi Fig. 1] dove ogni server agisce come nodo centrale per il resto della rete che vede.

                           [ Server 15 ]  [ Server 13 ] [ Server 14]
                                 /                \         /
                                /                  \       /
        [ Server 11 ] ------ [ Server 1 ]       [ Server 12]
                              /        \          /
                             /          \        /
                  [ Server 2 ]          [ Server 3 ]
                    /       \                      \
                   /         \                      \
           [ Server 4 ]    [ Server 5 ]         [ Server 6 ]
            /    |    \                           /
           /     |     \                         /
          /      |      \____                   /
         /       |           \                 /
 [ Server 7 ] [ Server 8 ] [ Server 9 ]   [ Server 10 ]

                                  :
                               [ etc. ]
                                  :

                 [Fig. 1. Configurazione di una rete di server IRC]

Indice


1.2 I Clients

Si definisce client qualsiasi cosa connessa ad un server che non sia un altro server. Ogni client si distingue dagli altri client per un nickname unico, della lunghezza massima di nove (9) caratteri. Si vedano le regole grammaticali del protocollo per sapere quali caratteri si possono e quali non si possono usare in un nickname. In aggiunta al nickname, tutti i server devono avere le seguenti informazioni su ogni client: il vero nome della macchina sulla quale il programma client viene eseguito, il nome dell'utente del client di quella macchina, ed il server al quale il client è connesso.

Indice


1.2.1 Gli Operatori

Per far sì che il lavoro di rete venga svolto in maniera sufficientemente ordinata, si permette ad una determinata classe di client (operatori) di compiere delle funzioni di manutenzione generale sulla rete. Malgrado i poteri attribuiti ad un operatore possano essere considerati "pericolosi", essi sono tuttavia necessari. Gli operatori dovrebbero essere in grado di compiere operazioni di base sulla rete, quali lo sconnettere e il riconnettere servers, per prevenire di un routing non efficiente sulla rete. Prendendo atto di questa esigenza, il protocollo qui esposto prevede per gli operatori solo la capacità di compiere quelle operazioni. Si vedano le sezioni 4.1.7 (Messaggio Server Quit) e 4.3.5 (Messaggio Connect).

Uno dei più controversi, tra i poteri attribuiti agli operatori è la possibilità di rimuovere "con la forza" un utente dalla rete: gli operatori sono in grado, per esempio, di chiudere la connessione tra un qualsiasi client e il server. La giustificazione per questo è cosa critica, dal momento che un abuso di questa possibilità risulta sempre fastidioso e distruttivo. Per altri dettagli sul'argomento si veda la sezione 4.6.1 (Messaggio KILL).

Indice


1.3 I Canali

Un canale è un gruppo, dotato di nome, di uno o più client dove tutti i membri del gruppo ricevono i messaggi indirizzati a quel canale. Il canale è automaticamente creato quando il primo client vi si collega, e cessa di esistere quando l'ultimo client lo lascia. Durante il periodo di esistenza del canale ogni client può riferirsi a quel canale usando il nome dello stesso. I nomi dei canali sono stringhe (che iniziano con un "&" oppure con un "#") lunghe fino a 200 caratteri. A parte la necessità che il primo carattere sia "&" oppure "#", l'unica restrizione che sussiste per il nome del canale è che non contenga alcuno spazio (" "), un control G (^G o ASCII 7), o una virgola ("," la quale è considerata dal protocollo come separatore tra gli elementi di una lista).

Ci sono due tipi di canali ammessi da questo protocollo. Uno è un canale assegnato che è conosciuto da tutti i server che sono connessi alla rete. Questi canali sono contrassegnati dall' avere come primo carattere (un #, gli altri sono i cosiddetti canali locali, il cui nome è preceduto da un carattere & e che) si distinguono per essere accessibili solo ai client del server ove il canale esiste. [Ndr - Qui probabilmente il testo originale a nostra disposizione omette parte del periodo, ma, dal contesto, si può tentare una interpretazione che abbiamo inserito tra parentesi tonde] Questi canali sono distinti dal carattere iniziale "&". Sono disponibili inoltre diversi modi disponibili per alterare le caratteristiche dei singoli canali. Si veda la sezione 4.2.3 (Messaggio MODE) per maggiori dettagli sull'argomento.

Per creare un nuovo canale o entrare a far parte di un canale già esistente, un utente entrare (JOIN) nel canale. Se il canale non preesiste al join, il canale viene creato ed il creatore del canale diventa operatore su quel canale. Se invece il canale già esiste, la richiesta di join al canale viene onorata o meno dipendentemente dai "modes" in vigore al momento su quel canale. Per esempio se si tratta di un canale ad invito (+i), la richiesta verrà accolta solo se si è stati invitati da qualcuno.

Secondo il protocollo, un utente può accedere a diversi canali contemporaneamente, ma si raccomanda di non superare il limite di dieci (10) canali, un confine ampio, sia per gli esperti che per i novizi. Si veda la sezione 8.13 per maggiori informazioni su questo argomento. (3) Se qualche ramo della rete IRC si spezza a causa di uno split (perdita del collegamento) tra due servers, del canale, su ognuno dei due versanti della rete divisi dal punto di interruzione, faranno parte solamente quei client che sono connessi al server sul rispettivo versante dello split, cessando di farne parte su quello opposto allo split. Quando il collegamento è ripristinato, i servers, di nuovo connessi, si comunicano l'un l'altro la propria lista dei client presenti sul canale i "modes" di quel canale. Se il canale esiste su tutti e due i versanti i JOIN e i MODE vengono interpretati in una maniera inclusiva cosicchè i due versanti della nuova connessione si troveranno in accordo su quali client sono nel canale e qual'è ale.

Indice


1.3.1 Gli Operatori di canale

L' operatore di canale (detto anche "chop" o "chanop") su un dato canale può essere considerato come "proprietario" di quel canale. A causa di questo loro stato, gli operatori di canale sono dotati di certi poteri che li mettono in condizione di mantenere controllo e una forma di pulizia sul loro canale. Come proprietario di un canale, ad un operatore non si richiede di render ragione per le sue azioni, tuttavia se le sue azioni sono particolarmente antisociali o costituiscono in qualche modo abuso, potrebbe essere ragionevole chiedere ad un operatore IRC di intervenire,oppure che gli utenti semplicemente escano e formino un loro canale.

I soli comandi che possono essere usati dagli operatori di canale sono:

KICK   - Espelle un client dal canale
MODE   - Cambia il mode del canale
INVITE - Invita un client ad un canale ad invito (mode +i)
TOPIC  - Cambia il topic del canale in mode +t

Un operatore di canale è identificato dal simbolo '@' posto a fianco del suo nickname ogniqualvolta esso è associato con un canale (per esempio risponde ai comandi NAMES, WHO e WHOIS).


2. SPECIFICHE IRC

2.1 Generalità

Il protocollo qui descritto realizza sia connessioni server-server che connessioni client-server. Va detto, comunque, che ci sono più restrizioni nelle connessioni client-server (che sono considerate inattendibili) che in quelle server-server.

Indice


2.2 Codici dei caratteri

Nessun set particolare di caratteri è specificato. Il protocollo è basato su un sistema di codici composti da otto (8) bits, vale a dire un ottetto (byte). Ogni messaggio può essere composto da un numero qualsiasi di questi ottetti, sebbene i valori di alcuni ottetti vengano usati come codici di controllo, che svolgono il ruolo di delimitatori dei messaggi. Indipendentemente dal fatto di essere un protocollo a 8 bits, i delimitatori dei messaggi e i comandi sono organizzati in maniera tale da rendere il protocollo maggiormente utilizzabile da terminali USASCII e da connessioni telnet.

A causa dell'origine scandinava di IRC, i caratteri {} e | sono considerati essere l'equivalente minuscolo dei caratteri [] e \. Questo problema crea una situazione critica quando si tratta di determinare l'equivalenza di due nickname.

Indice


2.3 Messaggi

I server e i client si scambiano messaggi che possono generare o meno una risposta. Se il messaggio contiene un comando valido, come descritto nelle prossime sezioni, il client dovrebbe aspettarsi una risposta coerente con le specifiche, ma non è consigliabile che attende la replica del server per un tempo illimitato, poichè le comunicazioni client-server e server-server sono di natura essenzialmente asincrona.

Ogni messaggio IRC può essere consistere fondamentalmente di tre parti: il prefisso (facoltativo), il comando, ed i parametri del comando (ve ne possono essere fino a 15). Il prefisso, il comando e tutti i parametri sono separati da uno (o più) caratteri "spazio" (ASCII: 0x20).

La presenza di un prefisso è indicata con un singolo carattere due punti (":"), (ASCII: 0x3b), in prima posizione. Non ci devono essere lacune (spazi bianchi) tra i due punti ed il prefisso.

Il prefisso è usato dai server per specificare la vera origine del messaggio. Se manca il prefisso, si assume che il messaggio abbia avuto origine dalla connessione sulla quale è stato ricevuto. Non è necessario che un client premetta un prefisso quando inviano un messaggio: se usano un prefisso, l'unico prefisso valido è il nickname registrato ed associato con quel client. Se la sorgente identificata dal prefisso non può essere trovata nel database interno del server, oppure se la sorgente è registrata su un link differente da quello da cui arriva il messaggio, il server deve tacitamente ignorare il messaggio.

Il comando deve essere o un comando IRC valido, oppure deve essere un numero di tre (3) cifre rappresentato in codice ASCII. I messaggi IRC sono linee di caratteri che terminano sempre con una coppia CR-LF (Ritorno a capo - Salto di riga), e non devono eccedere i 512 caratteri in lunghezza, compresi tutti i caratteri inclusi i caratteri di coda CR-LF. Perciò il massimo numero di caratteri permesso per ogni riga di comando con gli eventuali parametri è di 510. Non c' è la possibilità di usare linee di continuazione per i messaggi. Si veda la sezione 7 per maggiori informazioni sulle implementazioni correnti.

Indice


2.3.1 Formato dei messaggi in 'pseudo BNF

I messaggi del protocollo devono essere estratti dal flusso continuo di ottetti. La soluzione attuale consiste nel designare due caratteri, CR e LF (ritorno a capo e salto di linea), come separatori di messaggi. I messaggi vuoti sono tacitamente ignorati, il che permette l'uso della sequenza CR-LF tra i messaggi senza ulteriori problemi.

Il messaggio estratto è scomposto ed analizzato nei componenti: (prefisso), (comando) e lista di parametri uniti fra loro da componenti <intermedi> o <iniziali>.

Per tanto la rappresentazione BNF [Ndr - Backus Normal Form] di questo assetto è:

<messaggio> ::=

[':' <prefisso> <SPAZIO> ] <Comando> <parametri> <crlf>

<prefisso> ::=

<nome-del-server> | <nick> ['!' <utente> ] [ '@' <macchina> ]

<Commando> ::=

<lettera> { <lettera> } | <numero> <numero> <numero>

<SPAZIO> ::=

' ' { ' ' }

<parametri> ::=

<SPAZIO> [ ':' <iniziali> | <intermedi> <parametri> ]

<intermedi> ::=

< Qualsiasi sequenza *non vuota* di ottetti che non includa i caratteri SPAZIO, NUL (zero binario), CR, LF e il cui primo carattere non può essere ':'>

<iniziali> ::=

<Qualsiasi sequenza di ottetti, anche *vuota*, che non includa NUL o CR o LF>

<crlf> ::=

CR LFG

Note:

1.      <SPAZIO> consiste solo del(i) carattere(i) SPAZIO (0x20). Nota bene che la TABULAZIONE, e tutti gli altri caratteri di controllo sono considerati SPAZI NON BIANCHI.

2.      Dopo aver estratto la lista di parametri, tutti i parametri sono equivalenti, non ha importanza che essi si possano associare con <intermedi> o <iniziali>. <Iniziali> è solamente un espediente sintattico per permettere lo SPAZIO tra i parametri.

3.      Il fatto che CR e LF non possono apparire nel contesto dei parametri è solo un fatto dipendente dalla modalità di delimitazione del comando. Questo potrebbe cambiare in futuro.

4.      Il carattere NUL non ha significato

speciale nella composizione dei messaggi, e, in linea di principio, potrebbe essere parte di un parametro, causando però delle difficoltà nel normale trattamento delle stringhe in linguaggio "C". Questo è l' unico motivo per cui non è permesso l'uso del carattere NUL all'interno dei messaggi.

5.      L'ultimo parametro può essere una stringa vuota.

6.      L'uso del prefisso esteso (['!' <user> ] ['@' <host> ]) non deve essere usato nelle comunicazioni server-server, ed è previsto solo nell'ambito della comunicazione server- client in modo da fornire ai client maggiori informazioni utili riguardo la provenienza del messaggio, senza necessità di ulteriori domande.

Gran parte dei messaggi previsti dal protocollo specificano semantica e sintassi addizionali, dettata dalla loro posizione nella lista, per le stringhe dei parametri. Per esempio, molti comandi dei server assumono che il primo parametro dopo il comando è una lista di obbiettivi, così organizzata:

<obbiettivo> ::=

<a> [ ","<obbiettivo> ]

<a> ::=

<canale> | <utente> '@' <nome-del-server> | <nick> | <maschera>

<channel> ::=

('#' | '&') <stringa-di-caratteri>

<nome-del-server> ::=

<macchina>

<macchina> ::=

si veda l' RFC 952 [DNS:4] per dettagli sui nomi-macchina permessi

<nick> ::=

<lettera> { <lettera> | <numero> | <carattere-speciale> }

<maschera> ::=<

('#' | '$') <stringa-di-caratteri (contenente eventuali "*" e "?")>

<stringa-di-caratteri> ::=

<qualsiasi sequenza di ottetti tranne SPACE, BELL, NUL, CR, LF e virgola (',')>

Ulteriori elementi sintattici dei parametri sono:

<utente> ::=

<nonbianco> { <nonbianco> }

<lettera> ::=

'a' ... 'z' | 'a' ... 'Z'

<numero> ::=

'0' ... '9'

<speciale> ::=

'-' | '[' | ']' | '\' | '`' | '^' | '{' | '}'

<nonbianco> ::=

<ogni codice 8bit tranne SPACE (0x20), NUL (0x0), CR (0xd) e LF(0xa)>


Indice

2.4 Risposte numeriche

La maggior parte dei messaggi inviati al server generano una risposta di qualche sorta. La risposta più frequente è una risposta numerica, usata sia per risposte normali che di errore. La risposta numerica deve essere inviata come un messaggio consistente del prefisso del mittente, le tre cifre numeriche e la destinazione della risposta. Non è permesso che una risposta numerica abbia origine da un client; qualsiasi messaggio di questo genere ricevuto da un server viene tacitamente ignorato. Sotto tutti gli altri aspetti la risposta numerica è simile ad un normale messaggio, con la sola differenza che la parola-chiave è formata da tre cifre numeriche invece che da una stringa di lettere. Una lista delle possibili risposte è contenuta nella sezione 6.

Indice


3. CONCETTI DI IRC

Questa sezione è dedicata all' esposizione dei concetti su cui si basa l' organizzazione del protocollo IRC e come le implementazioni attualmente in uso inoltrino le differenti categorie di messaggi.


                          1--\
                              A        D---4
                          2--/ \      /
                                B----C
                               /      \
                              3        E

   Servers: A, B, C, D, E         Clients: 1, 2, 3, 4

[ Fig. 2. Esempio di una rete IRC di piccole dimensioni]

3.1 Comunicazione uno a uno

La comunicazione uno a uno è realizzata di solito dai clients, dal momento che la maggior parte del traffico server a server non è il risultato di server che parlino esclusivamente tra loro. Per dare ai client la possibilità di parlare loro, è necessario che tutti i server siano in grado di inviare un messaggio in una direzione precisa lungo la struttura ad albero della rete, in modo da poter raggiungere qualsiasi client. Il percorso di un messaggio inviato è quello più corto tra due punti qualsiasi della struttura.

Gli esempi che seguono fanno riferimento alla Figura 2.

Esempio 1 :

Un messaggio tra i client 1 e 2 è visto solo dal server A, il quale lo invia direttamente al client 2.

Esempio 2 :

Un messaggio tra i client 1 e 3 è visto dai server A e B, e dal client 3. A nessun altro server o client è permesso di vedere il messaggio.

Esempio 3 :

Un messaggio tra i client 2 e 4 è visto dai server A, B, C e D, e solamente dal client 4.

Indice


3.2 Uno a molti

Lo scopo principale di IRC è di realizzare un luogo pubblico di incontro nell' ambito del quale sia possibile, in maniera semplice ed efficiente, lo scambio di messaggi fra più persone (conversazione uno a molti).

A questo proposito IRC offre diversi mezzi, ognuno dei quali è orientato al raggiungimento di uno specifico scopo.

Indice


3.2.1 Ad una lista

Il tipo di conversazione uno-a-molti meno efficiente consiste nel parlare, attraverso i clients, ad una "lista" di utenti. Come questo avvenga è piuttosto banale: il client fornisce una lista di destinazioni alle quali il messaggio deve essere inviato ed il server lo "moltiplica", inviando delle copie separate del messaggio ad ogni destinazione data.

Questo sistema non è efficiente come quello della conversazione uno ad un gruppo, dal momento che la lista di destinazione viene considerata come composta da tante singole destinazioni e l'invio dei messaggi avviene senza controllare che non vengano inviati dei duplicati lungo i possibili percorsi.

Indice


3.2.2 Ad un gruppo (canale)

In IRC il canale ha il ruolo equivalente a quello di un gruppo ad invio multiplo; la sua esistenza è dinamica (sussistendo e/o cessando in funzione del fatto che gli utenti siano presenti o lascino il canale) e la conversazione in corso in un canale è inviata solo a quei server cui siano collegati utenti di un canale dato. Se ci sono più utenti sullo stesso server per lo stesso canale, il messaggio è inoltrato solamente una volta a quel server e poi inviato ad ognuno dei client del canale. Questa operazione viene poi ripetuta per ogni combinazione client-server finchè il messaggio originale non sia stato diffuso ed abbia raggiunto ogni membro del canale.

I seguenti esempi fanno riferimento alla figura 2.

Esempio 4 :

Ogni canale con 1 solo client presente. I messaggi al canale vanno al server e da nessun altra parte.

Esempio 5 :

2 client in un canale. Tutti i messaggi attraversano un percorso come se fossero messaggi privati tra i due client a prescindere dal canale.

Esempio 6 :

Client 1, 2 e 3 dentro un canale. Tutti i messaggi al canale sono inviati a tutti i client e solo a quei server che devono essere attraversati dal messaggio come se esso fosse un messaggio privato ad un singolo client. Se il client 1 manda un messaggio, esso arriva al client 2 e poi, tramite il server B, al client 3.

Indice


3.2.3 Ad uno schema macchina-utente/server

Per fornire gli operatori di IRC di un qualche meccanismo per inviare messaggi ad un novero consistente di utenti, i messaggi stessi vengono corredati di "schemi macchina-utente e server". Questi messaggi sono inviati agli utenti per i quali le informazioni sulla macchina o sul server corrispondono a quelle dello schema. I messaggi vengono inviati solo alla locazione ove si trovano gli tenti, in un modo simile a quello usato per i canali.

Indice


3.3 Uno a tutti

Il tipo di messaggio uno a tutti è meglio denotato come un messaggio diffuso, inviato a tutti i client o/e a tutti i servers. In una rete di server e utenti di grandi dimensioni, un messaggio singolo può dar luogo ad un rilevante volume di traffico, nel momento in cui viene inviato attraverso la rete, per poter raggiungere tutte le destinazioni desiderate.

Per alcuni messaggi non c' è altra soluzione che diffonderli a tutti i servers, affinchè le informazioni di stato contenute da ogni server siano ragionevolmente coerenti tra i server stessi.

Indice


3.3.1 Client a Client

Non c' è alcuna categoria di messaggi per la quale, partendo da un messaggio singolo, derivi un messaggio che sia inviato ad ogni altro client.

Indice


3.3.2 Client a Server

La maggior parte dei comandi che risultano nello scambio di informazioni di stato (quali appartenenza ad un canale, mode del canale, status dell' utente ecc.) deve, per default, essere inviata a tutti i server, e questa distribuzione non dovrebbe essere cambiata dal client.

Indice


3.3.3 Server a Server.

Se la maggior parte dei messaggi tra due server viene distribuita a tutti gli "altri" server, questo è in effetti richiesto solamente per ogni messaggio che abbia effetto su un utente, un canale o un server.

Dal momento che queste sono le voci base che si trovano in IRC, la quasi totalità dei messaggi originati da un server vengono distribuiti a tutti gli altri server connessi.



4. INFORMAZIONI DETTAGLIATE SUI SINGOLI MESSAGGI

Nelle pagine seguenti vengono descritti tutti i messaggi riconosciuti da un server e da un client IRC. Tutti i comandi descritti in questa sezione devono essere implementati su ogni server per questo protocollo.

Quando viene data la risposta ERR_NOSUCHSERVER, significa che non è stato possibile trovare il parametro <server>. Il server non deve dare ulteriori risposte per questo comando.

Il server, al quale un client è connesso, deve analizzare il messaggio completo, reinviando al mittente ogni eventuale errore.

Se il server si imbatte in un errore fatale durante l'analisi di un messaggio, un messaggio di errore deve essere inviato al mittente e l'analisi deve essere interrotta. Possono essere considerati errori fatali: un comando non corretto, una destinazione che risulta in qualche modo sconosciuta al server (server, nick, nome del canale rientrano in questa categoria), un numero insufficiente di parametri oppure un privilegio non corretto.

Se viene presentato un set completo di parametri, allora di ognuno di essi deve essere controllata la validità, ed eventuali risposte appropriate deve inviate al client. Nel caso di un messaggio che usi la virgola come separatore dei parametri, una risposta deve essere mandata per ogni voce.

Negli esempi sotto elencati, alcuni messaggi usano il formato completo previsto:

:Name COMMAND parameter list



Un tale esempio rappresenta un messaggio proveniente da "Name" in transito tra due servers, dove è essenziale includere il nome del mittente originario del messaggio, così che i server remoti possano mandare una risposta attraverso il percorso corretto.

Indice


4.1 Registrazione di Connessione.

I comandi qui descritti sono usati per registrare una connessione con un server IRC, sia come utente che come server, e per sconnettersi in maniera corretta.

Non è necessario un comando "PASS" perchè la connessione di un utente o di un server sia registrata, ma, nel caso ci fosse, esso deve precedere il messaggio del server oppure l'ultimo degli elementi della combinazione NICK/USER. è fortemente raccomandato che tutte le connessioni al server abbiano una password in modo da dare un certo livello di sicurezza alle connessioni attuali. L'ordine raccomandato dei comandi da inviare per la registrazione di un client è il seguente:

1.      messaggio Pass

2.      messaggio Nick

3.      messaggio User

Indice


4.1.1 Messaggio Password

Comando: PASS
Parametri: <password>


Il comando PASS è usato per stabilire una parola d'ordine per la connessione. La parola d'ordine può e deve essere stabilita prima che sia fatto qualsiasi tentativo di registrare la connessione presso il server. Normalmente questo richiede che il client invii un comando PASS prima di inviare la combinazione NICK/USER ed il server *deve* inviare un comando PASS prima di ogni comando SERVER. La password fornita deve essere uguale a quella contenuta nelle righe C/N (per i servers) o nelle righe I (per i clients). E' possibile inviare comandi PASS multipli prima di registrarsi, ma solamente l'ultimo comando inviato viene usato per la verifica della parola e non può essere cambiato una volta registrato.

Risposte numeriche:

ERR_NEEDMOREPARAMS    (Errore_necessitano più parametri) ERR_ALREADYREGISTRED  (Errore_già registrato)


Esempio:

PASS parola_d_ordine_qui


Indice


4.1.2 Messaggio Nickname

Comando: NICK
Parametri: <nickname> [ <hopcount> ]

Il messaggio NICK è usato per dare un nickname ad un utente o per cambiare quello che aveva in precedenza. Il parametro <hopcount> è usato solamente dai server per indicare quanto disti un nick dal suo server originario.

Una connessione locale ha un hopcount di 0. Se l'hopcount viene fornito da un client, deve essere ignorato.

Se un messaggio NICK arriva ad un server che è già a conoscenza di un identico nickname per un altro client, si verifica una collisione di nicknames. Il risultato di una collisione di nickname è la rimozione, dal database del server, di tutte le presenze del nickname, e un comando KILL viene emesso per rimuovere il nickname da tutti i database degli altri servers. Se il messaggio NICK, causa della collisione, era un cambio di nickname, allora anche il nick originale (quello vecchio) deve essere rimosso.

Se il server riceve un NICK già presente da un client che è connesso direttamente, può inviare al client locale un messaggio di ERR_NICKCOLLISION, ignorare il comando NICK, e non generare alcun kill.

Risposte numeriche:

ERR_NONICKNAMEGIVEN   (Errore_non è stato dato nessun nickname)
ERR_ERRONEUSNICKNAME  (Errore_nickname errato)
ERR_NICKNAMEINUSE     (Errore_nickname già in uso)
ERR_NICKCOLLISION     (Errore_collisone di nicknames)


Esempi:

NICK Wiz ; Inserimento nuovo nick "Wiz".

:WiZ NICK Kilroy ; WiZ cambia il suo nickname in Kilroy.


Indice


4.1.3 Messaggio User, utente

Comando: USER
Parametri: <nome_utente> <nome_macchina> <nome_server> <nome_reale>


Il messaggio USER è usato, all'inizio di una connessione, per specificare il nome dell'utente, della macchina dell'utente, del server ed il vero nome del nuovo utente. E' usato, inoltre, nelle comunicazioni tra servers, per indicare un nuovo utente in arrivo su IRC dal momento che un utente è registrato solamente dopo che i comandi USER e NICK sono stati ricevuti da un client.

Tra i server il comando USER deve essere preceduto dal NICKname del client. Notare che il nome dell'host e del server sono normalmente ignorati dal server IRC quando il comando USER arriva da un utente connesso direttamente (per ragioni di sicurezza), ma sono usati nelle comunicazioni server-server. Questo significa che un comando NICK deve sempre essere inviato ad un server remoto quando un nuovo utente viene presentato al resto della rete, prima che il relativo comando USER sia inviato. Bisogna prestare attenzione al fatto che nome_reale deve essere l'ultimo, perchè può contenere dei caratteri spazio, e deve essere preceduto dal carattere due punti (':') per far sì che sia riconosciuto.

Dal momento che per l'utente è facile mentire sul suo nome-utente facendo affidamento unicamente sul messaggio USER, è raccomandato l'uso di un "Identity Server". Se la macchina dalla quale un utente si connette ha un server in grado di esplicare questa funzione, il nome_utente adottato sarà quello proveniente dalla risposta dell' "Identity Server".

Risposte numeriche:

ERR_NEEDMOREPARAMS   (Errore_necessitano più parametri)
ERR_ALREADYREGISTRED (Errore_già registrato)


Esempi:

USER guest tolmoon tolsun :Ronnie Reagan ; Utente che registra se stesso con l'username "guest" ed il vero nome "Ronnie Reagan".

:testnick USER guest tolmoon tolsun :Ronnie Reagan ; messaggio tra server con il nickname al quale appartiene il comando USER.


Indice


4.1.4 Messaggio Server

Comando: SERVER
Parametri: <nome_server> <numero_tratte> <info>


Il messaggio server viene utilizzato per comunicare ad un server che dall'altra parte di una nuova connessione c'è un server.

Questo messaggio viene anche usato per passare i dati del server a tutta la rete. Quando un nuovo server è connesso alla rete, le informazioni che lo riguardano sono inviate a tutto il network. <numero-tratte> viene usato per dare a tutti i server alcune informazioni interne sulla distanza cui si trova ciascun server. Con una lista completa dei server, sarebbe possibile ricostruire una mappa completa della configurazione dei collegamenti fra i server, ma l'hostmask ne impedisce la realizzazione.

Il messaggio SERVER deve essere accettato solamente: (a) o da una connessione non ancora registrata e sta cercando di registrarsi come server; (b) o da una connessione già esistente con un altro server, nel qual caso il messaggio SERVER introduce un nuovo server che si trova dietro quel server.

La maggior parte degli errori che si verificano con la ricezione di un comando SERVER consistono in una interruzione della connessione da parte del server di destinazione (target SERVER).

Di solito le risposte di errore sono inviate usando il comando ERROR, piuttosto che inviare quelle numeriche, dal momento che il comando ERROR ha diverse proprietà utili che lo rendono, in questo caso, vantaggioso. Se un messaggio SERVER viene analizzato e cerca di introdurre un server che è già noto al server ricevente, la connessione dalla quale arriva il messaggio deve essere chiusa (se si seguono le procedure corrette), in quanto si è formato un doppio percorso per quel server e la natura aciclica della rete IRC risulta compromessa.

Risposta Numerica:

ERR_ALREADYREGISTRED  (Errore_già registrato)


Esempi:

SERVER test.oulu.fi 1 : [tolsun.oulu.fi] Experimental server ; Il nuovo server test.oulu.fi si introduce e cerca di registrarsi. Il nome tra parentesi [..] è il nome della macchina sulla quale è attivo test.oulu.fi.

:tolsun.oulu.fi SERVER csd.bu.edu 5 :BU Central Server ; Il server tolsun.oulu.fi è il nostro collegamento per csd.bu.edu che si trova a 5 tratte di distanza.


Indice


4.1.5 Messaggio Oper, Operatore

Comando: OPER
Parametri: <utente> <parola_d_ordine>


Il messaggio OPER è usato da un utente normale per ottenere i privilegi di operatore. La combinazione di <utente> e <parola_d_ordine> è richiesta per avere quei privilegi. Se il client che invia il comando OPER fornisce la corretta parola d'ordine per l'utente dato, il server informa del nuovo operatore il resto della rete effettuando un "MODE +o" per il nickname del client. Il messaggio OPER è solamente un messaggio client-server.

Risposte numeriche:

ERR_NEEDMOREPARAMS (Errore_necessitano più parametri)
RPL_YOUREOPER      (risposta_sei già operatore)
ERR_NOOPERHOST     (errore_non ci sono O: line per l'utente specificato)
ERR_PASSWDMISMATCH (errore_la password non corrisponde)


Esempio:

OPER foo bar ; Tentativo di registrare come un operatore usando "foo" come nome utente e "bar" come parola d'ordine.


Indice


4.1.6 Messaggio Quit (abbandonare)

Comando: QUIT
Parametri: [<Messaggio di cessazione>]


La sessione di un client è terminata con un messaggio di cessazione. Il server deve chiudere la connessione con un client che invia un messaggio QUIT. Se viene dato un "Messaggio di cessazione", verrà mostrato questo al posto del messaggio di default, consistente nel semplice nickname.

Quando un tratto della rete si interrompe (sconnessione di due server) "split", il messaggio quit si compone dei nomi dei due server coinvolti separati da uno spazio. Il primo nome è quello del server che è ancora connesso, il secondo quello del server sconnesso. Se, per qualche altra ragione, la connessione con un client viene chiusa senza che il client abbia inviato un messaggio QUIT (per esempio il client si pianta e si verifica un EOF (End Of File) sul socket) (4), il server deve compilare il messaggio di abbandono con una formulazione che rifletta la natura dell'evento che ha causato la sconnessione.

Risposte numeriche:

Nessuna.


Esempio:

QUIT :Gone to have lunch (Andato a pranzo) ; Format preferibile del messaggio.


Indice


4.1.7 Messaggio Server Quit

Comando: SQUIT
Parametri: <server> <commento>


Il messaggio SQUIT viene impiegato per rendere conto dei server che abbandonano oppure che smettono di funzionare. Se un server desidera interrompere la connessione con un altro server deve mandare un messaggio SQUIT all'altro server usando il nome dell'altro server, che chiude la sua connessione col server che abbandona, come parametro "server".

La disponibilità di questo comando agli operatori anche per mantenere ordinato, l'assetto delle connessioni all'interno della rete IRC. Gli operatori possono dunque usare il messaggio SQUIT per una connessione ad un server remoto. In questo caso lo SQUIT deve essere analizzato da ogni server tra l'operatore ed il server remoto, aggiornando la "visione" della rete che ciascun server deve conservare, come viene spiegato più sotto. Il parametro "commento" dovrebbe essere fornito da tutti gli operatori che eseguono uno SQUIT su un server remoto (che non è connesso cioè al server sul quale essi operano) cosicchè gli altri operatori siano informati sui motivi del provvedimento. Il "commento" viene definito anche dai server, che possono formularlo come un messaggio di errore o simili.

Ambedue i server che si trovino agli estremi della connessione che viene chiusa devono inviare un messaggio SQUIT (a tutte le altre connessioni server che li riguardano) per tutti gli altri server che sono considerati trovarsi a valle di ciascuno di questi collegamenti. Alla stessa maniera, un messaggio QUIT deve essere inviato a tutti gli altri server connessi al resto della rete nell'interesse di tutti i client che si trovino a valle di quel collegamento. In aggiunta a tutto questo, a tutti i membri di un canale, i quali perdono un membro a causa dello split, deve essere inviato un messaggio QUIT.

Se la connessione ad un server viene terminata prematuramente (per esempio il server dalla parte opposta del link smette di funzionare), al server che rileva questa sconnessione è richiesto di informare il resto della rete che la connessione si è chiusa e di compilare il campo "commento" con qualcosa di appropriato.

Risposte numeriche:

ERR_NOPRIVILEGES (errore_non hai i privilegi dell'operatore)
ERR_NOSUCHSERVER (errore_ il serve indicato non esiste)


Esempi:

SQUIT tolsun.oulu.fi :Bad Link ; la connessione al server tolson.oulu.fi è stata terminata a causa di un "Bad Link" (cattiva connessione).

:Trillian SQUIT cm22.eng.umd.edu :Server out of control ; messaggio da Trillian per disconnettere "cm22.eng.umd.edu" dalla rete perchè "Server out of control" (server fuori controllo).


Indice


4.2 Operazioni del Canale

Questo gruppo di messaggi concerne la manipolazione dei canali, le loro proprietà (mode del canale), ed il loro contenuto (usualmente clients).
Per una giusta realizzazione, è necessario stabilire un numero di regole, quando i client che si trovano agli estremi opposti della rete inviano messaggi che potrebbero collidere fra loro. è richiesto, inoltre, che i server mantengano una traccia storica dei nickname per assicurarsi che, ogniqualvolta un parametro <nick> è dato, il server ne controlli la storia nel caso sia stato cambiato di recente.

Indice


4.2.1 Messaggio Join

Comando: JOIN
Parametri: <canale>{,<canale>} [<chiave>{,<chiave>}]


Il comando JOIN è usato dal client per avere accesso ai messaggi provenienti da un dato canale. La verifica della sussistenza della condizione perchè un client sia autorizzato o meno ad aggregarsi al canale, viene realizzata dal server al quale il client è connesso. Tutti gli altri server aggiungono automaticamente il client al canale quando la sua ammissione ad un canale è notificata da altri server. Le condizioni che determinano l'ammissione sono le seguenti:

1.       Il client deve essere invitato se il canale è ad invito (mode +i);

2.       Il nick/nome_utente/nome_macchina del client non devono corrispondere a ban attivi;

3.       Se è definita una parola d'ordine di acceso, deve essere fornita la parola corretta (mode +k) (5).

Tutto questo è discusso più dettagliatamente nella sezione Comando MODE (si veda la sezione 4.2.3 per maggiori informazioni).

Una volta che gli utenti si sono aggregati al canale, essi ricevono notizia di tutti i comandi, ricevuti dal loro server, che riguardano il canale. Questo Include MODE, KICK, PART, QUIT e naturalmente PRIVMSG/NOTICE. Il comando JOIN necessita di essere trasmesso a tutti i server di modo che ogni server sappia dove trovare gli utenti che sono sul canale. Questo permette una ottimizzazione nell'invio dei messaggi di tipo PRIVMSG/NOTICE al canale. Se un JOIN ha successo, all'utente vengono notificati l' "argomento" del canale (topic) - usando RPL_TOPIC - e la lista degli utenti che sono nel canale, che include l'utente aggregato, (usando RPL_NAMREPLY).

Risposte numeriche:

ERR_NEEDMOREPARAMS  (errore_necessitano più parametri)
ERR_BANNEDFROMCHAN  (errore_bannato dal canale)
ERR_INVITEONLYCHAN  (errore_canale ad invito)
ERR_BADCHANNELKEY   (errore_key sbagliata)
ERR_CHANNELISFULL   (errore_canale pieno)
ERR_BADCHANMASK     (errore_Chanmask errata)
ERR_NOSUCHCHANNEL   (errore_canale inesistente)
ERR_TOOMANYCHANNELS (errore_troppi canali)
RPL_TOPIC           (risposta_topic del canale: ) (6)


Esempi:

JOIN #foobar ; richiesta di aggregazione al canale #foobar.

JOIN &foo fubar ; richiesta di aggregazione al canale &foo usando la parola d'ordine "fubar".

JOIN #foo,&bar fubar ; richiesta di aggregazione al canale #foo usando la parola d'ordine "fubar" ed al canale &bar usando nessuna key.

JOIN #foo,#bar fubar,foobar ; richiesta di aggregazione al canale #foo usando la parola d'ordine "fubar" ed al canale #bar usando "foobar".

JOIN #foo,#bar ; richiesta di aggregazione ai canali #foo e #bar.

:WiZ JOIN #Twilight_zone ; messaggio JOIN da WiZ


Indice


4.2.2 Messaggio Part

Comando: PART
Parametri: <canale>{,<canale>}


Il messaggio PART comporta la rimozione del client mittente del messaggio dalla lista di utenti attivi di tutti i canali elencati nella riga dei parametri.

Risposte numeriche:

ERR_NEEDMOREPARAMS (errore_necessitano più parametri)
ERR_NOSUCHCHANNEL  (errore_canale inesistente)
ERR_NOTONCHANNEL   (errore_non sei sul canale)


Esempi:

PART #twilight_zone ; richiesta di lasciare il canale "#twilight_zone"

PART #oz-ops,&group5 ; richiesta di lasciare sia il canale "&group5" che "#oz-ops".


Indice


4.2.3 Messaggio Mode

Comando: MODE

Il comando MODE ha due scopi: permette infatti di cambiare i MODE sia dei canali che degli utenti. La ragione di questa scelta è che in futuro i nickname saranno obsoleti e l'entità equivalente sarà il canale. (7)

Quando viene analizzato un comando MODE, è essenziale che prima il messaggio venga analizzato nella sua totalità e che, in un secondo tempo, i cambiamenti dettati dal messaggio vengano effettuati.

Indice


4.2.3.1 Mode dei canali

Parametri: <canale> {[+|-]|o|p|s|i|t|n|b|v} [<limite>] [<utente>] [<schema_di_ban>] (8) Il comando MODE è a disposizione degli operatori di canale perchè possano cambiare le caratteristiche del 'loro' canale. è richiesto inoltre che i server siano in grado di cambiare i mode dei canali così che sia possibile creare operatori. I mode dei canali disponibili sono i seguenti:

o - dà/toglie i privilegi di operatore;
p - permette di definire il canale come privato;
s - permette di definire il canale come segreto;
i - permette di definire il canale come canale ad invito;
t - permette di definire il topic come definibile solo da operatori del canale;
n - permette di stabilire la proibizione di invio di messaggi da client che sono al di fuori del canale;
m - permette di definire il canale come canale moderato;
l - stabilisce un limite al numero di utenti presenti sul canale;
b - definisce uno schema di ban per tenere gli utenti fuori del canale;
v - dà/toglie la possibilità di parlare su un canale moderato
k - setta una parola d'ordine per l'acceso al canale.

Quando si usano le opzioni 'o' e 'b', è stata imposta una restrizione di tre comandi per mode. Vale a dire, ogni combinazione di 'o' e (Qui il testo inglese è lacunoso, ma, con ogni probabilità si intende dire che ogni combinazione di 'o' e 'b', può contenere al massimo tre elementi. - N.d.T.)

Indice


4.2.3.2 Mode dell'utente

Parametri: <nickname> {[+|-]|i|w|s|o} (9)

I MODE degli utenti sono cambiamenti che determinano come il client è visto dagli altri, oppure che tipo di messaggi 'extra' possono essere inviati al client. Il comando MODE per l'utente può essere accettato solamente se il mittente del messaggio e il nickname dato come parametro sono identici.

I mode disponibili sono i seguenti:

i - definisce un utente come invisibile;
s - determina la ricezione da parte dell'utente delle notizie del server;
w - permette all'utente di ricevere i wallops (messaggi tra operatori);
o - permette di definire l' utente come operatore.

Mode in aggiunta a questi potranno essere disponibili prossimamente. Se un utente cerca di farsi operatore da solo, usando il mode "+o", il tentativo è ignorato. Non c'è alcuna restrizione, comunque, per chiunque voglia deopparsi (usando "-o").

Risposte numeriche:

ERR_NEEDMOREPARAMS   (errore_necessitano più parametri)
RPL_CHANNELMODEIS    (risposta_il modo di canale è: )
ERR_CHANOPRIVSNEEDED (errore_sono richiesti le prerogative di operatore di canale)
ERR_NOSUCHNICK       (errore_nick inesistente)
ERR_NOTONCHANNEL     (errore_non sei sul canale)
ERR_KEYSET           (errore_nella definizione della parola d'ordine)
RPL_BANLIST          (risposta_lista dei ban: )
RPL_ENDOFBANLIST     (risposta_fine della lista dei ban: )
ERR_UNKNOWNMODE      (errore_modo sconosciuto)
ERR_NOSUCHCHANNEL    (errore_canale non esistente)
ERR_USERSDONTMATCH   (errore_user non corrispondente)
RPL_UMODEIS          (risposta_il mode dell'utente è: )
ERR_UMODEUNKNOWNFLAG (errore_flag sconosciuto per un mode utente)


Esempi:

Uso dei MODE del canale:

MODE #Finnish +im ; rende il canale #Finnish moderato e ad invito.

MODE #Finnish +o Kilroy ; da i privilegi di operatore di canale a Kilroy sul canale #Finnish.

MODE #Finnish +v Wiz ; permette a WiZ di parlare in #Finnish.

MODE #Fins -s ; rende il canale #Fins non più segreto.

MODE #42 +k oulu ; definisce "oulu" come parola d'ordine per l'accesso al canale.

MODE #eu-ofors +l 10 ; setta a 10 il numero limite di utenti presenti sul canale.

MODE &oulu +b ; lista gli schemi di ban definiti per il canale.

MODE &oulu +b *!*@* ; impedisce l'accesso al canale di tutti gli utenti.

MODE &oulu +b *!*@*.edu ; impedisce l'accesso al canale di ogni utente il cui nome di macchina corrisponda ad *.edu.


Uso dei MODE dell'utente:

:MODE WiZ -w ; disabilita WIZ dalla ricezione dei wallops.

:Angel MODE Angel +i ; messaggio da Angel di rendersi invisibile.

MODE WiZ -o ; WiZ si deoppa (rimuovendo lo status di operatore). Il contrario ovvio di questo comando non deve essere permesso agli utenti dal momento che aggirerebbe il comando OPER.


Indice


4.2.4 Messaggio Topic

Comando: TOPIC
Parametri: <canale> [<topic>]


Il messaggio TOPIC è usato per cambiare o prender visione del topic di un canale. Se non è dato alcun parametro <topic> il messaggio di ritorno sarà il topic del canale. Se invece il parametro <topic> è presente, il topic di quel canale potrà essere cambiato, se il mode del canale permette questa azione.

Risposte numeriche:

ERR_NEEDMOREPARAMS   (errore_necessitano più parametri)
ERR_NOTONCHANNEL     (errore_non sei sul canale)
RPL_NOTOPIC          (risposta_topic vuoto)
RPL_TOPIC            (risposta_il topic del canale è: )
ERR_CHANOPRIVSNEEDED (errore_necessitano i privilegi dell'operatore)


Esempi:

:Wiz TOPIC #test :New topic ;l'utente Wiz definisce il topic.

TOPIC #test :another topic ;definisce il topic su #test come "another topic".

TOPIC #test ; controlla il topic del canale #test.


Indice


4.2.5 Messaggio Names

Comando: NAMES
Parametri: [<canale>{,< canale>}]


Usando il comando NAMES gli utenti possono avere una lista di tutti i nickname che siano loro visibili, su ogni canale che essi vedono. I nomi dei canali che possono vedere sono quelli che non sono privati (+p) o segreti (+s) o quelli sui quali si trovano. Il parametro <canale> specifica a proposito di quale/i canale/i inviare l'informazione richiesta, se questa risulta valida. Non c'è risposta di errore in caso di nome errato del canale.

Se non è dato alcun parametro <canale>, viene fornita una lista di tutti i canali e dei loro occupanti. Alla fine della lista, viene fornito un elenco degli utenti (come appartenenti ad un canale "*") che sono visibili, ma non su ogni canale o invisibili su un canale visibile.

Risposte numeriche:

RPL_NAMREPLY   (risposta_risposta dei nomi: )
RPL_ENDOFNAMES (risposta_fine dei nomi: )


Esempi:

NAMES #twilight_zone,#42 ; lista gli utenti visibili sui canali #twilight_zone e #42 se i canali sono visibili.

NAMES ; elenca tutti i canali ed utenti visibili.


Indice


4.2.6 Messaggio List

Comando: LIST Parametri: [<canale>{,<canale>} [<server>]]

Il messaggio LIST è usato per listare i canali ed i loro topics. Se è presente il parametro <canale>, viene mostrato solo lo status di quel canale. I canali privati vengono listati (senza il loro topic) come "Prv" a meno che il client da cui proviene la domanda di informazione, non sia su quel canale. Alla stessa maniera, i canali segreti non vengono elencati, a meno che il client non sia un membro del canale in questione.

Risposte numeriche:

ERR_NOSUCHSERVER (errore_server inesistente)
RPL_LISTSTART    (risposta_inizio della lista: )
RPL_LIST         (risposta_lista: )
RPL_LISTEND      (risposta_fine della lista: )


Esempi:

LIST ; lista tutti i canali.

LIST #twilight_zone,#42 ; lista i canali #twilight_zone e #42


Index


4.2.7 Messaggio Invite

Comando: INVITE Parametri: <nickname> <canale>

Il messaggio INVITE usato per invitare gli utenti su un canale. Il parametro <nickname> è il nick della persona da invitare sul canale <canale>. Non è necessario che il canale in cui <nickname> viene invitato, debba esistere o debba essere un canale valido. Per invitare un utente in un canale ad invito (MODE +i) si deve essere riconosciuti come operatori del canale.

Risposte numeriche:

ERR_NEEDMOREPARAMS   (errore_necessitano più parametri)
ERR_NOSUCHNICK       (errore_nick inesistente)
ERR_NOTONCHANNEL     (errore_non sei sul canale)
ERR_USERONCHANNEL    (errore_utente già sul canale)
ERR_CHANOPRIVSNEEDED (errore_necessitano i privilegi dell'operatore)
RPL_INVITING         (risposta_invito a: )
RPL_AWAY             (rispoasta_utente in away: )


Esempi:

:Angel INVITE Wiz #Dust ; l'utente Angel invita WiZ sul canale #Dust

INVITE Wiz #Twilight_Zone ; comando di invito di WiZ su #Twilight_zone


Indice


4.2.8 Messaggio Kick

Comando: KICK
Parametri: <canale> <utente> [<commento>]


Il comando KICK può essere usato per rimuovere forzatamente un utente da un canale. Esso lo 'scalcia fuori del canale' (PART forzato). Solo un operatore di canale può rimuovere un utente dal canale. Ogni server che riceva un messaggio KICK controlla se il comando sia valido (per esempio se il mittente è un operatore), prima di rimuovere la vittima dal canale.

Risposte numeriche:

ERR_NEEDMOREPARAMS   (errore_necessitano più parametri)
ERR_NOSUCHCHANNEL    (errore_nick inesistente)
ERR_BADCHANMASK      (errore_schema di nome di canale errato)
ERR_CHANOPRIVSNEEDED (errore_necessitano i privilegi dell'operatore)
ERR_NOTONCHANNEL     (errore_non sei sul canale)


Esempi:

KICK &Melbourne Matthew ; caccia Matthew da &Melbourne

KICK #Finnish John :Speaking English ; caccia John from #Finnish giustificando l'azione con "Speaking English" (commento).

:WiZ KICK #Finnish John ; messaggio di KICK da WiZ per rimuovere John dal canale #Finnish


Nota: è possibile estendere i parametri del comando KICK come segue:

<canale>{,<canale>} <utente>{,<utente>} [<commento>] (10)


Indice


4.3 Comandi e richieste di informazioni al server

Il gruppo di comandi per la richiesta di informazioni al server è stato previsto per ottenere informazioni su ogni server connesso alla rete. Tutti i server connessi devono replicare alle richieste di informazioni in maniera corretta. Ogni risposta non corretta (o qualunque mancanza di risposta) deve essere considerata come un mal funzionamento da parte del server che deve essere sconnesso e/o disabilitato prima possibile e finchè non si sia posto rimedio alla disfunzione. In quelle domande, dove compare un parametro "<server>", generalmente significa che il parametro potrebbe essere un nickname o un server oppure un nome jolly di qualche sorta. Per ogni parametro, comunque, vengono generati solamente una domanda ed un set di risposte.

Indice


4.3.1 Messaggio Version

Comando: VERSION
Parametri: [<server>]


Il messaggio VERSION è usato per avere informazioni a proposito della versione nel programma implementato sul server. Un parametro facoltativo <server> viene usato per informarsi sulla versione del programma attivo su un server al quale un client non sia connesso direttamente.

Risposte numeriche:

ERR_NOSUCHSERVER (errore_server inesistente)
RPL_VERSION      (risposta_La versione è: )


Esempi:

:Wiz VERSION *.se ; messaggio da Wiz per informarsi sulla versione di un server il cui nome corrisponda allo schema: "*.se"

VERSION tolsun.oulu.fi ; richiesta di informazione sulla versione del server "tolsun.oulu.fi".


Indice


4.3.2 Messaggio Stats

Comando: STATS
Parametri: [<richiesta> [<server>]]


Il messaggio STATS usato per chiedere informazioni statistiche su un determinato server. Se il parametro <server> viene omesso, viene inviata solamente la risposta di fine del messaggio stats. Le modalità di esecuzione di questo comando dipendono fortemente dal server che risponde, tuttavia i server debbono essere in grado di fornire le informazioni descritte qui di seguito (o qualcosa di analogo). Una particolare richiesta può essere denotata da una singola lettera controllata dal solo server di destinazione (se dato come parametro <server>), ed è invece trasmessa, ignorata ed inalterata, dai server intermedi. Le richieste di informazioni che seguono, sono quelle reperibili nell'attuale implementazione di IRC, e costituiscono una porzione abbondante delle informazioni di setup per il server in questione. Malgrado queste richieste possano essere soddisfatte con modalità diverse da altre versioni, tutti i server dovrebbero essere in grado di fornire una risposta valida ad una richiesta STAT, una replica cioè, conforme ai formati di risposta comunemente usati e coerente con lo scopo della richiesta.

Le richieste usualmente soddisfatte sono:

c - ritorna una lista di server ai quali il server può connettersi o dai quali permette connessioni;
h - ritorna una lista di server i quali sono considerati forzatamente "foglie" (elementi periferici) nell'albero della rete oppure ai quali è permesso di agire come suoi punti nodali;
i - ritorna una lista di host provenendo dai quali il server permette ad un client di connettersi;
k - ritorna una lista di combinazioni nome_utente/nome_macchina bannati su quel server;
l - ritorna una lista delle connessioni del server, mostrando da quanto tempo si è stabilita ogni connessione, il traffico su quella connessione in byte e messaggi per ogni direzione;
m - ritorna una lista di comandi riconosciuti dal server ed il conteggio del numero di volte in cui ogni comando è stato usato, se il conteggio è un numero diverso da zero;
o - ritorna una lista di host provenendo dai quali normali client sono autorizzati a diventare operatori;
y - mostra Y (Class) linee del file di configurazione del server;
u - ritorna una riga che mostra da quanto tempo il server è attivo. (11)

Risposte numeriche:

ERR_NOSUCHSERVER  (errore_server inesistente)
RPL_STATSCLINE    (risposta_ad una richiesta di tipo "c")
RPL_STATSHLINE    (risposta_ad una richiesta di tipo "h")
RPL_STATSILINE    (risposta_ad una richiesta di tipo "i")
RPL_STATSKLINE    (risposta_ad una richiesta di tipo "k")
RPL_STATSLLINE    (risposta_ad una richiesta di tipo "l")
RPL_STATSNLINE    (risposta_ad una richiesta di tipo "n")
RPL_STATSOLINE    (risposta_ad una richiesta di tipo "o")
RPL_STATSQLINE    (risposta_ad una richiesta di tipo "q")
RPL_STATSLINKINFO (risposta_ad una richiesta di informazioni sullo stato delle connessioni)
RPL_STATSUPTIME   (risposta_ad una richiesta di tipo "u")
RPL_STATSCOMMANDS (risposta_ad una richiesta di tipo "m")
RPL_ENDOFSTATS    (risposta_fine delle informazioni statistiche)


Esempi:

STATS m ; controlla le statistiche di utilizzo dei comandi sul server al quale si è connessi

:Wiz STATS c eff.org ; richiesta di WiZ per informazioni sulle linee C/N al server eff.org


Indice


4.3.3 Messaggio Links

Comando: LINKS
Parametri: [[<server remoto>] <schema_server>]


Col comando LINKS, un utente può ottenere l'elenco di tutti i server conosciuti al server che risponde alla richiesta di informazione. La lista di server inviata deve essere compatibile con lo schema di nome del server fornito nel secondo parametro, se non viene data alcuno schema, viene inviata la lista completa. Se il parametro <server remoto> viene dato in aggiunta a <schema_server>, il comando LINKS viene inoltrato al primo server il cui nome (sempre se esista) corrisponde a quello contenuto in <server remoto>, e a quel server è allora richiesto di rispondere alla domanda.

Risposte numeriche:

ERR_NOSUCHSERVER (errore_server inesistente)
RPL_LINKS        (risposta_lista collegamenti)
RPL_ENDOFLINKS   (risposta_fine delle lista collegamenti)


Esempi:

LINKS *.au ; lista tutti i server con un nome coerente con lo schema_server *.au;

:WiZ LINKS *.bu.edu *.edu ; messaggio LINKS da WiZ al primo server il cui nome è coerente con lo schema *.edu per una lista di server che soddisfano lo schema *.bu.edu.


Indice


4.3.4 Messaggio Time

Comando: TIME
Parametri: [<server>]


Il messaggio TIME viene usato per chiedere l'ora locale relativa al server specificato. Se non viene dato un parametro server, il server che tratta il comando deve rispondere alla domanda.

Risposte numeriche:

ERR_NOSUCHSERVER (errore_server inesistente)
RPL_TIME         (risposta_ora locale)


Esempi:

TIME tolsun.oulu.fi ; controlla l'orario sul server "tolson.oulu.fi"

Angel TIME *.au ; l'utente Angel controlla l'orario su un server corrispondente allo schema "*.au"


Indice


4.3.5 Messaggio Connect

Comando: CONNECT
Parametri: <server_destinazione> [<porta> [<server remoto>]]


Il comando CONNECT può essere usato per forzare un server a stabilire una nuova ed immediata connessione ad un altro server. CONNECT è un comando privilegiato ed è disponibile solamente agli operatori IRC. Dato un server remoto, allora il tentativo di connessione viene effettuato da quel server al <erver_destinazione> attraverso la porta <porta>. [Ndr - Pur essendo il termine inglese originale: "port" equivalente all'italiano "porto", si mantiene qui l'erronea traduzione "port" entrata ormai nella tradizione tecnico-informatica dell' italiano]

Risposte numeriche:

ERR_NOSUCHSERVER   (errore_server inesistente)
ERR_NOPRIVILEGES   (errore_non hai i privilegi dell'operatore)
ERR_NEEDMOREPARAMS (errore_necessitano più parametri)


Esempi:

CONNECT tolsun.oulu.fi ;tentativo di connettere un server a tolsun.oulu.fi

:WiZ CONNECT eff.org 6667 csd.bu.edu ;tentativo effettuato da WiZ di far connettere i server eff.org e csd.bu.edu sulla porta 6667.


Indice


4.3.6 Messaggio Trace

Comando: TRACE
Parametri: [<server>]


Il comando TRACE è impiegato per trovare il percorso verso un server specificato. Ogni server che riceve e tratta questo messaggio, deve comunicare al server mittente informazioni su se stesso, inviando una risposta e denotandosi come un collegamento di passaggio. Si forma così una catena di risposte, simile a quella che si riceve usando il "traceroute". Dopo aver inviato la risposta, il server deve mandare il messaggio TRACE al server successivo, finchè il server il cui nome è contenuto nel parametro <server> non viene raggiunto. Se viene omesso il parametro <server>, è previsto che il comando TRACE invii un messaggio al mittente, indicando con quali server il server corrente ha una connessione diretta. Se la destinazione data da <server> è un server effettivamente collegato, allora al server di destinazione è è fatto obbligo di notificare tutti i server e gli utenti connessi, anche se, in effetti, solo agli operatori è permesso vedere gli utenti presenti. Se la destinazione data da <server> è il nick di un utente, allora solo una risposta per quel nick viene data. (12)

Risposte numeriche:

ERR_NOSUCHSERVER (errore_server inesistente)


Se il messaggio TRACE è indirizzato ad un altro server, tutti i server intermedi devono inviare una risposta RPL_TRACELINK per indicare che il messaggio TRACE è passato attraverso di loro e specificare quale sarà la destinazione immediatamente successiva.

RPL_TRACELINK (risposta_traccia di collegamento)


Una risposta TRACE può essere composta da un numero qualsiasi delle seguenti risposte numeriche.

RPL_TRACECONNECTING (risposta_TRACE: collegamento)
RPL_TRACEHESHAKE    (risposta_TRACE: riconoscimento (handshaking))
RPL_TRACEUNKNOWN    (risposta_TRACE: elemento sconosciuto)
RPL_TRACEOPERATOR   (risposta_TRACE: operatore)
RPL_TRACEUSER       (risposta_TRACE: utente)
RPL_TRACESERVER     (risposta_TRACE: server)
RPL_TRACESERVICE    (risposta_TRACE: servizio)
RPL_TRACENEWTYPE    (risposta_TRACE: nuovo tipo)
RPL_TRACECLASS      (risposta_TRACE: classe)


Esempi:

TRACE *.oulu.fi ;TRACE ad un server il cui nome è coerente con lo schema *.oulu.fi

:WiZ TRACE AngelDust ;TRACE emesso da WiZ per il nick AngelDust


Indice


4.3.7 Messaggio Admin

Comando: ADMIN
Parametri: [<server>]


Il messaggio ADMIN viene usato per trovare il nome dell'amministratore di un dato server, oppure del server corrente se il parametro <server> viene omesso. Ogni server deve avere la possibilità di inoltrare messaggi ADMIN ad altri server.

Risposte numeriche:

ERR_NOSUCHSERVER (errore_server inesistente)
RPL_ADMINME      (risposta_ADMIN: me)
RPL_ADMINLOC1    (risposta_ADMIN: locale1)
RPL_ADMINLOC2    (risposta_ADMIN: locale2)
RPL_ADMINEMAIL   (risposta_indirizzo e-mail dell'amministratore: )


Esempi:

ADMIN tolsun.oulu.fi ; richiesta di informazione ADMIN a tolsun.oulu.fi

:WiZ ADMIN *.edu ; ADMIN richiesta da WiZ per il primo server il cui nome è coerente con lo schema *.edu.


Indice


4.3.8 Messaggio Info

Comando: INFO
Parametri: [<server>]


Il comando INFO provoca l'invio di una risposta che descrive il server: la versione, data di compilazione, la release dell'ultimo aggiornamento applicato (patchlevel), quando è stato attivato, ed ogni altra informazione che può essere considerata rilevante.

Risposte numeriche:

ERR_NOSUCHSERVER (errore_server inesistente)
RPL_INFO         (risposta_informazioni: )
RPL_ENDOFINFO    (risposta_fine delle informazioni)


Esempi:

INFO csd.bu.edu ; richiesta di risposta INFO da csd.bu.edu

:Avalon INFO *.fi ; richiesta INFO da Avalon per il primo server il cuoi nome è coerente con lo schema *.fi.

INFO Angel ; richiesta INFO dal server al quale Angel è connesso.


Indice


4.4 Invio messaggi

Lo scopo principale del protocollo IRC è di fornire una base comune per tutti i client sulla quale essi possano comunicare gli uni con gli altri. PRIVMSG e NOTICE sono gli unici comandi a disposizione che di fatto inviano il testo di un messaggio da un client all'altro - tutto il resto esiste per rendere possibile questa azione e per assicurare che l'invio avvenga in modo strutturato ed affidabile.

Indice


4.4.1 Messaggi Privati

Comando: PRIVMSG
Parametri: <destinatario>{,<destinatario>} <testo da inviare>


PRIVMSG viene usato per inviare messaggi privati tra utenti. <destinatario> è il nickname del destinatario del messaggio. <destinatario> può anche essere una lista di nomi o canali, separata da virgole. Il parametro <destinatario> può anche essere uno schema di nome-macchina (#mask) oppure uno schema di nome-server ($mask). In ambedue i casi il server invierà il PRIVMSG a coloro che hanno un server oppure una macchina il cui nome è coerente con lo schema fornito. Lo schema deve contenere almeno un (1) punto "." e nessun carattere-jolly dopo l'ultimo punto ".". Questo è necessario per prevenire qualcuno dall'inviare messaggi del tipo "#*" o a "$*", che sarebbero trasmessi a tutti gli utenti. L'esperienza insegna che di questo comando viene fatto si abusa spesso in maniera irresponsabile. Per carattere-jolly si intendono i caratteri '*' e '?'.

Questa estensione al comando PRIVMSG è disponibile solo per gli operatori.

Risposte numeriche:

ERR_NORECIPIENT      (errore_destinatario non specificato)
ERR_NOTEXTTOSEND     (errore_testo non specificato)
ERR_CANNOTSENDTOCHAN (errore_invio impossibile al canale)
ERR_NOTOPLEVEL       (errore_non livello massimo)
ERR_WILDTOPLEVEL     (errore_livello massimo non giustificato)
ERR_TOOMANYTARGETS   (errore_troppe destinazioni)
ERR_NOSUCHNICK       (errore_nick inesistente)
RPL_AWAY             (risposta_destinatario in away)


Esempi:

:Angel PRIVMSG Wiz :Hello are you receiving this message ? ; messaggio da Angel a Wiz.

PRIVMSG Angel :yes ìm receiving it !receiving it !'u>(768u+1n) .br ; messaggio a Angel.

PRIVMSG jto@tolsun.oulu.fi :Hello ! ; messaggio ad un client su un server tolsun.oulu.fi con nome-utente "jto".

PRIVMSG $*.fi :Server tolsun.oulu.fi rebooting. ; messaggio a chiunque sia su un server con un nome coerente con *.fi.

PRIVMSG #*.edu :NSFNet è undergoing work, expect interruptions ; messaggio a tutti gli utenti che hanno una macchina il cui nome è coerente con *.edu.


Indice


4.4.2 Messaggi Notice

Comando: NOTICE
Parametri: <nickname> <text>


Il messaggio NOTICE viene usato in modo simile al PRIVMSG. La differenza tra NOTICE e PRIVMSG è che una risposta automatica non deve mai essere inviata come replica ad un messaggio NOTICE. Questa regola si applica pure ai server - essi non devono ritornare una risposta di errore al client, alla ricezione di un NOTICE. Questa regola è utile per impedire l'innescarsi di cicli senza uscita tra un client che invia automaticamente qualcosa in risposta a qualcosa che ha ricevuto. Di solito si adotta questo metodo con gli automi (client che possiedono un modulo di Intelligenza artificiale oppure un qualsiasi altro programma interattivo che controlla le loro azioni), i quali inviano immancabilmente delle risposte, per paura che finiscano in cicli senza fine con altri automi. [Ndr - Si tratta dei così detti bot - abbreviazione della parola ceca "robot", programmi implementati sulla macchina di un client che rimangono in linea ed hanno un comportamento del tutto automatico]

Si veda PRIVMSG per maggiori dettagli sulle risposte e gli Esempi.

Indice


4.5 Richieste di informazioni sull'utente

Le richieste di informazioni sull'utente sono un gruppo di comandi che concernono primariamente la ricerca di dettagli su un utente particolare oppure su un gruppo di utenti. Quando si usano dei caratteri-jolly per denotare l'utente in questi comandi, di tutti gli utenti che siano eventualmente coerenti con lo schema fornito, verranno inviate informazioni solo sugli utenti "visibili" al richiedente. La visibilità di un utente è determinata come una combinazione del mode dell'utente ed i comuni canali sui quali si trovano sia l'utente inquisito che il richiedente.

Indice


4.5.1 Richiesta Who

Comando: WHO
Parametri: [<nome> [<o>]]


Il messaggio WHO è usato da un client per generare una richiesta la cui risposta è una lista di informazioni su utenti che sono coerenti con il parametro <nome> fornito dal client. In assenza del parametro <nome>, tutti gli utenti visibili (utenti che non sono invisibili (modo-utente +i) e che non hanno un canale in comune con il client richiedente) vengono listati.

Lo stesso risultato può essere raggiunto usando un <nome> "0" o qualsiasi schema con caratteri-jolly con cui sarebbe coerente ogni possibile utente. Il <nome> trasmesso a WHO viene confrontato col nome della macchina dell'utente, il server, il "nome reale" ed il nick, se il canale <nome> non può essere trovato. Se il parametro "o" viene trasmesso, solo gli operatori, in funzione dello schema di nome-utente fornito, verranno listati.

Risposte numeriche:

ERR_NOSUCHSERVER (errore_server inesistente)
RPL_WHOREPLY     (risposta_risposta al messaggio "WHO": )
RPL_ENDOFWHO     (risposta_fine della risposta al messaggio "WHO":)


Esempi:

WHO *.fi ; lista tutti gli utenti coerenti con "*.fi".

WHO jto* o ; lista tutti gli utenti coerenti con "jto*" se sono operatori.


Indice


4.5.2 Richiesta Whois

Comando: WHOIS
Parametri: [<server>] <schema-nick>[,<schema-nick>[,...]]


Questo messaggio è usato per chiedere informazioni su un particolare utente. Il server risponderà a questo messaggio con diverse risposte numeriche indicando i differenti statu tra gli utenti coerenti con lo schema-nick, di tutti quelli visibili al richiedente. Se non ci sono caratteri-jolly nel parametro <schema-nick>, ogni informazione su quel nick che il richiedente sia autorizzato a vedere, viene mostrata. Può essere fornita una lista di schemi-nick separati da una virgola (','). La versione più recente invia la richiesta ad uno specifico server. Questo perchè l'attuale periodo di inattività di un utente è conosciuto solo al server al quale l'utente è direttamente connesso, mentre tutte le altre informazioni sono note universalmente. (13)

Risposte numeriche:

ERR_NOSUCHSERVER    (errore_server inesistente)
ERR_NONICKNAMEGIVEN (errore_non è stato fornito alcun nick)
ERR_NOSUCHNICK      (errore_nick inesistente)
RPL_WHOISUSER       (risposta_WHOIS: utente)
RPL_WHOISCHANNELS   (risposta_WHOIS: canali)
RPL_WHOISSERVER     (risposta_WHOIS: server)
RPL_WHOISOPERATOR   (risposta_WHOIS: operatore)
RPL_WHOISIDLE       (risposta_WHOIS: periodo di inattività)
RPL_AWAY            (risposta_utente "fuori stanza")
RPL_ENDOFWHOIS      (risposta_fine del WHOIS)


Esempi:

WHOIS wiz ; ritorna le informazioni disponibili dell'utente con nick WiZ

WHOIS eff.org trillian ; chiede al server eff.org informazioni sull'user trillian


Indice


4.5.3 Domanda Whowas

Comando: WHOWAS
Parametri: <nick> [<conto> [<server>]]


Whowas chiede informazioni su un nick che non esiste più a causa di un cambio di nick oppure a causa dell'uscita da IRC dell'utente. In risposta a questa richiesta, il server ricerca nel suo archivio storico dei nick, cercando i nick che sono lessicalmente uguali (non si usano caratteri-jolly in questo caso). L'archivio storico è controllato a ritroso e fornisce per prima la ricorrenza più recente per il nick. Se viene trovata più di una presenza, vengono fornite più risposte, fino a un numero <conto> di casi (oppure la casistica completa, se non viene precisato il parametro <conto>). Se il parametro <conto> contiene un numero non positivo, allora viene effettuata una ricerca completa.

Risposte numeriche:

ERR_NONICKNAMEGIVEN (errore_non è stato fornito alcun nick)
ERR_WASNOSUCHNICK   (errore_nick inesistente)
RPL_WHOWASUSER      (risposta_WHOWAS: utente)
RPL_WHOWASERVER     (risposta_WHOWAS: server)
RPL_ENDOFWHOWAS     (risposta_fine del WHOWAS)


Esempi:

WHOWAS Wiz ; ritorna tutte le informazioni storiche sul nick "WiZ";

WHOWAS Mermaid 9 ; ritorna informazioni su un numero massimo di 9 ricorrenze più recenti per il nick Mermaid nell'archivio storico per i nicks.

WHOWAS Trillian 1 *.edu ; ritorna l'informazione storica più recente per "Trillian" dal primo server coerente con lo schema: "*.edu".


Indice


4.6 Altri Messaggi

I messaggi di questa categoria non rientrano in nessuna di quelle sopraelencate, ma sono parte integrante del protocollo.

Indice


4.6.1 Messaggio Kill

Comando: KILL
Parametri: <nick> <commento>


Il messaggio KILL viene usato per far chiudere, al server locale che la supporta materialmente, una connessione client-server. KILL viene usato dai server quando incontrano una presenza duplice nella lista di nick validi, per rimuovere ambedue gli utenti. Questo comando è disponibile anche agli operatori.

I client che possiedono algoritmi per la riconnessione automatica rendono di fatto questo comando poco utile, dal momento che la sconnessione risulta breve. Comunque esso interrompe il flusso dei dati e può essere impiegato per fermare un uso scorretto di grandi quantità di informazioni. Ogni utente può scegliere di ricevere i messaggi KILL generati da altri per tenere d'occhio i potenziali aree problematiche. In una arena dove è necessario che i nick siano in ogni momento tassativamente unici, messaggi KILL vengono generati ogniqualvolta vengono scoperti dei "duplicati" (tentativo di registrare due utenti con lo stesso nick) nella speranza che ambedue spariscano e ne riappaia solo uno. Il <commento> fornito deve riflettere la ragione effettiva del KILL. Per i KILL generati da server ,commento> è generalmente costruito con i dettagli relativi all'origine dei nick in conflitto. Per quelli generati dagli utenti è lasciato ad essi l'onere di fornire una ragione adeguata che soddisfi chi vede il comando. Per prevenire/scoraggiare la creazione di KILL truccati, per nascondere l'identità del KILLer (generatore del comando), il <commento> mostra anche un 'kill-path' (traccia del KILL) che viene aggiornato da ogni server che esso attraversa.

L'aggiornamento consiste nell'aggiunta, da parte di ogni server, del proprio nome alla traccia.

Risposte numeriche:

ERR_NOPRIVILEGES   (errore_non hai i privilegi dell'operatore)
ERR_NEEDMOREPARAMS (errore_necessitano più parametri)
ERR_NOSUCHNICK     (errore_nick inesistente)
ERR_CANTKILLSERVER (errore_non può "uccidere" un server)


Esempio:

KILL David (csd.bu.edu <- tolsun.oulu.fi) ; collisione di nickname tra csd.bu.edu e tolson.oulu.fi


Nota: è chiaramente auspicabile che solo gli operatori siano abilitati a chiudere una connessione di altri utenti con il messaggio KILL.

In un mondo ideale nemmeno gli operatori avrebbero bisogno di farlo, lasciando che fossero i server ad occuparsi del problema.

Indice


4.6.2 Messaggio Ping

Comando: PING
Parametri: <server1> [<server2>]


Il messaggio PING è usato per controllare la presenza di un utente attivo all'altro capo della connessione. Un messaggio PING viene mandato ad intervalli regolari, se non viene rilevata nessuna attività proveniente da una connessione. Se una connessione non risponde ad un comando PING, entro un certo periodo di tempo, quella connessione viene chiusa.

Qualsiasi client riceva un messaggio PING deve rispondere al <server1> (server che ha inviato il messaggio PING) il più in fretta possibile con un appropriato messaggio PONG, per indicare che esso è presente e vivo. I server non dovrebbero rispondere ai comandi PING ma contare sui PING dall'altro capo della connessione per indicare che la connessione è attiva. Se viene specificato il parametro <server2>, il messaggio PING viene inoltrato anche a quel server.

Risposte numeriche:

ERR_NOORIGIN     (errore_nessuna origine)
ERR_NOSUCHSERVER (errore_server inesistente)


Esempi:

PING tolsun.oulu.fi ; il server che invia un messaggio PING ad un altro server per indicare che è ancora attivo.

PING WiZ ; messaggio PING inviato al nick WiZ


Indice


4.6.3 Messaggio Pong

Comando: PONG
Parametri: <demone> [<demone2>]


Il messaggio PONG è una risposte al messaggio ping. Se viene fornito il parametro <demone2> questo messaggio deve essere inoltrato anche a quel demone. Il parametro <demone> è il nome del demone che ha risposto al messaggio PING e ha generato questo messaggio.

Risposte numeriche:

ERR_NOORIGIN     (errore_nessuna origine)
ERR_NOSUCHSERVER (errore_server inesistente)


Esempi:>

PONG csd.bu.edu tolsun.oulu.fi ; messaggio PONG da csd.bu.edu a tolsun.oulu.fi


Indice


4.6.4 Messaggio Error

Comando: ERROR
Parametri: <messaggio d'errore>


L'uso del comando ERROR è riservato ai server per riportare ai propri operatori un errore grave oppure fatale. Esso può anche essere inviato da un server all'altro ma non deve essere accettato se proveniente da un qualsiasi normale client non meglio conosciuto. Il messaggio ERROR è usato solamente per rendere noti gli errori che si manifestano in un link server-a-server. Un messaggio ERROR viene mandato al server che si trova all'altro capo della connessione (il quale lo invia a tutti i suoi operatori connessi) come a tutti gli operatori attualmente connessi. Il messaggio non deve essere passato ad altri server da un server che lo abbia ricevuto da un server. Quando un server invia un messaggio ERROR ricevuto ai suoi operatori, il messaggio dovrebbe essere contenuto in un messaggio NOTICE, indicando che il client non è responsabile per quell'errore.

Risposte numeriche:

Nessuna.


Esempi:

ERROR :Server *.fi already exists ; messaggio ERROR all'altro server che ha causato questo errore.

NOTICE WiZ :ERROR from csd.bu.edu -- Server *.fi already exists ; stesso messaggio ERROR come sopra, ma mandato all'utente WiZ sull'altro server.

5. MESSAGGI FACOLTATIVI

Questa sezione descrive i messaggi FACOLTATIVI. Essi non sono richiesti in una implementazione server attiva del protocollo descritto in questo documento. Se il trattamento di un messaggio opzionale non è implementato, deve essere generato un apposito messaggio di errore oppure un errore generico di comando sconosciuto. Se il messaggio è destinato ad un altro server deve essere passato oltre (è richiesta una analisi elementare). Le risposte numeriche adatte allo scopo sono elencate con i messaggi descritti qui di seguito.

Indice


5.1 Messaggio Away

Comando: AWAY
Parametri: [messaggio]


Con il messaggio AWAY i client possono predisporre una riga di risposta automatica per ogni comando PRIVMSG loro indirizzato (non ad un canale sul quale essi si trovano).

La risposta automatica viene inviata dal server al client mittente del comando PRIVMSG. L'unico server a rispondere è quello sul quale il client è localmente connesso.

Il messaggio AWAY usato sia con un parametro (per predisporre un messaggio AWAY) che senza parametri (per annullare il messaggio AWAY).

Risposte numeriche:

RPL_UNAWAY (risposta_utente non in AWAY)
RPL_NOWAWAY  (risposta_utente in AWAY)


Esempi:

AWAY :Gone to lunch. Back in 5 ; predispone il messaggio away in "Gone to lunch. Back in 5' (Andato a pranzo, Di ritorno in 5 minuti).

:WiZ AWAY ; disattiva il messaggio away di WiZ.



Indice


5.2 Messaggio Rehash

Comando: REHASH
Parametri: Nessuno


Il messaggio REHASH può essere usato dall'operatore per forzare il server a rileggere e riprocessare il suo file di configurazione.

Risposte numeriche:

RPL_REHASHING    (risposta_rehashing in corso)
ERR_NOPRIVILEGES (errore_non hai i privilegi dell'operatore)


Esempi:

REHASH ; messaggio da un client, con status operatore, ad un server per chiedergli di rileggere il suo file di configurazione.



Indice


5.3 Messaggio Restart

Comando: RESTART
Parametri: Nessuno


Il comando RESTART può essere usato esclusivamente da un operatore per forzare un server ad attivare la procedura di riavvio. Questo messaggio è facoltativo in quanto potrebbe essere visto come un rischio permettere a persone non meglio qualificate di connettersi al server come operatori ed eseguire questo comando, causando (come minimo) un; interruzione del servizio. Il comando RESTART deve sempre essere processato completamente dal server al quale il client mittente è connesso, e non deve essere inoltrato ad altri server.

Risposte numeriche:

ERR_NOPRIVILEGES (errore_non hai i privilegi dell'operatore)


Esempi:

RESTART ; non sono richiesti parametri.



Indice


5.4 Messaggio Summon

Comando: SUMMON
Parametri: <utente> [<server>]


Il comando SUMMON può essere usato per inviare, ad utenti che si trovano su una macchina su cui è attivo un server IRC, un messaggio per chiedere loro di unirsi a IRC. Questo messaggio mandato solamente se il server destinazione del messaggio:

a) ha il comando SUMMON abilitato;
b) l'utente è in linea;
c) il server che processa il comando può inviare dell'output all'utente.

Se non viene dato alcun parametro <server>, il server cerca di SUMMON (convocare) l'<utente> sul server sul quale il client è connesso che viene considerato come server destinazione.

Se SUMMON non è attivo su un server, esso deve mandare la risposta numerica ERR_SUMMONDISABLED e passare oltre il messaggio. (14) Risposte numeriche:

ERR_NORECIPIENT  (errore_nessun destinatario)
ERR_FILEERROR    (errore_errore sul file)
ERR_NOLOGIN      (errore_non in linea)
ERR_NOSUCHSERVER (errore-server inesistente)
RPL_SUMMONING    (risposta_convocazione in corso)


Esempi:

SUMMON jto ; convoca l'utente jto sulla macchina del server

SUMMON jto tolsun.oulu.fi ; convoca l'utente jto sulla macchina sulla quale è attivo il server "tolsun.oulu.fi".



Indice


5.5 Comando Users, Utenti

Comando: USERS
Parametri: [<server>]


Il comando USERS invia in risposta una lista di utenti collegati ad un server in un formato simile a quello di who(1), rusers(1) e finger(1). Alcuni disabilitano questo comando dal loro server per ragioni di sicurezza. Se disabilitato, la relativa risposta numerica, indicante la disabilitazione, deve essere fornita.

Risposte numeriche:

ERR_NOSUCHSERVER  (errore_server inesistente)
ERR_FILEERROR     (errore_errore sul file)
ERR_USERSDISABLED (errore_comando USERS disabilitato)
RPL_USERSSTART    (risposta_USERS: inizio)
RPL_USERS         (risposta_USERS)
RPL_NOUSERS       (risposta_nessun utente)
RPL_ENDOFUSERS    (risposta_fine degli utenti)


Risposta se disabilitato:

ERR_USERSDISABLED (errore_comando USERS disabilitato)


Esempi:

USERS eff.org ; richiede una lista di utenti connessi su eff.org

:John UTENTI tolsun.oulu.fi ; richiesta di John per una lista di utenti connessi sul server tolsun.oulu.fi



Indice


5.6 Comando Operwall

Comando: WALLOPS
Parametri: Testo da mandare a tutti gli operatori in linea


Manda un messaggio a tutti gli operatori in linea. Dopo aver implementato il WALLOPS come un comando a disposizione del generico utente, ci si è accorti che di esso veniva spesso e volentieri fatto un uso improprio per mandare messaggi ad un sacco di gente (in maniera molto simile al WALL).

Per questo motivo sarebbe bene che la corrente implementazione del comando WALLOPS sia considerata come un esempio e che siano in futuro riconosciuti solo i server come mittenti dei WALLOPS.

Risposte numeriche:

ERR_NEEDMOREPARAMS (Errore_necessitano più parametri)


Esempi:

:csd.bu.edu WALLOPS :Connect '*.uiuc.edu 6667' from Joshua ; messaggio WALLOPS da csd.bu.edu che annuncia un messaggio CONNECT ricevuto da Joshua e messo in atto.



Indice


5.7 Messaggio Userhost

Comando: USERHOST
Parametri: <nick>{<carattere-spazio><nickname>}


Il comando USERHOST prende una lista contenente fino a 5 nick separati da un carattere spazio, e invia una lista di informazioni su ogni nick che ha trovato. La lista ha le risposte separate da uno spazio.

Risposte numeriche:

ERR_NEEDMOREPARAMS (Errore_necessitano più parametri)
RPL_USERHOST       (risposta_USERHOST)


Esempi:

USERHOST Wiz Michael Marty p ; Richiesta di informazioni USERHOST sui nick "Wiz", "Michael", "Marty" e "p"


Indice


5.8 Messaggio ISON

Comando: ISON
Parametri: <nick>{<carattere-spazio><nick>}


Il comando ISON è stato implementato per fornire un mezzo veloce ed efficiente per sapere se un dato nick è correntemente presente su IRC.

ISON prevede solo un (1) parametro: una lista di nick separati da spazi. Ogni nick della lista che sia attualmente presente, viene aggiunto dal server alla stringa contenente le risposte. Così la stringa di risposta può essere vuota (nessuno dei nick presente), oppure viene inviata una copia esatta della stringa dei parametro (tutti i nick presenti) o qualsiasi altra sottoinsieme dei nick dati nel parametro. L'unico limite sul numero di nick che può essere controllato, è dato dalla lunghezza della riga che non deve eccedere i 512 caratteri, altrimenti verrà troncata dal server. ISON è processato solamente dal server locale del client che manda il comando e non viene passato ad altri servers.

Risposte numeriche:

ERR_NEEDMOREPARAMS (Errore_necessitano più parametri)
RPL_ISON           (risposta_utente in linea)


Esempi:

ISON phone trillian WiZ jarlek Avalon Angel Monstah ; esempio di richiesta ISON per 7 nicks.


Indice


6. RISPOSTE

Quella che segue è una lista di risposte numeriche che sono generate in risposta ai comandi descritti sopra. Ogni risposta numerica è data con il suo numero, il nome e la relativa stringa esplicativa.

Indice


6.1 Risposte d'Errore

401 ERR_NOSUCHNICK "<nickname> :No such nick/channel"
Risposta inviata per indicare che il parametro nickname dato ad un comando è attualmente non in uso.

402 ERR_NOSUCHSERVER "<server name> :No such server"
Risposta inviata per indicare che il nome del server dato attualmente non esiste.

403 ERR_NOSUCHCHANNEL "<channel name> :No such channel"
Risposta inviata per indicare che il nome del canale fornito non è valido.

404 ERR_CANNOTSENDTOCHAN "<channel name> :Cannot send to channel"
Risposta inviata ad un utente il quale: a) non si trova su un canale con mode +n, oppure b) non è un operatore di canale (o non è in mode utente +v) su un canale in mode +m e sta cercando di inviare un PRIVMSG a quel canale.

405 ERR_TOOMANYCHANNELS "<channel name> :You have joined too many channels"
Risposta inviata agli utenti quando si sono aggregati al numero massimo permesso di canali, e stanno cercando di aggregarsi ad un altro canale.

406 ERR_WASNOSUCHNICK "<nickname> :There was no such nickname"
Mandata in risposta ad un WHOWAS per indicare che non ci sono informazioni nell'archivio storico per quel nick.

407 ERR_TOOMANYTARGETS "<target> :Duplicate recipients. No message\delivered"
Replica inviata in risposta ad un client che sta cercando di mandare un PRIVMSG/NOTICE usando il formato di destinazione user@host e per un user@host che ha diverse presenze al momento attuale.

409 ERR_NOORIGIN ":No origin specified"
Messaggio PING o PONG al quale manca il parametro che indica il mittente, necessario dal momento che questi comandi devono funzionare senza prefissi validi.

411 ERR_NORECIPIENT ":No recipient given (<Command>)"
412 ERR_NOTEXTTOSEND ":No text to send"
413 ERR_NOTOPLEVEL "<mask> :No toplevel domain specified"
414 ERR_WILDTOPLEVEL "<mask> :Wildcard in toplevel domain"

412 / 414 sono date da PRIVMSG per indicare che il messaggio non è stato inoltrato per qualche ragione. ERR_NOTOPLEVEL e ERR_WILDTOPLEVEL sono errori che vengono inviati come risposta quando si tenta un uso non valido di "PRIVMSG $<server>" o "PRIVMSG #<host>".

421 ERR_UNKNOWNCOMMAND "<Command> :Unknown Command"
Risposta inviata ad un client registrato per indicare che il comando proposto è sconosciuto al server.

422 ERR_NOMOTD ":MOTD File is missing"
Il server non ha potuto aprire il proprio file MOTD. [Ndr - MOTD = Message Of The Day (messaggio del giorno)]

423 ERR_NOADMININFO "<server> :No administrative info available"
Risposta inviata da un server in risposta ad un messaggio ADMIN quando c'è un errore nel reperimento delle informazioni.

424 ERR_FILEERROR ":File error doing <file op> on <file>"
Messaggio di errore generico, usato per informare il fallimento di un operazione di trattamento di file(s) durante il trattamento del messaggio.

431 ERR_NONICKNAMEGIVEN ":No nickname given"
Risposta inviata quando un parametro nickname richiesto per l'esecuzione di un comando non viene trovato

432 ERR_ERRONEUSNICKNAME "<nick> :Erroneus nickname"
Risposta inviata dopo aver ricevuto un messaggio NICK il quale contiene caratteri non compresi nel set definito per i nicks. Si veda la sezione 4.1.2 per dettagli sui nickname validi.

433 ERR_NICKNAMEINUSE "<nick> :Nickname is already in use"
Risposta inviata quando un messaggio NICK ha come risultato un tentativo di cambiare il nickname con un nickname già correntemente in uso.

436 ERR_NICKCOLLISION "<nick> :Nickname collision KILL"
Risposta inviata da un server ad un client quando scopre una collisione di nickname (registrazione di un nick che già esiste da parte di un altro server).

441 ERR_USERNOTINCHANNEL "<nick> <channel> :They aren't on that channel"
Risposta inviata dal server per indicare che l'utente destinatario del comando non è sul canale dato.

442 ERR_NOTONCHANNEL "<channel> :Yoùre not on that channel"
Risposta inviata dal server ogni volta che un client tenta un comando riferito ad un canale del quale non è membro.

443 ERR_USERONCHANNEL "<user> <channel> :is already on channel"
Risposta inviata quando un client cerca di invitare un utente nel canale nel quale già si trovano ambedue.

444 ERR_NOLOGIN "<user> :User not logged in"
Risposta inviata dopo che il comando SUMMON per un utente non stato portato a termine in quanto l'utente non era in linea.

445 ERR_SUMMONDISABLED ":SUMMON has been disabled"
Risposta inviata come risposta al comando SUMMON. Deve essere inviata da ogni server sul quale questo comando non è implementato.

446 ERR_USERSDISABLED ":USERS has been disabled"
Risposta inviata in risposta al comando USERS. Deve essere inviata da ogni server sul quale questo comando non è implementato.

451 ERR_NOTREGISTERED ":You have not registered"
Risposta inviata dal server per indicare che il client deve essere registrato prima che il server permetta ad esso di essere analizzato nei dettagli.

461 ERR_NEEDMOREPARAMS "<Command> :Not enough parameters"
Risposta inviata dal server in risposta a numerosi comandi per indicare che il client non ha fornito un numero di parametri sufficiente.

462 ERR_ALREADYREGISTRED ":You may not reregister"
Risposta inviata dal server per ogni connessione che cerchi di cambiare parte delle notizie registrate (quali password o informazioni concernenti l'utente) mediante un secondo comando USER.

463 ERR_NOPERMFORHOST ":Your host isn't among the privileged"
Risposta inviata ad un client che cerca di registrarsi su un server che non permette connessioni dalla macchina che tenta la connessione.

464 ERR_PASSWDMISMATCH ":Password incorrect"
Risposta inviata per indicare il fallimento di un tentativo di registrare una connessione per la quale è richiesta una parola d'ordine e quest'ultima non è stata fornita oppure è stata indicata in forma non corretta.

465 ERR_YOUREBANNEDCREEP ":You are banned from this server"
Risposta inviata dopo un tentativo di connessione e registrazione su un server predisposto per negarci esplicitamente la connessione.

467 ERR_KEYSET "<channel> :Channel key already set"

471 ERR_CHANNELISFULL "<channel> :Cannot join channel(+l)"

472 ERR_UNKNOWNMODE "<char> :is unknown mode char to me"

473 ERR_INVITEONLYCHAN "<channel> :Cannot join channel (+i)"

474 ERR_BANNEDFROMCHAN "<channel> :Cannot join channel (+b)"

475 ERR_BADCHANNELKEY "<channel> :Cannot join channel (+k)"

481 ERR_NOPRIVILEGES ":Permission Denied- Yoùre not an IRC operator"
Ogni comando che richiede i privilegi di operatore per essere eseguito, deve inviare questa risposta d'errore per indicare che il tentativo di eseguire il comando non ha avuto successo.

482 ERR_CHANOPRIVSNEEDED "<channel> :Yoùre not channel operator"
Ogni comando che richiede i privilegi di operatore di canale per essere eseguito (quale, ad esempio, il messaggio MODE) deve mandare questo errore se il client sta facendo un tentativo di eseguire il comando e non è un operatore sul canale specificato.

483 ERR_CANTKILLSERVER ":You cant kill a server!"
Ogni tentativo di usare il comando KILL su un server deve essere rifiutato e questo messaggio d'errore deve essere inviato direttamente al client.

491 ERR_NOOPERHOST ":No O-lines for your host"
Se un client invia un messaggio OPER ed il server non è stato configurato per permettere connessioni dalla macchina del client come operatore, deve essere inviata questa risposta d'errore.

501 ERR_UMODEUNKNOWNFLAG ":Unknown MODE flag"
Risposta inviata dal server per indicare che un messaggio MODE è stato inviato con un parametro nickname e che la modalità mode inviata non è stata riconosciuta.

502 ERR_USERSDONTMATCH ":Can't change mode for other users"
Errore Inviato a qualsiasi utente che cerchi di prender visione o cambiare gli user mode per un utente che non sia se stesso.

Indice


6.2 Risposte ai comandi.

300 RPL_NONE Replica non usata.

302 RPL_USERHOST ":[<reply>{<space><reply>}]"
Formato di replica usato da USERHOST per elencare risposte alla lista che compare nella richiesta. La stringa di replica è composta come segue:

<reply> ::= <nick>['*'] '=' <'+'|'-'><hostname>

L'asterisco '*' indica se un client è registrato come operatore. I caratteri '-' o '+' indicano rispettivamente se il client ha predisposto oppure no un messaggio di AWAY.

303 RPL_ISON ":[<nick> {<space><nick>}]"
Formato di replica usato da ISON per elencare risposte alla lista che compare nella richiesta.

301 RPL_AWAY "<nick> :<away message>"

305 RPL_UNAWAY ":You are no longer marked as being away"

306 RPL_NOWAWAY ":You have been marked as being away"
Queste repliche sono usate con il comando AWAY (se permesso). RPL_AWAY è inviata ad ogni client che invii un messaggio ad un client che abbia settato il comando AWAY. RPL_AWAY è inviata solo dal server al quale il client è connesso. Le repliche RPL_UNAWAY e RPL_NOWAWAY sono inviate quando il client annulla o predispone il messaggio AWAY.

311 RPL_WHOISUSER "<nick> <user> <host> * :<real name>"

312 RPL_WHOISSERVER "<nick> <server> :<server info>"

313 RPL_WHOISOPERATOR "<nick> :is an IRC operator"

317 RPL_WHOISIDLE "<nick> <integer> :seconds idle

318 RPL_ENDOFWHOIS "<nick> :End of /WHOIS list"

319 RPL_WHOISCHANNELS "<nick> :{[@|+]<channel><space>}"
Le repliche dalla 311 alla 313 e dalla 317 alla 319 sono tutte generate in risposta ad un messaggio WHOIS. Ammesso che sia presente un numero di parametri sufficiente, il server che risponde deve formulare o una risposta numerica tra quelle sopra elencate (nel caso che il nick richiesto venga trovato), oppure deve inviare una risposta di errore. L'asterisco '*' in RPL_WHOISUSER è in questo caso inserito come carattere e non come wild card. Per ogni insieme di risposte, solamente RPL_WHOISCHANNELS può apparire più di una volta (per liste lunghe di nomi di canali). Il caratteri '@' e '+' affiancati al nome del canale indicano se un client è operatore di quel canale o se gli è stato accordato il permesso di parlare su un canale moderato. La replica RPL_ENDOFWHOIS è usata per segnalare la fine del trattamento del messaggio WHOIS.

314 RPL_WHOWASUSER "<nick> <user> <host> * :<real name>"

369 RPL_ENDOFWHOWAS "<nick> :End of WHOWAS"
Quando risponde ad un messaggio WHOWAS, il server deve usare le repliche RPL_WHOWASUSER, RPL_WHOISSERVER o ERR_WASNOSUCHNICK per ogni nickname della lista presentata. Alla fine di ogni gruppo di risposte, deve comparire un RPL_ENDOFWHOWAS (anche se c'è stata una sola risposta e questa era un errore).

321 RPL_LISTSTART "Channel :Users Name"

322 RPL_LIST "<channel> <# visible> :<topic>"

323 RPL_LISTEND ":End of /LIST"
Le repliche RPL_LISTSTART, RPL_LIST, RPL_LISTEND segnano rispettivamente l'inizio, le vere e proprie risposte con dati, e la fine delle repliche del server al comando LIST. Se non ci sono canali disponibili sui quali ritornare notizie, devono essere inviate solo le repliche di inizio e fine.

324 RPL_CHANNELMODEIS "<channel> <mode> <mode params>"

331 RPL_NOTOPIC "<channel> :No topic is set"

332 RPL_TOPIC "<channel> :<topic>"
Quando si manda un messaggio TOPIC per definire il topic del canale, viene inviata una delle due repliche. SE il topic è definito viene Inviata la replica RPL_TOPIC, diversamente viene Inviata la replica RPL_NOTOPIC.

341 RPL_INVITING "<channel> <nick>"
Risposta inviata dal server per indicare che il tentativo INVITE è stato accettato e quindi è stato segnalato al client.

342 RPL_SUMMONING "<user> :Summoning user to IRC"
Risposta inviata da un server in risposta ad un messaggio SUMMON per indicare che sta convocando quell'utente.

351 RPL_VERSION "<version>.<debuglevel> <server> :<comments>"
Risposta inviata dal server per fornire informazioni di tipo VERSION.
Il parametro <version> è la versione del software in uso (incluse tutte le revisioni ed i livelli di aggiornamento) e il parametro <debuglevel> è usato per indicare se il server lavora in "debug mode" [Ndr - Modo diagnostico]. Il campo "comments" può contenere commenti sulla versione oppure ulteriori notizie sulla versione.

352 RPL_WHOREPLY "<channel> <user> <host> <server> <nick>\<H|G>[*][@|+] :<hopcount> <real name>"

315 RPL_ENDOFWHO "<name> :End of /WHO list"
La coppia di repliche RPL_WHOREPLY e RPL_ENDOFWHO sono usate per rispondere ad un messaggio WHO. La replica RPL_WHOREPLY è inviata solamente se è stato rintracciato un riscontro appropriato alla domanda WHO. Se viene data una lista di parametri a supporto del messaggio WHO message, deve essere inviata una replica RPL_ENDOFWHO dopo aver processato ogni voce della lista, intendendo per voce il parametro <name>.

353 RPL_NAMREPLY "<channel> :[[@|+]<nick> [[@|+]<nick>[...]]]"

366 RPL_ENDOFNAMES "<channel> :End of /NAMES list"
Per rispondere ad un messaggio NAMES, viene inviata una coppia di repliche composta da RPL_NAMREPLY e RPL_ENDOFNAMES dal server al client. Se non viene trovato alcun canale, tra quelli dati con la domanda, allora viene inviata solamente la replica RPL_ENDOFNAMES. L'eccezione si dà quando il messaggio NAMES viene inviato senza parametri e tutti i canali visibile ed i loro contenuti, sono inviati in una serie di repliche RPL_NAMEREPLY con RPL_ENDOFNAMES a segnarne la fine.

364 RPL_LINKS "<mask> <server> :<hopcount> <serverinfo>"

365 RPL_ENDOFLINKS "<mask> :End of /LINKS list"
In risposta al messaggio LINKS, un server deve inviare delle repliche usando la risposta numerica RPL_LINKS, segnando la fine della lista usando la replica RPL_ENDOFLINKS.

367 RPL_BANLIST "<channel> <banid>"

368 RPL_ENDOFBANLIST "<channel> :End of channel ban list"
Quando elenca i 'ban' attivi per un dato canale, al server si richiede di inviare una lista usando le repliche RPL_BANLIST e RPL_ENDOFBANLIST. Un messaggio separato RPL_BANLIST è inviato per ogni ban attivo. Dopo che i ban sono stati elencati (oppure se non ne era prendente nessuno) deve essere inviata la replica RPL_ENDOFBANLIST.

371 RPL_INFO ":<string>"

374 RPL_ENDOFINFO ":End of /INFO list"
Un server che risponde ad un messaggio INFO deve essere in grado di mandare tutte le sue 'informazionì in una serie di repliche RPL_INFO con la replica RPL_ENDOFINFO ad indicare la fine della serie di risposte.

375 RPL_MOTDSTART ":- <server> Message of the day - "

372 RPL_MOTD ":- <text>"

376 RPL_ENDOFMOTD ":End of /MOTD Comando"
Quando viene trovato il file MOTD in risposta al messaggio MOTD, il file viene mostrato riga per riga, ognuna delle quali non è più lunga di 80 caratteri, usando il formato di replica RPL_MOTD. Questa replica (RPL_MOTD) dovrebbe essere preceduta da RPL_MOTDSTART e seguita da RPL_ENDOFMOTD.

381 RPL_YOUREOPER ":You are now an IRC operator"
La replica RPL_YOUREOFOR è inviata ad un client che ha espletato con successo un messaggio OPER e guadagnato lo status operatore.

382 RPL_REHASHING "<config file> :Rehashing"
Se viene usata l'opzione REHASH ed un operatore invia un messaggio REHASH, a quell'operatore viene inviata la replica RPL_REHASHING.

391 RPL_TIME "<server> :<string showing server's local time>"
Quando un server risponde ad un messaggio TIME, deve inviare la risposta usando il format RPL_TIME descritto sopra. La stringa che mostra l'orario deve contenere solamente il giorno e l'orario corretti. Non sono necessari altri requisiti.

392 RPL_USERSSTART ":UserID Terminal Host"

393 RPL_USERS ":%-8s %-9s %-8s"

394 RPL_ENDOFUSERS ":End of users"

395 RPL_NOUSERS ":Nobody logged in"
Quando il messaggio USER è trattato da un server, sono usate le repliche RPL_USERSTART, RPL_USERS, RPL_ENDOFUSERS e RPL_NOUSERS. La replica RPL_USERSSTART deve essere inviata per prima, seguita o da una sequenza di RPL_USERS, oppure da una singola RPL_NOUSER. Per ultima deve essere inviata una RPL_ENDOFUSERS.

200 RPL_TRACELINK "Link <version & debug level> <destination> \ <next server>"

201 RPL_TRACECONNECTING "Try. <class> <server>"

202 RPL_TRACEHESHAKE "H.S. <class> <server>"

203 RPL_TRACEUNKNOWN "???? <class> [<client IP address in dot form>]"

204 RPL_TRACEOPERATOR "Oper <class> <nick>"

205 RPL_TRACEUSER "User <class> <nick>"

206 RPL_TRACESERVER "Serv <class> <int>S<int>C <server> \ <nick!user|*!*>@<host|server>"

208 RPL_TRACENEWTYPE "<newtype> 0 <client name>"

261 RPL_TRACELOG "File <logfile> <debug level>"
Le repliche RPL_TRACE* sono tutte inviate dal server in risposta ad un messaggio TRACE. Quante ne vengano inviate dipende dal messaggio TRACE e se questo sia stato inviato da un operatore oppure da un normale utente. Non c'è un ordine predefinito per quale replica debba essere inviata per prima. Le repliche RPL_TRACEUNKNOWN, RPL_TRACECONNECTING e RPL_TRACEHESHAKE sono tutte usate per connessioni che non sono state stabilite in maniera completa e risultano sconosciute, oppure che sono ancora in corso di connessione, oppure stanno completando il processo di 'server handshake'. La replica RPL_TRACELINK è inviata da qualsiasi server che tratta un messaggio TRACE e deve passarlo ad un altro server. La lista di RPL_TRACELINKs inviata in risposta ad un comando TRACE che attraversa la rete IRC dovrebbe riflettere l'assetto effettivo delle connessioni tra i server lungo quel percorso. La replica RPL_TRACENEWTYPE deve essere usata per ogni connessione che non rientra nelle altre categorie ma viene comunque mostrata.

211 RPL_STATSLINKINFO "<linkname> <sendq> <sent messages> \ sent bytes> <received messages> \ <received bytes> <time open>"

212 RPL_STATSCOMMANDS "<Command> <count>"

213 RPL_STATSCLINE "C <host> * <name> <port> <class>"

214 RPL_STATSNLINE "N <host> * <name> <port> <class>"

215 RPL_STATSILINE "I <host> * <host> <port> <class>"

216 RPL_STATSKLINE "K <host> * <username> <port> <class>"

218 RPL_STATSYLINE "Y <class> <ping frequency> <connect \ frequency> <max sendq>"

219 RPL_ENDOFSTATS "<stats letter> :End of /STATS report"

241 RPL_STATSLLINE "L <hostmask> * <servername> <maxdepth>"

242 RPL_STATSUPTIME ":Server Up %d days %d:%02d:%02d"

243 RPL_STATSOLINE "O <hostmask> * <name>"

244 RPL_STATSHLINE "H <hostmask> * <servername>"

221 RPL_UMODEIS"<user mode string>"
Per rispondere ad una domanda sul mode di un client viene inviata la replica RPL_UMODEIS.

251 RPL_LUSERCLIENT ":There are <integer> user and <integer> \ invisible on <integer> servers"

252 RPL_LUSEROP "<integer> :operator(s) online"

253 RPL_LUSERUNKNOWN "<integer> :unknown connection(s)"

254 RPL_LUSERCHANNELS "<integer> :channels formed"

255 RPL_LUSERME ":I have <integer> clients e <integer> \ servers"
Mentre processa un messaggio LUSERS, il server invia degli insiemi di risposte dalla 251 alla 255. Mentre risponde, il server deve inviare RPL_LUSERCLIENT e RPL_LUSERME. Le altre risposte vengono inviate solamente se viene trovato per loro un conteggio diverso da 0.

256 RPL_ADMINME "<server> :Administrative info"

257 RPL_ADMINLOC1 ":<admin info>"

258 RPL_ADMINLOC2 ":<admin info>"

259 RPL_ADMINEMAIL ":<admin info>"
Quando risponde ad un messaggio ADMIN, il server è tenuto ad usare le repliche (dalla 256 alla 259) elencate qui sopra e fornire un messaggio di testo per ogni replica. Per la replica RPL_ADMINLOC1 il server deve dare una descrizione di: città, stato e paese in cui esso si trova, seguita da informazioni sull'università e il dipartimento (RPL_ADMINLOC2) e, per ultimo, il contatto amministrativo per il server (è richiesto un indirizzo e-mail) nella risposta RPL_ADMINEMAIL. (15)

Indice


6.3 Risposte numeriche riservate.

Queste risposte numeriche non state descritte prima in quanto esse rientrano in una delle seguenti categorie:

1.       non più in uso

2.       riservate per un prevedibile uso futuro

3.       correntemente in uso ma parte di un assetto prestazionale non generale dell'attuale server IRC.

209 RPL_TRACECLASS
217 RPL_STATSQLINE
231 RPL_SERVICEINFO
232 RPL_ENDOFSERVICES
233 RPL_SERVICE
234 RPL_SERVLIST
235 RPL_SERVLISTEND
316 RPL
_WHOISCHANOP
361 RPL_KILLDONE
362 RPL_CLOSING
363 RPL_CLOSEEND
373 RPL_INFOSTART
384 RPL_MYPORTIS
466 ERR_YOUWILLBEBANNED
476 ERR_BADCHANMASK
492 ERR_NOSERVICEHOST


Indice


7. AUTENTICAZIONE DI CLIENT E SERVER

I client e i server sono soggetti allo stesso livello di autenticazione.

Per entrambi, per ogni connessione fatta al server, viene effettuato un passaggio dall'IP al nome della macchina (ed un controllo all'inverso su questo). Entrambe le connessioni sono poi soggette ad un controllo sulla parola d'ordine (se ne è stata definita una per quella connessione).

Questi controlli sono possibili su tutte le connessioni sebbene il controllo sulla parola d'ordine sia usato, in generale, solamente con i server.

Un controllo addizionale, che sta diventando sempre più usuale, è il controllo sull'username (nome dell'utente) responsabile della connessione. Trovare lo username dall'altra parte connessa comporta la connessione ad un server di autenticazione quale IDENT, come viene descritto nel documento RFC 1413.

Dato che senza parole d'ordine non è cosa facile determinare con sicurezza chi si trovi all'altro capo di una connessione, l'uso delle parole d'ordine è fortemente consigliabile nelle connessioni tra server in aggiunta a misure di altra natura quale l'uso di un ident server.

Indice


8. Implementazioni attuali

L'unica implementazione corrente di questo protocollo è IRC server versione 2.8. [Ndr - Naturalmente questa affermazione era valida al momento della pubblicazione di questo documento nel maggio 1993: già al momento di questa traduzione (giugno 1997) non lo è più]. (16) Versioni precedenti potevano implementare in parte o tutti i comandi descritti in questo documento, sostituendo molte delle risposte numeriche con messaggi NOTICE. Purtroppo, per esigenze di compatibilità verso versioni precedenti, l'implementazione di alcune parti di questo documento non è conforme al modo in cui era stata progettata. Una differenza notevole:

  • il riconoscimento che ogni LF o CR che si trovino in un qualunque punto di un messaggio marchino la fine di quel messaggio (invece di richiedere il CR-LF)

Il resto di questa sezione tratta argomenti che hanno valore soprattutto per coloro i quali desiderino implementare un server, ma alcune parti del protocollo trovano un'utile e diretta applicazione anche ai clients.

Indice


8.1 Protocollo Network: TCP - perchè esso trova qui un applicazione ottimale.

L'IRC è stato implementato sulla base del TCP, dal momento che il TCP fornisce un protocollo di rete affidabile e che ben si adatta al tipo e dimensione del sistema di scambio di messaggi cui IRC appartiene. L'uso di IP multidirezionale costituisce un alternativa, ma non è disponibile su vasta scala al momento.

Indice


8.1.1 Sostegno per Unix sockets

Dato che il campo d'azione degli Unix sockets permette operazioni ascolto/connessione, l'implementazione corrente può essere configurata in modo che essa ascolti ed accetti le connessioni sia da client che da server su un socket di dominio Unix. Queste connessioni vengono riconosciute come socket quando il nome dell'host inizia con il carattere '/'.

Quando il server fornisce delle informazioni sulle connessioni socket di dominio Unix, esso deve sostituire l'host name effettivo con il pathname, a meno che non sia richiesto proprio il nome effettivo del socket.

Indice


8.2 Analisi dei comandi

Per fornire un valido I/O (Input/Output) 'non-buffered' in rete, sia per i client che per i servers, ad ogni connessione viene assegnato un 'input buffer', dedicato, nel quale sono memorizzati i risultati delle operazioni di lettura e delle analisi di comandi più recenti. è stata stabilita per il buffer un ampiezza di 512 byte in modo che possa contenere un messaggio completo, anche se, normalmente, contiene più di un comando per volta. Il buffer dedicato viene analizzato dopo ogni operazione di lettura per verificare la presenza di comandi validi. Quando accade di dover trattare nel buffer messaggi multipli da un client, bisogna usare attenzione qualora un messaggio causi la rimozione del client.

Indice


8.3 Invio del messaggio

É cosa molto comune trovare link della rete saturi oppure macchine, alle quali si inviano dati, incapaci di inviare dati. Sebbene Unix tratti questo problema con la finestra TCP e buffer interni, il server ha spesso enormi quantità di dati da inviare (specialmente quando si forma un nuovo link server-server) ed i piccoli buffer forniti nel kernel del sistema operativo, non sono sufficienti per la lunga coda di dati in uscita. Per alleviare questo problema viene usato una "send queue" (sequenza di invio) con i dati organizzati in una struttura FIFO. [Ndr - Acronimo di First In, First Out, un modello di organizzazione di dati] Una tipica "send queue" può arrivare fino a 200 Kbyte di ampiezza in una rete IRC di grandi dimensioni, con una connessione alla rete lenta, quando un nuovo server si connette.

Nel raccogliere dati dalle sue connessioni, un server in primo luogo leggera ed analizzerà tutte le informazioni in entrata, mettendo in coda ogni dato da inviare all'esterno. Quando tutti i dati in input disponibili sono stati trattati, la sequenza di dati preparata viene inviata. Questo riduce il numero delle chiamate di sistema al comando write() (scrittura) e permette al TCP il trattamento di pacchetti più grandi.

Indice


8.4 Connessione 'Liveness'

Per controllare quando una connessione si sia persa oppure non risponda più, il server deve fare un ping per ognuna delle sue connessioni dalle quali non riceve risposte da un dato lasso di tempo.

Se una connessione non risponde in tempo, verrà chiusa seguendo le procedure appropriate. Una connessione viene fatta cadere anche nel caso in cui la sua send queue (coda di dati da inviare) cresce al di la del massimo consentito, in quanto è senz'altro meglio chiudere una connessione lenta piuttosto che il server si blocchi.

Indice


8.5 Stabilire una connessione server-client

Quando un client si connette ad un server IRC, gli viene inviato il comando MOTD (se presente) come del resto il numero di utenti e di server attualmente connessi (come avviene per il comando LUSER). Viene inoltre richiesto al server di fornire un messaggio non ambiguo che notifichi al client il suo nome e versione ed ogni altra informazione che possa sembrare appropriata.

Dopo aver espletato queste funzioni, il server deve inviare il nickname del nuovo utente e tutte le altre informazioni fornibili da lui stesso (Comando USER), come del resto le notizie reperibili in altra sede (dai server con funzione di DNS/authentication). Il server deve inviare queste informazioni con NICK seguito da USER.

Indice


8.6 Stabilire una connessione server-server

Il procedimento usato per stabilire una connessione server-server presenta aspetti particolarmente rischiosi, in quanto ci sono innumerevoli circostanze nelle quali è molto facile che vengano commessi errori - il meno rilevante dei quali sono le cosiddette "race conditions". [Ndr - Condizioni per la corretta risoluzione delle quali la variabile tempo è di importanza essenziale]

Dopo che un server ha ricevuto una connessione seguita dalla coppia di comandi PASS/SERVER, riconosciuta valida, il server dovrebbe rispondere con le sue informazioni PASS/SERVER per quella connessione, e con tutte le altre informazioni di stato che conosce, come viene descritto qui di seguito.

Quando il server che inizia la connessione riceve la coppia di comandi PASS/SERVER, anch'esso controlla che il server che risponde sia autenticato in maniera appropriata, prima di accettare la connessione con quel server.

Indice


8.6.1 Scambio di informazioni di stato fra server al momento della connessione

L'ordine delle informazioni di stato che vengono scambiate tra server è essenziale. L'ordine richiesto è il seguente:

  • tutti gli altri server conosciuti;
  • tutte le informazioni conosciute sugli utenti;
  • tutti le informazioni conosciute sui canali.

Le informazioni riguardanti i server vengono inviate mediante messaggi SERVER, le informazioni concernenti gli utenti con messaggi NICK/UTENTE/MODE/JOIN e le informazioni sui canali via messaggi MODE.

Nota: i topic dei canali *NON* vengono scambiati in questa circostanza: il comando TOPIC cancella ed aggiorna ogni informazione topic precedente, cosicchè, nella migliore delle ipotesi, i due versanti della connessione cambierebbero i topics. Passando per prime le informazioni di stato dei servers, tutte le collisioni tra server che gia esistano hanno luogo prima che possano aver luogo le collisioni sui nick dovute al fatto che un secondo server introduce un nick che gia esista su un altro). Dal momento che la rete IRC è capace di esistere solo come un grafo aciclico, potrebbe essere possibile che la rete si sia gia riconnesso in un altra locazione: il luogo dove avviene la collisione tra server indica allora il luogo dove la rete necessita di uno split.

Indice


8.7 Terminazione di connessioni server-client

Quando una connessione client chiude, viene generato un messaggio QUIT, ad interesse del client, dal server al quale il client era connesso. Non è necessario generare od usare altri messaggi.

Indice


8.8 Terminazione di connessioni server-server

Se una connessione server-server viene chiusa, che sia per un messaggio remoto SQUIT sia per cause 'naturalì, il resto della rete IRC connessa deve essere informata della sconnessione dal server che ha scoperto la chiusura che invierà una lista di SQUIT (una per ogni server che si trova oltre la sconnessione) ed una lista di QUIT (una per ogni client nella stessa posizione).

Indice


8.9 Seguire la traccia dei cambi di nickname

Tutti i server IRC devono tenere una traccia storica dei cambi recenti di nick. Questo è richiesto per permettere al server di avere una possibilità di restare in contatto con la situazione quando cambi di nick si succedano a gran velocità (race conditions) insieme con comandi che trattano i nick stessi. I comandi che devono tener traccia dei cambi di nick sono:

  • KILL (il nickname ha subito un KILL)
  • MODE (+/- o,v)
  • KICK (il nickname subisce dei KICK)

Per nessun altro comando devono essere controllati i cambi di nick.

Nei casi sopra descritti, al server è richiesto innanzi tutto di controllare l'esistenza del nick, e poi di controllarne la storia per vedere a chi appartiene al momento (sempre se qualcuno stia usando quel nickname !). Questo riduce le possibilità di trovarsi in situazioni difficoltose a causa della velocità con cui si succedono le operazioni (race conditions), ma difficoltà possono comunque verificarsi qualora il server finisca per eseguire il comando su un client sbagliato. Quando si attua il tracciamento per i cambi di nickname, come descritto qui sopra, si raccomanda che venga concesso un intervallo di tempo e che vengano ignorati casi troppo vecchi. Per avere un archivio storico ragionevole, un server dovrebbe essere in grado di tenere i nick precedenti di ogni client che conosce, qualora tutti decidessero di cambiare. l'ampiezza dell'archivio storico è comunque limitata da fattori diversi (per esempio dalla disponibilità di memoria, ecc.).

Indice


8.10 Controllo del flood dei clients

Con una grande rete IRC di server interconnessi, è molto facile per qualsiasi client connesso alla rete, di produrre un flusso continuo di messaggi che finisce non solo per floodare [Ndr - flood vale allagamento, alluvione, inondazione] la rete, ma anche per degradare il livello delle prestazioni erogate verso gli altri clients.

Piuttosto che richiedere ad ogni possibile vittima di provvedere alla propria protezione, la protezione flood è stata scritta nel server ed applicata a tutti i client tranne che ai servizi.

L'algoritmo adottato segue il seguente schema:

  • controlla se il 'message timer' segna un tempo precedente rispetto all'orario corrente (aggiornarlo, se necessario, per renderlo uguale al tempo corrente);
  • leggere ogni dato presente proveniente dal client;
  • mentre il timer è avanti di meno di dieci secondi dall'orario corrente, analizza ogni messaggio presente, e penalizza il client di 2 secondi per ogni messaggio;

il che significa, di fatto, che il client può mandare 1 messaggio ogni 2 secondi senza subire penalità.

Indice


8.11 Letture veloci per evitare blocchi

In un ambiente real-time, è essenziale che tutte le azioni dei server attendano il minor tempo possibile per essere espletate, cosicchè tutti i client siano serviti in modo equo. Ovviamente questo richiede un non-blocking I/O su tutte le operazioni read/write del network. Per le connessioni server normali, questo non sarebbe difficile, ma ci sono altre operazioni di supporto che possono causare il blocco temporaneo del server (quali la lettura dei dischi). Dove possibile, una tale attività dovrebbe essere espletata con pause di funzionamento brevi.

Indice


8.11.1 Lettura veloce dell'Hostname (DNS)

l'uso delle librerie di Berkley e di altre, per la risoluzione degli indirizzi, comportava lunghi tempi di elaborazione ed in alcuni casi le risposte arrivavano fuori tempo massimo. Per evitarlo sono state scritte delle routine alternative per la risoluzione dei DNS, predisposte per operazioni di I/O che non comportano pause di funzionamento, e da cui si raccolgono dati nell'ambito del loop di I/O principale del server.

Indice


8.11.2 Lettura veloce dell'Username (Ident)

Tutte le numerose librerie di identificazione che ci sono a disposizione, adatte ad essere incluse ed adoperate all'interno di altri programmi, hanno causato inconvenienti legati al fatto che operano in maniere sincrona, causando ritardi notevoli e frequenti. Ancora una volta la soluzione è stata quella di scrivere degli insiemi di routine capaci di cooperare in maniera efficiente con il resto del software dei server usando funzioni di I/O che non comportano pause di funzionamento.

Indice


8.12 File di configurazione

Per fornire un modo flessibile per configurare e far funzionare il programma server, è auspicabile l'impiego di un file di configurazione che contenga istruzioni per il server sugli aspetti seguenti:

  • da quali host accettare connessioni da client;
  • quali host autorizzare a connettersi come servers;
  • a quali host possa connettersi (sia in modo attivo che passivo);
  • informazioni sulla collocazione del server (per esempio: università, città/stato, azienda);
  • chi sono i responsabili per quel server ed un indirizzo e-mail dove possano essere contattati;
  • hostname e parola d ordine per quei client ai quali si desidera che sia dato accesso ai comandi riservati agli operatori.

Nello specificare gli hostname, sia il domain name (composto da caratteri alfabetici) sia l'uso della 'notazione numerica' (127.0.0.1) dovrebbero essere accettati. Deve essere possibile specificare la parola d ordine che deve essere usata / accettata per tutte le connessioni in entrata ed in uscita (malgrado le uniche connessioni in uscita siano quelle verso altri server).

La lista precedente è il minimo richiesto per un server che desideri fare una connessione con un altro server. Altre voci che potrebbero essere utili sono:

  • quali server altri server possono introdurre;
  • profondità permessa ad una ramificazione del server;
  • l'orario durante il quale i client si possono connettere.

Indice


8.12.1 Permettere ai client di connettersi

Il server dovrebbe usare qualcosa come una 'lista di controllo di accessò (contenuta nel file di configurazione oppure altrove) che venga letta all'accensione ed usata per decidere quali host possano usare i client per connettersi. Sia la dichiarazione 'deny' (negato) che 'allow' (permesso) dovrebbero essere implementate per fornire la flessibilità necessaria per il controllo di accesso degli hosts.

Indice


8.12.2 Operatori

Concedere i privilegi di operatore ad una persona che distruttiva, può avere conseguenze gravi per il buon funzionamento della rete IRC, proprio a causa dei poteri che a quella persona vengono attribuiti. Cosi l'acquisizione di questi poteri non dovrebbe essere cosa facile. La configurazione corrente richiede l'uso di due parole d ordine, sebbene unadi esse sia di solito facilmente intuibile. Se si memorizzano le parole d'ordine per gli operatori nei file di configurazione è consigliabile codificarle ed immagazzinarle in un formato criptato (per esempio usando il crypt(3) di Unix) per prevenire facili ruberie.

Indice


8.12.3 Permettere ai server di connettersi

l'interconnessione di server non è una cosa banale: una cattiva connessione può avere una grande influenza sull'efficienza di IRC: cosi ogni server dovrebbe avere una lista di server ai quali possa collegarsi, e di server che possono collegarsi con lui. Per nessuna ragione o circostanza un server dovrebbe permettere ad un arbitrario host di connettersi come server. In aggiunta alla lista di server che possono e non possono connettersi, il file di configurazione dovrebbe anche contenere la parola d ordine ed altre caratteristiche di quel link.

Indice


8.12.4 Administrivia

Per fornire delle risposte valide ed accurate al comando ADMIN (si veda la sezione 4.3.7), il server dovrebbe trovare i relativi dettagli nel file di configurazione.

Indice


8.13 Associazione ai Canali

Il server corrente permette ad ogni utente locale registrato di associarsi ad un numero massimo di 10 canali. Non c'è limite imposto ad utenti non locali, cosi che il server rimane (ragionevolmente) coerente con tutti gli altri per quanto riguarda l'associazione ai canali.

Indice


9. PROBLEMI CORRENTI

Vi sono un certo numero di problemi già rilevati su questo protocollo, che si spera possano essere risolti in un prossimo futuro riscrivendo il software. Attualmente sono in corso tentativi per trovare delle soluzioni efficienti per questi problemi.

Indice


9.1 Adattamento a situazioni di dimensioni rilevanti.

É riconosciuto ampiamente che questo protocollo non si adatta sufficientemente bene quando opera su larga scala. Il maggior problema viene dalla necessità che tutti i server sappiano di tutti gli altri server ed utenti e che le informazioni che li riguardano siano aggiornate non appena subiscono cambiamenti. É inoltre desiderabile tenere basso il numero dei servers, così che la lunghezza del percorso tra due punti sia la più breve [Ndr - Evidentemente in termini di numero di nodi intermedi] e che l'albero della rete il più ramificato possibile.

Indice


9.2 Etichette

l'attuale protocollo IRC prevede tre tipi di etichette: il nick, il none del canale ed il nome del server. Ognuno di questi tipi ha il suo ambito di validità specifico e non sono permessi duplicati all'interno di quell'ambito. Attualmente è possibile per gli utenti scegliere un'etichetta in ognuno dei tre ambiti, con la possibilità di creare collisioni.

è chiaro a molti che questo problema pone la necessità di una revisione, con un piano di nomi unici che non collidano, per canali e nicks. Altrettanto desiderabile appare una soluzione che permetta un organizzazione ad albero ciclico per la rete.

Indice


9.2.1 Nicks

L'idea dei nick su IRC è molto conveniente da usare per gli utenti che parlano gli uni con gli altri fuori da un canale, ma c'è solamente uno spazio finito per i nick come ci si poteva tranquillamente aspettare, non è inconsueto che più persone vogliano usare lo stesso nick. Se un medesimo nickname viene scelto da due persone che usano questo protocollo, o una delle due non riuscirà nel suo intento, oppure tutte e due saranno rimosse con l'uso di KILL (4.6.1).

Indice


9.2.2 Canali

l'attuale organizzazione dei canali richiede che tutti i server siano a conoscenza di tutti i canali, dei loro membri e delle loro proprietà. Otre al non perfetto adattamento alle varie condizioni dimensionali della rete, anche la questione della privacy costituisce un problema preoccupante. Una collisone di canali viene trattata come un evento inclusivo (entrambe le persone che creano un canale sono considerate membri di esso) piuttosto che come un evento esclusivo, del tipo di quello usato per risolvere la collisione fra nicks.

Indice


9.2.3 Servers

Sebbene il numero dei server sia di solito piccolo, se rapportato al numero di utenti e di canali, devono pero essere conosciuti globalmente, o separatamente uno per uno oppure compresi dentro uno schema (mask).

Indice


9.3 Algoritmi

In qualche circostanza, nel software per il server, non è stato possibile evitare gli algoritmi di ordine N^2 quali il controllo della lista di canali di un insieme di clients. Nell'attuale versione del server non sono compresi controlli sulla coerenza dei database: ogni server presume che il suo vicino sia corretto. Questo spalanca le porte a molti problemi se un server che si connette ha dei bug oppure introduce contraddizioni nella rete esistente.

A causa della mancanza di garanzia dell'unicità per le etichette interne e globali, si danno molto spesso dei problemi di coordinamento temporale (race condition). Queste condizioni hanno generalmente origine dalfattoche i messaggi impiegano del tempo per percorrere la rete IRC ed avere effetto su di essa. Anche se si cambia scegliendo un sistema unico di etichette, rimane aperto il problema inerente i comandi relativi ai canali che vengono perduti.

Indice


10. SUPPORTO E DISPONIBILITÁ

Mailing list per discussioni relative a IRC:

Protocollo futuro: ircd-three-request@eff.org
Discussione generale: operlist-request@eff.org

Implementazioni software:

cs.bu.edu:/irc
nic.funet.fi:/pub/irc
coombs.anu.edu.au:/pub/irc

Newsgroup:

alt.irc

Indice


11. CONSIDERAZIONI SULLA SICUREZZA

La sicurezza è discussa nelle sezioni 4.1, 4.1.1, 4.1.3, 5.5, e 7.

Indice


12. INDIRIZZI DEGLI AUTORI

Jarkko Oikarinen

Darren Reed

Tuirantie 17 as 9

4 Pateman Street

90500 OULU Watsonia,

Victoria 3087

FINLE

Australia

Email: jto@tolsun.oulu.fi

Email: alon@coombs.anu.edu.au


NOTE



(1) - Ci si riferisce a 4 anni trascorsi all'epoca del rilascio della RFC originale: l'età al momento attuale (1977) di IRC supera gli 8 anni.

Indice

(2) - Questo documento non descrive esattamente il protocollo IRC attualmente utilizzato (1977), ma non risultano esistere documenti successivi e più aggiornati così ampi e comprensivi.

Indice

(3) - Sembra che le attuali versioni dei server non permettano comunque l'accesso a più di 10 canali, ma esistono diverse versioni sulla stessa rete che si comportano in modo diverso.

Indice

(4) - "Socket", come "file", non si traduce in italiano, di solito. In parole molto povere, un socket è un "file di rete" cioè corrisponde ad un canale e non a dei dati su una memoria di massa, ma può essere letto e scritto come un file.

Indice

(5) - Alle tre precedenti dovrebbe essere aggiunta la seguente condizione: 4. se il canale è +l il numero massimo di utenti sul canale non deve essere raggiunto (o superato).

Indice

(6) - Dovrebbe (anzi di solito lo è ) essere data anche la RPL_NAMEREPLY.

Indice

(7) - Non sembra facile poter pensare ad una trasformazione di IRC senza nicknames.

Indice

(8) - Questi modi ormai non riflettono più quelli attualmente disponibili nelle attuali versioni usate su IRCNet.

Indice

(9) - Anche questi modi non corrispondono esattamente a quelli attualmente in uso su IRCNet: tanto per fare un esempio, non esiste più il modo "s" ed esiste il famigerato modo "r".

Indice

(10) - L'estensione del comando non dovrebbe più essere possibile con le nuove versioni del server IRCNet.

Indice

(11) - I server attuali rispondono ad un numero abbastanza maggiore di richieste, ad esempio: "/stats z", "/stats d", "/stats t".

Indice 

(12) - Attualmente anche un operatore può vedere gli utenti connessi solo al suo server. Nelle precedenti versioni, gli operatori potevano effettivamente vedere gli utenti anche su altri servers.

Indice

(13) - Il /whois si comporta in maniera leggermente differente in realtà vengono visualizzate tutte le informazioni solo se il nick richiesto è sullo stesso server di chi esegue il comando, altrimenti vengono visualizzate solo le informazioni generali (nick, hostname e servername).

Indice

(14) - Il commando SUMMON è ormai disabilitato quasi su ogni server.

Indice

(15) - Per ottenere un elenco completo delle risposte numeriche e del loro significato è opportuno fare riferimento direttamente ai sorgenti della versione del programma server alla quale si è interessati. - Se la memoria non mi abbandona, si trovano nel file "numerics.h".

Indice

(16) - La versione attuale è la 2.9 e la 2.9.2p2 quella maggiormente usata.(Giugno '97)


Articolo a cura di :
Roberto "Rob" Timmoneri rob@ircitaly.net
(Traduzione dell'RFC 1459 in lingua originale)
Ultima revisione: 25 Febbraio 2004

E' possibile copiare e diffondere, integralmente o parzialmente, gli articoli solo citando la fonte www.irchelp.it e i rispettivi autori.
IRCHelp.it e IRCItaly.net sono prodotti registrati da WWWorld S.r.l. P.IVA 02207191202 per correzioni, suggerimenti, contatti: info@ircitaly.net