* ---------------------------------------------------
*/
+/* $Core: libIRCDmode */
+/* $ExtraDeps: $(RELCPPFILES) */
+/* $ExtraObjects: modes/modeclasses.a */
+/* $ExtraBuild: ${MAKE} -C "modes" DIRNAME="src/modes" CC="$(CC)" $(MAKEARGS) CPPFILES="$(CPPFILES)" */
+
#include "inspircd.h"
#include "inspstring.h"
return mode;
}
-ModeAction ModeHandler::OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding)
+ModeAction ModeHandler::OnModeChange(User*, User*, Channel*, std::string&, bool)
{
return MODEACTION_DENY;
}
-ModePair ModeHandler::ModeSet(userrec* source, userrec* dest, chanrec* channel, const std::string ¶meter)
+ModePair ModeHandler::ModeSet(User*, User* dest, Channel* channel, const std::string&)
{
if (dest)
{
}
}
-void ModeHandler::DisplayList(userrec* user, chanrec* channel)
+void ModeHandler::DisplayList(User*, Channel*)
{
}
-void ModeHandler::DisplayEmptyList(userrec* user, chanrec* channel)
+void ModeHandler::DisplayEmptyList(User*, Channel*)
{
}
-bool ModeHandler::CheckTimeStamp(time_t theirs, time_t ours, const std::string &their_param, const std::string &our_param, chanrec* channel)
+bool ModeHandler::CheckTimeStamp(time_t theirs, time_t ours, const std::string&, const std::string&, Channel*)
{
return (ours < theirs);
}
return m_type;
}
-bool ModeWatcher::BeforeMode(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding, ModeType type)
+bool ModeWatcher::BeforeMode(User*, User*, Channel*, std::string&, bool, ModeType)
{
return true;
}
-void ModeWatcher::AfterMode(userrec* source, userrec* dest, chanrec* channel, const std::string ¶meter, bool adding, ModeType type)
+void ModeWatcher::AfterMode(User*, User*, Channel*, const std::string&, bool, ModeType)
{
}
-userrec* ModeParser::SanityChecks(userrec *user,const char *dest,chanrec *chan,int status)
+User* ModeParser::SanityChecks(User *user, const char *dest, Channel *chan, int)
{
- userrec *d;
+ User *d;
if ((!user) || (!dest) || (!chan) || (!*dest))
{
return NULL;
return d;
}
-const char* ModeParser::Grant(userrec *d,chanrec *chan,int MASK)
+const char* ModeParser::Grant(User *d,Channel *chan,int MASK)
{
if (!chan)
return "";
return "";
}
-const char* ModeParser::Revoke(userrec *d,chanrec *chan,int MASK)
+const char* ModeParser::Revoke(User *d,Channel *chan,int MASK)
{
if (!chan)
return "";
return "";
}
-void ModeParser::DisplayCurrentModes(userrec *user, userrec* targetuser, chanrec* targetchannel, const char* text)
+void ModeParser::DisplayCurrentModes(User *user, User* targetuser, Channel* targetchannel, const char* text)
{
if (targetchannel)
{
return;
}
-void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool servermode)
+void ModeParser::Process(const char** parameters, int pcnt, User *user, bool servermode)
{
std::string target = parameters[0];
ModeType type = MODETYPE_USER;
unsigned char mask = 0;
- chanrec* targetchannel = ServerInstance->FindChan(parameters[0]);
- userrec* targetuser = ServerInstance->FindNick(parameters[0]);
+ Channel* targetchannel = ServerInstance->FindChan(parameters[0]);
+ User* targetuser = ServerInstance->FindNick(parameters[0]);
LastParse.clear();
* NOT a uline and NOT a servermode,
* OR, NOT halfop or above.
*/
- user->WriteServ("482 %s %s :You're not a channel (half)operator",user->nick, targetchannel->name);
+ user->WriteServ("482 %s %s :You're not a channel %soperator",user->nick, targetchannel->name,
+ ServerInstance->Config->AllowHalfop ? "(half)" : "");
return;
}
}
/* Does this mode have a prefix? */
if (modehandlers[handler_id]->GetPrefix() && targetchannel)
{
- userrec* user_to_prefix = ServerInstance->FindNick(parameter);
+ User* user_to_prefix = ServerInstance->FindNick(parameter);
if (user_to_prefix)
targetchannel->SetPrefix(user_to_prefix, modehandlers[handler_id]->GetPrefix(),
modehandlers[handler_id]->GetPrefixRank(), adding);
}
}
-bool ModeParser::AddMode(ModeHandler* mh, unsigned const char modeletter)
+bool ModeParser::AddMode(ModeHandler* mh)
{
unsigned char mask = 0;
unsigned char pos = 0;
return NULL;
}
-std::string ModeParser::ModeString(userrec* user, chanrec* channel)
+std::string ModeParser::ModeString(User* user, Channel* channel)
{
std::string types;
std::string pars;
/** This default implementation can remove simple user modes
*/
-void ModeHandler::RemoveMode(userrec* user)
+void ModeHandler::RemoveMode(User* user)
{
char moderemove[MAXBUF];
const char* parameters[] = { user->nick, moderemove };
/** This default implementation can remove simple channel modes
* (no parameters)
*/
-void ModeHandler::RemoveMode(chanrec* channel)
+void ModeHandler::RemoveMode(Channel* channel)
{
char moderemove[MAXBUF];
const char* parameters[] = { channel->name, moderemove };
ModeParser::ModeParser(InspIRCd* Instance) : ServerInstance(Instance)
{
- struct Initializer
+ ModeHandler* modes[] =
{
- char modechar;
- ModeHandler* handler;
- };
-
- Initializer modes[] = {
- { 's', new ModeChannelSecret(Instance) },
- { 'p', new ModeChannelPrivate(Instance) },
- { 'm', new ModeChannelModerated(Instance) },
- { 't', new ModeChannelTopicOps(Instance) },
- { 'n', new ModeChannelNoExternal(Instance) },
- { 'i', new ModeChannelInviteOnly(Instance) },
- { 'k', new ModeChannelKey(Instance) },
- { 'l', new ModeChannelLimit(Instance) },
- { 'b', new ModeChannelBan(Instance) },
- { 'o', new ModeChannelOp(Instance) },
- { 'h', new ModeChannelHalfOp(Instance) },
- { 'v', new ModeChannelVoice(Instance) },
- { 's', new ModeUserServerNotice(Instance) },
- { 'w', new ModeUserWallops(Instance) },
- { 'i', new ModeUserInvisible(Instance) },
- { 'o', new ModeUserOperator(Instance) },
- { 'n', new ModeUserServerNoticeMask(Instance) },
- { 0, NULL }
+ new ModeChannelSecret(Instance),
+ new ModeChannelPrivate(Instance),
+ new ModeChannelModerated(Instance),
+ new ModeChannelTopicOps(Instance),
+ new ModeChannelNoExternal(Instance),
+ new ModeChannelInviteOnly(Instance),
+ new ModeChannelKey(Instance),
+ new ModeChannelLimit(Instance),
+ new ModeChannelBan(Instance),
+ new ModeChannelOp(Instance),
+ new ModeChannelHalfOp(Instance),
+ new ModeChannelVoice(Instance),
+ new ModeUserServerNotice(Instance),
+ new ModeUserWallops(Instance),
+ new ModeUserInvisible(Instance),
+ new ModeUserOperator(Instance),
+ new ModeUserServerNoticeMask(Instance),
+ NULL
};
/* Clear mode list */
LastParse.clear();
/* Initialise the RFC mode letters */
- for (int index = 0; modes[index].modechar; index++)
- this->AddMode(modes[index].handler, modes[index].modechar);
+ for (int index = 0; modes[index]; index++)
+ this->AddMode(modes[index]);
}