void Module::OnUserConnect(User*) { }
void Module::OnUserQuit(User*, const std::string&, const std::string&) { }
void Module::OnUserDisconnect(User*) { }
void Module::OnUserConnect(User*) { }
void Module::OnUserQuit(User*, const std::string&, const std::string&) { }
void Module::OnUserDisconnect(User*) { }
void Module::OnCleanup(int, void*) { }
int Module::OnChannelPreDelete(Channel*) { return 0; }
void Module::OnChannelDelete(Channel*) { }
void Module::OnCleanup(int, void*) { }
int Module::OnChannelPreDelete(Channel*) { return 0; }
void Module::OnChannelDelete(Channel*) { }
int Module::OnUserList(User*, Channel*, CUList*&) { return 0; }
int Module::OnWhoisLine(User*, User*, int&, std::string&) { return 0; }
void Module::OnBuildExemptList(MessageType, Channel*, User*, char, CUList&, const std::string&) { }
int Module::OnUserList(User*, Channel*, CUList*&) { return 0; }
int Module::OnWhoisLine(User*, User*, int&, std::string&) { return 0; }
void Module::OnBuildExemptList(MessageType, Channel*, User*, char, CUList&, const std::string&) { }
void Module::OnBufferFlushed(User*) { }
void Module::OnText(User*, void*, int, const std::string&, char, CUList&) { }
void Module::OnRunTestSuite() { }
void Module::OnBufferFlushed(User*) { }
void Module::OnText(User*, void*, int, const std::string&, char, CUList&) { }
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&) { }
* on which they want, and we make sure our module is *at least* before or after
* the first or last of this subset, depending again on the type of priority.
*/
* on which they want, and we make sure our module is *at least* before or after
* the first or last of this subset, depending again on the type of priority.
*/
- LastModuleError = "Module " + filename_str + " is not within the modules directory.";
- Instance->Log(DEFAULT, LastModuleError);
+ LastModuleError = "Module " + std::string(filename) + " is not in the module directory that i am configured to look in (is "+Instance->Config->ModPath+" really a symlink?)";
+ Instance->Logs->Log("MODULE", DEFAULT, LastModuleError);
return false;
}
if (!ServerConfig::FileExists(modfile))
{
LastModuleError = "Module file could not be found: " + filename_str;
return false;
}
if (!ServerConfig::FileExists(modfile))
{
LastModuleError = "Module file could not be found: " + filename_str;
return false;
}
if (Modules.find(filename_str) != Modules.end())
{
LastModuleError = "Module " + filename_str + " is already loaded, cannot load a module twice!";
return false;
}
if (Modules.find(filename_str) != Modules.end())
{
LastModuleError = "Module " + filename_str + " is already loaded, cannot load a module twice!";
- Instance->Log(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 %d.%d.%d.%d)%s", filename, v.API, v.Major, v.Minor, v.Revision, v.Build, (!(v.Flags & VF_VENDOR) ? " [3rd Party]" : " [Vendor]"));
if (modfind->second.second->GetVersion().Flags & VF_STATIC)
{
LastModuleError = "Module " + filename_str + " not unloadable (marked static)";
if (modfind->second.second->GetVersion().Flags & VF_STATIC)
{
LastModuleError = "Module " + filename_str + " not unloadable (marked static)";
return false;
}
std::pair<int,std::string> intercount = GetInterfaceInstanceCount(modfind->second.second);
if (intercount.first > 0)
{
LastModuleError = "Failed to unload module " + filename_str + ", being used by " + ConvToStr(intercount.first) + " other(s) via interface '" + intercount.second + "'";
return false;
}
std::pair<int,std::string> intercount = GetInterfaceInstanceCount(modfind->second.second);
if (intercount.first > 0)
{
LastModuleError = "Failed to unload module " + filename_str + ", being used by " + ConvToStr(intercount.first) + " other(s) via interface '" + intercount.second + "'";
- Instance->Log(DEFAULT,"Module %s unloaded",filename);
+ Instance->Logs->Log("MODULE", DEFAULT,"Module %s unloaded",filename);
this->ModCount--;
Instance->BuildISupport();
return true;
}
LastModuleError = "Module " + filename_str + " is not loaded, cannot unload it!";
this->ModCount--;
Instance->BuildISupport();
return true;
}
LastModuleError = "Module " + filename_str + " is not loaded, cannot unload it!";
printf_c("\n[\033[1;31m*\033[0m] %s\n\n", this->LastError().c_str());
Instance->Exit(EXIT_STATUS_MODULE);
}
printf_c("\n[\033[1;31m*\033[0m] %s\n\n", this->LastError().c_str());
Instance->Exit(EXIT_STATUS_MODULE);
}
this->data = new ConfigDataHash;
this->privatehash = true;
this->errorlog = new std::ostringstream(std::stringstream::in | std::stringstream::out);
this->data = new ConfigDataHash;
this->privatehash = true;
this->errorlog = new std::ostringstream(std::stringstream::in | std::stringstream::out);
- for (int pass = 0; pass < 2; pass++)
- {
- /*** XXX: Can return a 'not ready yet!' code! */
- this->readerror = ServerInstance->Config->LoadConf(*this->data, filename, *this->errorlog, pass);
- }
+ /*** XXX: This might block! */
+ this->readerror = ServerInstance->Config->DoInclude(*this->data, filename, *this->errorlog);