X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmodules.h;h=ff52cd600eba13df60f2e8bfa9d593152b439709;hb=6b27fae945e5310a76cb7fa2a5ff0059cd436ac9;hp=982d83754a12e7c9127a8c8d98699524e091ee1f;hpb=e2af2347fc035d702e45f12e772223a8d578410d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/modules.h b/include/modules.h index 982d83754..ff52cd600 100644 --- a/include/modules.h +++ b/include/modules.h @@ -30,6 +30,7 @@ class XLine; /** Used to define a set of behavior bits for a module */ enum ModuleFlags { + VF_NONE = 0, // module is not special at all VF_STATIC = 1, // module is static, cannot be /unloadmodule'd VF_VENDOR = 2, // module is a vendor module (came in the original tarball, not 3rd party) VF_SERVICEPROVIDER = 4, // module provides a service to other modules (can be a dependency) @@ -156,40 +157,16 @@ typedef std::map > interfacelist; } \ } while (0); -/** - * This #define allows us to call a method in all - * loaded modules in a readable simple way and pass - * an instance pointer to the macro. e.g.: - * 'FOREACH_MOD_I(Instance, OnConnect, OnConnect(user));' - */ -#define FOREACH_MOD_I(z,y,x) do { \ - EventHandlerIter safei; \ - for (EventHandlerIter _i = z->Modules->EventHandlers[y].begin(); _i != z->Modules->EventHandlers[y].end(); ) \ - { \ - safei = _i; \ - ++safei; \ - try \ - { \ - (*_i)->x ; \ - } \ - catch (CoreException& modexcept) \ - { \ - z->Logs->Log("MODULE",DEFAULT,"Exception caught: %s",modexcept.GetReason()); \ - } \ - _i = safei; \ - } \ -} while (0); - /** * Custom module result handling loop. This is a paired macro, and should only * be used with while_each_hook. * * See src/channels.cpp for an example of use. */ -#define DO_EACH_HOOK(z,n,v,args) \ +#define DO_EACH_HOOK(n,v,args) \ do { \ - EventHandlerIter iter_ ## n = z->Modules->EventHandlers[I_ ## n].begin(); \ - while (iter_ ## n != z->Modules->EventHandlers[I_ ## n].end()) \ + EventHandlerIter iter_ ## n = ServerInstance->Modules->EventHandlers[I_ ## n].begin(); \ + while (iter_ ## n != ServerInstance->Modules->EventHandlers[I_ ## n].end()) \ { \ Module* mod_ ## n = *iter_ ## n; \ iter_ ## n ++; \ @@ -197,11 +174,11 @@ do { \ { \ v = (mod_ ## n)->n args; -#define WHILE_EACH_HOOK(z,n) \ +#define WHILE_EACH_HOOK(n) \ } \ catch (CoreException& except_ ## n) \ { \ - z->Logs->Log("MODULE",DEFAULT,"Exception caught: %s", (except_ ## n).GetReason()); \ + ServerInstance->Logs->Log("MODULE",DEFAULT,"Exception caught: %s", (except_ ## n).GetReason()); \ (void) mod_ ## n; /* catch mismatched pairs */ \ } \ } \ @@ -212,16 +189,16 @@ do { \ * Runs the given hook until some module returns a useful result. * * Example: ModResult result; - * FIRST_MOD_RESULT(ServerInstance, OnUserPreNick, result, (user, newnick)) + * FIRST_MOD_RESULT(OnUserPreNick, result, (user, newnick)) */ -#define FIRST_MOD_RESULT(z,n,v,args) do { \ +#define FIRST_MOD_RESULT(n,v,args) do { \ v = MOD_RES_PASSTHRU; \ - DO_EACH_HOOK(z,n,v,args) \ + DO_EACH_HOOK(n,v,args) \ { \ if (v != MOD_RES_PASSTHRU) \ break; \ } \ - WHILE_EACH_HOOK(z,n); \ + WHILE_EACH_HOOK(n); \ } while (0) /** Represents a non-local user. @@ -239,7 +216,7 @@ do { \ /** Is a remote user */ #define IS_REMOTE(x) (x->GetFd() < 0) /** Is a fake user */ -#define IS_FAKE(x) (x->GetFd() == FD_FAKEUSER_NUMBER) +#define IS_SERVER(x) (x->GetFd() == FD_FAKEUSER_NUMBER) /** Is a module created user */ #define IS_MODULE_CREATED(x) (x->GetFd() == FD_MAGIC_NUMBER) /** Is an oper */ @@ -257,6 +234,9 @@ do { \ class CoreExport Version : public classbase { public: + /** Module description + */ + const std::string description; /** Version information. */ const std::string version; @@ -267,7 +247,7 @@ class CoreExport Version : public classbase /** Initialize version class */ - Version(const std::string &customver, int flags, + Version(const std::string &desc, int flags, int api_ver = API_VERSION, const std::string& src_rev = VERSION " r" REVISION); }; @@ -383,7 +363,7 @@ class CoreExport Event : public ModuleMessage * The return result of an Event::Send() will always be NULL as * no replies are expected. */ - char* Send(InspIRCd* ServerInstance); + char* Send(); }; /** Priority types which can be returned from Module::Prioritize() @@ -408,7 +388,7 @@ enum Implementation I_OnPostTopicChange, I_OnEvent, I_OnRequest, I_OnGlobalOper, I_OnPostConnect, I_OnAddBan, I_OnDelBan, I_OnChangeLocalUserGECOS, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete, I_OnPostOper, I_OnSyncNetwork, I_OnSetAway, I_OnUserList, I_OnPostCommand, I_OnPostJoin, - I_OnWhoisLine, I_OnBuildExemptList, I_OnGarbageCollect, I_OnBufferFlushed, + I_OnWhoisLine, I_OnBuildExemptList, I_OnGarbageCollect, I_OnText, I_OnPassCompare, I_OnRunTestSuite, I_OnNamesListItem, I_OnNumeric, I_OnHookIO, I_OnHostCycle, I_OnPreRehash, I_OnModuleRehash, I_OnSendWhoLine, I_OnChangeIdent, I_END @@ -433,7 +413,7 @@ class CoreExport Module : public Extensible * @param Me An instance of the InspIRCd class which will be saved into ServerInstance for your use * \exception ModuleException Throwing this class, or any class derived from ModuleException, causes loading of the module to abort. */ - Module(InspIRCd* Me = ServerInstance); + Module(); /** Default destructor. * destroys a module class @@ -448,7 +428,7 @@ class CoreExport Module : public Extensible * The method should return a Version object with its version information assigned via * Version::Version */ - virtual Version GetVersion(); + virtual Version GetVersion() = 0; /** Called when a user connects. * The details of the connecting user are available to you in the parameter User *user @@ -1325,15 +1305,6 @@ class CoreExport Module : public Extensible */ virtual void OnGarbageCollect(); - /** Called whenever a user's write buffer has been completely sent. - * This is called when the user's write buffer is completely empty, and - * there are no more pending bytes to be written and no pending write events - * in the socket engine's queue. This may be used to refill the buffer with - * data which is being spooled in a controlled manner, e.g. LIST lines. - * @param user The user who's buffer is now empty. - */ - virtual void OnBufferFlushed(User* user); - /** Add test suite hooks here. These are used for testing functionality of a module * via the --testsuite debugging parameter. */ @@ -1388,7 +1359,7 @@ class CoreExport ConfigReader : public classbase * This constructor initialises the ConfigReader class to read the inspircd.conf file * as specified when running ./configure. */ - ConfigReader(InspIRCd* Instance = ServerInstance); + ConfigReader(); /** Default destructor. * This method destroys the ConfigReader class. */ @@ -1487,14 +1458,14 @@ class CoreExport FileReader : public classbase * This method does not load any file into memory, you must use the LoadFile method * after constructing the class this way. */ - FileReader(InspIRCd* Instance = ServerInstance); + FileReader(); /** Secondary constructor. * This method initialises the class with a file loaded into it ready for GetLine and * and other methods to be called. If the file could not be loaded, FileReader::FileSize * returns 0. */ - FileReader(InspIRCd* Instance, const std::string &filename); + FileReader(const std::string &filename); /** Default destructor. * This deletes the memory allocated to the file. @@ -1823,9 +1794,9 @@ class CoreExport ModuleManager : public classbase #ifdef WINDOWS #define MODULE_INIT(y) \ - extern "C" DllExport Module * init_module(InspIRCd* Me) \ + extern "C" DllExport Module * init_module() \ { \ - return new y(Me); \ + return new y; \ } \ BOOLEAN WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved) \ { \ @@ -1841,9 +1812,9 @@ class CoreExport ModuleManager : public classbase #else #define MODULE_INIT(y) \ - extern "C" DllExport Module * init_module(InspIRCd* Me) \ + extern "C" DllExport Module * init_module() \ { \ - return new y(Me); \ + return new y; \ } #endif