Intermud 3 irn v1 specification
This protocol was developed by Tim@TimMUD and Cratylus@Dead Souls based on the notes about irn in the original Intermud 3 specification. It is a fully connected network (every router connects to every other router) and is currently in use by the *yatmim, *wpr, *i4 and *dalet routers.
Packet specifications:
irn-startup-req
irn-mudlist-req
irn-mudlist-delta
irn-chanlist-req
irn-chanlist-delta
irn-data
irn-ping
irn-shutdown
- There also exists an irn-mudlist-altered packet that is identical to the irn-mudlist-delta packet.
- There also exists an irn-chanlist-altered packet that is identical to the irn-chanlist-delta packet.
Startup
When an irn router starts, it tries to connect to all other
known irn routers. When an outbound (mudmode) connection is
established, the router sends an irn-startup-req, followed by
its complete mud and channel lists (as irn mud/chanlist delta
packets).
The receiving router validates the startup request and if
valid, sends its complete mud and channel lists as irn mud/chanlist
delta packets.
Channels
Every router is responsible for delivering channel messages to
muds directly connected to it. Channel messages received from
directly connected muds should be forwarded to every known irn
router. Channel messages received from another irn router should
only be delivered to directly connected muds.
Routers can change the channel names in a channel message sent to/
received from another irn router.
When a router receives an administrative command for a channel, it should verify if it is allowed, execute it and forward it to other routers (by means of an irn-chanlist-delta packet). This includes adding/removing channels, listeners, banned and allowed muds.
Code
The code used by *i4 and *yatmim is available from the Dead Souls website/
The code used by *wpr is available as part of the dgd networking package at svn://wotf.org/dgd-devel-net/I3/router
Notes:
- This specification was written based on the current implementation, whenever the spec and the implementation differ, the implementation is right.
- irn mud and chanlist ids are sent and stored by the current implementation, but are not actually used in any way.
- The intermud 3 version used by a mud is communicated between routers, but only has any use to the router the mud is directly connected to.