return UserCount;
}
+ void AddUserCount()
+ {
+ UserCount++;
+ }
+
+ void DelUserCount()
+ {
+ UserCount--;
+ }
+
int GetOperCount()
{
return OperCount;
}
params[7] = ":" + params[7];
DoOneToAllButSender(source,"NICK",params,source);
+
+ // Increment the Source Servers User Count..
+ TreeServer* SourceServer = FindServer(source);
+ if (SourceServer) {
+ SourceServer->AddUserCount();
+ }
+
return true;
}
std::string ret = "";
while ((*line != '\n') && (strlen(line)))
{
- ret = ret + *line;
+ if ((*line != '\r') && (*line != '\n'))
+ ret = ret + *line;
line++;
}
if ((*line == '\n') || (*line == '\r'))
if (params.size() == 1)
{
userrec* x = Srv->FindNick(params[0]);
- if (x->fd > -1)
+ if ((x) && (x->fd > -1))
{
userrec* x = Srv->FindNick(params[0]);
log(DEBUG,"Got IDLE");
{
std::string who_did_the_whois = params[0];
userrec* who_to_send_to = Srv->FindNick(who_did_the_whois);
- if (who_to_send_to->fd > -1)
+ if ((who_to_send_to) && (who_to_send_to->fd > -1))
{
log(DEBUG,"Got final IDLE");
// an incoming reply to a whois we sent out
}
else
{
- log(DEFAULT,"m_spanningtree: Invalid configuration for server '%s', ignored!",L.Name.c_str());
+ if (L.RecvPass == "")
+ {
+ log(DEFAULT,"Invalid configuration for server '%s', recvpass not defined!",L.Name.c_str());
+ }
+ else if (L.SendPass == "")
+ {
+ log(DEFAULT,"Invalid configuration for server '%s', sendpass not defined!",L.Name.c_str());
+ }
+ else if (L.Name == "")
+ {
+ log(DEFAULT,"Invalid configuration, link tag without a name!");
+ }
+ else if (!L.Port)
+ {
+ log(DEFAULT,"Invalid configuration for server '%s', no port specified!",L.Name.c_str());
+ }
}
}
delete Conf;
{
matrix[line][t] = ' ';
}
- strlcpy(&matrix[line][depth],Current->GetName().c_str(),80);
+
+ // For Aligning, we need to work out exactly how deep this thing is, and produce
+ // a 'Spacer' String to compensate.
+ char spacer[40];
+
+ memset(spacer,' ',40);
+ if ((40 - Current->GetName().length() - depth) > 1) {
+ spacer[40 - Current->GetName().length() - depth] = '\0';
+ }
+ else
+ {
+ spacer[5] = '\0';
+ }
+
+ float percent;
+ char text[80];
+ if (clientlist.size() == 0) {
+ // If there are no users, WHO THE HELL DID THE /MAP?!?!?!
+ percent = 0;
+ }
+ else
+ {
+ percent = ((float)Current->GetUserCount() / (float)clientlist.size()) * 100;
+ }
+ snprintf(text, 80, "%s %s%5d [%5.2f%%]", Current->GetName().c_str(), spacer, Current->GetUserCount(), percent);
+ strlcpy(&matrix[line][depth],text,80);
line++;
for (unsigned int q = 0; q < Current->ChildCount(); q++)
{
{
std::string Version = found->GetVersion();
WriteServ(user->fd,"351 %s :%s",user->nick,Version.c_str());
+ if (found == TreeRoot)
+ {
+ std::stringstream out(Config->data005);
+ std::string token = "";
+ std::string line5 = "";
+ int token_counter = 0;
+ while (!out.eof())
+ {
+ out >> token;
+ line5 = line5 + token + " ";
+ token_counter++;
+ if ((token_counter >= 13) || (out.eof() == true))
+ {
+ WriteServ(user->fd,"005 %s %s:are supported by this server",user->nick,line5.c_str());
+ line5 = "";
+ token_counter = 0;
+ }
+ }
+ }
}
else
{
params.push_back(user->ip);
params.push_back(":"+std::string(user->fullname));
DoOneToMany(Srv->GetServerName(),"NICK",params);
+
+ // User is Local, change needs to be reflected!
+ TreeServer* SourceServer = FindServer(user->server);
+ if (SourceServer) {
+ SourceServer->AddUserCount();
+ }
+
}
}
params.push_back(":"+reason);
DoOneToMany(user->nick,"QUIT",params);
}
+ // Regardless, We need to modify the user Counts..
+ TreeServer* SourceServer = FindServer(user->server);
+ if (SourceServer) {
+ SourceServer->DelUserCount();
+ }
+
}
virtual void OnUserPostNick(userrec* user, std::string oldnick)