]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/mode.h
Add mode +b to active list
[user/henk/code/inspircd.git] / include / mode.h
index 70c02a50370e02a50ca3038ab6d68cb861161a17..1c3fcfe7746f5f0f44a2294dee5226a4bef24b90 100644 (file)
@@ -45,22 +45,28 @@ enum ModeAction {
        MODEACTION_ALLOW = 1 /* Allow the mode */
 };
 
+enum ModeMasks {
+       MASK_USER = 128,        /* A user mode */
+       MASK_CHANNEL = 0        /* A channel mode */
+};
+
 class ModeHandler
 {
        char mode;
-       int n_params;
+       int n_params_on;
+       int n_params_off;
        bool list;
        ModeType m_type;
        bool oper;
 
  public:
-       ModeHandler(char modeletter, int parameters, bool listmode, ModeType type, bool operonly);
+       ModeHandler(char modeletter, int parameters_on, int parameters_off, bool listmode, ModeType type, bool operonly);
        virtual ~ModeHandler();
 
        bool IsListMode();
        ModeType GetModeType();
        bool NeedsOper();
-       int GetNumParams();
+       int GetNumParams(bool adding);
        char GetModeChar();
 
        virtual ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string &parameter, bool adding); /* Can change the mode parameter as its a ref */
@@ -84,18 +90,22 @@ class ModeWatcher
        virtual void AfterMode(userrec* source, userrec* dest, chanrec* channel, const std::string &parameter, bool adding, ModeType type);
 };
 
+typedef std::vector<ModeWatcher*>::iterator ModeWatchIter;
+
 class ModeParser
 {
  private:
        /**
         * Mode handlers for each mode, to access a handler subtract
         * 65 from the ascii value of the mode letter.
+        * The upper bit of the value indicates if its a usermode
+        * or a channel mode, so we have 255 of them not 64.
         */
-       ModeHandler* modehandlers[64];
+       ModeHandler* modehandlers[256];
        /**
         * Mode watcher classes
         */
-       std::vector<ModeWatcher*> modewatchers[65];
+       std::vector<ModeWatcher*> modewatchers[256];
        
        char* GiveOps(userrec *user,char *dest,chanrec *chan,int status);
        char* GiveHops(userrec *user,char *dest,chanrec *chan,int status);
@@ -103,18 +113,15 @@ class ModeParser
        char* TakeOps(userrec *user,char *dest,chanrec *chan,int status);
        char* TakeHops(userrec *user,char *dest,chanrec *chan,int status);
        char* TakeVoice(userrec *user,char *dest,chanrec *chan,int status);
-       char* AddBan(userrec *user,char *dest,chanrec *chan,int status);
-       char* TakeBan(userrec *user,char *dest,chanrec *chan,int status);
        userrec* SanityChecks(userrec *user,char *dest,chanrec *chan,int status);
        char* Grant(userrec *d,chanrec *chan,int MASK);
        char* Revoke(userrec *d,chanrec *chan,int MASK);
  public:
-       void Process(char **parameters, int pcnt, userrec *user);
-       std::string CompressModes(std::string modes,bool channelmodes);
-       void ProcessModes(char **parameters,userrec* user,chanrec *chan,int status, int pcnt, bool servermode, bool silent, bool local);
-       bool AllowedUmode(char umode, char* sourcemodes,bool adding,bool serveroverride);
-       bool ProcessModuleUmode(char umode, userrec* source, void* dest, bool adding);
-       void ServerMode(char **parameters, int pcnt, userrec *user);
+       ModeParser();
+       bool AddMode(ModeHandler* mh, unsigned const char modeletter);
+       void Process(char **parameters, int pcnt, userrec *user, bool servermode);
+
+       //void ServerMode(char **parameters, int pcnt, userrec *user);
 };
 
 class cmd_mode : public command_t