 Manuali, links, fotografie e tanto altro alla portata di un semplice click!
|
|
Benvenuto Ospite
Manuali, immagini, fotografie e tanto altro a portata di un click
 |
Menu principale |
 |
 |
Cartoline virtuali |
 |
Cartolina n° 619

Sono presenti 1307 cartoline virtuali. Entra ora
 |
Giochi online |
 |
 |
News Reader |
 |
|
Network Working Group J. Oikarinen
Request for Comments: 1459 D. Reed
May 1993
Traduzione a cura di ComiSAT
Brescia, Set 2002
(http://www.comisat.it)
Protocollo Internet Relay Chat
Stato di questa memoria
Questa memo definisce un Protocollo Sperimentale per la comunita’ di
Internet. Sono richieste discussioni e suggerimenti per il miglioramento.
Per la posizione e lo stato di standardizzazione di questo protocollo si
faccia riferimento all’edizione corrente dello “IAB Official Protocol
Standards”. La distribuzione di questo documento non e’ soggetta a
limitazioni.
Sunto
Il protocollo IRC e’ stato sviluppato negli ultimi 4 anni da quando
fu implementato per la prima volta come mezzo in grado di permettere
agli utenti di una BBS di chattare tra loro. Oggi esso supporta una rete
mondiale di client e server, che sta sempre crescendo per far fronte alle
nuove esigenze. Negli ultimi 2 anni la media degli utenti connessi alla rete
IRC principale e’ cresciuta con fattore 1:10.
Il protocollo IRC e’ un protocollo basato su testo, nel quale il client piu’
semplice puo’ essere qualsiasi programma capace di connettersi al server.
Tavola dei contenuti
1. INTRODUZIONE ............................................... 4
1.1 Servers ................................................ 4
1.2 Clients ................................................ 5
1.2.1 Operatori .......................................... 5
1.3 Canali .................................................. 5
1.3.1 Operatori di canale .................................. 6
2. SPECIFICHE IRC .............................................. 7
2.1 Generalita’ ............................................. 7
2.2 Codici dei caratteri .................................... 7
2.3 Messaggi ................................................ 7
2.3.1 Formato dei messaggi in 'pseudo' BNF .............. 8
2.4 Risposte numeriche ...................................... 10
3. CONCETTI IRC ................................................ 10
3.1 Comunicazione uno-a-uno ................................. 10
3.2 Uno-a-molti ............................................. 11
3.2.1 Ad una lista ....................................... 11
3.2.2 Ad un gruppo (canale) .............................. 11
3.2.3 Ad un host/server mask ............................. 12
3.3 Uno-a-tutti ............................................. 12
Oikarinen & Reed [Page 1]
RFC 1459 Internet Relay Chat Protocol May 1993
3.3.1 Client a client ...................................... 12
3.3.2 Clients a server ..................................... 12
3.3.3 Server a server ...................................... 12
4. DETTAGLI DEI MESSAGGI ......................................... 13
4.1 Registrazione della connessione ................. ......... 13
4.1.1 Messaggio Password ................................... 14
4.1.2 Messaggio Nickname ................................... 14
4.1.3 Messaggio User ....................................... 15
4.1.4 Messaggio Server ..................................... 16
4.1.5 Messaggio Oper ....................................... 17
4.1.6 Messaggio Quit ....................................... 17
4.1.7 Messaggio Server quit ................................ 18
4.2 Operazioni di canale ...................................... 19
4.2.1 Messaggio Join ....................................... 19
4.2.2 Messaggio Part ....................................... 20
4.2.3 Messaggio Mode ....................................... 21
4.2.3.1 Modi di canale .................................. 21
4.2.3.2 Modi dell’utente ................................ 22
4.2.4 Messaggio Topic ...................................... 23
4.2.5 Messaggio Names ...................................... 24
4.2.6 Messaggio List ....................................... 24
4.2.7 Messaggio Invite ..................................... 25
4.2.8 Messaggio Kick ....................................... 25
4.3 Richieste e comandi al server ............................. 26
4.3.1 Messaggio Version .................................... 26
4.3.2 Messaggio Stats ...................................... 27
4.3.3 Messaggio Links ...................................... 28
4.3.4 Messaggio Time ....................................... 29
4.3.5 Messaggio Connect .................................... 29
4.3.6 Messaggio Trace ...................................... 30
4.3.7 Messaggio Admin ...................................... 31
4.3.8 Messaggio Info ....................................... 31
4.4 Invio di messaggi ......................................... 32
4.4.1 Messaggi privati ..................................... 32
4.4.2 Messaggi di avviso ................................... 33
4.5 Richieste basate sull’utente .............................. 33
4.5.1 Richiesta Who ........................................ 33
4.5.2 Richiesta Whois ...................................... 34
4.5.3 Messaggio Whowas ..................................... 35
4.6 Messaggi vari ............................................. 35
4.6.1 Messaggio Kill ....................................... 36
4.6.2 Messaggio Ping ....................................... 37
4.6.3 Messaggio Pong ....................................... 37
4.6.4 Messaggio Error ...................................... 38
5. MESSAGGI OPZIONALI ............................................ 38
5.1 Messaggio Away ............................................ 38
5.2 Comando Rehash ............................................ 39
5.3 Comando Restart ........................................... 39
Oikarinen & Reed [Page 2]
RFC 1459 Internet Relay Chat Protocol May 1993
5.4 Messaggio Summon........................................... 40
5.5 Messaggio Users ........................................... 40
5.6 Comando Operwall .......................................... 41
5.7 Messaggio Userhost ........................................ 42
5.8 Messaggio Ison ............................................ 42
6. RISPOSTE ...................................................... 43
6.1 Risposte d’errore ......................................... 43
6.2 Risposte di comando ....................................... 48
6.3 Risposte numeriche riservate .............................. 56
7. AUTENTICAZIONE CLIENT E SERVER ................................ 56
8. IMPLEMENTAZIONE CORRENTE ...................................... 56
8.1 Protocollo di rete: TCP ................................... 57
8.1.1 Supporto per sockets Unix ............................ 57
8.2 Analisi dei comandi ....................................... 57
8.3 Recapito dei messaggi ..................................... 57
8.4 Connessione 'Liveness' .................................... 58
8.5 Stabilire una connessione client-server ................... 58
8.6 Stabilire una connessione server-server ................... 58
8.6.1 Scambio di informazioni di stato durante la connessione 59
8.7 Chiusura di connessioni client-server ..................... 59
8.8 Chiusura di connessioni server-server ..................... 59
8.9 Tracciare i cambi di nickname ............................. 60
8.10 Controllo del flood di clients ........................... 60
8.11 Consultazioni non-blocking ............................... 61
8.11.1 Consultazioni hostname (DNS) ........................ 61
8.11.2 Consultazioni username (Ident) ...................... 61
8.12 File di configurazione ................................... 61
8.12.1 Permettere ai clients di connettersi ................ 62
8.12.2 Operatori ........................................... 62
8.12.3 Permettere ai servers di connettersi ................ 62
8.12.4 Administrivia ....................................... 63
8.13 Appartenenza ai canali ................................... 63
9. PROBLEMI ATTUALI ............................................. 63
9.1 Scalabilita’ .............................................. 63
9.2 Etichette ................................................. 63
9.2.1 Nicknames ............................................ 63
9.2.2 Canali ............................................... 64
9.2.3 Servers .............................................. 64
9.3 Algoritmi ................................................. 64
10. ATTUALE SUPPORTO E DISPONIBILITA’ ............................ 64
11. CONSIDERAZIONI SULLA SICUREZZA ............................... 65
12. INDIRIZZI DEGLI AUTORI ....................................... 65
Oikarinen & Reed [Page 3]
RFC 1459 Internet Relay Chat Protocol May 1993
1. INTRODUZIONE
Il protocollo IRC (Internet Relay Chat) e’ stato disegnato, in diversi anni,
per costituire un sistema di conferenza basata su testo. Questo documento
descrive il protocollo IRC corrente.
Il protocollo IRC e’ stato sviluppato su sistemi che utilizzano il protocollo
di rete TCP/IP, sebbene non vi siano requisiti per i quali questa sia l’unica
sfera in cui il protocollo possa operare.
IRC in se’ e’ un sistema di teleconferenza il quale (attraverso l’uso del
modello client-server) ben si adatta a girare su macchine e modelli diversi.
Una tipica configurazione prevede un singolo processo (il server) che
costituisce un punto di connessione centrale per i client (o altri server),
che effettua la distribuzione/multiplexing dei messaggi richiesti e altre
funzioni.
1.1 Servers
Il server costituisce la spina dorsale di IRC, fornendo un punto di
connessione attraverso il quale i client possono parlare l’uno con l’altro,
nonche’ un punto di connessione per altri server, determinando cosi’ una rete
IRC. La sola configurazione di rete ammessa per gli IRC server e’ quella ad
albero [vedere Fig. 1], nella quale ciascun server funge da 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 ]
:
[ ecc. ]
:
[ Fig. 1. Formato di una rete di IRC servers ]
Oikarinen & Reed [Page 4]
RFC 1459 Internet Relay Chat Protocol May 1993
1.2 Clients
Un client e’ tutto cio’ che si connette ad un server e che non e’ un server a
sua volta. Ogni client si distingue da un altro mediante un nickname univoco
di lunghezza massima nove (9) caratteri. Si vedano le regole grammaticali del
protocollo per cio’ che puo’ e non puo’ essere usato in un nickname. In
aggiunta al nickname, tutti i server devono avere le seguenti informazioni su
ogni client: il nome reale dell’host su cui il client sta girando, lo
username del client su quell’host, ed il server al quale il client e’
connesso.
1.2.1 Operatori
Per mantenere un ragionevole ordine in una rete IRC, ad una speciale
categoria di clients (operatori) e’ permesso di effettuare funzioni di
mantenimento generale della rete. Sebbene il potere dato ad un operatore
possa essere considerato ‘pericoloso’, essi sono tuttavia necessari. Gli
operatori dovrebbero essere in grado di compiere operazioni di base sulla
rete come la disconnessione e riconnessione di server per ovviare a
prolungati malfunzionamenti di routing. A tale proposito, il protocollo
discusso nel presente da’ il permesso agli operatori di effettuare solo
alcune funzioni.
Vedere le sezioni 4.1.7 (SQUIT) e 4.3.5 (CONNECT).
Un piu’ controverso potere dato agli operatori e’ la possibilita’ di
rimuovere dalla rete un utente ‘con la forza’, ad esempio gli operatori sono
in grado di chiudere la connessione tra client e server. La giustificazione a
questo e’ materia delicata, dal momento che un suo abuso e’ sia distruttivo
che irritante. Per maggiori dettagli su questo genere di azione vedere la
sezione 4.6.1 (KILL).
1.3 Canali
Un canale e’ un gruppo di uno o piu’ client avente un nome, il quale
ricevera’ tutti I messaggi indirizzati a quel canale. Il canale viene creato
implicitamente quando il primo client vi si unisce, e cessa di esistere
quando l’ultimo client lo abbandona. Durante la sua esistenza, ciascun client
si puo’ riferire al canale usandone il nome.
I nomi dei canali sono stringhe (che iniziano con un carattere ‘&’ oppure
‘#’) di lunghezza massima 200 caratteri. Oltre l’obbligo che il primo
carattere sia una ‘&’ oppure un ‘#’, l’unica restrizione alla sua
nomenclatura e’ l’impossibilita’ di avere caratteri spazio (‘ ‘), control G
(^G oppure ASCII 7), e virgole (‘,’ le quali sono usate dal protocollo come
separatori degli elementi di una lista).
Vi sono due tipi di canali ammessi da questo protocollo. Uno e’ un canale
distribuito conosciuto da tutti i server connessi alla rete.
Oikarinen & Reed [Page 5]
RFC 1459 Internet Relay Chat Protocol May 1993
Tali canali sono marcati dal primo carattere del nome, ovvero una ‘#’. Il
secondo tipo sono canali in cui solamente i client connessi al server ove il
canale esiste si possono a lui unire. Questi sono contrassegnati dal primo
carattere ‘&’. Esistono inoltre diversi modi di canale mediante i quali e’
possibile alterare le caratteristiche di un singolo canale. Vedere la sezione
4.2.3 (comando MODE) per maggiori dettagli.
Per creare un nuovo canale o prendere parte ad un canale esistente, un utente
deve UNIRSI (JOIN) al canale. Se il canale, al momento della richiesta join,
non esiste esso viene creato, e l’utente che l’ha creato diventa operatore di
quel canale. Se il canale invece era gia’ esistente, il fatto che la
richiesta di JOIN al canale venga accettata o no dipende dagli attuali modi
del canale. Ad esempio, se un canale e’ a solo-invito (+i) e’ possibile
prenderne parte solo se si e’ invitati. Il protocollo prevede che un utente
possa unirsi a svariati canali contemporaneamente, seppure un limite di dieci
(10) canali e’ raccomandato sia per utenti esperti che novizi. Vedere la
sezione 8.13 per maggiori informazioni a proposito.
Se la rete IRC si spezza a causa di un split tra due servers, il canale su
ciascun lato dello split sara’ composto dai soli clients connessi ai servers
sul rispettivo lato dello split, e possibilmente cesseranno di esistere
dall’altra parte. Quando il problema viene ripristinato, i server che si
riconnettono si comunicano a vicenda chi vedono sul canale nonche’ i modi del
canale stesso. Se il canale esiste su entrambi i lati i JOINs e i MODEs sono
interpretati in maniera inclusiva di modo che entrambe le parti della nuova
connessione siano d’accordo su quali siano i clients nel canale e l’assetto
mode dello stesso.
1.3.1 Operatori di canale
Gli operatori di canale (“chop” o “chanop”) su un dato canale sono
considerati come i ‘proprietari’ di quel canale. In riconoscimento a questo
stato, gli operatori di canale sono dotati di alcuni poteri che li abilitano
a controllare e in un certo senso curare il loro canale. Come proprietari del
canale, agli operatori del canale non sono richieste motivazioni per le loro
azioni, tuttavia qualora queste siano antisociali o in qualche modo abusive,
e’ ragionevole chiedere l’intervento di un operatore IRC, oppure lasciare il
canale e andare in un altro, oppure formarne uno proprio.
I comandi che possono essere usati esclusivamente dagli operatori di canale
sono:
KICK - Butta fuori un client dal canale
MODE - Modifica i modi del canale
INVITE - Invita un client se il canale e’ a solo-invito (+i)
TOPIC - Cambia il topic del canale quando questo e’ con mode +t
Oikarinen & Reed [Page 6]
RFC 1459 Internet Relay Chat Protocol May 1993
Un operatore di canale viene identificato dal simbolo ‘@’ a seguito del suo
nickname ogni volta che esso e’ associato al canale (ad esempio in risposta
ai comandi NAMES, WHO o WHOIS).
2. SPECIFICHE IRC
2.1 Generalita’
Il protocollo qui descritto puo’ essere usato sia nelle connessioni server-
server che nelle client-server. Vi sono tuttavia maggiori restrizioni nelle
connessioni client (considerate poco attendibili) che i quelle server.
2.2 Codici dei caratteri
Non e’ specificato nessun set di caratteri particolare. Il protocollo si basa
su un set di codici composto da otto (8) bit, formando un ottetto. Ciascun
messaggio puo’ essere composto da un qualsiasi numero di questi ottetti; ad
ogni modo il valore di qualche ottetto viene usato come codici di controllo
che funzionano come delimitatori di messaggio.
Noncurante di essere un protocollo a 8-bit, i delimitatori e le parole chiave
sono tali da rendere il protocollo maggiormente utilizzabile nelle
connessioni tramite terminale USASCII e telnet.
Avendo IRC origini scandinave, i caratteri {}| sono considerati l’equivalente
minuscolo dei caratteri, rispettivamente, []. Questo e’ argomento critico
quando dev’essere determinata l’equivalenza tra due nicknames.
2.3 Messaggi
Servers e clients si inviano l’un l’altro messaggi, i quali possono generare
una risposta oppure no. Se il messaggio contiene un comando valido, come
descritto nelle sezioni che seguono, il client dovrebbe aspettare una
risposta come specificato, ma non e’ consigliato che la aspetti all’infinito;
la comunicazione client-server e server-server e’ essenzialmente asincrona
per natura.
Ciascun messaggio IRC puo’ essere costituito da 3 parti principali: il
prefisso (facoltativo), il comando e i parametri di comando (i quali possono
essere un massimo di 15). Il prefisso, il comando e tutti i parametri sono
separati da uno (o piu’) caratteri spazio ASCII (0x20).
La presenza del prefisso e’ indicata da un singolo carattere ASCII di testa
(‘:’, 0x3b), che dev’essere il primo carattere del messaggio stesso. Non vi
devono essere vuoti (spazi) tra i due punti ed il prefisso. Il prefisso e’
usato dai servers per indicare la vera origine del messaggio.
Oikarinen & Reed [Page 7]
RFC 1459 Internet Relay Chat Protocol May 1993
Se il prefisso manca, si ipotizza che il messaggio e’ stato originato dalla
connessione dalla quale esso e’ stato ricevuto. I clients non dovrebbero
usare prefissi quando inviano un messaggio da loro stessi; se lo fanno,
l’unico prefisso valido e’ il nickname registrato associato al client. Se
l’origine identificata dal prefisso non puo’ essere trovata nel database
interno del server, o se questa e’ registrata da un collegamento diverso da
quello mediante il quale il messaggio e’ arrivato, il server deve ignorare
tacitamente il messaggio.
Il comando deve essere un comando IRC valido, oppure in numero di tre (3)
cifre rappresentato in testo ASCII.
I messaggi IRC sono sempre linee di caratteri che terminano con una coppia
CR-LF (Carriage Return - Line Feed –> Ritorno a capo), e tali messaggi non
possono eccedere i 512 caratteri in lunghezza, in cui si considerano tutti i
caratteri incluso il CR-LF. In questo modo rimangono 510 caratteri per il
comando ed i suoi parametri. Non vi sono misure per la continuazione delle
linee del messaggio. Vedere la sezione 7 per maggiori dettagli sulle
implementazioni attuali.
2.3.1 Formato dei messaggi in 'pseudo' BNF
I messaggi del protocollo devono essere estratti dal flusso contiguo degli
ottetti. La soluzione corrente consiste nel designare due caratteri, CR e LF,
come separatori di messaggio. I messaggi nulli vengono tacitamente ignorati e
questo permette l’uso della sequenza CR-LF tra i messaggi senza ulteriori
problemi.
Il messaggio estratto viene analizzato nelle sue componenti ,
e lista di parametri collegati tra loro dalle componenti
o
La rappresentazione BNF a questo e’ la seguente:
::= [':' ]
::= | [ '!' ] [ '@' ]
::= { } |
::= ' ' { ' ' }
::= [ ':' | ]
::=
::=
::= CR LF
Oikarinen & Reed [Page 8]
RFC 1459 Internet Relay Chat Protocol May 1993
NOTE:
1) consiste solamente nel carattere(i) SPAZIO (0x20).
Da notare con rilievo che le TABULAZIONI e tutti i caratteri di
controllo NON sono considerate SPAZI vuoti.
2) Una volta estratta la lista di parametri, tutti i parametri sono
equivalenti, indipendentemente dalla marcatura o . e’
solamente un trucco sintattico per permettere SPAZI nei parametri.
3) Il fatto che i CR e LF non possano apparire nelle stringhe dei parametri
e’ solo dipendente dalla modalita’ di delimitazione dei messaggi. Questo
potrebbe cambiare in futuro.
4) Il carattere NUL non ha significato speciale nella delimitazione dei
messaggi, e fondamentalmente potrebbe essere inserito in un parametro,
tuttavia questo potrebbe causare ulteriori complessita’ nella normale
gestione delle stringhe in C. Per tale motivo il suo inserimento nei
messaggi non e’ consentito.
5) L’ultimo parametro puo’ essere una stringa vuota.
6) L’uso di prefissi estesi (['!' ] ['@' ]) non deve essere
usato nelle connessioni server-server ed e’ stato progettato solo per la
comunicazione server-client in modo da fornire ai clients maggiori
informazioni utili sulla provenienza di un messaggio senza che debba
fare ulteriori richieste.
La maggior parte dei messaggi del protocollo specifica semantica e sintassi
addizionali per le stringhe dei parametri estratti, dovute dalla loro
posizione nella lista. Per esempio, molti comandi dei server assumono che il
primo parametro dopo il comando e' una lista di obbiettivi, che puo’ essere
cosi’ descritta:
::= [ "," < obiettivo > ]
::= | '@' | |
::= ('#' | '&')
::=
::= si veda l’RFC 952 [DNS:4] per dettagli sugli hostnames
consentiti
::= { | | }
::= ('#' | '$')
::=
Altri parametri sintattici sono:
::= { }
::= 'a' ... 'z' | 'A' ... 'Z'
::= '0' ... '9'
::= '-' | '[' | ']' | '' | '`' | '^' | '{' | '}'
Oikarinen & Reed [Page 9]
RFC 1459 Internet Relay Chat Protocol May 1993
::=
2.4 Risposte numeriche
La maggior parte dei messaggi inviati al server genera una risposta di
qualche genere. Le risposte piu’ comuni sono quelle numeriche, usate sia per
errori che per normali risposte. Le risposte numeriche devono essere inviate
come un messaggio costituito dal prefisso del mittente, le tre cifre
numeriche, e la destinazione della risposta. Una risposta numerica non puo’
essere originata da un client; qualsiasi messaggio del genere verra’
tacitamente ignorato dal server. In ogni altro aspetto, una risposta numerica
e’ in tutto e per tutto simile ad un normale messaggio, se si esclude il
fatto che la parola-chiave sono le tre cifre numeriche e non una stringa di
lettere. Una lista delle svariate risposte e’ riportata nella sezione 6.
3. CONCETTI DI IRC
Questa sezione si occupa di descrivere gli attuali concetti
dell’organizzazione del protocollo di IRC e di come le attuali
implementazioni inoltrino le diverse categorie dei 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 piccola rete IRC ]
3.1 Comunicazione uno-a-uno
La comunicazione su base uno-a-uno e’ generalmente effettuata dai clients,
dal momento che la maggior parte del traffico server-server non e’ il
risultato dell’esclusivo dialogo reciproco tra i servers. Per fornire ai
client una strada sicura al loro reciproco dialogo e’ necessario che ciascun
server sia in grado di inviare un messaggio nell’unica direzione esatta a
raggiungere un qualsiasi client lungo la struttura ad albero della rete. Il
percorso del messaggio determinato e’ quello piu’ breve tra qualsiasi due
punti dell’albero stesso.
Gli esempi che seguono fanno tutti riferimento alla Figura 2 sopra.
Oikarinen & Reed [Page 10]
RFC 1459 Internet Relay Chat Protocol May 1993
Esempio 1:
Un messaggio tra i clients 1 e 2 e’ visto solamente dal server A, che lo
invia direttamente al client 2.
Esempio 2:
Un messaggio tra I clients 1 e 3 e’ visto dai servers A & B, e il client 3.
Nessun altro client o server vede il messaggio.
Esempio 3:
Un messaggio tra I clients 2 e 4 e’ visto dai servers A, B, C & D, e
solamente dal client 4.
3.2 Uno-a-molti
L’obiettivo primario di IRC e’ fornire un forum nel quale sia possibile fare
conferenza in maniera facile ed efficiente (conversazione uno a molti). IRC
mette a disposizione diverse strade a questo proposito, ognuna col proprio
obiettivo.
3.2.1 Ad una lista
Il metodo meno efficiente di una conversazione uno-a-molti e’ un client che
parla ad una ‘lista’ di utenti. Come questo avviene si spiega da solo: il
client fornisce una lista di destinazioni alla quale il messaggio dev’essere
recapitato ed il server invia copie separate dello stesso a ciascuna
destinazione data. Questo metodo non e’ efficiente come quello ad-un-gruppo
poiche’ la lista di destinazioni viene spezzata (N.d.T. – dal server per
determinare ogni singola destinazione) e non viene fatto alcun controllo di
invio di messaggi doppi lungo ciascun percorso.
3.2.2 Ad un gruppo (canale)
In IRC il canale ha un ruolo equivalente a quello del gruppo multicast; la
loro esistenza e’ dinamica (viene e va a seconda che gli utenti si uniscano o
abbandonino il canale) e la conversazione in corso su un canale e’ inviata
solamente ai servers che stanno sostenendo gli utenti sul quel canale. Se vi
sono piu’ utenti dello stesso canale sullo stesso server, il messaggio viene
inviato al server una sola volta, e spedito poi a ciascun client del canale.
Quest’operazione e’ poi ripetuta per ciascuna combinazione client-server fino
a che il messaggio originale non abbia raggiunto ciascun membro del canale.
Gli esempi che seguono sono tutti riferiti alla Figura 2.
Esempio 4:
Un qualsiasi canale con 1 solo client presente. I messaggi al canale vanno
al server e da nessun’altra parte.
Oikarinen & Reed [Page 11]
RFC 1459 Internet Relay Chat Protocol May 1993
Esempio 5:
Due clients su un canale. Tutti i messaggi seguono un percorso come se
fossero messaggi privati tra i due clients esterni al canale.
Esempio 6:
Client 1, 2 e 3 su un canale. Tutti i messaggi al canale sono inviati a
tutti i clients e solo a quei servers che devono essere attraversati dal
messaggio se questo e’ privato verso un singolo client. Se il client 1
invia un messaggio, questo raggiunge il client 2 e, via server B, al
client 3.
3.2.3 Ad uno schema host/server
Per permettere agli operatori IRC di inviare messaggi ad un grande numero di
utenti, sono previsti messaggi con schema host e server. Tali messaggi
vengono spediti a quegli utenti le cui informazioni host o server
corrispondono a quelle dello schema. I messaggi vengono trasmessi solamente
alle posizioni in cui si trovano gli utenti, in maniera simile al modo usato
per i canali.
3.3 Uno-a-tutti
Il tipo di messaggio uno-a-tutti e’ meglio descrivibile come un messaggio
broadcast, inviato a tutti i clients o servers o entrambi. In un’estesa rete
di clients e servers, un singolo messaggio puo’ produrre un notevole traffico
per far si’ che possa raggiungere tutte le destinazioni desiderate.
Per taluni messaggi non vi e’ altra possibilita’ che inviarli a tutti i
servers in modo che le informazioni di stato di ciascun server siano
ragionevolmente coerenti tra loro.
3.3.1 Client-a-client
Non vi sono tipologie di messaggio per cui un singolo messaggio venga inviato
a tutti gli altri client.
3.3.2 Client-a-server
La maggior parte dei comandi che risultano in uno scambio di informazioni di
stato (come membri del canale, modi del canale, stato dell’utente, ecc.)
dev’essere inviata per default a tutti i servers, e tale operazione non puo’
essere modificata dal client.
3.3.3 Server-a-server
Benche’ la maggior parte dei messaggi tra i servers e’ distribuita a tutti
gli ‘altri’ servers, questo e’ richiesto solamente per quei messaggi che
incidono su un utente, un canale od un server. Dal momento che questi sono
Oikarinen & Reed [Page 12]
RFC 1459 Internet Relay Chat Protocol May 1993
gli elementi fondamentali di IRC, quasi tutti i messaggi originati da un
server vengono inoltrati a tutti gli altri servers connessi.
4. DETTAGLI DEI MESSAGGI
Nelle pagine che seguono viene descritto ciascun messaggio riconosciuto da un
client e server IRC. Tutti i comandi descritti in questa sezione devono
essere implementati su ogni server per questo protocollo.
Dove si riporta una risposta ERR_NOSUCHSERVER significa che il parametro
non puo’ essere trovato. Oltre a questa, il server non deve tornare
alcun’altra risposta per quel comando.
Al server al quale un client e’ connesso viene richiesto di analizzare
l’intero messaggio e di ritornare ogni errore appropriato. Se il server,
durante tale analisi, incontra un errore fatale dev’essere tornato un errore
al client e interrotta l’analisi. Errore fatale puo’ essere considerato un
comando non corretto, una destinazione in qualche modo sconosciuta al server
(nome del canale, nick o server rientrano in questa categoria), parametri
insufficienti o privilegi non corretti.
Se viene presentato un intero set di parametri, ciascuno di essi dev’essere
verificato per validita’, e dev’essere tornata una risposta appropriata al
client. Nel caso di messaggi che utilizzano liste di parametri i cui elementi
sono separati da virgole, dev’essere inviata una risposta per ciascun
elemento.
Negli esempi che seguono alcuni messaggi utilizzano il formato pieno:
:Nome COMANDO lista di parametri
Tali esempi rappresentano un messaggio inviato da “Nome” in transito tra
servers, dove e’ essenziale includere il nome del mittente originale del
messaggio in modo che i servers remoti possano tornare una risposta lungo il
percorso corretto.
4.1 Registrazione della connessione
I messaggi qui descritti vengono usati per registrare una connessione con un
server IRC e per effettuare una corretta disconnessione, sia come utente che
come server.
Un comando “PASS” non e’ necessario affinche’ la connessione di un client o
di un server sia registrata ma, se ci fosse, deve precedere il messaggio del
server o l’ultima combinazione NICK/USER. E’ fortemente raccomandato che
tutte le connessioni server abbiano una password, in modo da aumentare il
livello di sicurezza delle attuali connessioni. L’ordine raccomandato per la
registrazione di un client e’ quello che segue:
Oikarinen & Reed [Page 13]
RFC 1459 Internet Relay Chat Protocol May 1993
1. Messaggio Pass
2. Messaggio Nick
3. Messaggio User
4.1.1 Messaggio Password
Comando: PASS
Parametri:
Il comando PASS e’ usato per impostare una ‘password di connessione’. La
password puo’ e deve essere settata prima che sia fatto qualsiasi tentativo
di connessione. Attualmente questo implica che i clients inviino un comando
PASS prima dell’invio della combinazione NICK/USER, mentre i servers *devono*
inviare un comando PASS prima di qualsiasi comando SERVER. La password
fornita deve corrispondere all’unica presente nelle linee C/N (per i servers)
o I (per i clients) E’ possibile inviare comandi PASS multipli prima della
registrazione seppure solamente l’ultimo e’ quello usato per la verifica, e
non puo’ essere modificato una volta registrati.
Risposte numeriche:
ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
Esempi:
PASS passwordsegreta
4.1.2 Messaggio Nick
Comando: NICK
Parametri: [ ]
Il messaggio NICK e’ usato per dare all’utente un nickname o per modificare
quello esistente. Il parametro viene usato solamente dai servers
per indicare quanto e’ lontano un nick dal suo server principale. Una
connessione locale ha un hopcount di 0. Se fornito da un client dev’essere
ignorato.
Se un messaggio NICK arriva ad un server che e’ gia’ a conoscenza di un
identico nickname per un altro client, si verifica una collisione di
nickname. Il risultato e’ la rimozione di tutte le istanze del nickname dal
database del server, e l’invio di un comando KILL per rimuovere il nickname
dai database di tutti gli altri servers. Se il messaggio NICK che determina
la collisione e’ un cambio di nickname, il nick originale (vecchio)
dev’essere rimosso.
Se il server riceve un identico NICK da un client a lui direttamente
connesso, puo’ tornare un ERR_NICKCOLLISION al client locale, droppare il
comando NICK e non generare alcun kill.
Oikarinen & Reed [Page 14]
RFC 1459 Internet Relay Chat Protocol May 1993
Risposte numeriche:
ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME
ERR_NICKNAMEINUSE ERR_NICKCOLLISION
Esempi:
NICK Wiz ; Presenta il nuovo nick "Wiz".
:WiZ NICK Kilroy ; WiZ cambia il suo nickname in Kilroy.
4.1.3 Messaggio User
Comando: USER
Parametri:
Il messaggio USER viene usato all’inizio della connessione per specificare il
nome utente, il nome macchina, il nome server ed il nome reale del nuovo
utente. E’ anche usato nelle comunicazioni tra servers per indicare l’arrivo
su IRC di un nuovo utente, poiche’ solamente dopo che i comandi USER e NICK
sono stati ricevuti da un client un utente diviene registrato.
Tra servers USER dev’essere preceduto dal NICKname del client. Si noti che il
nome macchina e il nome server sono generalmente ignorati dal server IRC
qualora il comando USER provenga da un client a lui direttamente connesso
(per motivi di sicurezza), ma vengono invece usati nelle comunicazioni server
a server. Questo significa che un NICK dev’essere sempre inviato ad un server
remoto quando un nuovo utente viene presentato al resto della rete prima che
sia inviato lo USER.
Si noti inoltre che il parametro nome reale dev’essere l’ultimo parametro
poiche’ puo’ contenere caratteri spazio, e dev’essere preceduto da un ‘due
punti’ (‘:’) per assicurarsi che sia riconosciuto.
Dal momento che per un client e’ facile mentire sul suo nome utente mediante
il semplice uso del messaggio USER, e’ raccomandato l’uso di un “Identify
Server”. Se l’host dal quale l’utente si connette ha un server abilitato a
questo proposito, il nome utente impostato e’ quello in risposta
dall’”Identify Server”.
Risposte numeriche:
ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED
Esempi:
USER guest tolmoon tolsun :Ronnie Reagan
Oikarinen & Reed [Page 15]
RFC 1459 Internet Relay Chat Protocol May 1993
; L’utente si registra col nome utente
"guest" ed il nome reale "Ronnie Reagan".
:testnick USER guest tolmoon tolsun :Ronnie Reagan
; messaggio tra servers per il nickname al
quale appartiene il comando USER.
4.1.4 Messaggio Server
Comando: SERVER
Parametri:
Il messaggio server e’ usato per dire ad un server che l’altro capo di una
nuova connessione e’ un server. Questo messaggio e’ anche usato per passare i
dati di un server all’intera rete. Quando un nuovo server si connette alla
rete, le informazioni su di lui vengono distribuite all’intera rete.
viene utilizzato per dare a tutti i servers informazioni interne
sulle distanze di tutti i servers. Con un elenco completo di servers sarebbe
possibile ricostruire una mappa dell’intero albero di server, tuttavia schemi
di hosts impediscono che questo sia fatto.
Il messaggio SERVER dev’essere accettato solamente da (a) una connessione non
ancora registrata che sta tentando di registrarsi come server, oppure (b) una
connessione esistente ad un altro server, nel qual caso il messaggio SERVER
presenta un nuovo server a lui dietro.
La maggior parte degli errori che si verificano con il ricevimento di un
comando SERVER determinano la chiusura della connessione dall’host di
destinazione (target SERVER). Le risposte d’errore sono normalmente inviate
tramite il comando “ERROR” piuttosto che l’uso delle numeriche, poiche’ il
comando ERROR ha diverse funzioni utili che lo rendono in questo caso piu’
indicato.
Se un messaggio SERVER viene analizzato e tenta di presentare un server gia’
conosciuto al server ricevente, la connessione da cui proviene il messaggio
dev’essere cessata (secondo le corrette procedure), poiche’ si viene a
formato un duplicato di percorso ad un server e la natura aciclica
dell’albero di IRC si spezzerebbe.
Risposte numeriche:
ERR_ALREADYREGISTRED
Esempi:
Oikarinen & Reed [Page 16]
RFC 1459 Internet Relay Chat Protocol May 1993
SERVER test.oulu.fi 1 :[tolsun.oulu.fi] Experimental server
; Il nuovo server test.oulu.fi si presenta e
tenta di registrarsi. Il nome tra [] e’ il nome
della macchina su cui gira test.oulu.fi
:tolsun.oulu.fi SERVER csd.bu.edu 5 :BU Central Server
; Il server tolsun.oulu.fi e’ il nostro
collegamento per csd.bu.edu che si trova
distante 5 hops.
4.1.5 Messaggio Oper
Comando: OPER
Parametri:
Il messaggio OPER e’ usato da un normale utente per ottenere i privilegi di
operatore. La combinazione di e e’ necessaria.
Se il client che invia il comando OPER fornisce la corretta password per il
relativo utente, il server informa il resto della rete del nuovo operatore
emettendo un “MODE +o” per il nickname del client.
Il messaggio OPER e’ esclusivamente client-server.
Risposte numeriche:
ERR_NEEDMOREPARAMS RPL_YOUREOPER
ERR_NOOPERHOST ERR_PASSWDMISMATCH
Esempi:
OPER foo bar ; Tentativo di registrazione come operatore
mediante l’uso di “foo” come utente e “bar”
come password.
4.1.6 Messaggio Quit
Comando: QUIT
Parametri: []
Una sessione client viene chiusa con un messaggio quit. Il server deve
chiudere la connessione al client che invia un messaggio QUIT. Se un
“Messaggio di uscita” viene specificato, questo sara’ inviato al posto del
messaggio di default, il nickname.
Quando avviene uno split (disconnessione di due server), il messaggio quit
Oikarinen & Reed [Page 17]
RFC 1459 Internet Relay Chat Protocol May 1993
E’ composto dai nomi dei due server interessati, separati da uno spazio. Il
primo nome e’ quello del server ancora connesso e il secondo e’ quello del
server che si e’ disconnesso.
Se per qualche ragione una connessione client e’ chiusa senza che il client
invii un comando QUIT (ad esempio il client si blocca e avviene un EOF sul
socket) al server e’ richiesto di riempire il messaggio di uscita con un
messaggio che rifletta in qualche modo la natura dell’evento che ha causato
quanto successo.
Risposte numeriche:
Nessuna
Esempi:
QUIT : Vado a pranzo ; Formato del messaggio preferito
4.1.7 Messaggio SQUIT
Comando: SQUIT
Parametri:
Il messaggio SQUIT e’ necessario per informare dell’uscita di un server. 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
come parametro server, il quale chiudera’ la connessione con il server
uscente.
Questo comando e’ anche disponibile agli operatori per aiutare a mantenere
connessi in maniera ordinata una rete di servers IRC. Gli operatori possono
inoltre usare un messaggio SQUIT per una connessione ad un server remoto. In
questo caso, lo SQUIT dev’essere analizzato da ciascun server presente tra
l’operatore ed il server remoto, aggiornando la vista della rete mantenuta da
ogni server, come spiegato in seguito.
Il dovrebbe essere disposto da tutti gli operatori che eseguono
uno SQUIR per un server remoto (che non e’ connesso al server su cui sono
loro attualmente) in modo che gli altri operatori siano informati sulle
ragioni di questa operazione. Il e’ anche fornito dai servers che
possono mettervi un errore o messaggi analoghi.
Ad entrambi i servers che si trovano su ciascun lato della connessione che
viene chiusa e’ richiesto di inviare un messaggio SQUIT (a tutte le altre
loro connessioni server) per tutti i server che sono dietro quella
connessione.
Oikarinen & Reed [Page 18]
RFC 1459 Internet Relay Chat Protocol May 1993
In maniera simile, un messaggio QUIT dev’essere inviato a tutti gli altri
servers connessi al resto della rete negli interessi di tutti i clients
dietro quella connessione. Oltre a questo, a tutti i membri di un canale che
ha perso un membro a causa dello split dev’essere inviato un messaggio QUIT.
Se una connessione server termina prematuramente (ad esempio il server
sull’altro lato del collegamento cessa di esistere) il server che rileva
questa disconnessione deve informare il resto della rete che la connessione
e’ chiusa e riempire il campo commento con qualcosa di appropriato.
Risposte numeriche:
ERR_NOPRIVILEGES ERR_NOSUCHSERVER
Esempi:
SQUIT tolsun.oulu.fi :Bad Link ?
; il collegamento server tolson.oulu.fi
e’ terminato a causa di "Bad Link".
:Trillian SQUIT cm22.eng.umd.edu :Server out of control
; messaggio da Trillian per disconnettere
"cm22.eng.umd.edu" dalla rete
perche’ "Server out of control".
4.2 Operazioni sul canale
Questo gruppo di messaggi riguarda la manipolazione sui canali, le loro
proprieta’ (modi di canale) ed i loro contenuti (normalmente clients). Per la
loro implementazione sono inevitabili un certo numero di condizioni quando
clients sugli opposti della rete invino comandi che potrebbero andare in
conflitto. E’ inoltre necessario che i servers mantengano una cronologia dei
nickname per assicurare che laddove viene dato un parametro il server
verifichi la sua cronologia in caso sia stato cambiato recentemente.
4.2.1 Messaggio Join
Comando: JOIN
Parametri: {,} [{,}]
The JOIN command is used by client to start listening a specific
channel. Whether or not a client is allowed to join a channel is
checked only by the server the client is connected to; all other
servers automatically add the user to the channel when it is received
from other servers. The conditions which affect this are as follows:
Il comando JOIN e’ utilizzato da un client per unirsi ad uno specifico canale.
Il fatto che al client sia concesso l’unione al canale o meno e’ una verifica
eseguita dal server al quale il client e’ connesso; tutti gli altri servers
aggiungono automaticamente l’utente al canale quando questo e’ notificato
da altri servers. Le condizioni vincolanti sono le seguenti:
1. l’utente dev’essere invitato se il canale e’ a solo-invito;
Oikarinen & Reed [Page 19]
RFC 1459 Internet Relay Chat Protocol May 1993
2. il nick/nome utente/nome macchina dell’utente non deve
corrispondere ad un ban attivo;
3. dev’essere data la chiave corretta (password) se impostata.
Maggiori dettagli in proposito sono discussi nel comando MODE (vedere la
sezione 4.2.3 per maggiori informazioni).
Una volta che un utente si e’ unito ad un canale riceve notizia di tutti i
comandi che il suo server riceve riguardo il canale. Questo include MODE,
KICK, PART, QUIT e, chiaramente, PRIVMSG/NOTICE. Il comando JOIN necessita
che sia notificato a tutti i servers di modo che ciascuno di essi sappia dove
reperire gli utenti che sono su un canale. Questo permette una distribuzione
ottimale dei messaggi PRIVMSG/NOTICE al canale.
Se un JOIN ha successo all’utente viene inviato il topic (argomento) del
canale (per mezzo di RPL_TOPIC) e l’elenco degli utenti che sono su quel
canale (per mezzo di RPL_NAMEREPLY), il quale include anche l’utente stesso.
Risposte numeriche:
ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN
ERR_INVITEONLYCHAN ERR_BADCHANNELKEY
ERR_CHANNELISFULL ERR_BADCHANMASK
ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS
RPL_TOPIC
Esempi:
JOIN #foobar ; unione al canale #foobar.
JOIN &foo fubar ; unione al canale &foo usando la chiave
"fubar".
JOIN #foo,&bar fubar ; unione al canale #foo usando la chiave
"fubar" ed al canale &bar senza usare chiave.
JOIN #foo,#bar fubar,foobar ; unione al canale #foo usando la chiave
"fubar" ed al canale #bar usando la chiave
"foobar".
JOIN #foo,#bar ; unione ai canali #foo e #bar.
:WiZ JOIN #Twilight_zone ; Messaggio JOIN da WiZ
4.2.2 Messaggio Part
Comando: PART
Parametri: {,}
Oikarinen & Reed [Page 20]
RFC 1459 Internet Relay Chat Protocol May 1993
Il messaggio PART determina la rimozione del client mittente dalla lista
degli utenti attivi per tutti i canali dati nella stringa di parametro.
Risposte numeriche:
ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
ERR_NOTONCHANNEL
Esempi:
PART #twilight_zone ; abbandono del canale "#twilight_zone"
PART #oz-ops,&group5 ; abbandono dei canali "&group5" e
"#oz-ops".
4.2.3 Messaggio Mode
Comando: MODE
Il comando MODE e’ un comando con doppia funzione in IRC. Esso permette sia
agli utenti che ai canali di modificare i loro modi. La ragione di questa
scelta e’ che un giorno i nicknames saranno obsoleti e il loro equivalente
saranno i canali.
Quando vengono analizzati messaggi MODE e’ raccomandato che sia prima
analizzato l’intero messaggio e poi che avvengano i cambiamenti che risultano
da esso.
4.2.3.1 Modi di canale
Parametri: {[+|-]|o|p|s|i|t|n|b|v} [] []
[]
Il comando MODE esiste in modo che gli operatori di canale possano modificare
le caratteristiche del ‘loro’ canale. E’ anche richiesto che siano in grado
di farlo i servers in modo che gli operatori di canale possano essere creati.
I vari modi di canale disponibili sono i seguenti (N.d.T. – alcuni di questi
flags sono cambiati nelle implementazioni attuali):
o – da’/toglie i privilegi di operatore di canale;
p – flag di canale privato;
s – flag di canale segreto;
i – flag di canale a solo-invito;
t – flag di canale il cui topic e’ impostabile esclusivamente dagli
operatori di canale;
n – nessun messaggio al canale da clients esterni;
m – canale moderato;
l – imposta il numero massimo di utenti sul canale;
Oikarinen & Reed [Page 21]
RFC 1459 Internet Relay Chat Protocol May 1993
b – imposta uno schema di ban per tener fuori degli utenti;
v – da’/toglie la parola in un canale moderato;
k – imposta una chiave di canale (password).
Quando si utilizzano le opzioni ‘o’ e ‘b’ e’ imposta una restrizione di 3 per
Mode (N.d.T. – ogni combinazione puo’ contenere max 3 elementi).
4.2.3.2 Modi dell’utente
Parametri: {[+|-]|i|w|s|o}
I MODE dell’utente sono normalmente delle impostazioni che riguardano come il
client e’ visto dagli altri o quali messaggi ‘extra’ invia. Un comando MODE
utente puo’ essere accettato solo se il mittente del messaggio ed il nickname
dato come parametro sono gli stessi.
I modi disponibili sono i seguenti (N.d.T. - anche qui alcuni di questi flags
sono cambiati nelle implementazioni attuali):
i – imposta invisibile un utente;
s – abilita un utente a ricevere informazioni dal server;
w – l’utente riceve i wallops;
o – flag dell’operatore.
Modi aggiuntivi potranno essere disponibili in futuro.
Se un utente cerca di rendersi operatore mediante l’uso del flag ‘+o’ il
tentativo dovrebbe essere ignorato. Non vi sono tuttavia restrizione
affinche’ chiunque si ‘deoppi’ (usando “-o”).
Risposte numeriche:
ERR_NEEDMOREPARAMS RPL_CHANNELMODEIS
ERR_CHANOPRIVSNEEDED ERR_NOSUCHNICK
ERR_NOTONCHANNEL ERR_KEYSET
RPL_BANLIST RPL_ENDOFBANLIST
ERR_UNKNOWNMODE ERR_NOSUCHCHANNEL
ERR_USERSDONTMATCH RPL_UMODEIS
ERR_UMODEUNKNOWNFLAG
Esempi:
Uso dei mode di canale:
MODE #Finnish +im ; Rende #Finnish un canale moderato e a solo-
invito.
MODE #Finnish +o Kilroy ; Da’ I privilegi di 'chanop' a Kilroy sul
Oikarinen & Reed [Page 22]
RFC 1459 Internet Relay Chat Protocol May 1993
canale #Finnish.
MODE #Finnish +v Wiz ; Consente a Wiz di parlare #Finnish.
MODE #Fins -s ; Rimuove il flag ‘segreto’ dal canale #Fins.
MODE #42 +k oulu ; Imposta come chiave di canale "oulu".
MODE #eu-opers +l 10 ; Imposta 10 come numero massimo di utenti del
canale.
MODE &oulu +b ; elenca gli schemi di ban del canale.
MODE &oulu +b *!*@* ; impedisce l’unione a tutti gli utenti.
MODE &oulu +b *!*@*.edu ; impedisce l’unione a qualsiasi utente il cui
nome macchina corrisponda allo schema *.edu.
Uso dei mode dell’utente:
:MODE WiZ -w ; toglie l’abilitazione a ricevere messaggi
WALLOPS a WiZ.
:Angel MODE Angel +i ; Messaggio da Angel per rendersi invisibile.
MODE WiZ -o ; WiZ si ‘deoppa’ (si rimuove lo stato di
operatore). L’inverso a quest’azione (“MODE WiZ
+o”) non e’ permessa agli utenti poiche’
bypasserebbero il comando OPER.
4.2.4 Messaggio Topic
Comando: TOPIC
Parametri: []
Il messaggio TOPIC e’ usato per modificare o vedere il topic (argomento) di
un canale. Il topic del canale viene ritornato qualora non sia
passato alcun parametro . Se l’ e’ presente il topic di
quel canale verra’ modificato, se i modi del canale consentono tale azione.
Risposte numeriche:
ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL
RPL_NOTOPIC RPL_TOPIC
ERR_CHANOPRIVSNEEDED
Oikarinen & Reed [Page 23]
RFC 1459 Internet Relay Chat Protocol May 1993
Esempi:
:Wiz TOPIC #test :New topic ; L’utente Wiz imposta il topic.
TOPIC #test :another topic ; imposta il topic su #test come
"another topic".
TOPIC #test ; visualizza il topic di #test.
4.2.5 Messaggio Names
Comando: NAMES
Parametri: [{,}]
Usando il comando NAMES un utente puo’ listare tutti i nicknames a lui
visibili su ciascun canale che puo’ vedere. I canali che puo’ vedere sono
quelli non privati (+p) o segreti (+s) oppure quelli su cui e’ in quel
momento. Il parametro specifica quale canale(i) deve tornare
informazioni se valido. Non vi sono risposte d’errore per nomi errati di
canale.
Se non viene dato alcun parametro viene tornata una lista di tutti i
canali e dei relativi membri. Alla fine di tale lista viene riportato
l’elenco degli utenti che sono visibili ma non sono su alcun canale o sono su
un canale non visibile, i quali sono contrassegnati come se fossero sul
‘canale’ “*”.
Risposte numeriche:
RPL_NAMREPLY RPL_ENDOFNAMES
Esempi:
NAMES #twilight_zone,#42
; elenco degli utenti visibili sui canali
#twilight_zone e #42 se i canali sono
visibili al mittente del messaggio.
NAMES ; list all visible channels and users
4.2.6 Messaggio List
Comando: LIST
Parametri: [{,} []]
Il messaggio list viene usato per elencare i canali ed i loro topic. Se viene
usato il parametro verra’ visualizzato solamente lo stato di quel
canale. I canali privati sono elencati (senza topic) come canali “Prv” a meno
che il client che genera la richiesta non ne faccia parte. Allo stesso modo,
i canali segreti non sono listati a meno che il client non sia membro del
Oikarinen & Reed [Page 24]
RFC 1459 Internet Relay Chat Protocol May 1993
canale in questione.
Risposte numeriche:
ERR_NOSUCHSERVER RPL_LISTSTART
RPL_LIST RPL_LISTEND
Esempi:
LIST ; Elenca tutti i canali.
LIST #twilight_zone,#42 ; Elenca i canali #twilight_zone e #42
4.2.7 Messaggio Invite
Comando: INVITE
Parametri:
Il messaggio INVITE e’ usato per invitare un utente su un canale. Il
parametro e’ il nickname della persona da invitare sul canale
. Non vi e’ la necessita’ che il canale sul quale si invita l’utente
esista o sia un canale valido. Per invitare un utente su un canale a solo-
invito (MODE +i) il client mittente dev’essere riconosciuto come operatore di
canale per il canale dato.
Risposte numeriche:
ERR_NEEDMOREPARAMS ERR_NOSUCHNICK
ERR_NOTONCHANNEL ERR_USERONCHANNEL
ERR_CHANOPRIVSNEEDED
RPL_INVITING RPL_AWAY
Esempi:
:Angel INVITE Wiz #Dust
; L’utente Angel invita WiZ sul canale
#Dust
INVITE Wiz #Twilight_Zone
; Comando per invitare WiZ su #Twilight_zone
4.2.8 Comando Kick
Comando: KICK
Parametri: []
Il comando KICK puo’ essere usato per rimuovere forzatamente un utente da un
canale. Esso ‘lo calcia fuori’ dal canale (PART forzato).
Oikarinen & Reed [Page 25]
RFC 1459 Internet Relay Chat Protocol May 1993
Solo un operatore di canale puo’ kickare un altro utente. Ciascun server che
riceve un messaggio KICK verifica che sia valido (ad esempio che il mittente
sia al momento un operatore di canale) prima di rimuovere la vittima dal
canale.
Risposte numeriche:
ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL
ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED
ERR_NOTONCHANNEL
Esempi:
KICK &Melbourne Matthew
; Calcia fuori Matthew da &Melbourne
KICK #Finnish John :Speaking English
; Calcia fuori John da #Finnish dando
"Speaking English" come motivazione
(commento).
:WiZ KICK #Finnish John
; Messaggio KICK da WiZ per rimuovere John
dal canale #Finnish
NOTA:
E’ possibile estendere i parametri del comando KICK come segue:
{,} {,} []
4.3 Comandi e richieste al server
Il gruppo di comandi di richiesta al server e’ stato progettato per tornare
informazioni su qualsiasi server connesso alla rete. Tutti i servers connessi
devono rispondere a queste richieste e farlo in maniera corretta. Qualsiasi
risposta non valida (o mancante) dev’essere considerata un segnale di server
malfunzionante e questo dev’essere disconnesso/disabilitato il prima
possibile fino a che la situazione non si e’ risistemata.
In queste richieste dove un parametro compare come “”, significa
solitamente che puo’ essere un nickname od un server oppure un nome jolly di
qualche tipo. Per ciascun parametro, comunque, solamente una richiesta ed un
set di risposte viene generato.
4.3.1 Messaggio Version
Comando: VERSION
Parametri: []
Oikarinen & Reed [Page 26]
RFC 1459 Internet Relay Chat Protocol May 1993
Il messaggio VERSION e’ usato per richiedere la versione del programma del
server. Un parametro facoltativo viene usato per richiedere la
versione del programma del server qualora un client non vi sia direttamente
collegato.
Risposte numeriche:
ERR_NOSUCHSERVER RPL_VERSION
Esempi:
:Wiz VERSION *.se ; messaggio da Wiz per richiedere la versione
di un server che corrisponda a "*.se"
VERSION tolsun.oulu.fi ; verifica la versione del server
"tolsun.oulu.fi".
4.3.2 Messaggio Stats
Comando: STATS
Parametri: [ []]
Il messaggio stats e’ usato per richiedere le statistiche di un determinato
server. Se il parametro e’ omesso viene tornata solamente la fine
della risposta statistiche. L’implementazione di questo comando dipende
altamente dal server che risponde, nonostante il server debba essere in grado
di fornire informazioni come descritto di seguito (o in modo analogo).
Una richiesta puo’ essere data da una qualsiasi lettera la quale e’ solamente
verificata dal server di destinazione (se data come parametro )
poiche’ viene trasmessa dai servers intermedi, ignorata e inalterata. Le
richieste riportate a seguire sono quelle trovate nella corrente
implementazione di IRC e ricoprono una grande porzione delle informazioni di
base del server. Sebbene queste possono non essere supportate nello stesso
modo in versioni diverse, tutti i servers devono essere in grado di fornire
una risposta valida ad una richiesta STATS che consiste in una risposta nel
formato attualmente in uso che assolva il quesito.
Le richieste attualmente supportate sono:
c - ritorna una lista di servers al quale il server si puo’
connettere o dai quali permette connessioni;
h - ritorna una lista di servers che sono forzatamente elementi
periferici dell’albero della rete o che possono fungere da hubs;
i - ritorna una lista di hosts per i quali il server permette ad un
client di connettervisi;
k - ritorna una lista di combinazioni username/hostname bannati per
quel server;
l – ritorna una lista di connessioni del server,
Oikarinen & Reed [Page 27]
RFC 1459 Internet Relay Chat Protocol May 1993
riportando da quanto tempo e’ stata stabilita ciascuna
connessione, il traffico in bytes su ciascuna di esse ed i
messaggi per ciascuna direzione;
m - ritorna una lista di comandi supportati dal server e il numero di
utilizzi per ciascuno di essi qualora questo non sia zero;
o - ritorna una lista di hosts dai quali un normale client puo’
diventare operatore;
y - mostra la linea Y (classe) del file di configurazione del server;
u – ritorna una stringa indicante da quanto tempo il server e’
connesso.
(N.d.T. – le richieste stats attualmente supportate sono: a, c, d, h, i, k,
l, m, o, r, t, u, y, z)
Risposte numeriche:
ERR_NOSUCHSERVER
RPL_STATSCLINE RPL_STATSNLINE
RPL_STATSILINE RPL_STATSKLINE
RPL_STATSQLINE RPL_STATSLLINE
RPL_STATSLINKINFO RPL_STATSUPTIME
RPL_STATSCOMMANDS RPL_STATSOLINE
RPL_STATSHLINE RPL_ENDOFSTATS
Esempi:
STATS m ; ritorna l’uso dei comandi sul server al quale
si e’ connessi.
:Wiz STATS c eff.org ; richiesta da Wiz di informazioni C/N line sul
server eff.org.
4.3.3 Messaggio Links
Comando: LINKS
Parametri: [[] ]
Con LINKS un utente puo’ listare tutti i servers conosciuti al server che
risponde alla richiesta. L’elenco di servers tornato deve corrispondere con
lo schema e, se questo non e’ specificato, viene tornata la lista completa.
Se viene dato in aggiunta a , il comando
LINKS e’ inoltrato al primo server trovato che corrisponda a quel nome (se
esiste) e quel server deve quindi rispondere alla richiesta.
Risposte numeriche:
ERR_NOSUCHSERVER
RPL_LINKS RPL_ENDOFLINKS
Esempi:
Oikarinen & Reed [Page 28]
RFC 1459 Internet Relay Chat Protocol May 1993
LINKS *.au ; elenca tutti i servers il cui nome corrisponda
allo schema *.au;
:WiZ LINKS *.bu.edu *.edu
; messaggio LINKS da WiZ al primo server che
corrisponda a *.edu per un elenco di server che
corrispondono a *.bu.edu.
4.3.4 Messaggio Time
Comando: TIME
Parametri: []
Il messaggio time e’ usato per richiedere l’ora locale al server specificato.
Se il parametro server non e’ dato rispondera’ alla richiesta il server che
gestisce il comando.
Risposte numeriche:
ERR_NOSUCHSERVER RPL_TIME
Esempi:
TIME tolsun.oulu.fi ; verifica l’ora sul server
"tolson.oulu.fi".
Angel TIME *.au ; l’utente Angel verifica l’ora su un server
che corrisponda allo schema "*.au".
4.3.5 Messaggio Connect
Comando: CONNECT
Parametri: [ []]
Il comando CONNECT puo’ essere usato per forzare un server a provare di
stabilire una nuova connessione con un altro server immediatamente. CONNECT
e’ un comando privilegiato ed e’ disponibile solamente agli operatori IRC. Se
viene specificato un server remoto il tentativo CONNECT e’ fatto da quel
server al mediante la .
Risposte numeriche:
ERR_NOSUCHSERVER ERR_NOPRIVILEGES
ERR_NEEDMOREPARAMS
Esempi:
CONNECT tolsun.oulu.fi
; Tentativo di connettere un server a
tolsun.oulu.fi
Oikarinen & Reed [Page 29]
RFC 1459 Internet Relay Chat Protocol May 1993
:WiZ CONNECT eff.org 6667 csd.bu.edu
; Tentativo di CONNECT da WiZ per connettere i
servers eff.org e csd.bu.edu sulla porta 6667.
4.3.6 Messaggio Trace
Comando: TRACE
Parametri: []
Il comando TRACE e’ usato per trovare il percorso ad un determinato server.
Ogni server che processa questo messaggio deve informare il server mittente
su se stesso inviando una risposta che indichi che e’ un collegamento di
passaggio, creando cosi’ una catena di risposte analoga a quella ottenuta
usando “traceroute”. Dopo aver inviato tale risposta, deve poi spedire il
messaggio TRACE al server successivo fino a che non sia stato raggiunto il
server di destinazione. Se il parametro viene omesso, e’
raccomandato che il comando TRACE invii un messaggio al mittente indicando a
quali servers il server corrente e’ direttamente connesso.
Se la destinazione data da “” e’ un server corrente, al server di
destinazione e’ richiesto di riportare tutti i servers e gli utenti che gli
sono connessi, anche se la visione degli utenti presenti e’ riservata ai soli
operatori. Se la destinazione data da e’ un nickname, viene data una
sola risposta per quel nickname.
Risposte numeriche:
ERR_NOSUCHSERVER
Se il messaggio TRACE e’ destinato ad un altro server, tutti i server
intermedi devono ritornare una risposta RPL_TRACELINK per indicare che il
TRACE e’ passato di li’ e quale sia il suo prossimo passaggio.
RPL_TRACELINK
Una risposta TRACE puo’ essere composta da qualsiasi numero delle seguenti
risposte numeriche.
RPL_TRACECONNECTING RPL_TRACEHANDSHAKE
RPL_TRACEUNKNOWN RPL_TRACEOPERATOR
RPL_TRACEUSER RPL_TRACESERVER
RPL_TRACESERVICE RPL_TRACENEWTYPE
RPL_TRACECLASS
Esempi:
TRACE *.oulu.fi ; TRACE ad un server che corrisponda a *.oulu.fi
Oikarinen & Reed [Page 30]
RFC 1459 Internet Relay Chat Protocol May 1993
:WiZ TRACE AngelDust ; TRACE richiesto da WiZ al nick AngelDust
4.3.7 Comando Admin
Comando: ADMIN
Parametri: []
Il messaggio ADMIN e’ usato per trovare il nome dell’amministratore di un
dato server, o del server corrente se il parametro e’ omesso.
Ciascun server deve avere la capacita’ di inoltrare messaggi ADMIN agli altri
servers.
Risposte numeriche:
ERR_NOSUCHSERVER
RPL_ADMINME RPL_ADMINLOC1
RPL_ADMINLOC2 RPL_ADMINEMAIL
Esempi:
ADMIN tolsun.oulu.fi ; richiesta di una risposta ADMIN da
tolsun.oulu.fi
:WiZ ADMIN *.edu ; richiesta ADMIN da WiZ per il primo server
che corrisponda allo schema *.edu.
4.3.8 Info command
Comando: INFO
Parametri: []
Il comando INFO e’ richiesto per avere informazioni sul server: la versione,
quando e’ stato compilato, il livello di aggiornamento, quando e’ stato
avviato, e qualsiasi altra informazione che possa essere considerata
rilevante.
Risposte numeriche:
ERR_NOSUCHSERVER
RPL_INFO RPL_ENDOFINFO
Esempi:
INFO csd.bu.edu ; richiesta di risposta INFO da csd.bu.edu
:Avalon INFO *.fi ; richiesta INFO da Avalon per il primo
server che corrisponda a *.fi.
Oikarinen & Reed [Page 31]
RFC 1459 Internet Relay Chat Protocol May 1993
INFO Angel ; richiesta INFO al server al quale Angel e’
connesso.
4.4 Invio di messaggi
Lo scopo principale del protocollo IRC e’ fornire una base per la reciproca
comunicazione tra clients. PRIVMSG e NOTICE sono gli unici messaggi
disponibili che al momento si occupano di recapitare un messaggio di testo
da un client ad un altro – il resto e’ cio’ che lo rende possibile e che
tenta di garantire che questo avvenga in maniera affidabile e strutturata.
4.4.1 Messaggio Private
Comando: PRIVMSG
Parametri: {,}
PRIVMSG e’ usato per inviare messaggi privati tra due utenti. e’
il nickname del destinatario del messaggio. puo’ anche essere una
lista di nomi o canali separati da virgole.
Il parametro puo’ anche essere uno schema di macchine (#mask) o
uno schema di server ($mask). In entrambi i casi il server inviera’ il
PRIVMSG solamente a coloro che hanno un server o un host che corrisponde allo
schema. Lo schema deve avere almeno 1 (un) “.” e nessun jolly dopo l’ultimo
“.”. Questo requisito esiste per evitare l’invio di messaggi a “#*” o “$*”,
che comporterebbe l’inoltro a tutti gli utenti; per esperienza, questo e’
abusato piu’ che responsabilmente e propriamente usato. I jolly sono i
caratteri ‘*’ e ‘?’. Tale estensione del comando PRIVMSG e’ disponibile
solamente agli operatori.
Risposte numeriche:
ERR_NORECIPIENT ERR_NOTEXTTOSEND
ERR_CANNOTSENDTOCHAN ERR_NOTOPLEVEL
ERR_WILDTOPLEVEL ERR_TOOMANYTARGETS
ERR_NOSUCHNICK
RPL_AWAY
Esempi:
:Angel PRIVMSG Wiz :Hello are you receiving this message ?
; Messaggio da Angel a Wiz.
PRIVMSG Angel :yes I'm receiving it !receiving it !'u>(768u+1n) .br
; Messaggio ad Angel.
PRIVMSG jto@tolsun.oulu.fi :Hello !
; Messaggio ad un client con username "jto"
Oikarinen & Reed [Page 32]
RFC 1459 Internet Relay Chat Protocol May 1993
sul server un.oulu.fi.
PRIVMSG $*.fi :Server tolsun.oulu.fi rebooting.
; Messaggio a chiunque sia su un server che
corrisponda a *.fi.
PRIVMSG #*.edu :NSFNet is undergoing work, expect interruptions
; Messaggio a tutti gli utenti che provengono da
un host il cui nome corrisponda allo schema
*.edu.
4.4.2 Messaggio Notice
Comando: NOTICE
Parametri:
Il messaggio NOTICE e’ usato in maniera analoga al PRIVMSG. La differenza tra
NOTICE e PRIVMSG e’ che le risposte automatiche non devono essere inviate
come risposta ad un messaggio NOTICE. Questa regola si applica anche per i
servers – essi non devono inviare nessuna risposta di errore al client al
ricevimento di un notice. Il motivo di questa regola e’ evitare loops tra un
client che automaticamente invia qualcosa in risposta a qualcosa che ha
ricevuto. Questo e’ infatti generalmente usato dagli automi (clients che
dispongono di un programma interattivo i di AI che controlla le loro azioni –
N.d.T. – i ro-bots) che inviano sempre delle risposte, per paura che essi
finiscano in un loop con un altro automa.
Vedere PRIVMSG per maggiori dettagli sulle risposte e per gli esempi.
4.5 Richieste basate sull’utente
Le richieste sull’utente sono un gruppo di comandi che concerne
fondamentalmente la ricerca di dettagli su un particolare utente o gruppo di
utenti. Quando si utilizzano jolly con un qualsiasi comando di questi, se
corrisponde, verranno ritornate informazioni sugli utenti ‘visibili’ al
richiedente. La visibilita’ di un utente e’ determinata da una combinazione
dei modi dell’utente e il comune set di canale su cui si trovano utente e
richiedente.
4.5.1 Richiesta Who
Comando: WHO
Parametri: [ []]
Il messaggio WHO e’ usato da un client per generare una richiesta che torni
un elenco di informazioni che ‘corrispondano’ al parametro dato dal
client. In assenza del parametro , tutti i visibili (utenti che non
sono invisibili (modo utente +i) e coloro che non si trovano su canali ove e’
il client richiedente) sono elencati. Lo stesso risultato puo’ essere
raggiunto usando un di “0” o qualsiasi jolly che ritornera’ ogni
Oikarinen & Reed [Page 33]
RFC 1459 Internet Relay Chat Protocol May 1993
voce possibile.
Il passato da WHO e’ confrontato con la macchina, il server, il nome
reale e il nickname degli utenti se il canale non viene trovato.
Se viene passato il parametro “o” vengono tornati solamente gli operatori che
corrispondono allo schema di nomi fornito.
Risposte numeriche:
ERR_NOSUCHSERVER
RPL_WHOREPLY RPL_ENDOFWHO
Esempi:
WHO *.fi ; Elenca tutti gli utenti che corrispondono a
"*.fi".
WHO jto* o ; Elenca tutti gli utenti che corrispondono a
"jto*" se questi sono operatori.
4.5.2 Richiesta Whois
Comando: WHOIS
Parametri: [] [,[,...]]
Questo messaggio e’ utilizzato per richiedere informazioni su un particolare
utente. Il server rispondera’ a questo messaggio con diversi messaggi
numerici che indicano stati differenti per ciascun utente che corrisponde
allo schema di nick (se il richiedente li vede). Se nello
non vi sono jolly viene fornita qualsiasi informazione sul nick visibile al
richiedente. Puo’ essere data una lista di nickname con elementi separati da
virgole (‘,’).
L’ultima versione invia la richiesta ad uno specificato server. E’ utile se
si vuole sapere da quanto tempo l’utente in questione e’ inattivo dato che il
server locale (ad esempio il server sul quale l’utente e’ direttamente
connesso) e’ l’unico in grado di sapere tale informazione, mentre qualsiasi
altro dato e’ globalmente conosciuto.
Risposte numeriche:
ERR_NOSUCHSERVER ERR_NONICKNAMEGIVEN
RPL_WHOISUSER RPL_WHOISCHANNELS
RPL_WHOISCHANNELS RPL_WHOISSERVER
RPL_AWAY RPL_WHOISOPERATOR
RPL_WHOISIDLE ERR_NOSUCHNICK
RPL_ENDOFWHOIS
Oikarinen & Reed [Page 34]
RFC 1459 Internet Relay Chat Protocol May 1993
Esempi:
WHOIS wiz ; ritorna le informazioni utente disponibili
per il nick WiZ
WHOIS eff.org trillian ; domanda al server eff.org le informazioni
sull’utente trillian
4.5.3 Richiesta Whowas
Comando: WHOWAS
Parametri: [ []]
Whowas richiede informazioni su un nickname non piu’ esistente. Questo puo’
avvenire perche’ un nickname e’ stato modificato oppure perche’ l’utente ha
abbandonato IRC. Come risposta a questa richiesta il server ricerca nella sua
cronologia dei nicknames qualsiasi nick lessicalmente uguale (non si possono
usare carattere jolly, in questo caso). La cronologia viene sfogliata a
ritroso, ritornando quindi la prima voce piu’ recente. Se vi sono voci
multiple verranno ritornate tante risposte quante (oppure tutte se
non e’ il parametro non e’ specificato). Se viene passato un numero
non positivo come viene fatta una ricerca completa.
Risposte numeriche:
ERR_NONICKNAMEGIVEN ERR_WASNOSUCHNICK
RPL_WHOWASUSER RPL_WHOISSERVER
RPL_ENDOFWHOWAS
Esempi:
WHOWAS Wiz ; ritorna tutte le informazioni presenti
nella cronologia dei nick per il nick "WiZ";
WHOWAS Mermaid 9 ; ritorna le 9 voci piu’ recenti nella
cronologia dei nick per "Mermaid";
WHOWAS Trillian 1 *.edu ; ritorna la voce piu’ recente per
"Trillian" nella cronologia del primo server
che corrisponde allo schema "*.edu".
4.6 Messaggi vari
I messaggi di questa categoria non rientrano in nessuna delle categorie
precedenti ma ad ogni modo fanno parte e sono richiesti dal protocollo.
Oikarinen & Reed [Page 35]
RFC 1459 Internet Relay Chat Protocol May 1993
4.6.1 Messaggio Kill
Comando: KILL
Parametri:
Il messaggio KILL e’ usato per cessare una connessione client-server dal
server che detiene l’attuale connessione. KILL e’ usato dai servers quando
questi incontrano una voce doppia nella lista dei nicknames validi ed e’
usato per rimuovere entrambe le voci. E’ anche disponibile agli operatori.
I clients che dispongono di algoritmi di riconnessione automatica fanno
effettivamente perdere di significato questo comando, dal momento che la
disconnessione avviene solo per un attimo. Esso spezza tuttavia il flusso di
dati e puo’ essere usato per bloccare grandi quantita’ di abusi; qualsiasi
utente puo’ richiedere di ricevere i messaggi KILL generati da altri per
tenere ‘sott’occhio’ su eventuali possibili problematiche.
In un’arena ove e’ richiesto che i nicknames siano sempre universalmente
univoci, i messaggi KILL sono inviati qualora dei ‘duplicati’ vengano
rilevati (che puo’ essere un tentativo di registrare due utenti con lo stesso
nickname) nella speranza che entrambi scompaiano e sono 1 riappaia.
Il commento dato deve riflettere la corrente motivazione del KILL. Per i
KILLs generati da un server esso e’ normalmente costituito dai dettagli
riguardanti l’origine dei due nicknames in conflitto. Per gli utenti invece
e’ lasciato a loro fornire un’adeguata motivazione che soddisfi chi li vede.
Per prevenire/scoraggiare la generazione di falsi KILLs che nascondono
l’identita’ del KILLer, il commento mostra anche un ‘percorso del kill’ che
viene aggiornato da ciascun server da cui passa, mediante l’aggiunta del
proprio nome al percorso.
Risposte numeriche:
ERR_NOPRIVILEGES ERR_NEEDMOREPARAMS
ERR_NOSUCHNICK ERR_CANTKILLSERVER
KILL David (csd.bu.edu <- tolsun.oulu.fi)
; Collisione di nickname tra csd.bu.edu
e tolson.oulu.fi
NOTA:
E’ raccomandato che solamente gli operatori siano in grado di generare kill
verso altri utenti. In un mondo ideale gli operatori non dovrebbero nemmeno
averne la necessita’ e l’assoluzione di questo compito verrebbe lasciata ai
servers.
Oikarinen & Reed [Page 36]
RFC 1459 Internet Relay Chat Protocol May 1993
4.6.2 Messaggio Ping
Comando: PING
Parametri: []
Il messaggio PING e’ usato per rilevare la presenza di un client attivo
all’altro lato della connessione. Un messaggio PING viene inviato ad
intervalli regolari se non e’ rilevata alcun altra attivita’ proveniente
dalla connessione. Se una connessione non risponde ad un comando PING entro
un tempo determinato questa viene terminata.
Qualsiasi client che riceve un messaggio PING deve rispondere al
(server mittente del messaggio PING) il prima possibile con un messaggio PONG
appropriato per indicare che c’e’ ed e’ connesso. I servers non dovrebbero
rispondere ai comandi PING ma contare sui PINGs provenienti dall’altro capo
della connessione che indicano che la connessione e’ attiva. Se viene
specificato il parametro il messaggio PING viene a lui inoltrato.
Risposte numeriche:
ERR_NOORIGIN ERR_NOSUCHSERVER
Esempi:
PING tolsun.oulu.fi ; un server invia un messaggio PING ad un
altro server per indicare che e’ ancora
connesso.
PING WiZ ; Messaggio PING inviato a WiZ.
4.6.3 Messaggio Pong
Comando: PONG
Parametri: []
Il messaggio PONG e’ la risposta di un messaggio ping. Se il parametro
e’ dato questo messaggio dev’essere inoltrato al daemon dato. Il
parametro e’ il nome del daemon che ha risposto al messaggio PING e
che ha generato questo messaggio.
Risposte numeriche:
ERR_NOORIGIN ERR_NOSUCHSERVER
Esempi:
PONG csd.bu.edu tolsun.oulu.fi
; Messaggio PONG da csd.bu.edu a
tolsun.oulu.fi
Oikarinen & Reed [Page 37]
RFC 1459 Internet Relay Chat Protocol May 1993
4.6.4 Messaggio Error
Comando: ERROR
Parametri:
Il comando ERROR e’ utilizzato dai servers per riportare ai suoi operatori un
errore serio o fatale. Puo’ anche essere inviato da un server ad un altro ma
non dev’essere accettato da un qualsiasi normale client sconosciuto.
Un messaggio ERROR e’ usato per riportare errori che avvengono solamente in
un collegamento server-a-server. Un messaggio ERROR e’ inviato da un server
all’altro capo della connessione (che lo invia a tutti i suoi operatori
connessi) e a tutti gli operatori al momento collegati. Esso non dev’essere
passato ad altri server da un server se questi lo ha ricevuto da un server.
Quando un server invia ai suoi operatori un messaggio ERROR ricevuto, il
messaggio dovrebbe essere incapsulato dentro un messaggio NOTICE, indicando
che il client non e’ responsabile per l’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
inviato all’utente WiZ sull’altro server.
5. MESSAGGI OPZIONALI
Questa sezione illustra i messaggi OPZIONALI. Questi non sono richiesti in
una implementazione server del protocollo qui descritto. In assenza di option
un messaggio di risposta d’errore dev’essere generato o un errore di comando
sconosciuto. Se il messaggio e’ destinato ad un altro server questo
dev’essere passato avanti (e’ richiesta solo un’analisi elementare). Le
risposte numeriche stabilite per questi messaggi sono riportate di seguito
con gli stessi.
5.1 Messaggio Away
Comando: AWAY
Parametri: [messaggio]
Oikarinen & Reed [Page 38]
RFC 1459 Internet Relay Chat Protocol May 1993
Con il messaggio AWAY I clients possono impostare una stringa di risposta
automatica per ogni comando PRIVMSG diretto a loro (e non al canale su si
trovano). Tale risposta viene inviata dal server al client mittente del
comando PRIVMSG. Il solo server che risponde e’ quello al quale il client
mittente e’ connesso.
Il messaggio AWAY e’ usato o con un parametro (per impostare un messaggio di
AWAY) oppure senza (per rimuovere il messaggio AWAY).
Risposte numeriche:
RPL_UNAWAY RPL_NOWAWAY
Esempi:
AWAY :Gone to lunch. Back in 5
; imposta il messaggio di away come "Gone to
lunch. Back in 5".
:WiZ AWAY ; toglie WiZ dallo stato di away.
5.2 Messaggio Rehash
Comando: REHASH
Parametri: Nessuno
Il messaggio rehash puo’ essere usato dall’operatore per forzare il server a
ri-leggere e processare il suo file di configurazione.
Risposte numeriche:
RPL_REHASHING ERR_NOPRIVILEGES
Esempi:
REHASH ; messaggio da un client con stato di operatore
al server per richiedere la rilettura del suo
file di configurazione.
5.3 Messaggio Restart
Comando: RESTART
Parametri: Nessuno
Il messaggio restart puo’ essere usato esclusivamente da un operatore per
forzare il riavvio del server. Questo messaggio e’ facoltativo dal momento
che puo’ essere visto come un rischio permettere arbitrariamente ad una
persona di connettersi ad un server come operatore ed eseguire questo
comando, dato che si causerebbe (come minimo) una interruzione del servizio.
Oikarinen & Reed [Page 39]
RFC 1459 Internet Relay Chat Protocol May 1993
Il comando RESTART deve sempre essere processato a pieno dal server al quale
il client mittente e’ connesso e non deve essere passato ad altri servers
connessi.
Risposte numeriche:
ERR_NOPRIVILEGES
Esempi:
RESTART ; nessun parametro richiesto.
5.4 Messaggio Summon
Comando: SUMMON
Parametri: []
Il comando SUMMON puo’ essere usato per dare agli utenti, che si trovano su
un host ove gira un server IRC, un messaggio che gli richiede cortesemente di
unirsi ad IRC. Tale messaggio viene inviato solamente se il server in oggetto
(a) ha abilitato il SUMMON, (b) l’utente vi e’ loggato e (c) il server che
processa il messaggio puo’ scrivere sul tty dell’utente (o qualcosa di
simile).
Se non viene dato alcun parametro esso tenta di convocare l’
dal server al quale il client e’ connesso, che viene supposto come quello di
destinazione.
Se il summon non e’ abilitato su un server, dev’essere ritornata la risposta
numerica ERR_SUMMONDISABLED e passare il messaggio summon oltre.
Risposte numeriche:
ERR_NORECIPIENT ERR_FILEERROR
ERR_NOLOGIN ERR_NOSUCHSERVER
RPL_SUMMONING
Esempi:
SUMMON jto ; convoca l’utente jto sulla macchina del
server.
SUMMON jto tolsun.oulu.fi
; convoca l’utente jto sulla macchina ove e’
attivo il server "tolsun.oulu.fi".
5.5 Comando Users
Comando: USERS
Parametri: []
Oikarinen & Reed [Page 40]
RFC 1459 Internet Relay Chat Protocol May 1993
Il comando USERS ritorna una lista di utenti loggati sul server, in maniera
simile al formato di who, rusers e finger. Qualcuno puo’ aver disabilitato
questo comando, sul proprio server, per motivi di sicurezza. Se disabilitato,
dev’essere ritornata la relativa risposta numerica.
Risposte numeriche:
ERR_NOSUCHSERVER ERR_FILEERROR
RPL_USERSSTART RPL_USERS
RPL_NOUSERS RPL_ENDOFUSERS
ERR_USERSDISABLED
Risposta se disabilitato:
ERR_USERSDISABLED
Esempi:
USERS eff.org ; richiede la lista degli utenti loggati su
eff.org.
:John USERS tolsun.oulu.fi
; richiesta di John della lista di utenti
loggati sul server tolsun.oulu.fi.
5.6 Messaggio Operwall
Comando: WALLOPS
Parametri: Text to be sent to all operators currently online
Invia un messaggio a tutti gli operatori attualmente online. Dopo aver
implementato il WALLOPS come un comando disponibile all’utente si e’ visto
che esso e’ stato spesso e volentieri usato in maniera impropria per inviare
un messaggio ad un elevato numero di persone (in modo simile al WALL). Per
questo motivo e’ raccomandato che l’attuale implementazione di WALLOPS sia da
esempio affinche’ siano solamente i servers gli unici autorizzati ad inviare
dei WALLOPS.
Risposte numeriche:
ERR_NEEDMOREPARAMS
Esempi:
:csd.bu.edu WALLOPS :Connect '*.uiuc.edu 6667' from Joshua
; Messaggio WALLOPS da csd.bu.edu per
notificare che il messaggio CONNECT e’ stato
ricevuto e attuato da Joshua.
Oikarinen & Reed [Page 41]
RFC 1459 Internet Relay Chat Protocol May 1993
5.7 Messaggio Userhost
Comando: USERHOST
Parametri: {}
Il comando USERHOST prende una lista di massimo 5 nicknames, ciascuno
separato da un carattere spazio, e ritorna un elenco di informazioni su
ognuno di essi. La lista tornata ha ciascuna una risposta separata da uno
spazio.
Risposte numeriche:
RPL_USERHOST ERR_NEEDMOREPARAMS
Esempi:
USERHOST Wiz Michael Marty p
;Richiesta USERHOST per avere informazioni
sui nick "Wiz", "Michael", "Marty" e "p".
5.8 Messaggio Ison
Comando: ISON
Parametri: {}
Il comando ISON e’ stato implementato per fornire una rapida ed efficiente
risposta che informi se un dato utente e’ al momento collegato a IRC. ISON
necessita di un (1) solo parametro: un elenco di nick separati da spazi. Per
ciascun nickname della lista il server aggiunge una voce alla sua stringa di
risposta. La stringa di risposta puo’ quindi essere vuota (nessuno dei nick
indicati e’ presente), un’esatta copia della stringa di parametro (tutti i
nick sono presenti) o qualsiasi altro sottoinsieme dell’insieme di nick
forniti col parametro. L’unica restrizione sul numero di nick che possono
essere verificati e’ che la lunghezza totale della stringa non puo’ essere
troppo grande altrimenti il server la tronca a 512 caratteri.
ISON e’ processato solamente dal server locale del client mittente e non
viene passato ad altri server per ulteriori processi.
Risposte numeriche:
RPL_ISON ERR_NEEDMOREPARAMS
Esempi:
ISON phone trillian WiZ jarlek Avalon Angel Monstah
; Esempio di richiesta ISON per 7 nick.
Oikarinen & Reed [Page 42]
RFC 1459 Internet Relay Chat Protocol May 1993
6. RISPOSTE
Cio’ che segue e’ un elenco delle risposte numeriche che possono essere
generate come replica ai comandi visti in precedenza. Ciascuna di esse viene
riportata con il relativo numero, nome e stringa di risposta.
6.1 Risposte di errore
401 ERR_NOSUCHNICK
" :No such nick/channel"
- Usata per indicare che il parametro nickname fornito col
comando non e’ attualmente in uso.
402 ERR_NOSUCHSERVER
" :No such server"
- Usata per indicare che il nome server dato attualmente non
esiste.
403 ERR_NOSUCHCHANNEL
" :No such channel"
- Usata per indicare che il nome del canale dato non e’ valido.
404 ERR_CANNOTSENDTOCHAN
" :Cannot send to channel"
- Inviata ad un utente che (a) non e’ su un canale con mode +n
oppure (b) non e’ chanop (o mode +v) su un canale impostato
come +m e sta tentando di inviare un messaggio PRIVMSG al
canale.
405 ERR_TOOMANYCHANNELS
" :You have joined too many
channels"
- Inviata ad un utente quando questi si e’ unito al numero
massimo o consentito di canali e prova ad unirsi ad un altro
canale.
406 ERR_WASNOSUCHNICK
" :There was no such nickname"
- In risposta all’WHOWAS per indicare che non vi sono
informazioni per quel nickname.
407 ERR_TOOMANYTARGETS
" :Duplicate recipients. No message
Oikarinen & Reed [Page 43]
RFC 1459 Internet Relay Chat Protocol May 1993
delivered"
- In risposta ad un client che sta cercando di inviare un
PRIVMSG/NOTICE usando il formato user@host per un user@host
che ha diverse istanze.
409 ERR_NOORIGIN
":No origin specified"
- Messaggio PING o PONG mancante del parametro del mittente,
richiesto poiche’ tali comandi devono lavorare senza validi
prefissi.
411 ERR_NORECIPIENT
":No recipient given ()"
412 ERR_NOTEXTTOSEND
":No text to send"
413 ERR_NOTOPLEVEL
" :No toplevel domain specified"
414 ERR_WILDTOPLEVEL
" :Wildcard in toplevel domain"
- 412 - 414 sono tornati da un PRIVMSG per indicare che il
messaggio non e’ stato recapitato per qualche motivo.
ERR_NOTOPLEVEL e ERR_WILDTOPLEVEL sono errori tornati quando
avviene un uso non valido di "PRIVMSG $" o
"PRIVMSG #".
421 ERR_UNKNOWNCOMMAND
" :Unknown command"
- Ritornata ad un client registrato per indicare che il comando
inviato non e’ conosciuto dal server.
422 ERR_NOMOTD
":MOTD File is missing"
- Il file MOTD del server non puo’ essere aperto.
423 ERR_NOADMININFO
" :No administrative info available"
- Tornata da un server in risposta ad un messaggio ADMIN quando
si verifica un errore nel reperimento delle informazioni.
424 ERR_FILEERROR
":File error doing on "
Oikarinen & Reed [Page 44]
RFC 1459 Internet Relay Chat Protocol May 1993
- Messaggio di errore generico usato per riportare un errore di
operazione su file durante la processione di un messaggio.
431 ERR_NONICKNAMEGIVEN
":No nickname given"
- Ritornata quando un parametro nickname non e’ stato trovato.
432 ERR_ERRONEUSNICKNAME
" :Erroneus nickname"
- Ritornata a seguito di un messaggio nick contenente caratteri
non rientranti in alcun set definito. Vedere la sezione 4.1.2
per dettagli sui nickname validi.
433 ERR_NICKNAMEINUSE
" :Nickname is already in use"
- Tornata a seguito di un tentativo di modificare il proprio
nick con uno esistente, a seguito del messaggio NICK.
436 ERR_NICKCOLLISION
" :Nickname collision KILL"
- Ritornata da un server ad un client quando di verifica una
collisione di nickname (registrazione di un NICK con uno gia’
esistente su un altro server).
441 ERR_USERNOTINCHANNEL
" :They aren't on that channel"
- Ritornata dal server per indicare che l’utente oggetto del
comando non e’ sul canale dato.
442 ERR_NOTONCHANNEL
" :You're not on that channel"
- Ritornata dal server ogni volta che un client invia un comando
che si riferisce ad un canale di cui non e’ membro.
443 ERR_USERONCHANNEL
" :is already on channel"
- Ritornata quando un client tenta di invitare un utente su un
canale ove e’ gia’ presente.
Oikarinen & Reed [Page 45]
RFC 1459 Internet Relay Chat Protocol May 1993
444 ERR_NOLOGIN
" :User not logged in"
- Tornata a seguito di un comando SUMMON per un utente non in
grado di essere portato a buon fine poiche’ non loggato.
445 ERR_SUMMONDISABLED
":SUMMON has been disabled"
- Ritornata in risposta ad un comando SUMMON. Deve essere
tornata da ogni server sul quale esso non e’ implementato.
446 ERR_USERSDISABLED
":USERS has been disabled"
- Ritornata in risposta ad un comando USERS. Deve essere
tornata da ogni server sul quale esso non e’ implementato.
451 ERR_NOTREGISTERED
":You have not registered"
- Ritornata dal server per indicare che il client dev’essere
registrato prima che il server acconsenta di essere
analizzato nel dettaglio.
461 ERR_NEEDMOREPARAMS
" :Not enough parameters"
- Ritornata dal server a seguito di numerosi comandi per
indicare che il client non ha fornito sufficienti parametri.
462 ERR_ALREADYREGISTRED
":You may not reregister"
- Ritornata dal server a qualsiasi collegamento che tenta di
modificare le impostazioni di registrazione (come password o
dettagli sull’utente da un secondo messaggio USER).
463 ERR_NOPERMFORHOST
":Your host isn't among the privileged"
- Ritornata ad un client che cerca di registrarsi ad un server
che non consente connessioni dall’host che tenta la
connessione.
Oikarinen & Reed [Page 46]
RFC 1459 Internet Relay Chat Protocol May 1993
464 ERR_PASSWDMISMATCH
":Password incorrect"
- Ritornata per indicare un tentativo fallito di registrazione
di una connessione per la quale la password richiesta non e’
stata fornita oppure in modo errato.
465 ERR_YOUREBANNEDCREEP
":You are banned from this server"
- Ritornata dopo un tentativo di connessione e registrazione ad
un server sul quale la tua connessione e’ stata esplicitamente
proibita.
467 ERR_KEYSET
" :Channel key already set"
471 ERR_CHANNELISFULL
" :Cannot join channel (+l)"
472 ERR_UNKNOWNMODE
" :is unknown mode char to me"
473 ERR_INVITEONLYCHAN
" :Cannot join channel (+i)"
474 ERR_BANNEDFROMCHAN
" :Cannot join channel (+b)"
475 ERR_BADCHANNELKEY
" :Cannot join channel (+k)"
481 ERR_NOPRIVILEGES
":Permission Denied- You're not an IRC operator"
- Ogni comando che richiede i privilegi di operatore per operare
deve tornare questo errore per indicare che il tentativo non
ha avuto successo.
482 ERR_CHANOPRIVSNEEDED
" :You're not channel operator"
- Ogni comando che richiede i privilegi ‘chanop’ (come i
messaggi MODE) devono tornare questo errore se il client che
tenta il comando non e’ chanop del canale specificato.
483 ERR_CANTKILLSERVER
":You cant kill a server!"
- Ogni tentativo di utilizzo del comando KILL su un server
dev’essere rifiutato e ritornato direttamente al client questo
errore.
Oikarinen & Reed [Page 47]
RFC 1459 Internet Relay Chat Protocol May 1993
491 ERR_NOOPERHOST
":No O-lines for your host"
- Se un client invia un messaggio OPER ed il server non e’ stato
impostato per ricevere connessioni come operatore dall’host
del client dev’essere tornato questo errore.
501 ERR_UMODEUNKNOWNFLAG
":Unknown MODE flag"
- Ritornata dal server per indicare che il messaggio MODE e’
stato inviato con un flag non riconosciuto.
502 ERR_USERSDONTMATCH
":Cant change mode for other users"
- Errore inviato a qualsiasi utente che cerca di vedere o
modificare i modi utente di un altro utente.
6.2 Risposte ai comandi.
300 RPL_NONE
Numero di risposta interna. Non usata.
302 RPL_USERHOST
":[{}]"
- Formato di risposta usato da USERHOST per elencare risposte ad
una lista di richieste. La stringa di risposta e’ formata come
segue:
::= ['*'] '=' <'+'|'-'>
L’*’ indica se il client e’ stato registrato come operatore. I
caratteri ‘-‘ o ‘+’ indicano se il client ha impostato o meno
un messaggio di away.
303 RPL_ISON
":[ {}]"
- Formato di risposta usato da ISON per elencare risposte ad una
lista di richieste.
301 RPL_AWAY
" :"
Oikarinen & Reed [Page 48]
RFC 1459 Internet Relay Chat Protocol May 1993
305 RPL_UNAWAY
":You are no longer marked as being away"
306 RPL_NOWAWAY
":You have been marked as being away"
- Queste risposte sono usate col comando AWAY (se permesso).
RPL_AWAY e’ inviato a qualsiasi client che invia un PRIVMSG ad
un client in stato di away. RPL_AWAY e’ inviato solamente dal
|
|
| |