summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules/cap.h99
-rw-r--r--src/modules/m_cap.cpp148
2 files changed, 0 insertions, 247 deletions
diff --git a/include/modules/cap.h b/include/modules/cap.h
deleted file mode 100644
index b1bfbc3f9..000000000
--- a/include/modules/cap.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * InspIRCd -- Internet Relay Chat Daemon
- *
- * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
- * Copyright (C) 2008 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/>.
- */
-
-
-#pragma once
-
-#include "event.h"
-
-class CapEvent
-{
- public:
- enum CapEventType
- {
- CAPEVENT_REQ,
- CAPEVENT_LS,
- CAPEVENT_LIST,
- CAPEVENT_CLEAR
- };
-
- CapEventType type;
- std::vector<std::string> wanted;
- std::vector<std::string> ack;
- User* user;
- CapEvent(Module* sender, User* u, CapEventType capevtype) : type(capevtype), user(u) {}
-};
-
-class GenericCap : public Events::ModuleEventListener
-{
- bool active;
-
- public:
- LocalIntExt ext;
- const std::string cap;
- GenericCap(Module* parent, const std::string& Cap)
- : Events::ModuleEventListener(parent, "event/cap")
- , active(true)
- , ext("cap_" + Cap, ExtensionItem::EXT_USER, parent)
- , cap(Cap)
- {
- }
-
- void OnCapEvent(CapEvent& ev)
- {
- if (!active)
- return;
-
- CapEvent *data = static_cast<CapEvent*>(&ev);
- if (data->type == CapEvent::CAPEVENT_REQ)
- {
- for (std::vector<std::string>::iterator it = data->wanted.begin(); it != data->wanted.end(); ++it)
- {
- if (it->empty())
- continue;
- bool enablecap = ((*it)[0] != '-');
- if (((enablecap) && (*it == cap)) || (*it == "-" + cap))
- {
- // we can handle this, so ACK it, and remove it from the wanted list
- data->ack.push_back(*it);
- data->wanted.erase(it);
- ext.set(data->user, enablecap ? 1 : 0);
- break;
- }
- }
- }
- else if (data->type == CapEvent::CAPEVENT_LS)
- {
- data->wanted.push_back(cap);
- }
- else if (data->type == CapEvent::CAPEVENT_LIST)
- {
- if (ext.get(data->user))
- data->wanted.push_back(cap);
- }
- else if (data->type == CapEvent::CAPEVENT_CLEAR)
- {
- data->ack.push_back("-" + cap);
- ext.set(data->user, 0);
- }
- }
-
- void SetActive(bool newstate) { active = newstate; }
- bool IsActive() const { return active; }
-};
diff --git a/src/modules/m_cap.cpp b/src/modules/m_cap.cpp
deleted file mode 100644
index 2c2178a18..000000000
--- a/src/modules/m_cap.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * InspIRCd -- Internet Relay Chat Daemon
- *
- * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
- * Copyright (C) 2008 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 "modules/cap.h"
-
-/*
-CAP LS
-:alfred.staticbox.net CAP * LS :multi-prefix sasl
-CAP REQ :multi-prefix
-:alfred.staticbox.net CAP * ACK :multi-prefix
-CAP CLEAR
-:alfred.staticbox.net CAP * ACK :-multi-prefix
-CAP REQ :multi-prefix
-:alfred.staticbox.net CAP * ACK :multi-prefix
-CAP LIST
-:alfred.staticbox.net CAP * LIST :multi-prefix
-CAP END
-*/
-
-/** Handle /CAP
- */
-class CommandCAP : public Command
-{
- Events::ModuleEventProvider capevprov;
-
- public:
- LocalIntExt reghold;
- CommandCAP (Module* mod) : Command(mod, "CAP", 1),
- capevprov(mod, "event/cap"),
- reghold("CAP_REGHOLD", ExtensionItem::EXT_USER, mod)
- {
- works_before_reg = true;
- }
-
- CmdResult Handle (const std::vector<std::string> &parameters, User *user)
- {
- std::string subcommand(parameters[0].length(), ' ');
- std::transform(parameters[0].begin(), parameters[0].end(), subcommand.begin(), ::toupper);
-
- if (subcommand == "REQ")
- {
- if (parameters.size() < 2)
- return CMD_FAILURE;
-
- CapEvent Data(creator, user, CapEvent::CAPEVENT_REQ);
-
- // tokenize the input into a nice list of requested caps
- std::string cap_;
- irc::spacesepstream cap_stream(parameters[1]);
-
- while (cap_stream.GetToken(cap_))
- {
- std::transform(cap_.begin(), cap_.end(), cap_.begin(), ::tolower);
- Data.wanted.push_back(cap_);
- }
-
- reghold.set(user, 1);
- FOREACH_MOD_CUSTOM(capevprov, GenericCap, OnCapEvent, (Data));
-
- if (Data.ack.size() > 0)
- {
- std::string AckResult = irc::stringjoiner(Data.ack);
- user->WriteCommand("CAP", "ACK :" + AckResult);
- }
-
- if (Data.wanted.size() > 0)
- {
- std::string NakResult = irc::stringjoiner(Data.wanted);
- user->WriteCommand("CAP", "NAK :" + NakResult);
- }
- }
- else if (subcommand == "END")
- {
- reghold.set(user, 0);
- }
- else if ((subcommand == "LS") || (subcommand == "LIST"))
- {
- CapEvent Data(creator, user, subcommand == "LS" ? CapEvent::CAPEVENT_LS : CapEvent::CAPEVENT_LIST);
-
- reghold.set(user, 1);
- FOREACH_MOD_CUSTOM(capevprov, GenericCap, OnCapEvent, (Data));
-
- std::string Result = irc::stringjoiner(Data.wanted);
- user->WriteCommand("CAP", subcommand + " :" + Result);
- }
- else if (subcommand == "CLEAR")
- {
- CapEvent Data(creator, user, CapEvent::CAPEVENT_CLEAR);
-
- reghold.set(user, 1);
- FOREACH_MOD_CUSTOM(capevprov, GenericCap, OnCapEvent, (Data));
-
- std::string Result = irc::stringjoiner(Data.ack);
- user->WriteCommand("CAP", "ACK :" + Result);
- }
- else
- {
- user->WriteNumeric(ERR_INVALIDCAPSUBCOMMAND, "%s :Invalid CAP subcommand", subcommand.c_str());
- return CMD_FAILURE;
- }
-
- return CMD_SUCCESS;
- }
-};
-
-class ModuleCAP : public Module
-{
- CommandCAP cmd;
- public:
- ModuleCAP()
- : cmd(this)
- {
- }
-
- ModResult OnCheckReady(LocalUser* user) CXX11_OVERRIDE
- {
- /* Users in CAP state get held until CAP END */
- if (cmd.reghold.get(user))
- return MOD_RES_DENY;
-
- return MOD_RES_PASSTHRU;
- }
-
- Version GetVersion() CXX11_OVERRIDE
- {
- return Version("Client CAP extension support", VF_VENDOR);
- }
-};
-
-MODULE_INIT(ModuleCAP)