]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/mode.h
Remove an extern, partly because it's unused, partly because it then gets shadowed...
[user/henk/code/inspircd.git] / include / mode.h
index 633350ead2dfb2d436bf5813c5412b1dee6369a4..d09d62439fc342a4121c6757dad3732d93ea6ad6 100644 (file)
@@ -1,3 +1,19 @@
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
+ *                       E-mail:
+ *                <brain@chatspike.net>
+ *               <Craig@chatspike.net>
+ *     
+ * Written by Craig Edwards, Craig McLure, and others.
+ * This program is free but copyrighted software; see
+ *            the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
 #ifndef __MODE_H
 #define __MODE_H
 
 #include <vector>
 #include "users.h"
 #include "channels.h"
+#include "ctables.h"
+
+enum UserModeBits {
+       UM_INVISIBLE = 1,
+       UM_SERVERNOTICE = 2,
+       UM_WALLOPS = 4
+};
+
+enum ModeType {
+       MODETYPE_USER = 0,
+       MODETYPE_CHANNEL = 1
+};
+
+enum ModeAction {
+       MODEACTION_DENY = 0, /* Drop the mode change, AND a parameter if its a parameterized mode */
+       MODEACTION_ALLOW = 1 /* Allow the mode */
+};
+
+class ModeHandler
+{
+       char mode;
+       int n_params_on;
+       int n_params_off;
+       bool list;
+       ModeType m_type;
+       bool oper;
+
+ public:
+       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(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 */
+       virtual void DisplayList(userrec* user, chanrec* channel);
+       virtual bool CheckTimeStamp(time_t theirs, time_t ours, const std::string &their_param, const std::string &our_param, chanrec* channel);
+};
+
+class ModeWatcher
+{
+       char mode;
+       ModeType m_type;
+
+ public:
+       ModeWatcher(char modeletter, ModeType type);
+       virtual ~ModeWatcher();
+
+       char GetModeChar();
+       ModeType GetModeType();
+
+       virtual bool BeforeMode(userrec* source, userrec* dest, chanrec* channel, std::string &parameter, bool adding, ModeType type); /* Can change the mode parameter */
+       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.
+        */
+       ModeHandler* modehandlers[64];
+       /**
+        * Mode watcher classes
+        */
+       std::vector<ModeWatcher*> modewatchers[64];
+       
+       char* GiveOps(userrec *user,char *dest,chanrec *chan,int status);
+       char* GiveHops(userrec *user,char *dest,chanrec *chan,int status);
+       char* GiveVoice(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:
+       void Process(char **parameters, int pcnt, userrec *user, bool servermode);
 
-int give_ops(userrec *user,char *dest,chanrec *chan,int status);
-int give_hops(userrec *user,char *dest,chanrec *chan,int status);
-int give_voice(userrec *user,char *dest,chanrec *chan,int status);
-int take_ops(userrec *user,char *dest,chanrec *chan,int status);
-int take_hops(userrec *user,char *dest,chanrec *chan,int status);
-int take_voice(userrec *user,char *dest,chanrec *chan,int status);
-int add_ban(userrec *user,char *dest,chanrec *chan,int status);
-int take_ban(userrec *user,char *dest,chanrec *chan,int status);
-void process_modes(char **parameters,userrec* user,chanrec *chan,int status, int pcnt, bool servermode, bool silent, bool local);
-bool allowed_umode(char umode, char* sourcemodes,bool adding);
-bool process_module_umode(char umode, userrec* source, void* dest, bool adding);
-void handle_mode(char **parameters, int pcnt, userrec *user);
-void server_mode(char **parameters, int pcnt, userrec *user);
-void merge_mode(char **parameters, int pcnt);
-void merge_mode2(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);
+};
 
+class cmd_mode : public command_t
+{
+ public:
+       cmd_mode () : command_t("MODE",0,1) { }
+       void Handle(char **parameters, int pcnt, userrec *user);
+};
 
 #endif