]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
FIX channel user count stuff. next to do, order the user count list
[user/henk/code/inspircd.git] / src / users.cpp
index 41f1f097c23efcbef079202bc274a2353af999d1..f455bb8251e44bc985b2394b4cc5ee3a23e31a2a 100644 (file)
@@ -110,20 +110,98 @@ bool DoneClassesAndTypes(const char* tag)
        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++)
        {
@@ -416,7 +494,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 +559,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 +809,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 +889,7 @@ void FullConnectUser(userrec* user, CullList* Goners)
                        return;
                }
                
-               r = matches_kline(user->host);
+               r = matches_kline(match_against);
                
                if (r)
                {