return true;
}
+bool userrec::HasMode(unsigned char m)
+{
+ return (modes[m-65]);
+}
+
+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)
{