]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Fix typos
[user/henk/code/inspircd.git] / src / users.cpp
index 09a8c37a553a96895d237540a1793c84e0e788e4..36905beefb5ab0a9d9d02136a9602dbd1569bea4 100644 (file)
@@ -92,31 +92,47 @@ bool DoneClassesAndTypes(ServerConfig* conf, const char* tag)
        return true;
 }
 
-bool userrec::ProcessNoticeMasks(const char *sm)
+std::string userrec::ProcessNoticeMasks(const char *sm)
 {
-       bool adding = true;
+       bool adding = true, oldadding = false;
        const char *c = sm;
+       std::string output = "";
+
+       ServerInstance->Log(DEBUG,"Process notice masks");
 
        while (c && *c)
        {
+               ServerInstance->Log(DEBUG,"Process notice mask %c",*c);
+               
                switch (*c)
                {
                        case '+':
                                adding = true;
-                               break;
+                       break;
                        case '-':
                                adding = false;
-                               break;
+                       break;
                        default:
-                               if ((*c >= 'A') && (*c <= 'z'))
-                                       this->SetNoticeMask(*c, adding);
-                               break;
+                               if ((*c >= 'A') && (*c <= 'z') && (ServerInstance->SNO->IsEnabled(*c)))
+                               {
+                                       if ((!IsNoticeMaskSet(*c) && adding) || (IsNoticeMaskSet(*c) && !adding))
+                                       {
+                                               if ((oldadding != adding) || (sm == c))
+                                                       output += (adding ? '+' : '-');
+
+                                               this->SetNoticeMask(*c, adding);
+
+                                               output += *c;
+                                       }
+                               }
+                               oldadding = adding;
+                       break;
                }
 
                *c++;
        }
 
-       return true;
+       return output;
 }
 
 void userrec::StartDNSLookup()
@@ -275,6 +291,7 @@ userrec::userrec(InspIRCd* Instance) : ServerInstance(Instance)
        invites.clear();
        chans.resize(MAXCHANS);
        memset(modes,0,sizeof(modes));
+       memset(snomasks,0,sizeof(snomasks));
        
        for (unsigned int n = 0; n < MAXCHANS; n++)
        {
@@ -706,7 +723,9 @@ void userrec::QuitUser(InspIRCd* Instance, userrec *user,const std::string &quit
        if (user->registered == REG_ALL)
        {
                if (IS_LOCAL(user))
-                       Instance->WriteOpers("*** Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,reason.c_str());
+                       Instance->SNO->WriteToSnoMask('q',"Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,reason.c_str());
+               else
+                       Instance->SNO->WriteToSnoMask('Q',"Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,reason.c_str());
                user->AddToWhoWas();
        }
 
@@ -1062,7 +1081,7 @@ void userrec::FullConnect(CullList* Goners)
        FOREACH_MOD(I_OnUserConnect,OnUserConnect(this));
        FOREACH_MOD(I_OnPostConnect,OnPostConnect(this));
        this->registered = REG_ALL;
-       ServerInstance->WriteOpers("*** Client connecting on port %d: %s!%s@%s [%s]", this->GetPort(), this->nick, this->ident, this->host, this->GetIPString());
+       ServerInstance->SNO->WriteToSnoMask('c',"Client connecting on port %d: %s!%s@%s [%s]", this->GetPort(), this->nick, this->ident, this->host, this->GetIPString());
 }
 
 /** userrec::UpdateNick()