- /* Set up the flood parameters for this channel */
- int njoins = atoi(joins);
- int nsecs = atoi(secs);
- if ((njoins<1) || (nsecs<1))
- {
- source->WriteServ("608 %s %s :Invalid flood parameter",source->nick,channel->name);
- parameter = "";
- return MODEACTION_DENY;
- }
- else
- {
- if (!channel->GetExt("joinflood", dummy))
- {
- parameter = ConvToStr(njoins) + ":" +ConvToStr(nsecs);
- joinfloodsettings *f = new joinfloodsettings(nsecs,njoins);
- channel->Extend("joinflood", f);
- channel->SetMode('j', true);
- channel->SetModeParam('j', parameter.c_str(), true);
- return MODEACTION_ALLOW;
- }
- else
- {
- std::string cur_param = channel->GetModeParameter('j');
- parameter = ConvToStr(njoins) + ":" +ConvToStr(nsecs);
- if (cur_param == parameter)
- {
- // mode params match
- return MODEACTION_DENY;
- }
- else
- {
- // new mode param, replace old with new
- if ((nsecs > 0) && (njoins > 0))
- {
- joinfloodsettings* f;
- channel->GetExt("joinflood", f);
- delete f;
- f = new joinfloodsettings(nsecs,njoins);
- channel->Shrink("joinflood");
- channel->Extend("joinflood", f);
- channel->SetModeParam('j', cur_param.c_str(), false);
- channel->SetModeParam('j', parameter.c_str(), true);
- return MODEACTION_ALLOW;
- }
- else
- {
- return MODEACTION_DENY;
- }
- }
- }
- }
- }
- else
- {
- source->WriteServ("608 %s %s :Invalid flood parameter",source->nick,channel->name);