summaryrefslogtreecommitdiff
path: root/docs/ChangeLog
blob: 8638b269640e5161086084e6fdd359fa241daf40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
1.1.0 Beta 3

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

1.1.0 Beta 2

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

1.1.0 Beta 1

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

1.0.6

 * Fix for bug which can lock up ircd if someone adds a timed ban when the banlist is full
 * Fix for issues related to bug #127
 * Added some detail to the socket() and bind() log messages
 * Fix to not hide invisible users non-common channels in whois (rfc doesnt state this)
 * Made all the private methods of InspSocket protected instead
 * Remove numeric which makes some clients (Xchat, more?) think their nick is in use. Apparently it's not needed
 * Exclude LUSERS lines with zero counts (NO WE WONT CHANGE THE SPELLING OF connection(s)!)
 * Prevent notice loop on NOTICE $*
 * Allow PRIVMSG and NOTICE targets of $<servermask> to the module events (this wasnt trivial and is almost a damn feature)
 * Fix NOTICE $* to go between servers
 * Remove dependency on gnu make
 * Remove hook on sigsegv, hopefully dump cores, finally.
 * 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?!
 * Only attempt forward lookup if the user still exists
 * Update m_antibear to use a different hook for ADDED goodness.
 * Fix the dns issue with 1_0_stable. The issue is easier to resolve here than in trunk
 * Removal of all gcc2 checks (there sure was a lot of craq in here)
 * Removed #ifdef stuff, this should be fine on both 3.3 and 3.4
 * Don't allow SAQUIT, SANICK, SAPART and SAJOIN on ulined clients smile.gif
 * Different way of dealing with netsplits, seems we're getting duff data in the hash somehow by trying to track these seperately
 * Fix sometimes-leaking dns sockets when user quits between the two lookups (forward and reverse)
 * Being as -modupdate already existed and just didnt work, this counts as a fix. Congrats epinephrine its your lucky day smile.gif
 * 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...
 * Check for stdint.h
 * Make configure detect stdint.h - this will be used for a fix later and to move opersha256 out of extra/ at last
 * Update docs to indicate use of _ in opertpes translates to space when displayed
 * Spacify() function translates _ in opertypes to spaces (only when displayed, however)
 * Fix the only mangled comment thats important, the tree diagram in here wink.gif
 * FEAR THE POWER OF VIM AND THE ALMIGHTY "%s/ /\t/g"
 * Fix for +f not propogating +b out to other servers (including services) using new send_mode event
 * Backport of send_mode system from trunk - for preliminary info on this search the source file for send_mode.
 * Made Add*Line automatically apply the new line

1.0.5

 * Added docs for connflood
 * Someone made silence require 1 parameter, so no way to list the silence entries tongue.gif
 * Add m_connflood, pippijn's connect throttle module (now we are offering another paid unreal feature for nothing)
 * Enhance m_antibear with numerics 931 and 437
 * Add an fflush() call after logging, hopefully fixes the issue with delayed logging on low activity. Reported by Rob from Anope.
 * Tweak to IS_LOCAL macro to exclude invalid fd's that are > MAX_DESCRIPTORS
 * Stability fix for netsplits after failed or desynced remote kills
 * Made CullList::Apply return something other than 0, and added myself to the list of developers on startup - Special
 * 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)
 * Allow binding by hostname again in <link> and <bind>
 * Remove references to hostnames in <link> tag, use ip's instead
 * 'inspircd' target missing from OSX makefile
 * 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)
 * 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...
 * Temporarily revert special's security improvement until we have bind= and mask=
 * Extra safety for user lists to not keep bad pointers hanging about
 * Dont allow /REMOVE of a uline, dont allow /REMOVE of a user who isnt on the channel (*slaps* Om)
 * 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)
 * Speed, craq, and double space fix for samode's notice
 * m_services_account: Allows ircu-alike account support for services use. It owns you.
 * Added support for OSX back, based upon particularly weighty patch from BuildSmart
 * Fix for potential oper flood - connections on server ports from IPs that don't match any link blocks are immediately dropped
 * Backport of ./inspircd restart fix
 * 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
 * Fix permanent CBANs
 * Fix to send KILL message through to a user when theyre remote killed
 * Sync m_check with trunk
 * Added FindMatchingLocal and FindMatchingGlobal exports
 * Stuff in m_opermd5 Now uses stdint.h
 * Updated m_sql to use mysql_config
 * Added helper script for mysql rpath
 * Tidied up SQLQuery::Sanitise

1.0.4

 * Random-Crash-On-Netsplit bug is finally fixed!
 * Backport of epoll/kqueue failure checking
 * Fixed broken kline matching when a new user connects (reported by LeaChim)
 * Fixed crashbug with knock on non-existent channel
 * Fixed output corruption when host is exactly 64 chars long
 * Fixed crash when attempting "/OS RAW PUSH non-existent-nick :::nick!ident@host KICK #chan nick :any reason" (yes, REALLY.)
 * Let ulines do NOTICE/PRIVMSG $* without oper again, so that OS GLOBAL on services packages is fixed smile.gif
 * Add validation for channel name in m_operjoin, throws an exception aborting the module loading if the name is invalid
 * Fixed EAGAIN missing check when writing to a socket
 * Fixed m_sql and sqlauth etc to automatically cope with the server going down
 * Fixes for cygwin compilation
 * Added signal/raise in the sigsegv handler to re-raise the signal, so we get coredumps
 * Changed instances of MAXBUF to MAXQUIT to prevent some output corruption

1.0.3

 * Obscure bug of the week: InspIRCd crashes when given more than 64 client ports to bind in the config file (yes, *REALLY*.)
 * Removal of ancient TRUE/FALSE #defines (C-ish stuff)
 * Removed lowercasing of servername on validation
 * Case insensitive server names
 * Commented a lot of stuff that hasnt been commented since 1.0.2
 * Const refs (this is about the last of them in the core api)
 * Fixed a missing reference to chanrec::modes
 * 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'.
 * changed binarymodes to use the custom_modes entries
 * Adding to the buffer was clearing it first, reverting the buffering to a pre-alpha-6 kind of way of doing stuff (erk)
 * Removal of shellscript kludge :)
 * Work out revision id without src/svn-rev.sh!
 * Complete removal of all stl stuff here
 * Completely removed the deque
 * Put some error checking back in here
 * Temporarily removed output buffering as an experiment
 * Changes to ./inspircd to hopefully work on freebsd as well as linux..
 * Different way of using substr
 * Deque doing some reallllly odd stuff
 * deprecated covariant return type flux capacitor flopcircuit removal with reference pointer.
 * Removed lots of claptrap debug in a well tested old section of code
 * Start of conversion to const refs for std::strings in module api - A LOT OF STUFF WONT WORK YET
 * Tidyup by making some thing sprintf only once rather than n times (where n is number of targets), String reference stuff for one function
 * Only calculate the names list when a local user joins (this was being calculated for remote user joins, then thrown into the bit bucket)
 * Doh @ null chars in an sprintf!
 * Tweaked to use the same system as nenolod's NAMES patch for FJOIN
 * MUCH FASTER squit! (and a TON more stable, too)
 * Check if we're running -svnupdate on an svn version
 * added added "./configure -svnupdate rebuild"
 * Added ./configure -svnupdate
 * Removed 8-space indents
 * Commented all the new config stuff
 * Now requires inspircd.h for ConvToStr templated function
 * Tidyup and move ConvToStr to a publically accessible place
 * Moved more stuff into right places
 * Tidyup of commented out reminder code
 * Mass tidyup of ServerConfig::Read and stuff
 * Another const reference conversion, and remove redundant declaration of userrec* Find() from globals.h
 * Test stuff for improved multi-tags in core
 * Added MultiConfig for multiple-occurance config items
 * patch <inspircd-userlist-ptr-safety.diff (Thanks nenolod)
 * Missing a changeover
 * Revert to string but return a reference, should be about the same speed
 * Faster CullItem/CullList using strdup rather than copying a std::string
 * Update docs to indicate hostname can be used in <bind> tag
 * Support for hostnames in <bind> tag (so long as the hostname resolves to a locally bindable ip)
 * Tidyup of config reader lowlevel reading
 * Set bitfields on servermode
 * Align names that are output on startup using \t htabs
 * Moved typedefs etc into the header where they belong
 * Tidyup of ServerConf::Read about half done (works)
 * More const references, this is nearly it apart from the module API..
 * Remove unused variable giving compile warning
 * Convert more by-values to const references, optimise ConfigReader a bit
 * Changing by-value parameters to const references
 * Mostly formatting cleanup, rename a 'Ptr' to a more meaningful 'chan', remove some pointless nested if()s checking the same thing at each other
 * Tidyup to pass some stuff by reference (much faster, no copy involved)
 * Improved to avoid strlen
 * Changed to unsigned char to get rid of warnings
 * Improved strhashcomp with no allocations
 * Typical. 0 and 1 to choose from, and i pick the wrong one. (back to front binary)
 * UM_WALLOPS had value 3 which was a combination of UM_SERVERNOTICE and UM_INVISIBLE :/
 * Added userrec::modebits - fast way of checking if user has +swi rather than an icky strchr
 * Fix printf format to get rid of compile warning (using %d for a long, change to %ld)
 * Correctly use iterators and pointer to ucrec
 * Better calculation of LUSERS
 * Changed LUSERS to show global current to not include unregistered connections
 * Don't show channels where all users are invisible and therefore usercount is 0
 * Add 'you are a nub' messages to /squit and /connect stubs
 * Update to Start() credits, now refers users to /info output
 * More cleanup, moved Om and myself to core team
 * Calling a method of a null object due to refactoring and HasUser - fixed, (Thanks Douglas)
 * Reformat according to coding guidelines.
 * These modules were using deprecated Server::IsOnChannel. They arent any more smile.gif
 * Removed deprecated Server::IsOnChannel (was a C++-ish wrapper to the C-ish has_channel, no longer needed)
 * 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)
 * Removed declarations of ancient and misspelled functions :/
 * cmode was declared here too - declaration removed.
 * cmode now returns const char* as it returns a pointer to a literal string and shouldnt be messed with
 * Got rid of all that ugly char* cast crap (todo: change docs to reflect change)
 * Fixed #defines to be enums (tidier), Removed UCMODE_PROTECT/UCMODE_FOUNDER
 * Allow for fallback of older ircds without TS in BURST command
 * Actually, 64., (256-64-128) = 64 chars printable alphabet (roughly)
 * chanrec::custom_modes only needs 96 values not 190, (256 - 32 - 128)
 * 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 :"
 * Changed m_sqlauth to allow more advanced encryption types
 * Checks for timestamps, boot server off and abort if time delay > 10 mins (the safe value used by inspircd)
 * Removed unneccessary temporary casts to char* when casting a userrec, Expanded on comment re. WriteOpers
 * It's neat. It's tidy. It has no spaces, and almost matches our guidelines...
 * 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
 * Made this readable, removed spacing, etc.
 * Avoid some ugly casts and save (well..system dependant..) about...3 bytes of ram! tongue.gif
 * 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
 * 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
 * For the record, it's 17 lines - not 5.
 * Made split_chlist available for external use from commands.h
 * What MUPPET made stdin, stdout and stderr FILE* pointers rather than ints?!
 * close stdin, stderr and stdout rather than freopen to /dev/null
 * Took out space in version identifier that might break stuff
 * 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)
 * Buffer flush time now under 0.5 secs
 * Flush user buffers more often (every 30 iterations), Run whowas hash maintainance every hour
 * Tweaks to socket engine, faster buffer flush and hopefully more stable
 * true and false transposed in new code
 * 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))
 * Fixed timedbans (new mode parser didnt like being passed const char* elements as it likes to change them inplace)
 * Improved userlist to avoid strlen
 * Tidying, strlen, strcasecmp where not needed.
 * TOPIC optimizations, fixes to mode setting with new custom_modes system
 * Checking of user/nick/pass without strncmp! (compare object pointers in the command map!)
 * Fixed to work properly with new refactoring
 * Faster custom mode set/unset
 * Added a 'max depth' to stop recursive issue
 * Fixed issue with parameterless module modes
 * Optimisation of optimisation tongue.gif ty w00tie
 * Different way of displaying squit server group
 * More work on /check.. now gives basic information on a user, no channel list yet - and port number doesn't display.
 * No need to be inline in the include
 * Fixed wtf-ery of Modules::SendTo - did i write this before WriteServ???
 * Initial revision of /check - doesn't do anything yet
 * Improved ProcessParameters (removed strlen)
 * Changed return to break in mainloop for better efficiency
 * Tidied (and COMMENTED) CommandHandler::LoopCall() -- commit so that i can test on brainbox
 * Tidied GetMaxBans to leave the ConfigReader subsystem alone
 * Removed unneccessary backticks from a copy/paste
 * Added the beginnings of some function documentation
 * Sorted out some silly indenting left over from an if() that died a death years ago
 * I dont think there are any more non-essential strlcpy's left in here.
 * 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
 * Mode-code rewrite. Might act weird, needs proper testing (that is what svn builds are for, after all)
 * Tidied up ProcessLine, instead of a ton of strlens use a tiny bit of char* voodoo
 * Fixed to not show real server name if you have hiding of servernames in WHOIS
 * Put it in alphabetical order and hope nobody noticed
 * Add m_blockcaps to example config
 * 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
 * Hopefully speed this up, it was strlcpy()ing every line even when +c wasnt set, and copying wasn't neccessary anyway
 * Make install depends on make as requested by ol (also means i can build and install insp in one step again if i want)
 * Colon before the reasons in STATS, so that it doesnt munge up the reason in certain clients
 * 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
 * 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
 * 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
 * Unknown command error now tells the opposite server WHICH command is bad so that people dont have to go sleuthing to find it
 * Tidyup of m_hostchange to not use configreader on each connection!
 * Tidied up m_override to avoid use of configreader during free-running
 * Changed m_censor to avoid reading config several times for each pm
 * Fix for MODE #chan +o- nick or +o-- nick, etc
 * Fix to prevent recursive call to DoBackgroundTimer
 * Added IS_SINGLE, see comment in include/inspircd.h
 * Added a sleep on startup to stop it mucking up the display
 * Changed output on startup
 * Strdup's to stop corruption of oper classes
 * speed up HasPermission by factor of hundreds, avoid using EnumConf and ConfValue outside of rehash *AT ALL*
 * is_uline was an inefficient piece of crap - fixed.
 * More efficient AddClient, initializes two identical buffers at once ;)
 * Added stuff to log() to make it recalculate the time using asctime() less often
 * Made host fields more correct 64 in length with 63 copies
 * Improvements to TreeSocket::Split
 * Made extensive use of charlcat to cut down on strlcat usage
 * Added charlcat which appends a single char to a char* string (range checked)
 * 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)
 * Extra checks that should prevent desyncs if you stuff up your type/class tags between servers
 * Make ./inspircd ignore SIGPIPE and start running without the user having to type 'run' / 'r'
 * Changed to require seperate 'make install' step

1.0.2

 * Clarify an error message on KICK
 * Allow removal of mode with new check
 * Dont allow +J 0 or +J < 0
 * Removed regexp check on epoll
 * Fix for missing 'end of list' numeric
 * Changed encryption to work with yield system
 * Added checking for +sp channels to safelist that someone left out *nonchalant whistle*
 * Documented cloak keys and prefix
 * Changed to throw exception when theres no cloak key
 * Changed loglevel of cloak key errors to SPARSE
 * Added configurable cloakkey and cloakprefix
 * Extra error output when fails to bind a port
 * When quitting large amounts of users, use InspIRCd::DoOneIteration to prevent too much lag
 * Add comment stressing the importance of certain elements of this file
 * Changed some stuff to give a more accurate revision id
 * With small sendq's, this can still exceed the sendq, so now we've reduced the amount it fills
 * Extra output during sync to know if we're receving the other end's netburst or not
 * Improved speed (not using strlen, take loop count)
 * 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!)
 * Yields back to user processing to give users a chance to issue commands during heavy server congestion
 * 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
 * Moved to irc::string for commands in server-server so that whiney newbs can get os raw to work and fuck their networks over
 * Whoops, overriding EVERY command!
 * Added m_operwho, allows opers to list everyone
 * Fixed Server* Srv stuff in these too, although by default these arent available to win32 builds
 * How did this random stray '1' get in here before the brace?
 * 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
 * Fix for segfault if name of file left off commandline
 * Added ability to provide -logfile parameter on commandline
 * Lowercase the servername automatically
 * 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)
 * Added m_safelist (yes om, i kept alpha order)
 * 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.
 * One character brain-wave fix (had idea at work)
 * Nothing to see here, nothing, at all.
 * Wrong address being bound by InspSocket when binding to a specific ip
 * Decide that it wasn't quite appropriate :(
 * Add entirely pointful smiley to comment
 * 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)
 * Removed bit of logging that said the timer was ticking -- we know it works now :)
 * listusers has to be global now (ugh)
 * Moved timer stuff from OnBackgroundTimer to InspTimer derivative
 * Use ::AddTimer not AddTimer, or it calls this->AddTimer and loops
 * Now copies libIRCDtimer.so
 * Added timers.cpp/.h to makefile generation
 * First revision of new timer code, not in the makefile yet (so it wont build till im done)
 * 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!
 * Improved calculation to account for server name on start of numeric, plus spacing
 * Perm elines (<exception> tag) not being applied - fixed
 * SAFELIST 005 token is now part of m_safelist not the core 005
 * Cleanups on module unload or user /QUIT
 * 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!
 * Changed triggering time of OnBackgroundTimer to 5 secs (from 8)
 * Added m_safelist helper functions GetChannelCount and GetChannelIndex
 * 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
 * Added which word is blocked to the numeric
 * Added 'is a registered nick' to whois
 * Made error more understandable on 'file not found'
 * MAXMODES wasn't being enforced
 * Enforce 64 char dns limits
 * Added second form of find() taking const char*, which is faster in the core where char* is used more often
 * Improved speed of Find() by passing reference to std::string instead of std::string itself
 * It didn't, there was more strlcpy
 * Fix to stop new code treating all KICK messages as server KICKs
 * Fix for hide-ulines in /links
 * Configure no longer allows gcc 2.x compilers AT ALL >:)
 * AIEEE fucking overloaded operators
 * 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.
 * Removed the 'one of' check for <dns>
 * <dns:server> is now optional
 * Throws exception on failed GetIOHook()
 * 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.

1.0.1

 * 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)
 * Added exception handling for module loading
 * Fixed case sensitivity issue in m_censor
 * Don't allow invalid channel names in /mode #chan +L #chan
 * 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)
 * Update mode lists, fix mode lists, and alphabeticalise mode lists (:/!)
 * Experimental speed improvement to sending encrypted lines
 * Extra logging to log bad opertypes coming in from remotes
 * Checking to prevent dodgy opertypes (opertypes must follow the same syntax as nicks now)
 * Extra checking and exception handling in InspSocket::Write
 * Fix for bug reported by TDC
 * Moved custom_mode_params to per-channel
 * Sped up disabled commands check
 * Removed a whole lot of strchr's looking for mode +o where we can do if *user->oper
 * All the messing with these files someone did and they  didnt notice we listed gcc2 as supported :p
 * - More formatting changes
 * - Made some notes about potentially restructuring things a bit
 * - Useless loop removed, - Intenting cleaned up, - command_parse stuff (really) needs proper going over and at least commenting what stuff does.
 * - Fixed some HORRIBLE indenting. Tabs, please., - Fixed channel keys being case insensetive., - Added a 'XXX' fixme.
 * - Moved example configuration from docs/ to conf/.. Why did we have two example confs?
 * - Docs update, b4 was a LONG time ago.
 * - Minor documentation updates here, someone really needs to sit down and rework it a bit ;p
 * - Manually bump revision ID, apparantly it's stopped doing it itself...
 * - Oops, missed two includes
 * - Check for +K before bothing to assemble knock message
 * - Nazi stylistic changes.
 * - Incorrect
 * - Anal tidy of some comments
 * - Let's stop using that nasty strchr() in a loop
 * - Made note of some potential improvements in m_part. Brain, please review when you get a chance.
 * - And in SAPART
 * - Use IsValidChannelName() in SAJOIn
 * Fix to compare against signed/unsigned warning
 * Force initialization of fd to -1
 * 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.)
 * Tidied up formatting of %f's
 * Added RPL_MAPTOTL at request of Whitewolf
 * Guess origin where server is lazy with PING/PONG and doesnt specify one, prepend the command's source :p
 * remote ping added
 * Remove code duplication by using core function. Remove global Server*..one step on the road to losing the bloody regexp :<
 * s/No such channel/Invalid channel name
 * Make use of IsValidChannelName() - as a side note, we perhaps shouldn't be returning 403 in CBAN...
 * m_join: Use IsValidChannelName()
 * Added bool IsValidChannelName(const char *) - it doesn't seem to blow things up...
 * Add m_blockamsg to example config
 * Initial commit of the /amsg blocker module
 * Correct copying of confs (may generate some nonfatal errors)
 * Renamed inspire.* inspircd.*, Removed obsolete server_tokens.txt
 * Added anti-n00b warning to stop direct inclusion of the file with <include>
 * Instantly apply lines when not synching
 * Tweak to allow @%+ to all exist on a user at once during burst
 * Extra checks to not set the ssl marker twice on re-handshake (nonfatal but wasteful)
 * Check for >8 params in NICK
 * Altered SVSNICK to echo back NICK message, grrrr, sodding ircservices-based services packages.
 * Fixed 'eggy complains when not included' bug that causes segfault in brain
 * Newline stripping for asctime()
 * Added remote TIME
 * Added PUSH command
 * Added anti-retard check to prevent retarded flood settings
 * Added a sanity check that was left out, prevents crash on invalid fd (e.g. via excess flood on oper or connect)
 * Typo in some code that should usually be #ifdef'ed out anyway, but we still want this to work sometimes, maybe.
 * Fix crashbug, copying MAXLEN into a MAXGECOS+1 field != cunning
 * Added comment about the craqness of ServerConfig::Read()
 * Checks to not propogate invalid or already-existing Xlines
 * Increased how often socket timeout checks occur which will mean flushing write buffers more often
 * Updated block numeric to read COLOUR >:)
 * Finally FIXED ALL THE CRAQPIPE INDENTING (and lack of), *MESS THIS UP SO BAD AGAIN, AND I MOLEST YOU WITH A SPORK*
 * Fixed cosmetic 'need to be halfop to change modes' when kicking
 * Match bans against user::ip4 in add_channel
 * Potential fix for CS Testnet bug, thanks to Special for helping with this one.
 * Properly count remote opers in /LUSERS
 * 005 update, removed duplicate WALLCHOPS reported by ThaPrince, added VBANLIST
 * Avoiding assignment of std::strings unless neccessary to speed up bursts
 * Faster ADDLINE code
 * Slightly more efficient write buffers
 * Tidying of snotices (adding '***' to start of WriteOpers texts)
 * Fixed WHOIS to respect +i channels, optimized in case where source == target by hortcircuiting operators
 * Added max and current local/global usercounts to /lusers same way as most other ircds
 * Now errors when sent SERVER on a non-server port
 * Modified ./configure to symlink ssl modules instead of cp'ing them, this makes updating easier in the future
 * 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)
 * Allow remote bans from servers to be represented as servers in the banlist
 * Removed some debug notices that were mistakenly in the DEFAULT loglevel
 * Fixed /LINKS to show flat even in tricky mIRC.
 * Make ulines /swhois silently
 * Documented <options:tempdir>
 * Added support for  changing tempdir via <options:tempdir>
 * Yeah, this thing only uses 1 param, but requires 2? :p
 * Made devoice not oper-only (Congrats to the original coder!)
 * Fixed missing speech marks and stuff (vim and syntax highlight for the win)
 * Added more up to date helpop.conf from Custodis <tballen@bhcnetworks.com>
 * Fixed two unneccessary strlcpy's in the wildcard matching that just were there to lowercase it... we can do this inplace
 * Fix to allow empty but defined away message (yes, really)
 * 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
 * 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)
 * Fixes for (unlikely and theoretical) desync in TOPIC, Fix to not bother trying to write away response if user is not local
 * Fix to prevent use of aliases before reigstering connection
 * 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 :"
 * Bug in code for syncing cbans
 * Commented on new return value of OnUserPreKick for explicitly allowing kicks
 * Re-organized order of cmd_kick stuff (OnUserPreKick) to make override kicks work nicer
 * First-revision UNINVITE
 * Allow remote users to INVITE regardless of channel membership or op status, to prevent desync possibility
 * Make the alternative hosts be in alphabetical order sad.gif
 * Update example <oper> to demonstrate multiple hostnames
 * Allow space seperated hostlist in <oper:host> e.g. <oper host="foo@bar baz@qux blarp@flerble" name="blah">
 * 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!)
 * Stop trying to set an empty swhois if the <type> doesn't specify one
 * When rehashing by sighup and adding/removing modules, don't attempt to write a user because there isnt one :p
 * 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
 * Only send 320 numeric if the SSL user is on our port
 * Add support for configured swhois lines
 * Add operators >> and << for irc::string and i/ostreams. m_cban utilises this
 * Optimized: strchr(x->modes,'o') has the same effect as (*x->oper) but *x->oper is potentially hundreds of times faster :p
 * Learnt how to speel Optimization, Removed redundant referance to value not in use.., Fixed 'First Build' Optimization flag not being set.
 * Fixed Brain's bug, showing 'Using SSL Module' regardless of if you say yes or no.
 * I R SECURE CONNECTION! (fix)
 * Check for time going BACKWARDS (yes. really.)
 * 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
 * Added '%' to STATUSMSG
 * Bugfix #69
 * Tidyup op/halfop/voice list on part/quit
 * Tweak module help for m_conn_waitpong
 * Stop uncloaked hosts showing to non-opers
 * Altered format of OnUserMessage
 * Allow for NOTICE and PRIVMSG from outside chan with a remote client
 * Added extra 'looking up your hostname lollerskates' output :p
 * Why are we using the users hostname to connect back to port 113? we can use ip here, and save ourselves a lookup
 * Added remote routing notices for RCONNECT
 * Added RCONNECT
 * Added <options:hideulines>
 * Added <options:flatlinks>
 * Added ircu-like hidewhois feature that allows hiding of server name in whois with arbitary string like '*.network.net'
 * Added m_globalload.so to module list
 * Added hidesplits to example conf
 * <options:hidesplits> ircu-style quit munging for netsplits
 * Removed steeeenking dll message, attempted to hide 'target is same' with launcher install
 * Added numeric 396 ("x :is now your hidden host") from hybrid/ircu
 * Removed bool return of DoBackgroundUserStuff()
 * Extra comments re. nonblocking DNS and use of IP addresses in constructor to speed up connect time
 * 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.
 * More nonblocking dns stuffs
 * Fixes to set correct resolver address before looking up host
 * Nonblocking dns for InspSocket class (used by server to server)
 * Broadcast SPYLIST and SPYNAMES usage to all opers
 * Document m_spy here (yes Om, i kept alphabetical order!)
 * Users are gonna erupt in flamewars over this... and google will love us >:)
 * Major update, reordering and adding missing modules
 * Tidied up a kill message
 * Clean up ghosts on nick collision
 * *TEST* nick collision code for NICK change in server link
 * Only access-check local user kicks
 * Should always allow remote modechanges (FJOIN not effected as its not sent as a MODE)
 * Allow async dns to compile -- but its still experimental and should not be used on a production network!
 * Excempt ops kicking themselves from +J

1.0 Final

 * Optimized WriteServ - why use %s!%s@%s when we have the more optimal userrec::GetFullHost() ?
 * 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.
 * Added check that forbids configuration as root >:-)
 * Major updates to CBANs...like they're reasonably functional
 * Added support for TYPE_OTHER metadata, where void* target will be NULL, e.g. its not bound to a user or a nick
 * Fix to send 403 on invalid channel name
 * Moved Write() call so that it can send the NICK message properly and force the client to change
 * Allow ulines to still notice the channel regardless of +T
 * Created OnPostOper that can be gauranteed to be called *after* opering (by ALL modules) is done
 * "Oper of unknown type" -> "313 %s %s :is an IRC operator"
 * Auto-assume "+" on the start of opermode block if not included
 * Removed example commands that never actually existed
 * OpenSSL detection and cert generation in ./configure
 * Changed length of password field to 64, giving us a maximum password length of 63 plus null terminator
 * Fixed uninitialized ExtMode::list
 * Added some extra debug
 * Make m_services use InsertMode (are we done yet?)
 * Changed On005Numeric to use InsertMode (we left one out?)
 * Deleted the semicolon that had half the dev team wondering...
 * Incorporated Craig's friendlier SQL class (documentation to come later)
 * m_sqlauth: Fix small memory leaks in some cases (bad password, bad query, lost mysql server connection etc..)
 * Correctly initialize userrec::password (should fix a few m_sql issues)
 * Add m_conn_waitpong, require clients to reply with a correct PONG to a server PING before they can connect
 * Remove unused includes and rename classes from ModuleSSL to ModuleSSLGnuTLS so we can be consistent across multiple SSL modules
 * Added warnings to opers when session limits are exceeded
 * Improved IP handling. Now uses in_addr to store client ip, not char[16]!, Added global and local session limits
 * Problems removing +t due to wrong bit-value being used in comparison
 * Altered so that if running in -debug mode, will not erase its .so files from /tmp to allow a clean backtrace
 * Removed unneccessary strlcpy
 * Removed a load of unneeded includes (poll.h etc)
 * Added <ident:timeout> example so that people remember to set this when using m_ident.so
 * Default ident timeout to 1 sec if not defined (a bit low, but better than 0!)
 * Updated m_ident to use inspsocket, should be more reliable
 * Added missing modules (newer ones)
 * Removed excessive debug for something thats now fixed
 * 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
 * Added m_opersha256 module created by Special
 * Add module for anti-autorejoin channel mode +J
 * Changes to INVEX and EXCEPTS 005 tokens
 * Changed +l to drop the mode if the limit is same as current., Optimized check on numeric chars
 * Remove last relic of last goto in inspircd (an unused label)
 * Fixed to not have ohv in CHANMODES type A,, Added proper MAXMODES output in 005 instead of hard coded '13'
 * One goto is now no gotos.
 * Change m_redirect, m_joinflood and m_messageflood to put their modes in the correct section and to use InsertMode()
 * Add InsertMode function to helperfuncs.(cpp|h) for easily adding modes to the CHANMODES section of the 005 numeric
 * Added patch from Andy Church re spaces in SETNAME
 * Fixed line endings when skipping ssl cert generation
 * Documented some functions that were missing comments
 * Properly check that existing key resides in conf/ and not current dir
 * Added PRIORITY_BEFORE and PRIORITY_AFTER (see src/modules/m_hostchange.cpp for how it works, function Prioritize())
 * Added -modupdate to regenerate modules makefile, Added SSL option, as well as a 'Build Certificate' section (If avaliable)
 * Adding the +e and +I modules m_banexception and m_inviteexception, also adding their shared utility header
 * Added trick to allow local server to unset -r only in one specific condition (the nickchange)
 * Added joinflood +j
 * Made bans check both real and fake host
 * Patched to allow FTOPIC from users (so that chanserv can update the settime and the topic still come from chanserv)
 * Added <link:hidden> to docs
 * Optional IP-Hiding for servers
 * Use libgnutls-config --libs to configure linker options
 * Make relative paths in the config file tags be relative to the insp config directory
 * Change 974 numeric to 490 to avoid collision with Insp's failed to load module error
 * Make m_sslmodes messages appear in the channel window
 * Updated with new docs for maxtargets
 * Updated 005 to show changeable MAXTARGETS
 * Allowed for configuration of maxtargets in <options:maxtargets>
 * Wrong nicklen is shown in the 005 numeric, fixed (noticed by ThaPrince)
 * Initial commit of m_sslmodes, supplying chanmode +z
 * Allow for <bind> tags with no or empty type, as well as 'clients' ones
 * Set vendor and static module flags...even though the booms from trying to unload it would be fun sad.gif
 * Make errors loading certificates DEFAULT level
 * Inital commit of the first SSL module \o/ \o/ \o/ Also Ommeh's first official svn commit \o/
 * Added MakeWildHost to userrec (*!*@dhost), Added ban stuff to messageflood
 * Fixes to server kick (i hope)
 * And yae, the compiler sayeth to brain, fix thine warning. and thou warning art fixeth.
 * Made '*' ban-specifier work
 * Added OnChannelDelete() method (called on KICK, PART or QUIT where a channel is deleted for cleanup of metadata), Added m_messageflood.so
 * Tweaks for openssl compatibility
 * Stopped lines longer than 512b from being killed, instead, warning sent and dropped.
 * Fix to m_redirect to prevent circular link to self
 * Added <allowchannel:name> to allow specific channels
 * Test-fix for crazy's bug (/who 0 * as oper while on no channels)
 * 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
 * Umode +R was broken (only worked for channels) -- fixed
 * Removed all strncpy() calls and replaced with strlcpy()
 * 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.
 * Added unlink() to tidy up /tmp after each dlopen()
 * Added support for part messages in the module API (and therefore between servers too)
 * 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.
 * 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.
 * Changed lots of icky #define's to enums
 * Made <disabled> non-manditory, added check for when singular tags arent defined at all
 * Fixed SIGHUP rehash to actually send rehash event to modules
 * Added checks to forbid declaring certain config tags twice (ones which should only exist once like <server> and <admin>)
 * Added m_vhost, authenticated vhosts from the conf similar to unrealircd's way, requested by PinkFreud
 * Changed some .cpp to .so in the this->source field
 * Removed deprecated default= for bind tags
 * Removed deprecated LocalOp type
 * Added support for <options customversion> to customize the second part of VERSION
 * 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.
 * Updated copyrights in headers etc using perl inplace edit
 * Made inspircd close and reopen its log on rehash
 * Removed some redundant (and commented out) functions
 * 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?)
 * Extra m_sql field checking
 * Fixed 'stops responding after server pingout, while using select' bug as found by merwin
 * Added RemoveSocket as a test fix for merwins bug
 * Replaced some 'n' with '*n' that was breaking userrec::MakeHost
 * Added extra safety check for a condition that should NOT happen (in theory, but still)
 * xline tweaks
 * Replaced sprintf's with some char* voodoo
 * Changed channel user lists from vector to map
 * Changed makefile to use 'install'


1.0 Final - RC2 (KingArthur)

 *  Added 'a' flag to STATS c which indicates autoconnect state
 * Removed tab characters from example conf
 * Added oper-only-stats option
 * Added 005 stuff after VERSION
 * m_park.cpp fixes (and anything else using UserToPseudo and PesudoToUser)
 * 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.
 * Aligned % fields in map
 * Changed printf specifiers in map to right-align digits
 * Added User Counts to /map
 * Nicer mode character loop
 * Revise some serious craq++ in AddBan
 * Fixed to not crash on /PARK (still more to test)
 * Added CASEMAPPING and CHARSET to ISUPPORT (005)
 * GCC 4.1 is more strict about extra qualification on members
 * Updated example configuration file
 * Fixes to typos and change to return by reference on GetClass
 * Changes to how classes are looked up (connects slightly faster) and fix for case sensitive passwords
 * Removed cvsignores, set svn:ignore property using -F .cvsignore
 * Added specific errors relating to invalid link tags (requested by Strike)
 * Tidyup of K&R style indenting, comments in silly places, and pointless curly braces around non-blocks
 * Changed to QueryType rather than short int for query types
 * Removed crappy linked list stuff and replaced with faster std::map
 * Improving niceness of DNS code, i WILL make this readable!, Changed a ton of ugly firedns #define's to enums
 * Minor cosmetic fault pointed out by Trystan
 * Blockcolor now blocks reverse and other mirc sillies
 * Ommitting \r and \n from debug display of outbound lines
 * Now uses two AES contexts, an 'in' context and an 'out' context
 * CBC encryption type in AES rather than ECB
 * Changed background stuff to occur more often
 * Made socket.cpp flush its write buffer more often (fixes odd lag on server to server connections)
 * Fixed broken checks to allow overriding
 * Optimized out some more redundant va_args voodoo
 * Double copies due to bad chop()
 * More removal of formatting where its not neccessary x("%s",str) == bad!
 * Attempt to cut out unneccessary printf() va_args voodoo (ugleh)
 * Cached ISUPPORT
 * Added output of error if file descriptor given to AddFd is > MAX_DESCRIPTORS
 * Changed to MAX_DESCRIPTORS
 * Changed 65535 to MAX_DESCRIPTORS calculated at configure-time
 * *FIX* 'No more connections allowed' was comparing against the network-wide limit rather than the local limit (ICK!)
 * Added extra checking to socketengine to refuse connections after we reach the max
 * Added counters for MAX_DESCRIPTORS etc which allows the socket engine to refuse new fd's once you hit the OS limit
 * Initial revision of /devoice.
 * Removed an unused OnUserConnect() method
 * Changed some little bits and bobs here
 * 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)
 * Optimizing to not use so much cpu with high user loads
 * Made 'fake direction' less loud, removed 'invalid source'
 * Added SetSignals()
 * Signal handlers were not being set when -nofork was enabled
 * Changed some other stuff that used the old vector/deque style commandlist
 * Changed from std::map to hash_map
 * Command search function now uses std::map, should be faster (i hope)
 * Removed useless isnick() checks in Give* and Take*, in the name of tidiness
 * Tidyups to mainloop, why were we using isnick() to check if a user was registered?
 * New system for client exits using CullList seems stable, needs testing
 * Changes to the way clients are exited during mainloop - MAY BE UNSTABLE USE WITH CAUTION
 * Check on upper bounds of base64 decode
 * Added checking for bad base64 decodes
 * Updated chanfilter to use irc::string
 * Modified to omit unimplemented module methods
 * Fixed and implemented /modules debug <glob>
 * Added /modules debug
 * Added global_implementation array, bypasses calls which *NO* modules are currently implementing
 * Fixed missing I_On005Numeric
 * New 'Implements' system
 * Added support for implementation hooks
 * Adding hook type checking to event calls to speed them up
 * Allow halfop to dehalfop themselves`


1.0 Final - RC1

 *  Improved efficiency of chanrec constructor (removed strcpys)
 * Changed two fields in ConnectClass to strings, moved constructor stuff to init-list
 * Added 'build complete' message
 * Somehow, the examples had gotten into the conf/ dir, they belong in docs/
 * Improved m_alias to only capture complete commands and rewrite them (bug #92 as reported by strike)
 * Added more verbose error output during link
 * Added CAPAB checking to prevent some obvious n00biness that may occur
 * Initial revision of CBAN. It doesn't do anything useful just yet.
 * LD_LIBRARY_PATH setting is no longer required by core or m_sql.so
 * Changed $CompileFlags to seperate $CompileFlags and $LinkerFlags
 * Added -Wl,--rpath -Wl,LIBDIR to linking parameters to allow users to directly start the binary without the launcher, if they wish
 * Improved makefile dependency lists
 * Removed some redundant code that was commented out
 * Added extra sanity check in squit to make sure REMOTE Servers dont try and squit a server from itself!
 * Added Socket = NULL for local server class to prevent it being 'selectable' by squit
 * Made linking more nazi, will drop connections that send bad commands
 * Fixed to not allow :Abc NICK Abc, where the case of the old and new nick are *identical*
 * Added extra diagnostic messages during connect, if connect fails
 * Added stricter checking for encryption on connect, if enabled
 * Fixed case-change nicks not being propogated
 * Allow case changes in nick w00t -> w00T
 * Added extra key length checks, documented encryption in example conf
 * Added AES encryption to spanningtree links
 * Added IOHookModule stuff to allow for different modules to hook different ports
 * Fixed spanningtree to not allow malformed conf tags (missing/empty values), Added m_spanningtree, m_swhois and some clarifications to example conf
 * Split all commands into seperate files and redid command system to take classes, not function pointers (function pointers suck ass)
 * Moved serverstats* stats to InspIRCd class
 * Moved SocketEngine* SE into InspIRCd class
 * Moved mode stuff into modeparser
 * Moved command_parse functions into class CommandParser
 * Optimized away a memset made it potentially 10x faster
 * Fixed BUG, If an opers SendQ exceeded, it would bring down the server!
 * Added 'local users' vector
 * Full removal of inspircd_util.h
 * Improved pointer voodoo in chanmodes(), many less strlcats
 * Made apply_lines apply perm lines again
 * Added documentation for CullItem and CullList
 * Updated so that netsplits use the cull_list.
 * Added CullList class
 * Added Server::GetVersion()
 * Added new docs for class InspIRCd and globals.h etc
 * Removed depreciated docs
 * moved declarations of typedefs for user_hash and chan_hash etc to typedefs.h
 * Fixed a couple of missing \n's at request of Special
 * optimized a ton of strcmps down to an integer comparison!
 * Optimized accept() stuff to eliminate loop, idea while talking to w00t
 * Got rid of the evil loopy horrid mess in dnsqueue.cpp (singlethreaded dns lookups)
 * Made dnsqueue clean up its sockets from the socketengine properly
 * Prevented zlines from being allowed with a username/ident in them
 * Modified chlist() and whois to allow output of multi line channel membership list (!)
 * Made MAXCHANS growable for opers/ulines
 * Removed some logging that can cause excessively huge logs when select() is being used
 * Removed some remnants from mesh linking
 * Moved some stuff out to userprocess.cpp
 * Efficiency suggestion by w00t, faster processing of module sockets at the expense of a bit of ram
 * New version doesnt yield() any more
 * Made socket loop flush a users buffer if they still remain after processing each line
 * Changed how background processing works, now once per second repeating until nothing left to do
 * Tied in DNS to SocketEngine


1.0 Beta 6

 *  Added SPANNING TREE LINKING support, allowing for STABLE FAST and EFFICIENT linking of InspIRCd servers (m_spanningtree.so)
 * Added m_swhois module, allows setting of arbitary descriptions on users
 * Added a 'Base' installation path to allow installing of the launcher (handy)
 * Added support for the new <include:file> system.
 * Fixed Bug causing the base directory to always overwrite the other dirs
 * Added Base Directory Path to the Path list at the end of ./configure
 * Added Library Path to the path list at the end of ./configure
 * Improved layout
 * Added -lstdc++ for GCC 4 support
 * Removed connection.cpp and servers.cpp
 * Removed static meshed linking from core
 * Fixed code so that it will still work with kernel 2.8, 3.0, 3.2... whoops.
 * Added a chomp() just to be sure on kernel 2.6 check
 * Fix for bug #72 reported by Hal9000
 * Configuration errors now go to the error log
 * Updated to allow users to specify their compiler by hand
 * Added warning about gcc2
 * A lot more of the core consts are now configurable at compile time
 * Fixed removal of mesh linking from core
 * Added cvsignores
 * Added Metadata API (for transferring extensibles over a network transparent to the protocol)
 * GCC4.0 warning fixes
 * Added BoolSet utility class
 * Removed cross-server mesh stuff
 * Fixed missing constructor on class connection
 * Tons of DNS debugging and stability fixes
 * Added experimental multi-threaded DNS using pthreads!
 * Added notice-to-servermask
 * Added ability to output 'is an oper but i dont know what type' in WHOIS
 * Added clever code to propogate module's special commands (SAJOIN, KNOCK etc) transparently!
 * Added opaque protocol functions
 * Highly optimized userrec saving 1.5k per user
 * Added tons of extra documentation to Module class
 * Added OnCleanup function
 * Added OnChangeHost
 * Added OnChangeName
 * Added OnWallops
 * Removed old OnUserSync and OnChannelSync
 * Added Server::RehashServer
 * Added onrehash parameter
 * Added OnGetServerDescription (mainly for link modules)
 * Added OnPostLocalTopic
 * Added OnUserInvite
 * Added remote kill
 * Added opertype to OnOper and added OnMode function
 * Added reason to OnUserQuit
 * Added OnUserMessage and OnUserNotice (why have these been missing so long?)
 * Removed mesh module functions
 * Added OnLoadModule and OnUnloadModule (OnLoadModule was not triggering)
 * Tidied up socket engine code, moved into a specialized header full of #defines
 * Fixed to compensate for ~ in ident length
 * Optimized xline system (much faster, more efficient, less cpu usage)
 * Added insane tag (prevents wide gline etc)
 * Now shows remote quits differently
 * Fixed RFC-non-complaince of TOPIC and NAMES with +s channel (As reported by Ghost)
 * Fixed LUSERS and MAP to display 'dummy' data when no linking module is loaded
 * Changed behaviour of module API to pass Server* to the constructor, rather than have to create one (makes more sense)
 * DNS safety and logging
 * Fixed 'fake direction' messages being put out by user->registered = 7 being set too early
 * Removed the MESHED 005 numeric token
 * Changed epoll delay
 * Allowed ulined servers to by pass all oper permissions checking
 * Added stricter checking for listening sockets
 * Fixed compile time glitches in new code, removed obselete variables
 * Added ability for ulined servers to set any arbitary channel mode (even from outside the channel)
 * Added ability to put command named * into a class to make it cover all
 * Fixed Case sensitivity Bug (BugTrack #88) in m_chanfilter.cpp
 * Changed m_chghost.cpp to silently set hosts if uline sets it


1.0 Beta 5

 *  Added windows comments to module section. Added m_denychans. -katsklaw
 * Added 557 numeric (from MS Exchange chat server) to indicate too many results from /WHO
 * RPL_WHOLIMEXCEEDED changed to 523 to match bahamut
 * Added .cvsignore files
 * Added a ton of missing prompts wink.gif
 * Added cvsignore
 * Changed representation of MAXNICK in isnick() to allow for a non-incremented size
 * Fix for bug #70 (only first item working properly)
 * Fixed max channel length
 * Added ability to update the helpop file on rehash (Bug #69)
 * Added denychans module, allows blocking of channels
 * Added parameters to comments
 * 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)
 * Fixed nicklength perpetually increasing on each run (reported by katsklaw)
 * Fixed to never append double sums
 * Fixed to preserve epoll/select/kqueue choices
 * Operhosts are now optional (in the type tag)
 * Added check to not flush disconnected buffers
 * Added code to not try and increment buffer if wrote 0 chars
 * Added extra code to notify mainloop when the iterator has been mangled (e.g. by netsplit quits)
 * Added more immediate disconnect when a server isnt routable any more
 * Added ping checks for server links (experimental)
 * Added stuff for /map improvements
 * Autoconnection of servers added
 * Changed to not show remote quits (we don't show remote connects after all)
 * Fixed compile glitch on 3.4
 * Fixed inbound server errors
 * Fixed to erase .so and binaries before trying to overwrite them so mmap doesnt mess up and segfault any running copy (thanks jilles)
 * Fixed to flush buffers when connection closed
 * Fixed to not autoconnect servers we already have!
 * Nonblocking connect() for outbound server links (why was this blocking anyway)
 * Changed /map to show authenticating servers with a * similar to hybrid
 * Now clears the autoconns map on rehash
 * Sum not being propogated properly fix
 * Example conf update from katsklaw
 * Buffer size limits (hard coded to 1mb for now, will allow to raise in config later)
 * Fixed bug where when a server split all other servers would stop responding
 * Fixed the server names reported in /stats l
 * Output buffering on server connections
 * Removed m_globops setting +g automatically on oper, m_opermodes.so can do this now
 * Tidied up some socket stuff into userrec
 * Changed revision id's to std::string
 * Added m_opermodes.cpp, allows addition and removal of modes on oper up
 * Added COMMANDS command (yes, really)
 * Added detail to /COMMANDS
 * Changed cygwin warning
 * Changed to fix minor typo in dynamic-build makefile
 * Edited to properly detect strlcpy on netbsd (different declaration in string.h didn't match regexp)
 * Fixed /COMMANDS
 * Fixed case-sensitivity typo in module name for Addcommand
 * Fixed crappy const stuff
 * Modified to detect kqueue on netbsd
 * Removed stupid consts
 * Updated helpop docs
 * Added eg++ stuff
 * CC fixes
 * Changed to use gmake on ALL bsd variants
 * Kill fixes
 * Warning message for openbsd users that try and use gcc
 * Added -lresolv for solaris
 * Added -lrt for solaris
 * Bzero removed for compatibility with solaris 10
 * Fix to minor typo in solaris stuff
 * Fixes for solaris
 * Fixes to bad filehandle
 * Removed unncessary sched_yield calls
 * Updated for solaris -lsocket / -lnsl
 * Added configurable SOMAXCONN size
 * Changed epoll_wait timeout
 * Default epoll/kqueue to yes
 * Added: Epoll support
 * Kqueue and epoll default to enabled now
 * Made prompts clearer
 * Mass-connect speedups, also now uses less processor time
 * Moved a load of servers-only stuff into serverrec out of the way of userrec
 * Shrunk some datatypes
 * Removed __single_client_alloc again because gcc devs were smoking crack and removed it
 * Added hashcomp.cpp, seperates out the stl hash_map stuff
 * Added a few simple output lines (similar to gnu autoconf so people know what's happening)
 * Added better detection of strlcpy that doesn't involve compiling a test program (faster)
 * Added detection for kqueue, so if your BSD system doesn't have it, the configure doesnt ask you smile.gif
 * Added docs for hashcomp
 * Added idea from ircu: /invite with too few params shows the channels youve been invited to but have not yet joined
 * Added irc::string
 * Specified namespace std in *all* files
 * Fixed typo in die tag
 * GCC 3.4/4.0 fixes
 * Made 'make clean' make cleaner :-P
 * Made modules use irc::string where they were using strcasecmp()
 * Moved StrHashComp and InAddr_HashComp into the irc:: namespace
 * Moved a ton of functions into helperfuncs.h to speed up recompiles
 * Updated strhashcomp to use irc::string internally rather than a combination of strlower and strcasecmp
 * Updated to keep lowermap const within hashcomp.cpp
 * Added 'uniqueness sums': http://www.inspircd.org/wiki/InspIRCd_Serv...Uniqueness_Sums
 * Added RFCs
 * Updated example conf to list all non-extra modules with a description of what they do.
 * Modules now commented out by default, admin must uncomment them to use them. Suggested by lag``
 * Added Server::GetServerDescription() at request of Craig
 * Re-added the dot graphs again
 * Added docs for new smaller memory footprint classes
 * Changed the type of struct whowas records are stored in (no need to waste a big heavy userrec)
 * Customizable by-byte-size recvq stuff
 * Documented new recvq and sendq stuff
 * Fixed wrong number being shown when sendq exceeded
 * Honking great memory leak fixed that's been there since the early alphas :/
 * Optimized some static structs
 * Structure optimizations, changed a lot of bools into binary bitmasks
 * Updated default sendq size to 256k
 * Added sendq stuff, see example config
 * 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
 * Added Cache support for the KQueue Question
 * Fixed Optimisations not being set.
 * Added ability to accept() more pending sockets at once
 * Added socket engine to version response
 * Fixed crash when socket reads 0 whilst in kqueue mode
 * Fixed kqueue setting not being changed
 * Made ping check loop less regular in kqueue version
 * Changed pool size from 64 to 1024
 * Fixed some of Brains bastardization of configure biggrin.gif
 * Fixed Craig's buggy configure tongue.gif
 * Fixes to way allocations are handled
 * Hit dns with spork. Repeat until crispy.
 * Modified to rm the .o files from the modules dir
 * Modified to use -pipe
 * New way of building modules, this is supposedly more portable
 * Now secures binaries with 0700 perms as theyre installed
 * Optimised strlower (much faster, uses a lookup table)
 * Optimized userlist() (a lot faster with many users online)
 * Fixed bug where another users buffer could end up in the buffer of an exiting client before they quit
 * /WHOIS as oper now shows real ip as well as real host
 * Added USERIP numeric 005 output
 * Added m_userip.cpp requested by Selphie
 * Changed the final bunch of udp_* vars to server_*/tcp_*
 * Fixed ircservices sending PING
 * Changed to fully dynamic core (should be faster compile times)
 * Fix naming glitches
 * Fixed remote kills to display the correct source (spotted while talking to aquanight)
 * Fixed to use numeric 340-
 * Renamed core files to all be libIRCD*


1.0 Beta 4

 * Fixed configure bug resulting in osflags being called BEFORE getcache (Making it redundant.)
 * Fixed output of src/modules/Makefile saying it was made by Craig.net tongue.gif
 * Updated for test gcc4 compatibility
 * Added support back for ./inspircd
 * Added a line to automatically chmod ./inspircd to 0744 ('Last Second Save!')
 * configure now supports any future .file.inc includes (Yes, i can see into the future)
 * Updated makefile
 * New Perl ./configure
 * Added -Woverloaded-virtual to catch annoying module typos
 * Fixed to always look for the ircd.log within the bin/ dir
 * Fixed to not spool the error log after ./inspircd debug
 * Sanity checks for fd_ref in addclient
 * Fixed 'server ignores me forever if i throttle the server with connections' bug
 * Debugging now allowed from ./inspircd (./inspircd debug)
 * Added LD_LIBRARY_PATH hacks/kludges to the .inspircd.inc file to make it find libmysql in funny situations
 * Added final documentation for inspircd Beta 4
 * Added important note relating to ip addresses in <link:ipaddr>
 * Added schema for m_sqllog.so
 * Added m_sqloper, allows storage of opers within a mysql database
 * Commented new functions
 * Major *MAJOR* optimizations by double-referencing channels to users (never need to scan the entire user hash again except in very rare circumstances)
 * Added channel 'counter', increases speed of quits, parts, kicks
 * commented some users and connections code
 * added remote @* notice
 * Added remote versioning
 * Fixed dicky buffer (due to cleanup the wrong variable was being used)
 * Services speedups for stupid buffered i/o uplinks
 * Added server input buffers (for systems that decide buffering is fun)
 * Major code tidyup (-W)
 * Fixed some flood checking
 * added noticeall
 * Added a Server:: method to send server notices to channels
 * Added explicit oper tracking in a vector of userrec* pointers, optimizes sending out oper notices
 * Fixed: +s and +p channels wouldn't be synched correctly
 * Fixed: +s and +p never show in whois even when you're a member of them
 * Fixed: +s and +p never show in list even if you're a member of them
 * Added Server::FindDescriptor
 * Added and tested fd crossreference table - improves speed a lot, and fixes one of the /STATS chars which has been broken a while
 * Added OnAddBan and OnDelBan module api calls, and fixed glitch which required them in m_timedbans module
 * Added OnOperCompare function to override strcmp in password check for /oper
 * Added module message passing architecture
 * Added a few anti-flood features
 * Updated buffering, faster and more sensible (old code sucks)
 * Added password field
 * Removed some debug output
 * Added /stats T
 * Empty but non-null string passed to is_uline now returns true
 * Added numeric 318 to /WHOIS when nick is not found (end of whois should still be there as its a list response)
 * Added numeric 412 "no text to send"
 * Changed to handle : as a NOP token so that 'assuming' inspircd knows RFC commands wont cause tons of errors
 * Fix to a mode parsing bug (eating wrong version of parameter?)
 * fixed warning of redefinition of RUSAGE_SELF
 * Fix annoying off-by-one error in connection::RecvPacket
 * Added more fault tolerance to server links
 * Added new /stats z
 * Fixes to /who output
 * Added mode 'compression', stops abuse with modes like: +s-s+s-s+s-s
 * Test fixes for /version strings not being set in burst
 * Fixed a reversed strcmp
 * Added 901 numeric - end of modules list
 * Added support for /SQUIT <mask> and checks against /SQUIT *
 * Changed remote kill reason text
 * Fixed strange leading ":" on remote Z/K/G lines
 * Fixed so that quitprefixes are shown in client exit notices
 * Added global oper monitoring through modules and global connect monitoring through modules
 * Fixed weird issues when anope sends large amounts of text at once to the uplink
 * Fixed dodgy poll()
 * Added new and improved GetBuffer function based on research on crappy redhat 7.3
 * Fixed park crash bug #63 reported by ViaraiX
 * Reordered some on-connect network stuff to stop services being so confused
 * Extra safety checks to avoid trying to write() remote users
 * Optimized WriteCommon and WriteCommonExcept
 * Fixed weird line wrapping bug with extremely long lines
 * Made xline notices neater when notifying of unknown connections
 * Fixed WriteCommon not writing to the source user when not on any channels
 * Changed "is now running" message to AFTER port bind checks
 * Added PID reporting and testing before daemonize
 * Changed startup ascii to green. Elphaba would be so proud tongue.gif
 * Fix to prevent empty umodes
 * Fixed empty modes from nickserv
 * Optimized modes (removed strlens etc)
 * Fixed empty modes issue that emerged after dodgy code was corrected
 * Fixed services not being informed of force joins
 * Fix to prevent quits being sent onto the network for nonexistent users
 * Added faster wildcard checking routines
 * Fix for bug #62 (replaces only occur once per line in m_censor)
 * m_chanfilter now works on gcc 2.95.x again.
 * m_chanprotect fixed to remove privilages upon kick
 * Fixed WriteChannelWithServ
 * Added module which provides MD5 encryption for oper passwords plus /mkpasswd
 * Added another check for 'NoServerUline' type thing in m_services.
 * Added Check for 'NoServer' when +r ing a channel in m_services.
 * Added m_timedbans (timed bans module for channel ops/halfops)
 * Added m_sql, module to provide sql db access to other modules
 * Added m_sqlauth - allows authorizing of connections via an arbitary mysql table with a username and password field
 * Added m_sqllog - allows you to log your irc information to an sql database
 * Added m_sqloper, allows storage of opers within a mysql database

1.0 Beta 3

Added rm -rf src/modules/*.so to make modclean
Added module message passing architecture
added Module::OnMeshToken
added Server::MeshSendAll
added Server::MeshSendCommon
added Server::MeshSendAllAlive
added Server::MeshSendUnicast
added Server::MeshSendAllExcept
added Server::MeshCheckChan
added Server::MeshCheckCommon
added Server::FindModule
added New docs for API
added Module::OnRawMode
added Module::OnCheckInvite
added Module::OnCheckKey
added Module::OnCheckLimit
added Module::OnCheckBan
added Module::OnStats
added Module::OnChangeLocalUserHost
added Module::OnChangeLocalUserGECOS
added Module::OnLocalTopicChange
Added Server::AddGLine
Added Server::AddKLine
Added Server::AddZLine
Added Server::AddQLine
Added Server::AddELine
Added Server::DelGLine
Added Server::DelKLine
Added Server::DelZLine
Added Server::DelQLine
Added Server::DelELine
Added Server::Duration
Fixed /LUSERS server count
Updated documentation of <connect> tags at request of Strike
Fixed somebody putting double closing tags, nullifying the effect of allowhalfop in the example conf
Removed deprecated class 'packet'
Fixed Dns free() errors
Added ability for modules to hold users in a 'holding pattern' while they do stuff on connect
Added OnUserDisconnect method to modules.* to fix fd leak in m_ident.cpp
Added the m_chanfilter module, implements chanmode +g which allows channel specific badwords (YAY)
Added Module::OnSendList
Added m_conn_lusers.so: Sends /LUSERS on connect
Added m_ident.so: nonblocking ident lookup module
Fixed /kill bug in m_operlevels (couldnt kill non-opers)
Changed m_override: Fine-grained control over what can be overridden by whom
Added m_park, user parking to keep ops during a ping timeout (suggested by Ib3N)
Fixed limit checking in core and m_redirect.so
Added m_setidle, allows opers to set their idle times
Added Module::OnBackgroundTimer method, ticks approximately every 5 seconds
Yet more optimizations!
Added 'server already exists' check for u-type links
Fixed bug when ordering a bot to leave using anope services
Fixed anope module sending L tokens with 2 instead of 3 params (made code more tolerant instead of changing module)
Fixed broken server/server handshake for U-type server links (services)
Fixed strhashcomp to forbid matching scandanvian nicks properly eg. [Brain] and {Brain}
Fixed lingering (SO_REUSEADDR was being set to 0?)
Added Module::OnCheckReady and Module::OnUserRegister
Updated /INFO
Fixed to allow server to server traffic again (DOH)
Added PID reporting and testing before daemonize
Changed "is now running" message to AFTER port bind checks
Fixed strange join behavior reported by w00t (mirc requesting MODE immediately after JOIN)
Fixed bug #47 reported (and suggested fix) by Om
Fixed bug where if channel limit was lower than the user count users could still join, but not if it was equal
Added Module::OnUserKick and Module::OnUserPreKick
Added Server::PseudoToUser and Server::UserToPseudo
Made setrlimit a commandline option
Removed some old uneeded code
Made cmode and chanmode more safe
Fixed a double free in dnsqueue.cpp
Fixed a resolver issue (weird segfault on gentoo?) in server linking
Double 367 numeric glitch fixed
Added Server::IsValidHostMask
Added getrlimit/setrlimit to set process limits to allow a core dump
Removed some logging from wildcard.cpp

1.0 Beta 2

* Added a lot of small fixes based on feedback of beta 1
* Fixed compile issues on freebsd due to an icky shellscript expression that failed to detect strlcat
* Added more advanced m_override.cpp module due to user request (thanks Rob)

1.0 Beta 1

* Enough optimizations to shake a very big stick at
* Added asyncronous DNS
* Changed /MODULES to allow simplified output for non-opers
* Added module flags to /MODULES for opers
* Added /UNLOADMODULE
* Added /LOADMODULE
* Added resource tracking for modules
* Added extra log output for oper success and failure
* Added hostname checking for opers (someone left it out *looks around nonchalantly*)
* Added module API OnUserPostNick method
* Added E:Lines and /ELINE (ban exceptions)
* Security fixes to /MODE and /TOPIC
* Fixed a cosmetic bug in /WHO
* Fixed random crashes when user connecting
* Fixed 'unlikely' crash if nick was changed before dns lookup completed
* Fixed to actually check the password of linking servers (someone left this out too!)
* Added error checking to make sure opertypes exist before opering a user!
* Added 005 handling for modules
* Added onKill event for modules
* Added OnModuleLoad event for modules (notified of all module loading)
* Added <disabled:commands> tag
* Added ability to disable any command for non-opers
* Added customizable ping frequency to <connect:allow>
* Added optional module path to the configuration file
* Added support for Rehashing to allow adding and removal of modules
* Added module VersionFlags support
* Fixed a resolver issue (weird segfault on gentoo?) in server linking
* Changed the loglevel of some startup failure messages to DEFAULT (were DEBUG)
* Optimized connects - motd is sent faster
* InspIRCd now logs value of <die> to the logfile on failure
* Added new <banlist> tags, allows dynamic banlist sizes on a per channel basis rather than hard coded or network wide
* Fix for bug #39, m_redirect returning invalid/random value for OnUserPreJoin method of the module class
* Added code to shutdown listening sockets on exit
* Added pid file support, and documentation for it
* Fixed string format vunerability, thanks again to the #ratbox people for helping find it
* Fixed 005 numeric to only output 13 tokens per line (thanks anfl)
* Replaced some 005 constants with their configured values
* Fixed "error in free()" and other bugs going to open sockets
* Config files read by the ircd are now chmod'ed 0600
* Fixed parsing error with comments that have tabs before them
* Added implementation of strlcpy and strlcat for systems that dont have it
* Fixes to crash when setting the key of a channel youre not a member of
* Fixed issue where failing modules would bail by calling exit (deprecated) -- modules should now just disable their functionality if they are missing data
* Added GetVersion() to m_showwhois.cpp
* m_chanprotect.so fixed to take away +q and +a when the user parts the channel (double DOH)
* Added 005 numeric handling to most of the modules
* Added m_hostchange module, our own homebrew implementation of the unreal pay module!
* Added m_nicklock module, a module which allows opers to lock a user to a nickname until they quit
* Added m_operlevels, prevents opers designated as above other opers from being killed
* Fixed Crash bug cause by multiple declarations of 'Srv' in m_randquote.so (Bug #35)
* Added m_remove by om, uses a force part to replace a kick to thwart auto rejoin
* Added module to restrict channel creation to opers only (requested by [ed])
* Added a module at request of [ed] which stops anyone messaging all but opers
* Added m_silence.so - implementation of /SILENCE command
* Added ./inspircd (start|stop|restart|rehash|status|cron|Cheese-Sandwich) (Happy luigiman?)
* Made a slightly nicer method for .Makefile.inc
* Updated ./configure to reflect the above changes.
* Removed reference to depricated ./makeconf and updated command to exec to build the daemon.
* Added dynamic src/modules/Makefile generation, during ./configure the script will search modules for /* $CompileFlags: */ and append any given flags to its g++ line.
* Startup script modified to kill -9 if a kill -TERM fails.
* Makefile will ignore if cp fails to copy the binaries.
* Added <disabled:commands> to the example config (commented out by default!)
* Documented /LOADMODULE and /UNLOADMODULE plus new /MODULES behaviour
* New docs to match extra module Version class stuff, etc
* Added new documentation for ELine class and OnUserPostNick method
* Added DNS class to documentation

1.0 alpha 12

* Updated ./configure to detect GCC 3.4.x
* Added m_showwhois.so - lets opers see when theyre WHOISed
* Added m_opermotd.so - Gives opers an opermotd on oper-up
* Added m_operjoin.so - Forces opers to join a given channel when they oper
* Security audit resulting in more secure and stable code
* Added lots of error checking to the configuration parser
* InspIRCd now works with BOPM, please see the tutorial on our forums
* UMODE issues with SVSMODE finally addressed, working fine again
* Services issues addressed and fixed
* Added generic error output to the ConfigReader class (ConfigReader::DumpErrors())
* Fixed sys/socket.h error on earlier versions of GCC (2.95.x)
* Redone documentation
* Fixed mode changes (they actually work now!)
* Module passes service names to its uplink now
* ChanServ actually sets channel modes rather than the server!
* NickServ actually sets umodes rather than the server!
* Double-mode-changes no longer occur
* User nickname registration tracking with +r works properly again

1.0 Alpha 11

* Added lots of bugfixes
* Optimised, works faster, and smoother
* Added support for non-mesh servers
* Added services support
* Implemented example ircservices module (working with ircservices 5)
* Added m_services module
* Added m_antibottler module
* Added m_alias module
* Added glines (local and global)
* Added klines
* Added qlines (local and global)
* Added zlines (local and global)

1.0 Alpha 10

*  Added server linking support (tcp based mesh link)
* Lots of stability fixes
* Speed improvements
* Optimisations, no longer eats cpu so much
* GCC3 and GCC2 support
* Even bigger module API
* More documentation
* m_antibottler, labels bottler bots
* m_chghost, gives you a /chghost command
* m_cloaking, gives you hostname cloaking and mode +x
* m_filter, filters glob patterns on channels and private
* m_globops, provides /GLOBOPS and mode +g support
* m_helpop, gives /HELPOP and mode +h support
* m_sajoin, force-join a user to a channel
* m_sapart, force-part a user from a channel
* m_samode, force a mode change on a user or channel
* m_saquit, force a quit of a client without /kill
* m_sethost, allows opers to change their hostmasks
* m_setname, allows users to change their name
* HELPOP documentation accessible with the helpop module loaded
* Split the ircd into many smaller files for faster compiling
* Improved configure and makefile phase
* Added all oper commands (CONNECT, SQUIT etc)
* Added remaining server->server commands such as /MAP
* Connection pooling, uses less CPU for the same tasks as before
* High-powered server to server link protocol unlike any other ircd

1.0 alpha 9.5

* Added support for /connect (no sync yet!)
* Added extra module support and improved api
* Improved developer docs, see http://www.inspircd.org/docs/
* FINALLY fixed crash-on-disconnect bug
* Fixed many stability bugs
* Fixed length and buffer overrun issues that caused user records to become corrupted without crashes (!)

1.0 alpha 9

* Added /WHOWAS
* Made ircd cache message of the day in a vector (faster!)
* Added support for multiple lines of /NAMES on large channels
* Added hostname/ip caching to speed up connects
* Added '/stats z'
* Added Server class
* Added more code to example module demonstrating use of Server class
* Added Admin class (holds /admin info for modules)
* Added methods to Server class
* Added m_cloaking.so module, provides host masking
* Added /AWAY
* added /ISON command (for mIRC etc basic notify)
* Added /USERS stub
* Added /SUMMON stub
* attemted to fix weird crash on /kill
* added pause= value to /die and /restart in config
* Attempted to fix closed client sessions not being detected
* Added wildcard support
* Added channel bans
* Changed user and channel structs to classes (finally)
* Fixed parameter error in QUIT code (was showing junk chars on BSD)
* fixed some ugly pointer bugs (thanks dblack and a|KK|y!)
* Added /INVITE command and relevent structures
* Added CONNECT ALLOW and CONNECT DENY config tags
* Added PASS command
* Fixed: /LUSERS cant count :P
* added /TRACE command
* Implemented channel mode +m
* Added channel modes, +k, +l, +i, +m etc
* Added user and channel modes +i, +p, +s
* Implemented usermode +s
* Fixed dodgy mode glitches (the ones Craig loves to play with, awww)
* Added code to tidy up bans (e.g. max nick length) - i blame mIRC!
* fixed multiple /MODE +l bugs (thanks to akky and BOFH bugging meh!)
* Fixed ident max length to 10
* fixed random crash on kill_link (AGAIN) - was /stats
* improved speed 10x (because i can...)
* optimisations galore!
* Added FileReader file-caching class
* Changed m_randquote to use FileReader class
* Neater source tree (binaries in bin, source in src, headers in include, etc)
* Added /WHOWAS
* Tidied up makefiles
* Much nicer configure program
* makeconf program (very nice config maker by Craig)


1.0 alpha 8

* Added Admin class (holds /admin info for modules)  
* Added methods to Server class  
* Added m_cloaking.so module, provides host masking  
* Added Server class  
* Added more code to example module demonstrating use of Server class  
* ./configure improved by Craig (better prompts, dir creation)  
* /stats z added detail  
* Added '/stats z'  
* Added hostname/ip caching to speed up connects  
* Made ircd cache message of the day in a vector (faster!)  
* Added support for multiple lines of /NAMES on large channels

1.0 alpha 7

* Added /USERHOST command 
* Added '/STATS O' 
* removed random debug output 
* Fixed random crash on nickchange  
* Fine tuned ability to handle >300 users 
* added '/stats L' (connect-info) 
* '/stats u' support added (server uptime) 
* added '/stats M' command 
* Added extra dynamic module support, new methods to Module class

1.0 alpha 6

* Changed command table to a vector of command_t types 
* Dynamix module support, preliminary release 
* Fixes random crash on nickchange 
* Fixed wallops and command parameter counting bugs 
* fixed "user lingering" problem in kill_link 
* updated example config 
* developed a simple sample module (m_foobar.so)

1.0 alpha 5

* Changed channel array to a hash_map similar to the one used for users, faster and more efficient
* Changed ./configure, no longer asks for hard channel limit (depreciated)
* Added support for users to be disconnected once MAXUSERS is reached
* Changed code a lot, major overhauls for C++ and STL use for added stability and speed
* Changed entire user system to use the hash_map container type instead of an array
* Added /TIME command
* Added /INFO command
* Added restart and die passwords
* Partially implemented /RESTART command
* Fixed amusing bug which allowed partially connected clients to issue commands under the context of other users! *gulp!* (reported again by Craig)
* Fixed SegFault caused when doing a /who 0 or /who * whilst not in channels (Reported by Craig, Fixed by Craig :p)
* Added /who 0 o to display online Opers (Craigs First Scratch of Code :p)
* Fixed Typo in LUSERS (Reported by MrBOFH and CC)
* Fixed Joining Channels withough a # bug. (Reported by MrBOFH)


1.0 alpha 4

* Fixed parameters bug discovered by Allan
* Fixed /NICK repeating bug found by piggles.
* Added /REHASH command
* Added /LUSERS command
* Added ability to kill -HUP to rehash
* Fixed lock up after ping timeout
* Added system to /VERSION
* Added DNS lookups on connect (*FIXME* this needs to be asyncronous!)
* Fixed IRCop status shown on wrong users
* Fixed socket linger option via setsockopt (can restart faster as sockets arent in use after shutdown!)
* Added operators can now see real userhost in WHOIS
* Added oper-up failed msg to online opers
* Changed layout of /motd command start numeric
* Fixed empty channels are now purged upon user quit
* Changed: support for WHO * as well as WHO 0 (do the same thing)
* Fixed ability to kick users when you arent on the channel :)
* Fixed grammatical error when halfop tries to kick an op, "You must be at least a half-operator"


1.0 alpha 3

* Fixed problem where nicks containing control codes were allowed
* Added support so that ircd honours channel mode +n
* Added support so that ircd honours channel mode +t
* Fixed linefeeds in middle of line bug (reported by Craig)
* Fixed buffer overflow in channel names (reported by Allan)
* Fixed close() on nonblocking sockets problem
* Added /KILL command >:)
* Added /KICK command

1.0 alpha 2

* addition of /oper and several Channel Modes.
* new config file format