#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);
}
else
{
- user->WriteNumeric(ERR_INVALIDCAPSUBCOMMAND, subcommand, "Invalid CAP subcommand");
+ user->WriteNumeric(ERR_INVALIDCAPCMD, subcommand.empty() ? "*" : subcommand, "Invalid CAP subcommand");
return CMD_FAILURE;
}