2 * IRC - Internet Relay Chat, ircd/client.c
3 * Copyright (C) 1990 Darren Reed
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 1, or (at your option)
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #include "ircd_reply.h"
34 #define BAD_PING ((unsigned int)-2)
38 * returns shortest ping time in attached server or client conf
39 * classes or PINGFREQUENCY
41 unsigned int client_get_ping(const struct Client* acptr)
43 unsigned int ping = 0;
45 struct ConfItem* aconf;
48 for (link = acptr->confs; link; link = link->next) {
49 aconf = link->value.aconf;
50 if (aconf->status & (CONF_CLIENT | CONF_SERVER)) {
51 tmp = get_conf_ping(aconf);
52 if ((tmp != BAD_PING) && ((ping > tmp) || !ping))
59 Debug((DEBUG_DEBUG, "Client %s Ping %d", acptr->name, ping));
64 #define BAD_CONF_CLASS ((unsigned int)-1)
65 #define BAD_CLIENT_CLASS ((unsigned int)-3)
67 unsigned int get_client_class(struct Client *acptr)
70 struct ConnectionClass *cl;
71 unsigned int retc = BAD_CLIENT_CLASS;
73 if (acptr && !IsMe(acptr) && (acptr->confs))
74 for (tmp = acptr->confs; tmp; tmp = tmp->next)
76 if (!tmp->value.aconf || !(cl = tmp->value.aconf->confClass))
78 if (ConClass(cl) > retc || retc == BAD_CLIENT_CLASS)
82 Debug((DEBUG_DEBUG, "Returning Class %d For %s", retc, acptr->name));
87 unsigned int get_sendq(struct Client *cptr)
90 assert(0 != cptr->local);
93 return cptr->max_sendq;
95 else if (cptr->confs) {
97 struct ConnectionClass* cl;
99 for (tmp = cptr->confs; tmp; tmp = tmp->next) {
100 if (!tmp->value.aconf || !(cl = tmp->value.aconf->confClass))
102 if (ConClass(cl) != BAD_CLIENT_CLASS) {
103 cptr->max_sendq = MaxSendq(cl);
104 return cptr->max_sendq;
108 return DEFAULTMAXSENDQLENGTH;