imc2-1.00b     01/29/99
* keepalive problem resolved. imc-list maintained by close-notify packets,
  request-keepalive packets and boot-only keepalives.
* autohub load balancing - temporary connections to less busy hubs.
* hubs don't ping the world, just their direct connections.
* muds dont transmit to every hub they are connected to. Just the least busy
  one.
* some new fields , and some old ones made mandatory in the config file.
* InfoDetail can be entered mutliple times for multiple lines.
imc2-0.10     12/11/97
* ICE client/server prototype code
* rwhois doesn't see rinvis characters any more
* 'Bind' option added to config to bind to a specific IP
* better behavior of imc_idle if no descriptors are active
-- 0.9a-ice1 released --
* bugfix for huge IMC version numbers (where -do- people think these things
  up? :) from Trevor@Morgaelin
* various patches from Graucho@BerMUDa
* verify_format fix
* IMC_NUKE_RCHAT added to prevent forwarding - rchat is gone
* huge numbers of ICE fixes and enhancements
* rchat no longer in the channel table by default
* levels in packets, wizi/see/invis greatly simplified (to a simple
  imm/mortal distinction).
* last connected field added - mainly for hubs - to imc_info / imclist
* IMC_NOTIFY turned back on, to point at toof.net
-- 0.9a-ice2 released --
* notifications fixed
* more patches/bugfixes from Graucho@10T - destroy fixes, empty message
  handling, icec_showchannel bug.
* imc_packet and imc_internal merged
* version 0 and version 1 support removed
* rping (ping and traceroute) added
* info-request, info-reply, info-unavailable added
* InfoXYZ fields added to config. InfoName and InfoEmail are -REQUIRED-
  to start IMC.
* Added README.info
* format1/format2 fixes
* icommand refresh accepts *, and handles nonexistant channels by sending
  a destroy
* imc-mercbase, channels renamed to imc_channels
* imc-mercbase, replaced _C with COL due to some header conflicts with ctype.h
* imc-mercbase, quiet mode now a macro
* save problems with icec channels resolved

imc2-0.9a     08/06/97
* added Circle 3.0bpl11 patch from Trevor@Morgaelin <tman@dial.pipex.com>
* fixed the stuff that the circle patch broke :P
* IMC_NOTIFY is now off by default
* webclient socket() fix
* documentation updates

imc2-0.9      30/06/97

* memory leak in imc-rom's imc_recv_who plugged
* various typos fixed
* rignore now reports a correct count
* Merc 2.2 and SMAUG 1.01c patches and interface files added, thanks to
  Altrag <altrag@game.org>
* imc_makename only declared once in imc.h (pthbtbt Erwin ;)
* fixed smaug command positions
* started on README.hub
* sendignore loop fixed if you ignored yourself (heh)
* AFK and switched chars get rtells added to their replay buffers (ROM)
* imc-analyse.c nuked
* IMC mail should run a lot faster with multiple recipients when muds are
  up (basically just timeout tweaks - reset the timeout on a successful send)
* documentation restructure
* prewritten installation files (imc-rom.c, INSTALL.rom, etc) moved into
  codebase-specific subdirs (install/codebase-name)
* router changed to log password failures to rinfo, too
* EWOULDBLOCK handled as a return from read() etc (evidently on some systems
  EAGAIN != EWOULDBLOCK)
* imc_name and imc_port (new var) are now read from a new-format config
  file.
* imc_name and imc_active are now handled in imc-comm.c, not imc.c. imc_startup
  and imc_ll_startup are much more tightly coupled now.
* many checks for imc_active added. If IMC fails to start then nothing nasty
  should happen during the main operation of the mud.
* patch to ROM comm.c to concatenate page_to_char's (need to test this)
* channels don't use page_to_char any more in ROM (risky, but I don't forsee
  rchats getting >4k :)
* IMC->CGI gateway (webclient.c, webserver.c) added
* imc_list behavior changed
* do_imclist changed so that it calls imc_list to get a list of only active
  muds by default, and needs a 'direct' argument to show direct connections
  (imc_list 0,1,2)
* reconnect timeouts increase over time, IMC_RECONNECT_TIME #defines changed
  to IMC_(MIN|MAX)_RECONNECT_TIME
* problems early in imc_connect_to don't cause reconnects to start failing
  (main problem was failed hostname lookups)
* timers added to imc_list level 2
* rdisconnect can be used on numeric descriptors
* 120s connection timeout placed on all connections (ie. they must reach
  the IMC_CONNECTED state within 120s from when they were initiated, or they
  will be closed)
* new packet types: whois, whois-reply
* new command: rwhois <player>, asks all muds with the given <player> on to
  respond with information.
* rtell, rbeep changed to do exact matches before prefix matches on names
* imc-merc, imc-rom, imc-envy, and imc-smaug integrated into a single pair
  of files, imc-mercbase.[ch]
* some sanity checks are made in rwho, etc, and users are warned if the
  specified mud isn't known to be active (hence their query may get eaten)
* channels bugfix for directed channels (oops), thanks to NargoRoth/Droopy
* very old packets are dropped (should reduce repetition problems)
* wrapper added around the mail-sending stuff
* imclist config added
* IMC_INTERNAL is gone
* event queues added to handle timeouts etc
* imc_recv_who changed to farm who/finger requests to other functions
* IMC_MUD_INFO is now -required-
* 'direct', 'finger' added to rquery
* rfinger command (alias for rquery xxx finger yyy) added
* integrated imc.h and imc-comm.h. imc.c and imc-comm.c are now a single
  unit for the purposes of external interfaces
* flag interpretation changed
* rignores save as flags
* updated router.c, webclient.c to new interface
* added imc_readconfighook, imc_saveconfighook, and added password/logging
  config to router config file
* split imc-util.c and imc-events.c from imc.c
* central server UDP notification added, see #ifdef IMC_NOTIFY in imc.c
* added timeout parameters passed to imc_idle
* spam counters are now event-based, and run slightly differently
* loop in imc_idle_select separated (should speed up some forwarding cases)
* configuration/ignores load/save/editing moved to imc-config.c
* changed mailing list to event system, improved queue output format
* imc-comm.c is now imc-interp.c, contains only packet interpretation code
  (imc_recv_*, imc_send_*)
-- 0.9beta released --
* CHECKMUD doesn't warn about the local mud not having a reminfo entry
* spamcounter fixes
* LocalName warning fixed
* config saves when changing local name/port
* many changes from numeric -> #defined imc_active values
* SMAUG patches updated to 0.9
* color support for SMAUG added
* mud-specific #defines moved to imc-mercbase.c, to handle SMAUG's
  mud.h vs. merc.h thing
* introduced IMC_COLORCHAR2 (needed for SMAUG's ^ codes)
* fixed imc_post_mail to not switch subject/date, and to do color conversion
* don't try to accept connections if not listening
* logging is configurable remotely (router.c)
-- 0.9beta2 released --
* added quiet flag (for hubs mainly) for troublesome connections that go up
  and down a lot
* Ack! modifications added to imc-mercbase.[ch]
* ROM uses ->comm not ->act for notell/nochan
* played around with color some more, to allow better integration of the Ack!
  stuff
* markmemory/markstrings brought up to date
* added flock() on a lock file to check for multiple muds running from the same
  config file. If this happens, autoconnects are not done (and the port bind
  will probably fail - but we try, at least)
* added expired reminfo state
* fixed repeat-prevention code
* fixed rignore save/load (doh)
* allow rignores to be both prefix and suffix at the same time
* various webclient/webserver enhancements
* make the control socket non-blocking, just in case accept gets confused
* found&fixed the real accept problem (select + signals) in webserver.c
* failing to open files for write doesn't crash the mail system
* use lockf not flock (for sun compatibility)
* webserver, webclient updates
* SunOS tweaks (NO_EINTR)
* Default config file paths for the hubs and CGI gateway have changed!
* who-reply packet expanded to include a sequence number:
  sequence>=0 -> this is the nth reply packet for this request, n=sequence+1
  sequence<0  -> this is the last reply packet, -sequence packets in this reply
* UDP packets send once/day when active
* added invisibility to rwho/rtell/rbeep (also means you can't use channels)
  enable/disable with rchan +rinvis and rchan -rinvis
* rchan takes +/-all and multiple options in one command
* updated help files
* cleaner color integration for Ack!
* bugfix in imc_command with NULL imc_name
* Envy 2.2 patch added
* routers now only ping directly connected muds
-- 0.9beta3 released --
* documentation updates
* numerous small fixes
* router reworked a little (reload, reboot, password handling, etc)
* webclient/webserver now work :)
* rchannels bugfix
* Merc patch brought up to speed
* other stuff ;)

imc2-0.8       19/01/97

* escape ~? -> nothing for old-version muds (version 0); they interpret ~ 
  as a \n\r
* IMC channels can now be allowed/denied on a channel-by-channel basis
* rcode defaults to LEVEL_IMMORTAL
* added an example of adding a new local channel 
* added the ability to turn off rtells/rbeeps, and allow/deny them
* (imc-rom.c) $? in imc_log/imc_debug doesn't confuse wiznet
* getname changed to strip the @name for local users
* 'imc' help output is now up-to-date
* new 'rchannels' command that displays IMC channel state/toggles IMC
  channels
* new 'rchanset' command that handles displaying/setting/clearing the new
  channel allow/deny flags for players
* imc.h #defines tweaked to allow external setting. Note that the syntax
  for the #defines has now changed - they should be #defined to 1 to enable.
* channels/rtell/rbeep in interp.c changed to level 0 (needed for the new
  allow code), rchannels/rchanset added
* targetted channels are more efficient (only send to muds that are up)
* pings by default removed. Only hubs should now ping (and in that case,
  in response to keepalives)
* reminfo timed out every 10s, not every keepalive interval
* routers (hubs) should now be compiled with -DROUTER for the new ping code
* 'imc reload' added - reloads the IMC config/rignore files
* IMC detects if imc_idle was never called and logs this - should pick up
  what is the #1 installation error slightly more often :P
* IMC help file written (set up for imm helps at level 991, you will need
  to adjust this)
* imc-rom/imc-envy .h #defines changed for new allow/deny system
* better checking for spurious calls to imc_startup, etc
* imc_shutdown logs an error if imc_idle was never called
* rignores are now a linked list
* rignores are a more generic prefix/suffix/exact check
  ie. you can rignore player@mud, *@mud, player@*, etc
* spurious "none" on rignore list nuked
* imc/imc_info are now lists, many changes to accomodate this
* imc_remoteinfo renamed to imc_reminfo_list
* packet memory rewritten the Right Way (ring buffer, no expiry timeouts)
* I/O buffers resize dynamically
* forward() loops through active connections, not all configured connections,
  for broadcasts - should be more efficient
* closed connections go through IMC_CLOSED and are removed at the end of the
  idle loop - makes things safer with the new list stuff 
* buffers shrink if the extra size isn't used for a while
* can't 'imc add' an already configured mudname
* various cases where a NULL string _might_ have been freed fixed
* maximum packet size received/transmitted appears in istats
* config file is now colon-separated so that empty strings save/load 
  correctly (old config files should load fine as long as they have no lines
  with colons in them)
* page_to_char used instead of send_to_char for rwho responses
* imc_recv_who generates the buffer, then sends it through color_mtoi right
  at the end once. Use mud color codes when generating info in there in
  future.
* don't allow imc notes to 'all'
* imclist, mailqueue, rsockets also page_to_char'd
* rbeeps can be received even when quiet/afk
* Envy code synced better, copied imc-rom.c and patched back
* acts changed to sprintf format strings in the channel table
* calls to act() removed because of buffer overflow problems:
  ROM now uses page_to_char, Envy uses send_to_char (apparently there is a
  memory leak in the stock version of paging for Envy, you may want to check
  this)
* ROM wiznet imc-debug logging only logs the first 130chars of a packet, 
  again because of buffer size problems
* potential overflows in color_mtoi/color_itom fixed
* rignore flags can now be set. Currently these are just 'ignore' (the
  default) or 'notrust' which makes the rignored players appear to be 
  level 0 mortals for the purposes of visibility
* rignores save after changes
* color_mtoi and color_itom check for overflows (and may be slightly more
  efficient, too)
* ROM imc_recv_who now constructs replies in a buffer, this should solve
  overflow problems
* tells/beeps/who-requests to xxx@* are blocked
* NO_VSNPRINTF also does snprintf->sprintf conversions
* can't 'imc add' yourself
* Envy note code doesn't forget the date stamp on imc notes

imc2-0.7a      4/1/97

* using imc_prefix after freeing in imc_shutdown fixed
* rcvstamp initialised on outgoing packets correctly

imc2-0.7       2/1/97

* istats now returns correct info
* imc-rom.c #define fix
* spam values tweaked
* sunos compile fixes
* interp.c rearrangements for imc vs. imclist
* channel table reworked to make private channels much easier
* mud-specific channel support added
* standardised color conversion added. Make sure you tweak imc-[envy|rom].c
  for your own color system!
* Envy2 and ROM code synchronized
* spamcounter values added to rsockets
* new config fields: rcvstamp and noforward. Incoming packets get the rcvstamp
  of whatever connection they are received on; broadcast packets will never be
  forwarded to a mud which has any of the bits in the rcvstamp of the packet
  set in its noforward field. For example:
    connection A has rcvstamp=1  noforward=1
    connection B has rcvstamp=2  noforward=0
    connection C has rcvstamp=1  noforward=3
  produces the following behavior:
    packets from A won't be forwarded to C
    packets from B won't be forwarded to C
    packets from C won't be forwarded to A
* new 'imc' commands for noforward/rcvstamp setting (imc set <mud> noforward x,
  imc set <mud> rcvstamp x), 'imc set all' expanded
* mem/string marking code added to imc-envy.[ch]
* tells from the system (ie. *@mudname, saying "x is not here") don't set
  ch->rreply/ch->rreply_name
* rlist -> imclist rename in imc-envy.[ch]
* newline at end of rwho in router.c added
* can't use rchannels while in quiet mode (imc-rom.c)
* rconnect, rdisconnect display better error messages if no args given
* rtells are not accepted when a character is switched
* ch->imc, ch->rreply and ch->rreply_name moved to pcdata (since NPCs cannot
  use IMC - the protocol doesn't currently allow spaces in names)
* nuked spurious ROM handler.c patch
* removed '[' shortcut from interp.c (didn't I do this before??)

imc2-0.6       29/12/96

* IS_NPC checks in imc-rom.c
* memmove() replacement for those that don't have it
* new_qnode bugfix, imc_ll_shutdown divide error fixed (thanks Erwin)
* export anything which uses a string so I can walk it for string checks
* rlist formatting fix
* rx packet count without IMC_PARANOIA fix
* fix freeing NULL strings occasionally in mail subsystem
* rignores work for mail
* when there's a non-direct 'best route' to a directly connected mud, send
  the packet along both connections just in case
* use all names in the paths of incoming packets to update the routing table,
  not just the sender
* increased memory size/timeouts AGAIN. sigh..
* exported imc_isignored from imc-comm.c
* BIG bugfix in inpath that was causing nasty echoing
* another bugfix in imc-mail for freeing an invalid mailid in free_idlist
  (reported by Lordrom)
* lots of structures exported, memory/string marking functions added for
  mud consistency checkers
* rquery info only appears on the list if its supported
* delete_mq would access memory after freeing it, fixed
* mail to multiple muds should work (ie. note to a@b c@d e@f)
* lots of formatting, commenting changes
* config files are now standardised, with a prefix being passed to imc_startup.
  This means you can eg. run multiple muds off the same directory without
  conflicts, or set up an imc subdir and pass 'imc/' as the prefix.
* rlist renamed to imclist in patches (too many conflicts with the common OLC
  command of the same name)
* header files reformatted
* use vsnprintf in logging fns if available
* system-dependent stuff handled in one place (top of imc.h); currently
  provides replacements for memmove, strtoul, vsnprintf, strerror (primitive)
* imclist port numbers >32767 displayed/saved correctly
* istats divide error (okaaay, istats just on a reboot _might_ trigger it :)
* rignores save/load
* primitive anti-spam code in place (the thresholds will probably need playing
  with)
* rignores affect rwho
* "0ms" unknown pings now appear as "unknown" on imclist

imc2-0.5       03/10/96

* fixed 'output buffer overflow' loop that occured when using the router code
* be less draconian in branding a connection 'unknown' in imc_getdescname
* rnote is in :) .. see imc-mail.[ch] and additional patches in Rom24/
* IMC_PARANOIA additions for path/sender checking
* close old connections in serverpassword to avoid the double-connection
  syndrome (ick)
* min level to see rchat etc. is now 5, in line with the command levels
* imc statistics added (imc_getstats, do_istat, etc)
* added basic routing (a bit messy; I need to clean up the interface between
  imc.c and imc-comm.c)
* imc_mail_showqueue, do_mailqueue, etc. added
* router changes for mail handling
* moved lastinpath to imc.c, exported imc_firstinpath and imc_lastinpath
* removed IMC_NOFORWARD (didn't work right anyway, and the new routing code
  breaks it even further)
* allow blank lines in the config file (*bonk self*)
* changed default rquery type to 'help'

imc2-0.4b      26/09/96

* stupid bugs in imc-rom.c, router.c fixed

imc2-0.4a      25/09/96

* changed rquery to pass strings, not integers

imc2-0.4       24/09/96

! Note that you will have to add imc-version.o to your Makefile if 
! patching from imc2-0.3!

* decided I ought to have a CHANGELOG, and made one :)
* added code to automatically find the default out-queue size for TIOCOUTQ
* exported reminfo (now imc_reminfo) from imc-comm.c
* cleaned up imc-comm.c namespace
* changed all memory allocation/freeing to call wrapper functions:
  imc_malloc, imc_free, imc_strdup, imc_strfree (all in imc-rom.c)
* fixed some braindamaged code in imc-comm that was doing what imc_getindex
  does, the hard way
* changed behavior of imc_disconnect to kill all unconnected-but-pending-
  connection sockets for the specified mud
* added rename to imc_command
* bad config file lines are now logged, and it continues to read the file
  after an error is encountered
* bugfix in imc-rom.c for ch->comm vs. ch->imc
* exported imc_internal and imc_vinfo (previously vinfo) when 
  IMC_INTERNALS is defined in imc.h; made imc-version.c independant of imc.c
  and removed the #include
* added the Envy2 patches from Erwin S. Andreasen <erwin@pip.dknet.dk>
  (imc-envy.c, imc-envy.h, envy2.diff, INSTALL.envy2)
* added some randomness to the reconnect times to avoid the simultaneous
  connect problem
* increased the memory timeouts and array size somewhat
* increased the time between pings to reduce the ping traffic somewhat. The
  real solution is to put in some decent routing code, but that is some
  distance away.
* sanity checking on packet interpretation/generation, this time bad (hand-
  generated) packets shouldn't crash every mud on imc ;)
* updated flag checks for IMC_DENY
* updated copyright in headers so I don't have to keep changing the version
  number :P
* added a 'type' field to rwho; type 0 is normal rwho, type 1 can be for
  mud ads/info etc, no other types defined yet. rquery (new command) 
  maps to rwho(1), or the user can specify a query type. Note that I 
  modified envy2.diff by hand to add rquery, and modifying diffs is always a 
  little hairy; YMMV.

imc2-0.3       20/09/96

* released first public version of the code
