-/* +------------------------------------+\r * | Inspire Internet Relay Chat Daemon |\r * +------------------------------------+\r *\r * InspIRCd: (C) 2002-2007 InspIRCd Development Team\r * See: http://www.inspircd.org/wiki/index.php/Credits\r *\r * This program is free but copyrighted software; see\r * the file COPYING for details.\r *\r * ---------------------------------------------------\r */\r\r#include "inspircd.h"\r#include "mode.h"\r#include "channels.h"\r#include "users.h"\r#include "modes/cmode_l.h"\r\rModeChannelLimit::ModeChannelLimit(InspIRCd* Instance) : ModeHandler(Instance, 'l', 1, 0, false, MODETYPE_CHANNEL, false)\r{\r}\r\rModePair ModeChannelLimit::ModeSet(userrec* source, userrec* dest, chanrec* channel, const std::string ¶meter)\r{\r if (channel->limit)\r {\r return std::make_pair(true, ConvToStr(channel->limit));\r }\r else\r {\r return std::make_pair(false, parameter);\r }\r}\r\rbool ModeChannelLimit::CheckTimeStamp(time_t theirs, time_t ours, const std::string &their_param, const std::string &our_param, chanrec* channel)\r{\r /* When TS is equal, the higher channel limit wins */\r return (atoi(their_param.c_str()) < atoi(our_param.c_str()));\r}\r\rModeAction ModeChannelLimit::OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding)\r{\r if (adding)\r {\r /* Setting a new limit, sanity check */\r long limit = atoi(parameter.c_str());\r\r /* Wrap low values at 32768 */\r if (limit < 0)\r limit = 0x7FFF;\r\r /* If the new limit is the same as the old limit,\r * and the old limit isnt 0, disallow */\r if ((limit == channel->limit) && (channel->limit > 0))\r {\r parameter = "";\r return MODEACTION_DENY;\r }\r\r /* They must have specified an invalid number.\r * Dont allow +l 0.\r */\r if (!limit)\r {\r parameter = "";\r return MODEACTION_DENY;\r }\r\r parameter = ConvToStr(limit);\r\r /* Set new limit */\r channel->limit = limit;\r channel->modes[CM_LIMIT] = 1;\r\r return MODEACTION_ALLOW;\r }\r else\r {\r /* Check if theres a limit here to remove.\r * If there isnt, dont allow the -l\r */\r if (!channel->limit)\r {\r parameter = "";\r return MODEACTION_DENY;\r }\r\r /* Removing old limit, no checks here */\r channel->limit = 0;\r channel->modes[CM_LIMIT] = 0;\r\r return MODEACTION_ALLOW;\r }\r\r return MODEACTION_DENY;\r}\r
\ No newline at end of file
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
+ * Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ * Copyright (C) 2006 Craig Edwards <craigedwards@brainbox.cc>
+ *
+ * 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"
+#include "mode.h"
+#include "channels.h"
+#include "users.h"
+#include "modes/cmode_l.h"
+
+ModeChannelLimit::ModeChannelLimit() : ParamChannelModeHandler(NULL, "limit", 'l')
+{
+}
+
+bool ModeChannelLimit::ResolveModeConflict(std::string &their_param, const std::string &our_param, Channel*)
+{
+ /* When TS is equal, the higher channel limit wins */
+ return (atoi(their_param.c_str()) < atoi(our_param.c_str()));
+}
+
+bool ModeChannelLimit::ParamValidate(std::string ¶meter)
+{
+ int limit = atoi(parameter.c_str());
+
+ if (limit < 0)
+ return false;
+
+ parameter = ConvToStr(limit);
+ return true;
+}