The InspIRCd Project
Home | Developers | Wiki | Forums | Bug Tracker | SVN | Download | Blog | Stats

ChangeLog/1.1 Beta

From the makers of InspIRCd.

Jump to: navigation, search
Historical Historical Material - Information posted here may be inaccurate as a result of being obsolete. This information is kept for historical reference purposes.


1.1.0 Beta 9

    *  Better way even than suggested., We need one counter, nonlistmodes_found, and start with it at 0. In the while loop, if we find any modes that arent of list mode type we inc the counter,, and if the counter is zero after the end of the loop, we can just return (we processed everything already and nothing is left)
    * As suggested (and coded) by w00t, show * as the nick when we havent set one yet
    * Split out rconnect command into its own file (this ones already a command handler)
    * Split this up even more, much smaller files that are easier for gcc to digest
    * fix for installing modules twice.
    * Add support for: "make modinstall", "make module name=m_modulename.so"
    * $(FLAGS) was omitted from build line of a directory based module
    * Fix the dependency checking to not rebuild an entire module dir when one file is changed
    * More complex module directories complicate make clean
    * Remove space indents
    * Move some stuff into utils.h
    * Add output to ./configure -update to show when it finds a directory in the modules/ dir
    * Start of moving m_spanningtree into a dir so we can split it, cutting down ram use during compile, and compile time
    * Module splitting now works!
    * Stuff to detect split modules in dirs - not tested yet
    * Move QueryQueue class into m_sqlv2 to prevent flat-out duplication of identical code in pgsql and mysql modules
    * Mass comment removal.
    * Remove/fix unused variable warning
    * It says something about how excessive our debug output is when the ssl modules have 'cascades' of 'if-then-else' whos job is ONLY to output debug!
    * Remove some debug here, cuts down boot output
    * Remove a ton of inspsocket debug
    * Remove tons of debug output from spanningtree as the first step in optimizing it for release
    * Add O_NOFOLLOW to file write call, which prevents following of symlinks making our temp file writing completely secure
    * Removing from here too., The goal is to have basically only stuff of use left, e.g.:, BUG: xxx doodad shouldnt be NULL but it is, or raw socket i/o
    * Crusade to remove debug from stable and tested parts of the core and base modules., Most of the code here being de-noised hasnt had a crash or bug in it for many months, if not a year so the debug output is useless noise in the logfile when trying to trace a bug in a REAL problem , area.
    * Remove some debug (im on a crusade to make debug mode useful, but at the same time tolerable for longer term usage on larger nets)
    * Change the format of some debug
    * Remove some debug
    * delete -> DELETE()
    * Fix some differences between how this expands partial banmasks with how the core does it. (Obviously my way was right and the core was silly ;[)
    * Make this use true and false, not MODEACTION_DENY
    * Convert all redirecting bans to non-redirecting ones when the module unloads., Stop the module allowing bans which will immediately be blocked by the core for exceeding the ban limit., Fix something else, I think, I forget what it was...
    * Fix possible segfault if sql query failed. Using a free'd char is probably not a good thing.
    * Prepend nick to user->MakeHostIP()., Maybe we should have a GetFullIPHost() or something to match GetFullHost() and GetFullRealHost?
    * Rename all these so that the names reflect the database server theyre used with more accurately -- for example, the old mysql ones were just .schema.sql, and , the postgres ones were .pgschema.sql., Theyre now .mysql.sql, .postgresql.sql and .sqlite3.sql
    * Hook qlite3_update_hook to queries to also catch affected rows on UPDATE/INSERT/DELETE.
    * SQLite3 schema for sql logging module.
    * Why are we doing append() craq here, when theres a nice cached userrec::GetHostIP() to use?
    * If you have a broken config, rerun full configure to fix
    * Initial commit of the ban redirection module. Docs, additional testing and probably a few tweaks to follow
    * SQLite3 schema for sqloper.
    * Add SQLite3 module to example config.
    * Add exec("gnutls-config --libs") in the configure macros
    * Remove some old destroy code not needed with InpSocket.
    * Dont need to send anything on the notifier socket.
    * Remove DOS newlines.
    * Now with SQLite3 support. Fully functional and (hopefully) working.
    * And take the return out again to stop w00t throwing a tantrum
    * Add return statement at the end of the special-case block for listing listmodes., Make ModeWatchers get called (with an empty parameter and adding = true) if their mode is a listmode and it gets listed
    * Someone left the colon off the 'end of list' numeric in u_listmode.h. I dont know what clients this might break
    * Fix this so that if the beforemode clears the parameter, and it was supposed to have one, we abort
    * Fix BeforeMode to have the parameter available, if there are enough parameters for the mode and the mode parameter is valid
    * Added interface 'ChannelBanList' that these two modules implement. Send a request class ListModeRequest to the module to check if a user is matched on a channel:, const char* ismatched = ListModeRequest(this, targetmodule, someuser, somechan).Send();, ismatched will be NULL if theyre not matched by the modules list, or will contain the mask if they are matched.
    * g++ is picky about default params with overloading
    * Move showhelp() into make/configure.pm
    * Slightly decraqed configure
    * OMG SQLITE3 support, almost there now =)
    * Starting tidying up the configure script, and moving a lot of stuff into functions in the make/ dir
    * Add alias:matchcase config setting (per-alias, determines wether to match case on format string) and ability for case sensitive match()
    * Make m_sqlv2.h::SQLquery extend 'classbase', for easy passing as deque parameter.
    * Allow aliasing of anything to anything, removing the need for tons of non-programmer tweaks to be modules., Also speed up matching of aliases by storing a map so we dont need to loop if we dont have an alias that looks like the current command, (when allowing aliasing of ANYTHING this is required otherwise this module would be major cpu suck)
    * Output which module is executing the macro
    * Improved detail in configure, and two new functions exec() and eval() are more accountable
    * Add eval() and exec() macros, that evaluate perl and execute commands at configure time, rather than delaying them with backticks till compile time. This picks up any errors sooner.
    * Take out unneccessary chomp()
    * Make the rpath() macro handle lines with multiple -L in them
    * Output for 'using defaults' when nothing of interest found
    * Colour coding, tidying, and more verbose output to configure
    * Extra stuff to improve buildsystem, calculate lib and include dirs at configure time rather than at build time. This means that we can also throw errors at configure time if we cant find the libraries, , rather than erroring at buildtime like we used to.
    * Tidy up the buildsystem a lot by encapsulating repeated detection routines for lib dirs and header dirs in make/utilities.pm., See the pl files in src/modules/extra for how to use the functions.
    * Get flags for sqlite3.
    * Change this to use our md5 provider rather than MD5() in the query
    * Improve handling of backend server being down. Also decraq some debug output that was really confusing me.
    * Update inline documentation for DelFd() so the doxygen docs will be correct.
    * Anyway the reason for this discussion - i wanted to do a test commit (insert a blank line here for it)
    * Quick tweak before work, set the default force=false in these (im not keen on 'force' at all, its major ugly hax, but *shrug* how does it even know we're , using epoll or kqueue etc)
    * Only use force if necessary! Tidy up debug output.
    * pgsql should now work thx to added posibility to force a fd out of the socketengine. This should only be used as a *last resort* when dealing with 3rd party libs that invalidates a file descriptor beyond your control.
    * SQLConn rewritten to use EventHandler instead of InspSocket. This is much neater and gives total control of destroy and delete of resources.
    * If we have a bitmask of 0 in apply_lines, dont even bother to run the function!
    * Also, if the line already existed, dont OR the value in, so that if all the say, glines we receive already exist, dont bother to apply glines
    * Clever stuff for applying lines (this needs testing);, When bursting, we clear a bitmask to 0., When we receive glines etc, we OR bits in the bitmask to values of APPLY_GLINES, APPLY_KLINES etc depending on what we've received, e.g. is it ADDLINE G, or ADDLINE K., When we ENDBURST at the end of the burst, pass the bitmask to apply_lines, rather than APPLY_ALL , NOTE: While not bursting, the bitmask is flushed after each gline, but this is still faster as only the line type we just added will be ORed in.
    * Only send snotice if the eline doesnt exist yet
    * Improve speed of these, and only send out snotice if the gline doesnt already exist
    * Change stats z to show volountary and involountary seperately
    * Comment on a lot of recently added stuff that wasnt properly documented (until now)
    * Someone forgot to make correct deps for timer.h. Fixed., Added InspTimer::CancelRepeat(), we can use this within the Tick method to cancel a repeat so that the timer is deleted after the tick, as DelTimer isnt safe within the Tick method
    * Add a call to InvalidateCache() to fix this:, [04:48] --- peavey is now known as PEAVEY, [04:48] --- peavey is now known as peavey, Second line should be PEAVEY -> peavey
    * Made the real name value for /admin optional (line isn't displayed if not specified)
    * Whoever added clearcache must have been asleep; they left the definition of it as cmd_admin::Handle
    * Made m_denychans support wildcards
    * Have ConvNumeric correctly convert 0 to 0 instead of an empty string.
    * Revert repeat timer to old one, to make sure it only runs if list was actually being called by a user.
    * Add specialization for ConvToStr on a single char, return std::string(in,1)
    * Overloaded template classes for mucho improved ConvToStr speed
    * TimeSyncTimer now uses repeat timer.
    * Make safelist use repeat timer.
    * Tidy up (optimize, improve) chanrec::WriteChannelWithServ
    * Tidy up an if/then/else chain into a switch
    * Cache channel max bans value to save an O(n) loop of match() on every ban (etc) add
    * cmd_whowas now uses the shiny new repeating timer.
    * Tweaks to mode parser
    * Add repeating timers, and make an hourly prune of the dns cache, otherwise a cache entry might not be cleared until a user with that ip comes back!
    * Someone forgot to add clearcache to the makefile install (thanks AnMaster)
    * getpidfile was not working at all. Fix it to work as intended.
    * Move whowas containers into whowas class to avoid all cpp files including cmd_whowas.h to try and destroy the containers on fork exit.\nThis would cause a segfault when forking due to the containers destroy being called multiple times, but still allow the server to fork it's child and leave the server running.
    * Add /CLEARCACHE, oper only command which completely purges the DNS cache -- useful if you just want to cut down on ram use at any point.
    * Oh, this tweak is for w00t -- rehash will remove expired items from the dns cache
    * Update a comment, and touch a header just to make people rebuild stuff >
    * If the result is cached, dont bother waiting for the dns timeout, release them at the next timer tick if all modules are satisfied
    * Document dns caching, add a "bool cached" to OnLookupComplete method in Resolver, and and add " -- cached" to end of 'looking up your host' string if their result is a cached result
    * And its all done and working!, (note, we still need to test cache expiry)
    * DNS caching stuff (almost done)
    * Tidy up old MaintainWhoWas.
    * DNS Stuff - this wont work right yet, it will soon (tm)
    * Move all /WHOWAS related out of core and into cmd_whowas.
    * Fix m_testcommand which tries to use an undefined pointer as ServerInstance
    * Add TTL stuff to dns system (pass it to inherited objects)
    * Rename all the classes in m_httpd to be HttpServer etc,, Make a copy of the request in the http client so we dont need to leave pointers hanging around in the requestor module
    * Make this use the newer format of class Request (this module was still using the old cast-data-to-char*-and-use-getdata-method)
    * Added m_http_client - this is incomplete and won't work at all, don't try to use it
    * Adding CIDR support to m_check: as easy as adding a 'true' to match()
    * add internal cmdhandler that will make it easy to move stuff out of core and into a reloadable command.
    * Dont try and show idle time of remote opers in STATS P
    * Fix remote opers not being added to all_opers.
    * Fix modecount on remote NICK
    * Fix SVSJOIN desync (nothing too severe, don't panic) noticed on CS, found by me/Brain
    * Extra check so that we dont get -O-s when doing:, MODE #chan +Osnt, MODE #chan -O+n-s, (the +n would get dropped, but the - and the s get put in the mode sequence), To fix, we store the last *successful* state change, as well as the last attempted state change.
    * Fix for bug #186 reported by peavey
    * Fix minor NICK / modes issue that goes against our public spec, and crashes denora when introducing clients from a remote server
    * Fix desync with halfop and voice when opped (this happens because we were ORing the wrong value in chanrec::ForceChan)
    * Fix crash when unloading ssl module on shutdown -- there are no port objects to set the description back to 'plaintext' on, here.
    * Fix oper count, we cant decrement ModeCount('o') from the userrec destructor as its already been removed earlier
    * Repeat after me class, deleting values that arent newed isnt good for your health
    * Run ./configure -modupdate to fix "make install" error. INSTMODE doesnt seem to be inherited by src/modules/Makefile unless its passed in MAKEARGS
    * Merge buildsystem tweaks from darix:, $ patch <inspircd-1.1b8_build_system.patch , $ patch <inspircd-1.1b8_mod_permissions.patch , Thanks :-)
    * Massive speedups for applying and checking perm xlines - matches_*line() now has a permonly optional param, and apply_lines can be passed an APPLY_LOCAL_ONLY., Also, improve speed of config reading stuff when reading in the lines

1.1.0 Beta 8

    *  Fix lusers breakage introduced by latest set of optimizations
    * SirOlli gets credit for this fix, because he was the only one willing to work with us till we cracked it
    * Fix for crash in desync of whowas lists on rehash. Also less mem leakage on adding to whowas.
    * Remove a TODO comment. Also added support for <databaseort> option since r6213 so we can now connect to other ports than the standard mysql 3306 port.
    * m_mysql can now do REHASH proper. Detects any changes made to config and loads/removes as needed.
    * Fix: If sql user and pass matched, but not operclass or host, conf based command would NOT be called and request would die quietly without notifying the user or send SNOtice of failed attempt.
    * Use SQLhost from m_sqlv2.h and tidyup some code. Plus throw less module exceptions and warn instead.
    * Add class SQLhost that represents a <database> config line.
    * Update cloak keys example to use hex definition of the right length
    * Add support for suffixes K, M, G (kilo, mega, gigabyte) and prefix 0x (hex)
    * Made 'make modclean' and 'make distclean' clean out the default lib/ install directory
    * Fix to allow for OnRehash to know what user initiated the rehash
    * Make sure that if an oper opers up and has an swhois in their opertype or oper tag, the swhois is sent out as metadata
    * This should fix it on two fronts: missing Implements() value, and OnWhois doesnt work for remote, so instead we hook OnWhoisLine
    * Fix odd desync in FJOIN (this was some hax we put in, and forgot to take out)
    * Fix this so it works properly, and removes the descriptions on unload (when the sockets revert back to plaintext)
    * Add missing feature: /rehash reinitializes dns subsytem (and can handle changed addresses)
    * Tidyup a bit, get rid of some valgrind warnings.
    * Casting for conciseness
    * Make this new idea O(1) instead of O(x*y)
    * Cache invalidation in the wrong place, fixes FHOST remote host change bug
    * <hostname:charmap> defines the valid characters in a hostmask (this is for you webs to obsolete your patch )
    * If a user has a QUIT message matching a KILL type filter, we cant KILL someone whos already quitting (what will they care) so treat it as BLOCK and filter their quit.
    * Make filters work on PART and QUIT messages too., NOTE: If you use the type 'block' on a PART or QUIT, the text of their part or quit message will be replaced with 'Reason filtered', as we cant block the entire line without breaking clients., Satsifies request in bug #184
    * Make it safe to lose connection to sql server.
    * Fix broken cloaking introduced by last commit (we need to invalidate the cache after setting the new string, not before)
    * Remove a line of debug that could crash Log.
    * Properly document support for libhamsters
    * Change delays to 1 sec., NOTE: The chances of this actually waiting for 1 sec on any sizeable network are miniscule
    * Now REHASH checks for same and old connections, same as the DNS resolver. So that the connections are only reset if things were changed. \o/
    * Tweaks to instantiate less stuff when writing to a bunch of users
    * Tons of optimization of WriteChannel, WriteChannelWithServ, WriteCommon etc, dont call userrec::GetFullHost or snprintf for every item, call it just once., Turns O(n) calls for every write into O(~1) calls per write., Remove some debug from the socketengines which makes debugging hard on large channels (write availability message)
    * Add unregistered user counter, this may also fix the (minor) m_conn_lusers shows current connection as unregged
    * Change description for insp_aton since only a positive return means convertion was a success.
    * Majorly funk around with this, still needs check for config change on REHASH.
    * That should make it load/unload, still needs REHASH done proper.
    * Add counter system for umodes to get rid of some O(n)
    * Fixed search and replace, code pilfered from m_alias (i think someone misread the help for std::string::replace...)
    * A few fixes, but i cant see why the reverse check doesnt work
    * Fix desync (modes not being pushed to remote servers with send_mode event)
    * Majorly rewrite to totally funk up SQL logging module. Works well with both MySQL and PostGres now.
    * Should fix bug #183 (rconnect issues), thanks Bricker
    * Writing beyond malloc'ed mem of a char pointer will crash with a vengeance. Fix it by actually doing the +1 mentioned in the comment above, but lacking from the actual code.
    * Forgot to init it, clean up mem leakage too and log X-Lines proper.
    * Also using new interface methods, and maybe less crashage.
    * Change the SQLutils and SQL providers to also use interfaces for proper unload order, taking away the need for a static m_sqlutils. Depend order: m_sqlutils -> sql providers (m_mysql m_pgsql) -> sql modules (m_sqlauth m_sqloper).
    * Fix mem leakage in reading in and connecting to databases and have destructor call mem cleanup too and end the endless loop too so /RESTART and /DIE works with no segfault.
    * Add m_lockserv to example conf.
    * Fix for empty 005 lines
    * Tidy up indenting in here and remove a ^M
    * Reasonably sized fix - when adding modes in modules, be sure to check the return value so we dont load two modules with conflicting modes
    * Add support for LOCKSERV/UNLOCKSERV to block/open for new connections. Thanks to LeaChim for first version too.
    * Add cleanup of objects on readconf and in destructor.
    * Remove an extra delete that caused a segfault.
    * Fix deprotectself=no not working.

1.1.0 Beta 7

    *  have configure detect SOMAXCONN and store it in a string define, SOMAXCONN_S
    * Add defaults for a ton of config vars, fix indentation, and add MAXCLIENTS_S to avoid one of the itoa()'s
    * Change to use std::string::iterator rather than making a copy of the pointer and using .c_str()
    * Document new blockcaps options in example conf.
    * Add support for config option for percent and minimum string length +P will trigger on.
    * Add some defaults to serverconfig, removing need to set them in validate methods. Still more to do in multitags.
    * Also add support for default values for ConfValueBool and ConfValueInteger in configreader, and for ReadFlag and ReadInteger in modules.
    * Tidyup a few var inits for whowas and ircu style prefix.
    * Add possibility to define default value for ConfValue in configreader and ReadConf in modules.
    * Fix m_httpd always crashing in destructor if no active Timeout.
    * Fix ISON with multiple lines of ISON response, canonize the responses to weed out dupes, because trillian's irc support blows donkeys
    * Fix broken +G for AnMaster (thanks for pointing out the bug), Also: MAJOR speed increase for *any network that loads m_censor*!, It seems that this was looping all the censor items (not attempting a replace though) for all channels and users, even those that WERE NOT +G!, Fixed.
    * Correctly ignore commented out includes
    * SQLQuery operator% and operator, now support any data type, (these are templated, and pass the type through ConvToStr())
    * Add new people to /info
    * Tidyup Leet Caps Like This, and display PID when performing operations
    * Whoops, crash on sighup due to passing null argv and argc (similar to rehash, throwback to old code)
    * Fix the launcher for two situations:, * pid file defined, but in a comment (ignore it), * pid file not defined, because its no longer manditory (assume configdir/inspircd.pid)
    * Change argument parsing to use getopt_long_only().
    * Fix --with-max-clients not taking a parameter (reported by erich)
    * Fix a bug in whowas that could desync list.
    * Add whowas usage to stats z.
    * Add call for OnGarbageCollect to the hourly cleanup
    * Add OnGarbageCollect method
    * Do garbage collection of hash map automatically every hour
    * Fix loop when quitting multiple users (this is probably whats eating cpu)
    * Better checks for NULL log handles
    * We can't log in SocketEngine:elFd(), because the fd we're removing might just be that of the logger!
    * Crash on /rehash fixed (old code in here passed NULL, 0 as argc, argv, this is BAD BAD BAD.)
    * Close logfile on rehash and reopen (it was only doing this on sighup for some reason)
    * Dont sleep if there is a diedelay of 0
    * Fix exit in wrong place, and add new exitcodes.h
    * Fix bug in m_dnsbl, a condition is always matched because someone was using unsigned int to check a return val that can be -1 *slap w00t*, Change around the way exit codes are formed so that we can return a sensible exit code that reflects why inspircd exited
    * Program termination (including SIGTERM) now calls InspIRCd::Cleanup() which does most of the duties performed by InspIRCd::Restart()., This means that on controlled shutdown we give the modules a chance to unload, etc, and close our sockets and free ram in a proper way.
    * Fix issue where the last module to be loaded wasnt unloaded by restart
    * Use GetModuleCount() rather than the member var
    * Fix glitch when restarting on 2nd pass of module unload
    * Add more comments., Catch CoreException in cmd_restart, and if we catch one, just exit(0). Theres very little else we could do.
    * Close client sockets too (do these last)
    * Unload as many modules as we can on restart, and close listeners
    * Refactored /RESTART (and added InspIRCd::Restart(reason)), Fixed bug in m_ziplinks, assigning instead of testing a var (gcc 4.1.1 picked up on this, 3.4 didnt)
    * change userrec int timeout to time_t since it's a timestamp made of TIME + users connection class timeout.
    * Uninitialized values: fun for ALL the family this xmas time.
    * Add ConvToInt() template to go with ConvToStr() that we've had for a while
    * Refactor connect allow/deny lines
    * Reduce logging caused by mode changes
    * Fix for alias var names within aliases
    * Fixed to compile properly with -O; keep in mind that this is not supported, use at your own risk.
    * Removed a pointless check in ./configure --clean that made it only work with one dash
    * Fix for bug #180, logging is not threadsafe, mutex it (ew, luckily we dont log much)
    * Proper fix for CS server crash, forgot to delete chanrec* from users chanlist on PurgeEmptyChannels()
    * Crude hotfix to what's been crashing chatspike
    * This should fix the issue with unsetting +J
    * When we handle a READ event on a user, return immediately., This is because the read event may remove the user, in which case the !empty and quituser check below will address invalid data!
    * Fix server prefix on JOIN.
    * Avoid no such nick on non oper attempting to view modes of a user.
    * std::string something = "";, is the most redundant and wasteful thing in the world, apart from unrealircd. BE GONE WITH IT!
    * Then, realize you got your subtraction back to front.
    * Really clever VOODOO., RegisteredUserCount() used to take longer to execute than UnregisteredUserCount(), as all unregged users are local, so you only need to count in the local , vector not the global map., Therefore, make RegisteredUserCount() just return this: this->UnregisteredUserCount() - clientlist.size()
    * Refactor dns.cpp to use an array of request types rather than map, for O(1) lookup time
    * Fix bug in m_dnsbl: Only the first <dnsbl> tag would be processed.
    * Fix for new m_helpop
    * Advance the version number to beta7+SVN

1.1.0 Beta 6

    *  Add format="" value, at request of Emeric., See: http://www.inspircd.org/forum/index....pic,245.0.html
    * Config option added for prefixed channel NOTICEs and PRIVMSGs to turn on/off IRCU style of adding prefix to outgoing text.
    * Add stuff so that the core catches CoreException properly
    * Change m_helpop to use the new boolean flag in ReadConf for allowing newlines, tidy up text formatting a bit.
    * Add an optional parameter to ConfigReader::ReadValue which defines if we want linefeeds or not., Tidy up some duplicated code in configreader (error reporting), Change ModuleException to inherit from CoreException, have the configreader throw and catch its CoreException on fatal error
    * Fix all the left out examples that dont get copied to the config dir on install
    * Add some comments to explain whats going off in one of the TreeSocket constructors
    * Not sending capab when theres no transport module attached to a server socket
    * Get rid of HelpopException, use ModuleException thats had reasons for ages now
    * w00t: the power to rewrite modules in the leap of a small tiredness barrier. helpop refactored to use a leet cached map lookup, should be fast, leet, cool, etc. I'm going to bed.
    * Make SNO notice for +o global
    * Make irc::spacify take 'const char*' instead of 'char*'
    * Linefeeds in quotes, just for w00t., WARNING: THIS NEEDS SOME EXTRA STUFF TOMORROW: Someone remind me to add a 'no linefeeds' bool flag to ConfigReader::ReadValue, because a lot of values should NOT have linefeeds in!
    * Remove libIRCDaes.so from install
    * Usermode +G allowed opers to change other user's modes. As the core doesn't follow this behaviour anymore, neither does it.
    * Fix setting of * for bans in m_messageflood, this has been broken for quite some time and nobody noticed? , Spotted on barafranca, tested on chatspike.
    * Remove doc/supported, it's obsoleted by the wiki. Happy 6000 commits, everyone.
    * s/ChatSpike/InspIRCd/ development team
    * And now, just to force you to recompile the *whole* ircd.. updated headers on the headers.
    * Still more massive commit fun. Headers in include/ still to be done, else that's it.
    * Jesus, look who's the commit whore today. More header updates, and removal of namespacing.
    * Remove global namespacing, makes modules compile FASTAH. Also massive update on headers (change to InspIRCd Development Team, extend copyright to 2007).
    * Try harder to make sure the ERROR string gets sent when closing a connection
    * Cleaning up irrelevent stuff in channels.cpp
    * Fix silly bug of the day., User was only getting a userrec::chans entry added if they had any privelages on the channel. If they werent opped, voiced, or halfopped on join, no entry in the hash. Silly brain now added a:, user->chans[Ptr] = 0;,
    * Remove FlushWriteBuffer() from DoBackgroundUserStuff(). Its no longer required here, it used to try and flush the buffer before we actually monitored write events, long ago, without seeing if it could write first, and wasted cpu. It should be removed now and doesnt seem to affect anything.
    * CPU Usage percent in stats z! yay!
    * Change how users are quit if they get a write error during the things they do., Instead of QuitUser inside FlushWriteBuffer() (potentially *UNSAFE*), go back to using SetWriteError(),, but to ensure we dont get a cascade of bad write events from the socket engine, QuitUser the user before, returning in userrec::HandleEvent, after we can gaurantee ALL other reading or writing is done.
    * Refactor userrec::chans., Old way: A vector of ucrec, MAXCHANS in size by default populated by NULLS, so you have to scan the vector to find an empty slot when joining a user, parting a user etc, New way: std::map<chanrec*, char> (the char holds their basic core permissions on the channel [voice, halfop, op]), This increases speed a ton, and removes some wtf-age.
    * Refactoring:, 1) Chain together a resize and an append, to improve the buffer read efficiency, 2) eliminate a const char* pointer by doing it purely with string, saving a data copy, 3) use iterators rather than ints and vector::size() for spooling motd and rules files to users, 4) change a usage of !length() to empty() to make it more readable
    * Fix m_watch to properly use OnCleanup, and to delete pointer on quit
    * On now-ancient freebsd 5.2.1, fix the compile by forcing the $(CC) var down the line into src/modes/Makefile
    * Turn watchlist back to map. watchlist is small, watchentries is large, only watchentries needs to be hash_map, (watchentries is the primary index of whos watching each nick, watchlist is the small nicklist attached to each user)
    * Change m_watch to use hash_map rather than map, because of the large number of entries we deal with it will usually be faster
    * Improve the way 005 ISUPPORT is sent to users when they connect, cache it in a much more sane format which is much simpler to spool to them
    * Properly fix 'changed nickname from one thats on your notify to one thats not' condition.
    * New m_watch that should be hundreds of times faster (im not joking either)
    * Avoid pointless vsnprintf() when our loglevel doesnt meet requirements
    * Improve how we handle ELINEs on connect, turn O(2n) into O(n) (thats the best we can do with g/k/z/q checks for now )
    * New clone counting mechanism (this isnt tested yet)
    * Make FounderProtectBase::remove_own_privs a reference, so we can change it on the fly without needing to re-construct the objects
    * Make the world not end when special commits (this will probably break)
    * Fixed a pretty nasty bug that allowed users to +a themselves if deprotectself was enabled (thanks webs)
    * Fix trivial broken stat counter
    * irc::string assign(std::string&), std::string assign(irc::string&), soooo:, irc::string foo = assign(my_std_string);,
    * Tidy up a loop a bit so it isnt for(; with a break
    * Faster, stronger, ...err no, not the million dollar man.
    * Change how assembling of multiple lines works, avoid data copies
    * Fix EOF conditions on inspsockets which are having their write() handled by modules
    * Better handling of write() failure, but this might still not be exactly right.
    * Initial commit of m_dnsbl, v2.0 - based on satmd's 1.0 m_dnsbl, modified to work with 1.1 (and hopefully work a bit faster. Removed tag option, as it doesn't broadcast to multiple servers, leaks memory, and is largely useless.
    * Clever pointer voodoo class for binary-safe ziplinks output buffers, PLUS: Fix for random epoll dispatchevents crashes.
    * Fix case insensitive compare (operator ==) between irc::string and std::string and vice versa
    * Add InspIRCd::UseInterface and InspIRCd:oneWithInterface, and also InspIRCd::GetInterfaceUseCount()., These can be used for one module to lock other modules in memory that it depends on, this way they can, enforce an unload order so that you cant (for example) unload m_ssl_gnutls.so whilst m_spanningtree.so, is using it for ssl server to server sessions (in this case, youd have to unload spanningtree first,, THEN ssl_gnutls, to satisfy the dependencies and unload orders)
    * Change this to prepend its lines to stats z which already shows misc stats
    * Add very funky stats C (compression statistics) for people using m_ziplinks
    * Record compression ratio stats for a /stats char (this isnt finished yet)
    * Fix bug found on barafranca, where quitting the user causes a cascade of error state notifications without actually quitting the user until much later, wasting cpu time
    * Host cloaks for resolved hosts are wayyyy too long, cut the hash down to the first 8 chars
    * Fix m_conn_waitpong not to use base64 uneccessarily.
    * Removal of AES, this is no longer required. (This also eliminates code that isnt ours, and was some public domain crap)
    * Update comment's ascii diagram to be more like those in an RFC
    * Add m_ziplink.so to example conf
    * Rename ssl.h -> transport.h, as its now used for ziplinks, Document the data format used by our ziplinks (its not just deflated data, there has to be a length header on the start)
    * Add buffering of last frame, if we dont read the whole frame
    * Add prefix to /PRIVMSG, similar to bug #178 for /NOTICE
    * Fix for end of handshake detection, HANDSHAKEN is a silly name for a const :/
    * add a comment to the example config reminding users that gnutls and openssl are interchangable and compatible, and you dont have to use the same one at both ends of the link for it to work.
    * Don't allow the user to define a non-existent transport in the <link> tag
    * Update docs to reflect new stuff (OOO SHINEY SPANGLEY SPARKLEY NEW STUFF)
    * Correctly report the transport names when server links occur
    * Make it all work properly. Have it wait for handshake to complete before sending anything down the line
    * It works! WOO AND YAY! (this isnt finished yet, only an idiot would use this on a production net atm)
    * Whoops, some stuff was sdrawkcab!
    * Move around the initialization stuff so it gets called in the right order
    * Add stuff for <bind:transport> and <link:transport> that should be the transport name, e.g. 'openssl' or 'gnutls'. I didn't name it <bind:ssl> because it might be used for other stuff than just ssl eventually.
    * Enumerate InspSocketHook modules
    * Add stuff so that TreeSockets can call any found hook modules
    * Add the stuff required for the InspSocketHook interface
    * Rename ssl_cert.h to ssl.h, it will contain the interface for hooking inspsockets
    * Add OnRawSocketConnect, we've not had it till now because we've not needed it
    * Not yet tested -- allow iohooking of inspsockets
    * (1) make command reloads be announced to opers, (2) change loadmodule and unloadmodule to say WHO did it, like with /reload
    * Bad w00tie bad, /who isnt checking +s for channel /who!
    * Update example conf to new way of using oper password hashing
    * Tidy up cloaking algorithms a bit
    * Throw if we cant find any modules that implement our interface
    * Document FindInterface, PublishInterface, UnpublishInterface, fix a bug where the interface wasnt removed when it was decremented to 0 implementing modules
    * Make hash algo names case insensitive
    * Allow for querying the hash modules for the hashing algorithm name
    * Untested, undocumented PublishInterface, UnpublishInterface, FindInterface.
    * A system to group together modules which share an identical request/event API, so m_oper_hash can enumerate modules which implement HashRequest
    * This has changed again, i suggest you dont bother trying to keep up till im done
    * Change this a LOT., <oper blah.... hash="md5|sha256" pass="blah...">, It will now only check pass if you put the hash= in, people have been bugging for this for a while., note the m_oper_hash module will try and detect both m_sha256 and m_md5 now, and will provide /mkpasswd that can do either.
    * Here it is, the whole lot merged into one.
    * Add m_sha256 to here
    * Seperate out sha256 into m_sha256.so. API is identical to MD5 except where the class names are MD5 for MD5, these are SHA256... duh , Now we're left with a dialemma - is m_opersha256.cpp now pointless? Does anyone use both sha256 and md5 together? Should we just rename this to m_oper_hash, and have them pick their encryption in the config?
    * Add m_md5.so to example conf., HEY OM WE BROKE YOUR ALPHABETICAL ORDER AGAIN!, (this is pointless unless its placed before the, two modules that rely on it)
    * Whoops one star missing left a chunk out of the docs
    * Update $ModDep lines so that these properly depend on their headers in the makefile
    * Make m_cloaking use m_md5. Fix m_md5., TODO: Document m_md5.
    * m_md5 works now. No docs yet, CODER BEWARE!, (on the flip side, see m_opermd5 for how to use it in the BASIC sense... it can do much more than this like take different IV's or change the binary-to-hex table (m_cloaking uses this stuff))
    * Header for md5 request classes
    * MD5 service provider module (not tested yet)
    * Add nicer ipv6 cloaking
    * Move ipv4 cloaking to cloak4
    * Fix the new ipv4 cloaks to not change wildly if one octet changes
    * Forgot to include 'version' in the syntax
    * Tweak this module to always allow remove from remote, no matter what the permissions
    * Fix for bug #177, generate the version string at configure time and write it into the .inspircd.inc,, then when running the ./inspircd, output the string, this way we dont need the source code to hand to, report the version. (btw special, the doctor has cured you of perlprogramophobia)
    * Reverted the addition of ./inspircd version; I should've considered this a bit more, its flawed in several ways
    * Added ./inspircd version, requested and written by Mitch
    * Account for channels with no modes set
    * Remove an assignment from definition (damn java thinking)
    * Make the 'override' parameter actually *do* something, wee
    * LOL INFINITE LOOPS IN IRCD ARE ROX
    * CheckDie was always still here, we were just forgetting to set the die value's string
    * Fix <die:value>, its been broken for quite some time. (whoops *hide*)
    * Remote SQUIT, and god save the coder..
    * That patch (TM) of controversy, plus a minor cleanup
    * I don't know if anything actually uses this, but irc::hex is now *much* more efficient
    * Added InspIRCd::GetTimeDelta() - previously m_alltime was using a hack to get the delta, which wasn't always reliable
    * Add fix suggested by mitch to show when nicks dont exist
    * Added a missing error message to SAJOIN - thanks Mitch
    * Fixed a crash when spanningtree is given a blank line; really simple fix, and I had to wait 10 minutes to test it :<
    * O(n^n) is bad. O(log n) is better.
    * There, the guts of it are done, spanningtree now uses the exempt lists to cleverly route its messages and save bandwidth
    * BuildExemptList is becoming pretty ugly. grr.
    * Add OnBuildExemptList, which is used to build an exempt list when passing a privmsg on, but not directly processing it (m_spanningtree etc)
    * Add exception lists to OnUserMessage and OnUserNotice, to be used for smarter routing of messages in spanningtree amongst other things
    *  C DOS, C DOS RUN, RUN DOS RUN ^M^M^M
    * add m_deaf.so to example.conf
    * Provides support for ircu style usermode +d (deaf to channel messages and channel notices)
    * Tidyup, avoid ternary if() on every iteration of a loop (bad brain bad)
    * SILENCE_CNOTICE, flag 't'. Needs testing, peavey should probably review to check it fits in with what he was doing
    * Fix to work with channel notices., SILENCE_PRIVATE silences private PRIVMSG, SILENCE_NOTICE silences private NOTICE, and SILENCE_CHANNEL silences channel PRIVMSG *and* channel NOTICE., This makes sense to me...
    * now using OnUserPreMessage exempt_list instead of OnPreCommand dup code for blocking of channel messages.
    * Update comments to reflect new API
    * Add extra parameter to OnUserPreNotice and OnUserPrePrivmsg, CUList &exempt_list, a list of users NOT to write to. By default it just contains the sender, you can add more., This also bumps the module api version by one. added "CUList fixme" to peaveys module just so it builds, as this will be refactored to use the new feature that was just added
    * 005 tokens: "ESILENCE SILENCE=999"
    * Add m_silence_ext.so to the example conf
    * Add a description to an exception in the constructor, also reformat all the if() without a space that om did
    * fix a few confusing returns
    * Improved drop-in replacement for cmd /SILENCE. This first draft features server side blocking of private messages, channel messages, notices, invites based on the silence hostmask. Also you can make excludes to your SILENCE rules. See source for examples. Flames, comments, edits are welcomed.
    * Make numeric 443 ERR_USERONCHANNEL conform to the RFC
    * Make silence list removals and additions a ton faster by making the silence list a map. Note that this probably wont port to peavey's improved silence, i wouldnt bother trying
    * Improve openssl detection
    * whoops, !defined not undef!
    * Make this smarter when we dont have pkg-config
    * In answer to w00ts question, the channel might not exist, because of the following situation, user A exists on both servers., When servers link, user A is collided, but one or both servers still get the FJOIN: FJOIN #chan 1234 :@,A, of course, A is gone, the only join to the channel fails, so the channel actually doesnt exist at the end of the loop, so chan == NULL
    * Fix #176, not sure how channel can't exist after being created, but apparantly it can happen
    * Fix my fix, it crashed (thanks skenmy, sorry)
    * Disallow mode prefix # since it will mess up /whois and /privmsg
    * Removed <options:tempdir> - this hasn't been used since modules were updated to not copy before load (quite awhile ago)
    * Fix spurious deops on channel creation, pointed out by jilles, noted by a number of people.
    * fix for bug #175, change OnUserRegister to return int, and if greater than 0 = user was quit and stop propagating to rest of loaded modules. Also bumb the module API version.
    * Added *.pid to the svn:ignore for conf/ - I hate all of these files always showing up in my svn status
    * Fixed gnutls_rpath.pl to do rpath for all paths, not just gnutls - this fixes an issue with systems that want to use libgcrypt or libgpg-error in nonstandard locations
    * Also return for 7.x series > 7.3.15, this still wants testing (which versions actually have the functions, I'm pretty happy with the script working properly)
    * Hopefully uncraq this script enough to actually work, should return for versions > 8.1.4
    * Merge pgsql stuff from darix, but im sure theres something to be looked at in the helper script
    * Make opermotd and randquote paths relative
    * Apply CXXFLAGS patch from darix
    * Remove unused /usr/local/lib from helperfuncs.cpp include dirs etc, its not been needed for several versions
    * Use pkg-config to detect lib paths - thanks darix we've been looking for this for ages
    * Add -fno-strict-aliasing to shut up gcc when building with -O2. We know what we're doing with the 'punned pointer' is perfectly valid and works fine (and we've been doing it since 1.0 alphas)
    * Fix all the _FORTIFY_SOURCE warnings except "punned pointer"., We CANNOT fix this, as it is the recommended (and only) way to dlsym a symbol from a .so file.
    * Add CXXFLAGS appending thing from darix
    * Apply instmode stuff from darix
    * Since the last beta, the pid file doesnt have to be specified. If it hasnt been specified, default to <conf>/inspircd.pid
    * Change from dos to unix line endings (how did these get in here?)
    * bits_size must be protected, not private
    * Add \code and \endcode tags for doxygen
    * Fix a major whoopsie in that class i just added. It must be derived using virtual methods, because each TYPE of bitmask must have its own static allocation of flags. See the (long winded) comments.
    * Reduce size of max number of bytes in a bitfield from a 4 or 8 byte field to a 1 byte field (unsigned char)., This still allows storage of 8*255 bits, which is MORE than enough (for the interested, its 2040 bits)
    * Remove some debug, add some comments, throw exception in Get() when passed an invalid irc::bitfield
    * Fix this so it works, passes test case. Provide a method to query for a bit and to return the total size in bytes of the bitset
    * Add irc::dynamicbitmask class. Feel free to take a look and offer suggestions, as far as i can tell its about as efficient as im going to make it.
    * Make STATS i, y, c, n more relevent to 1.1
    * Fix /whois on users with lots, and lots of channels (see /whois idleserv). Was broken by the indroduction of OnWhoisLine stuff.
    * Add WHO flag 'm' to show users who have a mode sequence
    * All of the void* cast stuff gone!!!, Todo: comment all this stuff...
    * Remove tons of pointer craq (theres still a tinnny bit more to remove)
    * Don't allow a non-oper to view another users modes. This slightly tweaks the rfc, because the rfc says even opers shouldnt be able to view modes but thats just a backwards pain in the neck., Also, remove the system from 1.0 whereby an oper CAN change a non-opers modes (except +o) because all this did was confuse services packages.
    * Added <oper:swhois> to m_swhois, which will override <type:swhois> if specified
    * Tons of tweaks to the config stuff for the core
    * Tidyup and tons of debug in here, to troubleshoot an ongoing issue with gcc3.3 and what seems like a stack corruption
    * Properly zero the epoll_event in epollengine WantWrite to stop a valgrind warning
    * Inherit ModuleException from std::exception rather than classbase
    * Modify server counts in /lusers to show number of servers actually visible if you arent an oper and we're hiding ulines
    * use --iter instead of iter-- in prunewhowas
    * fix for bug #173, unsafe delete while iterating
    * Tell user command WHOWAS is disabled if disabled in config.
    * Fix PruneWhoWas to actually work right on rehash. Add debug output to whowas. More code comments to whowas.
    * Do *NOT* use local vars in ServerConfig::Read for temporary storage of values
    * Only re-initialize disabled commands if they've changed
    * add <whowas> config option to control whowas behaviour. *may break*
    * When rehashing and adding new ports, error back to the user if the ports fail to bind
    * When some (but not all) of the ports fail to bind on startup, give the user a list of the failed port/ip pairs on the terminal., Other ircds dont do this, and say 'go read the log'. I say if we can output them to a log, why not the screen?
    * Swap some stuff around, just to complicate bruteforcing
    * Make the output table chosen be unique to the actual ip so that the octet values are non-reversible., e.g. we cant figure out "if the first digit of my ip is 128, and the first value of my cloak is 09FAC, then all users with an 09FAC in them have a 128 in their ip"
    * Better cloaking for unresolved IP addresses., Now hashes each octet and joins them with '.' so you easier ban unresolved ip's.

1.1.0 Beta 5

    *  Slight hax. When bursting a channel - in the fmode, if we dont have +n or +t set this side, explicitly put -n or -t into the mode string., This is because the other side will ass-u-me +nt set because this is the default.
    * If a new channel is created, after sending the FJOIN for the first user in, send an FMODE #chan <ts> +nt, to sync the +nt on all remote servers explicitly.
    * Show chanrec::age in MODE #chan, not the deprecated chanrec::created
    * Added a notice that all people bumping the protocol version should edit a page in the wiki.
    * Protocl-Version bump to 1102
    * More funky stuff, SNONOTICE, MODENOTICE to go with OPERNOTICE, (OPERNOTICE can be considered to be "MODENOTICE os", but it saves bandwidth and cpu to send OPERNOTICE where possible)
    * Whoops, stuff in the wrong place
    * And change < 64 to <= 64, the length limit is 64 - not 63
    * Make OPERNOTICE work right
    * Fix off-by-one error in userrec::ChangeDisplayedHost, some hosts were truncated
    * Add send_opers event and OPERNOTICE command to send remote server NOTICE
    * Yes, we do want to propogate the server mode
    * Notice back to oper on invalid SAMODE
    * Needs testing: SAMODE doesnt send the actual SAMODE text any more, instead it sends a server-origin MODE
    * Allow normal MODE from a server prefix
    * Dont propogate failed mode changes
    * Add m_restrictbanned to example conf.
    * Add m_restrictbanned.so, disalows banned users on a channel from messaging the channel, changing nick, or changing the topic, if loaded.
    * We now have only one string copy for remote topics. We still need two for local though (ick) -- see comments
    * Enable removal of debug info for tiny systems
    * Eliminate two trivial compile warnings pointed out by a few people
    * A few lines here are loglevel DEFAULT and should be DEBUG.
    * Dont allow overlapped ports in these files
    * Allow checking of overlapped ports. A bit of sensible thought prevents this from being O(n^2)
    * Document irc:ortparser with comments :-)
    * Handle out of range port numbers without stopping parsing the whole set
    * Add irc:ortparser, a class to parse port ranges in the form "6660,6661,6662-6669,7000"., Needs testing, watch next few commits.
    * Make these properly detect port ranges., TODO: Make a port range parser class
    * Document port range stuff
    * Support hybrid-style port ranges in spanningtree, too
    * Allow port ranges for client ports (this is still todo in spanningtree)
    * Oops, add special-case for user killing themselves (their userrec is gone when the function returns), Also put checks in LoopCall to check that the user didnt vanish half way through the comma seperated list, if they did, abort at that element of the list., This means if your nick is 'a' and you do "/kill b,c,a,f,g die" only you, b and c will be removed from irc. (this is to be expected, really)
    * Yay, comma seperated /kill, same limits as PRIVMSG etc.
    * Improve quit messages caused by filtering, now prefixed by "Filtered: "
    * Also dont try and filter remote users. This is ick.
    * Filtering should leave ulines alone, and not filter uline notices.
    * Add fix for patch #166 (this is a reasonably big one)
    * Implement a change for bug #171. It might not be pretty in the /list output, but the rfc DOES say we must do something like this.
    * These should now be VF_COMMON, they sync data
    * Make /stats s more detailed, fix a grammar error
    * Add /stats s
    * Whoops, properly handle rehash now that new filters might be added by /FILTER
    * Document changes to m_filter and m_filter_pcre a little., Actually add the metadata stuff to Implements()
    * Implement on-burst synching of filters
    * Implement the /filter command. Note that this is currently untested, and propogation of filters between servers on burst isnt implemented yet (This is next on my todo)
    * Add gline type, and <filter:duration> value to say how long to ban for.
    * Inherit m_filter.cpp and m_filter_pcre.cpp from a base set of classes, so that changes for /filter command and gline actions etc only need to be made in one place (the base classes header)
    * Move peaveydk to core developers, jamie to contributors as he appears to be AWOL. Well done, peavey.
    * Patch from peavey to fix GCC3.3 crash correctly, without breaking other stuff randomly (<3.)
    * This should fix the empty iterator crash with gcc3.3 - thanks yet again to peaveydk for spending hours finding the issue and for the patch
    * Fixed broken syncing for glines and elines using idents - thanks to dotslasher for finding and peaveydk for finding the fix
    * Apply patch for bug #165 (compile warning for users.cpp) by peaveydk
    * Fix IPv4 resolution, spank satmd if you were affected by this
    * Fixed bug #164 by peaveydk
    * Modified the server-to-server TIME command to report the real time (without delta), and display the delta in the output from m_alltime
    * Whoops, make targets case insensitive when cutting down a comma seperated list
    * Older gcc gets confused when the only parameter has a default value? O_o, Changed an Instance->Time() to Instance->Time(false)
    * Change message to indicate that the count only includes client ports
    * Fix the 'not all ports could be bound' warning to not count server ports at this point
    * Added <options:notimesync> to the example config
    * Made the 'force' parameter to BURST and TIMESET uppercase to satisfy the pedantic brain
    * Added the <options:notimesync> flag to disable time syncing
    * Added time syncing! This is fairly simple - servers exchange timestamps and use the lowest - but should get rid of the annoying bounces for those of us who can't depend on ntpd.
    * one line tweak, if the prefix is empty, dont echo 'unknown prefix' to the debug log
    * Smart voodoo to weed out duplicates in a comma seperated list for LoopCall. voooodooo!, Thanks for the suggestion of using std::map, w00tie
    * Fix remote quit notices (some were in the wrong snomask)
    * Show ident when expiring g and k lines
    * Fix comma-seperated list handling by CommandParser::LoopCall, should fix /amsg etc.
    * As requested by satmd, inspircd will now run with no client ports configured
    * Merge peaveys patch, tracker #162
    * Merge peaveydk's example conf change., Guess what Om, we broke alphabetical order on purpose!, (actually, it makes sense, sqlauth must come before any sql modules, due to load order, or we're essentially distributing a broken config file which will confuse users as to why its broken)
    * Took out a header we needed to keep. Im done stick a fork in me
    * Revert special's sqloper change, nice try but only half a biscuit., With the old fix, it would echo out all the oper failure notices first then try again, annoying all the opers., The new version uses a CommandParser method i added, to again use OnPreCommand, halt the /oper command, but after doing the sql lookup call the original handler of the OPER command with the original user and pass, so the original handler handles the definitive failure message.
    * Switched m_sqloper to use OnPostCommand instead of OnPreCommand, meaning the config tags are checked before MySQL
    * When we get an event on a userrec of EVENT_ERROR, and errornum is 0, send the error message "EOF from client" rather than using strerror and getting: Quit (Unknown error: 0)
    * Please in the future everyone: DO NOT submit patches via nopaste. Nopaste is not designed for this, and mangles your patch so we cant apply it. gzip it instead!
    * Apply patch by satmd which performs ipv4 lookup on 4in6 users
    * Someone forgot to add m_alltime to the example conf
    * More pipe. Everyone likes pipe
    * This is tidier, we dont need a seperate bool and int
    * LoadModule will now also return false if the glob pattern matches no modules and loads nothing
    * Allow wildcards in LoadModule calls. If a filename contains either * or ? it will attempt to readdir() the currently configured module dir and load all modules which match., If any one module fails, LoadModule then returns false.
    * Added m_alltime
    * Added the send_push event to m_spanningtree (send raw text to a remote user)
    * New events for special. Event id's "new_server" and "lost_server". The data is a pointer to a char* containing the server name., Eventally, i might expand this to include more data about the server such as its 'gecos' field etc, but not just yet. Let me know what data you want first., Event source is valid and will point at the protocol module.
    * Fixed another overflow, identical to the last one
    * Fixed a little overflow, noticed by satmd
    * Remove <helpop file>
    * Remove <censor file> directive, we've had <include> for years now, make use of it.
    * Fix broken notice (relatively minor, the notice can be turned off)

1.1.0 Beta 4

    *  Error set handlin g for select socketengine, tidyup epoll
    * Close an inspsocket on getting error state
    * Socket error state stuff
    * Start of stuff to handle socket error state
    * We dont want kqueue to go into an infinite loop when netsplitting, do we.
    * Removed OnRawMode - this hasn't been called at all for awhile now, so it was completely worthless. I even tested it.
    * Add peaveydk to contributors section
    * Fix the makefile confusion removal of these headers creates
    * Update configure, remove a bunch of deprecated makefiles that have been just a #warning for about 1000 revs
    * Incorporate stats p patch by peaveydk (shows port numbers and number of clients on each port), Tidy up cmd_stats.cpp in general, turn it into a large case statement
    * Set flags correctly when receiving a module-requested write event
    * Tidy up WaitingForWriteEvent stuff
    * Fix for crash found by eggy when a user without a cert tries to oper on a fingerprinted oper tag
    * Document SocketEngine::WantWrite()
    * Fix broken quits (i broke them by taking out a check i didnt think was required -- it was. RTFS!)
    * Remove very verbose debugging of event system
    * Make this properly obey the write/read states. This ZOOMS now.
    * Select is now done, and some debug removed. Not that anyone really should be using select()...
    * Fix for laggehness
    * For users, we now only write when the socketengine says theyre writeable, setting WantWrite after we call userrec::Write()., The old way was to always try and flush the buffer after every read, regardless of wether the socket was writeable
    * Add m_hidechans: Adds usermode +I to hide an oper's channels from non-opers. Also, we don't want to load a .h in the config, Brain
    * Not tested yet: Write and read at the same time in kqueue
    * m_hideoper hooked the wrong event, fixed.
    * Add <options:deprotectself> which can allow a +qa user to remove their own +q or +a. The default of having this off makes inspircd act like it always has (only allow ANY removal of these modes via services or a founder)
    * * Fix removal of user modes when unloading the mode letter (this actually works now), * Fix m_stripcolor channel mode +S (was unsettable as it had some user mode checks in it)
    * Add and document m_hideoper, used to hide oper status from non-opers., Note: This module ONLY conceals numeric 313. Any other cloak-and-dagger, private eye stuff you want to do, like setting your host back to a non-, oper host, you must do yourself, this module wont mess with anything else, on your behalf.
    * Add 'dest' parameter to OnWhoisLine, contains the user being whois'ed (we need this for +H and probably the stuff w00t is doing too)
    * Add support for OnWhoisLine, which allows modules to change or drop any line of whois before its sent to a user
    * Whoops, wrong linfeed type on ADDLINE in netburst
    * Needs more testing but seems to work: In DoBackgroundUserStuff(), calculate the time value of when we actually do need enter the function body again, and dont run function body again till that time
    * Document <link:timeout>
    * Allow admins to set the socket timeout on server connections
    * Remove ancient copy-to-tmp system for modules, this is no longer required so long as we keep using 'install' to overwrite the files
    * Fix for crash, submitted by peaveydk
    * Removed a bit of unreachable code I added with the last commit (thanks peaveydk)
    * Return CMD_FAILURE from sajoin when given an invalid nickname (thanks Ares)
    * <pid file> is no longer a manditory tag (thanks dotslasher)
    * When loading, dont try and free the qa modes, we havent allocated them yet
    * Smart trick: the 'build complete' message is now a makefile section of its own which depends on 'ircd' and 'mods', so when using -j, the rest of the processes will wait to complete before displaying the message
    * Have 'make install' make the directories, its really make install's job and not configure's., Note that configure may still try to make the dirs anyway, e.g. if you are generating ssl certs
    * RFC1035 - dns rfc
    * Allow changing of qaprefixes on the fly with REHASH - if this happens, writeopers saying that users might need to reconnect to detect the change.
    * remove <filter file> - This is no longer neccessary as we've had includes for quite a while now., It's still required for m_helpop, because the helpop.conf has tags which clash with the main config's tags, (e.g. <server>, <oper>)
    * Allow relative path on pid file
    * Allow relative paths for motd and rules (and anything that uses ReadFile)
    * Tweak hash generation to make it faster
    * Fix broken GlobalCloneCount (AGAIN).
    * Added unsupported warning for non-interactive configure. WE DONT SUPPORT NON-INTERACTIVE!
    * Allow configuring of MAX_DESCRIPTORS by picking max number of clients
    * Fix this to display the channel name when overriding a ban, and to properly display +i overrides in the right way
    * Don't display this notice on an empty servername (which will happen if an incoming connection fails), confusing.
    * Hopefully fix override notices on channel bans, also make the override notice behaviour respect NoisyOverride properly (NoisyOverride should NOT silence the oper notice, just the channel one)
    * Remove the fucking optimization directive from configure, it's not supported, yet people keep seeming to think it IS, and whinging about it - I've HAD ENOUGH :|
    * Fix bug experienced by satmd, remove space indents + tidy a little
    * Merge guestpattern fix by peaveydk
    * Add $ModDep: special comment, similar to $CompileFlags and $LinkerFlags., $ModDep allows a module to specify headers it depends on, e.g. all of the , headers which use u_listmode.h now do this:, /* $ModDep: ../../include/u_listmode.h */
    * Fix unloading of modules that use u_listmode
    * banexception, chanfilter, inviteexception: use modestacker to stack modes when the module is unloaded., This results in e.g. one line of -gggggg rather than 6 lines of -g. NEEDS TESTING.
    * This needs TESTING: use modestacker when unloading module to group modes.
    * Give some actual information when the log file fails to open
    * Merge fix by peaveydk which stops crashes when user doesnt auth
    * More stringently fit the RFC1459 BNF diagrams
    * Respect the dns timeout value in the conf
    * Call OnError when timing out
    * DNS timeouts missing
    * Buffer more stuff up for each write by putting it into larger blocks
    * More sensible way to flush sockets
    * Make clever use of modestacker
    * Make +beIgqa be sent multiple per line, rather than one per line, using modestacker and stringjoiner., This cuts down server to server traffic a *lot*.
    * Fix sending bans on sync:, * Dont cram them after +jfJLlk parameters, * Limit them to MAXMODES per line
    * Tweaks to drain socket on write
    * Dont allow people to add censor words containing spaces silently to the censor list (which count as a null string and match everything)
    * Fix counts on spanningtree reload (this made /map look really odd)
    * Mode +W should be user mode, not channel mode (oops!)
    * Something here was loglevel default, should have been loglevel debug
    * Improve WriteLine, this should be quite an improvement as it prevents a temporary allocation and deallocation for every call to Write()
    * Use rfind rather than find when chopping strings, its faster as the \r is more likely to be at the end of the sequence not the start
    * Remove unused large vars
    * Remember to delete the tree root when unloading the module
    * Move the declaration of class Link up top
    * Remove culllist.h from here, we no longer use it.
    * Remove another 'using' for a symbol we use only once
    * Add a ton of comments to make this much more useful now (putting it all in a class essentially forward-declares the lot and gives opportunity to comment), remove 'using namespace std' which we dont need.
    * Brain->GoToTownOnThisModule()., There is now NOTHING in the global namespace in this module. it's all passed around by class pointers, keeping the exported namespace clean
    * Finally take ServerInstance out of the global scope in this module, amongst a ton of other stuff., Put it all into a class called SpanningTreeUtilities and pass this class around when constructing new objects.
    * Added a tiny bit more logging to LoadModule, to log to default loglevel when a module is loaded
    * Multiply API_VERSION by ten if IPV6 is defined, to prevent modules built for an ipv6 insp being loaded into an ipv4 insp (the sizes of structs such as userrec and inspsocket are different when ipv6 is enabled)
    * Allow * in override to mean all tokens in 1.1
    * Always allow a user to dcc themselves, Only return CMD_SUCCESS when a user is added or deleted, theres no use in propogating HELP or LIST
    * Idea from nenolod, dont allow you to add yourself to your own dccallow list (!)
    * Fix checks on duration, this isnt valid, you cant compare a char* as an int:, else if (parameters[1] == 0)
    * Update syntax help to include HELP and LIST
    * you can't compare userrec::nick with ==, its a char[] buffer...
    * if (dl) { do_something() } else { delete dl; } , no no no, you cannot delete null pointers!
    * Indents all fixed, its all tabs now. Next person i see using spaces is going to get clobbered with the wide end of a tennis racket!
    * More crashbug fixage, half way through indent fix
    * This compiles again now -- would have been very unstable in its old state (oopsy)
    * Add m_dccallow module and detail configuration in inspircd.conf.example
    * Only tick the timer when there are people doing /LIST, as suggested by special
    * Fixed a crash when unloading m_safelist (timers weren't properly tracked to be deleted)
    * Fixed percentage in m_tline (division was backwards, so it displayed 200% instead of 50%)
    * Replaced operonlystats with userstats to improve security
    * Add distclean, does the same as squeakclean, just for traditionalists

1.1.0 Beta 3

 * Fix broken InspSocket timeouts that left sockets in use in kqueue
 * Make this module propogate remote modes by directly calling the MODE command handler rather than using SendMode which would also require spanningtree metadata
 * WriteOpers when reaching the softlimit
 * New example conf with softlimit set to 12800 so that the default doesnt confuse us
 * Make the socketengines always clear the slots on DelFd, even if the underlying queue call fails
 * Add extra debugging for socketengines, will now report OS error string when failing to remove a socket from the queue
 * Document more classes
 * Document a ton of classes (e.g. give them a short description for http://svn.inspircd.org/docs/annotated.html)
 * Update to support modular prefixes, and eliminate some string copying
 * ...and actually take out the +i restriction
 * Backport improved NAMES code into m_spy
 * Tidy up strlens which are not required
 * Tidy up m_safelist to avoid strlen on every line output, we're strlen()ing a constant-ish string so instead record the value for later use.
 * Report invalid command name when invalid command is given in negotiation phase
 * Fixed freeing of bound sockets when unloading spanningtree
 * Move opertypes/operclasses maps into ServerConfig, for some reason these were global to users.cpp and not accessible to any other file.
 * Remove VF_STATIC from spanningtree and make a clever destructor to close and free all its open sockets. In theory this will make insp split from everything neatly when you unload spanningtree.
 * Add <options:announcets> to output the "TS for #chan changed from 1111 to 2222".
 * Eugh. Revert change InspIRCd::Time() -> time()
 * Check for non-existent channel in FMODE
 * Whowas is now fixed.
 * Fix jamies fix (you cant strcpy to a char* pointer, without first allocating some memory!) -- made it char newident[MAXBUF]., Added extra fixage for when the ident module gets 'connection refused' right away, this also prepends the ~ properly too now
 * Fix for bug#159 reported by SiliconAI (unloading causes crash, it neglects to remove its timer)
 * Extra safety checking in ModeSet just to ensure we cant be passed a null pointer
 * Nickname collisions were broken! gasp.gif
 * *slaps* jamie for not using tabs to indent ;-p
 * Prepend ident with '~' if we get no response
 * Someone review the comments i put in from line 1515 onwards, and see if theyre legible and make FJOIN understandable?
 * Tidyup (remove casts) and commenting FJOIN a lot, so that others can fix stuff that breaks (if it breaks)
 * Fake direction check in FJOIN on all users, plus tidyup of the code that forms the modeline for giving them their privilages
 * New helper class irc::stringjoiner - it pwns you.
 * Fix my last change to InspIRCd::Time()
 * Use InspIRCd::Time() instead of time()
 * nenolod, what craq were you smoking? this code was FINE, you broke it tongue.gif
 * the multithreaded DNS engine was removed a while ago
 * no you can't just go from a std::ostringstream to a std::string, Om. *thwap*
 * mmmm dinner break, oh and document and make use of modestacker., Someone test this, i cant as im at work.
 * Fix SAJOIN notices to show target instead of source nick
 * Fix REMOVE reason
 * Add more features to modestacker so that we can stack +, -, and parameterless modes
 * More efficient modestacker
 * modestacker class, stacks modes and returns a string list of up to MAXMODES modes
 * IsNick moved to helperfuncs.cpp, makes a lot more sense than inspircd.cpp
 * Remove -notraceback and -nolimit from command line help; these options are removed and deprecated/removed respectivly.
 * Update credits (add pippijn/jamie to startup notice, move jamie from contributors to developers in /info)
 * Better fix to crash jamie experienced. epoll was the only socket engine affected by this, and only under weird circumstances like a zlined user. Previous commit will work fine, this is nicer, and more complete.
 * Use a ternary operator to remove bracketing from ping timeout message
 * Add r5381 fix to remote rehash too
 * No promises, but maybe this will fix issue with disabled commands, reported by relax
 * This ULine check looks really, really bad - and caused horrible things to happen (equal TS wasn't merged, causing infinite loops.). I think removing it is the solution, Brain, please verify when you wake up. Seems to fix it.
 * Fix ping timeout messages. This is what I get for not fully testing.
 * Add an extra debug message and change two calls of GetModeType to GetModeChar as I'm 99.9% sure they should be
 * It all came down to a >1 where we needed a >0. Things should be stable now jamie
 * 64bit fixes

1.1.0 Beta 2

 * userrec::CountGlobalClones malfunctioning, spotted by jamie, fixes bug#157 effecting only beta2
 * Apply patch for bug#155 submitted by jamie
 * Now with binary versioning goodness
 * InspIRCd: Now with 100% more boobies. Err, ping timeout message coolness.
 * Atheme wont work right, because this wasnt VF_COMMON. If its not VF_COMMON, its not going to show in capab tongue.gif
 * Added OnPostJoin, which is (at the moment) almost exactly identical to OnUserJoin but called after, so you can play with linking
 * Fix broken opermd5 (switch over % and / operators)
 * Fix mode desync when setting custom prefixes on joining users (trigger the mode handler explicitly)
 * CGIResolver isnt being passed a serverinstance to its constructor, so its trying to use a global copy which we dont really have (e.g. invalid pointer)
 * Made m_filter_pcre free the compiled regular expressions on rehash (no more memory leak) and fixed my previous fix
 * Fixed the pcre include path in m_filter_pcre - on every system I tested, --cflags only gives -I, and on some the include file is not where it was expected before (thanks jamie)
 * Cleaned up FJOIN a bit, fixing another segfault in the process. Brain should take a look at this and see if there are any subtle bugs in how it works, since its trackrecord isn't great tongue.gif
 * Fixed another segfault in m_spanningtree's FJOIN (forgot to check if the channel existed before setting its TS)
 * Fixed /spynames, thanks to relax for finding the bug
 * Because the user's prefix list must remain sorted at all times (because of assumptions in xchat) this means that we don't need to scan the list looking for their highest prefix, it will always be at begin(). This changes the speed of GetPrefix() and GetPrefixValue() from O(n) to O(1).
 * Tidy up how PART without reason is done
 * Move OnCheckBan into chanrec::IsBanned() so its always called for any attempt to check any ban
 * Dont let people enable gnutls/openssl when they dont have it... imho people shouldnt try and enable support for things they dont have, whats next, preventing , them symlinking it? tongue.gif
 * Make svshold case insensitive, fix ./configure -update and ./configure -modupdate which were...still broke tongue.gif
 * Fix bug found by giggsey (even though he doesnt realise he just found one)
 * make OnPostConnect global
 * Remove deprecated -nolimit and -notraceback options
 * Only output the 'AES on' message if the socket state isnt I_ERROR when its reached
 * Change error from 'connection established' to 'connection started'
 * Fixed a rather obvious crashbug in m_spanningtree (FJOIN)
 * Fix handling of multiple @%+ core permissions modes on join when more than one are given
 * Mini security audit
 * Document the ability to have multiple <http> tags
 * Allow for multiple <http> tags, each with their own index and bound to their own ip
 * All done., Modules may now change the privialges each user gets as they join, in OnUserPreJoin. For the first user in, this value defaults to a string containing "@" otherwise it defaults to a string containing nothing. If you change it, they get the new prefixes instead, and yes module-based prefixes ARE supported and its all automatically networked.
 * Make this compile. We now have to change all OnUserPreJoin use
 * Added /greloadmodule to m_globalload.so
 * Add send_topic event, lets you send a topic for a channel, set by a server, (internally this translates as FTOPIC in this protocol)
 * SVSHOLD, not SVSHold
 * Add m_svshold, Q:Lines on crack for services. Party party! \o/
 * Fix (broken) ./configure -update and ./configure -modupdate
 * This needs some testing., Reversal of FJOIN behaviour, so that rather than the winning side removing the modes of the losing side's channel,, the losing side removes its own status modes when it encounters the first FJOIN, and affirms them using FMODE so, that the other servers know what it did.
 * Fix bug#152 reported by smartys
 * Dont send explicit FMODE +qa when qaprefixes is on (because its sent in the fjoin implicitly)
 * Add new server to server command:, :server.name REMSTATUS #channel, NOTE: Protocol version bumped to 1101
 * Speaking of misleading comments, 'Delete and InspTImer' isn't particularly descriptive
 * Fixed the reversal of update and modupdate in ./configure

1.1.0 Beta 1

 * Update expiries when we update the set time
 * Make the check against z/k/q/e/g methods return a pointer to the whole object rather than just the reason string
 * Fix crashes, and in the process make xline even faster!
 * Change type to size_t so that 64 bit platforms dont whine about data loss when casting
 * Adapt to use std::string::const_iterator
 * Tidy up key handling
 * Make xline more memory-efficient and faster/neater. Eliminate a mass of fixed-size buffer and strlcpy
 * Use ++x not x++, to more closely match what stl does
 * ULTRA FAST HASH FUNCTION tongue.gif, I went and looked how hash_fun.h in STL did it, to save a string copy tongue.gif, (it's deceptively simple too)
 * More detail in system detection
 * Hard requirement on 5.6.0 and above of perl
 * Tidy up configure to display better in 80x25
 * Fix old interactive opts and -update etc
 * Allow -help as well as --help
 * Skip certificate generation if we're running non-interactive
 * optional non-interactive configure (woo yay, ./configure --help for info), NO I AM NOT HERE, im committing from work tongue.gif
 * Automatically make http request type and http version string uppercase, add comments, remove some unused headers
 * Documentation of the new m_alias
 * Testing and debugging done, it all works smile.gif
 * Now supports multiple commands seperated with \n. NOTE: These \n's are translated by the config parser to REAL linefeeds! If you want the literal \n, put \\n.
 * Allow putting newlines into quoted values in the config using \n. I'm coming to a use for this.
 * Hide ulines from /stats P
 * Add operonly aliases, <alias:operonly> (boolean)., Any operonly aliases that are executed by non-oper appear to not exist
 * Now it all works smile.gif, This is pretty smart stuff..., Set up an alias like this:, <alias text="NICKSERV" replace="PRIVMSG NickServ :IDENTIFY $3" ...>, This will replace the $3 in the replace string with the 3rd word typed on the line by the user., Use $1 through $9 for items $1 to $9, and $1- to $9- to mean first word onwards, through 9th word onwards. Also there are special variables, such as $nick, $ident, $host, $vhost which can be used in the alias replace string.
 * New m_alias, this probably doesnt work yet
 * First of many m_alias tidyups, this will eventually become a rewrite of the majority of this module
 * Turn irc::commasepstream into a base class, irc::sepstream, inherit two classes from it: irc::commasepstream and irc::spacesepstream, to be used for the most common token seperators "," and " "
 * Add const std::string &original_command to OnPreCommand and OnPostCommand, which gives the entire untouched command string and params in all its colon-ny glory
 * Proper checking in /SAPART that the user really did leave, for the CMD_FAILURE and CMD_SUCCESS return values (see SAJOIN)
 * Fix crash on two objects trying to free each other at the same time
 * Add timeouts to the http module. Two seperate timeouts, 60 seconds to receive headers, and 60 seconds after receipt of headers and sending of page, in which to time out the connection if the client doesnt close() as it should
 * Improve notices, so that if SAJOIN fails it can tell the oper who issued it
 * Fix for bug noticed by dotslasher (?) where SAJOIN can desync
 * Remove ExemptItem and InviteItem, these were never used
 * Comment tidyup and change format so doxygen can detect them
 * Comments describing classes, for the url http://svn.inspircd.org/docs/annotated.html
 * Fix some stuff, avoid use of global ServerInstance var
 * Commit all the httpd patches i sneakily put in before 9am at the office tongue.gif
 * Use gmtime() not localtime() as RFC2616 says dates sent by a http server must be GMT/UTC
 * Remember to change state when sending error 400
 * Send error 400 when content-size is 0 or omitted for POST
 * Fix postdata stuff
 * Only initialise request type once
 * Properly read POSTDATA
 * Beginnings of postdata stuff
 * Add jamie to code contributors in /info
 * Add m_conn_umodes.so which allows setting of modes on users when they connect, Remove automatic +x from m_cloaking now that conn_umodes can do this, Document in example conf., Syntax is <connect:modes> and a mode string in any valid connect:allow tag
 * Patch from jamie to detect malformed openssl versions
 * Try this pipp and see if the bug manifests in a different place
 * If inspircd crashes in std::string destructor in CommandParser::ProcessCommand, take away all std::string's to make the bug manifest elsewhere, so maybe we can spot it
 * Special check in cmd_quit and cmd_kill and special return value CMD_USER_DELETED, to prevent theoretical segfault (this isnt the bug youre trying to find, pip)
 * Fix minor memory leak when setting new param that replaces old
 * Add debug to m_spanningtree, verifies that inspircd works correctly on FMODE (after patches are applied)
 * Fix m_messageflood along same lines as m_joinflood (jamie forgot a patch, i figured this one out for myself)
 * Merge jamies many patches
 * Applied jamie's cmd_gline patch
 * kill casts, so that om <3's the code
 * Fix for picky compilers (see, I work sometimes ;p)
 * Fix timedbans bug reported by jamie
 * Remove execinfo and threaded dns detection
 * What TWONK made uname be /bin/uname, its NOT in /bin on bsd.
 * Added a bunch of binaries, configs, modules symlinked from extra, and other unversioned things to svn:ignore
 * This should fix the timeout issues pippjin was experiencing
 * Remove -Ldl from c++ opts in freebsd... its always been a non-op (all it does is try to look in dir 'dl' for libs, which doesnt exist anyway) and was being used as a pointless "comment" to indicate dynamic linking was in use. Removed in case it ever breaks something.
 * Take some debug crap out of ModeParser::ModeString()
 * Fix ChanModes::ModeString to not try and set a key as a user mode wink.gif, Tweak the way cyclehosts works, so that mode change is not echoed back to user who changes their host/ident
 * Dont allow keys of length >= 32
 * Remove unused buffer and call to MakeHost()
 * Make /stats k/g/e work right
 * Split hostmasks into ident and host pairs for matching as g/k/e lines. This allows them to be matched faster and more efficiently
 * Fix the new g/k/e line stuff to match ips. NOTE: this makes g/k/e much slower than z. By factors of about 3. If you want to match tons of users, as always use zline (for this and many other reasons)
 * Match IP's with klines, glines and exceptions, as well as hosts
 * Move Spacify() into irc:: namespace as multiple modules use it now
 * Tons more useful detail when failing to oper (and when successfully opering too) -- show the login name used, and the non-matching fields
 * Stop gcc prerelease (PRERELEASE? YEAH REALLY, WE HATE YOUR GUTS DEBIAN) from bitching about using ++ within an expression
 * Remove m_park from example configuration
 * Change a fux into a fix for pippjin (thanks for the bt)
 * Much neater more compact override notices for modes:, [13:16] --- SNOTICE *** OVERRIDE: Brain Overriding modes: #test +sSCT , [13:16] --- SNOTICE *** OVERRIDE: Brain Overriding modes: #test +ohv Brain Brain Brain [Detail: 1 op ], [13:16] --- SNOTICE *** OVERRIDE: Brain Overriding modes: #test +vho Brain Brain Brain [Detail: 1 op 1 voice 1 halfop ]
 * Added usermode n (snomask) to the example helpop files
 * ModuleFactories are not being deleted, this means that updates arent loaded
 * Reset LastParse string when we try to parse new modes
 * Dont generate host change, ident change or fullname change events if the host hasnt changed (case sensitive comparisons)
 * Ensure that these output the sane value thats actually set, not the possibly insane one you TRIED to set
 * Tidier string building
 * Make SAMODE oper output tidier
 * And fix it so it doesnt go into an infinite loop when meeting the end condition (oops)
 * Add sane limiting to mode output, so we cant have more than 100 mode chars in the sequence string, or MAXMODES parameters for the modes, or a total length of params+sequence beyond 450.
 * Tidy up override snotices
 * m_override is now fixed, replaced AC_GENERAL_MODE OnAccessCheck event
 * Changes to m_override
 * This useless module doesnt work right in multi-server and isnt much good anyway. I said 1.1 wouldnt have it tongue.gif
 * Fix output when user SANICKs themselves
 * Stop valgrind whining about uninitialized array, all we do is pass it as a buffer, but it whines anyway so we do = {0} on it tongue.gif
 * Fix small memory leak if non-cidr string passed to MatchCIDR
 * Fix for uninitialized var in valgrind output
 * Sensible failure messages for cmd_qline
 * Move spynames attempt notice into success area
 * Tidy up setidle message sent to opers, to show the actual idle time set if the oper specifies a bunch of crap as a number
 * Made SANICK not collide the user (theres no need to in the new 1.1 now we have return values- there USED TO BE a need for it)
 * Report invalid nicknames back to oper
 * Add failed SANICK notices
 * Only put out SANICK success line if the nickchange succeeds
 * Correctly put qline notices into xline snomask
 * Fix 'item not on list' output
 * Add similar printf format fix to namesx
 * Explicitly call the std::string version of WriteServ in chanrec::UserList to prevent string format accidents with users who have halfop (oooops)
 * Allow QUIT to be used before we fully register the connection. This stops mirc from closing the connection thinking it has quit when inspircd has denied their QUIT command,, in theory the ghosts w00t and i saw would have timed out after 60 secs?
 * *YOINK* Add jamie's patch for parameterized usermodes in m_opermodes (thanks)
 * userrec::ForceNickChange was broken (not the entire nickchange system as i'd suspected at first)
 * 1) Make earlier fix to inspsocket actually compile without error, 2) Make sure that query string is sent back in the reply
 * Delete the file descriptor upon write error to an inspsocket, preventing it eating cpu with endless read events
 * Fix crashbug when /who'ing people who arent on a channel (chan->GetPrefixChar() when chan == NULL is bad, mmk)
 * Finish off the fix for bug #136 (a biggie for such a simple thing)
 * All commands now return results CMD_FAILURE or CMD_SUCCESS
 * Command result codes. This isnt finished yet, still got to do most of the modules, and alter CallCommandHandler
 * JOIN now has a TS parameter on it. The client protocol will ignore this when we pass it down to the command parser, it is for use if theres a minor desync and we send a PART for the last user at the same time the other side sends a JOIN for a new user, we can at least keep the TS in step.
 * Drop and log unknown nicks in FJOIN, rather than aborting the link
 * We were printing a command instead of exec'ing it tongue.gif
 * New CAPAB variable (manditory): PROTOCOL
 * This is a complex one: when autoconnecting, we check each links failover, and try and FindServer it. If we find that link's failover in the network, we dont try and autoconnect it as it probably established a link to that via another route anyway.
 * 'Connection to %s closed' now says 'Connection to %s failed'
 * Check for failover pointing at self. This is an obvious thing to check for and prevent smile.gif
 * failover connections are now added, thanks for the idea Lauren (happy now? lol) smile.gif
 * Update example conf with all the new stuff and more detailed comments
 * Call X509_free() after we're done with the cert
 * Output the certificate hash to the user when they connect
 * Document <oper:fingerprint>
 * Changed how this module works., It now uses a password in combination with a fingerprint.
 * Check for people trying to literally put the fingerprint in as a pass
 * Add comments to document this header
 * YAY! A module which allows a user to oper via their ssl key fingerprint., This is largely untested stuff here, be careful with it. Use /fingerprint to get the user's fingerprint (or ask them for it) and then put the fingerprint into the password field of their oper block.
 * All but cert revocation is now supported by both modules
 * Dont report that the key has expired when it hasnt
 * OpenSSL gets certs and populates the ssl_cert* now!, (NOTE: This is not finished by a long shot, because openssl and gnutls generate slightly different format of DN - although, the fingerprint will always match if its the same user smile.gif)
 * We now have a test module that can dump someones certificate information: /sslinfo <nick>
 * Certificate stuff
 * Obtaining of ssl cert in gnutls module and placing it into a class which is extended to the user, type ssl_cert., In a while the openssl module will also populate this same high level class with data
 * Proper error checking on loading cmd_*.so files
 * Remove the shared object pointer from the hash after each reload
 * Forgot to copy cmd_mode.so
 * Add /RELOAD and move cmd_mode into its own command., /RELOAD is the only thing you cant reload (ahem)
 * Auto loading of commands as shared objects via dlsym (very lightweight interface, just expects a command_t* pointer)
 * cmd_* files are now shared object. This lets make -j optimize the build process a little better (it doesnt have to wait for the cmd_ files to finish so it can link commands.cpp against them), and it makes libIRCDcommands.so not be 20mb in size (which might hit file size limits on some shell hosters)
 * Give this module VF_COMMON, as services depend on it
 * Only VF_COMMON modules are sent in CAPAB now, not VF_STATIC
 * Actually make +ovhk removable with DelMode (just in case somebody wants to, or we have need to in the future)
 * Because these modes take no parameter when being removed, they need no special code for ModeHandler::RemoveMode()
 * Actually let it be unloaded would be a start (remove VF_STATIC)
 * Allow unloading of +qa
 * Don't try and delete from the item list whilst iterating it - make a copy instead, All modules using u_listmode.h are now unloadable (thats 3 more down)
 * Don't use oncleanup to remove listmode lists
 * banexception, chanfilter and inviteexception should now be unloadable smile.gif
 * All modules which implement simplemodes (no parameters, not a list mode) can now be UNLOADED O_o
 * Any modules which were using VF_STATIC to indicate they implement a mode should change this to VF_COMMON once they have the correct unload code
 * Allow unloading of modules which implement modes!, The default implementation of the new system will remove simplemodes so any mode handler which is just a simple mode (no params and not a list mode) does not need to add much more than one line of code and remove its VF_STATIC flag.
 * Add chanrec::IsBanned() so that we dont have to keep walking the banlist in various modules and using match()
 * Exception handling in most of userrec... not too fine grained yet however
 * Add snomask f (flood)
 * Made CountChannels faster. We use it in quite a few places. It's now O(1) rather than O(n)
 * Put some client quit stuff in cmd_quit into the Qq snomasks properly
 * Make ban override notice only trigger when they actually match a ban tongue.gif, Alter all to use snomask O (oper override) which this module enables
 * Fix for bug #134 reported by mixx941: When user connects to ircd with no usermodes set on themselves, an m_spanningtree std::string throws a range exception because we try and substr npos.
 * Forwardport fix from stable (bug#133 reported by insurgent): configuring a link block with the same name as the local server (?!) then linking to it causes segfault
 * Remove extra/wrong qualifications, makes GCC 4.1 (at least) die
 * *thwap* om for not fixing the bugs he finds tongue.gif
 * In this instance find is faster than rfind
 * Fix for parameters which contain a colon (which is not the first char in the string)
 * Remove -v argument from install (openbsd doesnt like it) - thanks wyleniauy
 * Remove a ton of <typeinfo>, <iostream>, <sstream> etc that we usually never use
 * Wahhhhhhhhhhhh bwahahaha. Mass commit to tidy up tons of messy include lists
 * Fix for correct display when removing snomask
 * Put servername in remote quits
 * Document SnomaskManager
 * Only send 008 when MODE Oper
 * Don't silently drop modes that are oper only when a non-oper tries to set them - give a 481
 * More snomask +o (unoper)
 * Snomasks +k (kills) and +o (oper)
 * The rest of snomask +x (i think)
 * Snomask +l (linking) and some +x (XLINE)
 * +Q and +C (remote quit and connect) snomasks implemented
 * Implement messages for snomasks +cq (local connect, local quit)
 * Remove snomask n (nickchanges) - this will be a module when someone writes it
 * auto-set +s when +n is set (as +n requires +s) - allow +n to be 'set twice' allowing for snomask change without removal of +ns, Add default snomask chars
 * Snomask support cometh! and it leave a sticky white mess all over the floor sad.gif
 * Spanningtree tidyups, Start of SnomaskManager class
 * Hey, what the hell. Let's do remote ADMIN too. smile.gif
 * Remote MOTD support
 * Remove blank lines from previous perl inplace edits
 * Make oper-override notices a bit more grammar friendly, add an override notice to banwalk
 * Zed, you are found guilty of over-assuming the IRC protocol and forcing ircd developers to sort lists during prefix adding. How do you plead., SOD THAT, YOURE GUILTY!!!!!
 * YOU KNOW I REALLY HATE IT WHEN CLIENT AUTHORS JUST MAKE ASSUMPTIONS ON THINGS LIKE "oh all prefixes in NAMESX will always be in rank order"., So tell me, zed, where the FUCK does it say that? huh?!
 * Hint of the day: When you have a function that can return a bool, dont mix up the true and false returns.
 * Move trailing space stripping to only strip from non-last-item values (dont ask)
 * Check for muppet 3rdparty apps that might not order the list correctly
 * Error scemantics - 'this' server, 'your' server
 * Module list diffing
 * Capab matching on important keys, and module lists
 * Fix ping timeouts to properly close and free the socket, same with /SQUIT
 * Add DelFd calls when squitting a server or pinging it out
 * Connect timeouts now work again, using InspSocket
 * Note: connect() cant time out for inspsockets in this commit. They'll sit in memory forever -- if you want something actually working properly wait for the next commit
 * Add support for NAMESX, Tidy up m_alias blank lines, Add m_namesx.so to example conf (no extra config tags required for it, it "just works")
 * Bail out if we get a non-existent user
 * Fix mode granting in FJOIN
 * I only fix stuff at 3:30am if im asked nicely and now im too tired to think any more tongue.gif
 * Sometimes we were just doing Route->GetSock(), without first checking Route was non-null., Instead, do "if (Route && Route->GetSock())" in a few places. This should make stuff water-tight
 * Overloaded char* equivalents of some core functions, will help us track down how the CRAP a stack-allocated std::string can be null?
 * Tidyup, multiple inheritence from base class to avoid code duplication in the two modehandler classes
 * Remove On005Numeric event from a ton of modules which no longer need it (as CHANMODES= part of 005 is now automatically done)
 * Fix changing of idents and hosts (it wasnt working -- in fact WriteCommon was sort of BROKEN AS HELL)
 * Add userrec::ChangeIdent (which we were missing) which can emulate the quit/rejoin same as ChangeDisplayedHost
 * Add <options:cyclehosts> which allows a user to appear to have quit when their host changes, so that clients/bots can stay synched properly., It is recommended this option always be on.
 * Added leachim's +qa prefix patch
 * Remove OnPostConnect here, it was being used under the assumption that it still did global connects
 * Speaking of forgetting things, someone forgot to change the name of the function
 * Moved an ipv6-only variable in userrec::GetIPString into the SUPPORT_IP6LINKS define to get rid of a warning
 * Somebody forgot one tongue.gif
 * Renamed the OnGlobalConnect callback to OnPostConnect, which is much more appropriate
 * When the mode sequence doesnt start with + or -, assume a +
 * Check for missing comma in FJOIN element
 * ModeParser::InsertMode is no longer required -- this is auto-generated by the ModeParser based on what modes are registered and wether or not they have certain attributes
 * Document ModeParser::FindPrefix() and chanrec::GetAllPrefixes()
 * Forgot the comma in first join
 * If we get an unknown prefix character on a user when they join, we throw a fit and close the connection
 * Check for illegal mode prefixes in AddMode (':' and ','), We should *probably* check to make sure their rank value doesnt conflict with another modules, too
 * Multi-prefix FJOIN, and allowing module-defined prefixes across the network
 * Fix and finish 005 numeric. PREFIX= is now calculated automatically if you add any prefixes., You do not need to mess with the numeric yourself.
 * More prefixchar stuff., WARNING: 005 numeric is broken in this commit.
 * Document mode prefixes
 * Spotted problem: must clear out all prefixes attached to a user when they quit or leave a channel, Next thing to do, consider removing of opped_userlist, halfopped_userlist and voiced_userlist as this data is now in the prefixlist
 * Mode handlers handling listmodes where a listmode item is a nickname can now specify prefixes!!!!!!, this isnt documented yet.
 * Inherit ModuleMessage from Extensible, so users can Extend and Shrink it.
 * Poor old Ian Gulliver tongue.gif Finally got his credit here
 * In 1.1, place all FJOIN parameters in the last parameter of the FJOIN - if there is more than one user joining, prefix with a colon., This way we're not limited to ~12 users per FJOIN command.
 * Make it virtual, in case someone ever wants to make a derived version of it
 * Extra comments about how the FileLogger class schedules its own write events if all the data is not written
 * Remove users.h include from here
 * Fix ident timeouts to work properly when the connect succeeds but nothing comes in as a reply to the ident request
 * Make DELETE inline so its about as fast as the define it replaced
 * Change #define DELETE to a template
 * NONBLOCKING LOGGER!
 * Document ListenSocket class
 * Fix trying to add failed ports to socketengine (<3 new code)
 * Dont allow an empty away message (im not sure what the RFC says on this one sts)
 * Things are so much easier here (thanks to sts for the bug)
 * Odd bits and bobs to keep the numeric sane if the user is insane (like stskeeps for example)
 * stskeeps trying to get his name all over our commit log tongue.gif (thanks for the bugreport)
 * Dont allow an empty key (thanks stskeeps)
 * Correctly return false on failure to fork
 * Checking if child pid still exists, if it vanishes we exit
 * When daemonizing, have parent process wait forever, and child process kill it when we're done initializing
 * Move lowermap[] into a pre-initialised const array in hashcomp.h,, get rid of InspIRCd::MakeLowertab()
 * Dont allow USERIP (where loaded) on unregistered users
 * Dont allow USERHOST (and new WHO) on unregistered users
 * Don't allow adding of invalid nicknames to watchlist
 * Get rid of SocketEngine::Wait and array-copy, change to SocketEngine::DispatchEvents
 * Modified m_silence to take masks instead of nicknames. Since this is *much* more CPU intensive, we should probably put in a maximum number of entries soon
 * EventHandler class, an abstraction for raw i/o
 * Forward port of /list pattern matching, reported by Stskeeps
 * Optimize tons more timer checking stuff
 * DoSocketTimeouts and TickTimers only need to be called once a second. Why they were being called once every time around the mainloop, up to 30 times a second, is beyond me.
 * Add modules.h to cmd_connect.h
 * userrec::AddBuffer and userrec::Write end up copying the const std::string& into a non-const to make use of it, why not just pass std::string and let the compiler do the copy when passing it?
 * Improve userrec::AddBuffer (remove craq char to std::string loop)
 * Change a std::string operator+= to append()
 * Optimization and removal of casts (profiling stuff)
 * Check in eline, gline and kline for the @ which signifies an ident. Without the ident, these are malformed
 * Wasnt checking channel name on ban deletion
 * free() REQUIRES casts to free const char*'s :<
 * Because the iterator can be whacked (and the item) inside of SetBan, make copies
 * Tweak: Setting server pointer isnt required
 * If +L is set without +l, dont forward users
 * Clear fd_ref_table and socket_ref arrays in the constructor
 * So i wonder why we've not had this problem sooner
 * Make sure that the hostname isnt set after the timeout period
 * This commit is dedicated to Boo ;-pppppp
 * Catch exceptions from SQLresolver
 * Complain if we can't find the binary
 * Explain what ModeParser does
 * Document the nspace namespace
 * Document some missing xline stuff, Document the variants of SocketEngine for epoll, kqueue and select
 * More docs. Tons more docs. I need coffee and we're out of coffee :<
 * Document command_parse.h and CommandParser class
 * Document irc::socket namespace members/classes
 * Remove a blank line! WOO YAY! biggest commit all week!
 * Just to mess with om's head, remove helperfuncs.h from everywhere
 * Document TimerManager class
 * Added comment about why its important to push_back onto the string_list when doing OnStats, rather than just WriteServ'ing stuff to the user
 * Just about enough docs to rebuild the docs page now
 * Documentation of new chanrec functions
 * Document all the new methods (eventually there will be more detail)
 * Documented all of the functions in a basic manner here. More detail to follow
 * CamelCaseRocksSoMuchICamelCasedAllTheMethodsOfClassInspIRCdSoThatItAllLooksNeat., NowSomebodyHasToSpendHoursDocumentingAllOfThisIWonderWhoThatWillEndUpBeing...
 * Move xline to before config system
 * Fix FOREACH_MOD macros
 * Change to using Instance->Log (InspIRCd::Log) rather than log() macro
 * Now two types of log macro, log() and ilog(). log() assumes an InspIRCd object called ServerInstance, ilog() takes an InspIRCd object as first param., TODO: Run a regexp over these, using perl, to translate them into InspIRCd::Log calls and then eliminate the macro smile.gif
 * Move all of the xline stuff into class XLineManager, make an instance of it in class InspIRCd and use it, (eliminates another extern)
 * Move ReadBuffer into InspIRCd class
 * Move whowas into InspIRCd, Tidy up lowermap extern (for now, we cant do much but have this as extern)
 * Removal of an extern
 * Change to use InspIRCd::Time()
 * extern time_t TIME -> InspIRCd::Time()
 * Use pcre-config to detect pcre
 * Somehow, i'd cp'd all these and was making local changes :/
 * Updates to new API and small cleanup
 * commands.cpp:extern InspIRCd* ServerInstance;, helperfuncs.cpp: extern InspIRCd* ServerInstance;, xline.cpp:extern InspIRCd* ServerInstance;, The last 3 extern's in the entire program!
 * ConfigReader and FileReader now take InspIRCd* to their constructors
 * None of the modules use an extern InspIRCd* any more
 * (Bigger than it looks, i did this with perl inplace edit) -- commands now take an InspIRCd* param to their constructor, so that you can do stuff within them without an extern
 * Last of Server:: methods moved to InspIRCd::. Server:: removed., This will need a real good tidyup later, because now everything is in the right place, but its a mess because for now i threw them into place (e.g. space indenting, etc), Next on the todo: Make command handlers have a ServerInstance (gank!)
 * Committing this as a rollback point - does not compile
 * Note: FOR THE MOMENT, this is BROKEN. It wont run right until im done., Changed Parameter for modules from Server* to InspIRCd*., TODO: Move remaining Server* Modules into InspIRCd* and remove class Server.
 * So much stuff changed in this one, i forgot most of it., Oh yeah, main thing is ModeHandler and ModeWatcher classes now take an InspIRCd* to their constructor
 * Move all_opers into class InspIRCd
 * Mass-tidyup of module global vars, theyre no longer global vars.
 * Move tons more stuff into class InspIRCd*, make signal handler functions static members
 * Make it more readable
 * Much faster hash<string> for case-insensitive hashing, combined copy and lowercase operation
 * Move AllModulesReportReady into a private method of class InspIRCd
 * Move strlower into nspace namespace where hash<std::string> lives
 * Move InsertMode into ModeParser
 * Move FileExists, CleanFilename, DirValid, GetFullProgDir into class ServerConfig
 * Move IsNick, IsIdent into class InspIRCd, update modules that use it., Change message.h to just a #warning saying its deprecated, and remove all use of it from the core smile.gif
 * PublishFeature, FindFeature, FindModule, PriorityBefore, PriorityAfter -> InspIRCd::
 * Removal of Server::Log -- not much ever used it anyway with the ability to use log(). log() macro still exists, and calls InspIRCd::Log()
 * Fixes and removal of Server::GetServerName()
 * Server::GetAdmin, Server::GetServerDescription, Server::GetNetworkName --- *REMOVED*
 * Cast value to long instead of int, shouldn't break any sane system, fixes warning on 64bit systems
 * Remove Server::Server() and Server::~Server()
 * cmode(), cflags(), cstatus() -> chanrec::GetStatusChar(), chanrec::GetStatusFlags(), chanrec::GetStatus()
 * #define IS_MINGW on..MinGW (*shock*)
 * Don't use -fPIC on MinGW platforms
 * Add a few tidbits for MinGW, check for C:\ style paths as well as just beginning with '/' when determining if a path is absolute (only check if OSTYPE = MINGW32)
 * Server::GetConfig, Server::GetVersion -> removed
 * FindNick, FindChan, ChanModes, UserList, CountInvisible, PurgeEmptyChannels, GetClass, WriteOpers, GetServerDescription -> into classes, ServerConfig takes InspIRCd pointer in its constructor
 * Change to use the core perl module Cwd rather than the pwd command. Should be more portable. (Om's bi-monthly MinGw attempt)
 * bad_alloc is thrown by reference not by value
 * Add a default exception handler around main()
 * Move the socket functions like insp_ntoa into their own namespace. They arent really sensible to put into a class, but namespacing them out discourages developers from directly using them without explicitly saing 'using irc::sockets::BindPorts' or whatever first. Some functions such as insp_ntoa are already 'exposed' by headers that use them so 'using irc::sockets::inet_ntoa' isnt required.
 * Relocate timer stuff into TimerManager class
 * Passing invalid instance to dns isnt a good idea
 * Fix passing wrong instance to resolver
 * Wrong version given in check it seems. Om can review this later, but now it compiles on my system (pgsql 8.0.8) with that special feature thats only supposed to exist on 8.4.2 onwards.... :/
 * Change some resolver stuff., OM, THIS STILL WONT COMPILE! Error on the same line
 * userrec and chanrec now have their own independent pointer back to their 'creator' InspIRCd* object, extern now longer required in channels.cpp or users.cpp
 * Move tons more stuff into class InspIRCd
 * Move clientlist and chanlist into InspIRCd*
 * Move fd_ref_table into class InspIRCd*
 * Fix for when we hit PgSQL 9.x that I think actually works
 * Move socket_ref and module_sockets vectors/arrays into InspIRCd*. These are public members, which InspSocket can modify., (eventually, this will be marshalled safely through some accessors). When constructing an InspSocket you must now provide, an InspIRCd* instance to 'attach' the socket to.
 * Tidy up loglevel enum (remove some C-ish defines), change ServerConfig to pass a pointer to 'this' to Validation etc functions
 * Remove do_log() prototypes
 * do_log -> static void InspIRCd::Log() (with vararg and std::string variants), The #define for this still exists, but maybe should be phased out?
 * ServerConfig extern moved into class InspIRCd
 * Get rid of Server::GetUsers(chanrec) - a throwback to before chanrec could do this itself, Move:, bool ChangeDisplayedHost(const char* host);, bool ChangeName(const char* gecos);, int CountChannels();, Into userrec
 * Move Blocking/NonBlocking to socket.cpp and make inline
 * common_channels -> userrec::SharesChannelWith()
 * Oops, goofed up
 * Improve Write functions, and change some stuff from char* to const char*
 * WriteWallops() -> userrec::WriteWallops() (originates from a user, so belongs in userrec)
 * Document new methods
 * WriteCommon() and WriteCommonExcept() -> userrec::WriteCommon(), userrec::WriteCommonExcept(), WriteCommon_NoFormat() and WriteCommonExcept_NoFormat() -> std::string variants
 * Document Write* methods in userrec
 * WHEEEEE!!!!!, All of: Write(), WriteTo(), WriteFrom(), WriteServ() are now methods of userrec., Write_NoFormat(), WriteTo_NoFormat(), WriteFrom_NoFormat(), WriteServ_NoFormat() are now std::string-taking overloaded methods of the functions above, All modules updated to use new syntax, my fingers hurt sad.gif
 * Comment all the new stuff
 * Tons of comments
 * Move whowas stuff into its own namespace, move more stuff into userrec
 * FindMatchingLocal/FindMatchingGlobal -> userrec::LocalCloneCount(), userrec::GlobalCloneCount()
 * userrec::UpdateNickHash(), userrec::ForceNickChange(), userrec::FullConnect()
 * AddOper() and DeleteOper() -> userrec::Oper() and userrec::UnOper() (these do more, too)
 * userrec::AddToWhoWas() fix
 * AddWhoWas(userrec) -> userrec::AddToWhoWas()
 * kill_link() and Server::QuitUser() -> userrec::QuitUser() (static member) - this cant be a normal member as it causes the userrec to be deleted, and "delete this" is bad, mmm'k
 * WriteChannel* functions and ChanExceptSender* functions are now methods of chanrec. They probably should be renamed too eventually.
 * add_channel -> chanrec::JoinUser()
 * Change to chanrec::PartUser. As with KickUser and ServerKickUser, returns the number of users left, if it returns 0, delete the chanrec
 * Check return values
 * chanrec::KickUser and chanrec::ServerKickUser return number of users left on the channel after the kick. If either returns 0, you should delete the chanrec immediately after return:, if (!c->KickUser(mysrc, mydest, "DIE")), /* arse */, delete c;
 * kick_channel -> chanrec::KickUser(), server_kick_channel -> chanrec::ServerKickUser()
 * Add checking on AddFd that was missing (it assumed, like everything else)
 * Extra checking that the fd's we pass to SocketEngine::AddFd were added (a lot of assuming was going off, leading to total chaos if we run out of fd's etc)
 * Only local users can have angry monkeys and packs of wild dogs. These are local monkeys for local people!
 * Now with added ANGRY MONKEYS.
 * Change the error message, just for LeaChim <3
 * Check earlier on is no longer required
 * Bail if we couldn't bind any ports (when did this get broken?)
 * The segfaults on missing init_module symbol are now gone, and hopefully not coming back!
 * Added some hax sad.gif to prevent invalid symbols. It seems that instead of returning NULL, its setting a pointer to -1
 * Tidy up, make a lot of char*'s const
 * Better checks for running out of disk space, inability to write to tmp dir, etc
 * Extra debug all over the place, which maybe we should keep
 * Untested but compiling updates for Resolver DNS API
 * General cleanup of code., add support for +Q channel mode (and config tag <remove:supportnokicks>)
 * Change prototype of OneOfMatches
 * Add m_tline, tests how many users a gline, zline etc would match. Can use this before adding one if youre not sure, or youre just curious
 * Remove dependent commands BEFORE deleting the Module*, otherwise things go tits over arse
 * Remove trailing spaces from input in irc::ircsepstream
 * Left nick out of the cidr/ip check in bans/join, would never match
 * return statement in wrong place caused modes to be dropped
 * Give a full path to .gdbargs, should let you run the ./inspircd script from outside the install dir (from this point of view, anyway
 * Install .gdbargs with ./inspircd
 * Syntax notice on bad commandline
 * Add -notraceback startup option, disables automatic backtrace facility so that you can do it yourself with a coredump and gdb (auto backtrace doesnt dump cores)
 * Remove check that very rarely equates to true
 * Change to strrchr when looking for '/'. faster
 * Update to reflect allowing CIDR in new places
 * CIDR g/k/e lines to go with zlines
 * Allow non-cidr ip's still
 * Allow CIDR channel bans to be matched
 * Update docs to indicate ident@mask/bits is allowed in <oper>
 * Allow nick!ident@ and ident@ portions in a CIDR mask if given, use match() without CIDR against that portion. This allows for CIDR operhosts while still matching idents (AND CIDR CHANNEL BANS)
 * Update docs to reflect where CIDR is allowed
 * Add docs for m_httpd and m_http_stats
 * Add documentation of <link:allowmask>
 * Add <link:allowmask>
 * Clamp mask sizes to 128 for ipv6 and 32 for ipv4
 * Extra safety checks
 * Fix CIDR functions so they work
 * Simple CIDR checking routine
 * Fix TS lowering, also update local variable
 * Dont try and cloak remote clients
 * Extra stuff for identifying ipv6 addresses
 * Use insp_aton so we can correctly cloak ipv6
 * Hopefully stop compile warning which I don't get anyway
 * Change a loop which uppercases the command to std::transform()
 * Fix /stats T dns totals
 * Remove leading : from /stats l, add /stats L
 * Change field name to time_open
 * Change /stats l to be more usable
 * Fixed bug in new /who code spotted by jilles
 * Allow non-ops to view listmode lists
 * Fix global session checks
 * Add 'no such server' on remote stats to invalid name
 * Better detection for hosts starting with :
 * Fixes for ::0 ip's, disable autobind when using ::ffff: etc
 * Misplaced backtick makes stuff look ugly
 * Safety wrapper defines for ipv6 code on ipv4 ircds
 * Change to using userrec::ip as a sockaddr to store port, ip and address family, rather than userrec::ip4 and userrec::port., This allows us to handle remote ipv6 users on an ipv4 server, and vice versa.
 * Add proper support for "munging" of ipv6 addresses when ::ffff:addr is used (this is temporary)
 * Change to use inaddr6_any
 * Debug output on invalid nameserver address in constructor
 * Change comments to reflect change from ip6.int to ip6.arpa which occured on jul 1st
 * Tidier MakeIP6Int()
 * Its ip6.arpa, not ip6.int?
 * Extra stuff for forcing a v4 or v6 lookup
 * Improved ip6.int builder (no more HUGE sprintf craq)
 * Added test framework, so that i can work on improving MakeIP6Int
 * *.ip6.int PTR lookups. FUGLY AS FUCK. someone please help me tidy (backported from firedns)
 * AAAA lookup fixed. Theyre returned as string, without need for inet_pton with an in6_addr, so that its possible to resolve ipv6 without an ipv6 supporting kernel wink.gif
 * Fixed resolver, forward lookup of ipv6 doesnt work right yet
 * Support CNAME, AAAA
 * Fix sockaddr structs for ipv6
 * Fix bindsocket to work in ipv6 mode
 * Add some commenting
 * add erroring if there are already 65536 id's in transit
 * Check for spoofed DNS replies where the source-port is invalid, or the ip is not that of the nameserver we're configured to use
 * Properly check for duplicate dns id's from the PRNG
 * Improve PRNG
 * Dynamically generate 004 numeric from the modehandler list
 * Added comments to class DNS and typedefs
 * Pseudo-random id's again, combined with incrementing value, gettimeofday and geteuid using xor
 * Add back stats counters for dns total, good and bad
 * Allocate request id's in sequence, which means we wont get a duplicate id until 65536 id's have been given out., Much safer than rand()
 * Absolutely everything is now part of class DNS, or class Resolver., This means our dns code is totally encapsulated and we know that, changing it wont effect anything else so long as the interface stays, the same.
 * Move more stuff into private members of class DNS
 * Move more stuff into class DNS
 * Tweak case of all classes to match those in the rest of the core
 * Change comment at start of the file, rename dns_connection, to dns_request (they no longer represent connections with, unique FD's so the old name was kind of silly)
 * More tidying. Add comments. More comments to do tongue.gif
 * Add error messages to Resolver::OnError(), Add exception handling to several places that use Resolver (it can throw), Remove Resolver::ProcessResult(), its now handled within the bowels of dns.cpp
 * The great summer clean (better than a spring clean)
 * Tidyup var names. people who use 'l' to mean 'length' need to be shot with a brick
 * Tidyup var names. If i ever meet this person who called all the firedns vars 'l' and 'c' and 'r' im going to beat them with Om's fish.
 * Check for invalid ip's being bound to
 * (1) remove CleanAndResolve., (2) remove feature of being able to bind hostnames in <bind> tags (it used CleanAndResolve) tongue.gif, (3) Fix the stuff in SpanningTree that used CleanAndResolve to validate connecting ip addresses - it now builds an 'allowed ip cache' on rehash/startup instead
 * Check for duplicate servers in OnLookupComplete
 * InspSocket no longer resolves hosts., InspSocket::DoResolve() and the stuff that calls it is gone, if you pass InspSocket an invalid ip, it will bail during its connect., You must now use Resolver classes to resolve hostnames into IP addresses, if you wish to do this. Currently, only one non-extra module, does this, see class ServernameResolver within m_spanningtree
 * Change comment which referred to an fd, is now an id
 * Comments, add more detail, remove dnsqueue.h include from tons of places, Remove THREADED_DNS defines from all over the place
 * Stuff to make user host resolving use class Resolver - not tested yet
 * Remove X_ESTAB_CLASSDNS, X_ESTAB_DNS now does the job of this (i TOLD w00t and om i was removing this eventually, and now i did tongue.gif)
 * Removed threaded dns (it might make a comeback some day, but as it stands its incompatible with the new OO resolver), Migrated to new OO resolver, removed as much firedns craq as is safe to do so, operates over one file descriptor now and keyed against request id., The only way to use the system is via class Resolver (so i'll need to migrate the rest of the ircd to use it)
 * Clone counting works with ipv6 now
 * Add support for comparing ipv6 for clone counting
 * Fixes for inspsocket in ipv6 environment
 * The IPV6 stuff compiles now, with compile-correct ipv6 code. I dont know if this works yet.
 * AF_INET -> define to AF_FAMILY, will be either AF_INET or AF_INET6
 * Move to entirely using insp_sockaddr and insp_inaddr for socket stuff, first step on the road to ipv6 support
 * Missing include breaks "make clean" on the cmd_* files
 * Remove match/wildcmp wrapper which just casts from const char* to char*, do the cast within wildcmp and rename wildcmp to match., Remove other casts by casting directly to unsigned char* first time around
 * I think ive found the answer to the hanging connections problem. The majority of stuff in userprocess is skipped over when fd==0, it was fd > 0 rather than fd > -1 in a check. This would prevent one user (near the first) with fd 0 from connecting properly.
 * When m_ident isnt loaded, dont prepend ~ to idents
Personal tools