]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules.cpp
Tidy up keywords on module methods.
[user/henk/code/inspircd.git] / src / modules.cpp
index 1194e835864cdb885b291641a616ad7b82a412a0..63e1118d93680efaa30d896062dd42c55a93800c 100644 (file)
@@ -29,7 +29,6 @@
 #include "socket.h"
 #include "socketengine.h"
 #include "command_parse.h"
-#include "dns.h"
 #include "exitcodes.h"
 
 #ifndef _WIN32
@@ -97,7 +96,7 @@ void          Module::OnUserPart(Membership*, std::string&, CUList&) { }
 void           Module::OnPreRehash(User*, const std::string&) { }
 void           Module::OnModuleRehash(User*, const std::string&) { }
 void           Module::OnRehash(User*) { }
-ModResult      Module::OnUserPreJoin(User*, Channel*, const std::string&, std::string&, const std::string&) { return MOD_RES_PASSTHRU; }
+ModResult      Module::OnUserPreJoin(LocalUser*, Channel*, const std::string&, std::string&, const std::string&) { return MOD_RES_PASSTHRU; }
 void           Module::OnMode(User*, void*, int, const std::vector<std::string>&, const std::vector<TranslateType>&) { }
 void           Module::OnOper(User*, const std::string&) { }
 void           Module::OnPostOper(User*, const std::string&, const std::string &) { }
@@ -109,7 +108,7 @@ ModResult   Module::OnUserPreNotice(User*, void*, int, std::string&, char, CUList&
 ModResult      Module::OnUserPreNick(User*, const std::string&) { return MOD_RES_PASSTHRU; }
 void           Module::OnUserPostNick(User*, const std::string&) { }
 ModResult      Module::OnPreMode(User*, User*, Channel*, const std::vector<std::string>&) { return MOD_RES_PASSTHRU; }
-void           Module::On005Numeric(std::string&) { }
+void           Module::On005Numeric(std::map<std::string, std::string>&) { }
 ModResult      Module::OnKill(User*, User*, const std::string&) { return MOD_RES_PASSTHRU; }
 void           Module::OnLoadModule(Module*) { }
 void           Module::OnUnloadModule(Module*) { }
@@ -328,23 +327,30 @@ bool ModuleManager::CanUnload(Module* mod)
 {
        std::map<std::string, Module*>::iterator modfind = Modules.find(mod->ModuleSourceFile);
 
-       if (modfind == Modules.end() || modfind->second != mod)
+       if ((modfind == Modules.end()) || (modfind->second != mod) || (mod->dying))
        {
                LastModuleError = "Module " + mod->ModuleSourceFile + " is not loaded, cannot unload it!";
-               ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError);
+               ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, LastModuleError);
                return false;
        }
        if (mod->GetVersion().Flags & VF_STATIC)
        {
                LastModuleError = "Module " + mod->ModuleSourceFile + " not unloadable (marked static)";
-               ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError);
+               ServerInstance->Logs->Log("MODULE", LOG_DEFAULT, LastModuleError);
                return false;
        }
+
+       mod->dying = true;
        return true;
 }
 
 void ModuleManager::DoSafeUnload(Module* mod)
 {
+       // First, notify all modules that a module is about to be unloaded, so in case
+       // they pass execution to the soon to be unloaded module, it will happen now,
+       // i.e. before we unregister the services of the module being unloaded
+       FOREACH_MOD(I_OnUnloadModule,OnUnloadModule(mod));
+
        std::map<std::string, Module*>::iterator modfind = Modules.find(mod->ModuleSourceFile);
 
        std::vector<reference<ExtensionItem> > items;
@@ -382,19 +388,14 @@ void ModuleManager::DoSafeUnload(Module* mod)
 
        dynamic_reference_base::reset_all();
 
-       /* Tidy up any dangling resolvers */
-       ServerInstance->Res->CleanResolvers(mod);
-
-       FOREACH_MOD(I_OnUnloadModule,OnUnloadModule(mod));
-
        DetachAll(mod);
 
        Modules.erase(modfind);
        ServerInstance->GlobalCulls.AddItem(mod);
 
-       ServerInstance->Logs->Log("MODULE", DEFAULT,"Module %s unloaded",mod->ModuleSourceFile.c_str());
+       ServerInstance->Logs->Log("MODULE", LOG_DEFAULT,"Module %s unloaded",mod->ModuleSourceFile.c_str());
        this->ModCount--;
-       ServerInstance->BuildISupport();
+       ServerInstance->ISupport.Build();
 }
 
 void ModuleManager::UnloadAll()
@@ -565,18 +566,6 @@ void InspIRCd::SendGlobalMode(const std::vector<std::string>& parameters, User *
                this->PI->SendMode(parameters[0], Modes->GetLastParseParams(), Modes->GetLastParseTranslate());
 }
 
-bool InspIRCd::AddResolver(Resolver* r, bool cached)
-{
-       if (!cached)
-               return this->Res->AddResolverClass(r);
-       else
-       {
-               r->TriggerCachedResult();
-               delete r;
-               return true;
-       }
-}
-
 Module* ModuleManager::Find(const std::string &name)
 {
        std::map<std::string, Module*>::iterator modfind = Modules.find(name);