aboutsummaryrefslogtreecommitdiffstats
path: root/src/channelmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/channelmanager.cpp')
-rw-r--r--src/channelmanager.cpp52
1 files changed, 52 insertions, 0 deletions
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 <sadie@witchery.services>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+
+#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;
+}
+