]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/netburst.cpp
Merge pull request #1254 from genius3000/insp20+fixPIstatusmsgs
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / netburst.cpp
index 9e6c07425da2f1b65a0a02314ebb2cf3c5d301c6..3bce90eda30895bcb1be9cf67d013ffcfe607e41 100644 (file)
@@ -34,8 +34,9 @@
  */
 void TreeSocket::DoBurst(TreeServer* s)
 {
+       std::string servername = s->GetName();
        ServerInstance->SNO->WriteToSnoMask('l',"Bursting to \2%s\2 (Authentication: %s%s).",
-               s->GetName().c_str(),
+               servername.c_str(),
                capab->auth_fingerprint ? "SSL Fingerprint and " : "",
                capab->auth_challenge ? "challenge-response" : "plaintext password");
        this->CleanNegotiationInfo();
@@ -139,25 +140,28 @@ void TreeSocket::SendFJoins(Channel* c)
                buffer.append(list).append("\r\n");
        }
 
-       int linesize = 1;
+       unsigned int linesize = 1;
        for (BanList::iterator b = c->bans.begin(); b != c->bans.end(); b++)
        {
-               int size = b->data.length() + 2;
-               int currsize = linesize + size;
-               if (currsize <= 350)
-               {
-                       modes.append("b");
-                       params.append(" ").append(b->data);
-                       linesize += size;
-               }
-               if ((modes.length() >= ServerInstance->Config->Limits.MaxModes) || (currsize > 350))
+               unsigned int size = b->data.length() + 2; // "b" and " "
+               unsigned int nextsize = linesize + size;
+
+               if ((modes.length() >= ServerInstance->Config->Limits.MaxModes) || (nextsize > FMODE_MAX_LENGTH))
                {
-                       /* Wrap at MAXMODES */
+                       /* Wrap */
                        buffer.append(":").append(ServerInstance->Config->GetSID()).append(" FMODE ").append(c->name).append(" ").append(ConvToStr(c->age)).append(" +").append(modes).append(params).append("\r\n");
+
                        modes.clear();
                        params.clear();
                        linesize = 1;
                }
+
+               modes.push_back('b');
+
+               params.push_back(' ');
+               params.append(b->data);
+
+               linesize += size;
        }
 
        /* Only send these if there are any */
@@ -239,7 +243,6 @@ void TreeSocket::SendChannelModes()
 void TreeSocket::SendUsers()
 {
        char data[MAXBUF];
-       std::string dataline;
        for (user_hash::iterator u = ServerInstance->Users->clientlist->begin(); u != ServerInstance->Users->clientlist->end(); u++)
        {
                if (u->second->registered == REG_ALL)