                              IRServer - an IRC Server
                              ========================
Version 1.09 (12 Oc 1996)

Introduction
------------
This is a very simple IRC Server which I have written solely for local use
whilst developing the somewhat enhanced version of the IRClient scripts.
It provides simple support for the majority of RFC1459 (included) with some
notable exceptions.


Usage
-----
Run the server. The actual application will do nothing but sit there
until you connect to it on port 6667.


Supported
---------
The following are supported :
  USER registration
  NICK changing
  AWAY setting
  QUITing
  JOINing channels
  PARTing channels
  MOTD (message of the day)
  LUSERS (local users)
  LIST of channels
  NOTICEs
  ISON checking
  MODE changing/viewing :
    Channels : opsitnm
    Users : iosw
  OPER command (password defined in Options file)
  KICK users off channels
  ADMIN information
  INFO on server
  VERSION of server
  TIME at the server
  SQUIT locally only (param is seconds delay, NOT server name)
  TOPIC changing/viewing on channels
  PRIVMSGs (normal chatting, inc on channels)
  SUMMON local users (pops up a window asking you to accept/deny summoning)
  WHOIS a user
  WHOWAS a user who has left
  PING will be given after a period, and will respond with PONG if received
  PONG is ignored, except to reset timer (correctly)
  KILL a nickname
  Host name lookup is performed (this is slow over dialup)


Unsupported
-----------
  MODE changing/viewing :
    Channels:
      l unsupported
      k unsupported
      b unsupported
      v unsupported
     others have no effect, except o
    Users:
      i has no effect
      w has no effect
  Local channels (& channels)
  WHOIS only deals with a single user (no wildcards)
  INVITE onto channels
  LIST particular channels and/or server
  STATS on server config file - would be pretty pointless
  SERVER connections
  LINKS to the server - would be pretty pointless
  CONNECT to other servers - would be pretty pointless
  TRACE routings to other servers
  ERROR between servers (!)
  Multiple recipients/nicks/channels at any point
  WHO in any form
  REHASH the server config file - no such thing !
  RESTART the server - why bother...
  USERHOST checking
  USERS checking
  WALLOPS - not usually enabled anyhow
  No ident is performed.

  
How it works
------------
I've used the JFShared library for the simple wimp stuff and some handling.
However, the majority of the work is done by the (now released) SocketLib.
This allows my to put together socket applications in much the same amount of
time it takes for a desktop application. I can probably get a raw socket
connection working in about 20-30 minutes now from within a desktop program.
That is the thing that makes JFShared worthwhile at my end and the fact that
you only need one copy of it makes it worthwhile at your end.


Bugs
----
There ARE bugs in this server. Do NOT expect it work exactly as a 'real' IRC
server. The main bug I've found is that it is entirely possible to overrun
the space allocated for socket buffers using a dial-up connection. Why this
should be is something I am looking into but have yet to fix. It usually dies
with Not a heap block in HeapLib and the only way to exit is by using
Ctrl-Shift-Q whilst clicking on a button (a 'feature' of JFShared).

One thing you should watch for is the generation of strings that are too
long. This is vrey easy to do in normal usage, and as soon as an error occurs
in processing one users input it will from then on ignore that user. I found
this by trying /ctcp gerph version with the latest copy of Magrathea.


Files
-----
The files within the IRServer directory contain certain useful information
which you may wish to change if you are really bothered :
  Admin  : The administrative information
           You should only change the second line onwards.
           Loc1: The physical location of the server
           Loc2: More about the location or info
           Email: An email contact for the person running the server
  Motd   : The message of the day which is dumped when you connect
           Usually I copy shortmotd to motd whilst I'm debugging, but
           for real usage you /must/ really use the longmotd message
           or something similar.
  RFC1459: The RFC detailing the IRC specification
  Log    : The log of major events occuring in the server itself
           This can be enabled with the Debug option, and from the Options
           file.
  Options: Your user options - you should change this to suit your setup.


Desktop appearance of IRC
-------------------------
Currently there is no 'real' IRC on the desktop. To use IRC from the desktop
you might as well use IRClient as it is MUCH better than anything I could
ever hope to write. Plus with my nice new(ish) scripts you can do all manner
of wierd and wonderfull things (well some stuff anyhow).

The only interface I have currently available is the user list. If you click
on the iconbar icon a window will appear listing all the users and the
channels they are on. This will be updated and resized in real time as the
users do 'things'. The @ symbol preceeds any user who is an IRC operator, and
any channels of which the user is an operator.

You can disable the IRC Server temporarily (if for example you want to FTP
something and don't want a large load (!) ) by clicking the Suspend menu
option. On re-enabling ALL the waiting commands from clients will be dealt
with. This may result in delay whilst the server processes these and chucks
the responses back out again.


Multiplexing
------------
This client does not multiplex. There are good reasons for this. One of them
is the fact that it's awkward. Due to the time limiting (use of PING and
PONG) I have also disabled the MOTD multiplexing which now slows things down
quite a bit really. Hopefully I'll think up a way around this.


Configuration
-------------
Configuration of IRClient is by means of Config+, an application I've been
working on for quite some time now. This allows you to have a consistant
interface to configuration routines and to not include the code in the actual
application, thus cutting down overheads on what it usually a once only job.
If you haven't got Config+ you'll need to download it from my web site or
Arcade.


<BasicLibrary$File>
-------------------
This application requires Justin Fletcher's JFShared library to function.
This can be obtained from Arcade and possibly other bulletin boards. I have
seen QuickHelp on Digital Databank, so it is possible that JFShared exists
there also. JFShared is also currently being carried by Hensa and can be
obtained from Justin's website.


Compatibility
-------------
This application has been tested on the author's A5000, but due to the lack
of friends with Acorns has not been tested on other systems. Therefore, it
ought to work on any RO3.1 machine, and with a RO2 machine if it is
recognised in JFShared and uses no specific RO3 features. I've used the Acorn
Internet stuff to get it running using local loopback. 


Disclaimer
----------
The author accepts no responsibility for any problems which this application
may cause or loss of data resulting in its use. This application is Public
Domain. This means that it may be distributed, so long as no charge other
than copying costs are charged for it.


Contact
-------
Any comments, queries, donations or bug reports can be sent to Justin
Fletcher at :

E-Mail : Gerph@essex.ac.uk
URL    : http://prompt.essex.ac.uk/users/gerph
IRC    : On #Acorn as Gerph
Finger : finger jrflet@postman.essex.ac.uk
Tel    : (01842) 813979 (Home)

Snail Mail :
    Justin Fletcher
    Galadriel
    17b Cromwell Road,
    Weeting,
    Brandon,
    Suffolk.
    IP27 0QT

History
-------
Version 1.01 : 17 Jul 1996
               First release to Alex Howarth.
               No support for AWAY or op priviledges

Version 1.02 : 05 Aug 1996
               Minor bug fixes and op privs added
               AWAY added.
               SUMMON added.
               TIME added.

Version 1.03 : 06 Aug 1996
               Cosmetic changes :
                 Now able to disable server from menu option
                 List of current users added, and updated in real time
               Massive changes to the !Help file to document what I've done.

Version 1.04 : 09 Aug 1996
               Status window added
               Checking for closed connectioned (finally !)
               Options file added for added customisation (but not much :-) )
               Moved all sockets code into JFShared where it was intended to
               go after it was 'finished'.
               Tested over serial linked Arcs
               Will now search for port over the next five until it finds one
               to use.
               WHOIS and WHOWAS added

Version 1.05 : 13 Aug 1996
               PING and PONG added
               KILL added
               Time-outs for users (with PING and PONG and using connection
               closed) added
               Logging made more sensible
               Many bug fixes to SocketLib should mean that IRServer is
               now quite stable.

Version 1.06 : 20 Aug 1996
               Configuration via Config+ added (come on download it now !)

Version 1.07 : 10 Sep 1996
               The NICK command was giving complete rubbish (channel names)
               now fixed, but other commands may suffer :-(

Version 1.08 : 27 Sep 1996
               Will require InetServices if using SocketLib v1.03 (JFShared
               v2.35)

Version 1.09 : 12 Oct 1996
               Requires SysLog by Jon Ribbens
