user target string (nick!user@host:info), insteaf of doing it at like 5 places.
- Spamfilter target 'u' (user): the host field (nick!user@HOST:realname) is now escaped
with brackets if it's an IPv6 address, eg: blah!blah@[1:2:3:4:5:6:7:8]:hello, reported
by aquanight and others (#0003010).
error message if the kick should be denied. The upper layer (thus NOT you) takes care
of OperOverride.
- Modulized channel mode +Q (src/modules/chanmodes/chmode_upQ.c)
(unmentioned: ripped out old MODE_FLOODLIMIT stuff -- 2 lines)
As a consequence of this the last parameter you get in your hook is now 'oldnick' rather
than 'newnick'. So the new nick is in sptr->name now and oldnick in last parameter.
- Added HOOKTYPE_PRE_CHANMSG, this should now be used for blocking/morphing text.
It has the parameters: sptr, chptr, text, notice
- HOOKTYPE_CHANMSG now no longer allows one to block the text (use HOOKTYPE_PRE_CHANMSG for
that). It's also moved to after the message was actually sent.
- Added HOOKTYPE_KNOCK (sptr, chptr)
- Added HOOKTYPE_MODECHAR_FIXME. Internal for now, will be replaced with a proper
HOOKTYPE_MODECHAR later (and arguments will change). It's just an internal hack for
chmode +f for now ;).
- Updated indent.pro to use length=110. It still does not indent how I want it to be though,
so don't use it yet ;).
- Moved channel mode +f to src/modules/chanmodes/chmode_f.c, interestingly enough this took
longer than recoding extcmodes paramter support and moving chan mode +j.
It's not only looking like a complex channel mode, it actually *IS* one ;).
TODO: make sure it actually works, and fix sjoining (partly not implemented yet->crash) ;p
for everything. Recode of extcmodes partially complete (only 30% or something), using a
FAST 'slot system' now in the channel structure for paramter modes instead of linked lists.
Besides the slot system being faster, it also causes less memory fragmentation (and
memory fragmentation actually causes slower CPU as well, especially when running for a
long time). Channel modes are still permanent and all.
I'm first going to move modes to modules and then later on have a go at making them non-
permanent (already know exactly how to do it, but other things go first ;p).
Documentation on how all this works will be added later as well. It's really work-in-progress
at the moment, which means: the API might (or 'will') change.
Channel modes will be in src/modules/chanmodes, named chmode_<modechar>.c, that's the
general rule at least.. Some will be 'packed together' like the RFC modes s/n/t/k/l/etc.
Channel mode 'j' has been moved to src/modules/chanmodes/chmode_j.c which seems to work ok.
Details (aka: documentation) about which loadmodule's will be needed for which modes
(like I said, since some will be bundled in for example an 'rfc' module) will also be added
later. For now it doesn't matter much, since there's only j ;).
Side note: some +j code is still in the core (only eating 4 bytes per-user and 4 bytes
per-channel, though), and will remain there for now.
I did the work of above in 2 days, so ehm.. it's still far from complete, but I don't want
to wait for one BIG commit which changes half of the ircd :P.
Added hooks (needs to be documented, like all other hooks, one day ;p):
HOOKTYPE_CAN_JOIN: called from can_join(), seems more logical than PRE_LOCAL_JOIN, also
more nicely passes the key and link stuff.
HOOKTYPE_CAN_SEND: not implemented yet. will be called from can_send()
HOOKTYPE_CLEANUP_CLIENT: called from free_client()
HOOKTYPE_CLEANUP_USER: called from free_user()
HOOKTYPE_CLEANUP_USER2: called from exit_client when freeing a user.. I know, this
might sound redundant, but then again.. some things REQUIRE a certain order (like before
freeing membership links).. Or at least I don't want to break the current logic ;).
value should now be one of EX_*:
EX_DENY : disallowed, except for oper override
EX_ALLOW : allowed
EX_ALWAYS_DENY : disallowed, even in case of operoverride (eg for
operlevel modes like +A).
Note that it's backward compatible since TRUE/EX_ALLOW=1 and FALSE/EX_DENY=0.
- Fixed a few bugs with oper override & extended chanmodes, for example
chanmode +T could not be set by a globop w/can_override and non-+hoaq.
- Added snomasks 'S' (Spamfilter) which notifies you of any spamfilter matches.
- [internal] always return after spamfilter match, don't continue looping trough
targets list (eg in case of: /msg #a,#b,#c spamspam), otherwise you would get
duplicate notification msgs.
- Added SENDSNO server command, similar to SENDUMODE but for snomasks, this is
used by the spamfilter snomask (+S) so you get network-wide notifications.
- Added "compiled for.." versioning system, this way a beta17 module can't be loaded
on beta18, etc... People often forgot to recompile their modules or had old ones
somewhere by mistake, therefore crashing after upgrades... this should fix this
(in the future). Module coders don't have to do anything for making this work,
it's done automatically (via modules.h).
These bans look like ~<type>:<stuff>. Currently the following bans are available:
~q: quiet bans (ex: ~q:*!*@blah.blah.com). People matching these bans can join
but are unable to speak, unless they have +v or higher.
~c: channel bans (ex: ~c:#idiots). People in #idiots are unable to join the channel.
~r: gecos (realname) bans (ex: ~r:*Stupid_bot_script*). If the realname of a user
matches this then (s)he is unable to join.
NOTE: an underscore ('_') matches both a space (' ') and an underscore ('_'),
so this ban would match 'Stupid bot script v1.4'.
These bantypes can also be used in the channel exception list (+e).
+e ~r:*w00t* makes anyone with 'w00t' in their realname able to join,
and +e ~c:#admin makes anyone in #admin able to join, etc..
This system allows modules to add extended bantypes too.
This feature requires some additional testing, also the module interface will
probably be changed in the next few weeks, and perhaps more extended bans will
be added before next release.. we'll see...
- Normal users can now get a list, versioninfo will be hidden however.
- Opers get some additional details like hooks and commandoverride's.
- Opers can use /module <servername> to get a remote list of loaded modules.
- Added flag [3RD] to show it's a 3rd party module
This was requested by by quite some people because serveradmins started to load
"spy modules" without clearly mentioning it in the MOTD (which is highly unethical
and in some countries even illegal due to privacy law). Also the remote module
list was requested by quite a few opers.
Sure, this isn't a 100% guarantee but at least if someone goes hiding stuff
then it's clear what their intentions are (and thus will be refused support, ..).
- Changed emailaddr in help window at windows to unreal-users mailinglist.
- Made the cloak mismatch msg during linking a bit more scary.
- Added comment to 'Install as a service' option in installer to help n00bs a bit.
- Changed some useless stuff.
- Enabled EXTCMODE by default, I presume it's stable but can't promise anything.
- Module coders: changed 'allowed' callback function for umodes&snomasks,
from 'aClient *sptr' to 'aClient *sptr, int what'.
'what' will be MODE_ADD if trying to add and MODE_DEL if trying to remove.
- Module coders: new hooks: part, kick, chanmode, topic. changed: quit (added 'comment' param).
- Enlarged REPORT_* vars a bit.
- IPv6: UnrealIRCd can now lookup ip6.arpa addresses too (original IRCnet patch modified for
UnrealIRCd by Onliner).