Skip to content

Instantly share code, notes, and snippets.

@nillkitty
Created September 28, 2021 21:54
Show Gist options
  • Save nillkitty/1db2ad2ee6d97da353225c1688b38954 to your computer and use it in GitHub Desktop.
Save nillkitty/1db2ad2ee6d97da353225c1688b38954 to your computer and use it in GitHub Desktop.
IRC - GhostX option - 2007
The following is an excerpt from the FAQ for devil IRCd which was never released:
What is ghostx and why am i getting messages in my channels telling me users are dropping?
GHOSTX is a technology that gives a grace period to users that disconnect immaturely
(e.g. not with /quit). Users that quit are given up to ping_frequency seconds (for
their class) to reconnect to any server with the same nickname and IP. If a client
connects to any server on the network with the same IP and the same nickname, they will
resume exactly where they left off, in all of their channels, with all their modes, etc.
There are several 'etc' options that conigure this:
<ghostx /> If this is present GHOSTX will be on. Otherwise disconnected users
will quit immediately.
<ghostxmsg /> If this is present, channels will notify users that a user has
disconnected and for what reason the second they disconnect. If
this is not present, users will need to /whois or /msg a user to find
out that they have dropped.
<gxclass>...</gxlass>
This is required and specifies the name of a class that users from
OTHER servers will be sorted into if they reconnect to this server
(since classes are not global).
Note that if a special user such as an oper or something connects to
a different server using GHOSTX, they will lose their special opers class.
<gxworkaround />
This should only be used for testing and should be turned off on
actual networks. If present the server sees "127.0.0.1" as being equal
to all IP addresses, since a user IRCing from localhost to their local
server will not be able to connect as 127.0.0.1 when they reconnect
to a server running elsewhere.
So you're telling me if ghostx is on, users can disconnect and reconnect anywhere without
quitting or losing their modes and channels?
Yes. But they need to *disconnect* NOT quit. Some clients will not disconnect without
quitting unless you kill their process. This does NOT affect server-initiated disconnects
such as Ping Timeout, Kills, Bans, etc. If a user pings out, they ping out. In order
for a user to drop without quitting they need to either send a TCP graceful disconnect
(FIN packet or socket EOF of whatever you like to call it), or disconnect with a read
or write error (e.g. Connection reset by peer). /QUIT /KILL or any server-initiated
closing will remove the user immediately.
How long does a user stay in the offline state and how can i tell which users are offline?
A user stays in the offline state until either they reconnect or until it comes time
for the server to PING them. If the server goes to send a PING to a client that is
offline, they will quit with a special quit message as in the following examples:
*** bob (bbarker@cbs.com) has quit IRC (Client exited 54secs ago)
*** bob (bbarker@cbs.com) has quit IRC (10054: Connection reset by peer 1min 28secs ago)
You can tell a user is offline because:
1. If you /whois them, their servername will be "*" and the server description will
be the reason they are offline.
2. If you /who them, their servername will be "*" and their flags field will contain
"X" (offline) and "G" (gone).
3. If you /msg or /invite them, you'll recieve a RPL_AWAY message with the reason
they are offline.
And what about channelmode "f"?
When a channel has mode "f", it cannot contain offline users. If a user drops while
in one of these channels, they'll part the channel and must rejoin the channel if they
reconnect.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment