Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

modules.h

Go to the documentation of this file.
00001 /*
00002 
00003 
00004 
00005 */
00006 
00007 
00008 #ifndef __PLUGIN_H
00009 #define __PLUGIN_H
00010 
00011 #define DEBUG 10
00012 #define VERBOSE 20
00013 #define DEFAULT 30
00014 #define SPARSE 40
00015 #define NONE 50
00016 
00017 #define MT_CHANNEL 1
00018 #define MT_CLIENT 2
00019 #define MT_SERVER 3
00020 
00021 #include "dynamic.h"
00022 #include "base.h"
00023 #include "ctables.h"
00024 #include <string>
00025 #include <deque>
00026 #include <sstream>
00027 
00030 typedef std::deque<std::string> file_cache;
00031 typedef file_cache string_list;
00032 
00033 // This #define allows us to call a method in all
00034 // loaded modules in a readable simple way, e.g.:
00035 // 'FOREACH_MOD OnConnect(user);'
00036 
00037 #define FOREACH_MOD for (int i = 0; i <= MODCOUNT; i++) modules[i]->
00038 
00039 // This define is similar to the one above but returns a result in MOD_RESULT.
00040 // The first module to return a nonzero result is the value to be accepted,
00041 // and any modules after are ignored.
00042 
00043 // *********************************************************************************************
00044 
00045 #define FOREACH_RESULT(x) { MOD_RESULT = 0; \
00046                         for (int i = 0; i <= MODCOUNT; i++) { \
00047                         int res = modules[i]->x ; \
00048                         if (res) { \
00049                                 MOD_RESULT = res; \
00050                                 break; \
00051                         } \
00052                 } \
00053    } 
00054    
00055 // *********************************************************************************************
00056 
00057 extern void createcommand(char* cmd, handlerfunc f, char flags, int minparams);
00058 extern void server_mode(char **parameters, int pcnt, userrec *user);
00059 
00060 // class Version holds the version information of a Module, returned
00061 // by Module::GetVersion (thanks RD)
00062 
00067 class Version : public classbase
00068 {
00069  public:
00070          const int Major, Minor, Revision, Build;
00071          Version(int major, int minor, int revision, int build);
00072 };
00073 
00079 class Admin : public classbase
00080 {
00081  public:
00082          const std::string Name, Email, Nick;
00083          Admin(std::string name, std::string email, std::string nick);
00084 };
00085 
00091 class Module : public classbase
00092 {
00093  public:
00094 
00098         Module();
00099 
00103         virtual ~Module();
00104 
00109         virtual Version GetVersion();
00110 
00114         virtual void OnUserConnect(userrec* user);
00115 
00119         virtual void OnUserQuit(userrec* user);
00120 
00125         virtual void OnUserJoin(userrec* user, chanrec* channel);
00126 
00131         virtual void OnUserPart(userrec* user, chanrec* channel);
00132 
00139         virtual void OnPacketTransmit(char *p);
00140 
00148         virtual void OnPacketReceive(char *p);
00149 
00155         virtual void OnRehash();
00156 
00163         virtual void OnServerRaw(std::string &raw, bool inbound);
00164 
00174         virtual bool OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list &params);
00175         
00188         virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname);
00189         
00190         
00195         virtual void OnOper(userrec* user);
00196         
00205         virtual void OnInfo(userrec* user);
00206         
00211         virtual void OnWhois(userrec* source, userrec* dest);
00212         
00221         virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string text);
00222 
00231         virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string text);
00232 };
00233 
00234 
00240 class Server : public classbase
00241 {
00242  public:
00246         Server();
00250         virtual ~Server();
00251 
00255         virtual void SendOpers(std::string s);
00260         virtual void Log(int level, std::string s);
00265         virtual void Send(int Socket, std::string s);
00270         virtual void SendServ(int Socket, std::string s);
00275         virtual void SendFrom(int Socket, userrec* User, std::string s);
00290         virtual void SendTo(userrec* Source, userrec* Dest, std::string s);
00297         virtual void SendChannel(userrec* User, chanrec* Channel, std::string s,bool IncludeSender);
00302         virtual bool CommonChannels(userrec* u1, userrec* u2);
00310         virtual void SendCommon(userrec* User, std::string text,bool IncludeSender);
00315         virtual void SendWallops(userrec* User, std::string text);
00316 
00320         virtual bool IsNick(std::string nick);
00324         virtual int CountUsers(chanrec* c);
00328         virtual userrec* FindNick(std::string nick);
00332         virtual chanrec* FindChannel(std::string channel);
00337         virtual std::string ChanMode(userrec* User, chanrec* Chan);
00340         virtual std::string GetServerName();
00343         virtual std::string GetNetworkName();
00349         virtual Admin GetAdmin();
00368         virtual bool AddExtendedMode(char modechar, int type, bool requires_oper, int params_when_on, int params_when_off);
00369 
00384         virtual void AddCommand(char* cmd, handlerfunc f, char flags, int minparams);
00385          
00407         virtual void SendMode(char **parameters, int pcnt, userrec *user);
00408         
00421         virtual void SendToModeMask(std::string modes, int flags, std::string text);
00422 
00428         virtual chanrec* JoinUserToChannel(userrec* user, std::string cname, std::string key);
00429         
00435         virtual chanrec* PartUserFromChannel(userrec* user, std::string cname, std::string reason);
00436         
00442         virtual void ChangeUserNick(userrec* user, std::string nickname);
00443         
00454         virtual void QuitUser(userrec* user, std::string reason);
00455         
00460         virtual bool MatchText(std::string sliteral, std::string spattern);
00461 };
00462 
00469 class ConfigReader : public classbase
00470 {
00471   protected:
00477         std::stringstream *cache;
00480         bool error;
00481         
00482   public:
00487         ConfigReader();                 // default constructor reads ircd.conf
00491         ConfigReader(std::string filename);     // read a module-specific config
00495         ~ConfigReader();
00500         std::string ReadValue(std::string tag, std::string name, int index);
00507         int Enumerate(std::string tag);
00512         bool Verify();
00513 
00519         int EnumerateValues(std::string tag, int index);
00520 };
00521 
00522 
00523 
00529 class FileReader : public classbase
00530 {
00531  file_cache fc;
00532  public:
00537          FileReader();
00538 
00544          FileReader(std::string filename);
00545 
00549          ~FileReader();
00550 
00556          void LoadFile(std::string filename);
00557 
00561          bool Exists();
00562          
00567          std::string GetLine(int x);
00568 
00574          int FileSize();
00575 };
00576 
00577 
00584 class ModuleFactory : public classbase
00585 {
00586  public:
00587         ModuleFactory() { }
00588         virtual ~ModuleFactory() { }
00593         virtual Module * CreateModule() = 0;
00594 };
00595 
00596 
00597 typedef DLLFactory<ModuleFactory> ircd_module;
00598 
00599 #endif

Generated on Thu Apr 8 19:12:27 2004 for InspIRCd by doxygen1.3-rc3