]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_cap.h
Fix CAP REQ to be atomic like the standard dictates.
[user/henk/code/inspircd.git] / src / modules / m_cap.h
index ce7e7f3943c9611954aa94a0776e034a0b3f3a65..23cf8cf69a748ef9a373340c1f3e5745b5340e2f 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef M_CAP_H
 #define M_CAP_H
 
+class GenericCap;
+
 class CapEvent : public Event
 {
  public:
@@ -35,6 +37,7 @@ class CapEvent : public Event
        CapEventType type;
        std::vector<std::string> wanted;
        std::vector<std::string> ack;
+       std::vector<std::pair<GenericCap*, int> > changed; // HACK: clean this up before 2.2
        User* user;
        CapEvent(Module* sender, User* u, CapEventType capevtype) : Event(sender, "cap_request"), type(capevtype), user(u) {}
 };
@@ -46,7 +49,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)
@@ -67,7 +70,7 @@ class GenericCap
                                        // 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);
+                                       data->changed.push_back(std::make_pair(this, ext.set(data->user, enablecap ? 1 : 0)));
                                        break;
                                }
                        }