X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmode.h;h=1c3fcfe7746f5f0f44a2294dee5226a4bef24b90;hb=8f9d0a68cd77b6a78eccfa7df9c1045d453ce581;hp=27b06087db30ff834fa8f104747822d345811e7a;hpb=3c272bcc1f53c2a8ebbf5b399118d33b5640cf9b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/mode.h b/include/mode.h index 27b06087d..1c3fcfe77 100644 --- a/include/mode.h +++ b/include/mode.h @@ -45,6 +45,11 @@ 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; @@ -85,18 +90,22 @@ class ModeWatcher virtual void AfterMode(userrec* source, userrec* dest, chanrec* channel, const std::string ¶meter, bool adding, ModeType type); }; +typedef std::vector::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 modewatchers[64]; + std::vector modewatchers[256]; char* GiveOps(userrec *user,char *dest,chanrec *chan,int status); char* GiveHops(userrec *user,char *dest,chanrec *chan,int status); @@ -104,19 +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: + ModeParser(); + bool AddMode(ModeHandler* mh, unsigned const char modeletter); void Process(char **parameters, int pcnt, userrec *user, bool servermode); - 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); + //void ServerMode(char **parameters, int pcnt, userrec *user); }; class cmd_mode : public command_t