home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************
- * 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)
-