From 0c750c060839f9018ca129bd7456184792ea0dc0 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sun, 21 Jun 2020 04:25:45 +0100 Subject: Move channel logic from InspIRCd to the new ChannelManager class. --- src/channelmanager.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/channelmanager.cpp (limited to 'src/channelmanager.cpp') diff --git a/src/channelmanager.cpp b/src/channelmanager.cpp new file mode 100644 index 000000000..f8bd9ddb4 --- /dev/null +++ b/src/channelmanager.cpp @@ -0,0 +1,52 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2020 Sadie Powell + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "inspircd.h" + +bool ChannelManager::DefaultIsChannel(const std::string& channel) +{ + if (channel.empty() || channel.length() > ServerInstance->Config->Limits.MaxChannel) + return false; + + if (channel[0] != '#') + return false; + + for (const auto& chr : insp::iterator_range(channel.begin() + 1, channel.end())) + { + switch (chr) + { + case 0x07: // BELL + case 0x20: // SPACE + case 0x2C: // COMMA + return false; + } + } + + return true; +} + +Channel* ChannelManager::Find(const std::string& channel) +{ + ChannelMap::iterator iter = channels.find(channel); + if (iter == channels.end()) + return nullptr; + + return iter->second; +} + -- cgit v1.3.1-10-gc9f91