Hopp til innhold
Dialova

IRC-dokumentasjon · Avansert

Les og analyser formatet til en IRC-melding

En IRC-melding slutter med CRLF. Den kan inneholde tagger, kilde, kommando og parametere. En datablokk mottatt over TCP er ikke nødvendigvis en hel linje. Før meldingene tolkes, må strømmen deles opp korrekt.

Dialova-teamet · Kontrollert

Del opp en linje #

Eksempel på en melding; avsluttende CRLF vises ikke
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde
DelVerdi i eksempletRolle
Tagger@time=…Metadata før det første mellomrommet som skiller felt.
Kilde / prefiks:Alice!alice@cloak.exampleAvsender oppgitt av serveren.
KommandoPRIVMSGHandling på protokollnivå.
Målparameter#atelierMottaker.
Siste parameter:Bonjour tout le mondeEn parameter som inneholder mellomrom; kolonet er ikke en del av teksten.

Mellomrom og siste parameter #

Det grunnleggende skilletegnet er ASCII-mellomrom. Siste parameter kan begynne med et kolon; alt som følger, tilhører da denne parameteren, også mellomrom. En enkel oppdeling av hele linjen ved hvert mellomrom vil miste denne informasjonen.

Tre separate meldinger, hver avsluttet med CRLF
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123

Det første eksemplet har en tom siste parameter; det andre har tekst med mellomrom. C/S-markørene som brukes i andre eksempler i guiden, inngår aldri i bytene som sendes.

Lengde, byte og tegnkoding #

Den historiske grensen for en IRC-melding er 512 byte, inkludert CRLF. Det betyr ikke 512 tegn: et UTF-8-tegn kan kreve flere byte. IRCv3-tagger har egne tilleggsgrenser som ikke gjør resten av meldingen vilkårlig stor.

Historisk IRC garanterer ikke én felles tegnkoding for all tekst. Moderne klienter og nettverk bruker ofte UTF-8, og IRCv3-taggverdier må være i UTF-8. Sjekk nettverkets regler og håndtering av ugyldige inndata; ikke anta automatisk forhandling av tegnkoding.

En robust parser #

  • Samle byte frem til en fullstendig linjeavslutning, og behold det resterende fragmentet.
  • Håndter flere linjer i én nettverkslesing og én linje fordelt på flere lesinger.
  • Begrens minnebruken før du venter uendelig på en linjeavslutning.
  • Trekk ut og dekod taggfeltet, deretter kilde, kommando og parametere.
  • Ikke bruk historiske hendelser til å endre nåværende tilstand.

Kilder og kontroll

Eksemplene bruker fiktive kallenavn og domener, bortsett fra tilkoblingspunkter som er uttrykkelig dokumentert. Utvidelser og nettverksspesifikke innstillinger er merket i teksten.