Proof of concept mechanical port of ircnet/ircd to Rust as part of a bit about C being insecure for network services
0

Configure Feed

Select the types of activity you want to include in your feed.

docs(site): add features page

+76
+76
docs/site/content/features.md
··· 1 + +++ 2 + title = "Features" 3 + template = "page.html" 4 + weight = 4 5 + +++ 6 + 7 + leveva implements the IRCnet-style client protocol, the UID-based 8 + server-to-server protocol, a growing slice of IRCv3, and in-process 9 + authentication. This page is a tour of that surface. 10 + 11 + ## Client protocol 12 + 13 + The full IRCnet client experience: 14 + 15 + - **Registration** — `NICK`/`USER` negotiation through the `001`–`004` welcome 16 + burst and the `375`–`376` MOTD. 17 + - **Channels** — `JOIN`/`PART`/`KICK`/`INVITE`/`TOPIC`/`NAMES`/`LIST`, channel 18 + keys, limits, ban/except/invite lists, and `KNOCK` for invite-only channels. 19 + - **Channel modes** — the standard set plus an elemental membership hierarchy 20 + (`~` owner, `&` admin, `@` op, `%` halfop, `+` voice), charybdis-style extbans 21 + (`$a`/`$o`/`$r`/`$x`/…), and InspIRCd-style official-join (`+Y`). 22 + - **User modes** — invisible, wallops, operator, server-notice, a deterministic 23 + cloaked host (`+x`), caller-id (`+g`/`+G` with `ACCEPT`), and more. 24 + - **Queries** — `WHO`/`WHOIS`/`WHOWAS`, `WHOX`, `ISON`/`USERHOST`, `MOTD`, 25 + `LUSERS`, `MAP`, `LINKS`, `TRACE`, `VERSION`, `TIME`, `ADMIN`, `INFO`. 26 + - **Operators** — `OPER`, `KILL`, `KLINE`/`UNKLINE`, `DLINE`/`UNDLINE`, `RESV`, 27 + `XLINE`, `CONNECT`/`SQUIT`, `REHASH`, `WALLOPS`, `STATS`, and the `SA*` 28 + override family (`SANICK`/`SAJOIN`/`SAPART`). 29 + 30 + ## Server-to-server 31 + 32 + leveva links to other leveva servers over a UID-based TS6-style protocol: 33 + 34 + - **Linking and bursting** — the `PASS`/`SERVER` handshake, full network burst on 35 + link, and `EOB` (end-of-burst) signalling. 36 + - **State propagation** — `UNICK` user introduction, `NJOIN` channel joins, 37 + `SAVE` nick-collision resolution, and timestamp-based (`TS`) conflict 38 + resolution where the oldest state wins. 39 + - **Netsplit handling** — clean removal of a split server's users and channels, 40 + and a netjoin flood to local members when a split heals. 41 + - **TLS links** — server links run over TLS in both directions, authenticated by 42 + `PASS` rather than certificates. 43 + - Operator and notification verbs (`KILL`, `WALLOPS`, `KNOCK`, `METADATA`, 44 + away/account/msgid/server-time tags) propagate across the network. 45 + 46 + ## IRCv3 47 + 48 + A growing IRCv3 track, negotiated per client with `CAP`: 49 + 50 + - **Message tags** — the tag delivery plane, `TAGMSG`, client-only tags, 51 + `server-time`, `msgid`, `account`, and `bot`/`oper` tags. 52 + - **SASL** authentication during registration. 53 + - **MONITOR** for presence tracking. 54 + - **Capabilities** — `away-notify`, `account-notify`, `invite-notify`, 55 + `echo-message`, `chghost`, `setname`, `multi-prefix`, `extended-join`, 56 + labeled responses, standard replies, `STS`, and message redaction. 57 + - **WebSocket transport** so browser clients can connect directly. 58 + 59 + ## Authentication 60 + 61 + Authentication runs **in-process** — `leveva-iauth` is an async library invoked 62 + with `.await` inside each connection's task, not a separate daemon talking over a 63 + pipe. Available checks include: 64 + 65 + - **ident** — an RFC 1413 ident lookup. 66 + - **DNSBL** — DNS blocklist checks. 67 + - **SOCKS** and **web-proxy** open-proxy detection. 68 + 69 + Checks are enabled in the `iauth` config block; their verdict is folded into 70 + registration before the client receives the welcome burst. 71 + 72 + ## Observability 73 + 74 + leveva exports Prometheus metrics (server counters, link traffic) over an 75 + optional metrics listener, readable both there and through `STATS`. See 76 + [Operating leveva](@/operating.md).