]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_cap.cpp
Initial support for listening on UNIX socket endpoints.
[user/henk/code/inspircd.git] / src / modules / m_cap.cpp
index e6e01570d83153a0aff3410041f9cca2a1a82260..1465f8a383436b6a4f25ce526e2a24b802fe2c7b 100644 (file)
 #include "modules/reload.h"
 #include "modules/cap.h"
 
+enum
+{
+       // From IRCv3 capability-negotiation-3.1.
+       ERR_INVALIDCAPCMD = 410
+};
+
 namespace Cap
 {
        class ManagerImpl;
@@ -55,7 +61,8 @@ class Cap::ManagerImpl : public Cap::Manager, public ReloadModule::EventListener
 
        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);
@@ -398,7 +405,7 @@ class CommandCap : public SplitCommand
                }
                else
                {
-                       user->WriteNumeric(ERR_INVALIDCAPSUBCOMMAND, subcommand, "Invalid CAP subcommand");
+                       user->WriteNumeric(ERR_INVALIDCAPCMD, subcommand.empty() ? "*" : subcommand, "Invalid CAP subcommand");
                        return CMD_FAILURE;
                }