From 96a4a1d41e42dba806c2e9954e148ed838262511 Mon Sep 17 00:00:00 2001 From: danieldg Date: Sat, 7 Mar 2009 01:29:45 +0000 Subject: Include explicit parameter list in ProtocolInterface::SendMode Also leave the strings split into deque, there's no need to pack it into a string just to unpack it during the translate. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11181 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_opermodes.cpp | 6 +++++- src/modules/m_samode.cpp | 15 ++------------- src/modules/m_spanningtree/main.cpp | 4 ++-- src/modules/m_spanningtree/main.h | 4 ++-- src/modules/m_spanningtree/protocolinterface.cpp | 21 +++++++++------------ src/modules/m_spanningtree/protocolinterface.h | 2 +- 6 files changed, 21 insertions(+), 31 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_opermodes.cpp b/src/modules/m_opermodes.cpp index 2e947809a..f72f007c4 100644 --- a/src/modules/m_opermodes.cpp +++ b/src/modules/m_opermodes.cpp @@ -109,10 +109,14 @@ class ModuleModesOnOper : public Module } std::deque n; + std::deque t; for (unsigned int j = 1; j < tokens.size(); j++) + { n.push_back(modes[j]); + t.push_back(TR_TEXT); + } - ServerInstance->PI->SendMode(u->uuid, n); + ServerInstance->PI->SendMode(u->uuid, n, t); ServerInstance->SendMode(modes, u); } }; diff --git a/src/modules/m_samode.cpp b/src/modules/m_samode.cpp index 82055dad3..fdc107466 100644 --- a/src/modules/m_samode.cpp +++ b/src/modules/m_samode.cpp @@ -37,20 +37,9 @@ class CommandSamode : public Command { ServerInstance->SNO->WriteToSnoMask('A', std::string(user->nick) + " used SAMODE: " + ServerInstance->Modes->GetLastParse()); - std::deque n; - irc::spacesepstream spaced(ServerInstance->Modes->GetLastParse()); - std::string one; - while (spaced.GetToken(one)) - n.push_back(one); + std::string channel = parameters[0]; + ServerInstance->PI->SendMode(channel, ServerInstance->Modes->GetLastParseParams(), ServerInstance->Modes->GetLastParseTranslate()); - std::string channel = n[0]; - n.pop_front(); - ServerInstance->PI->SendMode(channel, n); - - /* XXX: Yes, this is right. We dont want to propagate the - * actual SAMODE command, just the MODE command generated - * by the Protocol Interface - */ return CMD_LOCALONLY; } else diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 51a9eb025..3d2056eb6 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -800,7 +800,7 @@ void ModuleSpanningTree::OnDelLine(User* user, XLine *x) } } -void ModuleSpanningTree::OnMode(User* user, void* dest, int target_type, const std::string &text, const std::vector &translate) +void ModuleSpanningTree::OnMode(User* user, void* dest, int target_type, const std::deque &text, const std::deque &translate) { if ((IS_LOCAL(user)) && (user->registered == REG_ALL)) { @@ -851,7 +851,7 @@ int ModuleSpanningTree::OnSetAway(User* user, const std::string &awaymsg) return 0; } -void ModuleSpanningTree::ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const std::string &modeline, const std::vector &translate) +void ModuleSpanningTree::ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const std::deque &modeline, const std::deque &translate) { TreeSocket* s = (TreeSocket*)opaque; std::string output_text; diff --git a/src/modules/m_spanningtree/main.h b/src/modules/m_spanningtree/main.h index 19ec2d43c..a0900dd33 100644 --- a/src/modules/m_spanningtree/main.h +++ b/src/modules/m_spanningtree/main.h @@ -174,10 +174,10 @@ class ModuleSpanningTree : public Module void OnLine(User* source, const std::string &host, bool adding, char linetype, long duration, const std::string &reason); virtual void OnAddLine(User *u, XLine *x); virtual void OnDelLine(User *u, XLine *x); - virtual void OnMode(User* user, void* dest, int target_type, const std::string &text, const std::vector &translate); + virtual void OnMode(User* user, void* dest, int target_type, const std::deque &text, const std::deque &translate); virtual int OnStats(char statschar, User* user, string_list &results); virtual int OnSetAway(User* user, const std::string &awaymsg); - virtual void ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const std::string &modeline, const std::vector &translate); + virtual void ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const std::deque &modeline, const std::deque &translate); virtual void ProtoSendMetaData(void* opaque, TargetTypeFlags target_type, void* target, const std::string &extname, const std::string &extdata); virtual void OnEvent(Event* event); virtual void OnLoadModule(Module* mod,const std::string &name); diff --git a/src/modules/m_spanningtree/protocolinterface.cpp b/src/modules/m_spanningtree/protocolinterface.cpp index 9f32963a0..cfc9bbea7 100644 --- a/src/modules/m_spanningtree/protocolinterface.cpp +++ b/src/modules/m_spanningtree/protocolinterface.cpp @@ -68,28 +68,25 @@ void SpanningTreeProtocolInterface::SendTopic(Channel* channel, std::string &top Utils->DoOneToMany(ServerInstance->Config->GetSID(),"FTOPIC", params); } -void SpanningTreeProtocolInterface::SendMode(const std::string &target, parameterlist &modedata) +void SpanningTreeProtocolInterface::SendMode(const std::string &target, const parameterlist &modedata, const std::deque &translate) { if (modedata.empty()) return; std::string outdata; - - /* Warning: in-place translation is only safe for type TR_NICK */ - for (size_t n = 0; n < modedata.size(); n++) - { - ServerInstance->Parser->TranslateUIDs(TR_NICK, modedata[n], outdata); - modedata[n] = outdata; - } + ServerInstance->Parser->TranslateUIDs(translate, modedata, outdata); std::string uidtarget; ServerInstance->Parser->TranslateUIDs(TR_NICK, target, uidtarget); - modedata.insert(modedata.begin(), uidtarget); + + parameterlist outlist; + outlist.push_back(uidtarget); + outlist.push_back(outdata); User* a = ServerInstance->FindNick(uidtarget); if (a) { - Utils->DoOneToMany(ServerInstance->Config->GetSID(),"MODE",modedata); + Utils->DoOneToMany(ServerInstance->Config->GetSID(),"MODE",outlist); return; } else @@ -97,8 +94,8 @@ void SpanningTreeProtocolInterface::SendMode(const std::string &target, paramete Channel* c = ServerInstance->FindChan(target); if (c) { - modedata.insert(modedata.begin() + 1, ConvToStr(c->age)); - Utils->DoOneToMany(ServerInstance->Config->GetSID(),"FMODE",modedata); + outlist.insert(outlist.begin() + 1, ConvToStr(c->age)); + Utils->DoOneToMany(ServerInstance->Config->GetSID(),"FMODE",outlist); } } } diff --git a/src/modules/m_spanningtree/protocolinterface.h b/src/modules/m_spanningtree/protocolinterface.h index 50db7bf05..24b0cee20 100644 --- a/src/modules/m_spanningtree/protocolinterface.h +++ b/src/modules/m_spanningtree/protocolinterface.h @@ -16,7 +16,7 @@ class SpanningTreeProtocolInterface : public ProtocolInterface virtual void SendEncapsulatedData(parameterlist &encap); virtual void SendMetaData(void* target, TargetTypeFlags type, const std::string &key, const std::string &data); virtual void SendTopic(Channel* channel, std::string &topic); - virtual void SendMode(const std::string &target, parameterlist &modedata); + virtual void SendMode(const std::string &target, const parameterlist &modedata, const std::deque &types); virtual void SendModeNotice(const std::string &modes, const std::string &text); virtual void SendSNONotice(const std::string &snomask, const std::string &text); virtual void PushToClient(User* target, const std::string &rawline); -- cgit v1.2.3