From 7ad534c1af4578a0d46742c4b6b00a5a33afb63f Mon Sep 17 00:00:00 2001 From: linuxdaemon Date: Mon, 24 Jun 2019 11:10:17 -0500 Subject: Replace large if/else blocks for target.type with switches (#1668). --- src/modules/m_deaf.cpp | 86 +++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 39 deletions(-) (limited to 'src/modules/m_deaf.cpp') diff --git a/src/modules/m_deaf.cpp b/src/modules/m_deaf.cpp index 90412c5c1..e360e2a2e 100644 --- a/src/modules/m_deaf.cpp +++ b/src/modules/m_deaf.cpp @@ -89,50 +89,58 @@ class ModuleDeaf : public Module ModResult OnUserPreMessage(User* user, const MessageTarget& target, MessageDetails& details) CXX11_OVERRIDE { - if (target.type == MessageTarget::TYPE_CHANNEL) + switch (target.type) { - Channel* chan = target.Get(); - bool is_bypasschar = (deaf_bypasschars.find(details.text[0]) != std::string::npos); - bool is_bypasschar_uline = (deaf_bypasschars_uline.find(details.text[0]) != std::string::npos); - - // If we have no bypasschars_uline in config, and this is a bypasschar (regular) - // Then it is obviously going to get through +d, no exemption list required - if (deaf_bypasschars_uline.empty() && is_bypasschar) - return MOD_RES_PASSTHRU; - // If it matches both bypasschar and bypasschar_uline, it will get through. - if (is_bypasschar && is_bypasschar_uline) - return MOD_RES_PASSTHRU; - - const Channel::MemberMap& ulist = chan->GetUsers(); - for (Channel::MemberMap::const_iterator i = ulist.begin(); i != ulist.end(); ++i) + case MessageTarget::TYPE_CHANNEL: { - // not +d - if (!i->first->IsModeSet(deafmode)) - continue; - - bool is_a_uline = i->first->server->IsULine(); - // matched a U-line only bypass - if (is_bypasschar_uline && is_a_uline) - continue; - // matched a regular bypass - if (is_bypasschar && !is_a_uline) - continue; - - // don't deliver message! - details.exemptions.insert(i->first); + Channel* chan = target.Get(); + bool is_bypasschar = (deaf_bypasschars.find(details.text[0]) != std::string::npos); + bool is_bypasschar_uline = (deaf_bypasschars_uline.find(details.text[0]) != std::string::npos); + + // If we have no bypasschars_uline in config, and this is a bypasschar (regular) + // Then it is obviously going to get through +d, no exemption list required + if (deaf_bypasschars_uline.empty() && is_bypasschar) + return MOD_RES_PASSTHRU; + // If it matches both bypasschar and bypasschar_uline, it will get through. + if (is_bypasschar && is_bypasschar_uline) + return MOD_RES_PASSTHRU; + + const Channel::MemberMap& ulist = chan->GetUsers(); + for (Channel::MemberMap::const_iterator i = ulist.begin(); i != ulist.end(); ++i) + { + // not +d + if (!i->first->IsModeSet(deafmode)) + continue; + + bool is_a_uline = i->first->server->IsULine(); + // matched a U-line only bypass + if (is_bypasschar_uline && is_a_uline) + continue; + // matched a regular bypass + if (is_bypasschar && !is_a_uline) + continue; + + // don't deliver message! + details.exemptions.insert(i->first); + } + break; } - } - else if (target.type == MessageTarget::TYPE_USER) - { - User* targ = target.Get(); - if (!targ->IsModeSet(privdeafmode)) - return MOD_RES_PASSTHRU; + case MessageTarget::TYPE_USER: + { + User* targ = target.Get(); + if (!targ->IsModeSet(privdeafmode)) + return MOD_RES_PASSTHRU; - if (!privdeafuline && user->server->IsULine()) - return MOD_RES_DENY; + if (!privdeafuline && user->server->IsULine()) + return MOD_RES_DENY; - if (!user->HasPrivPermission("users/ignore-privdeaf")) - return MOD_RES_DENY; + if (!user->HasPrivPermission("users/ignore-privdeaf")) + return MOD_RES_DENY; + + break; + } + case MessageTarget::TYPE_SERVER: + break; } return MOD_RES_PASSTHRU; -- cgit v1.2.3