- clientlist[tempnick]->port = port;
-
- // set the registration timeout for this user
- unsigned long class_regtimeout = 90;
- int class_flood = 0;
- long class_threshold = 5;
- long class_sqmax = 262144; // 256kb
- long class_rqmax = 4096; // 4k
-
- for (ClassVector::iterator i = Config->Classes.begin(); i != Config->Classes.end(); i++)
- {
- if (match(ipaddr,i->host.c_str()) && (i->type == CC_ALLOW))
- {
- class_regtimeout = (unsigned long)i->registration_timeout;
- class_flood = i->flood;
- clientlist[tempnick]->pingmax = i->pingtime;
- class_threshold = i->threshold;
- class_sqmax = i->sendqmax;
- class_rqmax = i->recvqmax;
- break;
- }
- }
-
- clientlist[tempnick]->nping = TIME+clientlist[tempnick]->pingmax + Config->dns_timeout;
- clientlist[tempnick]->timeout = TIME+class_regtimeout;
- clientlist[tempnick]->flood = class_flood;
- clientlist[tempnick]->threshold = class_threshold;
- clientlist[tempnick]->sendqmax = class_sqmax;
- clientlist[tempnick]->recvqmax = class_rqmax;
-
- ucrec a;
- a.channel = NULL;
- a.uc_modes = 0;
- for (int i = 0; i < MAXCHANS; i++)
- clientlist[tempnick]->chans.push_back(a);
-
- if (local_users.size() > Config->SoftLimit)
- {
- kill_link(clientlist[tempnick],"No more connections allowed");
- return;
- }
-
- if (local_users.size() >= MAXCLIENTS)
- {
- kill_link(clientlist[tempnick],"No more connections allowed");
- return;
- }
-
- // this is done as a safety check to keep the file descriptors within range of fd_ref_table.
- // its a pretty big but for the moment valid assumption:
- // file descriptors are handed out starting at 0, and are recycled as theyre freed.
- // therefore if there is ever an fd over 65535, 65536 clients must be connected to the
- // irc server at once (or the irc server otherwise initiating this many connections, files etc)
- // 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)
- {
- kill_link(clientlist[tempnick],"Server is full");
- return;
- }
- char* e = matches_exception(ipaddr);
- if (!e)
- {
- char* r = matches_zline(ipaddr);
- if (r)
- {
- char reason[MAXBUF];
- snprintf(reason,MAXBUF,"Z-Lined: %s",r);
- kill_link(clientlist[tempnick],reason);
- return;
- }
- }
- fd_ref_table[socket] = clientlist[tempnick];
+ clientlist[tempnick]->port = port;
+
+ // set the registration timeout for this user
+ unsigned long class_regtimeout = 90;
+ int class_flood = 0;
+ long class_threshold = 5;
+ long class_sqmax = 262144; // 256kb
+ long class_rqmax = 4096; // 4k
+
+ for (ClassVector::iterator i = Config->Classes.begin(); i != Config->Classes.end(); i++)
+ {
+ if ((i->type == CC_ALLOW) && (match(ipaddr,i->host.c_str())))
+ {
+ class_regtimeout = (unsigned long)i->registration_timeout;
+ class_flood = i->flood;
+ clientlist[tempnick]->pingmax = i->pingtime;
+ class_threshold = i->threshold;
+ class_sqmax = i->sendqmax;
+ class_rqmax = i->recvqmax;
+ break;
+ }
+ }
+
+ clientlist[tempnick]->nping = TIME+clientlist[tempnick]->pingmax + Config->dns_timeout;
+ clientlist[tempnick]->timeout = TIME+class_regtimeout;
+ clientlist[tempnick]->flood = class_flood;
+ clientlist[tempnick]->threshold = class_threshold;
+ clientlist[tempnick]->sendqmax = class_sqmax;
+ clientlist[tempnick]->recvqmax = class_rqmax;
+
+ fd_ref_table[socket] = clientlist[tempnick];