~taiite/irc-police

A stateful, transparent IRCv3 proxy that tells you why and how IRC software is fucked up.
a day ago
6 days ago

#Stop right there!

irc-police is a stateful, transparent IRCv3 proxy that tells you why and how IRC software is fucked up.

irc-police validates the following:

  • basic IRC framing,
  • IRCv3 message tags and escape sequences,
  • the number of parameters,
  • the formatting of parameters,
  • ISUPPORT tokens and values,
  • IRCv3 capabilities:
    • correct vendoring and draft status,
    • used commands against negotiates capabilities,
    • capabilities values,
  • session state,
  • commands and replies against connection state.

#Building

Use go build ./cmd/irc-police or make.

#Usage

Usage of irc-police:
  -connect string
    	upstream address to connect to
  -listen string
    	listen address (default "127.0.0.1:6667")
  -no-tls
    	connect to upstream using a plain-text connection

For example, to connect to freenode, run ./irc-police -connect chat.freenode.net:6697 and point your IRC client to localhost:6667 (plain-text).

irc-police will transparently proxy your client connection to freenode, and print to standard output any error it will encounter.

#Output format

TODO: document

#Sources of truth

Mostly https://ircdocs.horse. Thank them for documenting it all.

If you were expecting this section to only be "The RFCs," then you should know that the RFCs are actually outdated. Each and everyone has been tinkering with the protocol, and ircdocs was born to document its evolution.

This proxy doesn't validate software against the RFCs, it validates software against the implicitly agreed-upon baseline and common sense. Its output should point out actual bugs in software and misbehaviors that are tolerated only because implementations are so liberal in what they accept.

For IRCv3 stuff, https://ircv3.net of course.

#Questions, contributions

I am hhirtz on freenode. Talk should happen on #ircdocs, since it's their job to document the state of the art in IRC.

Questions and patches also welcome at ~taiite/public-inbox@lists.sr.ht!

#License

ISC, see LICENSE.

Copyright (C) 2021 The irc-police contributors