]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules.cpp
Implement support for the SERVLIST command.
[user/henk/code/inspircd.git] / src / modules.cpp
index 952c115d2be81ea3a4efec08ef47e8442dc00859..73bd2a5e2dd6988476dc8e1b2e0833afdff9fcc7 100644 (file)
@@ -1,14 +1,20 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
+ *   Copyright (C) 2019 nia <nia@netbsd.org>
+ *   Copyright (C) 2019 iwalkalone <iwalkalone69@gmail.com>
+ *   Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
+ *   Copyright (C) 2013 Adam <Adam@anope.org>
+ *   Copyright (C) 2012-2016, 2018 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2012 Robby <robby@chatbelgie.be>
  *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
- *   Copyright (C) 2007, 2009 Dennis Friis <peavey@inspircd.org>
- *   Copyright (C) 2003-2008 Craig Edwards <craigedwards@brainbox.cc>
+ *   Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
  *   Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
- *   Copyright (C) 2006-2007 Robin Burchell <robin+git@viroteck.net>
- *   Copyright (C) 2006-2007 Oliver Lupton <oliverlupton@gmail.com>
- *   Copyright (C) 2007 Pippijn van Steenhoven <pip88nl@gmail.com>
- *   Copyright (C) 2003 randomdan <???@???>
+ *   Copyright (C) 2007-2008 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007 Oliver Lupton <om@inspircd.org>
+ *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2006-2010 Craig Edwards <brain@inspircd.org>
  *
  * 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
  */
 
 
-#include <iostream>
 #include "inspircd.h"
 #include "exitcodes.h"
-
-#ifndef _WIN32
-       #include <dirent.h>
-#endif
+#include <iostream>
 
 static insp::intrusive_list<dynamic_reference_base>* dynrefs = NULL;
 
@@ -62,6 +64,8 @@ Module::Module()
 
 CullResult Module::cull()
 {
+       if (ModuleDLLManager)
+               ServerInstance->GlobalCulls.AddItem(ModuleDLLManager);
        return classbase::cull();
 }
 
@@ -77,6 +81,7 @@ void Module::DetachEvent(Implementation i)
 void           Module::ReadConfig(ConfigStatus& status) { }
 ModResult      Module::OnSendSnotice(char &snomask, std::string &type, const std::string &message) { DetachEvent(I_OnSendSnotice); return MOD_RES_PASSTHRU; }
 void           Module::OnUserConnect(LocalUser*) { DetachEvent(I_OnUserConnect); }
+ModResult      Module::OnUserPreQuit(LocalUser*, std::string&, std::string&) { DetachEvent(I_OnUserPreQuit); return MOD_RES_PASSTHRU; }
 void           Module::OnUserQuit(User*, const std::string&, const std::string&) { DetachEvent(I_OnUserQuit); }
 void           Module::OnUserDisconnect(LocalUser*) { DetachEvent(I_OnUserDisconnect); }
 void           Module::OnUserJoin(Membership*, bool, bool, CUList&) { DetachEvent(I_OnUserJoin); }
@@ -101,6 +106,7 @@ void                Module::OnUnloadModule(Module*) { DetachEvent(I_OnUnloadModule); }
 void           Module::OnBackgroundTimer(time_t) { DetachEvent(I_OnBackgroundTimer); }
 ModResult      Module::OnPreCommand(std::string&, CommandBase::Params&, LocalUser*, bool) { DetachEvent(I_OnPreCommand); return MOD_RES_PASSTHRU; }
 void           Module::OnPostCommand(Command*, const CommandBase::Params&, LocalUser*, CmdResult, bool) { DetachEvent(I_OnPostCommand); }
+void           Module::OnCommandBlocked(const std::string&, const CommandBase::Params&, LocalUser*) { DetachEvent(I_OnCommandBlocked); }
 void           Module::OnUserInit(LocalUser*) { DetachEvent(I_OnUserInit); }
 void           Module::OnUserPostInit(LocalUser*) { DetachEvent(I_OnUserPostInit); }
 ModResult      Module::OnCheckReady(LocalUser*) { DetachEvent(I_OnCheckReady); return MOD_RES_PASSTHRU; }
@@ -143,6 +149,8 @@ void                Module::OnSetUserIP(LocalUser*) { DetachEvent(I_OnSetUserIP); }
 void           Module::OnServiceAdd(ServiceProvider&) { DetachEvent(I_OnServiceAdd); }
 void           Module::OnServiceDel(ServiceProvider&) { DetachEvent(I_OnServiceDel); }
 ModResult      Module::OnUserWrite(LocalUser*, ClientProtocol::Message&) { DetachEvent(I_OnUserWrite); return MOD_RES_PASSTHRU; }
+ModResult      Module::OnConnectionFail(LocalUser*, BufferedSocketError) { DetachEvent(I_OnConnectionFail); return MOD_RES_PASSTHRU; }
+void           Module::OnShutdown(const std::string& reason) { DetachEvent(I_OnShutdown); }
 
 ServiceProvider::ServiceProvider(Module* Creator, const std::string& Name, ServiceType Type)
        : creator(Creator), name(Name), service(Type)
@@ -444,11 +452,8 @@ namespace
                UnloadAction(Module* m) : mod(m) {}
                void Call() CXX11_OVERRIDE
                {
-                       DLLManager* dll = mod->ModuleDLLManager;
                        ServerInstance->Modules->DoSafeUnload(mod);
                        ServerInstance->GlobalCulls.Apply();
-                       // In pure static mode this is always NULL
-                       delete dll;
                        ServerInstance->GlobalCulls.AddItem(this);
                }
        };
@@ -509,7 +514,7 @@ void ModuleManager::LoadAll()
        }
 
        this->NewServices = NULL;
-       ConfigStatus confstatus;
+       ConfigStatus confstatus(NULL, true);
 
        // Step 3: Read the configuration for the modules. This must be done as part of
        // its own step so that services provided by modules can be registered before