]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_cap.h
m_connectban Switch to OnSetUserIP hook to handle cgiirc users properly, ignore e...
[user/henk/code/inspircd.git] / src / modules / m_cap.h
index 9ce7f95012c602a2bb6e51cba14d9661dd186172..409671f482aeb5301cf3e62e3c6c75979424b917 100644 (file)
@@ -46,7 +46,7 @@ class GenericCap
        const std::string cap;
        GenericCap(Module* parent, const std::string &Cap) : ext("cap_" + Cap, parent), cap(Cap)
        {
-               ServerInstance->Extensions.Register(&ext);
+               ServerInstance->Modules->AddService(ext);
        }
 
        void HandleEvent(Event& ev)
@@ -57,13 +57,19 @@ class GenericCap
                CapEvent *data = static_cast<CapEvent*>(&ev);
                if (data->type == CapEvent::CAPEVENT_REQ)
                {
-                       std::vector<std::string>::iterator it;
-                       if ((it = std::find(data->wanted.begin(), data->wanted.end(), cap)) != data->wanted.end())
+                       for (std::vector<std::string>::iterator it = data->wanted.begin(); it != data->wanted.end(); ++it)
                        {
-                               // 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, 1);
+                               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)