for (unsigned int n = 0; n < MAXCHANS; n++)
{
- ucrec* x = new ucrec();
- chans[n] = x;
- x->channel = NULL;
- x->uc_modes = 0;
+ chans[n] = new ucrec();
+ chans[n]->channel = NULL;
+ chans[n]->uc_modes = 0;
}
}
for (const char* temp = New->GetIPString(); *temp && j < 64; temp++, j++)
New->dhost[j] = New->host[j] = *temp;
New->dhost[j] = New->host[j] = 0;
-
+
+ Instance->Log(DEBUG,"Hosts set.");
+
// set the registration timeout for this user
unsigned long class_regtimeout = 90;
int class_flood = 0;
long class_sqmax = 262144; // 256kb
long class_rqmax = 4096; // 4k
+ Instance->Log(DEBUG,"Class stuff set.");
+
for (ClassVector::iterator i = Instance->Config->Classes.begin(); i != Instance->Config->Classes.end(); i++)
{
if ((i->type == CC_ALLOW) && (match(ipaddr,i->host.c_str(),true)))
}
}
+ Instance->Log(DEBUG,"nping etc set.");
+
New->nping = Instance->Time() + New->pingmax + Instance->Config->dns_timeout;
New->timeout = Instance->Time() + class_regtimeout;
New->flood = class_flood;
New->sendqmax = class_sqmax;
New->recvqmax = class_rqmax;
+ Instance->Log(DEBUG,"Push back to local users.");
Instance->local_users.push_back(New);
+ Instance->Log(DEBUG,"Check softlimit: %d %d %d",Instance->local_users.size(), Instance->Config->SoftLimit, MAXCLIENTS);
if ((Instance->local_users.size() > Instance->Config->SoftLimit) || (Instance->local_users.size() >= MAXCLIENTS))
{
+ Instance->Log(DEBUG,"Check softlimit failed");
+ Instance->WriteOpers("*** Warning: softlimit value has been reached: %d clients", Instance->Config->SoftLimit);
userrec::QuitUser(Instance, New,"No more connections allowed");
return;
}
+ Instance->Log(DEBUG,"Softlimit passed.");
+
/*
* XXX -
* this is done as a safety check to keep the file descriptors within range of fd_ref_table.
* which for the time being is a physical impossibility (even the largest networks dont have more
* than about 10,000 users on ONE server!)
*/
- if ((unsigned)socket >= MAX_DESCRIPTORS)
+ if ((unsigned int)socket >= MAX_DESCRIPTORS)
{
userrec::QuitUser(Instance, New, "Server is full");
return;
}
+ Instance->Log(DEBUG,"socket < MAX_DESCRIPTORS passed.");
+
ELine* e = Instance->XLines->matches_exception(New);
if (!e)
{
+ Instance->Log(DEBUG,"Doesnt match eline.");
ZLine* r = Instance->XLines->matches_zline(ipaddr);
if (r)
{
+ Instance->Log(DEBUG,"Matches zline.");
char reason[MAXBUF];
snprintf(reason,MAXBUF,"Z-Lined: %s",r->reason);
userrec::QuitUser(Instance, New, reason);
return;
}
+ Instance->Log(DEBUG,"Doesnt match zline.");
}
+ Instance->Log(DEBUG,"Check before AddFd.");
+
if (socket > -1)
{
+ Instance->Log(DEBUG,"Adding fd.");
if (!Instance->SE->AddFd(New))
{
+ Instance->Log(DEBUG,"Oops, fd already exists");
userrec::QuitUser(Instance, New, "Internal error handling connection");
return;
}
* changes dont go out onto the network and produce 'fake direction'.
*/
FOREACH_MOD(I_OnUserConnect,OnUserConnect(this));
- FOREACH_MOD(I_OnPostConnect,OnPostConnect(this));
+
this->registered = REG_ALL;
+
+ FOREACH_MOD(I_OnPostConnect,OnPostConnect(this));
+
ServerInstance->SNO->WriteToSnoMask('c',"Client connecting on port %d: %s!%s@%s [%s]", this->GetPort(), this->nick, this->ident, this->host, this->GetIPString());
}