X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules.cpp;h=db14fd1e656cb38fbc6aa956f513fc6eb7617a2a;hb=f9d2a1c8277436f49d4700327c66712242ccfd31;hp=c3c07216e247ef53149eb35ecb2728ad2293e71a;hpb=cb6917c48eceeaa0f9980d8efbec8b23fc91d3bf;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules.cpp b/src/modules.cpp index c3c07216e..db14fd1e6 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team + * InspIRCd: (C) 2002-2009 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see @@ -25,9 +25,10 @@ #include #endif + // version is a simple class for holding a modules version number -Version::Version(int major, int minor, int revision, int build, int flags, int api_ver) -: Major(major), Minor(minor), Revision(revision), Build(build), Flags(flags), API(api_ver) +Version::Version(const std::string &sversion, int flags, int api_ver) +: version(sversion), Flags(flags), API(api_ver) { } @@ -106,7 +107,7 @@ std::string Event::GetEventID() Module::Module(InspIRCd* Me) : ServerInstance(Me) { } Module::~Module() { } -int Module::OnSendSnotice(char &snomask, std::string &type, const std::string &message) { return 0; } +int Module::OnSendSnotice(char &snomask, std::string &type, const std::string &message) { return 0; } void Module::OnUserConnect(User*) { } void Module::OnUserQuit(User*, const std::string&, const std::string&) { } void Module::OnUserDisconnect(User*) { } @@ -114,10 +115,9 @@ void Module::OnUserJoin(User*, Channel*, bool, bool&) { } void Module::OnPostJoin(User*, Channel*) { } void Module::OnUserPart(User*, Channel*, std::string&, bool&) { } void Module::OnRehash(User*, const std::string&) { } -void Module::OnServerRaw(std::string&, bool, User*) { } int Module::OnUserPreJoin(User*, Channel*, const char*, std::string&, const std::string&) { return 0; } void Module::OnMode(User*, void*, int, const std::string&) { } -Version Module::GetVersion() { return Version(1,0,0,0,VF_VENDOR,-1); } +Version Module::GetVersion() { return Version("Misconfigured", VF_VENDOR, -1); } void Module::OnOper(User*, const std::string&) { } void Module::OnPostOper(User*, const std::string&, const std::string &) { } void Module::OnInfo(User*) { } @@ -170,12 +170,12 @@ void Module::OnPostLocalTopicChange(User*, Channel*, const std::string&) { } void Module::OnGetServerDescription(const std::string&, std::string&) { } void Module::OnSyncUser(User*, Module*, void*) { } void Module::OnSyncChannel(Channel*, Module*, void*) { } -void Module::ProtoSendMode(void*, int, void*, const std::string&) { } +void Module::ProtoSendMode(void*, TargetTypeFlags, void*, const std::string&) { } void Module::OnSyncChannelMetaData(Channel*, Module*, void*, const std::string&, bool) { } void Module::OnSyncUserMetaData(User*, Module*, void*, const std::string&, bool) { } void Module::OnSyncOtherMetaData(Module*, void*, bool) { } void Module::OnDecodeMetaData(int, void*, const std::string&, const std::string&) { } -void Module::ProtoSendMetaData(void*, int, void*, const std::string&, const std::string&) { } +void Module::ProtoSendMetaData(void*, TargetTypeFlags, void*, const std::string&, const std::string&) { } void Module::OnWallops(User*, const std::string&) { } void Module::OnChangeHost(User*, const std::string&) { } void Module::OnChangeName(User*, const std::string&) { } @@ -196,6 +196,7 @@ void Module::OnRunTestSuite() { } void Module::OnNamesListItem(User*, User*, Channel*, std::string&, std::string&) { } int Module::OnNumeric(User*, unsigned int, const std::string&) { return 0; } void Module::OnHookUserIO(User*, const std::string&) { } +bool Module::OnHostCycle(User* user) { return false; } ModuleManager::ModuleManager(InspIRCd* Ins) : ModCount(0), Instance(Ins) { @@ -237,7 +238,7 @@ void ModuleManager::DetachAll(Module* mod) Detach((Implementation)n, mod); } -bool ModuleManager::SetPriority(Module* mod, PriorityState s) +bool ModuleManager::SetPriority(Module* mod, Priority s) { for (size_t n = I_BEGIN + 1; n != I_END; ++n) SetPriority(mod, (Implementation)n, s); @@ -245,7 +246,7 @@ bool ModuleManager::SetPriority(Module* mod, PriorityState s) return true; } -bool ModuleManager::SetPriority(Module* mod, Implementation i, PriorityState s, Module** modules, size_t sz) +bool ModuleManager::SetPriority(Module* mod, Implementation i, Priority s, Module** modules, size_t sz) { /** To change the priority of a module, we first find its position in the vector, * then we find the position of the other modules in the vector that this module @@ -280,22 +281,22 @@ bool ModuleManager::SetPriority(Module* mod, Implementation i, PriorityState s, switch (s) { /* Dummy value */ - case PRIO_DONTCARE: + case PRIORITY_DONTCARE: swap = false; break; /* Module wants to be first, sod everything else */ - case PRIO_FIRST: + case PRIORITY_FIRST: swap_pos = 0; break; /* Module is submissive and wants to be last... awww. */ - case PRIO_LAST: + case PRIORITY_LAST: if (EventHandlers[i].empty()) swap_pos = 0; else swap_pos = EventHandlers[i].size() - 1; break; /* Place this module after a set of other modules */ - case PRIO_AFTER: + case PRIORITY_AFTER: { /* Find the latest possible position */ swap_pos = 0; @@ -314,7 +315,7 @@ bool ModuleManager::SetPriority(Module* mod, Implementation i, PriorityState s, } break; /* Place this module before a set of other modules */ - case PRIO_BEFORE: + case PRIORITY_BEFORE: { swap_pos = EventHandlers[i].size() - 1; swap = false; @@ -375,7 +376,7 @@ bool ModuleManager::Load(const char* filename) dirent* entry = NULL; while (0 != (entry = readdir(library))) { - if (InspIRCd::Match(entry->d_name, filename, NULL)) + if (InspIRCd::Match(entry->d_name, filename, ascii_case_insensitive_map)) { if (!this->Load(entry->d_name)) n_match++; @@ -387,7 +388,7 @@ bool ModuleManager::Load(const char* filename) * to load (but wont abort when it encounters a bad one) and when 1 or * more modules were actually loaded. */ - return (n_match > 0); + return (n_match > 0 ? false : true); } char modfile[MAXBUF]; @@ -400,21 +401,21 @@ bool ModuleManager::Load(const char* filename) Instance->Logs->Log("MODULE", DEFAULT, LastModuleError); return false; } - + if (!ServerConfig::FileExists(modfile)) { LastModuleError = "Module file could not be found: " + filename_str; Instance->Logs->Log("MODULE", DEFAULT, LastModuleError); return false; } - + if (Modules.find(filename_str) != Modules.end()) - { + { LastModuleError = "Module " + filename_str + " is already loaded, cannot load a module twice!"; Instance->Logs->Log("MODULE", DEFAULT, LastModuleError); return false; } - + Module* newmod = NULL; ircd_module* newhandle = NULL; @@ -441,7 +442,7 @@ bool ModuleManager::Load(const char* filename) } else { - Instance->Logs->Log("MODULE", DEFAULT,"New module introduced: %s (API version %d, Module version %d.%d.%d.%d)%s", filename, v.API, v.Major, v.Minor, v.Revision, v.Build, (!(v.Flags & VF_VENDOR) ? " [3rd Party]" : " [Vendor]")); + Instance->Logs->Log("MODULE", DEFAULT,"New module introduced: %s (API version %d, Module version %s)%s", filename, v.API, v.version.c_str(), (!(v.Flags & VF_VENDOR) ? " [3rd Party]" : " [Vendor]")); } Modules[filename_str] = std::make_pair(newhandle, newmod); @@ -569,8 +570,8 @@ void ModuleManager::LoadAll() { Instance->Config->ConfValue(Instance->Config->config_data, "module", "name", count, configToken, MAXBUF); printf_c("[\033[1;32m*\033[0m] Loading module:\t\033[1;32m%s\033[0m\n",configToken); - - if (!this->Load(configToken)) + + if (!this->Load(configToken)) { Instance->Logs->Log("MODULE", DEFAULT, this->LastError()); printf_c("\n[\033[1;31m*\033[0m] %s\n\n", this->LastError().c_str()); @@ -592,7 +593,7 @@ bool ModuleManager::PublishFeature(const std::string &FeatureName, Module* Mod) bool ModuleManager::UnpublishFeature(const std::string &FeatureName) { featurelist::iterator iter = Features.find(FeatureName); - + if (iter == Features.end()) return false; @@ -812,6 +813,7 @@ ConfigReader::ConfigReader(InspIRCd* Instance) : ServerInstance(Instance) this->error = CONF_NO_ERROR; this->data = &ServerInstance->Config->config_data; this->privatehash = false; + this->error = 0; } @@ -836,14 +838,15 @@ ConfigReader::ConfigReader(InspIRCd* Instance, const std::string &filename) : Se this->readerror = ServerInstance->Config->DoInclude(*this->data, filename, *this->errorlog); if (!this->readerror) this->error = CONF_FILE_NOT_FOUND; + this->error = 0; } std::string ConfigReader::ReadValue(const std::string &tag, const std::string &name, const std::string &default_value, int index, bool allow_linefeeds) { - /* Don't need to strlcpy() tag and name anymore, ReadConf() takes const char* */ + /* Don't need to strlcpy() tag and name anymore, ReadConf() takes const char* */ std::string result; - + if (!ServerInstance->Config->ConfValue(*this->data, tag, name, default_value, index, result, allow_linefeeds)) { this->error = CONF_VALUE_NOT_FOUND; @@ -870,19 +873,19 @@ bool ConfigReader::ReadFlag(const std::string &tag, const std::string &name, int int ConfigReader::ReadInteger(const std::string &tag, const std::string &name, const std::string &default_value, int index, bool need_positive) { int result; - + if(!ServerInstance->Config->ConfValueInteger(*this->data, tag, name, default_value, index, result)) { this->error = CONF_VALUE_NOT_FOUND; return 0; } - + if ((need_positive) && (result < 0)) { this->error = CONF_INT_NEGATIVE; return 0; } - + return result; } @@ -900,7 +903,7 @@ long ConfigReader::GetError() void ConfigReader::DumpErrors(bool bail, User* user) { - ServerInstance->Config->ReportConfigError(this->errorlog->str(), bail, user); + ServerInstance->Config->ReportConfigError(this->errorlog->str(), bail, user->uuid); }