]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - docs/ChangeLog
Add <options:fixedquit> and <options:suffixquit> to go along with the existing <optio...
[user/henk/code/inspircd.git] / docs / ChangeLog
1 1.1.0 Beta 3
2
3  * Fix broken InspSocket timeouts that left sockets in use in kqueue
4  * Make this module propogate remote modes by directly calling the MODE command handler rather than using SendMode which would also require spanningtree metadata
5  * WriteOpers when reaching the softlimit
6  * New example conf with softlimit set to 12800 so that the default doesnt confuse us
7  * Make the socketengines always clear the slots on DelFd, even if the underlying queue call fails
8  * Add extra debugging for socketengines, will now report OS error string when failing to remove a socket from the queue
9  * Document more classes
10  * Document a ton of classes (e.g. give them a short description for http://svn.inspircd.org/docs/annotated.html)
11  * Update to support modular prefixes, and eliminate some string copying
12  * ...and actually take out the +i restriction
13  * Backport improved NAMES code into m_spy
14  * Tidy up strlens which are not required
15  * 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.
16  * Report invalid command name when invalid command is given in negotiation phase
17  * Fixed freeing of bound sockets when unloading spanningtree
18  * Move opertypes/operclasses maps into ServerConfig, for some reason these were global to users.cpp and not accessible to any other file.
19  * 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.
20  * Add <options:announcets> to output the "TS for #chan changed from 1111 to 2222".
21  * Eugh. Revert change InspIRCd::Time() -> time()
22  * Check for non-existent channel in FMODE
23  * Whowas is now fixed.
24  * 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
25  * Fix for bug#159 reported by SiliconAI (unloading causes crash, it neglects to remove its timer)
26  * Extra safety checking in ModeSet just to ensure we cant be passed a null pointer
27  * Nickname collisions were broken! gasp.gif
28  * *slaps* jamie for not using tabs to indent ;-p
29  * Prepend ident with '~' if we get no response
30  * Someone review the comments i put in from line 1515 onwards, and see if theyre legible and make FJOIN understandable?
31  * Tidyup (remove casts) and commenting FJOIN a lot, so that others can fix stuff that breaks (if it breaks)
32  * Fake direction check in FJOIN on all users, plus tidyup of the code that forms the modeline for giving them their privilages
33  * New helper class irc::stringjoiner - it pwns you.
34  * Fix my last change to InspIRCd::Time()
35  * Use InspIRCd::Time() instead of time()
36  * nenolod, what craq were you smoking? this code was FINE, you broke it tongue.gif
37  * the multithreaded DNS engine was removed a while ago
38  * no you can't just go from a std::ostringstream to a std::string, Om. *thwap*
39  * mmmm dinner break, oh and document and make use of modestacker., Someone test this, i cant as im at work.
40  * Fix SAJOIN notices to show target instead of source nick
41  * Fix REMOVE reason
42  * Add more features to modestacker so that we can stack +, -, and parameterless modes
43  * More efficient modestacker
44  * modestacker class, stacks modes and returns a string list of up to MAXMODES modes
45  * IsNick moved to helperfuncs.cpp, makes a lot more sense than inspircd.cpp
46  * Remove -notraceback and -nolimit from command line help; these options are removed and deprecated/removed respectivly.
47  * Update credits (add pippijn/jamie to startup notice, move jamie from contributors to developers in /info)
48  * 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.
49  * Use a ternary operator to remove bracketing from ping timeout message
50  * Add r5381 fix to remote rehash too
51  * No promises, but maybe this will fix issue with disabled commands, reported by relax
52  * 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.
53  * Fix ping timeout messages. This is what I get for not fully testing.
54  * Add an extra debug message and change two calls of GetModeType to GetModeChar as I'm 99.9% sure they should be
55  * It all came down to a >1 where we needed a >0. Things should be stable now jamie
56  * 64bit fixes
57
58 1.1.0 Beta 2
59
60  * userrec::CountGlobalClones malfunctioning, spotted by jamie, fixes bug#157 effecting only beta2
61  * Apply patch for bug#155 submitted by jamie
62  * Now with binary versioning goodness
63  * InspIRCd: Now with 100% more boobies. Err, ping timeout message coolness.
64  * Atheme wont work right, because this wasnt VF_COMMON. If its not VF_COMMON, its not going to show in capab tongue.gif
65  * Added OnPostJoin, which is (at the moment) almost exactly identical to OnUserJoin but called after, so you can play with linking
66  * Fix broken opermd5 (switch over % and / operators)
67  * Fix mode desync when setting custom prefixes on joining users (trigger the mode handler explicitly)
68  * 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)
69  * Made m_filter_pcre free the compiled regular expressions on rehash (no more memory leak) and fixed my previous fix
70  * 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)
71  * 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
72  * Fixed another segfault in m_spanningtree's FJOIN (forgot to check if the channel existed before setting its TS)
73  * Fixed /spynames, thanks to relax for finding the bug
74  * 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).
75  * Tidy up how PART without reason is done
76  * Move OnCheckBan into chanrec::IsBanned() so its always called for any attempt to check any ban
77  * 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
78  * Make svshold case insensitive, fix ./configure -update and ./configure -modupdate which were...still broke tongue.gif
79  * Fix bug found by giggsey (even though he doesnt realise he just found one)
80  * make OnPostConnect global
81  * Remove deprecated -nolimit and -notraceback options
82  * Only output the 'AES on' message if the socket state isnt I_ERROR when its reached
83  * Change error from 'connection established' to 'connection started'
84  * Fixed a rather obvious crashbug in m_spanningtree (FJOIN)
85  * Fix handling of multiple @%+ core permissions modes on join when more than one are given
86  * Mini security audit
87  * Document the ability to have multiple <http> tags
88  * Allow for multiple <http> tags, each with their own index and bound to their own ip
89  * 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.
90  * Make this compile. We now have to change all OnUserPreJoin use
91  * Added /greloadmodule to m_globalload.so
92  * Add send_topic event, lets you send a topic for a channel, set by a server, (internally this translates as FTOPIC in this protocol)
93  * SVSHOLD, not SVSHold
94  * Add m_svshold, Q:Lines on crack for services. Party party! \o/
95  * Fix (broken) ./configure -update and ./configure -modupdate
96  * 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.
97  * Fix bug#152 reported by smartys
98  * Dont send explicit FMODE +qa when qaprefixes is on (because its sent in the fjoin implicitly)
99  * Add new server to server command:, :server.name REMSTATUS #channel, NOTE: Protocol version bumped to 1101
100  * Speaking of misleading comments, 'Delete and InspTImer' isn't particularly descriptive
101  * Fixed the reversal of update and modupdate in ./configure
102
103 1.1.0 Beta 1
104
105  * Update expiries when we update the set time
106  * Make the check against z/k/q/e/g methods return a pointer to the whole object rather than just the reason string
107  * Fix crashes, and in the process make xline even faster!
108  * Change type to size_t so that 64 bit platforms dont whine about data loss when casting
109  * Adapt to use std::string::const_iterator
110  * Tidy up key handling
111  * Make xline more memory-efficient and faster/neater. Eliminate a mass of fixed-size buffer and strlcpy
112  * Use ++x not x++, to more closely match what stl does
113  * 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)
114  * More detail in system detection
115  * Hard requirement on 5.6.0 and above of perl
116  * Tidy up configure to display better in 80x25
117  * Fix old interactive opts and -update etc
118  * Allow -help as well as --help
119  * Skip certificate generation if we're running non-interactive
120  * optional non-interactive configure (woo yay, ./configure --help for info), NO I AM NOT HERE, im committing from work tongue.gif
121  * Automatically make http request type and http version string uppercase, add comments, remove some unused headers
122  * Documentation of the new m_alias
123  * Testing and debugging done, it all works smile.gif
124  * 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.
125  * Allow putting newlines into quoted values in the config using \n. I'm coming to a use for this.
126  * Hide ulines from /stats P
127  * Add operonly aliases, <alias:operonly> (boolean)., Any operonly aliases that are executed by non-oper appear to not exist
128  * 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.
129  * New m_alias, this probably doesnt work yet
130  * First of many m_alias tidyups, this will eventually become a rewrite of the majority of this module
131  * 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 " "
132  * 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
133  * Proper checking in /SAPART that the user really did leave, for the CMD_FAILURE and CMD_SUCCESS return values (see SAJOIN)
134  * Fix crash on two objects trying to free each other at the same time
135  * 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
136  * Improve notices, so that if SAJOIN fails it can tell the oper who issued it
137  * Fix for bug noticed by dotslasher (?) where SAJOIN can desync
138  * Remove ExemptItem and InviteItem, these were never used
139  * Comment tidyup and change format so doxygen can detect them
140  * Comments describing classes, for the url http://svn.inspircd.org/docs/annotated.html
141  * Fix some stuff, avoid use of global ServerInstance var
142  * Commit all the httpd patches i sneakily put in before 9am at the office tongue.gif
143  * Use gmtime() not localtime() as RFC2616 says dates sent by a http server must be GMT/UTC
144  * Remember to change state when sending error 400
145  * Send error 400 when content-size is 0 or omitted for POST
146  * Fix postdata stuff
147  * Only initialise request type once
148  * Properly read POSTDATA
149  * Beginnings of postdata stuff
150  * Add jamie to code contributors in /info
151  * 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
152  * Patch from jamie to detect malformed openssl versions
153  * Try this pipp and see if the bug manifests in a different place
154  * 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
155  * 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)
156  * Fix minor memory leak when setting new param that replaces old
157  * Add debug to m_spanningtree, verifies that inspircd works correctly on FMODE (after patches are applied)
158  * Fix m_messageflood along same lines as m_joinflood (jamie forgot a patch, i figured this one out for myself)
159  * Merge jamies many patches
160  * Applied jamie's cmd_gline patch
161  * kill casts, so that om <3's the code
162  * Fix for picky compilers (see, I work sometimes ;p)
163  * Fix timedbans bug reported by jamie
164  * Remove execinfo and threaded dns detection
165  * What TWONK made uname be /bin/uname, its NOT in /bin on bsd.
166  * Added a bunch of binaries, configs, modules symlinked from extra, and other unversioned things to svn:ignore
167  * This should fix the timeout issues pippjin was experiencing
168  * 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.
169  * Take some debug crap out of ModeParser::ModeString()
170  * 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
171  * Dont allow keys of length >= 32
172  * Remove unused buffer and call to MakeHost()
173  * Make /stats k/g/e work right
174  * Split hostmasks into ident and host pairs for matching as g/k/e lines. This allows them to be matched faster and more efficiently
175  * 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)
176  * Match IP's with klines, glines and exceptions, as well as hosts
177  * Move Spacify() into irc:: namespace as multiple modules use it now
178  * Tons more useful detail when failing to oper (and when successfully opering too) -- show the login name used, and the non-matching fields
179  * Stop gcc prerelease (PRERELEASE? YEAH REALLY, WE HATE YOUR GUTS DEBIAN) from bitching about using ++ within an expression
180  * Remove m_park from example configuration
181  * Change a fux into a fix for pippjin (thanks for the bt)
182  * 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 ]
183  * Added usermode n (snomask) to the example helpop files
184  * ModuleFactories are not being deleted, this means that updates arent loaded
185  * Reset LastParse string when we try to parse new modes
186  * Dont generate host change, ident change or fullname change events if the host hasnt changed (case sensitive comparisons)
187  * Ensure that these output the sane value thats actually set, not the possibly insane one you TRIED to set
188  * Tidier string building
189  * Make SAMODE oper output tidier
190  * And fix it so it doesnt go into an infinite loop when meeting the end condition (oops)
191  * 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.
192  * Tidy up override snotices
193  * m_override is now fixed, replaced AC_GENERAL_MODE OnAccessCheck event
194  * Changes to m_override
195  * This useless module doesnt work right in multi-server and isnt much good anyway. I said 1.1 wouldnt have it tongue.gif
196  * Fix output when user SANICKs themselves
197  * 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
198  * Fix small memory leak if non-cidr string passed to MatchCIDR
199  * Fix for uninitialized var in valgrind output
200  * Sensible failure messages for cmd_qline
201  * Move spynames attempt notice into success area
202  * 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
203  * 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)
204  * Report invalid nicknames back to oper
205  * Add failed SANICK notices
206  * Only put out SANICK success line if the nickchange succeeds
207  * Correctly put qline notices into xline snomask
208  * Fix 'item not on list' output
209  * Add similar printf format fix to namesx
210  * Explicitly call the std::string version of WriteServ in chanrec::UserList to prevent string format accidents with users who have halfop (oooops)
211  * 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?
212  * *YOINK* Add jamie's patch for parameterized usermodes in m_opermodes (thanks)
213  * userrec::ForceNickChange was broken (not the entire nickchange system as i'd suspected at first)
214  * 1) Make earlier fix to inspsocket actually compile without error, 2) Make sure that query string is sent back in the reply
215  * Delete the file descriptor upon write error to an inspsocket, preventing it eating cpu with endless read events
216  * Fix crashbug when /who'ing people who arent on a channel (chan->GetPrefixChar() when chan == NULL is bad, mmk)
217  * Finish off the fix for bug #136 (a biggie for such a simple thing)
218  * All commands now return results CMD_FAILURE or CMD_SUCCESS
219  * Command result codes. This isnt finished yet, still got to do most of the modules, and alter CallCommandHandler
220  * 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.
221  * Drop and log unknown nicks in FJOIN, rather than aborting the link
222  * We were printing a command instead of exec'ing it tongue.gif
223  * New CAPAB variable (manditory): PROTOCOL
224  * 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.
225  * 'Connection to %s closed' now says 'Connection to %s failed'
226  * Check for failover pointing at self. This is an obvious thing to check for and prevent smile.gif
227  * failover connections are now added, thanks for the idea Lauren (happy now? lol) smile.gif
228  * Update example conf with all the new stuff and more detailed comments
229  * Call X509_free() after we're done with the cert
230  * Output the certificate hash to the user when they connect
231  * Document <oper:fingerprint>
232  * Changed how this module works., It now uses a password in combination with a fingerprint.
233  * Check for people trying to literally put the fingerprint in as a pass
234  * Add comments to document this header
235  * 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.
236  * All but cert revocation is now supported by both modules
237  * Dont report that the key has expired when it hasnt
238  * 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)
239  * We now have a test module that can dump someones certificate information: /sslinfo <nick>
240  * Certificate stuff
241  * 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
242  * Proper error checking on loading cmd_*.so files
243  * Remove the shared object pointer from the hash after each reload
244  * Forgot to copy cmd_mode.so
245  * Add /RELOAD and move cmd_mode into its own command., /RELOAD is the only thing you cant reload (ahem)
246  * Auto loading of commands as shared objects via dlsym (very lightweight interface, just expects a command_t* pointer)
247  * 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)
248  * Give this module VF_COMMON, as services depend on it
249  * Only VF_COMMON modules are sent in CAPAB now, not VF_STATIC
250  * Actually make +ovhk removable with DelMode (just in case somebody wants to, or we have need to in the future)
251  * Because these modes take no parameter when being removed, they need no special code for ModeHandler::RemoveMode()
252  * Actually let it be unloaded would be a start (remove VF_STATIC)
253  * Allow unloading of +qa
254  * 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)
255  * Don't use oncleanup to remove listmode lists
256  * banexception, chanfilter and inviteexception should now be unloadable smile.gif
257  * All modules which implement simplemodes (no parameters, not a list mode) can now be UNLOADED O_o
258  * 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
259  * 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.
260  * Add chanrec::IsBanned() so that we dont have to keep walking the banlist in various modules and using match()
261  * Exception handling in most of userrec... not too fine grained yet however
262  * Add snomask f (flood)
263  * Made CountChannels faster. We use it in quite a few places. It's now O(1) rather than O(n)
264  * Put some client quit stuff in cmd_quit into the Qq snomasks properly
265  * 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
266  * 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.
267  * 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
268  * Remove extra/wrong qualifications, makes GCC 4.1 (at least) die
269  * *thwap* om for not fixing the bugs he finds tongue.gif
270  * In this instance find is faster than rfind
271  * Fix for parameters which contain a colon (which is not the first char in the string)
272  * Remove -v argument from install (openbsd doesnt like it) - thanks wyleniauy
273  * Remove a ton of <typeinfo>, <iostream>, <sstream> etc that we usually never use
274  * Wahhhhhhhhhhhh bwahahaha. Mass commit to tidy up tons of messy include lists
275  * Fix for correct display when removing snomask
276  * Put servername in remote quits
277  * Document SnomaskManager
278  * Only send 008 when MODE Oper
279  * Don't silently drop modes that are oper only when a non-oper tries to set them - give a 481
280  * More snomask +o (unoper)
281  * Snomasks +k (kills) and +o (oper)
282  * The rest of snomask +x (i think)
283  * Snomask +l (linking) and some +x (XLINE)
284  * +Q and +C (remote quit and connect) snomasks implemented
285  * Implement messages for snomasks +cq (local connect, local quit)
286  * Remove snomask n (nickchanges) - this will be a module when someone writes it
287  * 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
288  * Snomask support cometh! and it leave a sticky white mess all over the floor sad.gif
289  * Spanningtree tidyups, Start of SnomaskManager class
290  * Hey, what the hell. Let's do remote ADMIN too. smile.gif
291  * Remote MOTD support
292  * Remove blank lines from previous perl inplace edits
293  * Make oper-override notices a bit more grammar friendly, add an override notice to banwalk
294  * 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!!!!!
295  * 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?!
296  * Hint of the day: When you have a function that can return a bool, dont mix up the true and false returns.
297  * Move trailing space stripping to only strip from non-last-item values (dont ask)
298  * Check for muppet 3rdparty apps that might not order the list correctly
299  * Error scemantics - 'this' server, 'your' server
300  * Module list diffing
301  * Capab matching on important keys, and module lists
302  * Fix ping timeouts to properly close and free the socket, same with /SQUIT
303  * Add DelFd calls when squitting a server or pinging it out
304  * Connect timeouts now work again, using InspSocket
305  * 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
306  * 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")
307  * Bail out if we get a non-existent user
308  * Fix mode granting in FJOIN
309  * I only fix stuff at 3:30am if im asked nicely and now im too tired to think any more tongue.gif
310  * 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
311  * Overloaded char* equivalents of some core functions, will help us track down how the CRAP a stack-allocated std::string can be null?
312  * Tidyup, multiple inheritence from base class to avoid code duplication in the two modehandler classes
313  * Remove On005Numeric event from a ton of modules which no longer need it (as CHANMODES= part of 005 is now automatically done)
314  * Fix changing of idents and hosts (it wasnt working -- in fact WriteCommon was sort of BROKEN AS HELL)
315  * Add userrec::ChangeIdent (which we were missing) which can emulate the quit/rejoin same as ChangeDisplayedHost
316  * 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.
317  * Added leachim's +qa prefix patch
318  * Remove OnPostConnect here, it was being used under the assumption that it still did global connects
319  * Speaking of forgetting things, someone forgot to change the name of the function
320  * Moved an ipv6-only variable in userrec::GetIPString into the SUPPORT_IP6LINKS define to get rid of a warning
321  * Somebody forgot one tongue.gif
322  * Renamed the OnGlobalConnect callback to OnPostConnect, which is much more appropriate
323  * When the mode sequence doesnt start with + or -, assume a +
324  * Check for missing comma in FJOIN element
325  * 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
326  * Document ModeParser::FindPrefix() and chanrec::GetAllPrefixes()
327  * Forgot the comma in first join
328  * If we get an unknown prefix character on a user when they join, we throw a fit and close the connection
329  * Check for illegal mode prefixes in AddMode (':' and ','), We should *probably* check to make sure their rank value doesnt conflict with another modules, too
330  * Multi-prefix FJOIN, and allowing module-defined prefixes across the network
331  * 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.
332  * More prefixchar stuff., WARNING: 005 numeric is broken in this commit.
333  * Document mode prefixes
334  * 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
335  * Mode handlers handling listmodes where a listmode item is a nickname can now specify prefixes!!!!!!, this isnt documented yet.
336  * Inherit ModuleMessage from Extensible, so users can Extend and Shrink it.
337  * Poor old Ian Gulliver tongue.gif Finally got his credit here
338  * 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.
339  * Make it virtual, in case someone ever wants to make a derived version of it
340  * Extra comments about how the FileLogger class schedules its own write events if all the data is not written
341  * Remove users.h include from here
342  * Fix ident timeouts to work properly when the connect succeeds but nothing comes in as a reply to the ident request
343  * Make DELETE inline so its about as fast as the define it replaced
344  * Change #define DELETE to a template
345  * NONBLOCKING LOGGER!
346  * Document ListenSocket class
347  * Fix trying to add failed ports to socketengine (<3 new code)
348  * Dont allow an empty away message (im not sure what the RFC says on this one sts)
349  * Things are so much easier here (thanks to sts for the bug)
350  * Odd bits and bobs to keep the numeric sane if the user is insane (like stskeeps for example)
351  * stskeeps trying to get his name all over our commit log tongue.gif (thanks for the bugreport)
352  * Dont allow an empty key (thanks stskeeps)
353  * Correctly return false on failure to fork
354  * Checking if child pid still exists, if it vanishes we exit
355  * When daemonizing, have parent process wait forever, and child process kill it when we're done initializing
356  * Move lowermap[] into a pre-initialised const array in hashcomp.h,, get rid of InspIRCd::MakeLowertab()
357  * Dont allow USERIP (where loaded) on unregistered users
358  * Dont allow USERHOST (and new WHO) on unregistered users
359  * Don't allow adding of invalid nicknames to watchlist
360  * Get rid of SocketEngine::Wait and array-copy, change to SocketEngine::DispatchEvents
361  * 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
362  * EventHandler class, an abstraction for raw i/o
363  * Forward port of /list pattern matching, reported by Stskeeps
364  * Optimize tons more timer checking stuff
365  * 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.
366  * Add modules.h to cmd_connect.h
367  * 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?
368  * Improve userrec::AddBuffer (remove craq char to std::string loop)
369  * Change a std::string operator+= to append()
370  * Optimization and removal of casts (profiling stuff)
371  * Check in eline, gline and kline for the @ which signifies an ident. Without the ident, these are malformed
372  * Wasnt checking channel name on ban deletion
373  * free() REQUIRES casts to free const char*'s :<
374  * Because the iterator can be whacked (and the item) inside of SetBan, make copies
375  * Tweak: Setting server pointer isnt required
376  * If +L is set without +l, dont forward users
377  * Clear fd_ref_table and socket_ref arrays in the constructor
378  * So i wonder why we've not had this problem sooner
379  * Make sure that the hostname isnt set after the timeout period
380  * This commit is dedicated to Boo ;-pppppp
381  * Catch exceptions from SQLresolver
382  * Complain if we can't find the binary
383  * Explain what ModeParser does
384  * Document the nspace namespace
385  * Document some missing xline stuff, Document the variants of SocketEngine for epoll, kqueue and select
386  * More docs. Tons more docs. I need coffee and we're out of coffee :<
387  * Document command_parse.h and CommandParser class
388  * Document irc::socket namespace members/classes
389  * Remove a blank line! WOO YAY! biggest commit all week!
390  * Just to mess with om's head, remove helperfuncs.h from everywhere
391  * Document TimerManager class
392  * 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
393  * Just about enough docs to rebuild the docs page now
394  * Documentation of new chanrec functions
395  * Document all the new methods (eventually there will be more detail)
396  * Documented all of the functions in a basic manner here. More detail to follow
397  * CamelCaseRocksSoMuchICamelCasedAllTheMethodsOfClassInspIRCdSoThatItAllLooksNeat., NowSomebodyHasToSpendHoursDocumentingAllOfThisIWonderWhoThatWillEndUpBeing...
398  * Move xline to before config system
399  * Fix FOREACH_MOD macros
400  * Change to using Instance->Log (InspIRCd::Log) rather than log() macro
401  * 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
402  * Move all of the xline stuff into class XLineManager, make an instance of it in class InspIRCd and use it, (eliminates another extern)
403  * Move ReadBuffer into InspIRCd class
404  * Move whowas into InspIRCd, Tidy up lowermap extern (for now, we cant do much but have this as extern)
405  * Removal of an extern
406  * Change to use InspIRCd::Time()
407  * extern time_t TIME -> InspIRCd::Time()
408  * Use pcre-config to detect pcre
409  * Somehow, i'd cp'd all these and was making local changes :/
410  * Updates to new API and small cleanup
411  * commands.cpp:extern InspIRCd* ServerInstance;, helperfuncs.cpp: extern InspIRCd* ServerInstance;, xline.cpp:extern InspIRCd* ServerInstance;, The last 3 extern's in the entire program!
412  * ConfigReader and FileReader now take InspIRCd* to their constructors
413  * None of the modules use an extern InspIRCd* any more
414  * (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
415  * 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!)
416  * Committing this as a rollback point - does not compile
417  * 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.
418  * 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
419  * Move all_opers into class InspIRCd
420  * Mass-tidyup of module global vars, theyre no longer global vars.
421  * Move tons more stuff into class InspIRCd*, make signal handler functions static members
422  * Make it more readable
423  * Much faster hash<string> for case-insensitive hashing, combined copy and lowercase operation
424  * Move AllModulesReportReady into a private method of class InspIRCd
425  * Move strlower into nspace namespace where hash<std::string> lives
426  * Move InsertMode into ModeParser
427  * Move FileExists, CleanFilename, DirValid, GetFullProgDir into class ServerConfig
428  * 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
429  * PublishFeature, FindFeature, FindModule, PriorityBefore, PriorityAfter -> InspIRCd::
430  * Removal of Server::Log -- not much ever used it anyway with the ability to use log(). log() macro still exists, and calls InspIRCd::Log()
431  * Fixes and removal of Server::GetServerName()
432  * Server::GetAdmin, Server::GetServerDescription, Server::GetNetworkName --- *REMOVED*
433  * Cast value to long instead of int, shouldn't break any sane system, fixes warning on 64bit systems
434  * Remove Server::Server() and Server::~Server()
435  * cmode(), cflags(), cstatus() -> chanrec::GetStatusChar(), chanrec::GetStatusFlags(), chanrec::GetStatus()
436  * #define IS_MINGW on..MinGW (*shock*)
437  * Don't use -fPIC on MinGW platforms
438  * 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)
439  * Server::GetConfig, Server::GetVersion -> removed
440  * FindNick, FindChan, ChanModes, UserList, CountInvisible, PurgeEmptyChannels, GetClass, WriteOpers, GetServerDescription -> into classes, ServerConfig takes InspIRCd pointer in its constructor
441  * Change to use the core perl module Cwd rather than the pwd command. Should be more portable. (Om's bi-monthly MinGw attempt)
442  * bad_alloc is thrown by reference not by value
443  * Add a default exception handler around main()
444  * 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.
445  * Relocate timer stuff into TimerManager class
446  * Passing invalid instance to dns isnt a good idea
447  * Fix passing wrong instance to resolver
448  * 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.... :/
449  * Change some resolver stuff., OM, THIS STILL WONT COMPILE! Error on the same line
450  * 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
451  * Move tons more stuff into class InspIRCd
452  * Move clientlist and chanlist into InspIRCd*
453  * Move fd_ref_table into class InspIRCd*
454  * Fix for when we hit PgSQL 9.x that I think actually works
455  * 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.
456  * Tidy up loglevel enum (remove some C-ish defines), change ServerConfig to pass a pointer to 'this' to Validation etc functions
457  * Remove do_log() prototypes
458  * do_log -> static void InspIRCd::Log() (with vararg and std::string variants), The #define for this still exists, but maybe should be phased out?
459  * ServerConfig extern moved into class InspIRCd
460  * 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
461  * Move Blocking/NonBlocking to socket.cpp and make inline
462  * common_channels -> userrec::SharesChannelWith()
463  * Oops, goofed up
464  * Improve Write functions, and change some stuff from char* to const char*
465  * WriteWallops() -> userrec::WriteWallops() (originates from a user, so belongs in userrec)
466  * Document new methods
467  * WriteCommon() and WriteCommonExcept() -> userrec::WriteCommon(), userrec::WriteCommonExcept(), WriteCommon_NoFormat() and WriteCommonExcept_NoFormat() -> std::string variants
468  * Document Write* methods in userrec
469  * 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
470  * Comment all the new stuff
471  * Tons of comments
472  * Move whowas stuff into its own namespace, move more stuff into userrec
473  * FindMatchingLocal/FindMatchingGlobal -> userrec::LocalCloneCount(), userrec::GlobalCloneCount()
474  * userrec::UpdateNickHash(), userrec::ForceNickChange(), userrec::FullConnect()
475  * AddOper() and DeleteOper() -> userrec::Oper() and userrec::UnOper() (these do more, too)
476  * userrec::AddToWhoWas() fix
477  * AddWhoWas(userrec) -> userrec::AddToWhoWas()
478  * 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
479  * WriteChannel* functions and ChanExceptSender* functions are now methods of chanrec. They probably should be renamed too eventually.
480  * add_channel -> chanrec::JoinUser()
481  * Change to chanrec::PartUser. As with KickUser and ServerKickUser, returns the number of users left, if it returns 0, delete the chanrec
482  * Check return values
483  * 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;
484  * kick_channel -> chanrec::KickUser(), server_kick_channel -> chanrec::ServerKickUser()
485  * Add checking on AddFd that was missing (it assumed, like everything else)
486  * 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)
487  * Only local users can have angry monkeys and packs of wild dogs. These are local monkeys for local people!
488  * Now with added ANGRY MONKEYS.
489  * Change the error message, just for LeaChim <3
490  * Check earlier on is no longer required
491  * Bail if we couldn't bind any ports (when did this get broken?)
492  * The segfaults on missing init_module symbol are now gone, and hopefully not coming back!
493  * Added some hax sad.gif to prevent invalid symbols. It seems that instead of returning NULL, its setting a pointer to -1
494  * Tidy up, make a lot of char*'s const
495  * Better checks for running out of disk space, inability to write to tmp dir, etc
496  * Extra debug all over the place, which maybe we should keep
497  * Untested but compiling updates for Resolver DNS API
498  * General cleanup of code., add support for +Q channel mode (and config tag <remove:supportnokicks>)
499  * Change prototype of OneOfMatches
500  * 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
501  * Remove dependent commands BEFORE deleting the Module*, otherwise things go tits over arse
502  * Remove trailing spaces from input in irc::ircsepstream
503  * Left nick out of the cidr/ip check in bans/join, would never match
504  * return statement in wrong place caused modes to be dropped
505  * Give a full path to .gdbargs, should let you run the ./inspircd script from outside the install dir (from this point of view, anyway
506  * Install .gdbargs with ./inspircd
507  * Syntax notice on bad commandline
508  * 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)
509  * Remove check that very rarely equates to true
510  * Change to strrchr when looking for '/'. faster
511  * Update to reflect allowing CIDR in new places
512  * CIDR g/k/e lines to go with zlines
513  * Allow non-cidr ip's still
514  * Allow CIDR channel bans to be matched
515  * Update docs to indicate ident@mask/bits is allowed in <oper>
516  * 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)
517  * Update docs to reflect where CIDR is allowed
518  * Add docs for m_httpd and m_http_stats
519  * Add documentation of <link:allowmask>
520  * Add <link:allowmask>
521  * Clamp mask sizes to 128 for ipv6 and 32 for ipv4
522  * Extra safety checks
523  * Fix CIDR functions so they work
524  * Simple CIDR checking routine
525  * Fix TS lowering, also update local variable
526  * Dont try and cloak remote clients
527  * Extra stuff for identifying ipv6 addresses
528  * Use insp_aton so we can correctly cloak ipv6
529  * Hopefully stop compile warning which I don't get anyway
530  * Change a loop which uppercases the command to std::transform()
531  * Fix /stats T dns totals
532  * Remove leading : from /stats l, add /stats L
533  * Change field name to time_open
534  * Change /stats l to be more usable
535  * Fixed bug in new /who code spotted by jilles
536  * Allow non-ops to view listmode lists
537  * Fix global session checks
538  * Add 'no such server' on remote stats to invalid name
539  * Better detection for hosts starting with :
540  * Fixes for ::0 ip's, disable autobind when using ::ffff: etc
541  * Misplaced backtick makes stuff look ugly
542  * Safety wrapper defines for ipv6 code on ipv4 ircds
543  * 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.
544  * Add proper support for "munging" of ipv6 addresses when ::ffff:addr is used (this is temporary)
545  * Change to use inaddr6_any
546  * Debug output on invalid nameserver address in constructor
547  * Change comments to reflect change from ip6.int to ip6.arpa which occured on jul 1st
548  * Tidier MakeIP6Int()
549  * Its ip6.arpa, not ip6.int?
550  * Extra stuff for forcing a v4 or v6 lookup
551  * Improved ip6.int builder (no more HUGE sprintf craq)
552  * Added test framework, so that i can work on improving MakeIP6Int
553  * *.ip6.int PTR lookups. FUGLY AS FUCK. someone please help me tidy (backported from firedns)
554  * 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
555  * Fixed resolver, forward lookup of ipv6 doesnt work right yet
556  * Support CNAME, AAAA
557  * Fix sockaddr structs for ipv6
558  * Fix bindsocket to work in ipv6 mode
559  * Add some commenting
560  * add erroring if there are already 65536 id's in transit
561  * 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
562  * Properly check for duplicate dns id's from the PRNG
563  * Improve PRNG
564  * Dynamically generate 004 numeric from the modehandler list
565  * Added comments to class DNS and typedefs
566  * Pseudo-random id's again, combined with incrementing value, gettimeofday and geteuid using xor
567  * Add back stats counters for dns total, good and bad
568  * 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()
569  * 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.
570  * Move more stuff into private members of class DNS
571  * Move more stuff into class DNS
572  * Tweak case of all classes to match those in the rest of the core
573  * 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)
574  * More tidying. Add comments. More comments to do tongue.gif
575  * 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
576  * The great summer clean (better than a spring clean)
577  * Tidyup var names. people who use 'l' to mean 'length' need to be shot with a brick
578  * 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.
579  * Check for invalid ip's being bound to
580  * (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
581  * Check for duplicate servers in OnLookupComplete
582  * 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
583  * Change comment which referred to an fd, is now an id
584  * Comments, add more detail, remove dnsqueue.h include from tons of places, Remove THREADED_DNS defines from all over the place
585  * Stuff to make user host resolving use class Resolver - not tested yet
586  * 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)
587  * 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)
588  * Clone counting works with ipv6 now
589  * Add support for comparing ipv6 for clone counting
590  * Fixes for inspsocket in ipv6 environment
591  * The IPV6 stuff compiles now, with compile-correct ipv6 code. I dont know if this works yet.
592  * AF_INET -> define to AF_FAMILY, will be either AF_INET or AF_INET6
593  * Move to entirely using insp_sockaddr and insp_inaddr for socket stuff, first step on the road to ipv6 support
594  * Missing include breaks "make clean" on the cmd_* files
595  * 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
596  * 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.
597  * When m_ident isnt loaded, dont prepend ~ to idents
598
599 1.0.6
600
601  * Fix for bug which can lock up ircd if someone adds a timed ban when the banlist is full
602  * Fix for issues related to bug #127
603  * Added some detail to the socket() and bind() log messages
604  * Fix to not hide invisible users non-common channels in whois (rfc doesnt state this)
605  * Made all the private methods of InspSocket protected instead
606  * Remove numeric which makes some clients (Xchat, more?) think their nick is in use. Apparently it's not needed
607  * Exclude LUSERS lines with zero counts (NO WE WONT CHANGE THE SPELLING OF connection(s)!)
608  * Prevent notice loop on NOTICE $*
609  * Allow PRIVMSG and NOTICE targets of $<servermask> to the module events (this wasnt trivial and is almost a damn feature)
610  * Fix NOTICE $* to go between servers
611  * Remove dependency on gnu make
612  * Remove hook on sigsegv, hopefully dump cores, finally.
613  * Special checking for muppet providers that make their reverse resolution resolve back to the same reverse resolution., *WHY* DO PEOPLE IN CONTROL OF THE RDNS RECORDS EVEN *ALLOW* SUCH LUNACY?!
614  * Only attempt forward lookup if the user still exists
615  * Update m_antibear to use a different hook for ADDED goodness.
616  * Fix the dns issue with 1_0_stable. The issue is easier to resolve here than in trunk
617  * Removal of all gcc2 checks (there sure was a lot of craq in here)
618  * Removed #ifdef stuff, this should be fine on both 3.3 and 3.4
619  * Don't allow SAQUIT, SANICK, SAPART and SAJOIN on ulined clients smile.gif
620  * Different way of dealing with netsplits, seems we're getting duff data in the hash somehow by trying to track these seperately
621  * Fix sometimes-leaking dns sockets when user quits between the two lookups (forward and reverse)
622  * Being as -modupdate already existed and just didnt work, this counts as a fix. Congrats epinephrine its your lucky day smile.gif
623  * Removed a bunch of SSL debug messages that popped up every time a user on SSL did anything. Now we're going to find some massive bug in m_ssl_* and have to add them all back in...
624  * Check for stdint.h
625  * Make configure detect stdint.h - this will be used for a fix later and to move opersha256 out of extra/ at last
626  * Update docs to indicate use of _ in opertpes translates to space when displayed
627  * Spacify() function translates _ in opertypes to spaces (only when displayed, however)
628  * Fix the only mangled comment thats important, the tree diagram in here wink.gif
629  * FEAR THE POWER OF VIM AND THE ALMIGHTY "%s/ /\t/g"
630  * Fix for +f not propogating +b out to other servers (including services) using new send_mode event
631  * Backport of send_mode system from trunk - for preliminary info on this search the source file for send_mode.
632  * Made Add*Line automatically apply the new line
633
634 1.0.5
635
636  * Added docs for connflood
637  * Someone made silence require 1 parameter, so no way to list the silence entries tongue.gif
638  * Add m_connflood, pippijn's connect throttle module (now we are offering another paid unreal feature for nothing)
639  * Enhance m_antibear with numerics 931 and 437
640  * Add an fflush() call after logging, hopefully fixes the issue with delayed logging on low activity. Reported by Rob from Anope.
641  * Tweak to IS_LOCAL macro to exclude invalid fd's that are > MAX_DESCRIPTORS
642  * Stability fix for netsplits after failed or desynced remote kills
643  * Made CullList::Apply return something other than 0, and added myself to the list of developers on startup - Special
644  * Allow hosts in <bind> and <link> -- see FIXME for minor issue to be fixed in 1.1 (probably not major enough to fix in 1.0)
645  * Allow binding by hostname again in <link> and <bind>
646  * Remove references to hostnames in <link> tag, use ip's instead
647  * 'inspircd' target missing from OSX makefile
648  * We can re-enable special's security fix now - note this is good for boxes with one or more static ip's and still doesnt resolve the issue for smelly dynamic-ip users (well boo hoo)
649  * Added BindAddr() smart binding, ensures that outbound ports always bind to the first server ip given rather than INADDR_ANY unless of course none are available or the only ip is localhost...
650  * Temporarily revert special's security improvement until we have bind= and mask=
651  * Extra safety for user lists to not keep bad pointers hanging about
652  * Dont allow /REMOVE of a uline, dont allow /REMOVE of a user who isnt on the channel (*slaps* Om)
653  * Pointer safety for Write* functions (check the local user exists in the fd_ref_table as a safety measure before attempting to use their user pointer)
654  * Speed, craq, and double space fix for samode's notice
655  * m_services_account: Allows ircu-alike account support for services use. It owns you.
656  * Added support for OSX back, based upon particularly weighty patch from BuildSmart
657  * Fix for potential oper flood - connections on server ports from IPs that don't match any link blocks are immediately dropped
658  * Backport of ./inspircd restart fix
659  * Don't allow non-ulines to kick ulines from channels - return numeric 482 if this is attempted (you are not a chanop) with different text
660  * Fix permanent CBANs
661  * Fix to send KILL message through to a user when theyre remote killed
662  * Sync m_check with trunk
663  * Added FindMatchingLocal and FindMatchingGlobal exports
664  * Stuff in m_opermd5 Now uses stdint.h
665  * Updated m_sql to use mysql_config
666  * Added helper script for mysql rpath
667  * Tidied up SQLQuery::Sanitise
668
669 1.0.4
670
671  * Random-Crash-On-Netsplit bug is finally fixed!
672  * Backport of epoll/kqueue failure checking
673  * Fixed broken kline matching when a new user connects (reported by LeaChim)
674  * Fixed crashbug with knock on non-existent channel
675  * Fixed output corruption when host is exactly 64 chars long
676  * Fixed crash when attempting "/OS RAW PUSH non-existent-nick :::nick!ident@host KICK #chan nick :any reason" (yes, REALLY.)
677  * Let ulines do NOTICE/PRIVMSG $* without oper again, so that OS GLOBAL on services packages is fixed smile.gif
678  * Add validation for channel name in m_operjoin, throws an exception aborting the module loading if the name is invalid
679  * Fixed EAGAIN missing check when writing to a socket
680  * Fixed m_sql and sqlauth etc to automatically cope with the server going down
681  * Fixes for cygwin compilation
682  * Added signal/raise in the sigsegv handler to re-raise the signal, so we get coredumps
683  * Changed instances of MAXBUF to MAXQUIT to prevent some output corruption
684
685 1.0.3
686
687  * Obscure bug of the week: InspIRCd crashes when given more than 64 client ports to bind in the config file (yes, *REALLY*.)
688  * Removal of ancient TRUE/FALSE #defines (C-ish stuff)
689  * Removed lowercasing of servername on validation
690  * Case insensitive server names
691  * Commented a lot of stuff that hasnt been commented since 1.0.2
692  * Const refs (this is about the last of them in the core api)
693  * Fixed a missing reference to chanrec::modes
694  * Renamed to chanrec::modes, Renamed IsCustomModeSet to IsModeSet, GetModeParameter will now return the channel limit (as a string) for a request for mode 'l' and the channel key for a request for mode 'k'.
695  * changed binarymodes to use the custom_modes entries
696  * Adding to the buffer was clearing it first, reverting the buffering to a pre-alpha-6 kind of way of doing stuff (erk)
697  * Removal of shellscript kludge :)
698  * Work out revision id without src/svn-rev.sh!
699  * Complete removal of all stl stuff here
700  * Completely removed the deque
701  * Put some error checking back in here
702  * Temporarily removed output buffering as an experiment
703  * Changes to ./inspircd to hopefully work on freebsd as well as linux..
704  * Different way of using substr
705  * Deque doing some reallllly odd stuff
706  * deprecated covariant return type flux capacitor flopcircuit removal with reference pointer.
707  * Removed lots of claptrap debug in a well tested old section of code
708  * Start of conversion to const refs for std::strings in module api - A LOT OF STUFF WONT WORK YET
709  * Tidyup by making some thing sprintf only once rather than n times (where n is number of targets), String reference stuff for one function
710  * Only calculate the names list when a local user joins (this was being calculated for remote user joins, then thrown into the bit bucket)
711  * Doh @ null chars in an sprintf!
712  * Tweaked to use the same system as nenolod's NAMES patch for FJOIN
713  * MUCH FASTER squit! (and a TON more stable, too)
714  * Check if we're running -svnupdate on an svn version
715  * added added "./configure -svnupdate rebuild"
716  * Added ./configure -svnupdate
717  * Removed 8-space indents
718  * Commented all the new config stuff
719  * Now requires inspircd.h for ConvToStr templated function
720  * Tidyup and move ConvToStr to a publically accessible place
721  * Moved more stuff into right places
722  * Tidyup of commented out reminder code
723  * Mass tidyup of ServerConfig::Read and stuff
724  * Another const reference conversion, and remove redundant declaration of userrec* Find() from globals.h
725  * Test stuff for improved multi-tags in core
726  * Added MultiConfig for multiple-occurance config items
727  * patch <inspircd-userlist-ptr-safety.diff (Thanks nenolod)
728  * Missing a changeover
729  * Revert to string but return a reference, should be about the same speed
730  * Faster CullItem/CullList using strdup rather than copying a std::string
731  * Update docs to indicate hostname can be used in <bind> tag
732  * Support for hostnames in <bind> tag (so long as the hostname resolves to a locally bindable ip)
733  * Tidyup of config reader lowlevel reading
734  * Set bitfields on servermode
735  * Align names that are output on startup using \t htabs
736  * Moved typedefs etc into the header where they belong
737  * Tidyup of ServerConf::Read about half done (works)
738  * More const references, this is nearly it apart from the module API..
739  * Remove unused variable giving compile warning
740  * Convert more by-values to const references, optimise ConfigReader a bit
741  * Changing by-value parameters to const references
742  * Mostly formatting cleanup, rename a 'Ptr' to a more meaningful 'chan', remove some pointless nested if()s checking the same thing at each other
743  * Tidyup to pass some stuff by reference (much faster, no copy involved)
744  * Improved to avoid strlen
745  * Changed to unsigned char to get rid of warnings
746  * Improved strhashcomp with no allocations
747  * Typical. 0 and 1 to choose from, and i pick the wrong one. (back to front binary)
748  * UM_WALLOPS had value 3 which was a combination of UM_SERVERNOTICE and UM_INVISIBLE :/
749  * Added userrec::modebits - fast way of checking if user has +swi rather than an icky strchr
750  * Fix printf format to get rid of compile warning (using %d for a long, change to %ld)
751  * Correctly use iterators and pointer to ucrec
752  * Better calculation of LUSERS
753  * Changed LUSERS to show global current to not include unregistered connections
754  * Don't show channels where all users are invisible and therefore usercount is 0
755  * Add 'you are a nub' messages to /squit and /connect stubs
756  * Update to Start() credits, now refers users to /info output
757  * More cleanup, moved Om and myself to core team
758  * Calling a method of a null object due to refactoring and HasUser - fixed, (Thanks Douglas)
759  * Reformat according to coding guidelines.
760  * These modules were using deprecated Server::IsOnChannel. They arent any more smile.gif
761  * Removed deprecated Server::IsOnChannel (was a C++-ish wrapper to the C-ish has_channel, no longer needed)
762  * Removed has_channel(userrec*,chanrec*), the new preferred way of doing it is channel->HasUser(userrec), Yeah its the other way around to the old way, but somehow, seems less backwards to me (its also faster)
763  * Removed declarations of ancient and misspelled functions :/
764  * cmode was declared here too - declaration removed.
765  * cmode now returns const char* as it returns a pointer to a literal string and shouldnt be messed with
766  * Got rid of all that ugly char* cast crap (todo: change docs to reflect change)
767  * Fixed #defines to be enums (tidier), Removed UCMODE_PROTECT/UCMODE_FOUNDER
768  * Allow for fallback of older ircds without TS in BURST command
769  * Actually, 64., (256-64-128) = 64 chars printable alphabet (roughly)
770  * chanrec::custom_modes only needs 96 values not 190, (256 - 32 - 128)
771  * Stupid, retarded, idiotic bug here where any PONG after the first one gets you kicked. Never picked it up cause with Xchat's lag meter the server never actually PINGed me :"
772  * Changed m_sqlauth to allow more advanced encryption types
773  * Checks for timestamps, boot server off and abort if time delay > 10 mins (the safe value used by inspircd)
774  * Removed unneccessary temporary casts to char* when casting a userrec, Expanded on comment re. WriteOpers
775  * It's neat. It's tidy. It has no spaces, and almost matches our guidelines...
776  * More optimisations, memory saving, use the char* loop everywhere else seems to love so much, use short rather than int to save a little more ram
777  * Made this readable, removed spacing, etc.
778  * Avoid some ugly casts and save (well..system dependant..) about...3 bytes of ram! tongue.gif
779  * Speed up and deuglify the second part of CompressModes(), stop it searching for a character three times when it only needs to once, stop it allocating an ugly static char[2] it didn't need, and stop it creating a std::string it didn't need either
780  * Server::DumpText - Dump a *stringstream* to a user with a std::string prefix, splitting at 512 boundaries., Much more useful than cannibalizing a specialized function
781  * For the record, it's 17 lines - not 5.
782  * Made split_chlist available for external use from commands.h
783  * What MUPPET made stdin, stdout and stderr FILE* pointers rather than ints?!
784  * close stdin, stderr and stdout rather than freopen to /dev/null
785  * Took out space in version identifier that might break stuff
786  * Safety checking (a really really clever trick btw) in CullList, to make sure that the user we're removing IS the user that was marked for deletion X seconds ago, even if the user has since quit, to be replaced by another unfortunate wretch who was given the same pointer address (eeep)
787  * Buffer flush time now under 0.5 secs
788  * Flush user buffers more often (every 30 iterations), Run whowas hash maintainance every hour
789  * Tweaks to socket engine, faster buffer flush and hopefully more stable
790  * true and false transposed in new code
791  * Check for write errors in inspsocket (this is probably causing excessive cpu use when we have a large buffer to flush but a write error has occured (which we missed))
792  * Fixed timedbans (new mode parser didnt like being passed const char* elements as it likes to change them inplace)
793  * Improved userlist to avoid strlen
794  * Tidying, strlen, strcasecmp where not needed.
795  * TOPIC optimizations, fixes to mode setting with new custom_modes system
796  * Checking of user/nick/pass without strncmp! (compare object pointers in the command map!)
797  * Fixed to work properly with new refactoring
798  * Faster custom mode set/unset
799  * Added a 'max depth' to stop recursive issue
800  * Fixed issue with parameterless module modes
801  * Optimisation of optimisation tongue.gif ty w00tie
802  * Different way of displaying squit server group
803  * More work on /check.. now gives basic information on a user, no channel list yet - and port number doesn't display.
804  * No need to be inline in the include
805  * Fixed wtf-ery of Modules::SendTo - did i write this before WriteServ???
806  * Initial revision of /check - doesn't do anything yet
807  * Improved ProcessParameters (removed strlen)
808  * Changed return to break in mainloop for better efficiency
809  * Tidied (and COMMENTED) CommandHandler::LoopCall() -- commit so that i can test on brainbox
810  * Tidied GetMaxBans to leave the ConfigReader subsystem alone
811  * Removed unneccessary backticks from a copy/paste
812  * Added the beginnings of some function documentation
813  * Sorted out some silly indenting left over from an if() that died a death years ago
814  * I dont think there are any more non-essential strlcpy's left in here.
815  * Removed another strlcpy -- a lot of copying stuff that doesnt need to be copied if we're careful., Obviously in the past, we werent so careful and mucked up/polluted params as we dealt with them! :p
816  * Mode-code rewrite. Might act weird, needs proper testing (that is what svn builds are for, after all)
817  * Tidied up ProcessLine, instead of a ton of strlens use a tiny bit of char* voodoo
818  * Fixed to not show real server name if you have hiding of servernames in WHOIS
819  * Put it in alphabetical order and hope nobody noticed
820  * Add m_blockcaps to example config
821  * Add block caps module, I'm kinda between the extremes of 'Brain' and 'normal' here. Aka it compiles but I have nfi if it works tongue.gif
822  * Hopefully speed this up, it was strlcpy()ing every line even when +c wasnt set, and copying wasn't neccessary anyway
823  * Make install depends on make as requested by ol (also means i can build and install insp in one step again if i want)
824  * Colon before the reasons in STATS, so that it doesnt munge up the reason in certain clients
825  * Sped up introduction of nicks using vector::resize() rather than the craq++ loop (wtf was i thinking doing it that way?), Removed 'client connecting notices dont show locally during burst' -- this is silly as it doesnt work remotely and is pretty much pointless
826  * Fix for bug first noticed by zephyrus where you could send -j+ntr to a channel which has +ntrj, and see the mode change "-j+" - now strips off any trailing + or - chars
827  * More verbose when setting g/z/k/q/e lines from other servers. With the new system which prevents lag during bursts this won't flood opers quite so much to the point where they quit (i hope) :p
828  * Unknown command error now tells the opposite server WHICH command is bad so that people dont have to go sleuthing to find it
829  * Tidyup of m_hostchange to not use configreader on each connection!
830  * Tidied up m_override to avoid use of configreader during free-running
831  * Changed m_censor to avoid reading config several times for each pm
832  * Fix for MODE #chan +o- nick or +o-- nick, etc
833  * Fix to prevent recursive call to DoBackgroundTimer
834  * Added IS_SINGLE, see comment in include/inspircd.h
835  * Added a sleep on startup to stop it mucking up the display
836  * Changed output on startup
837  * Strdup's to stop corruption of oper classes
838  * speed up HasPermission by factor of hundreds, avoid using EnumConf and ConfValue outside of rehash *AT ALL*
839  * is_uline was an inefficient piece of crap - fixed.
840  * More efficient AddClient, initializes two identical buffers at once ;)
841  * Added stuff to log() to make it recalculate the time using asctime() less often
842  * Made host fields more correct 64 in length with 63 copies
843  * Improvements to TreeSocket::Split
844  * Made extensive use of charlcat to cut down on strlcat usage
845  * Added charlcat which appends a single char to a char* string (range checked)
846  * Changed definition of CallHandler and CallCommandHandler for the ability to return false on bad command., This allows us to terminate server links that send commands we dont know (e.g. admin loads module A after linking, we dont have module A, when it sends module A's command, abort)
847  * Extra checks that should prevent desyncs if you stuff up your type/class tags between servers
848  * Make ./inspircd ignore SIGPIPE and start running without the user having to type 'run' / 'r'
849  * Changed to require seperate 'make install' step
850
851 1.0.2
852
853  * Clarify an error message on KICK
854  * Allow removal of mode with new check
855  * Dont allow +J 0 or +J < 0
856  * Removed regexp check on epoll
857  * Fix for missing 'end of list' numeric
858  * Changed encryption to work with yield system
859  * Added checking for +sp channels to safelist that someone left out *nonchalant whistle*
860  * Documented cloak keys and prefix
861  * Changed to throw exception when theres no cloak key
862  * Changed loglevel of cloak key errors to SPARSE
863  * Added configurable cloakkey and cloakprefix
864  * Extra error output when fails to bind a port
865  * When quitting large amounts of users, use InspIRCd::DoOneIteration to prevent too much lag
866  * Add comment stressing the importance of certain elements of this file
867  * Changed some stuff to give a more accurate revision id
868  * With small sendq's, this can still exceed the sendq, so now we've reduced the amount it fills
869  * Extra output during sync to know if we're receving the other end's netburst or not
870  * Improved speed (not using strlen, take loop count)
871  * Made this safer, dont try and yield back when sending channel list or user list (our iterator may become invalid while we're using it!)
872  * Yields back to user processing to give users a chance to issue commands during heavy server congestion
873  * Moved the contents of the mainloop into a function called InspIRCd::DoOneIteration()., We can then use this to 'yield' if incoming server text is taking too long to process
874  * Moved to irc::string for commands in server-server so that whiney newbs can get os raw to work and fuck their networks over
875  * Whoops, overriding EVERY command!
876  * Added m_operwho, allows opers to list everyone
877  * Fixed Server* Srv stuff in these too, although by default these arent available to win32 builds
878  * How did this random stray '1' get in here before the brace?
879  * Server* Srv marked static or moved to private member of module class in all modules, paves way for removal of static-build-munging-regexp that breaks +eI
880  * Fix for segfault if name of file left off commandline
881  * Added ability to provide -logfile parameter on commandline
882  * Lowercase the servername automatically
883  * Auto-lowercase all server names read in from <link> tags so that people cant get the case of servernames confused (passwords are STILL case sensitive)
884  * Added m_safelist (yes om, i kept alpha order)
885  * Now sends out warning when oper on a remote server tries to execute a command that the local class tags say they shouldnt be able to access. Helps detect desyncs caused by muppeted configs, or just plain nefarious goings on.
886  * One character brain-wave fix (had idea at work)
887  * Nothing to see here, nothing, at all.
888  * Wrong address being bound by InspSocket when binding to a specific ip
889  * Decide that it wasn't quite appropriate :(
890  * Add entirely pointful smiley to comment
891  * Look-behind for missed timers up to 2 minutes (if your ircd has hung for 2 minutes, or your clock drift is > 2 mins, you have bigger fish to fry, like dead network or TS split)
892  * Removed bit of logging that said the timer was ticking -- we know it works now :)
893  * listusers has to be global now (ugh)
894  * Moved timer stuff from OnBackgroundTimer to InspTimer derivative
895  * Use ::AddTimer not AddTimer, or it calls this->AddTimer and loops
896  * Now copies libIRCDtimer.so
897  * Added timers.cpp/.h to makefile generation
898  * First revision of new timer code, not in the makefile yet (so it wont build till im done)
899  * Force burst to end if a remote server pings us, or answers a pong, if this is the case it just "forgot" to send an ENDBURST!
900  * Improved calculation to account for server name on start of numeric, plus spacing
901  * Perm elines (<exception> tag) not being applied - fixed
902  * SAFELIST 005 token is now part of m_safelist not the core 005
903  * Cleanups on module unload or user /QUIT
904  * Added m_safelist. This was originally w00t's code, but i bastardized it (just a little), WARNING: It's not finished yet and shouldnt be used, it might crash at this point in time if a user /quit's while listing., YOU HAVE BEEN WARNED! WITH A SPORK!
905  * Changed triggering time of OnBackgroundTimer to 5 secs (from 8)
906  * Added m_safelist helper functions GetChannelCount and GetChannelIndex
907  * Oh yae, Oh Yae, back in old days of yore, Ye Brain doth set the nick buffer as NICKLEN+1 to ease understanding by newbs who didnt know what thou null terminator was., And yae, at a date later hence, Ye Brain then setteth ye buffer back to NICKLEN again., Alas, neither Ye Brain nor Ye trusty followers hath then setteth back the rest of the core to NICKLEN-1, and verily, chaos ensued. :p
908  * Added which word is blocked to the numeric
909  * Added 'is a registered nick' to whois
910  * Made error more understandable on 'file not found'
911  * MAXMODES wasn't being enforced
912  * Enforce 64 char dns limits
913  * Added second form of find() taking const char*, which is faster in the core where char* is used more often
914  * Improved speed of Find() by passing reference to std::string instead of std::string itself
915  * It didn't, there was more strlcpy
916  * Fix to stop new code treating all KICK messages as server KICKs
917  * Fix for hide-ulines in /links
918  * Configure no longer allows gcc 2.x compilers AT ALL >:)
919  * AIEEE fucking overloaded operators
920  * Added + and == operators between std::string and irc::string., Its too late at night to wrestle with the = operator, this can wait for another time.
921  * Removed the 'one of' check for <dns>
922  * <dns:server> is now optional
923  * Throws exception on failed GetIOHook()
924  * Added check for if the servername contains a '.', if not append one on rehash, Added retrieval of nameserver from /etc/resolv.conf if <dns:server> is not defined.
925
926 1.0.1
927
928  * Server::AddExtendedMode and Server::AddCommand will now throw exceptions when adding a bad mode or already existing command. If the module constructor does not handle this exception, this will abort the module's constructor, forbidding loading of modules which are unable to function (smart eh)
929  * Added exception handling for module loading
930  * Fixed case sensitivity issue in m_censor
931  * Don't allow invalid channel names in /mode #chan +L #chan
932  * Added MAXPARA=32 to 005 (no other ircd has this, or allows a larger MAXPARA but its worth advertising this feature in case a client chooses to support it in the future)
933  * Update mode lists, fix mode lists, and alphabeticalise mode lists (:/!)
934  * Experimental speed improvement to sending encrypted lines
935  * Extra logging to log bad opertypes coming in from remotes
936  * Checking to prevent dodgy opertypes (opertypes must follow the same syntax as nicks now)
937  * Extra checking and exception handling in InspSocket::Write
938  * Fix for bug reported by TDC
939  * Moved custom_mode_params to per-channel
940  * Sped up disabled commands check
941  * Removed a whole lot of strchr's looking for mode +o where we can do if *user->oper
942  * All the messing with these files someone did and they  didnt notice we listed gcc2 as supported :p
943  * - More formatting changes
944  * - Made some notes about potentially restructuring things a bit
945  * - Useless loop removed, - Intenting cleaned up, - command_parse stuff (really) needs proper going over and at least commenting what stuff does.
946  * - Fixed some HORRIBLE indenting. Tabs, please., - Fixed channel keys being case insensetive., - Added a 'XXX' fixme.
947  * - Moved example configuration from docs/ to conf/.. Why did we have two example confs?
948  * - Docs update, b4 was a LONG time ago.
949  * - Minor documentation updates here, someone really needs to sit down and rework it a bit ;p
950  * - Manually bump revision ID, apparantly it's stopped doing it itself...
951  * - Oops, missed two includes
952  * - Check for +K before bothing to assemble knock message
953  * - Nazi stylistic changes.
954  * - Incorrect
955  * - Anal tidy of some comments
956  * - Let's stop using that nasty strchr() in a loop
957  * - Made note of some potential improvements in m_part. Brain, please review when you get a chance.
958  * - And in SAPART
959  * - Use IsValidChannelName() in SAJOIn
960  * Fix to compare against signed/unsigned warning
961  * Force initialization of fd to -1
962  * Error checking for out of range buffer reads (this shouldnt happen, read is being passed a max buffer size of 65536 but returning 6 million?! We check for it now.)
963  * Tidied up formatting of %f's
964  * Added RPL_MAPTOTL at request of Whitewolf
965  * Guess origin where server is lazy with PING/PONG and doesnt specify one, prepend the command's source :p
966  * remote ping added
967  * Remove code duplication by using core function. Remove global Server*..one step on the road to losing the bloody regexp :<
968  * s/No such channel/Invalid channel name
969  * Make use of IsValidChannelName() - as a side note, we perhaps shouldn't be returning 403 in CBAN...
970  * m_join: Use IsValidChannelName()
971  * Added bool IsValidChannelName(const char *) - it doesn't seem to blow things up...
972  * Add m_blockamsg to example config
973  * Initial commit of the /amsg blocker module
974  * Correct copying of confs (may generate some nonfatal errors)
975  * Renamed inspire.* inspircd.*, Removed obsolete server_tokens.txt
976  * Added anti-n00b warning to stop direct inclusion of the file with <include>
977  * Instantly apply lines when not synching
978  * Tweak to allow @%+ to all exist on a user at once during burst
979  * Extra checks to not set the ssl marker twice on re-handshake (nonfatal but wasteful)
980  * Check for >8 params in NICK
981  * Altered SVSNICK to echo back NICK message, grrrr, sodding ircservices-based services packages.
982  * Fixed 'eggy complains when not included' bug that causes segfault in brain
983  * Newline stripping for asctime()
984  * Added remote TIME
985  * Added PUSH command
986  * Added anti-retard check to prevent retarded flood settings
987  * Added a sanity check that was left out, prevents crash on invalid fd (e.g. via excess flood on oper or connect)
988  * Typo in some code that should usually be #ifdef'ed out anyway, but we still want this to work sometimes, maybe.
989  * Fix crashbug, copying MAXLEN into a MAXGECOS+1 field != cunning
990  * Added comment about the craqness of ServerConfig::Read()
991  * Checks to not propogate invalid or already-existing Xlines
992  * Increased how often socket timeout checks occur which will mean flushing write buffers more often
993  * Updated block numeric to read COLOUR >:)
994  * Finally FIXED ALL THE CRAQPIPE INDENTING (and lack of), *MESS THIS UP SO BAD AGAIN, AND I MOLEST YOU WITH A SPORK*
995  * Fixed cosmetic 'need to be halfop to change modes' when kicking
996  * Match bans against user::ip4 in add_channel
997  * Potential fix for CS Testnet bug, thanks to Special for helping with this one.
998  * Properly count remote opers in /LUSERS
999  * 005 update, removed duplicate WALLCHOPS reported by ThaPrince, added VBANLIST
1000  * Avoiding assignment of std::strings unless neccessary to speed up bursts
1001  * Faster ADDLINE code
1002  * Slightly more efficient write buffers
1003  * Tidying of snotices (adding '***' to start of WriteOpers texts)
1004  * Fixed WHOIS to respect +i channels, optimized in case where source == target by hortcircuiting operators
1005  * Added max and current local/global usercounts to /lusers same way as most other ircds
1006  * Now errors when sent SERVER on a non-server port
1007  * Modified ./configure to symlink ssl modules instead of cp'ing them, this makes updating easier in the future
1008  * Force initialize host to "" just in case it isnt (it should be however, as its constructor is called, but we know what ass-u-me did)
1009  * Allow remote bans from servers to be represented as servers in the banlist
1010  * Removed some debug notices that were mistakenly in the DEFAULT loglevel
1011  * Fixed /LINKS to show flat even in tricky mIRC.
1012  * Make ulines /swhois silently
1013  * Documented <options:tempdir>
1014  * Added support for  changing tempdir via <options:tempdir>
1015  * Yeah, this thing only uses 1 param, but requires 2? :p
1016  * Made devoice not oper-only (Congrats to the original coder!)
1017  * Fixed missing speech marks and stuff (vim and syntax highlight for the win)
1018  * Added more up to date helpop.conf from Custodis <tballen@bhcnetworks.com>
1019  * Fixed two unneccessary strlcpy's in the wildcard matching that just were there to lowercase it... we can do this inplace
1020  * Fix to allow empty but defined away message (yes, really)
1021  * Bugfix to cmd_modules, we've added some event types since it was written, could potentially overflow if issued when new ones used, Made cmd_away compile again
1022  * Propogation of away messages across network (we dont bounce the numeric back for every privmsg like other ircds, we burst them and keep them synched by broadcasting AWAY)
1023  * Fixes for (unlikely and theoretical) desync in TOPIC, Fix to not bother trying to write away response if user is not local
1024  * Fix to prevent use of aliases before reigstering connection
1025  * Add .c_str()'s to m_sqloper in call to OneOfMatches(), and change prototype of OneOfMatches to take const char* instead of char*. Either that or case all the .c_str()'s to lose the const :"
1026  * Bug in code for syncing cbans
1027  * Commented on new return value of OnUserPreKick for explicitly allowing kicks
1028  * Re-organized order of cmd_kick stuff (OnUserPreKick) to make override kicks work nicer
1029  * First-revision UNINVITE
1030  * Allow remote users to INVITE regardless of channel membership or op status, to prevent desync possibility
1031  * Make the alternative hosts be in alphabetical order sad.gif
1032  * Update example <oper> to demonstrate multiple hostnames
1033  * Allow space seperated hostlist in <oper:host> e.g. <oper host="foo@bar baz@qux blarp@flerble" name="blah">
1034  * Added "char status" parameter to OnUserPreNotice and OnUserPreMessage for NOTICE @#chan etc., Tidied up craq++ in modules (copy and pasting OnUserPreNotice into OnUserPreMessage?! why not just call one from the other!)
1035  * Stop trying to set an empty swhois if the <type> doesn't specify one
1036  * When rehashing by sighup and adding/removing modules, don't attempt to write a user because there isnt one :p
1037  * Added gnutls_rpath.pl. This works out the lib dir and does:, -Wl,--rpath -Wl,/lib/dir  and outputs it, the $LinkerFlags of gnutls, ssl module use it in backticks during link, so you dont get missing lib error
1038  * Only send 320 numeric if the SSL user is on our port
1039  * Add support for configured swhois lines
1040  * Add operators >> and << for irc::string and i/ostreams. m_cban utilises this
1041  * Optimized: strchr(x->modes,'o') has the same effect as (*x->oper) but *x->oper is potentially hundreds of times faster :p
1042  * Learnt how to speel Optimization, Removed redundant referance to value not in use.., Fixed 'First Build' Optimization flag not being set.
1043  * Fixed Brain's bug, showing 'Using SSL Module' regardless of if you say yes or no.
1044  * I R SECURE CONNECTION! (fix)
1045  * Check for time going BACKWARDS (yes. really.)
1046  * Added "FNC WALLVOICES WALLCHOPS" to 005 numeric,, WALLVOICES and WALLCHOPS are actually specified by STATUSMSG but this is, specified here to make it work with more clients. FNC = forced nick changes possible
1047  * Added '%' to STATUSMSG
1048  * Bugfix #69
1049  * Tidyup op/halfop/voice list on part/quit
1050  * Tweak module help for m_conn_waitpong
1051  * Stop uncloaked hosts showing to non-opers
1052  * Altered format of OnUserMessage
1053  * Allow for NOTICE and PRIVMSG from outside chan with a remote client
1054  * Added extra 'looking up your hostname lollerskates' output :p
1055  * Why are we using the users hostname to connect back to port 113? we can use ip here, and save ourselves a lookup
1056  * Added remote routing notices for RCONNECT
1057  * Added RCONNECT
1058  * Added <options:hideulines>
1059  * Added <options:flatlinks>
1060  * Added ircu-like hidewhois feature that allows hiding of server name in whois with arbitary string like '*.network.net'
1061  * Added m_globalload.so to module list
1062  * Added hidesplits to example conf
1063  * <options:hidesplits> ircu-style quit munging for netsplits
1064  * Removed steeeenking dll message, attempted to hide 'target is same' with launcher install
1065  * Added numeric 396 ("x :is now your hidden host") from hybrid/ircu
1066  * Removed bool return of DoBackgroundUserStuff()
1067  * Extra comments re. nonblocking DNS and use of IP addresses in constructor to speed up connect time
1068  * When socket fails to construct, we now check the GetState() of the socket object to detect this condition., If we dont, we can end up leaking fd's and RAM on failure. We dont use exceptions here as these operations can, occur very often.
1069  * More nonblocking dns stuffs
1070  * Fixes to set correct resolver address before looking up host
1071  * Nonblocking dns for InspSocket class (used by server to server)
1072  * Broadcast SPYLIST and SPYNAMES usage to all opers
1073  * Document m_spy here (yes Om, i kept alphabetical order!)
1074  * Users are gonna erupt in flamewars over this... and google will love us >:)
1075  * Major update, reordering and adding missing modules
1076  * Tidied up a kill message
1077  * Clean up ghosts on nick collision
1078  * *TEST* nick collision code for NICK change in server link
1079  * Only access-check local user kicks
1080  * Should always allow remote modechanges (FJOIN not effected as its not sent as a MODE)
1081  * Allow async dns to compile -- but its still experimental and should not be used on a production network!
1082  * Excempt ops kicking themselves from +J
1083
1084 1.0 Final
1085
1086  * Optimized WriteServ - why use %s!%s@%s when we have the more optimal userrec::GetFullHost() ?
1087  * Added new event into m_spanningtree, event id send_metadata, which allows arbitary posting of metadata outside of the netburst, see line 529 of m_ssl_gnutls for an example of how to use it.
1088  * Added check that forbids configuration as root >:-)
1089  * Major updates to CBANs...like they're reasonably functional
1090  * Added support for TYPE_OTHER metadata, where void* target will be NULL, e.g. its not bound to a user or a nick
1091  * Fix to send 403 on invalid channel name
1092  * Moved Write() call so that it can send the NICK message properly and force the client to change
1093  * Allow ulines to still notice the channel regardless of +T
1094  * Created OnPostOper that can be gauranteed to be called *after* opering (by ALL modules) is done
1095  * "Oper of unknown type" -> "313 %s %s :is an IRC operator"
1096  * Auto-assume "+" on the start of opermode block if not included
1097  * Removed example commands that never actually existed
1098  * OpenSSL detection and cert generation in ./configure
1099  * Changed length of password field to 64, giving us a maximum password length of 63 plus null terminator
1100  * Fixed uninitialized ExtMode::list
1101  * Added some extra debug
1102  * Make m_services use InsertMode (are we done yet?)
1103  * Changed On005Numeric to use InsertMode (we left one out?)
1104  * Deleted the semicolon that had half the dev team wondering...
1105  * Incorporated Craig's friendlier SQL class (documentation to come later)
1106  * m_sqlauth: Fix small memory leaks in some cases (bad password, bad query, lost mysql server connection etc..)
1107  * Correctly initialize userrec::password (should fix a few m_sql issues)
1108  * Add m_conn_waitpong, require clients to reply with a correct PONG to a server PING before they can connect
1109  * Remove unused includes and rename classes from ModuleSSL to ModuleSSLGnuTLS so we can be consistent across multiple SSL modules
1110  * Added warnings to opers when session limits are exceeded
1111  * Improved IP handling. Now uses in_addr to store client ip, not char[16]!, Added global and local session limits
1112  * Problems removing +t due to wrong bit-value being used in comparison
1113  * Altered so that if running in -debug mode, will not erase its .so files from /tmp to allow a clean backtrace
1114  * Removed unneccessary strlcpy
1115  * Removed a load of unneeded includes (poll.h etc)
1116  * Added <ident:timeout> example so that people remember to set this when using m_ident.so
1117  * Default ident timeout to 1 sec if not defined (a bit low, but better than 0!)
1118  * Updated m_ident to use inspsocket, should be more reliable
1119  * Added missing modules (newer ones)
1120  * Removed excessive debug for something thats now fixed
1121  * Merged Andy Church's isnick() and isident() patches - faster, more efficient, and doesnt accidentally allow "-" as the first character of a nickname, Also adapted to iterate over a char* pointer rather than using unsigned int for the for() loops
1122  * Added m_opersha256 module created by Special
1123  * Add module for anti-autorejoin channel mode +J
1124  * Changes to INVEX and EXCEPTS 005 tokens
1125  * Changed +l to drop the mode if the limit is same as current., Optimized check on numeric chars
1126  * Remove last relic of last goto in inspircd (an unused label)
1127  * Fixed to not have ohv in CHANMODES type A,, Added proper MAXMODES output in 005 instead of hard coded '13'
1128  * One goto is now no gotos.
1129  * Change m_redirect, m_joinflood and m_messageflood to put their modes in the correct section and to use InsertMode()
1130  * Add InsertMode function to helperfuncs.(cpp|h) for easily adding modes to the CHANMODES section of the 005 numeric
1131  * Added patch from Andy Church re spaces in SETNAME
1132  * Fixed line endings when skipping ssl cert generation
1133  * Documented some functions that were missing comments
1134  * Properly check that existing key resides in conf/ and not current dir
1135  * Added PRIORITY_BEFORE and PRIORITY_AFTER (see src/modules/m_hostchange.cpp for how it works, function Prioritize())
1136  * Added -modupdate to regenerate modules makefile, Added SSL option, as well as a 'Build Certificate' section (If avaliable)
1137  * Adding the +e and +I modules m_banexception and m_inviteexception, also adding their shared utility header
1138  * Added trick to allow local server to unset -r only in one specific condition (the nickchange)
1139  * Added joinflood +j
1140  * Made bans check both real and fake host
1141  * Patched to allow FTOPIC from users (so that chanserv can update the settime and the topic still come from chanserv)
1142  * Added <link:hidden> to docs
1143  * Optional IP-Hiding for servers
1144  * Use libgnutls-config --libs to configure linker options
1145  * Make relative paths in the config file tags be relative to the insp config directory
1146  * Change 974 numeric to 490 to avoid collision with Insp's failed to load module error
1147  * Make m_sslmodes messages appear in the channel window
1148  * Updated with new docs for maxtargets
1149  * Updated 005 to show changeable MAXTARGETS
1150  * Allowed for configuration of maxtargets in <options:maxtargets>
1151  * Wrong nicklen is shown in the 005 numeric, fixed (noticed by ThaPrince)
1152  * Initial commit of m_sslmodes, supplying chanmode +z
1153  * Allow for <bind> tags with no or empty type, as well as 'clients' ones
1154  * Set vendor and static module flags...even though the booms from trying to unload it would be fun sad.gif
1155  * Make errors loading certificates DEFAULT level
1156  * Inital commit of the first SSL module \o/ \o/ \o/ Also Ommeh's first official svn commit \o/
1157  * Added MakeWildHost to userrec (*!*@dhost), Added ban stuff to messageflood
1158  * Fixes to server kick (i hope)
1159  * And yae, the compiler sayeth to brain, fix thine warning. and thou warning art fixeth.
1160  * Made '*' ban-specifier work
1161  * Added OnChannelDelete() method (called on KICK, PART or QUIT where a channel is deleted for cleanup of metadata), Added m_messageflood.so
1162  * Tweaks for openssl compatibility
1163  * Stopped lines longer than 512b from being killed, instead, warning sent and dropped.
1164  * Fix to m_redirect to prevent circular link to self
1165  * Added <allowchannel:name> to allow specific channels
1166  * Test-fix for crazy's bug (/who 0 * as oper while on no channels)
1167  * Tony hart stars in a new show, to replace hart attack. YES, ITS CRAQ ATTACK! Now starring the cmd_invite 401 numeric fuckup! grin.gif
1168  * Umode +R was broken (only worked for channels) -- fixed
1169  * Removed all strncpy() calls and replaced with strlcpy()
1170  * strncpy sucks ass! -- Old code was using strncpy which doesnt null terminate a string if the string fills a buffer (!!!) - our strlcpy implementation fixes this.
1171  * Added unlink() to tidy up /tmp after each dlopen()
1172  * Added support for part messages in the module API (and therefore between servers too)
1173  * Fixed bug with {} -> [] etc in NICK where nick == newnick apart from irc-case:, [15:41] --- Brain is now known as [Brain], [15:41] --- {Brain} is now known as {Brain}, Now correct:, [15:41] --- Brain is now known as [Brain], [15:41] --- [Brain] is now known as {Brain}, Was just a strlcpy BEFORE the NICK output instead of AFTER.
1174  * Fixed so that ONLY ports of type "" or type "clients" are bound by the core, *everything else* is passed over now, not just "servers" type.
1175  * Changed lots of icky #define's to enums
1176  * Made <disabled> non-manditory, added check for when singular tags arent defined at all
1177  * Fixed SIGHUP rehash to actually send rehash event to modules
1178  * Added checks to forbid declaring certain config tags twice (ones which should only exist once like <server> and <admin>)
1179  * Added m_vhost, authenticated vhosts from the conf similar to unrealircd's way, requested by PinkFreud
1180  * Changed some .cpp to .so in the this->source field
1181  * Removed deprecated default= for bind tags
1182  * Removed deprecated LocalOp type
1183  * Added support for <options customversion> to customize the second part of VERSION
1184  * Bug found by PinkFreud - If an oper deopers themselves by removing the +o mode, their userrec::oper field isnt cleared. Clear it forcibly before DeleteOper.
1185  * Updated copyrights in headers etc using perl inplace edit
1186  * Made inspircd close and reopen its log on rehash
1187  * Removed some redundant (and commented out) functions
1188  * Made InspSocket::Read return an empty but non-NULL string when it receives EAGAIN (this method didnt know how to cope with EAGAIN before, may be causing random splits?)
1189  * Extra m_sql field checking
1190  * Fixed 'stops responding after server pingout, while using select' bug as found by merwin
1191  * Added RemoveSocket as a test fix for merwins bug
1192  * Replaced some 'n' with '*n' that was breaking userrec::MakeHost
1193  * Added extra safety check for a condition that should NOT happen (in theory, but still)
1194  * xline tweaks
1195  * Replaced sprintf's with some char* voodoo
1196  * Changed channel user lists from vector to map
1197  * Changed makefile to use 'install'
1198
1199
1200 1.0 Final - RC2 (KingArthur)
1201
1202  *  Added 'a' flag to STATS c which indicates autoconnect state
1203  * Removed tab characters from example conf
1204  * Added oper-only-stats option
1205  * Added 005 stuff after VERSION
1206  * m_park.cpp fixes (and anything else using UserToPseudo and PesudoToUser)
1207  * Used mkstemp trick similar to anope and unreal which copies the .so's to temp names under /tmp before loading them, using the current process's PID. This allows for module developers to *safely* rebuild a module (NOT the core) without a segfault while the ircd is up.
1208  * Aligned % fields in map
1209  * Changed printf specifiers in map to right-align digits
1210  * Added User Counts to /map
1211  * Nicer mode character loop
1212  * Revise some serious craq++ in AddBan
1213  * Fixed to not crash on /PARK (still more to test)
1214  * Added CASEMAPPING and CHARSET to ISUPPORT (005)
1215  * GCC 4.1 is more strict about extra qualification on members
1216  * Updated example configuration file
1217  * Fixes to typos and change to return by reference on GetClass
1218  * Changes to how classes are looked up (connects slightly faster) and fix for case sensitive passwords
1219  * Removed cvsignores, set svn:ignore property using -F .cvsignore
1220  * Added specific errors relating to invalid link tags (requested by Strike)
1221  * Tidyup of K&R style indenting, comments in silly places, and pointless curly braces around non-blocks
1222  * Changed to QueryType rather than short int for query types
1223  * Removed crappy linked list stuff and replaced with faster std::map
1224  * Improving niceness of DNS code, i WILL make this readable!, Changed a ton of ugly firedns #define's to enums
1225  * Minor cosmetic fault pointed out by Trystan
1226  * Blockcolor now blocks reverse and other mirc sillies
1227  * Ommitting \r and \n from debug display of outbound lines
1228  * Now uses two AES contexts, an 'in' context and an 'out' context
1229  * CBC encryption type in AES rather than ECB
1230  * Changed background stuff to occur more often
1231  * Made socket.cpp flush its write buffer more often (fixes odd lag on server to server connections)
1232  * Fixed broken checks to allow overriding
1233  * Optimized out some more redundant va_args voodoo
1234  * Double copies due to bad chop()
1235  * More removal of formatting where its not neccessary x("%s",str) == bad!
1236  * Attempt to cut out unneccessary printf() va_args voodoo (ugleh)
1237  * Cached ISUPPORT
1238  * Added output of error if file descriptor given to AddFd is > MAX_DESCRIPTORS
1239  * Changed to MAX_DESCRIPTORS
1240  * Changed 65535 to MAX_DESCRIPTORS calculated at configure-time
1241  * *FIX* 'No more connections allowed' was comparing against the network-wide limit rather than the local limit (ICK!)
1242  * Added extra checking to socketengine to refuse connections after we reach the max
1243  * Added counters for MAX_DESCRIPTORS etc which allows the socket engine to refuse new fd's once you hit the OS limit
1244  * Initial revision of /devoice.
1245  * Removed an unused OnUserConnect() method
1246  * Changed some little bits and bobs here
1247  * Fixed an extremely n00bish mistake involving referencing a global copy of ServerEngine when we now use one local to class InspIRCd, (everyone point and laugh at Brain)
1248  * Optimizing to not use so much cpu with high user loads
1249  * Made 'fake direction' less loud, removed 'invalid source'
1250  * Added SetSignals()
1251  * Signal handlers were not being set when -nofork was enabled
1252  * Changed some other stuff that used the old vector/deque style commandlist
1253  * Changed from std::map to hash_map
1254  * Command search function now uses std::map, should be faster (i hope)
1255  * Removed useless isnick() checks in Give* and Take*, in the name of tidiness
1256  * Tidyups to mainloop, why were we using isnick() to check if a user was registered?
1257  * New system for client exits using CullList seems stable, needs testing
1258  * Changes to the way clients are exited during mainloop - MAY BE UNSTABLE USE WITH CAUTION
1259  * Check on upper bounds of base64 decode
1260  * Added checking for bad base64 decodes
1261  * Updated chanfilter to use irc::string
1262  * Modified to omit unimplemented module methods
1263  * Fixed and implemented /modules debug <glob>
1264  * Added /modules debug
1265  * Added global_implementation array, bypasses calls which *NO* modules are currently implementing
1266  * Fixed missing I_On005Numeric
1267  * New 'Implements' system
1268  * Added support for implementation hooks
1269  * Adding hook type checking to event calls to speed them up
1270  * Allow halfop to dehalfop themselves`
1271
1272
1273 1.0 Final - RC1
1274
1275  *  Improved efficiency of chanrec constructor (removed strcpys)
1276  * Changed two fields in ConnectClass to strings, moved constructor stuff to init-list
1277  * Added 'build complete' message
1278  * Somehow, the examples had gotten into the conf/ dir, they belong in docs/
1279  * Improved m_alias to only capture complete commands and rewrite them (bug #92 as reported by strike)
1280  * Added more verbose error output during link
1281  * Added CAPAB checking to prevent some obvious n00biness that may occur
1282  * Initial revision of CBAN. It doesn't do anything useful just yet.
1283  * LD_LIBRARY_PATH setting is no longer required by core or m_sql.so
1284  * Changed $CompileFlags to seperate $CompileFlags and $LinkerFlags
1285  * Added -Wl,--rpath -Wl,LIBDIR to linking parameters to allow users to directly start the binary without the launcher, if they wish
1286  * Improved makefile dependency lists
1287  * Removed some redundant code that was commented out
1288  * Added extra sanity check in squit to make sure REMOTE Servers dont try and squit a server from itself!
1289  * Added Socket = NULL for local server class to prevent it being 'selectable' by squit
1290  * Made linking more nazi, will drop connections that send bad commands
1291  * Fixed to not allow :Abc NICK Abc, where the case of the old and new nick are *identical*
1292  * Added extra diagnostic messages during connect, if connect fails
1293  * Added stricter checking for encryption on connect, if enabled
1294  * Fixed case-change nicks not being propogated
1295  * Allow case changes in nick w00t -> w00T
1296  * Added extra key length checks, documented encryption in example conf
1297  * Added AES encryption to spanningtree links
1298  * Added IOHookModule stuff to allow for different modules to hook different ports
1299  * Fixed spanningtree to not allow malformed conf tags (missing/empty values), Added m_spanningtree, m_swhois and some clarifications to example conf
1300  * Split all commands into seperate files and redid command system to take classes, not function pointers (function pointers suck ass)
1301  * Moved serverstats* stats to InspIRCd class
1302  * Moved SocketEngine* SE into InspIRCd class
1303  * Moved mode stuff into modeparser
1304  * Moved command_parse functions into class CommandParser
1305  * Optimized away a memset made it potentially 10x faster
1306  * Fixed BUG, If an opers SendQ exceeded, it would bring down the server!
1307  * Added 'local users' vector
1308  * Full removal of inspircd_util.h
1309  * Improved pointer voodoo in chanmodes(), many less strlcats
1310  * Made apply_lines apply perm lines again
1311  * Added documentation for CullItem and CullList
1312  * Updated so that netsplits use the cull_list.
1313  * Added CullList class
1314  * Added Server::GetVersion()
1315  * Added new docs for class InspIRCd and globals.h etc
1316  * Removed depreciated docs
1317  * moved declarations of typedefs for user_hash and chan_hash etc to typedefs.h
1318  * Fixed a couple of missing \n's at request of Special
1319  * optimized a ton of strcmps down to an integer comparison!
1320  * Optimized accept() stuff to eliminate loop, idea while talking to w00t
1321  * Got rid of the evil loopy horrid mess in dnsqueue.cpp (singlethreaded dns lookups)
1322  * Made dnsqueue clean up its sockets from the socketengine properly
1323  * Prevented zlines from being allowed with a username/ident in them
1324  * Modified chlist() and whois to allow output of multi line channel membership list (!)
1325  * Made MAXCHANS growable for opers/ulines
1326  * Removed some logging that can cause excessively huge logs when select() is being used
1327  * Removed some remnants from mesh linking
1328  * Moved some stuff out to userprocess.cpp
1329  * Efficiency suggestion by w00t, faster processing of module sockets at the expense of a bit of ram
1330  * New version doesnt yield() any more
1331  * Made socket loop flush a users buffer if they still remain after processing each line
1332  * Changed how background processing works, now once per second repeating until nothing left to do
1333  * Tied in DNS to SocketEngine
1334
1335
1336 1.0 Beta 6
1337
1338  *  Added SPANNING TREE LINKING support, allowing for STABLE FAST and EFFICIENT linking of InspIRCd servers (m_spanningtree.so)
1339  * Added m_swhois module, allows setting of arbitary descriptions on users
1340  * Added a 'Base' installation path to allow installing of the launcher (handy)
1341  * Added support for the new <include:file> system.
1342  * Fixed Bug causing the base directory to always overwrite the other dirs
1343  * Added Base Directory Path to the Path list at the end of ./configure
1344  * Added Library Path to the path list at the end of ./configure
1345  * Improved layout
1346  * Added -lstdc++ for GCC 4 support
1347  * Removed connection.cpp and servers.cpp
1348  * Removed static meshed linking from core
1349  * Fixed code so that it will still work with kernel 2.8, 3.0, 3.2... whoops.
1350  * Added a chomp() just to be sure on kernel 2.6 check
1351  * Fix for bug #72 reported by Hal9000
1352  * Configuration errors now go to the error log
1353  * Updated to allow users to specify their compiler by hand
1354  * Added warning about gcc2
1355  * A lot more of the core consts are now configurable at compile time
1356  * Fixed removal of mesh linking from core
1357  * Added cvsignores
1358  * Added Metadata API (for transferring extensibles over a network transparent to the protocol)
1359  * GCC4.0 warning fixes
1360  * Added BoolSet utility class
1361  * Removed cross-server mesh stuff
1362  * Fixed missing constructor on class connection
1363  * Tons of DNS debugging and stability fixes
1364  * Added experimental multi-threaded DNS using pthreads!
1365  * Added notice-to-servermask
1366  * Added ability to output 'is an oper but i dont know what type' in WHOIS
1367  * Added clever code to propogate module's special commands (SAJOIN, KNOCK etc) transparently!
1368  * Added opaque protocol functions
1369  * Highly optimized userrec saving 1.5k per user
1370  * Added tons of extra documentation to Module class
1371  * Added OnCleanup function
1372  * Added OnChangeHost
1373  * Added OnChangeName
1374  * Added OnWallops
1375  * Removed old OnUserSync and OnChannelSync
1376  * Added Server::RehashServer
1377  * Added onrehash parameter
1378  * Added OnGetServerDescription (mainly for link modules)
1379  * Added OnPostLocalTopic
1380  * Added OnUserInvite
1381  * Added remote kill
1382  * Added opertype to OnOper and added OnMode function
1383  * Added reason to OnUserQuit
1384  * Added OnUserMessage and OnUserNotice (why have these been missing so long?)
1385  * Removed mesh module functions
1386  * Added OnLoadModule and OnUnloadModule (OnLoadModule was not triggering)
1387  * Tidied up socket engine code, moved into a specialized header full of #defines
1388  * Fixed to compensate for ~ in ident length
1389  * Optimized xline system (much faster, more efficient, less cpu usage)
1390  * Added insane tag (prevents wide gline etc)
1391  * Now shows remote quits differently
1392  * Fixed RFC-non-complaince of TOPIC and NAMES with +s channel (As reported by Ghost)
1393  * Fixed LUSERS and MAP to display 'dummy' data when no linking module is loaded
1394  * Changed behaviour of module API to pass Server* to the constructor, rather than have to create one (makes more sense)
1395  * DNS safety and logging
1396  * Fixed 'fake direction' messages being put out by user->registered = 7 being set too early
1397  * Removed the MESHED 005 numeric token
1398  * Changed epoll delay
1399  * Allowed ulined servers to by pass all oper permissions checking
1400  * Added stricter checking for listening sockets
1401  * Fixed compile time glitches in new code, removed obselete variables
1402  * Added ability for ulined servers to set any arbitary channel mode (even from outside the channel)
1403  * Added ability to put command named * into a class to make it cover all
1404  * Fixed Case sensitivity Bug (BugTrack #88) in m_chanfilter.cpp
1405  * Changed m_chghost.cpp to silently set hosts if uline sets it
1406
1407
1408 1.0 Beta 5
1409
1410  *  Added windows comments to module section. Added m_denychans. -katsklaw
1411  * Added 557 numeric (from MS Exchange chat server) to indicate too many results from /WHO
1412  * RPL_WHOLIMEXCEEDED changed to 523 to match bahamut
1413  * Added .cvsignore files
1414  * Added a ton of missing prompts wink.gif
1415  * Added cvsignore
1416  * Changed representation of MAXNICK in isnick() to allow for a non-incremented size
1417  * Fix for bug #70 (only first item working properly)
1418  * Fixed max channel length
1419  * Added ability to update the helpop file on rehash (Bug #69)
1420  * Added denychans module, allows blocking of channels
1421  * Added parameters to comments
1422  * Changed so that when the first in the channel gets founder, the +q mode change is sent to keep the client synched (requested by katsklaw)
1423  * Fixed nicklength perpetually increasing on each run (reported by katsklaw)
1424  * Fixed to never append double sums
1425  * Fixed to preserve epoll/select/kqueue choices
1426  * Operhosts are now optional (in the type tag)
1427  * Added check to not flush disconnected buffers
1428  * Added code to not try and increment buffer if wrote 0 chars
1429  * Added extra code to notify mainloop when the iterator has been mangled (e.g. by netsplit quits)
1430  * Added more immediate disconnect when a server isnt routable any more
1431  * Added ping checks for server links (experimental)
1432  * Added stuff for /map improvements
1433  * Autoconnection of servers added
1434  * Changed to not show remote quits (we don't show remote connects after all)
1435  * Fixed compile glitch on 3.4
1436  * Fixed inbound server errors
1437  * Fixed to erase .so and binaries before trying to overwrite them so mmap doesnt mess up and segfault any running copy (thanks jilles)
1438  * Fixed to flush buffers when connection closed
1439  * Fixed to not autoconnect servers we already have!
1440  * Nonblocking connect() for outbound server links (why was this blocking anyway)
1441  * Changed /map to show authenticating servers with a * similar to hybrid
1442  * Now clears the autoconns map on rehash
1443  * Sum not being propogated properly fix
1444  * Example conf update from katsklaw
1445  * Buffer size limits (hard coded to 1mb for now, will allow to raise in config later)
1446  * Fixed bug where when a server split all other servers would stop responding
1447  * Fixed the server names reported in /stats l
1448  * Output buffering on server connections
1449  * Removed m_globops setting +g automatically on oper, m_opermodes.so can do this now
1450  * Tidied up some socket stuff into userrec
1451  * Changed revision id's to std::string
1452  * Added m_opermodes.cpp, allows addition and removal of modes on oper up
1453  * Added COMMANDS command (yes, really)
1454  * Added detail to /COMMANDS
1455  * Changed cygwin warning
1456  * Changed to fix minor typo in dynamic-build makefile
1457  * Edited to properly detect strlcpy on netbsd (different declaration in string.h didn't match regexp)
1458  * Fixed /COMMANDS
1459  * Fixed case-sensitivity typo in module name for Addcommand
1460  * Fixed crappy const stuff
1461  * Modified to detect kqueue on netbsd
1462  * Removed stupid consts
1463  * Updated helpop docs
1464  * Added eg++ stuff
1465  * CC fixes
1466  * Changed to use gmake on ALL bsd variants
1467  * Kill fixes
1468  * Warning message for openbsd users that try and use gcc
1469  * Added -lresolv for solaris
1470  * Added -lrt for solaris
1471  * Bzero removed for compatibility with solaris 10
1472  * Fix to minor typo in solaris stuff
1473  * Fixes for solaris
1474  * Fixes to bad filehandle
1475  * Removed unncessary sched_yield calls
1476  * Updated for solaris -lsocket / -lnsl
1477  * Added configurable SOMAXCONN size
1478  * Changed epoll_wait timeout
1479  * Default epoll/kqueue to yes
1480  * Added: Epoll support
1481  * Kqueue and epoll default to enabled now
1482  * Made prompts clearer
1483  * Mass-connect speedups, also now uses less processor time
1484  * Moved a load of servers-only stuff into serverrec out of the way of userrec
1485  * Shrunk some datatypes
1486  * Removed __single_client_alloc again because gcc devs were smoking crack and removed it
1487  * Added hashcomp.cpp, seperates out the stl hash_map stuff
1488  * Added a few simple output lines (similar to gnu autoconf so people know what's happening)
1489  * Added better detection of strlcpy that doesn't involve compiling a test program (faster)
1490  * Added detection for kqueue, so if your BSD system doesn't have it, the configure doesnt ask you smile.gif
1491  * Added docs for hashcomp
1492  * Added idea from ircu: /invite with too few params shows the channels youve been invited to but have not yet joined
1493  * Added irc::string
1494  * Specified namespace std in *all* files
1495  * Fixed typo in die tag
1496  * GCC 3.4/4.0 fixes
1497  * Made 'make clean' make cleaner :-P
1498  * Made modules use irc::string where they were using strcasecmp()
1499  * Moved StrHashComp and InAddr_HashComp into the irc:: namespace
1500  * Moved a ton of functions into helperfuncs.h to speed up recompiles
1501  * Updated strhashcomp to use irc::string internally rather than a combination of strlower and strcasecmp
1502  * Updated to keep lowermap const within hashcomp.cpp
1503  * Added 'uniqueness sums': http://www.inspircd.org/wiki/InspIRCd_Serv...Uniqueness_Sums
1504  * Added RFCs
1505  * Updated example conf to list all non-extra modules with a description of what they do.
1506  * Modules now commented out by default, admin must uncomment them to use them. Suggested by lag``
1507  * Added Server::GetServerDescription() at request of Craig
1508  * Re-added the dot graphs again
1509  * Added docs for new smaller memory footprint classes
1510  * Changed the type of struct whowas records are stored in (no need to waste a big heavy userrec)
1511  * Customizable by-byte-size recvq stuff
1512  * Documented new recvq and sendq stuff
1513  * Fixed wrong number being shown when sendq exceeded
1514  * Honking great memory leak fixed that's been there since the early alphas :/
1515  * Optimized some static structs
1516  * Structure optimizations, changed a lot of bools into binary bitmasks
1517  * Updated default sendq size to 256k
1518  * Added sendq stuff, see example config
1519  * Fixed weird bug where on mass join/part flood, the channel would be purged before it was actually empty due to its counters being screwed up
1520  * Added Cache support for the KQueue Question
1521  * Fixed Optimisations not being set.
1522  * Added ability to accept() more pending sockets at once
1523  * Added socket engine to version response
1524  * Fixed crash when socket reads 0 whilst in kqueue mode
1525  * Fixed kqueue setting not being changed
1526  * Made ping check loop less regular in kqueue version
1527  * Changed pool size from 64 to 1024
1528  * Fixed some of Brains bastardization of configure biggrin.gif
1529  * Fixed Craig's buggy configure tongue.gif
1530  * Fixes to way allocations are handled
1531  * Hit dns with spork. Repeat until crispy.
1532  * Modified to rm the .o files from the modules dir
1533  * Modified to use -pipe
1534  * New way of building modules, this is supposedly more portable
1535  * Now secures binaries with 0700 perms as theyre installed
1536  * Optimised strlower (much faster, uses a lookup table)
1537  * Optimized userlist() (a lot faster with many users online)
1538  * Fixed bug where another users buffer could end up in the buffer of an exiting client before they quit
1539  * /WHOIS as oper now shows real ip as well as real host
1540  * Added USERIP numeric 005 output
1541  * Added m_userip.cpp requested by Selphie
1542  * Changed the final bunch of udp_* vars to server_*/tcp_*
1543  * Fixed ircservices sending PING
1544  * Changed to fully dynamic core (should be faster compile times)
1545  * Fix naming glitches
1546  * Fixed remote kills to display the correct source (spotted while talking to aquanight)
1547  * Fixed to use numeric 340-
1548  * Renamed core files to all be libIRCD*
1549
1550
1551 1.0 Beta 4
1552
1553  * Fixed configure bug resulting in osflags being called BEFORE getcache (Making it redundant.)
1554  * Fixed output of src/modules/Makefile saying it was made by Craig.net tongue.gif
1555  * Updated for test gcc4 compatibility
1556  * Added support back for ./inspircd
1557  * Added a line to automatically chmod ./inspircd to 0744 ('Last Second Save!')
1558  * configure now supports any future .file.inc includes (Yes, i can see into the future)
1559  * Updated makefile
1560  * New Perl ./configure
1561  * Added -Woverloaded-virtual to catch annoying module typos
1562  * Fixed to always look for the ircd.log within the bin/ dir
1563  * Fixed to not spool the error log after ./inspircd debug
1564  * Sanity checks for fd_ref in addclient
1565  * Fixed 'server ignores me forever if i throttle the server with connections' bug
1566  * Debugging now allowed from ./inspircd (./inspircd debug)
1567  * Added LD_LIBRARY_PATH hacks/kludges to the .inspircd.inc file to make it find libmysql in funny situations
1568  * Added final documentation for inspircd Beta 4
1569  * Added important note relating to ip addresses in <link:ipaddr>
1570  * Added schema for m_sqllog.so
1571  * Added m_sqloper, allows storage of opers within a mysql database
1572  * Commented new functions
1573  * Major *MAJOR* optimizations by double-referencing channels to users (never need to scan the entire user hash again except in very rare circumstances)
1574  * Added channel 'counter', increases speed of quits, parts, kicks
1575  * commented some users and connections code
1576  * added remote @* notice
1577  * Added remote versioning
1578  * Fixed dicky buffer (due to cleanup the wrong variable was being used)
1579  * Services speedups for stupid buffered i/o uplinks
1580  * Added server input buffers (for systems that decide buffering is fun)
1581  * Major code tidyup (-W)
1582  * Fixed some flood checking
1583  * added noticeall
1584  * Added a Server:: method to send server notices to channels
1585  * Added explicit oper tracking in a vector of userrec* pointers, optimizes sending out oper notices
1586  * Fixed: +s and +p channels wouldn't be synched correctly
1587  * Fixed: +s and +p never show in whois even when you're a member of them
1588  * Fixed: +s and +p never show in list even if you're a member of them
1589  * Added Server::FindDescriptor
1590  * Added and tested fd crossreference table - improves speed a lot, and fixes one of the /STATS chars which has been broken a while
1591  * Added OnAddBan and OnDelBan module api calls, and fixed glitch which required them in m_timedbans module
1592  * Added OnOperCompare function to override strcmp in password check for /oper
1593  * Added module message passing architecture
1594  * Added a few anti-flood features
1595  * Updated buffering, faster and more sensible (old code sucks)
1596  * Added password field
1597  * Removed some debug output
1598  * Added /stats T
1599  * Empty but non-null string passed to is_uline now returns true
1600  * Added numeric 318 to /WHOIS when nick is not found (end of whois should still be there as its a list response)
1601  * Added numeric 412 "no text to send"
1602  * Changed to handle : as a NOP token so that 'assuming' inspircd knows RFC commands wont cause tons of errors
1603  * Fix to a mode parsing bug (eating wrong version of parameter?)
1604  * fixed warning of redefinition of RUSAGE_SELF
1605  * Fix annoying off-by-one error in connection::RecvPacket
1606  * Added more fault tolerance to server links
1607  * Added new /stats z
1608  * Fixes to /who output
1609  * Added mode 'compression', stops abuse with modes like: +s-s+s-s+s-s
1610  * Test fixes for /version strings not being set in burst
1611  * Fixed a reversed strcmp
1612  * Added 901 numeric - end of modules list
1613  * Added support for /SQUIT <mask> and checks against /SQUIT *
1614  * Changed remote kill reason text
1615  * Fixed strange leading ":" on remote Z/K/G lines
1616  * Fixed so that quitprefixes are shown in client exit notices
1617  * Added global oper monitoring through modules and global connect monitoring through modules
1618  * Fixed weird issues when anope sends large amounts of text at once to the uplink
1619  * Fixed dodgy poll()
1620  * Added new and improved GetBuffer function based on research on crappy redhat 7.3
1621  * Fixed park crash bug #63 reported by ViaraiX
1622  * Reordered some on-connect network stuff to stop services being so confused
1623  * Extra safety checks to avoid trying to write() remote users
1624  * Optimized WriteCommon and WriteCommonExcept
1625  * Fixed weird line wrapping bug with extremely long lines
1626  * Made xline notices neater when notifying of unknown connections
1627  * Fixed WriteCommon not writing to the source user when not on any channels
1628  * Changed "is now running" message to AFTER port bind checks
1629  * Added PID reporting and testing before daemonize
1630  * Changed startup ascii to green. Elphaba would be so proud tongue.gif
1631  * Fix to prevent empty umodes
1632  * Fixed empty modes from nickserv
1633  * Optimized modes (removed strlens etc)
1634  * Fixed empty modes issue that emerged after dodgy code was corrected
1635  * Fixed services not being informed of force joins
1636  * Fix to prevent quits being sent onto the network for nonexistent users
1637  * Added faster wildcard checking routines
1638  * Fix for bug #62 (replaces only occur once per line in m_censor)
1639  * m_chanfilter now works on gcc 2.95.x again.
1640  * m_chanprotect fixed to remove privilages upon kick
1641  * Fixed WriteChannelWithServ
1642  * Added module which provides MD5 encryption for oper passwords plus /mkpasswd
1643  * Added another check for 'NoServerUline' type thing in m_services.
1644  * Added Check for 'NoServer' when +r ing a channel in m_services.
1645  * Added m_timedbans (timed bans module for channel ops/halfops)
1646  * Added m_sql, module to provide sql db access to other modules
1647  * Added m_sqlauth - allows authorizing of connections via an arbitary mysql table with a username and password field
1648  * Added m_sqllog - allows you to log your irc information to an sql database
1649  * Added m_sqloper, allows storage of opers within a mysql database
1650
1651 1.0 Beta 3
1652
1653 Added rm -rf src/modules/*.so to make modclean
1654 Added module message passing architecture
1655 added Module::OnMeshToken
1656 added Server::MeshSendAll
1657 added Server::MeshSendCommon
1658 added Server::MeshSendAllAlive
1659 added Server::MeshSendUnicast
1660 added Server::MeshSendAllExcept
1661 added Server::MeshCheckChan
1662 added Server::MeshCheckCommon
1663 added Server::FindModule
1664 added New docs for API
1665 added Module::OnRawMode
1666 added Module::OnCheckInvite
1667 added Module::OnCheckKey
1668 added Module::OnCheckLimit
1669 added Module::OnCheckBan
1670 added Module::OnStats
1671 added Module::OnChangeLocalUserHost
1672 added Module::OnChangeLocalUserGECOS
1673 added Module::OnLocalTopicChange
1674 Added Server::AddGLine
1675 Added Server::AddKLine
1676 Added Server::AddZLine
1677 Added Server::AddQLine
1678 Added Server::AddELine
1679 Added Server::DelGLine
1680 Added Server::DelKLine
1681 Added Server::DelZLine
1682 Added Server::DelQLine
1683 Added Server::DelELine
1684 Added Server::Duration
1685 Fixed /LUSERS server count
1686 Updated documentation of <connect> tags at request of Strike
1687 Fixed somebody putting double closing tags, nullifying the effect of allowhalfop in the example conf
1688 Removed deprecated class 'packet'
1689 Fixed Dns free() errors
1690 Added ability for modules to hold users in a 'holding pattern' while they do stuff on connect
1691 Added OnUserDisconnect method to modules.* to fix fd leak in m_ident.cpp
1692 Added the m_chanfilter module, implements chanmode +g which allows channel specific badwords (YAY)
1693 Added Module::OnSendList
1694 Added m_conn_lusers.so: Sends /LUSERS on connect
1695 Added m_ident.so: nonblocking ident lookup module
1696 Fixed /kill bug in m_operlevels (couldnt kill non-opers)
1697 Changed m_override: Fine-grained control over what can be overridden by whom
1698 Added m_park, user parking to keep ops during a ping timeout (suggested by Ib3N)
1699 Fixed limit checking in core and m_redirect.so
1700 Added m_setidle, allows opers to set their idle times
1701 Added Module::OnBackgroundTimer method, ticks approximately every 5 seconds
1702 Yet more optimizations!
1703 Added 'server already exists' check for u-type links
1704 Fixed bug when ordering a bot to leave using anope services
1705 Fixed anope module sending L tokens with 2 instead of 3 params (made code more tolerant instead of changing module)
1706 Fixed broken server/server handshake for U-type server links (services)
1707 Fixed strhashcomp to forbid matching scandanvian nicks properly eg. [Brain] and {Brain}
1708 Fixed lingering (SO_REUSEADDR was being set to 0?)
1709 Added Module::OnCheckReady and Module::OnUserRegister
1710 Updated /INFO
1711 Fixed to allow server to server traffic again (DOH)
1712 Added PID reporting and testing before daemonize
1713 Changed "is now running" message to AFTER port bind checks
1714 Fixed strange join behavior reported by w00t (mirc requesting MODE immediately after JOIN)
1715 Fixed bug #47 reported (and suggested fix) by Om
1716 Fixed bug where if channel limit was lower than the user count users could still join, but not if it was equal
1717 Added Module::OnUserKick and Module::OnUserPreKick
1718 Added Server::PseudoToUser and Server::UserToPseudo
1719 Made setrlimit a commandline option
1720 Removed some old uneeded code
1721 Made cmode and chanmode more safe
1722 Fixed a double free in dnsqueue.cpp
1723 Fixed a resolver issue (weird segfault on gentoo?) in server linking
1724 Double 367 numeric glitch fixed
1725 Added Server::IsValidHostMask
1726 Added getrlimit/setrlimit to set process limits to allow a core dump
1727 Removed some logging from wildcard.cpp
1728
1729 1.0 Beta 2
1730
1731 * Added a lot of small fixes based on feedback of beta 1
1732 * Fixed compile issues on freebsd due to an icky shellscript expression that failed to detect strlcat
1733 * Added more advanced m_override.cpp module due to user request (thanks Rob)
1734
1735 1.0 Beta 1
1736
1737 * Enough optimizations to shake a very big stick at
1738 * Added asyncronous DNS
1739 * Changed /MODULES to allow simplified output for non-opers
1740 * Added module flags to /MODULES for opers
1741 * Added /UNLOADMODULE
1742 * Added /LOADMODULE
1743 * Added resource tracking for modules
1744 * Added extra log output for oper success and failure
1745 * Added hostname checking for opers (someone left it out *looks around nonchalantly*)
1746 * Added module API OnUserPostNick method
1747 * Added E:Lines and /ELINE (ban exceptions)
1748 * Security fixes to /MODE and /TOPIC
1749 * Fixed a cosmetic bug in /WHO
1750 * Fixed random crashes when user connecting
1751 * Fixed 'unlikely' crash if nick was changed before dns lookup completed
1752 * Fixed to actually check the password of linking servers (someone left this out too!)
1753 * Added error checking to make sure opertypes exist before opering a user!
1754 * Added 005 handling for modules
1755 * Added onKill event for modules
1756 * Added OnModuleLoad event for modules (notified of all module loading)
1757 * Added <disabled:commands> tag
1758 * Added ability to disable any command for non-opers
1759 * Added customizable ping frequency to <connect:allow>
1760 * Added optional module path to the configuration file
1761 * Added support for Rehashing to allow adding and removal of modules
1762 * Added module VersionFlags support
1763 * Fixed a resolver issue (weird segfault on gentoo?) in server linking
1764 * Changed the loglevel of some startup failure messages to DEFAULT (were DEBUG)
1765 * Optimized connects - motd is sent faster
1766 * InspIRCd now logs value of <die> to the logfile on failure
1767 * Added new <banlist> tags, allows dynamic banlist sizes on a per channel basis rather than hard coded or network wide
1768 * Fix for bug #39, m_redirect returning invalid/random value for OnUserPreJoin method of the module class
1769 * Added code to shutdown listening sockets on exit
1770 * Added pid file support, and documentation for it
1771 * Fixed string format vunerability, thanks again to the #ratbox people for helping find it
1772 * Fixed 005 numeric to only output 13 tokens per line (thanks anfl)
1773 * Replaced some 005 constants with their configured values
1774 * Fixed "error in free()" and other bugs going to open sockets
1775 * Config files read by the ircd are now chmod'ed 0600
1776 * Fixed parsing error with comments that have tabs before them
1777 * Added implementation of strlcpy and strlcat for systems that dont have it
1778 * Fixes to crash when setting the key of a channel youre not a member of
1779 * Fixed issue where failing modules would bail by calling exit (deprecated) -- modules should now just disable their functionality if they are missing data
1780 * Added GetVersion() to m_showwhois.cpp
1781 * m_chanprotect.so fixed to take away +q and +a when the user parts the channel (double DOH)
1782 * Added 005 numeric handling to most of the modules
1783 * Added m_hostchange module, our own homebrew implementation of the unreal pay module!
1784 * Added m_nicklock module, a module which allows opers to lock a user to a nickname until they quit
1785 * Added m_operlevels, prevents opers designated as above other opers from being killed
1786 * Fixed Crash bug cause by multiple declarations of 'Srv' in m_randquote.so (Bug #35)
1787 * Added m_remove by om, uses a force part to replace a kick to thwart auto rejoin
1788 * Added module to restrict channel creation to opers only (requested by [ed])
1789 * Added a module at request of [ed] which stops anyone messaging all but opers
1790 * Added m_silence.so - implementation of /SILENCE command
1791 * Added ./inspircd (start|stop|restart|rehash|status|cron|Cheese-Sandwich) (Happy luigiman?)
1792 * Made a slightly nicer method for .Makefile.inc
1793 * Updated ./configure to reflect the above changes.
1794 * Removed reference to depricated ./makeconf and updated command to exec to build the daemon.
1795 * Added dynamic src/modules/Makefile generation, during ./configure the script will search modules for /* $CompileFlags: */ and append any given flags to its g++ line.
1796 * Startup script modified to kill -9 if a kill -TERM fails.
1797 * Makefile will ignore if cp fails to copy the binaries.
1798 * Added <disabled:commands> to the example config (commented out by default!)
1799 * Documented /LOADMODULE and /UNLOADMODULE plus new /MODULES behaviour
1800 * New docs to match extra module Version class stuff, etc
1801 * Added new documentation for ELine class and OnUserPostNick method
1802 * Added DNS class to documentation
1803
1804 1.0 alpha 12
1805
1806 * Updated ./configure to detect GCC 3.4.x
1807 * Added m_showwhois.so - lets opers see when theyre WHOISed
1808 * Added m_opermotd.so - Gives opers an opermotd on oper-up
1809 * Added m_operjoin.so - Forces opers to join a given channel when they oper
1810 * Security audit resulting in more secure and stable code
1811 * Added lots of error checking to the configuration parser
1812 * InspIRCd now works with BOPM, please see the tutorial on our forums
1813 * UMODE issues with SVSMODE finally addressed, working fine again
1814 * Services issues addressed and fixed
1815 * Added generic error output to the ConfigReader class (ConfigReader::DumpErrors())
1816 * Fixed sys/socket.h error on earlier versions of GCC (2.95.x)
1817 * Redone documentation
1818 * Fixed mode changes (they actually work now!)
1819 * Module passes service names to its uplink now
1820 * ChanServ actually sets channel modes rather than the server!
1821 * NickServ actually sets umodes rather than the server!
1822 * Double-mode-changes no longer occur
1823 * User nickname registration tracking with +r works properly again
1824
1825 1.0 Alpha 11
1826
1827 * Added lots of bugfixes
1828 * Optimised, works faster, and smoother
1829 * Added support for non-mesh servers
1830 * Added services support
1831 * Implemented example ircservices module (working with ircservices 5)
1832 * Added m_services module
1833 * Added m_antibottler module
1834 * Added m_alias module
1835 * Added glines (local and global)
1836 * Added klines
1837 * Added qlines (local and global)
1838 * Added zlines (local and global)
1839
1840 1.0 Alpha 10
1841
1842 *  Added server linking support (tcp based mesh link)
1843 * Lots of stability fixes
1844 * Speed improvements
1845 * Optimisations, no longer eats cpu so much
1846 * GCC3 and GCC2 support
1847 * Even bigger module API
1848 * More documentation
1849 * m_antibottler, labels bottler bots
1850 * m_chghost, gives you a /chghost command
1851 * m_cloaking, gives you hostname cloaking and mode +x
1852 * m_filter, filters glob patterns on channels and private
1853 * m_globops, provides /GLOBOPS and mode +g support
1854 * m_helpop, gives /HELPOP and mode +h support
1855 * m_sajoin, force-join a user to a channel
1856 * m_sapart, force-part a user from a channel
1857 * m_samode, force a mode change on a user or channel
1858 * m_saquit, force a quit of a client without /kill
1859 * m_sethost, allows opers to change their hostmasks
1860 * m_setname, allows users to change their name
1861 * HELPOP documentation accessible with the helpop module loaded
1862 * Split the ircd into many smaller files for faster compiling
1863 * Improved configure and makefile phase
1864 * Added all oper commands (CONNECT, SQUIT etc)
1865 * Added remaining server->server commands such as /MAP
1866 * Connection pooling, uses less CPU for the same tasks as before
1867 * High-powered server to server link protocol unlike any other ircd
1868
1869 1.0 alpha 9.5
1870
1871 * Added support for /connect (no sync yet!)
1872 * Added extra module support and improved api
1873 * Improved developer docs, see http://www.inspircd.org/docs/
1874 * FINALLY fixed crash-on-disconnect bug
1875 * Fixed many stability bugs
1876 * Fixed length and buffer overrun issues that caused user records to become corrupted without crashes (!)
1877
1878 1.0 alpha 9
1879
1880 * Added /WHOWAS
1881 * Made ircd cache message of the day in a vector (faster!)
1882 * Added support for multiple lines of /NAMES on large channels
1883 * Added hostname/ip caching to speed up connects
1884 * Added '/stats z'
1885 * Added Server class
1886 * Added more code to example module demonstrating use of Server class
1887 * Added Admin class (holds /admin info for modules)
1888 * Added methods to Server class
1889 * Added m_cloaking.so module, provides host masking
1890 * Added /AWAY
1891 * added /ISON command (for mIRC etc basic notify)
1892 * Added /USERS stub
1893 * Added /SUMMON stub
1894 * attemted to fix weird crash on /kill
1895 * added pause= value to /die and /restart in config
1896 * Attempted to fix closed client sessions not being detected
1897 * Added wildcard support
1898 * Added channel bans
1899 * Changed user and channel structs to classes (finally)
1900 * Fixed parameter error in QUIT code (was showing junk chars on BSD)
1901 * fixed some ugly pointer bugs (thanks dblack and a|KK|y!)
1902 * Added /INVITE command and relevent structures
1903 * Added CONNECT ALLOW and CONNECT DENY config tags
1904 * Added PASS command
1905 * Fixed: /LUSERS cant count :P
1906 * added /TRACE command
1907 * Implemented channel mode +m
1908 * Added channel modes, +k, +l, +i, +m etc
1909 * Added user and channel modes +i, +p, +s
1910 * Implemented usermode +s
1911 * Fixed dodgy mode glitches (the ones Craig loves to play with, awww)
1912 * Added code to tidy up bans (e.g. max nick length) - i blame mIRC!
1913 * fixed multiple /MODE +l bugs (thanks to akky and BOFH bugging meh!)
1914 * Fixed ident max length to 10
1915 * fixed random crash on kill_link (AGAIN) - was /stats
1916 * improved speed 10x (because i can...)
1917 * optimisations galore!
1918 * Added FileReader file-caching class
1919 * Changed m_randquote to use FileReader class
1920 * Neater source tree (binaries in bin, source in src, headers in include, etc)
1921 * Added /WHOWAS
1922 * Tidied up makefiles
1923 * Much nicer configure program
1924 * makeconf program (very nice config maker by Craig)
1925
1926
1927 1.0 alpha 8
1928
1929 * Added Admin class (holds /admin info for modules)  
1930 * Added methods to Server class  
1931 * Added m_cloaking.so module, provides host masking  
1932 * Added Server class  
1933 * Added more code to example module demonstrating use of Server class  
1934 * ./configure improved by Craig (better prompts, dir creation)  
1935 * /stats z added detail  
1936 * Added '/stats z'  
1937 * Added hostname/ip caching to speed up connects  
1938 * Made ircd cache message of the day in a vector (faster!)  
1939 * Added support for multiple lines of /NAMES on large channels
1940
1941 1.0 alpha 7
1942
1943 * Added /USERHOST command 
1944 * Added '/STATS O' 
1945 * removed random debug output 
1946 * Fixed random crash on nickchange  
1947 * Fine tuned ability to handle >300 users 
1948 * added '/stats L' (connect-info) 
1949 * '/stats u' support added (server uptime) 
1950 * added '/stats M' command 
1951 * Added extra dynamic module support, new methods to Module class
1952
1953 1.0 alpha 6
1954
1955 * Changed command table to a vector of command_t types 
1956 * Dynamix module support, preliminary release 
1957 * Fixes random crash on nickchange 
1958 * Fixed wallops and command parameter counting bugs 
1959 * fixed "user lingering" problem in kill_link 
1960 * updated example config 
1961 * developed a simple sample module (m_foobar.so)
1962
1963 1.0 alpha 5
1964
1965 * Changed channel array to a hash_map similar to the one used for users, faster and more efficient
1966 * Changed ./configure, no longer asks for hard channel limit (depreciated)
1967 * Added support for users to be disconnected once MAXUSERS is reached
1968 * Changed code a lot, major overhauls for C++ and STL use for added stability and speed
1969 * Changed entire user system to use the hash_map container type instead of an array
1970 * Added /TIME command
1971 * Added /INFO command
1972 * Added restart and die passwords
1973 * Partially implemented /RESTART command
1974 * Fixed amusing bug which allowed partially connected clients to issue commands under the context of other users! *gulp!* (reported again by Craig)
1975 * Fixed SegFault caused when doing a /who 0 or /who * whilst not in channels (Reported by Craig, Fixed by Craig :p)
1976 * Added /who 0 o to display online Opers (Craigs First Scratch of Code :p)
1977 * Fixed Typo in LUSERS (Reported by MrBOFH and CC)
1978 * Fixed Joining Channels withough a # bug. (Reported by MrBOFH)
1979
1980
1981 1.0 alpha 4
1982
1983 * Fixed parameters bug discovered by Allan
1984 * Fixed /NICK repeating bug found by piggles.
1985 * Added /REHASH command
1986 * Added /LUSERS command
1987 * Added ability to kill -HUP to rehash
1988 * Fixed lock up after ping timeout
1989 * Added system to /VERSION
1990 * Added DNS lookups on connect (*FIXME* this needs to be asyncronous!)
1991 * Fixed IRCop status shown on wrong users
1992 * Fixed socket linger option via setsockopt (can restart faster as sockets arent in use after shutdown!)
1993 * Added operators can now see real userhost in WHOIS
1994 * Added oper-up failed msg to online opers
1995 * Changed layout of /motd command start numeric
1996 * Fixed empty channels are now purged upon user quit
1997 * Changed: support for WHO * as well as WHO 0 (do the same thing)
1998 * Fixed ability to kick users when you arent on the channel :)
1999 * Fixed grammatical error when halfop tries to kick an op, "You must be at least a half-operator"
2000
2001
2002 1.0 alpha 3
2003
2004 * Fixed problem where nicks containing control codes were allowed
2005 * Added support so that ircd honours channel mode +n
2006 * Added support so that ircd honours channel mode +t
2007 * Fixed linefeeds in middle of line bug (reported by Craig)
2008 * Fixed buffer overflow in channel names (reported by Allan)
2009 * Fixed close() on nonblocking sockets problem
2010 * Added /KILL command >:)
2011 * Added /KICK command
2012
2013 1.0 alpha 2
2014
2015 * addition of /oper and several Channel Modes.
2016 * new config file format
2017