if (params.size() < 3)
return true;
- irc::modestacker modestack(true); /* Modes to apply from the users in the user list */
+ irc::modestacker modestack(Instance, true); /* Modes to apply from the users in the user list */
User* who = NULL; /* User we are currently checking */
std::string channel = params[0]; /* Channel name, as a string */
time_t TS = atoi(params[1].c_str()); /* Timestamp given to us for remote side */
if (params.size() > 3)
params[params.size() - 1] = ":" + params[params.size() - 1];
-
+
Utils->DoOneToAllButSender(source,"FJOIN",params,source);
if (!TS)
{
std::deque<std::string> param_list;
if (Utils->AnnounceTSChange && chan)
- chan->WriteChannelWithServ(Instance->Config->ServerName, "NOTICE %s :TS for %s changed from %lu to %lu", chan->name, chan->name, (unsigned long) ourTS, (unsigned long) TS);
+ chan->WriteChannelWithServ(Instance->Config->ServerName, "NOTICE %s :TS for %s changed from %lu to %lu", chan->name.c_str(), chan->name.c_str(), (unsigned long) ourTS, (unsigned long) TS);
ourTS = TS;
if (!created)
{
if (apply_other_sides_modes)
{
unsigned int idx = 2;
- int numpara = 1;
- const char* modelist[64];
- memset(&modelist,0,sizeof(modelist));
+ std::vector<std::string> modelist;
// Mode parser needs to know what channel to act on.
- modelist[0] = params[0].c_str();
+ modelist.push_back(params[0]);
/* Remember, params[params.size() - 1] is nicklist, and we don't want to apply *that* */
for (idx = 2; idx != (params.size() - 1); idx++)
{
- modelist[numpara++] = params[idx].c_str();
+ modelist.push_back(params[idx]);
}
- this->Instance->SendMode(modelist, numpara, this->Instance->FakeClient);
+ this->Instance->SendMode(modelist, this->Instance->FakeClient);
}
/* Now, process every 'modes,nick' pair */
modes += *unparsedmodes;
else
{
- this->SendError(std::string("Invalid prefix '")+(*unparsedmodes)+"' in FJOIN");
+ this->SendError(std::string("Unknown status mode '")+(*unparsedmodes)+"' in FJOIN");
return false;
}
/* Advance past the comma, to the nick */
usr++;
-
+
/* Check the user actually exists */
who = this->Instance->FindUUID(usr);
if (who)
}
else
{
- Instance->Logs->Log("m_spanningtree",SPARSE,"Warning! Invalid user %s in FJOIN to channel %s IGNORED", usr, channel.c_str());
+ Instance->Logs->Log("m_spanningtree",SPARSE, "Ignored nonexistant user %s in fjoin to %s (probably quit?)", usr, channel.c_str());
continue;
}
}
if (apply_other_sides_modes)
{
std::deque<std::string> stackresult;
- const char* mode_junk[MAXMODES+2];
- mode_junk[0] = channel.c_str();
+ std::vector<std::string> mode_junk;
+ mode_junk.push_back(channel);
while (modestack.GetStackedLine(stackresult))
{
for (size_t j = 0; j < stackresult.size(); j++)
{
- mode_junk[j+1] = stackresult[j].c_str();
+ mode_junk.push_back(stackresult[j]);
}
- Instance->SendMode(mode_junk, stackresult.size() + 1, Instance->FakeClient);
+ Instance->SendMode(mode_junk, Instance->FakeClient);
}
}
if (c)
{
- irc::modestacker stack(false);
+ irc::modestacker stack(Instance, false);
std::deque<std::string> stackresult;
- const char* mode_junk[MAXMODES+2];
- mode_junk[0] = c->name;
+ std::vector<std::string> mode_junk;
+ mode_junk.push_back(c->name);
for (char modeletter = 'A'; modeletter <= 'z'; ++modeletter)
{
while (stack.GetStackedLine(stackresult))
{
for (size_t j = 0; j < stackresult.size(); j++)
- mode_junk[j+1] = stackresult[j].c_str();
+ mode_junk.push_back(stackresult[j]);
- Instance->SendMode(mode_junk, stackresult.size() + 1, Instance->FakeClient);
+ Instance->SendMode(mode_junk, Instance->FakeClient);
}
}
return true;
}
-
+