diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2004-04-05 01:03:26 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2004-04-05 01:03:26 +0000 |
commit | 1e1e59d32934ee61562804cd86321ffe849c1ecb (patch) | |
tree | dbb153dbf5c827f1a43bd2d2f306c268a8bec9ed /src/modules | |
parent | c5ad0a19cbf86510fc0b75ac96ea9d57598da91f (diff) |
Modified the Module::OnExtendedMode() method to use a void* as its target which the coder must cast into a chanrec or userrec.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@383 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/m_cloaking.cpp | 19 | ||||
-rw-r--r-- | src/modules/m_testcommand.cpp | 6 |
2 files changed, 17 insertions, 8 deletions
diff --git a/src/modules/m_cloaking.cpp b/src/modules/m_cloaking.cpp index aae182036..8fd4e43e5 100644 --- a/src/modules/m_cloaking.cpp +++ b/src/modules/m_cloaking.cpp @@ -59,7 +59,7 @@ class ModuleCloaking : public Module return Version(1,0,0,1); } - virtual bool OnExtendedMode(userrec* user, chanrec* chan, char modechar, int type, bool mode_on, string_list ¶ms) + virtual bool OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list ¶ms) { // this method is called for any extended mode character. // all module modes for all modules pass through here @@ -69,6 +69,11 @@ class ModuleCloaking : public Module // modules to 'spy' on extended mode activity if they so wish. if ((modechar == 'x') && (type == MT_CLIENT)) { + // OnExtendedMode gives us a void* as the target, we must cast + // it into a userrec* or a chanrec* depending on the value of + // the 'type' parameter (MT_CLIENT or MT_CHANNEL) + userrec* dest = (userrec*)target; + // we've now determined that this is our mode character... // is the user adding the mode to their list or removing it? if (mode_on) @@ -80,28 +85,28 @@ class ModuleCloaking : public Module // will not work if the user has only one level of domain // naming in their hostname (e.g. if they are on a lan or // are connecting via localhost) -- this doesnt matter much. - if (strstr(user->host,".")) + if (strstr(dest->host,".")) { // in inspircd users have two hostnames. A displayed // hostname which can be modified by modules (e.g. // to create vhosts, implement chghost, etc) and a // 'real' hostname which you shouldnt write to. - std::string a = strstr(user->host,"."); + std::string a = strstr(dest->host,"."); char ra[64]; long seed,s2; - memcpy(&seed,user->host,sizeof(long)); + memcpy(&seed,dest->host,sizeof(long)); memcpy(&s2,a.c_str(),sizeof(long)); - sprintf(ra,"%.8X",seed*s2*strlen(user->host)); + sprintf(ra,"%.8X",seed*s2*strlen(dest->host)); std::string b = Srv->GetNetworkName() + "-" + ra + a; Srv->Log(DEBUG,"cloak: allocated "+b); - strcpy(user->dhost,b.c_str()); + strcpy(dest->dhost,b.c_str()); } } else { // user is removing the mode, so just restore their real host // and make it match the displayed one. - strcpy(user->dhost,user->host); + strcpy(dest->dhost,dest->host); } // this mode IS ours, and we have handled it. If we chose not to handle it, // for example the user cannot cloak as they have a vhost or such, then diff --git a/src/modules/m_testcommand.cpp b/src/modules/m_testcommand.cpp index 307f11ad6..b464a2737 100644 --- a/src/modules/m_testcommand.cpp +++ b/src/modules/m_testcommand.cpp @@ -46,20 +46,24 @@ class ModuleTestCommand : public Module Srv->AddExtendedMode('Z',MT_CHANNEL,false,1,0); } - virtual bool OnExtendedMode(userrec* user, chanrec* chan, char modechar, int type, bool mode_on, string_list ¶ms) + virtual bool OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list ¶ms) { + if ((modechar != 'Z') || (type != MT_CHANNEL)) { // this mode isn't ours, we have to bail and return 0 to not handle it. Srv->Log(DEBUG,"Extended mode event triggered, but this is not a mode i've claimed!"); return 0; } + chanrec* chan = (chanrec*)target; if (mode_on) { Srv->Log(DEBUG,"Custom mode is being added to channel"); + Srv->Log(DEBUG,chan->name); } else { Srv->Log(DEBUG,"Custom mode is being taken from a channel"); + Srv->Log(DEBUG,chan->name); } // must return 1 to handle the mode! |