Channel::Channel(const std::string &cname, time_t ts)
: name(cname), age(ts), topicset(0)
{
- if (!ServerInstance->chanlist->insert(std::make_pair(cname, this)).second)
+ if (!ServerInstance->chanlist.insert(std::make_pair(cname, this)).second)
throw CoreException("Cannot create duplicate channel " + cname);
}
void Channel::SetMode(ModeHandler* mh, bool on)
{
- modes[mh->GetModeChar() - 65] = on;
+ modes[mh->GetId()] = on;
}
void Channel::SetTopic(User* u, const std::string& ntopic)
if (res == MOD_RES_DENY)
return;
- chan_hash::iterator iter = ServerInstance->chanlist->find(this->name);
+ chan_hash::iterator iter = ServerInstance->chanlist.find(this->name);
/* kill the record */
- if (iter != ServerInstance->chanlist->end())
+ if (iter != ServerInstance->chanlist.end())
{
FOREACH_MOD(OnChannelDelete, (this));
- ServerInstance->chanlist->erase(iter);
+ ServerInstance->chanlist.erase(iter);
}
ClearInvites();
/* This was still iterating up to 190, Channel::modes is only 64 elements -- Om */
for(int n = 0; n < 64; n++)
{
- if(this->modes[n])
+ ModeHandler* mh = ServerInstance->Modes->FindMode(n + 65, MODETYPE_CHANNEL);
+ if (mh && IsModeSet(mh))
{
scratch.push_back(n + 65);
- ModeHandler* mh = ServerInstance->Modes->FindMode(n+'A', MODETYPE_CHANNEL);
- if (!mh)
- continue;
ParamModeBase* pm = mh->IsParameterMode();
if (!pm)
*/
bool has_user = this->HasUser(user);
+ const size_t maxlen = ServerInstance->Config->Limits.MaxLine - 10 - ServerInstance->Config->ServerName.size();
std::string prefixlist;
std::string nick;
for (UserMembIter i = userlist.begin(); i != userlist.end(); ++i)
Membership* memb = i->second;
prefixlist.clear();
- prefixlist.push_back(memb->GetPrefixChar());
+ char prefix = memb->GetPrefixChar();
+ if (prefix)
+ prefixlist.push_back(prefix);
nick = i->first->nick;
FOREACH_MOD(OnNamesListItem, (user, memb, prefixlist, nick));
if (nick.empty())
continue;
- if (list.size() + prefixlist.length() + nick.length() + 1 > 480)
+ if (list.size() + prefixlist.length() + nick.length() + 1 > maxlen)
{
/* list overflowed into multiple numerics */
user->WriteNumeric(RPL_NAMREPLY, list);