return true;
}
+bool userrec::ProcessNoticeMasks(const char *sm)
+{
+ bool adding = true;
+ const char *c = sm;
+
+ while (c && *c)
+ {
+ switch (*c)
+ {
+ case '+':
+ adding = true;
+ break;
+ case '-':
+ adding = false;
+ break;
+ default:
+ if ((*c >= 'A') && (*c <= 'z'))
+ this->SetNoticeMask(*c, adding);
+ break;
+ }
+
+ *c++;
+ }
+
+ return true;
+}
+
+bool userrec::IsNoticeMaskSet(unsigned char sm)
+{
+ return (snomasks[sm-65]);
+}
+
+void userrec::SetNoticeMask(unsigned char sm, bool value)
+{
+ snomasks[sm-65] = value;
+}
+
+const char* userrec::FormatNoticeMasks()
+{
+ static char data[MAXBUF];
+ int offset = 0;
+
+ for (int n = 0; n < 64; n++)
+ {
+ if (snomasks[n])
+ data[offset++] = n+65;
+ }
+
+ data[offset] = 0;
+ return data;
+}
+
+
+
+bool userrec::IsModeSet(unsigned char m)
+{
+ return (modes[m-65]);
+}
+
+void userrec::SetMode(unsigned char m, bool value)
+{
+ modes[m-65] = value;
+}
+
+const char* userrec::FormatModes()
+{
+ static char data[MAXBUF];
+ int offset = 0;
+ for (int n = 0; n < 64; n++)
+ {
+ if (modes[n])
+ data[offset++] = n+65;
+ }
+ data[offset] = 0;
+ return data;
+}
+
userrec::userrec()
{
// the PROPER way to do it, AVOID bzero at *ALL* costs
- *password = *nick = *ident = *host = *dhost = *fullname = *modes = *awaymsg = *oper = 0;
+ *password = *nick = *ident = *host = *dhost = *fullname = *awaymsg = *oper = 0;
server = (char*)FindServerNamePtr(Config->ServerName);
reset_due = TIME;
lines_in = fd = lastping = signon = idle_lastmsg = nping = registered = 0;
- modebits = timeout = flood = port = bytes_in = bytes_out = cmds_in = cmds_out = 0;
+ timeout = flood = port = bytes_in = bytes_out = cmds_in = cmds_out = 0;
haspassed = dns_done = false;
recvq = "";
sendq = "";
chans.clear();
invites.clear();
chans.resize(MAXCHANS);
+ memset(modes,0,sizeof(modes));
for (unsigned int n = 0; n < MAXCHANS; n++)
{
for (std::vector<ucrec*>::iterator n = chans.begin(); n != chans.end(); n++)
{
ucrec* x = (ucrec*)*n;
- delete x;
+ DELETE(x);
}
}
int n_sent = write(this->fd,tb,this->sendq.length());
if (n_sent == -1)
{
- this->SetWriteError(strerror(errno));
+ if (errno != EAGAIN)
+ this->SetWriteError(strerror(errno));
}
else
{
char reason[MAXBUF];
strlcpy(reason,r,MAXQUIT-1);
- log(DEBUG,"kill_link: %s '%s'",user->nick,reason);
+ log(DEBUG,"kill_link: %s %d '%s'",user->nick,user->fd,reason);
if (IS_LOCAL(user))
Write(user->fd,"ERROR :Closing link (%s@%s) [%s]",user->ident,user->host,reason);
}
}
clientlist.erase(iter);
- delete user;
+ DELETE(user);
}
}
if (group->size() > 10)
{
WhoWasGroup *a = (WhoWasGroup*)*(group->begin());
- delete a;
+ DELETE(a);
group->pop_front();
}
while ((n->begin() != n->end()) && ((*n->begin())->signon < TIME - 259200)) // 3 days
{
WhoWasGroup *a = *(n->begin());
- delete a;
+ DELETE(a);
n->erase(n->begin());
}
}
if (iter != clientlist.end())
{
userrec* goner = iter->second;
- delete goner;
+ DELETE(goner);
clientlist.erase(iter);
}
}
}
- ServerInstance->SE->AddFd(socket,true,X_ESTAB_CLIENT);
+ if (socket > -1)
+ {
+ ServerInstance->SE->AddFd(socket,true,X_ESTAB_CLIENT);
+ }
WriteServ(clientlist[tempnick]->fd,"NOTICE Auth :*** Looking up your hostname...");
}
return;
}
- r = matches_kline(user->host);
+ r = matches_kline(match_against);
if (r)
{