#include "modules/reload.h"
#include "modules/cap.h"
+enum
+{
+ // From IRCv3 capability-negotiation-3.1.
+ ERR_INVALIDCAPCMD = 410
+};
+
namespace Cap
{
class ManagerImpl;
static bool CanRequest(LocalUser* user, Ext usercaps, Capability* cap, bool adding)
{
- if ((usercaps & cap->GetMask()) == adding)
+ const bool hascap = ((usercaps & cap->GetMask()) != 0);
+ if (hascap == adding)
return true;
return cap->OnRequest(user, adding);
cap->set(user, false);
}
- ServerInstance->Modules.DelReferent(cap);
+ ServerInstance->Modules.DelReferent(cap);
cap->Unregister();
caps.erase(cap->GetName());
}
}
else
{
- user->WriteNumeric(ERR_INVALIDCAPSUBCOMMAND, "%s :Invalid CAP subcommand", subcommand.c_str());
+ user->WriteNumeric(ERR_INVALIDCAPCMD, subcommand.empty() ? "*" : subcommand, "Invalid CAP subcommand");
return CMD_FAILURE;
}