MODEACTION_ALLOW = 1 /* Allow the mode */
};
+enum ModeMasks {
+ MASK_USER = 128, /* A user mode */
+ MASK_CHANNEL = 0 /* A channel mode */
+};
+
class ModeHandler
{
char mode;
virtual void AfterMode(userrec* source, userrec* dest, chanrec* channel, const std::string ¶meter, 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[64];
+ 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);
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