X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fmodules.h;h=5e0c9ab077cd58aca711e95c4cafa888c86623cf;hb=327bacd3687f307a5f8586856a94b16c9e4370bf;hp=45d2dd492e82479c40172aba51652f177bcf41b0;hpb=87bbf574bde2149daed9f9967f33ceae13250b70;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/modules.h b/include/modules.h index 45d2dd492..5e0c9ab07 100644 --- a/include/modules.h +++ b/include/modules.h @@ -1,13 +1,18 @@ /* * InspIRCd -- Internet Relay Chat Daemon * + * Copyright (C) 2019 iwalkalone + * Copyright (C) 2013 Adam + * Copyright (C) 2012-2016, 2018 Attila Molnar + * Copyright (C) 2012-2013, 2016-2020 Sadie Powell + * Copyright (C) 2012 Robby * Copyright (C) 2009-2010 Daniel De Graaf - * Copyright (C) 2006-2007, 2009 Dennis Friis - * Copyright (C) 2003-2008 Craig Edwards + * Copyright (C) 2009 Uli Schlachter * Copyright (C) 2008 Thomas Stagner - * Copyright (C) 2007 Robin Burchell - * Copyright (C) 2006-2007 Oliver Lupton - * Copyright (C) 2003 randomdan + * Copyright (C) 2007-2009 Robin Burchell + * Copyright (C) 2007-2008, 2010 Craig Edwards + * Copyright (C) 2007 Oliver Lupton + * Copyright (C) 2007 Dennis Friis * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -25,13 +30,11 @@ #pragma once +#include "moduledefs.h" #include "dynamic.h" #include "base.h" #include "ctables.h" #include "inspsocket.h" -#include -#include -#include #include "timer.h" #include "mode.h" @@ -96,19 +99,6 @@ struct ModResult { } }; -/** InspIRCd major version. - * 1.2 -> 102; 2.1 -> 201; 2.12 -> 212 - */ -#define INSPIRCD_VERSION_MAJ 300 - -/** InspIRCd API version. - * If you change any API elements, increment this value. This counter should be - * reset whenever the major version is changed. Modules can use these two values - * and numerical comparisons in preprocessor macros if they wish to support - * multiple versions of InspIRCd in one file. - */ -#define INSPIRCD_VERSION_API 6 - /** * This #define allows us to call a method in all * loaded modules in a readable simple way, e.g.: @@ -214,19 +204,19 @@ enum Priority { PRIORITY_FIRST, PRIORITY_LAST, PRIORITY_BEFORE, PRIORITY_AFTER } */ enum Implementation { - I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart, + I_OnUserConnect, I_OnUserPreQuit, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart, I_OnSendSnotice, I_OnUserPreJoin, I_OnUserPreKick, I_OnUserKick, I_OnOper, I_OnUserPreInvite, I_OnUserInvite, I_OnUserPreMessage, I_OnUserPreNick, - I_OnUserPostMessage, I_OnUserMessageBlocked, I_OnMode, + I_OnUserPostMessage, I_OnUserMessageBlocked, I_OnMode, I_OnShutdown, I_OnDecodeMetaData, I_OnAcceptConnection, I_OnUserInit, I_OnUserPostInit, I_OnChangeHost, I_OnChangeRealName, I_OnAddLine, I_OnDelLine, I_OnExpireLine, I_OnUserPostNick, I_OnPreMode, I_On005Numeric, I_OnKill, I_OnLoadModule, I_OnUnloadModule, I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite, I_OnRawMode, I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckChannelBan, I_OnExtBanCheck, - I_OnPreChangeHost, I_OnPreTopicChange, + I_OnPreChangeHost, I_OnPreTopicChange, I_OnConnectionFail, I_OnPostTopicChange, I_OnPostConnect, I_OnPostDeoper, I_OnPreChangeRealName, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete, - I_OnPostOper, I_OnPostCommand, I_OnPostJoin, + I_OnPostOper, I_OnPostCommand, I_OnCommandBlocked, I_OnPostJoin, I_OnBuildNeighborList, I_OnGarbageCollect, I_OnSetConnectClass, I_OnUserMessage, I_OnPassCompare, I_OnNumeric, I_OnPreRehash, I_OnModuleRehash, I_OnChangeIdent, I_OnSetUserIP, @@ -307,6 +297,16 @@ class CoreExport Module : public classbase, public usecountbase */ virtual void OnUserConnect(LocalUser* user); + /** Called when before a user quits. + * The details of the exiting user are available to you in the parameter User *user + * This event is only called when the user is fully registered when they quit. To catch + * raw disconnections, use the OnUserDisconnect method. + * @param user The user who is quitting + * @param message The user's quit message (as seen by non-opers) + * @param oper_message The user's quit message (as seen by opers) + */ + virtual ModResult OnUserPreQuit(LocalUser* user, std::string& message, std::string& oper_message); + /** Called when a user quits. * The details of the exiting user are available to you in the parameter User *user * This event is only called when the user is fully registered when they quit. To catch @@ -724,6 +724,13 @@ class CoreExport Module : public classbase, public usecountbase */ virtual void OnPostCommand(Command* command, const CommandBase::Params& parameters, LocalUser* user, CmdResult result, bool loop); + /** Called when a command was blocked before it could be executed. + * @param command The command being executed. + * @param parameters The parameters for the command. + * @param user The user issuing the command. + */ + virtual void OnCommandBlocked(const std::string& command, const CommandBase::Params& parameters, LocalUser* user); + /** Called after a user object is initialised and added to the user list. * When this is called the user has not had their I/O hooks checked or had their initial * connect class assigned and may not yet have a serialiser. You probably want to use @@ -932,6 +939,20 @@ class CoreExport Module : public classbase, public usecountbase * deny the message from being sent, or MOD_RES_PASSTHRU to let another module handle the event. */ virtual ModResult OnUserWrite(LocalUser* user, ClientProtocol::Message& msg); + + /** Called when a user connection has been unexpectedly disconnected. + * @param user The user who has been unexpectedly disconnected. + * @param error The type of error which caused this connection failure. + * @return MOD_RES_ALLOW to explicitly retain the user as a zombie, MOD_RES_DENY to explicitly + * disconnect the user, or MOD_RES_PASSTHRU to let another module handle the event. + */ + virtual ModResult OnConnectionFail(LocalUser* user, BufferedSocketError error); + + /** Called before a server shuts down. + * @param reason The reason the server is shutting down. + * @param restart Whether the server is restarting. + */ + virtual void OnShutdown(const std::string& reason); }; /** ModuleManager takes care of all things module-related @@ -982,7 +1003,7 @@ class CoreExport ModuleManager : public fakederef Module::List EventHandlers[I_END]; /** List of data services keyed by name */ - std::multimap DataProviders; + std::multimap DataProviders; /** A list of ServiceProviders waiting to be registered. * Non-NULL when constructing a Module, NULL otherwise. @@ -1154,24 +1175,3 @@ class CoreExport ModuleManager : public fakederef */ void DelReferent(ServiceProvider* service); }; - -/** Do not mess with these functions unless you know the C preprocessor - * well enough to explain why they are needed. The order is important. - */ -#define MODULE_INIT_STR MODULE_INIT_STR_FN_2(MODULE_INIT_SYM) -#define MODULE_INIT_STR_FN_2(x) MODULE_INIT_STR_FN_1(x) -#define MODULE_INIT_STR_FN_1(x) #x -#define MODULE_INIT_SYM MODULE_INIT_SYM_FN_2(INSPIRCD_VERSION_MAJ, INSPIRCD_VERSION_API) -#define MODULE_INIT_SYM_FN_2(x,y) MODULE_INIT_SYM_FN_1(x,y) -#define MODULE_INIT_SYM_FN_1(x,y) inspircd_module_ ## x ## _ ## y - -/** This definition is used as shorthand for the various classes - * and functions needed to make a module loadable by the OS. - * It defines the class factory and external init_module function. - */ -#define MODULE_INIT(y) \ - extern "C" DllExport Module * MODULE_INIT_SYM() \ - { \ - return new y; \ - } \ - extern "C" DllExport const char inspircd_src_version[] = INSPIRCD_VERSION;