NOTE: If a todo matches a bug/enhancement listed on http://bugs.efnow.net
then the bug number should appear in brackets (ie (#15)) - madmax

- add more stderr debugging (ircd -s)... one for every place we syslog()
- make wrapper function for res_init() to do spare_fd crap
- ircd -s doesn't work through a restart
- re-implement first param in m_lusers()
- trie' channel name list
- SSL support
- finish RFC'ing m_message.c
- add dns_query_host and dns_query_port options to serverinfo {} block;
  dns_query_port would be similar to query-port in BIND-8.

----
is-'s TODO list

- umode +R for registered nick
- TBURST
- change nick instead of kill on nick collide
- dynamically extensible parser for modules
- modularize channel, network code etc (not just commands)
    we can use override_function() or similar for this
- username/passwords (iauth ?)
- channel modes to allow/prevent talking on channel
  by hostmasks. 

-----------------------------------------------------------------------------
madmax's TODO

- Fix /links *mask* for non-opers/server_hide output (#4)
\ Make /links from file server_hide only (#6) (done?)
- Make stats p just notice opers, rather than return a list, when
  server_hide is on (#13)
- Split up server_hide into parts (#17)
- Client UIDs (ts4 style?) for cookies (later for persistent nicks)
- Definable server region or 'global' (open I) for /links output (#20)
-----------------------------------------------------------------------------

Adrian's TODO list

* make the reserved FD limit run-time tunable, esp from comm_open()
  This involves making fd_table[] a dynamically growing/(don't bother with
  shrinking) list.. have the max fd list configurable in the conf file..

* Fix the anti-client flood code to not be so anal when people connect -
  I've counted all lines from a client as being a flood, so if a client
  connects and issues JOIN's to a whole bunch of channels the flood
  protection stops everything coming through at once .. (not that I mind.. :)

* PLEASE redo all dlink_list management with the stuff in src/tools.c

* In the server outbound connection code, make the sendto_realops()
  logging more sane. Ie, if there's an error, also log the errno string.

* look at the old Listener code in s_bsd.c before I chopped it. Notice
  the anti-flood code in there. Make sure the same load-checking stuff
  is in listener.c

* look at mo_die() - find the restart function, break out the shutdown code,
  and tidy shit up!

* get send_message(), replace comm_setselect() with send_queued_write(), see
  if the optimization works

* remove aconf->ipnum, since we're doing a DNS lookup each time we
  connect. If people don't like this, they can (should!) be running
  a name cache locally!

db-->>ummm aconf->ipnum is used for IP based klines only, not for DNS

* Add the IRCnet(?) split logic for nick collisions - on a nick collision,
  change to "%d-%s", random, nick

* Hrm. Since Diane changed the user->channel code to use dlink_lists,
  she's made some things faster (deopping lists of people in a net.join,
  finding an op, etc) but some things slower (deleting from the channel,
  change_channel_membership(), etc.) What needs to happen is that for
  each channel a user is on, a flag needs to be set tracking which list
  they're on so we don't have to search the lists when we want to change
  their status. This could become a slow-CPU sticking point.

db-->> Actually, the old code was just as slow at doing that, since
    it was a link list of SLink's with a flag denoting whether client
    on channel was an op or not... With a channel of 100 clients and 
    thats 100 link SLink's

* Look at removing the whole DNS ref_count evilness now that the cache
  has gone away. We should be *copying* the returned result, not just
  storing a pointer to it. This will make a lot of the code much simpler.
  (Hopefully.)

------------------------------------------------------------------------------
Little things to be done given enough time and initiative -Hwy

.  Bring back CIDR support in operator blocks
   user="wcampbel@144.26.*"; # works - even if the hostname resolves
   user="wcampbel@144.26.0.0/16"; # Does not work
.  The 3 logging path settings are NOOP in the conf (logpath, oper_log, 
   gline_log)
.  Have a few more things /quote SET'table
.  More documentation on the gettext stuff, enough for a layman to use
.  Extra \r\n sent to the log file by ts_warn needs to go (Done?)
.  Fix tools/fixklines.c and tools/klineParse.c for the new kline.conf
   format.
.  Update tools/mkconf as well.
.  Fix convertconf more
.  Do we still need start_ircd.c and ircd_start.c?
.  Look to see what other STATS commands can be made optionally oper-only
.  2 pass conf parser (grab classes before anything that uses them)
.  Use scrypt or just plain 'crypt' libs on FreeBSD, we support both types
   of passwords without any effort currently, why should we restrict ourselves
   on some systems?  Note:  scrypt only supports MD5, descrypt supports both
.  m_map.so in contrib
.  m_mkpasswd.so in contrib
.  Do we still need ircd_start.c and start_ircd.c?
.  Re-add the ability to set usermodes from the conf (oldconf field after the
   O: line class)
.  Add in exemptions to D lines into the conf (old d: lines)
.  <Riedel> walter : have you implemented the motd= thing in the auth block ?
.  <mopi> still haven't made default chan flags configurable, eh? :/
.  Fix topic bursting to LL servers (broke lately for some reason)
.  Other places that the number formats were replaced with that damn %lu
.  Fix TRACE on IPv6
.  Unconfirmed reports of DNS lookups failing on the first connection to
   a server, while working fine on subsequent connections.
.  Somehow fix the bug that causes cores when an in-use message file is
   updated.
.  A FAQ
.  Major cleanup of example.conf, it's a disgrace
.  chkconf
.  Clean up the manpage (ircd.8)
.  More translations!


-- Rodder's list
.  Add scalable database-based authentication.  Probably part of Iauth.
   Also add support for server-side notify with the list stored in the
   auth database.  This would make ircd an awesome instant messaging
   back-end.


-- jdc's list
*  Re-write m_stats.c to be table-based, similar to m_set.  Also change
   to support funtion exit code values (int), so that STATS output can
   be "successful" or "unsuccessful" (eg. "STATS i requested by <nick>
   [unsuccessful]" vs. "STATS i requested by <nick>").
*  Clean up m_stats.c regarding it's STATS L and STATS u code.

-- Diane's list

* add logging to ircd.log of possible channel floods

* add code to log a minute worth of flooding if the ircd gets n possible
  flood messages on a channel in t seconds.. This log would be available
  to hand to authorities if requested.

-- AndroSyn's list
* Add support for my static modules hack.  Basically just add #define
  STATIC_MODULES in setup.h via autoconf.  Then modules/Makefile compile
  everything out to modules.a.  src/Makefile just includes this in the link.
