Merge branch 'u2_10_12_branch' of git://git.code.sf.net/p/undernet-ircu/ircu2
[ircu2.10.12-pk.git] / doc / history / 2.4.notes
diff --git a/doc/history/2.4.notes b/doc/history/2.4.notes
new file mode 100644 (file)
index 0000000..0321b35
--- /dev/null
@@ -0,0 +1,478 @@
+/************************************************************************
+ *   IRC - Internet Relay Chat, 2.4.notes
+ *   Copyright (C) 1990   Markku Savela
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 1, or (at your option)
+ *   any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+IRC 2.4 release notes  6 May 1990/msa (Markku.Savela@vtt.fi)
+============================================================
+
+   This document explains the changes I have done up to this
+point. Some additional changes and packaging has been made by
+Chelsea (chelsea@earth.cchem.berkeley.edu). This is personal
+view of the changes.
+
+CHANGES TO LAST THE OFFICIAL RELEASE (2.2PL1)
+
+   This release of irc2.4 is based to 2.2PL1 release (see the
+HISTORY chapter later in this document). Aside from fixing the
+bugs, this version is in many ways different from the 2.2PL1.
+The purpose of the most changes is to make it easier to run an
+IRC server. Normal users benefit from these changes indirectly
+by getting a better maintained server.
+
+1. Changes visible to normal users
+
+   Even while mainly fixing bugs, some user visible changes have
+crept in too.
+
+1.1 General note on wildcards
+
+   Many commands accept now wildcard matching where applicable. All
+compares are case insensitive (e.g. "a" == "A"). The wild cards are
+
+       ?       matches any single character
+
+       *       matches any number of characters, also empty
+               string. [PL1 had a bug, which caused "*du*"
+               not match "....edu"].
+
+1.2 Server supported wildcards for "/who mask" command.
+
+   Protocol message is "WHO mask", where mask can be
+
+       empty
+       0       List all users [No change from PL1]
+
+       *       List all users on the same channel where the user is
+               (or all, if user is on 0) [No change from PL1].
+
+       number  List all users on the specified channel [No change
+               from PL1]. Note, if the "mask" begings with a digit,
+               this form is assumed, and the remainder of mask is
+               ignored, e.g. "/who 12*.fi" gives all people from
+               channel 12 and ignores the "*.fi" part.
+
+       mask    If the mask is any string, it will be compared
+               *separately* to each information field of the user
+               and if a match is found in any field, that user
+               is included into the list. The fields searched
+               are
+
+                       nickname
+                       loginname (account name)
+                       real name (text shown in parenthesis)
+                       hostname (users machine)
+                       servername (server he/she is using)
+
+               Note: servername is not usually shown on WHO output,
+               but is included in anyway. Example: finding all users
+               somehow connected with Finnish sites, can be achieved
+               with mask "*.fi".
+
+1.3 Changes to /whois command
+
+   As WHO, also /whois accepts wild cards as a parameters. WHOIS
+returns information for all users whose nickname matches the specified
+mask.
+
+   WHOIS automaticly calls WHOWAS [see below], if the attempted nickname
+is not found.
+
+1.4 Short term "WHOWAS" history
+
+   The server has a short in memory cache of the recent nickname changes
+(the current default is set to 200 last changes). The design goal of
+this is that it remembers changes in last few minutes, there is no
+intention of this to be a long term history. That must be a separate
+project, although it could use the hooks provided by this service.
+
+   "WHOWAS nickname" queries this cache and returns about the same
+information that WHOIS would do, if the nickname is found. Wildcards
+are not accepted here, this is a specifically designed feature. If
+the name is not found, WHOWAS doesn't reply anything. This is because
+the most useful use of WHOWAS is implicitly through "WHOIS".
+
+   This history is also implicitly utilized by KILL command.
+
+1.5 New SERVER-SERVER/SERVER-CLIENT protocol message WALLOPS
+
+   The message ":source WALLOPS :Message" sends the message text
+to all operators that are currently online. Any user can use this
+command, it's not restricted. How this function is activated, depends
+on the client, but if nothing else works, "/quote wallops text" should.
+
+   NOTE:This function will not be fully operational until *ALL*
+       servers have upgraded to version 2.4. Also, operators
+       must be using a client that recognizes this command.
+
+   This is really a hasty addition. But, done this way it follows
+the general IRC message philosophy, where messages are sent only
+to links where they are needed (e.g. WALLOPS goes only to servers
+that have opers online--it's not broadcast to every server).
+
+1.6 General use of wildcarding in server queries
+
+   All commands that previously took a servername as a parameter,
+now accept also a wildcarded mask. The mask is replaced with
+the first matching servername. The following user level commands
+are affected
+
+       /admin server   -- administrative info
+       /time server    -- local time
+       /version server -- the server version
+       /motd server    -- "the message of the day"
+       /info server    -- info (usually same on same server version)
+       /stat f server  -- statistics information
+       /users server   -- users logged on server machine
+
+   Note: Remote capability is a new feature for "info" and "stat"
+commands. Until all servers have upgraded, these commands may not
+reach the intended target and may return the information from some
+intermediate server.
+
+1.7 Marking user AWAY
+
+   v2.2PL1 version and earlier showed the AWAY-state (G) only for
+the local users of the same server. AWAY status could be queried
+only by sending a message to a user. This release (or since msa.4)
+broadcasts the away status to every server and the commands /WHO and
+/WHOIS give this information reliably.
+
+   A side effect of this change is: when a user marks himself/herself
+as AWAY, all pre-msa.4 servers that are reached will send back an
+acknowlegde message. Until all servers are upgraged, use of AWAY
+is somewhat inconvenient. If you get extra messages from AWAY,
+they also contain the server information. Use /admin command and
+send a *friendly* request for the admin to upgrage his/her server
+to a working version, namely 2.4 :)
+
+1.8 Servers don't restrict characters within messages
+
+   The parameter fields of the messages can now contain any characters
+in range 1-255, except '\r', '\n' and '\0'. The client programs should
+by default filter away the "dangerous" control characters, but intelligent
+clients can utilize this change and allow exchanges with foreign
+8-bit (or wider) charactersets. (The actual command parts must still be
+represented with the ordinary 7-bit characters.)
+
+2. Changes visible to the server administrator
+
+2.1 Identifying servers
+
+   Servers/clients have now always two names (it was this way in
+PL1, but I think this version makes the idea more clear):
+
+       Announced Name:
+
+       The official name of the server (the name you use in
+       /time, /quote connect, etc) or users nickname. Servers
+       name is usually the hostname, but can actually be almost
+       any string of characters resembling hostname. This one
+       is given in M-line of ircd.conf.
+
+       Socket hostname:
+
+       Socket hostname of the server or client. This is the hostname
+       of the connecting server/client and this is resolved from the
+       connection. If resolve cannot be done, ircd defaults to using
+       numeric IP-address. *ALL* access checks are based on this
+       name, especially noteworthy fact, if your resolver cannot find
+       hostnames by IP-address, you must allow the access by IP-numbers
+       in your ircd.conf.
+
+   In many places, where servers name is shown, actually both are
+shown. The general format of the displayed name is
+
+       AnnouncedName[SocketHostName]
+
+When a connection is yet unkown, there is no AnnouncedName, and if the
+AnnouncedName is the same as SocketHostName, the "[..]"-part is omitted.
+
+2.2 Many notices to local operators
+
+   If an oper is signed on the server, he/she will receive many
+notices about exceptional conditions and servers actions. When
+something goes wrong, it should be much easier to fix the problems.
+
+   Few often occurring, inportant error messages are
+
+   "Write error to SERVERNAME, closing link"
+
+       write() to socket returned with an error. Server is
+       closing the link. This means usually network problems
+       which you can do nothing about.
+
+   "Max buffering limit exceeded for SERVERNAME"
+
+       This is the situation where old server would have been
+       "frozen". The socket buffers in your OS have been filled and
+       even servers own predefined internal buffering MAX for a link
+       has been exceeded. Exceeding this limit most likely means
+       that the link is really dead, so the server closes the link
+       and scratches all queued output for it. If the limit is
+       set high ( > 20000 bytes), you won't usually see this, but
+       just "No responce from SERVERNAME, closing link" as the
+       server does not reply to PING as it should.
+
+   "Link SERVERNAME cancelled, server SERVERNAME already exits"
+
+       Two different servers from your net fragment attempted
+       to connect same other net fragment about the same time
+       and this collision is detected at your server. IRC routing
+       does not allow loops, the link causing the loop is closed.
+       (Which of the two links gets closed is mostly determined
+       by pure chance and timing--you may lose a better link this
+       way. Collisions should be rare in normal operation, if
+       the timers in "config.h" are not messed up too much...)
+
+       Of course, you get this too, if you try to connect to a
+       server that is already connected by some other route. In
+       that case your attempted connection is just safely cancelled.
+
+   The notices attempt to be self explaining.
+
+2.3 Links statistics collecting
+
+   IRCD now counts the bytes and messages transmitted to each open
+link. This information can be output with a command "/stats l"
+("/stats" or "/stat m" will give the old message count statistics).
+
+   Sample output
+
+Link           SendQ  SendM SendBytes  RcveM RcveBytes Open since
+oddjob.uchicago    0    203      8067    772     34321 Sun May  6 02:15:45 1990
+cs.hut.fi[sauna    0   1916     79798     94      3082 Sun May  6 01:51:25 1990
+otax.tky.hut.fi    0   3722    151511    426     22690 Sun May  6 00:25:54 1990
+nada.kth.se        0   8775    355811   5333    223853 Sat May  5 14:11:49 1990
+vehka.cs.uta.fi    0  23816    882000    901     41156 Fri May  4 22:50:23 1990
+lut.fi             0  25145    943765   1068     35020 Fri May  4 22:34:16 1990
+kreeta.helsinki    0  24286    899191    957     47085 Fri May  4 22:33:28 1990
+naakka.tut.fi      0  27754   1067302   8288    362960 Fri May  4 22:33:14 1990
+joyx.joensuu.fi    0  30003   1172949   2300     80053 Fri May  4 22:33:05 1990
+tel4.tel.vtt.fi    04083771 167473890 863475  35022755 Mon Apr 23 00:15:17 1990
+                   |    |       |       |       |      |
+                   |    |       |       |       |      Link established
+                   |    |       |       |       The number of bytes received
+                   |    |       |       The number protocol messages received
+                   |    |       The number of bytes transmitted
+                   |    The number of protocol messages transmitted
+                   The amount of queued data in bytes (if socket is hung)
+
+   The last row (with the local servername) contains the total
+cumulative counts for all connections since the server was started.
+
+   One can query the statistics of a remote server by adding the servers
+name to the command "/stat l servername". Of course, this only works,
+if all intermediate servers have upgraged. The first "old" server
+will stop the propagation and return the message counts by default.
+
+2.4 Connecting servers
+
+   An oper can manually activate a connection phase to any server
+defined in ircd.conf C-lines (to successfully complete the connection,
+the N-line must be present too). The message achieving this is
+
+       CONNECT servername portnumber
+
+   where servername may be a mask string containing wildcards. This
+name is matched against entries in ircd.conf (notice: the testing
+is made in reverse order, e.g. the last C-line in ircd.conf is tested
+first).  If portnumber is omitted, the ircd uses the one given in the
+found C-line. If the C-line does not have the portnumber, the compiled
+default will be used (PORTNUM from config.h).
+
+   This release allows also for remote connecting. An oper can send
+a connect request to remote server with
+
+       CONNECT servername portnumber remoteserver
+
+This command is passed to the 'remoteserver' and it then tries to
+execute it like it was given locally. (If there are opers online on
+that server, they will get a notice about this happening.) Note, that
+one can remotely connect only what is defined in ircd.conf. Usually
+one needs and should use this only for immediate your neighbours. Nobody
+should randomly go and give connect requests to distant servers, unless
+one knows it's absolutely necessary and is very familiar about the
+linking setup there.
+
+2.4 Terminating connections
+
+   The SQUIT command in PL1 was not intended to be used manually and
+was very dangerous to use (it also created so called "ghost servers").
+Since msa.4, the SQUIT has been safer to use manually.
+
+
+   "SQUIT z" s                          a
+              \                        /
+               \                      /
+         ------- x ------- y --| |-- z ------- b
+                /               ^     \
+              /                 |       \
+            p                            c
+
+       "SQUIT z" will break the link between "y" and "z" if injected
+       into system from "s". After that the net will be in two fragmets,
+       broken between "y" and "z". Server "z" never sees the actual
+       SQUIT, all it observers is that the link to "y" suddenly closes
+       (opers on z would see it as "Server y closed the connection"
+       notice. Opers on y would see it as "Received remote SQUIT from
+       x", note that the actual source "s" is not identified in the
+       current version--for reasons too complicated to be explained
+       here).
+
+       *WARNING* *WARNING* If the server "y" is still running pre-msa.4
+       (like PL1), don't *EVER* issue a SQUIT for its links (unless the
+       link is to a leaf node or verifiably a "ghost server").
+
+       Note, that when the link between "y" and "z" breaks, y will spit
+       out SQUIT's for "z", "a", "b" and "c" to "x". At same time "z"
+       is sending SQUIT's for "x", "s", "p", etc to "a", "b" and "c".
+       SQUIT is normally generated by servers automaticly, it's just
+       a later modification (msa.4) that allows an OPER to use this
+       same message to "simulate" a link break at certain point.
+
+       *IMPORTANT* If server "z" has configuration "C:y::y:6667", it
+       automaticly attempts to reconnect after a short delay (currently
+       10 seconds), but only *if* the connection has been up long enough
+       reliably (currently set to 10 minutes). If the thus formed link is
+       squit another time, it will not attempt to come back immeatedly.
+       This gives an oper time to reconfigure the links if that first
+       short delay is not enough.
+       
+    As in all commands, also SQUIT accepts wildcards, but be careful to
+give sufficient identification. SQUIT of wrong server is not nice...
+
+2.5 KILL message
+
+    KILL will implicitly use the history database. If a KILL is
+issued for a nick that has been changed to another, the server
+will automaticly re-issue the kill with the new nickname, if
+the change has happened recently (current value should be 90
+seconds). If a "terrorist" is clearly distrupting channel by
+bombarding it with garbage from negative channels and changing
+nick all time, there is no need to consult the "WHOWAS" data
+base, just use the nickname that was used to send the garbage
+and ircd hunts the culprit down. When this change of target
+happens, the oper issuing the kill is notified.
+
+NOTE:  With automatic, kill-proof-reconnecting clients, the
+       value of KILL is becoming insignificant...
+
+2.6 Changing the server defaults from the command line
+
+    The servers activation command is now
+
+ircd[ -f configfile][ -h servername][ -p portnumber][ -x debuglevel]
+
+where parameters can be given in any order. If the "configfile"
+is defined, it will override the default specified in the file
+"config.h". If "servername" is defined, it will override the
+one defined in the M-line on the configuration line. "portnumber"
+will override the compiled default (from "config.h") or the
+one from the M-line of the configuration file. The "debuglevel"
+will determine the amout of logging the server does into a
+log file that has been define in "config.h". The "debuglevel"
+should never be defined for a server running normally, it can
+quickly generate megabytes of trace. Usually needed only when
+the server is incapable of starting properly at all, then one
+run with "-x9" usually is enough to reveal the problem.
+
+3. General cleaning up and commenting the code
+
+   This issue is controversial. My way of fixing bugs is not just
+fix them, I also want to program defensively, make it difficult to
+make new errors. Thus I have heavily reformatted and reorganized
+those files that I have had to touch. Some functions have been
+renamed intentionally to catch all uses of those functions [because
+the functions semantics or calling sequences have been changed].
+
+   This release (2.4) will be the last IRC version I'm contributing
+to. If you have any wishes or complains about the code or functioining
+of IRC, use the source or ask whomever it happens to be the current
+developer.
+
+HISTORY
+
+   There have been many different versions of IRC and many of those
+versions are still in use. The following attempt to bring some
+clarification to the versions. This starts from 2.01.6, hopefully
+no servers are running older versions...
+
+       ...
+       ...
+       2.01.6  A version from WiZ in summer 1989
+       ...
+               2.01t6  A series of releases, which contained minor
+               2.01T6  adjustements and bug fixes to the base version.
+               2.01u6  Some of those fixes caused extra errors, of
+               2.01U6  this series versions 2.01U6 and 2.01v6 are at
+               2.01v6  least known to be rather stable.
+
+       2.1.0   Mike Bolotski created these versions from the sources
+       2.1.1   of 2.01U6, but unfortunale some devious bug crept in
+               and caused a lots of linking problems (the nasty "ghost
+               server problem" splintered the net constantly). These
+               versions must be deleted on sight :) [Autumn 1989]
+
+       2.2     This version is the 2.01v6 sources repackaged into
+               multiple directories by Mike again. Probably nobody
+               is running this base version, because is was promptly
+               followed by two patch releases [Autumn 1989]
+
+               2.2PL0  These two are the last major "official" releases
+               2.2PL1  and most of the servers upgraged to either of
+                       these.
+
+       2.2msa  Unfortunately 2.2PL1 version had a tendency to die
+               mysteriously very often. So, I started to look into the
+               code from March 1990 and that resulted a series of
+               patches to the 2.2PL1 server code, but finally
+               decided to release full server code releases of which
+               few have got wider distribution
+
+               2.2msa.4
+                       Has most of the known PL1 bugs fixed and seems
+                       to be very reliable. But once servers started
+                       staying up, a new problem appeared: socket
+                       buffers started getting full and servers tended
+                       to freeze very often for long intervals.
+
+       2.3alpha
+       2.3     Is an attempt to make an official release from 2.2msa.4
+               code, but hassles with changed copyrights make this
+               version unacceptable. Besides, 2.3alpha or 2.2msa.4 are
+               now obsolete, old versions :)
+
+       2.2msa.x
+               To solve the freezing problems, the server code is changed
+               to use non-blocking sockets.
+
+               2.2msa.7
+               2.2msa.9
+                       Are intermediate test versions, of which .9 seems
+                       to have most of the problems solved.
+
+               2.2msa.10
+                       Never released. This is slightly improved version
+                       of msa.9, some new features.
+
+       2.4     Is a release which combines 2.2msa.10 and Chelsea's
+               modifications to the server. Also, this release has
+               once again reorganized the directories and makefiles.
+
+
+-- msa (Markku.Savela@vtt.fi)