X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fusers.cpp;h=f51656a55f388e791ced3d559dc10e90da79871d;hb=db07867e945deb72ce103f796e20104a27c5f68a;hp=41f1f097c23efcbef079202bc274a2353af999d1;hpb=5d407fb44c759524881712a80febb86b4506ddbf;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/users.cpp b/src/users.cpp index 41f1f097c..f51656a55 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -110,20 +110,44 @@ bool DoneClassesAndTypes(const char* tag) return true; } +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++) { @@ -416,7 +440,8 @@ void userrec::FlushWriteBuf() 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 { @@ -480,7 +505,7 @@ void kill_link(userrec *user,const char* r) 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); @@ -730,7 +755,10 @@ void AddClient(int socket, int port, bool iscached, in_addr ip4) } } - 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..."); } @@ -807,7 +835,7 @@ void FullConnectUser(userrec* user, CullList* Goners) return; } - r = matches_kline(user->host); + r = matches_kline(match_against); if (r) {