/*
* Multimap so people can redirect a snomask to multiple channels.
*/
- typedef std::multimap<char, std::string> ChanLogTargets;
+ typedef insp::flat_multimap<char, std::string> ChanLogTargets;
ChanLogTargets logstreams;
public:
- void init() CXX11_OVERRIDE
- {
- Implementation eventlist[] = { I_OnRehash, I_OnSendSnotice };
- ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
-
- OnRehash(NULL);
- }
-
- void OnRehash(User *user) CXX11_OVERRIDE
+ void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
std::string snomasks;
std::string channel;
-
- logstreams.clear();
+ ChanLogTargets newlogs;
ConfigTagList tags = ServerInstance->Config->ConfTags("chanlog");
for (ConfigIter i = tags.first; i != tags.second; ++i)
if (channel.empty() || snomasks.empty())
{
- ServerInstance->Logs->Log("m_chanlog", LOG_DEFAULT, "Malformed chanlog tag, ignoring");
- continue;
+ throw ModuleException("Malformed chanlog tag at " + i->second->getTagLocation());
}
for (std::string::const_iterator it = snomasks.begin(); it != snomasks.end(); it++)
{
- logstreams.insert(std::make_pair(*it, channel));
- ServerInstance->Logs->Log("m_chanlog", LOG_DEFAULT, "Logging %c to %s", *it, channel.c_str());
+ newlogs.insert(std::make_pair(*it, channel));
+ ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "Logging %c to %s", *it, channel.c_str());
}
}
+ logstreams.swap(newlogs);
}
Channel *c = ServerInstance->FindChan(it->second);
if (c)
{
- c->WriteChannelWithServ(ServerInstance->Config->ServerName, "PRIVMSG %s :%s", c->name.c_str(), snotice.c_str());
- ServerInstance->PI->SendChannelPrivmsg(c, 0, snotice);
+ ClientProtocol::Messages::Privmsg privmsg(ClientProtocol::Messages::Privmsg::nocopy, ServerInstance->Config->ServerName, c, snotice);
+ c->Write(ServerInstance->GetRFCEvents().privmsg, privmsg);
+ ServerInstance->PI->SendMessage(c, 0, snotice);
}
}