diff options
Diffstat (limited to 'src/modules')
25 files changed, 174 insertions, 102 deletions
diff --git a/src/modules/m_chanfilter.cpp b/src/modules/m_chanfilter.cpp index 004990870..4b3721b12 100644 --- a/src/modules/m_chanfilter.cpp +++ b/src/modules/m_chanfilter.cpp @@ -71,7 +71,7 @@ class ModuleChanFilter : public Module { ConfigTag* tag = ServerInstance->Config->ConfValue("chanfilter"); hidemask = tag->getBool("hidemask"); - cf.maxlen = tag->getUInt("maxlen", 35, 10, 100); + cf.maxlen = tag->getUInt("maxlen", 35, 10, ModeParser::MODE_PARAM_MAX); notifyuser = tag->getBool("notifyuser", true); cf.DoRehash(); } diff --git a/src/modules/m_chanhistory.cpp b/src/modules/m_chanhistory.cpp index 163940deb..f3e51c808 100644 --- a/src/modules/m_chanhistory.cpp +++ b/src/modules/m_chanhistory.cpp @@ -114,6 +114,7 @@ class ModuleChanHistory : public Module , public ServerProtocol::BroadcastEventListener { + private: HistoryMode m; bool sendnotice; UserModeReference botmode; @@ -123,6 +124,31 @@ class ModuleChanHistory IRCv3::Batch::Batch batch; IRCv3::ServerTime::API servertimemanager; + void SendHistory(LocalUser* user, Channel* channel, HistoryList* list, time_t mintime) + { + if (batchmanager) + { + batchmanager->Start(batch); + batch.GetBatchStartMessage().PushParamRef(channel->name); + } + + for(std::deque<HistoryItem>::iterator i = list->lines.begin(); i != list->lines.end(); ++i) + { + const HistoryItem& item = *i; + if (item.ts >= mintime) + { + ClientProtocol::Messages::Privmsg msg(ClientProtocol::Messages::Privmsg::nocopy, item.sourcemask, channel, item.text); + if (servertimemanager) + servertimemanager->Set(msg, item.ts); + batch.AddToBatch(msg); + user->Send(ServerInstance->GetRFCEvents().privmsg, msg); + } + } + + if (batchmanager) + batchmanager->End(batch); + } + public: ModuleChanHistory() : ServerProtocol::BroadcastEventListener(this) @@ -175,9 +201,6 @@ class ModuleChanHistory HistoryList* list = m.ext.get(memb->chan); if (!list) return; - time_t mintime = 0; - if (list->maxtime) - mintime = ServerInstance->Time() - list->maxtime; if ((sendnotice) && (!batchcap.get(localuser))) { @@ -187,27 +210,11 @@ class ModuleChanHistory memb->WriteNotice(message); } - if (batchmanager) - { - batchmanager->Start(batch); - batch.GetBatchStartMessage().PushParamRef(memb->chan->name); - } - - for(std::deque<HistoryItem>::iterator i = list->lines.begin(); i != list->lines.end(); ++i) - { - const HistoryItem& item = *i; - if (item.ts >= mintime) - { - ClientProtocol::Messages::Privmsg msg(ClientProtocol::Messages::Privmsg::nocopy, item.sourcemask, memb->chan, item.text); - if (servertimemanager) - servertimemanager->Set(msg, item.ts); - batch.AddToBatch(msg); - localuser->Send(ServerInstance->GetRFCEvents().privmsg, msg); - } - } + time_t mintime = 0; + if (list->maxtime) + mintime = ServerInstance->Time() - list->maxtime; - if (batchmanager) - batchmanager->End(batch); + SendHistory(localuser, memb->chan, list, mintime); } Version GetVersion() override diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp index 76b411006..f8bbbff45 100644 --- a/src/modules/m_check.cpp +++ b/src/modules/m_check.cpp @@ -261,8 +261,8 @@ class CommandCheck : public Command for (Channel::MemberMap::const_iterator i = ulist.begin(); i != ulist.end(); ++i) { /* - * Unlike Asuka, I define a clone as coming from the same host. --w00t - */ + * Unlike Asuka, I define a clone as coming from the same host. --w00t + */ const UserManager::CloneCounts& clonecount = ServerInstance->Users.GetCloneCounts(i->first); context.Write("member", InspIRCd::Format("%u %s%s (%s)", clonecount.global, i->second->GetAllPrefixChars().c_str(), i->first->GetFullHost().c_str(), diff --git a/src/modules/m_ircv3_servertime.cpp b/src/modules/m_ircv3_servertime.cpp index e7ab231e3..5fa099ece 100644 --- a/src/modules/m_ircv3_servertime.cpp +++ b/src/modules/m_ircv3_servertime.cpp @@ -20,8 +20,12 @@ #include "inspircd.h" #include "modules/ircv3.h" #include "modules/ircv3_servertime.h" +#include "modules/server.h" -class ServerTimeTag : public IRCv3::ServerTime::Manager, public IRCv3::CapTag<ServerTimeTag> +class ServerTimeTag + : public IRCv3::ServerTime::Manager + , public IRCv3::CapTag<ServerTimeTag> + , public ServerProtocol::MessageEventListener { time_t lasttime; long lasttimens; @@ -45,6 +49,7 @@ class ServerTimeTag : public IRCv3::ServerTime::Manager, public IRCv3::CapTag<Se ServerTimeTag(Module* mod) : IRCv3::ServerTime::Manager(mod) , IRCv3::CapTag<ServerTimeTag>(mod, "server-time", "time") + , ServerProtocol::MessageEventListener(mod) , lasttime(0) , lasttimens(0) { @@ -53,9 +58,18 @@ class ServerTimeTag : public IRCv3::ServerTime::Manager, public IRCv3::CapTag<Se const std::string* GetValue(const ClientProtocol::Message& msg) { + // Client protocol. RefreshTimeString(); return &lasttimestring; } + + void OnBuildMessage(User* source, const char* command, ClientProtocol::TagMap& tags) override + { + // Server protocol. + RefreshTimeString(); + tags.insert(std::make_pair(tagname, ClientProtocol::MessageTagData(this, lasttimestring))); + } + }; class ModuleIRCv3ServerTime : public Module diff --git a/src/modules/m_sasl.cpp b/src/modules/m_sasl.cpp index 544a2bf0e..d2d3589f4 100644 --- a/src/modules/m_sasl.cpp +++ b/src/modules/m_sasl.cpp @@ -285,7 +285,7 @@ class SaslAuthenticator case SASL_OK: this->user->WriteNumeric(RPL_SASLSUCCESS, "SASL authentication successful"); break; - case SASL_ABORT: + case SASL_ABORT: this->user->WriteNumeric(ERR_SASLABORTED, "SASL authentication aborted"); break; case SASL_FAIL: diff --git a/src/modules/m_satopic.cpp b/src/modules/m_satopic.cpp index 94f9999ca..df91b1be4 100644 --- a/src/modules/m_satopic.cpp +++ b/src/modules/m_satopic.cpp @@ -33,7 +33,7 @@ class CommandSATopic : public Command { /* * Handles a SATOPIC request. Notifies all +s users. - */ + */ Channel* target = ServerInstance->FindChan(parameters[0]); if(target) diff --git a/src/modules/m_spanningtree/commandbuilder.h b/src/modules/m_spanningtree/commandbuilder.h index 4bbb60e47..f6cca9917 100644 --- a/src/modules/m_spanningtree/commandbuilder.h +++ b/src/modules/m_spanningtree/commandbuilder.h @@ -26,28 +26,53 @@ class TreeServer; class CmdBuilder { protected: + /** The raw message contents. */ std::string content; + /** Tags which have been added to this message. */ + ClientProtocol::TagMap tags; + + /** The size of tags within the contents. */ + size_t tagsize; + + /** Fires the ServerProtocol::MessageEventListener::OnBuildMessage event for a server target. */ + void FireEvent(Server* target, const char* cmd, ClientProtocol::TagMap& taglist); + + /** Fires the ServerProtocol::MessageEventListener::OnBuildMessage event for a user target. */ + void FireEvent(User* target, const char* cmd, ClientProtocol::TagMap& taglist); + + /** Updates the tag string within the buffer. */ + void UpdateTags(); + public: CmdBuilder(const char* cmd) : content(1, ':') + , tagsize(0) { content.append(ServerInstance->Config->GetSID()); push(cmd); + FireEvent(ServerInstance->FakeClient->server, cmd, tags); } - CmdBuilder(const std::string& src, const char* cmd) + CmdBuilder(TreeServer* src, const char* cmd) : content(1, ':') + , tagsize(0) { - content.append(src); + content.append(src->GetID()); push(cmd); + FireEvent(src, cmd, tags); } CmdBuilder(User* src, const char* cmd) : content(1, ':') + , tagsize(0) { content.append(src->uuid); push(cmd); + if (InspIRCd::IsSID(src->uuid)) + FireEvent(src->server, cmd, tags); + else + FireEvent(src, cmd, tags); } CmdBuilder& push_raw(const std::string& s) @@ -119,27 +144,12 @@ class CmdBuilder return *this; } - CmdBuilder& push_tags(const ClientProtocol::TagMap& tags) + CmdBuilder& push_tags(ClientProtocol::TagMap newtags) { - if (!tags.empty()) - { - char separator = '@'; - std::string taglist; - for (ClientProtocol::TagMap::const_iterator iter = tags.begin(); iter != tags.end(); ++iter) - { - taglist.push_back(separator); - separator = ';'; - - taglist.append(iter->first); - if (!iter->second.value.empty()) - { - taglist.push_back('='); - taglist.append(iter->second.value); - } - } - taglist.push_back(' '); - content.insert(0, taglist); - } + // It has to be this way around so new tags get priority. + newtags.insert(tags.begin(), tags.end()); + std::swap(tags, newtags); + UpdateTags(); return *this; } @@ -151,8 +161,6 @@ class CmdBuilder return *this; } - void push_back(const std::string& s) { push(s); } - const std::string& str() const { return content; } operator const std::string&() const { return str(); } diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp index 9ab44ce2a..e0fbbc174 100644 --- a/src/modules/m_spanningtree/compat.cpp +++ b/src/modules/m_spanningtree/compat.cpp @@ -286,7 +286,12 @@ void TreeSocket::WriteLine(const std::string& original_line) // Synthesize a :<newserver> BURST <time> message spcolon = line.find(" :"); - line = CmdBuilder(line.substr(spcolon-3, 3), "BURST").push_int(ServerInstance->Time()).str(); + + TreeServer* const source = Utils->FindServerID(line.substr(spcolon-3, 3)); + if (!source) + return; + + line = CmdBuilder(source, "BURST").push_int(ServerInstance->Time()).str(); } } else if (command == "NUM") diff --git a/src/modules/m_spanningtree/fjoin.cpp b/src/modules/m_spanningtree/fjoin.cpp index 6c053c530..62a51faba 100644 --- a/src/modules/m_spanningtree/fjoin.cpp +++ b/src/modules/m_spanningtree/fjoin.cpp @@ -295,7 +295,7 @@ void CommandFJoin::LowerTS(Channel* chan, time_t TS, const std::string& newname) } CommandFJoin::Builder::Builder(Channel* chan, TreeServer* source) - : CmdBuilder(source->GetID(), "FJOIN") + : CmdBuilder(source, "FJOIN") { push(chan->name).push_int(chan->age).push_raw(" +"); pos = str().size(); diff --git a/src/modules/m_spanningtree/idle.cpp b/src/modules/m_spanningtree/idle.cpp index 11e665531..904142999 100644 --- a/src/modules/m_spanningtree/idle.cpp +++ b/src/modules/m_spanningtree/idle.cpp @@ -59,10 +59,10 @@ CmdResult CommandIdle::HandleRemote(RemoteUser* issuer, Params& params) else idle = ((unsigned int) (ServerInstance->Time() - localtarget->idle_lastmsg)); - CmdBuilder reply(params[0], "IDLE"); - reply.push_back(issuer->uuid); - reply.push_back(ConvToStr(target->signon)); - reply.push_back(ConvToStr(idle)); + CmdBuilder reply(target, "IDLE"); + reply.push(issuer->uuid); + reply.push(ConvToStr(target->signon)); + reply.push(ConvToStr(idle)); reply.Unicast(issuer); } diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 6177d7859..aaaee47d4 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -25,7 +25,6 @@ #include "socket.h" #include "xline.h" #include "iohook.h" -#include "modules/server.h" #include "resolvers.h" #include "main.h" @@ -47,6 +46,7 @@ ModuleSpanningTree::ModuleSpanningTree() , currmembid(0) , broadcasteventprov(this, "event/server-broadcast") , linkeventprov(this, "event/server-link") + , messageeventprov(this, "event/server-message") , synceventprov(this, "event/server-sync") , sslapi(this) , DNS(this, "DNS") @@ -359,10 +359,10 @@ void ModuleSpanningTree::OnUserInvite(User* source, User* dest, Channel* channel if (IS_LOCAL(source)) { CmdBuilder params(source, "INVITE"); - params.push_back(dest->uuid); - params.push_back(channel->name); + params.push(dest->uuid); + params.push(channel->name); params.push_int(channel->age); - params.push_back(ConvToStr(expiry)); + params.push(ConvToStr(expiry)); params.Broadcast(); } } @@ -403,7 +403,7 @@ void ModuleSpanningTree::OnUserPostMessage(User* user, const MessageTarget& targ { CmdBuilder params(user, message_type); params.push_tags(details.tags_out); - params.push_back(d->uuid); + params.push(d->uuid); params.push_last(details.text); params.Unicast(d); } @@ -411,7 +411,7 @@ void ModuleSpanningTree::OnUserPostMessage(User* user, const MessageTarget& targ } case MessageTarget::TYPE_CHANNEL: { - Utils->SendChannelMessage(user->uuid, target.Get<Channel>(), details.text, target.status, details.tags_out, details.exemptions, message_type); + Utils->SendChannelMessage(user, target.Get<Channel>(), details.text, target.status, details.tags_out, details.exemptions, message_type); break; } case MessageTarget::TYPE_SERVER: @@ -419,7 +419,7 @@ void ModuleSpanningTree::OnUserPostMessage(User* user, const MessageTarget& targ const std::string* serverglob = target.Get<std::string>(); CmdBuilder par(user, message_type); par.push_tags(details.tags_out); - par.push_back(*serverglob); + par.push(*serverglob); par.push_last(details.text); par.Broadcast(); break; @@ -441,14 +441,14 @@ void ModuleSpanningTree::OnUserPostTagMessage(User* user, const MessageTarget& t { CmdBuilder params(user, "TAGMSG"); params.push_tags(details.tags_out); - params.push_back(d->uuid); + params.push(d->uuid); params.Unicast(d); } break; } case MessageTarget::TYPE_CHANNEL: { - Utils->SendChannelMessage(user->uuid, target.Get<Channel>(), "", target.status, details.tags_out, details.exemptions, "TAGMSG"); + Utils->SendChannelMessage(user, target.Get<Channel>(), "", target.status, details.tags_out, details.exemptions, "TAGMSG"); break; } case MessageTarget::TYPE_SERVER: @@ -456,7 +456,7 @@ void ModuleSpanningTree::OnUserPostTagMessage(User* user, const MessageTarget& t const std::string* serverglob = target.Get<std::string>(); CmdBuilder par(user, "TAGMSG"); par.push_tags(details.tags_out); - par.push_back(*serverglob); + par.push(*serverglob); par.Broadcast(); break; } @@ -513,12 +513,12 @@ void ModuleSpanningTree::OnUserJoin(Membership* memb, bool sync, bool created_by else { CmdBuilder params(memb->user, "IJOIN"); - params.push_back(memb->chan->name); + params.push(memb->chan->name); params.push_int(memb->id); if (!memb->modes.empty()) { - params.push_back(ConvToStr(memb->chan->age)); - params.push_back(memb->modes); + params.push(ConvToStr(memb->chan->age)); + params.push(memb->modes); } params.Broadcast(); } @@ -553,7 +553,7 @@ void ModuleSpanningTree::OnUserPart(Membership* memb, std::string &partmessage, if (IS_LOCAL(memb->user)) { CmdBuilder params(memb->user, "PART"); - params.push_back(memb->chan->name); + params.push(memb->chan->name); if (!partmessage.empty()) params.push_last(partmessage); params.Broadcast(); @@ -593,8 +593,8 @@ void ModuleSpanningTree::OnUserPostNick(User* user, const std::string &oldnick) { // The nick TS is updated by the core, we don't do it CmdBuilder params(user, "NICK"); - params.push_back(user->nick); - params.push_back(ConvToStr(user->age)); + params.push(user->nick); + params.push(ConvToStr(user->age)); params.Broadcast(); } else if (!loopCall) @@ -609,8 +609,8 @@ void ModuleSpanningTree::OnUserKick(User* source, Membership* memb, const std::s return; CmdBuilder params(source, "KICK"); - params.push_back(memb->chan->name); - params.push_back(memb->user->uuid); + params.push(memb->chan->name); + params.push(memb->user->uuid); // If a remote user is being kicked by us then send the membership id in the kick too if (!IS_LOCAL(memb->user)) params.push_int(memb->id); @@ -625,8 +625,8 @@ void ModuleSpanningTree::OnPreRehash(User* user, const std::string ¶meter) // Send out to other servers if (!parameter.empty() && parameter[0] != '-') { - CmdBuilder params((user ? user->uuid : ServerInstance->Config->GetSID()), "REHASH"); - params.push_back(parameter); + CmdBuilder params(user ? user : ServerInstance->FakeClient, "REHASH"); + params.push(parameter); params.Forward(user ? TreeServer::Get(user)->GetRoute() : NULL); } } @@ -749,8 +749,8 @@ void ModuleSpanningTree::OnDelLine(User* user, XLine *x) user = ServerInstance->FakeClient; CmdBuilder params(user, "DELLINE"); - params.push_back(x->type); - params.push_back(x->Displayable()); + params.push(x->type); + params.push(x->Displayable()); params.Broadcast(); } diff --git a/src/modules/m_spanningtree/main.h b/src/modules/m_spanningtree/main.h index 29d133b94..ac96de391 100644 --- a/src/modules/m_spanningtree/main.h +++ b/src/modules/m_spanningtree/main.h @@ -29,6 +29,7 @@ #include "modules/ssl.h" #include "modules/stats.h" #include "modules/ctctags.h" +#include "modules/server.h" #include "servercommand.h" #include "commands.h" #include "protocolinterface.h" @@ -99,6 +100,9 @@ class ModuleSpanningTree /** Event provider for our link events. */ Events::ModuleEventProvider linkeventprov; + /** Event provider for our message events. */ + Events::ModuleEventProvider messageeventprov; + /** Event provider for our sync events. */ Events::ModuleEventProvider synceventprov; @@ -169,6 +173,9 @@ class ModuleSpanningTree /** Retrieves the event provider for link events. */ const Events::ModuleEventProvider& GetLinkEventProvider() const { return linkeventprov; } + /** Retrieves the event provider for message events. */ + const Events::ModuleEventProvider& GetMessageEventProvider() const { return messageeventprov; } + /** Retrieves the event provider for sync events. */ const Events::ModuleEventProvider& GetSyncEventProvider() const { return synceventprov; } diff --git a/src/modules/m_spanningtree/misccommands.cpp b/src/modules/m_spanningtree/misccommands.cpp index 827ea2562..bccdf5016 100644 --- a/src/modules/m_spanningtree/misccommands.cpp +++ b/src/modules/m_spanningtree/misccommands.cpp @@ -29,6 +29,41 @@ #include "commands.h" #include "treeserver.h" +void CmdBuilder::FireEvent(Server* target, const char* cmd, ClientProtocol::TagMap& taglist) +{ + FOREACH_MOD_CUSTOM(Utils->Creator->GetMessageEventProvider(), ServerProtocol::MessageEventListener, OnBuildMessage, (target, cmd, taglist)); + UpdateTags(); +} + +void CmdBuilder::FireEvent(User* target, const char* cmd, ClientProtocol::TagMap& taglist) +{ + FOREACH_MOD_CUSTOM(Utils->Creator->GetMessageEventProvider(), ServerProtocol::MessageEventListener, OnBuildMessage, (target, cmd, taglist)); + UpdateTags(); +} + +void CmdBuilder::UpdateTags() +{ + std::string taglist; + if (!tags.empty()) + { + char separator = '@'; + for (ClientProtocol::TagMap::const_iterator iter = tags.begin(); iter != tags.end(); ++iter) + { + taglist.push_back(separator); + separator = ';'; + taglist.append(iter->first); + if (!iter->second.value.empty()) + { + taglist.push_back('='); + taglist.append(iter->second.value); + } + } + taglist.push_back(' '); + } + content.replace(0, tagsize, taglist); + tagsize = taglist.length(); +} + CmdResult CommandSNONotice::Handle(User* user, Params& params) { ServerInstance->SNO.WriteToSnoMask(params[0][0], "From " + user->nick + ": " + params[1]); diff --git a/src/modules/m_spanningtree/netburst.cpp b/src/modules/m_spanningtree/netburst.cpp index 7d0e48dc1..a8dbbc714 100644 --- a/src/modules/m_spanningtree/netburst.cpp +++ b/src/modules/m_spanningtree/netburst.cpp @@ -27,7 +27,6 @@ #include "treeserver.h" #include "main.h" #include "commands.h" -#include "modules/server.h" /** * Creates FMODE messages, used only when syncing channels diff --git a/src/modules/m_spanningtree/nickcollide.cpp b/src/modules/m_spanningtree/nickcollide.cpp index 071d15b3a..7bcb69647 100644 --- a/src/modules/m_spanningtree/nickcollide.cpp +++ b/src/modules/m_spanningtree/nickcollide.cpp @@ -108,8 +108,8 @@ bool SpanningTreeUtilities::DoCollision(User* u, TreeServer* server, time_t remo * this "local" nick is actually behind us, send a SAVE out. */ CmdBuilder params("SAVE"); - params.push_back(u->uuid); - params.push_back(ConvToStr(u->age)); + params.push(u->uuid); + params.push(ConvToStr(u->age)); params.Broadcast(); u->ChangeNick(u->uuid, CommandSave::SavedTimestamp); diff --git a/src/modules/m_spanningtree/ping.cpp b/src/modules/m_spanningtree/ping.cpp index 844feb35b..51e87874d 100644 --- a/src/modules/m_spanningtree/ping.cpp +++ b/src/modules/m_spanningtree/ping.cpp @@ -30,10 +30,10 @@ CmdResult CommandPing::Handle(User* user, Params& params) { // PING for us, reply with a PONG CmdBuilder reply("PONG"); - reply.push_back(user->uuid); + reply.push(user->uuid); if (params.size() >= 2) // If there is a second parameter, append it - reply.push_back(params[1]); + reply.push(params[1]); reply.Unicast(user); } diff --git a/src/modules/m_spanningtree/postcommand.cpp b/src/modules/m_spanningtree/postcommand.cpp index 122763279..ee74db0fd 100644 --- a/src/modules/m_spanningtree/postcommand.cpp +++ b/src/modules/m_spanningtree/postcommand.cpp @@ -45,7 +45,7 @@ void SpanningTreeUtilities::RouteCommand(TreeServer* origin, CommandBase* thiscm if (routing.type == ROUTE_TYPE_OPT_BCAST) { params.push('*'); - params.push_back(command); + params.push(command); } else if (routing.type == ROUTE_TYPE_UNICAST || routing.type == ROUTE_TYPE_OPT_UCAST) { @@ -64,8 +64,8 @@ void SpanningTreeUtilities::RouteCommand(TreeServer* origin, CommandBase* thiscm if (encap) { - params.push_back(sdest->GetID()); - params.push_back(command); + params.push(sdest->GetID()); + params.push(command); } } else @@ -83,7 +83,7 @@ void SpanningTreeUtilities::RouteCommand(TreeServer* origin, CommandBase* thiscm std::string output_text = CommandParser::TranslateUIDs(thiscmd->translation, parameters, true, thiscmd); - params.push_back(output_text); + params.push(output_text); if (routing.type == ROUTE_TYPE_MESSAGE) { @@ -104,7 +104,7 @@ void SpanningTreeUtilities::RouteCommand(TreeServer* origin, CommandBase* thiscm std::string message; if (parameters.size() >= 2) message.assign(parameters[1]); - SendChannelMessage(user->uuid, c, message, pfx, parameters.GetTags(), exempts, command.c_str(), origin ? origin->GetSocket() : NULL); + SendChannelMessage(user, c, message, pfx, parameters.GetTags(), exempts, command.c_str(), origin ? origin->GetSocket() : NULL); } else if (dest[0] == '$') { diff --git a/src/modules/m_spanningtree/protocolinterface.cpp b/src/modules/m_spanningtree/protocolinterface.cpp index 56b9370ad..9fe93a389 100644 --- a/src/modules/m_spanningtree/protocolinterface.cpp +++ b/src/modules/m_spanningtree/protocolinterface.cpp @@ -112,13 +112,13 @@ void SpanningTreeProtocolInterface::SendMessage(Channel* target, char status, co const char* cmd = (msgtype == MSG_PRIVMSG ? "PRIVMSG" : "NOTICE"); CUList exempt_list; ClientProtocol::TagMap tags; - Utils->SendChannelMessage(ServerInstance->Config->GetSID(), target, text, status, tags, exempt_list, cmd); + Utils->SendChannelMessage(ServerInstance->FakeClient, target, text, status, tags, exempt_list, cmd); } void SpanningTreeProtocolInterface::SendMessage(User* target, const std::string& text, MessageType msgtype) { CmdBuilder p(msgtype == MSG_PRIVMSG ? "PRIVMSG" : "NOTICE"); - p.push_back(target->uuid); + p.push(target->uuid); p.push_last(text); p.Unicast(target); } diff --git a/src/modules/m_spanningtree/server.cpp b/src/modules/m_spanningtree/server.cpp index b07725d00..9840a84a3 100644 --- a/src/modules/m_spanningtree/server.cpp +++ b/src/modules/m_spanningtree/server.cpp @@ -225,7 +225,7 @@ bool TreeSocket::Inbound_Server(CommandBase::Params& params) } CommandServer::Builder::Builder(TreeServer* server) - : CmdBuilder(server->GetParent()->GetID(), "SERVER") + : CmdBuilder(server->GetParent(), "SERVER") { push(server->GetName()); push(server->GetID()); diff --git a/src/modules/m_spanningtree/sinfo.cpp b/src/modules/m_spanningtree/sinfo.cpp index fbe0f22e2..36f2a31cb 100644 --- a/src/modules/m_spanningtree/sinfo.cpp +++ b/src/modules/m_spanningtree/sinfo.cpp @@ -49,7 +49,7 @@ CmdResult CommandSInfo::HandleServer(TreeServer* server, CommandBase::Params& pa } CommandSInfo::Builder::Builder(TreeServer* server, const char* key, const std::string& val) - : CmdBuilder(server->GetID(), "SINFO") + : CmdBuilder(server, "SINFO") { push(key).push_last(val); } diff --git a/src/modules/m_spanningtree/treeserver.cpp b/src/modules/m_spanningtree/treeserver.cpp index 9a53aede1..43c23a55a 100644 --- a/src/modules/m_spanningtree/treeserver.cpp +++ b/src/modules/m_spanningtree/treeserver.cpp @@ -23,7 +23,6 @@ #include "inspircd.h" #include "xline.h" #include "main.h" -#include "modules/server.h" #include "utils.h" #include "treeserver.h" diff --git a/src/modules/m_spanningtree/treesocket1.cpp b/src/modules/m_spanningtree/treesocket1.cpp index 919b064fe..cccd4f8cc 100644 --- a/src/modules/m_spanningtree/treesocket1.cpp +++ b/src/modules/m_spanningtree/treesocket1.cpp @@ -24,7 +24,6 @@ #include "iohook.h" #include "main.h" -#include "modules/server.h" #include "utils.h" #include "treeserver.h" #include "link.h" diff --git a/src/modules/m_spanningtree/uid.cpp b/src/modules/m_spanningtree/uid.cpp index 954780d99..e6db4e0e5 100644 --- a/src/modules/m_spanningtree/uid.cpp +++ b/src/modules/m_spanningtree/uid.cpp @@ -152,7 +152,7 @@ CmdResult CommandFName::HandleRemote(RemoteUser* src, Params& params) } CommandUID::Builder::Builder(User* user) - : CmdBuilder(TreeServer::Get(user)->GetID(), "UID") + : CmdBuilder(TreeServer::Get(user), "UID") { push(user->uuid); push_int(user->age); diff --git a/src/modules/m_spanningtree/utils.cpp b/src/modules/m_spanningtree/utils.cpp index a90fa5740..f4dca874e 100644 --- a/src/modules/m_spanningtree/utils.cpp +++ b/src/modules/m_spanningtree/utils.cpp @@ -28,7 +28,6 @@ #include "treesocket.h" #include "resolvers.h" #include "commandbuilder.h" -#include "modules/server.h" SpanningTreeUtilities* Utils = NULL; @@ -351,9 +350,9 @@ Link* SpanningTreeUtilities::FindLink(const std::string& name) return NULL; } -void SpanningTreeUtilities::SendChannelMessage(const std::string& prefix, Channel* target, const std::string& text, char status, const ClientProtocol::TagMap& tags, const CUList& exempt_list, const char* message_type, TreeSocket* omit) +void SpanningTreeUtilities::SendChannelMessage(User* source, Channel* target, const std::string& text, char status, const ClientProtocol::TagMap& tags, const CUList& exempt_list, const char* message_type, TreeSocket* omit) { - CmdBuilder msg(prefix, message_type); + CmdBuilder msg(source, message_type); msg.push_tags(tags); msg.push_raw(' '); if (status != 0) diff --git a/src/modules/m_spanningtree/utils.h b/src/modules/m_spanningtree/utils.h index af8e4bc8f..ded180cb3 100644 --- a/src/modules/m_spanningtree/utils.h +++ b/src/modules/m_spanningtree/utils.h @@ -172,7 +172,7 @@ class SpanningTreeUtilities : public classbase /** Sends a PRIVMSG or a NOTICE to a channel obeying an exempt list and an optional prefix */ - void SendChannelMessage(const std::string& prefix, Channel* target, const std::string& text, char status, const ClientProtocol::TagMap& tags, const CUList& exempt_list, const char* message_type, TreeSocket* omit = NULL); + void SendChannelMessage(User* source, Channel* target, const std::string& text, char status, const ClientProtocol::TagMap& tags, const CUList& exempt_list, const char* message_type, TreeSocket* omit = NULL); }; inline void SpanningTreeUtilities::DoOneToMany(const CmdBuilder& params) |
