Vai al contenuto
Dialova

Documentazione IRC · Avanzato

Leggere e analizzare il formato di un messaggio IRC

Un messaggio IRC termina con CRLF. Può contenere tag, sorgente, comando e parametri. Su TCP un frammento di dati ricevuto non è necessariamente una riga completa: la separazione dei messaggi precede la loro interpretazione.

Il team di Dialova · Verificato il

Scomporre una riga #

Esempio di messaggio; CRLF finale non mostrato
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde
ParteValore in questo esempioRuolo
Tag@time=…Metadati, prima del primo spazio separatore.
Sorgente / prefisso:Alice!alice@cloak.exampleAutore indicato dal server.
ComandoPRIVMSGAzione del protocollo.
Parametro di destinazione#atelierDestinazione.
Ultimo parametro:Bonjour tout le mondeUn parametro contenente spazi; i due punti non fanno parte del testo.

Spazi e ultimo parametro #

Il separatore di base è lo spazio ASCII. L’ultimo parametro può essere preceduto da due punti; tutto ciò che segue appartiene a quel parametro, spazi compresi. Dividere l’intera riga in corrispondenza degli spazi farebbe perdere questa informazione.

Tre messaggi distinti, ciascuno terminato da CRLF
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123

Il primo esempio ha un ultimo parametro vuoto; il secondo contiene testo con spazi. Le indicazioni di direzione C/S usate negli altri esempi della guida non fanno mai parte dei byte inviati.

Lunghezza, byte e codifica #

Il limite storico di un messaggio IRC è di 512 byte, terminazione CRLF compresa. Non sono 512 caratteri: un carattere UTF-8 può occupare più byte. I tag IRCv3 hanno limiti aggiuntivi propri, che non rendono arbitrariamente infinito il resto del messaggio.

L’IRC storico non garantisce una codifica unica per tutti i testi. Client e reti moderni usano comunemente UTF-8 e i valori dei tag IRCv3 devono essere in UTF-8. Verifica le regole della rete e la gestione degli input non validi; non inventare una negoziazione automatica della codifica.

Un parser robusto #

  • Accumulare i byte fino a una terminazione completa e conservare il frammento restante.
  • Gestire più righe in una lettura di rete e una riga suddivisa su più letture.
  • Limitare la memoria anziché attendere indefinitamente una fine riga.
  • Estrarre e decodificare la sezione dei tag, poi sorgente, comando e parametri.
  • Non eseguire un evento storico come una modifica dello stato attuale.

Fonti e verifica

Gli esempi usano nickname e domini fittizi, tranne gli endpoint esplicitamente documentati. Le estensioni e le impostazioni specifiche di una rete sono indicate nel testo.