IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   Hazır_kodlar (https://www.ircforumlari.net/hazir_kodlar/)
-   -   /stats bilgilerinin turkcelesmesi (https://www.ircforumlari.net/hazir_kodlar/179232-stats-bilgilerinin-turkcelesmesi.html)

toXic 11 Şubat 2009 20:27

/stats bilgilerinin turkcelesmesi
 
m_stats.c


/Stats flags:
B - banversion - Ban versionları listesini gösterir
b - badword - Badword kelimelerini gösterir
C - link - Block linkleri gösterir
d - denylinkauto - denylinkauto
D - denylinkall - Yolla, (Bütünüyle) bağlantıyı blok listesine inkar et
e - exceptthrottle - Kısma valfı blok listesi hariç yolla
E - exceptban - Yasak hariç ve tkl blok listesi hariç yolla
f - spamfilter - Spamfilter listesini gonderir
F - denydcc - Yolla, dcci inkar et, ve dcc blok listelerine izin ver
G - gline - Glineye yolla, ve gzline, listeler
Extended flags: [+/-mrs] [mask] [reason] [setby]
m Return glines Belirtilen maskeye denk olmazken denk olma
s Return glines Ayır, belirtilen isme denk oluyor olan müşteriler tarafından koyma
I - allow - Yolla, blok listesine izin ver
j - officialchans - Offical kanal listesini yolla
K - kline - kline listesini yolla
l - linkinfo - Baglantı bilgisini yolla
L - linkinfoall - Bütün bağlantı bilgisini yolla
M - command - Listeyi yolla, her biri emir, kaç kere kullanıldı
n - banrealname - Yasak realname blok listesini yolla
O - oper - Opers.conf ekli olanları yolla
P - port - Port bilgileri hakkında bilgi yolla
q - bannick - Yasak çentik blok listesini yolla
Q - sqline - Global qline listesini yolla
r - chanrestrict - Kanalın, inkar ettiğini yolla, blok listesine izin ver
S - set - Koyulan blok listesini yolla
s - shun - Shun listesini yollar
Extended flags: [+/-mrs] [mask] [reason] [setby]
m Return shuns Belirtilen maskeye denk olmazken denk olma
r Return shuns Linklenen kanallar bilgisi
s Return shuns shun
t - tld - Tld blok listesini yolla
T - traffic - Trafik bilgisini yolla
u - uptime - Servisci uptimeye yolla, ve bağlantı, sayar
U - uline - Ulines blok listesini yolla
v - denyver - Yolla, uyarlama blok listesini inkar et
V - vhost - Vhost blok listesini yolla
X - notlink - Akım olmayan serviscilerin listesini yolla, bağladı
Y - class - Sınıf blok listesini yolla
toXic Tarafından Turkce diline Cevrilmistir.
Z - mem - Hafıza kullanım bilgisini yolla
End of /STATS report

Kod:

/*
 *  IRC - Internet Relay Chat, src/modules/out.c
 *  (C) 2004 The UnrealIRCd Team
 *
 *  See file AUTHORS in IRC package for additional names of
 *  the programmers.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 1, or (at your option)
 *  any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
#include "config.h"
#include "struct.h"
#include "common.h"
#include "sys.h"
#include "numeric.h"
#include "msg.h"
#include "proto.h"
#include "channel.h"
#include <time.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#include <io.h>
#endif
#include <fcntl.h>
#include "h.h"
#ifdef STRIPBADWORDS
#include "badwords.h"
#endif
#ifdef _WIN32
#include "version.h"
#endif
DLLFUNC int m_stats(aClient *cptr, aClient *sptr, int parc, char *parv[]);
#define MSG_STATS  "STATS"
#define TOK_STATS  "2"
ModuleHeader MOD_HEADER(m_stats)
  = {
 "m_stats",
 "$Id: m_stats.c,v 1.1.2.8.2.17 2006/05/28 18:08:48 syzop Exp $",
 "command /stats",
 "3.2-b8-1",
 NULL
    };
DLLFUNC int MOD_INIT(m_stats)(ModuleInfo *modinfo)
{
 add_Command(MSG_STATS, TOK_STATS, m_stats, 3);
 MARK_AS_OFFICIAL_MODULE(modinfo);
 return MOD_SUCCESS;
}
DLLFUNC int MOD_LOAD(m_stats)(int module_load)
{
 return MOD_SUCCESS;
}
DLLFUNC int MOD_UNLOAD(m_stats)(int module_unload)
{
 if (del_Command(MSG_STATS, TOK_STATS, m_stats) < 0)
 {
  sendto_realops("Failed to delete commands when unloading %s",
  MOD_HEADER(m_stats).name);
 }
 return MOD_SUCCESS;
}
extern MODVAR int  max_connection_count;
extern char *get_client_name2(aClient *, int);
int stats_banversion(aClient *, char *);
int stats_links(aClient *, char *);
int stats_denylinkall(aClient *, char *);
int stats_gline(aClient *, char *);
int stats_exceptban(aClient *, char *);
int stats_allow(aClient *, char *);
int stats_command(aClient *, char *);
int stats_oper(aClient *, char *);
int stats_port(aClient *, char *);
int stats_bannick(aClient *, char *);
int stats_usage(aClient *, char *);
int stats_traffic(aClient *, char *);
int stats_uline(aClient *, char *);
int stats_vhost(aClient *, char *);
int stats_mem(aClient *, char *);
int stats_badwords(aClient *, char *);
int stats_denylinkauto(aClient *, char *);
int stats_exceptthrottle(aClient *, char *);
int stats_denydcc(aClient *, char *);
int stats_kline(aClient *, char *);
int stats_banrealname(aClient *, char *);
int stats_sqline(aClient *, char *);
int stats_linkinfoint(aClient *, char *, int);
int stats_linkinfo(aClient *, char *);
int stats_linkinfoall(aClient *, char *);
int stats_chanrestrict(aClient *, char *);
int stats_shun(aClient *, char *);
int stats_set(aClient *, char *);
int stats_tld(aClient *, char *);
int stats_uptime(aClient *, char *);
int stats_denyver(aClient *, char *);
int stats_notlink(aClient *, char *);
int stats_class(aClient *, char *);
int stats_zip(aClient *, char *);
int stats_officialchannels(aClient *, char *);
int stats_spamfilter(aClient *, char *);
#define SERVER_AS_PARA 0x1
#define FLAGS_AS_PARA 0x2
struct statstab {
 char flag;
 char *longflag;
 int (*func)(aClient *sptr, char *para);
 int options;
};
/* Must be listed lexicographically */
/* Long flags must be lowercase */
struct statstab StatsTable[] = {
 { 'B', "banversion", stats_banversion, 0  },
 { 'C', "link",  stats_links,  0  },
 { 'D', "denylinkall", stats_denylinkall, 0  },
 { 'E', "exceptban", stats_exceptban, 0  },
 { 'F', "denydcc", stats_denydcc,  0  },
 { 'G', "gline",  stats_gline,  FLAGS_AS_PARA },
 { 'H', "link",  stats_links,  0  },
 { 'I', "allow",  stats_allow,  0  },
 { 'K', "kline",  stats_kline,  0  },
 { 'L', "linkinfoall", stats_linkinfoall, SERVER_AS_PARA },
 { 'M', "command", stats_command,  0  },
 { 'O', "oper",  stats_oper,  0  },
 { 'P', "port",  stats_port,  0  },
 { 'Q', "sqline", stats_sqline,  FLAGS_AS_PARA  },
 { 'R', "usage",  stats_usage,  0  },
 { 'S', "set",  stats_set,  0  },
 { 'T', "traffic", stats_traffic,  0  },
 { 'U', "uline",  stats_uline,  0  },
 { 'V', "vhost",  stats_vhost,  0  },
 { 'X', "notlink", stats_notlink,  0  },
 { 'Y', "class",  stats_class,  0  },
 { 'Z', "mem",  stats_mem,  0  },
 { 'b', "badword",  stats_badwords,  0  },
 { 'c', "link",  stats_links,  0  },
 { 'd', "denylinkauto", stats_denylinkauto, 0  },
 { 'e', "exceptthrottle",stats_exceptthrottle, 0  },
 { 'f', "spamfilter", stats_spamfilter, FLAGS_AS_PARA },
 { 'g', "gline",  stats_gline,  FLAGS_AS_PARA },
 { 'h', "link",  stats_links,  0  },
 { 'j', "officialchans", stats_officialchannels, 0  },
 { 'k', "kline",  stats_kline,  0  },
 { 'l', "linkinfo", stats_linkinfo,  SERVER_AS_PARA  },
 { 'm', "command", stats_command,  0  },
 { 'n', "banrealname", stats_banrealname, 0  },
 { 'o', "oper",  stats_oper,  0  },
 { 'q', "bannick", stats_bannick,  FLAGS_AS_PARA },
 { 'r', "chanrestrict", stats_chanrestrict, 0  },
 { 's', "shun",  stats_shun,  FLAGS_AS_PARA },
 { 't', "tld",  stats_tld,  0  },
 { 'u', "uptime", stats_uptime,  0  },
 { 'v', "denyver", stats_denyver,  0  },
 { 'x', "notlink", stats_notlink,  0  },
 { 'y', "class",  stats_class,  0  },
 { 'z', "zip",  stats_zip,  0  },
 { 0,  NULL,  NULL,    0  }
};
int stats_compare(char *s1, char *s2)
{
 /* The long stats flags are always lowercase */
 while (*s1 == tolower(*s2))
 {
  if (*s1 == 0)
  return 0;
  s1++;
  s2++;
 }
 return 1;
}
inline struct statstab *stats_binary_search(char c) {
 int start = 0;
 int stop = sizeof(StatsTable)/sizeof(StatsTable[0])-1;
 int mid;
 while (start <= stop) {
  mid = (start+stop)/2;
  if (c < StatsTable[mid].flag)
  stop = mid-1;
  else if (StatsTable[mid].flag == c)
  return &StatsTable[mid];
  else
  start = mid+1;
 }
 return NULL;
}
inline struct statstab *stats_search(char *s) {
 int i;
 for (i = 0; StatsTable[i].flag; i++)
  if (!stats_compare(StatsTable[i].longflag,s))
  return &StatsTable[i];
 return NULL;
}
inline char *stats_combine_parv(char *p1, char *p2)
{
 static char buf[BUFSIZE+1];
 strcpy(buf, p1);
 strcat(buf, " ");
 strcat(buf, p2);
 return buf;
}
inline void stats_help(aClient *sptr)
{
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name, "/Stats flags:");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "B - banversion - Ban versionları listesini gösterir");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "b - badword - Badword kelimelerini gösterir");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "C - link - Block linkleri gösterir");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "d - denylinkauto - denylinkauto");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "D - denylinkall - Yolla, (Bütünüyle) bağlantıyı blok listesine inkar et");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "e - exceptthrottle - Kısma valfı blok listesi hariç yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "E - exceptban - Yasak hariç ve tkl blok listesi hariç yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "f - spamfilter - Spamfilter listesini gonderir");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "F - denydcc - Yolla, dcci inkar et, ve dcc blok listelerine izin ver");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "G - gline - Glineye yolla, ve gzline, listeler");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "  Extended flags: [+/-mrs] [mask] [reason] [setby]");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "  m Return glinesBelirtilen maskeye denk olmazken denk olma");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "  r Return glines with a reason matching/not matching the specified reason");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "  s Return glines Ayır, belirtilen isme denk oluyor olan müşteriler tarafından koyma");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "I - allow - Yolla, blok listesine izin ver");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "j - officialchans - Offical kanal listesini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "K - kline - kline listesini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "l - linkinfo - Baglantı bilgisini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "L - linkinfoall - Bütün bağlantı bilgisini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "M - command - Listeyi yolla, her biri emir, kaç kere kullanıldı");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "n - banrealname - Yasak realname blok listesini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "O - oper - Opers.conf ekli olanları yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "P - port - Port bilgileri hakkında bilgi yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "q - bannick - Yasak çentik blok listesini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "Q - sqline - Global qline listesini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "r - chanrestrict - Kanalın, inkar ettiğini yolla, blok listesine izin ver");
#ifdef DEBUGMODE
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "R - usage - Kullanım bilgisini yolla");
#endif
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "S - set - Koyulan blok listesini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "s - shun - Shun listesini yollar");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "  Extended flags: [+/-mrs] [mask] [reason] [setby]");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "  m Return shuns Belirtilen maskeye denk olmazken denk olma");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "  r Return shuns Linklenen kanallar bilgisi");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "  s Return shuns shun");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "t - tld - Tld blok listesini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "T - traffic - Trafik bilgisini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "u - uptime - Servisci uptimeye yolla, ve bağlantı, sayar");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "U - uline - Ulines blok listesini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "v - denyver - Yolla, uyarlama blok listesini inkar et");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "V - vhost - Vhost blok listesini yolla");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "X - notlink - Akım olmayan serviscilerin listesini yolla, bağladı");
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "Y - class - Sınıf blok listesini yolla");
        sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
                "toXic Tarafından Turkce diline Cevrilmistir.");
#ifdef ZIP_LINKS
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "z - zip - Ziplinked serviscilerinin hakkında sıkıştırma bilgisini yolla");
#endif
 sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
  "Z - mem - Hafıza kullanım bilgisini yolla");
}
inline int stats_operonly_short(char c)
{
 char l;
 if (!OPER_ONLY_STATS)
  return 0;
 if (*OPER_ONLY_STATS == '*')
  return 1;
 if (strchr(OPER_ONLY_STATS, c))
  return 1;
 l = tolower(c);
 /* Hack for the flags that are case insensitive */
 if (l == 'o' || l == 'y' || l == 'k' || l == 'g' || l == 'x' || l == 'c' ||
  l =='f' || l == 'i' || l == 'h')
 {
  if (islower(c) && strchr(OPER_ONLY_STATS, toupper(c)))
  return 1;
  else if (isupper(c) && strchr(OPER_ONLY_STATS, tolower(c)))
  return 1;
 }
 /* Hack for c/C/H/h */
 if (l == 'c')
 {
  if (strpbrk(OPER_ONLY_STATS, "hH"))
  return 1;
 } else if (l == 'h')
  if (strpbrk(OPER_ONLY_STATS, "cC"))
  return 1;
 return 0;
}
inline int stats_operonly_long(char *s)
{
 OperStat *os;
 for (os = iConf.oper_only_stats_ext; os; os = (OperStat *)os->next)
 {
  if (!stricmp(os->flag, s))
  return 1;
 }
 return 0;
}
/* This is pretty slow, but it isn't used often so it isn't a big deal */
inline char *stats_operonly_long_to_short()
{
 static char buffer[BUFSIZE+1];
 int i = 0;
 OperStat *os;
 for (os = iConf.oper_only_stats_ext; os; os = (OperStat *)os->next)
 {
  struct statstab *stat = stats_search(os->flag);
  if (!stat)
  continue;
  if (!strchr(OPER_ONLY_STATS, stat->flag))
  buffer[i++] = stat->flag;
 }
 buffer[i] = 0;
 return buffer;
}
DLLFUNC CMD_FUNC(m_stats)
{
 struct statstab *stat;
 if (parc == 3 && parv[2][0] != '+' && parv[2][0] != '-')
 {
  if (hunt_server_token(cptr, sptr, MSG_STATS, TOK_STATS, "%s :%s", 2, parc,
      parv) != HUNTED_ISME)
  return 0;
 }
 else if (parc == 4 && parv[2][0] != '+' && parv[2][0] != '-')
 {
  if (hunt_server_token(cptr, sptr, MSG_STATS, TOK_STATS, "%s %s %s", 2, parc,
  parv) != HUNTED_ISME)
    return 0;
 }
 if (parc < 2 || !*parv[1])
 {
  stats_help(sptr);
  sendto_one(sptr, rpl_str(RPL_ENDOFSTATS), me.name, parv[0], '*');
  return 0;
 }
 /* Decide if we are looking for 1 char or a string */
 if (parv[1][0] && !parv[1][1])
 {
  if (!IsAnOper(sptr) && stats_operonly_short(parv[1][0]))
  {
  sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
  return 0;
  }
  /* Old style, we can use a binary search here */
  stat = stats_binary_search(parv[1][0]);
 }
 else
 {
  if (!IsAnOper(sptr) && stats_operonly_long(parv[1]))
  {
  sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
  return 0;
  }
  /* New style, search the hard way */
  stat = stats_search(parv[1]);
 }
 if (stat)
 {
  /* It was a short flag, so check oper only on long flags */
  if (!parv[1][1])
  {
  if (!IsAnOper(sptr) && stats_operonly_long(stat->longflag))
  {
    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
    return 0;
  }
  }
  /* It was a long flag, so check oper only on short flags */
  else
  {
  if (!IsAnOper(sptr) && stats_operonly_short(stat->flag))
  {
    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
    return 0;
  }
  }
  if (stat->options & FLAGS_AS_PARA)
  {
  if (parc > 2 && (parv[2][0] == '+' || parv[2][0] == '-'))
  {
    if (parc > 3)
    stat->func(sptr, stats_combine_parv(parv[2],parv[3]));
    else
    stat->func(sptr, parv[2]);
  }
  else if (parc > 3)
    stat->func(sptr, parv[3]);
  else
    stat->func(sptr, NULL);
  }
  else if (stat->options & SERVER_AS_PARA)
  {
  if (parc > 2)
    stat->func(sptr, parv[2]);
  else
    stat->func(sptr, NULL);
  }
  else
  stat->func(sptr, NULL);
  sendto_one(sptr, rpl_str(RPL_ENDOFSTATS), me.name, parv[0], stat->flag);
  if (!IsULine(sptr))
  sendto_snomask(SNO_EYES, "Stats \'%c\' requested by %s (%s@%s)",
    stat->flag, sptr->name, sptr->user->username, GetHost(sptr));
  else
  sendto_snomask(SNO_JUNK, "Stats \'%c\' requested by %s (%s@%s) [ulined]",
    stat->flag, sptr->name, sptr->user->username, GetHost(sptr));
 }
 else
 {
  stats_help(sptr);
  sendto_one(sptr, rpl_str(RPL_ENDOFSTATS), me.name, parv[0], '*');
  return 0;
 }
 return 0;
}
int stats_banversion(aClient *sptr, char *para)
{
 ConfigItem_ban *bans;
 for (bans = conf_ban; bans; bans = (ConfigItem_ban *)bans->next)
 {
  if (bans->flag.type != CONF_BAN_VERSION)
  continue;
  sendto_one(sptr, rpl_str(RPL_STATSBANVER), me.name, sptr->name,
  bans->mask, bans->reason ? bans->reason : "No Reason");
 }
 return 0;
}
int stats_links(aClient *sptr, char *para)
{
 ConfigItem_link *link_p;
#ifdef DEBUGMODE
 aClient *acptr;
#endif
 for (link_p = conf_link; link_p; link_p = (ConfigItem_link *) link_p->next)
 {
  sendto_one(sptr, ":%s 213 %s C %s@%s * %s %i %s %s%s%s%s%s%s",
  me.name, sptr->name, IsOper(sptr) ? link_p->username : "*",
  IsOper(sptr) ? link_p->hostname : "*", link_p->servername,
  link_p->port,
  link_p->class->name,
  (link_p->options & CONNECT_AUTO) ? "a" : "",
  (link_p->options & CONNECT_SSL) ? "S" : "",
  (link_p->options & CONNECT_ZIP) ? "z" : "",
  (link_p->options & CONNECT_NODNSCACHE) ? "d" : "",
  (link_p->options & CONNECT_NOHOSTCHECK) ? "h" : "",
  (link_p->flag.temporary == 1) ? "T" : "");
#ifdef DEBUGMODE
  sendnotice(sptr, "%s (%p) has refcount %d",
  link_p->servername, link_p, link_p->refcount);
#endif
  if (link_p->hubmask)
  sendto_one(sptr, ":%s 244 %s H %s * %s",
    me.name, sptr->name, link_p->hubmask,
    link_p->servername);
  else if (link_p->leafmask)
  sendto_one(sptr, ":%s 241 %s L %s * %s %d",
    me.name, sptr->name,
    link_p->leafmask, link_p->servername, link_p->leafdepth);
 }
#ifdef DEBUGMODE
 for (acptr = client; acptr; acptr = acptr->next)
  if (MyConnect(acptr) && IsServer(acptr))
  {
  if (!acptr->serv->conf)
    sendnotice(sptr, "client '%s' (%p) has NO CONF attached (? :P)",
    acptr->name, acptr);
  else
    sendnotice(sptr, "client '%s' (%p) has conf %p attached, refcount: %d, temporary: %s",
    acptr->name, acptr,
    acptr->serv->conf,
    acptr->serv->conf->refcount,
    acptr->serv->conf->flag.temporary ? "YES" : "NO");
  }
#endif
 return 0;
}
int stats_denylinkall(aClient *sptr, char *para)
{
 ConfigItem_deny_link *links;
 for (links = conf_deny_link; links; links = (ConfigItem_deny_link *) links->next)
 {
  if (links->flag.type == CRULE_ALL)
  sendto_one(sptr, rpl_str(RPL_STATSDLINE), me.name, sptr->name,
  'D', links->mask, links->prettyrule);
 }
 return 0;
}
int stats_gline(aClient *sptr, char *para)
{
 tkl_stats(sptr, TKL_GLOBAL|TKL_KILL, para);
 tkl_stats(sptr, TKL_GLOBAL|TKL_ZAP, para);
 return 0;
}
int stats_spamfilter(aClient *sptr, char *para)
{
 tkl_stats(sptr, TKL_SPAMF, para);
 tkl_stats(sptr, TKL_GLOBAL|TKL_SPAMF, para);
 return 0;
}
int stats_exceptban(aClient *sptr, char *para)
{
 ConfigItem_except *excepts;
 for (excepts = conf_except; excepts; excepts = (ConfigItem_except *) excepts->next)
 {
  if (excepts->flag.type == CONF_EXCEPT_BAN)
  sendto_one(sptr, rpl_str(RPL_STATSKLINE), me.name,
    sptr->name, "E", excepts->mask, "");
  else if (excepts->flag.type == CONF_EXCEPT_TKL)
  sendto_one(sptr, rpl_str(RPL_STAT***CEPTTKL), me.name,
    sptr->name, tkl_typetochar(excepts->type), excepts->mask);
 }
 return 0;
}
int stats_allow(aClient *sptr, char *para)
{
 ConfigItem_allow *allows;
 for (allows = conf_allow; allows; allows = (ConfigItem_allow *) allows->next)
  sendto_one(sptr, rpl_str(RPL_STATSILINE), me.name,
  sptr->name, allows->ip, allows->hostname, allows->maxperip,
  allows->class->name, allows->server ? allows->server
  : defserv, allows->port ? allows->port : 6667);
 return 0;
}
int stats_command(aClient *sptr, char *para)
{
 int i;
 aCommand *mptr;
 for (i = 0; i < 256; i++)
  for (mptr = CommandHash[i]; mptr; mptr = mptr->next)
  if (mptr->count)
#ifndef DEBUGMODE
  sendto_one(sptr, rpl_str(RPL_STATSCOMMANDS),
    me.name, sptr->name, mptr->cmd,
    mptr->count, mptr->bytes);
#else
  sendto_one(sptr, rpl_str(RPL_STATSCOMMANDS),
    me.name, sptr->name, mptr->cmd,
    mptr->count, mptr->bytes,
    mptr->lticks, mptr->lticks / CLOCKS_PER_SEC,
    mptr->rticks, mptr->rticks / CLOCKS_PER_SEC);
#endif
 for (i = 0; i < 256; i++)
  for (mptr = TokenHash[i]; mptr; mptr = mptr->next)
  if (mptr->count)
#ifndef DEBUGMODE
  sendto_one(sptr, rpl_str(RPL_STATSCOMMANDS),
    me.name, sptr->name, mptr->cmd,
    mptr->count, mptr->bytes);
#else
  sendto_one(sptr, rpl_str(RPL_STATSCOMMANDS),
    me.name, sptr->name, mptr->cmd,
    mptr->count, mptr->bytes,
    mptr->lticks, mptr->lticks / CLOCKS_PER_SEC,
    mptr->rticks, mptr->rticks / CLOCKS_PER_SEC);
#endif
 return 0;
}
int stats_oper(aClient *sptr, char *para)
{
 ConfigItem_oper *oper_p;
 ConfigItem_oper_from *from;
 for (oper_p = conf_oper; oper_p; oper_p = (ConfigItem_oper *) oper_p->next)
 {
  if(!oper_p->from)
  sendto_one(sptr, rpl_str(RPL_STATSOLINE),
      me.name, sptr->name,
      'O', "(none)", oper_p->name,
      oflagstr(oper_p->oflags),
      oper_p->class->name ? oper_p->class->name : "");
  else
  for (from = (ConfigItem_oper_from *) oper_p->from; from; from = (ConfigItem_oper_from *) from->next)
      sendto_one(sptr, rpl_str(RPL_STATSOLINE),
      me.name, sptr->name,
      'O', from->name, oper_p->name,
      oflagstr(oper_p->oflags),
      oper_p->class->name? oper_p->class->name : "");
 }
 return 0;
}
static char *stats_port_helper(aClient *listener)
{
static char buf[256];
 buf[0] = '\0';
 if (listener->umodes & LISTENER_CLIENTSONLY)
  strcat(buf, "clientsonly ");
 if (listener->umodes & LISTENER_SERVERSONLY)
  strcat(buf, "serversonly ");
 if (listener->umodes & LISTENER_JAVACLIENT)
  strcat(buf, "java ");
 if (listener->umodes & LISTENER_SSL)
  strcat(buf, "SSL ");
 return buf;
}
int stats_port(aClient *sptr, char *para)
{
 int i;
 aClient *acptr;
 for (i = 0; i <= LastSlot; i++)
 {
  if (!(acptr = local[i]))
  continue;
    if (!IsListening(acptr))
    continue;
    sendto_one(sptr, ":%s %s %s :*** Listener on %s:%i, clients %i. is %s %s",
    me.name, IsWebTV(sptr) ? "PRIVMSG" : "NOTICE", sptr->name,
    ((ConfigItem_listen *)acptr->class)->ip,
  ((ConfigItem_listen *)acptr->class)->port,
  ((ConfigItem_listen *)acptr->class)->clients,
  ((ConfigItem_listen *)acptr->class)->flag.temporary ? "TEMPORARY" : "PERM",
  stats_port_helper(acptr));
 }
 return 0;
}
int stats_bannick(aClient *sptr, char *para)
{
 tkl_stats(sptr, TKL_NICK, para);
 return 0;
}
int stats_usage(aClient *sptr, char *para)
{
#ifdef DEBUGMODE
 send_usage(sptr, sptr->name);
#endif
 return 0;
}
int stats_traffic(aClient *sptr, char *para)
{
 aClient *acptr;
 int  i;
 struct stats *sp;
 struct stats tmp;
 time_t now = TStime();
 sp = &tmp;
 bcopy((char *)ircstp, (char *)sp, sizeof(*sp));
 for (i = 0; i <= LastSlot; i++)
 {
  if (!(acptr = local[i]))
  continue;
  if (IsServer(acptr))
  {
  sp->is_sbs += acptr->sendB;
  sp->is_sbr += acptr->receiveB;
  sp->is_sks += acptr->sendK;
  sp->is_skr += acptr->receiveK;
  sp->is_sti += now - acptr->firsttime;
  sp->is_sv++;
  if (sp->is_sbs > 1023)
  {
    sp->is_sks += (sp->is_sbs >> 10);
    sp->is_sbs &= 0x3ff;
  }
  if (sp->is_sbr > 1023)
  {
    sp->is_skr += (sp->is_sbr >> 10);
    sp->is_sbr &= 0x3ff;
  }
  }
  else if (IsClient(acptr))
  {
  sp->is_cbs += acptr->sendB;
  sp->is_cbr += acptr->receiveB;
  sp->is_cks += acptr->sendK;
  sp->is_ckr += acptr->receiveK;
  sp->is_cti += now - acptr->firsttime;
  sp->is_cl++;
  if (sp->is_cbs > 1023)
  {
    sp->is_cks += (sp->is_cbs >> 10);
    sp->is_cbs &= 0x3ff;
  }
  if (sp->is_cbr > 1023)
  {
    sp->is_ckr += (sp->is_cbr >> 10);
    sp->is_cbr &= 0x3ff;
  }
  }
  else if (IsUnknown(acptr))
  sp->is_ni++;
 }
 sendto_one(sptr, ":%s %d %s :accepts %u refused %u",
    me.name, RPL_STATSDEBUG, sptr->name, sp->is_ac, sp->is_ref);
 sendto_one(sptr, ":%s %d %s :unknown commands %u prefixes %u",
    me.name, RPL_STATSDEBUG, sptr->name, sp->is_unco, sp->is_unpf);
 sendto_one(sptr, ":%s %d %s :nick collisions %u unknown closes %u",
    me.name, RPL_STATSDEBUG, sptr->name, sp->is_kill, sp->is_ni);
 sendto_one(sptr, ":%s %d %s :wrong direction %u empty %u",
    me.name, RPL_STATSDEBUG, sptr->name, sp->is_wrdi, sp->is_empt);
 sendto_one(sptr, ":%s %d %s :numerics seen %u mode fakes %u",
    me.name, RPL_STATSDEBUG, sptr->name, sp->is_num, sp->is_fake);
 sendto_one(sptr, ":%s %d %s :auth successes %u fails %u",
    me.name, RPL_STATSDEBUG, sptr->name, sp->is_asuc, sp->is_abad);
 sendto_one(sptr, ":%s %d %s :local connections %u udp packets %u",
    me.name, RPL_STATSDEBUG, sptr->name, sp->is_loc, sp->is_udp);
 sendto_one(sptr, ":%s %d %s :Client Server",
    me.name, RPL_STATSDEBUG, sptr->name);
 sendto_one(sptr, ":%s %d %s :connected %u %u",
    me.name, RPL_STATSDEBUG, sptr->name, sp->is_cl, sp->is_sv);
 sendto_one(sptr, ":%s %d %s :bytes sent %ld.%huK %ld.%huK",
    me.name, RPL_STATSDEBUG, sptr->name,
    sp->is_cks, sp->is_cbs, sp->is_sks, sp->is_sbs);
 sendto_one(sptr, ":%s %d %s :bytes recv %ld.%huK %ld.%huK",
    me.name, RPL_STATSDEBUG, sptr->name,
    sp->is_ckr, sp->is_cbr, sp->is_skr, sp->is_sbr);
 sendto_one(sptr, ":%s %d %s :time connected %ld %ld",
    me.name, RPL_STATSDEBUG, sptr->name, sp->is_cti, sp->is_sti);
#ifndef NO_FDLIST
 sendto_one(sptr,
    ":%s %d %s :incoming rate %0.2f kb/s - outgoing rate %0.2f kb/s",
    me.name, RPL_STATSDEBUG, sptr->name, currentrate, currentrate2);
#endif
 return 0;
}
 
int stats_uline(aClient *sptr, char *para)
{
 ConfigItem_ulines *ulines;
 for (ulines = conf_ulines; ulines; ulines = (ConfigItem_ulines *) ulines->next)
  sendto_one(sptr, rpl_str(RPL_STATSULINE), me.name,
  sptr->name, ulines->servername);
 return 0;
}
int stats_vhost(aClient *sptr, char *para)
{
 ConfigItem_oper_from *from;
 ConfigItem_vhost *vhosts;
 for(vhosts = conf_vhost; vhosts; vhosts = (ConfigItem_vhost *) vhosts->next)
 {
  for (from = (ConfigItem_oper_from *)vhosts->from; from; from = (ConfigItem_oper_from *)from->next)
  sendto_one(sptr, ":%s %i %s :vhost %s%s%s %s %s", me.name, RPL_TEXT, sptr->name,
        vhosts->virtuser ? vhosts->virtuser : "", vhosts->virtuser ? "@" : "",
        vhosts->virthost, vhosts->login, from->name);
 }
 return 0;
}
int stats_mem(aClient *sptr, char *para)
{
 extern MODVAR int flinks;
 extern MODVAR Link *freelink;
 extern MODVAR MemoryInfo StatsZ;
 aClient *acptr;
 Ban *ban;
 Link *link;
 aChannel *chptr;
 int  lc = 0,  /* local clients */
      ch = 0,  /* channels */
      lcc = 0,  /* local client conf links */
      rc = 0,  /* remote clients */
      us = 0,  /* user structs */
      chu = 0,  /* channel users */
      chi = 0,  /* channel invites */
      chb = 0,  /* channel bans */
      wwu = 0,  /* whowas users */
      fl = 0,  /* free links */
      cl = 0,  /* classes */
      co = 0;  /* conf lines */
 int  usi = 0,  /* users invited */
      usc = 0,  /* users in channels */
      aw = 0,  /* aways set */
      wwa = 0,  /* whowas aways */
      wlh = 0,  /* watchlist headers */
      wle = 0;  /* watchlist entries */
 u_long chm = 0,  /* memory used by channels */
      chbm = 0,  /* memory used by channel bans */
      lcm = 0,  /* memory used by local clients */
      rcm = 0,  /* memory used by remote clients */
      awm = 0,  /* memory used by aways */
      wwam = 0,  /* whowas away memory used */
      wwm = 0,  /* whowas array memory used */
      com = 0,  /* memory used by conf lines */
      wlhm = 0,  /* watchlist memory used */
      db = 0,  /* memory used by dbufs */
      rm = 0,  /* res memory used */
      totcl = 0, totch = 0, totww = 0, tot = 0;
 if (!IsAnOper(sptr))
 {
  sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name);
  return 0;
 }
 count_whowas_memory(&wwu, &wwam);
 count_watch_memory(&wlh, &wlhm);
 wwm = sizeof(aName) * NICKNAMEHISTORYLENGTH;
 for (acptr = client; acptr; acptr = acptr->next)
 {
  if (MyConnect(acptr))
  {
  lc++;
  /*for (link = acptr->confs; link; link = link->next)
    lcc++;
  wle += acptr->notifies;*/
 
  }
  else
  rc++;
  if (acptr->user)
  {
  Membership *mb;
  us++;
  for (link = acptr->user->invited; link;
      link = link->next)
    usi++;
  for (mb = acptr->user->channel; mb;
      mb = mb->next)
    usc++;
  if (acptr->user->away)
  {
    aw++;
    awm += (strlen(acptr->user->away) + 1);
  }
  }
 }
 lcm = lc * CLIENT_LOCAL_SIZE;
 rcm = rc * CLIENT_REMOTE_SIZE;
 for (chptr = channel; chptr; chptr = chptr->nextch)
 {
  Member *member;
 
  ch++;
  chm += (strlen(chptr->chname) + sizeof(aChannel));
  for (member = chptr->members; member; member = member->next)
  chu++;
  for (link = chptr->invites; link; link = link->next)
  chi++;
  for (ban = chptr->banlist; ban; ban = ban->next)
  {
  chb++;
  chbm += (strlen(ban->banstr) + 1 +
      strlen(ban->who) + 1 + sizeof(Ban));
  }
  for (ban = chptr->exlist; ban; ban = ban->next)
  {
  chb++;
  chbm += (strlen(ban->banstr) + 1 +
      strlen(ban->who) + 1 + sizeof(Ban));
  }
  for (ban = chptr->invexlist; ban; ban = ban->next)
  {
  chb++;
  chbm += (strlen(ban->banstr) + 1 +
      strlen(ban->who) + 1 + sizeof(Ban));
  }
 }
 sendto_one(sptr, ":%s %d %s :Client Local %d(%ld) Remote %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, lc, lcm, rc, rcm);
 sendto_one(sptr, ":%s %d %s :Users %d(%ld) Invites %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, us, (long)(us * sizeof(anUser)),
    usi, (long)(usi * sizeof(Link)));
 sendto_one(sptr, ":%s %d %s :User channels %d(%ld) Aways %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, usc, (long)(usc * sizeof(Link)), aw, awm);
 sendto_one(sptr, ":%s %d %s :WATCH headers %d(%ld) entries %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, wlh, wlhm, wle, (long)(wle * sizeof(Link)));
 sendto_one(sptr, ":%s %d %s :Attached confs %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, lcc, (long)(lcc * sizeof(Link)));
 totcl = lcm + rcm + us * sizeof(anUser) + usc * sizeof(Link) + awm;
 totcl += lcc * sizeof(Link) + usi * sizeof(Link) + wlhm;
 totcl += wle * sizeof(Link);
 sendto_one(sptr, ":%s %d %s :Conflines %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, co, com);
 sendto_one(sptr, ":%s %d %s :Classes %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, StatsZ.classes, StatsZ.classesmem);
 sendto_one(sptr, ":%s %d %s :Channels %d(%ld) Bans %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, ch, chm, chb, chbm);
 sendto_one(sptr, ":%s %d %s :Channel members %d(%ld) invite %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, chu, (long)(chu * sizeof(Link)),
    chi, (long)(chi * sizeof(Link)));
 totch = chm + chbm + chu * sizeof(Link) + chi * sizeof(Link);
 sendto_one(sptr, ":%s %d %s :Whowas users %d(%ld) away %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name,
    wwu, (long)(wwu * sizeof(anUser)),
    wwa, wwam);
 sendto_one(sptr, ":%s %d %s :Whowas array %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, NICKNAMEHISTORYLENGTH, wwm);
 totww = wwu * sizeof(anUser) + wwam + wwm;
 sendto_one(sptr,
    ":%s %d %s :Hash: client %d(%ld) chan %d(%ld) watch %d(%ld)", me.name,
    RPL_STATSDEBUG, sptr->name, U_MAX,
    (long)(sizeof(aHashEntry) * U_MAX), CH_MAX,
    (long)(sizeof(aHashEntry) * CH_MAX), WATCHHASHSIZE,
    (long)(sizeof(aWatch *) * WATCHHASHSIZE));
 db = dbufblocks * sizeof(dbufbuf);
 sendto_one(sptr, ":%s %d %s :Dbuf blocks %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name, dbufblocks, db);
 for (link = freelink; link; link = link->next)
  fl++;
 sendto_one(sptr, ":%s %d %s :Link blocks free %d(%ld) total %d(%ld)",
    me.name, RPL_STATSDEBUG, sptr->name,
    fl, (long)(fl * sizeof(Link)),
    flinks, (long)(flinks * sizeof(Link)));
/* rm = cres_mem(sptr,sptr->name); */
 rm = 0; /* syzop: todo ?????????? */
 tot = totww + totch + totcl + com + cl * sizeof(aClass) + db + rm;
 tot += fl * sizeof(Link);
 tot += sizeof(aHashEntry) * U_MAX;
 tot += sizeof(aHashEntry) * CH_MAX;
 tot += sizeof(aWatch *) * WATCHHASHSIZE;
 sendto_one(sptr, ":%s %d %s :Total: ww %ld ch %ld cl %ld co %ld db %ld",
    me.name, RPL_STATSDEBUG, sptr->name, totww, totch, totcl, com, db);
#if !defined(_WIN32) && !defined(_AMIGA)
#ifdef __alpha
 sendto_one(sptr, ":%s %d %s :TOTAL: %d sbrk(0)-etext: %u",
    me.name, RPL_STATSDEBUG, sptr->name, tot,
    (u_int)sbrk((size_t)0) - (u_int)sbrk0);
#else
 sendto_one(sptr, ":%s %d %s :TOTAL: %ld sbrk(0)-etext: %lu",
    me.name, RPL_STATSDEBUG, sptr->name, tot,
    (u_long)sbrk((size_t)0) - (u_long)sbrk0);
#endif
#else
 sendto_one(sptr, ":%s %d %s :TOTAL: %lu",
    me.name, RPL_STATSDEBUG, sptr->name, tot);
#endif
 return 0;
}
int stats_badwords(aClient *sptr, char *para)
{
#ifdef STRIPBADWORDS
  ConfigItem_badword *words;
  for (words = conf_badword_channel; words; words = (ConfigItem_badword *) words->next) {
 #ifdef FAST_BADWORD_REPLACE
    sendto_one(sptr, ":%s %i %s :c %c %s%s%s %s",
        me.name, RPL_TEXT, sptr->name, words->type & BADW_TYPE_REGEX ? 'R' : 'F',
        (words->type & BADW_TYPE_FAST_L) ? "*" : "", words->word,
        (words->type & BADW_TYPE_FAST_R) ? "*" : "",
        words->action == BADWORD_REPLACE ?
        (words->replace ? words->replace : "<censored>") : "");
 #else
    sendto_one(sptr, ":%s %i %s :c %s %s", me.name, RPL_TEXT,
  sptr->name,  words->word, words->action == BADWORD_REPLACE ?
  (words->replace ? words->replace : "<censored>") : "");
 #endif
  }
  for (words = conf_badword_message; words; words = (ConfigItem_badword *) words->next) {
 #ifdef FAST_BADWORD_REPLACE
    sendto_one(sptr, ":%s %i %s :m %c %s%s%s %s",
        me.name, RPL_TEXT, sptr->name, words->type & BADW_TYPE_REGEX ? 'R' : 'F',
        (words->type & BADW_TYPE_FAST_L) ? "*" : "", words->word,
        (words->type & BADW_TYPE_FAST_R) ? "*" : "",
        words->action == BADWORD_REPLACE ?
        (words->replace ? words->replace : "<censored>") : "");
 #else
    sendto_one(sptr, ":%s %i %s :m %s %s", me.name, RPL_TEXT, sptr->name,
  words->word, words->action == BADWORD_REPLACE ?
  (words->replace ? words->replace : "<censored>") : "");
 #endif
  }
  for (words = conf_badword_quit; words; words = (ConfigItem_badword *) words->next) {
 #ifdef FAST_BADWORD_REPLACE
    sendto_one(sptr, ":%s %i %s :q %c %s%s%s %s",
        me.name, RPL_TEXT, sptr->name, words->type & BADW_TYPE_REGEX ? 'R' : 'F',
        (words->type & BADW_TYPE_FAST_L) ? "*" : "", words->word,
        (words->type & BADW_TYPE_FAST_R) ? "*" : "",
        words->action == BADWORD_REPLACE ?
        (words->replace ? words->replace : "<censored>") : "");
 #else
    sendto_one(sptr, ":%s %i %s :q %s %s", me.name, RPL_TEXT, sptr->name,
  words->word, words->action == BADWORD_REPLACE ?
  (words->replace ? words->replace : "<censored>") : "");
 #endif
  }
#endif
 return 0;
}
int stats_denylinkauto(aClient *sptr, char *para)
{
 ConfigItem_deny_link *links;
 for (links = conf_deny_link; links; links = (ConfigItem_deny_link *) links->next)
 {
  if (links->flag.type == CRULE_AUTO)
  sendto_one(sptr, rpl_str(RPL_STATSDLINE), me.name, sptr->name,
  'd', links->mask, links->prettyrule);
 }
 return 0;
}
int stats_exceptthrottle(aClient *sptr, char *para)
{
 ConfigItem_except *excepts;
 for (excepts = conf_except; excepts; excepts = (ConfigItem_except *) excepts->next)
  if (excepts->flag.type == CONF_EXCEPT_THROTTLE)
  sendto_one(sptr, rpl_str(RPL_STATSELINE),
    me.name, sptr->name, excepts->mask);
 return 0;
}
int stats_denydcc(aClient *sptr, char *para)
{
 ConfigItem_deny_dcc *denytmp;
 ConfigItem_allow_dcc *allowtmp;
 char *filemask, *reason;
 char a = 0;
 for (denytmp = conf_deny_dcc; denytmp; denytmp = (ConfigItem_deny_dcc *) denytmp->next)
 {
  filemask = BadPtr(denytmp->filename) ? "<NULL>" : denytmp->filename;
  reason = BadPtr(denytmp->reason) ? "<NULL>" : denytmp->reason;
  if (denytmp->flag.type2 == CONF_BAN_TYPE_CONF)
  a = 'c';
  if (denytmp->flag.type2 == CONF_BAN_TYPE_AKILL)
  a = 's';
  if (denytmp->flag.type2 == CONF_BAN_TYPE_TEMPORARY)
  a = 'o';
  /* <d> <s|h> <howadded> <filemask> <reason> */
  sendto_one(sptr, ":%s %i %s :d %c %c %s %s", me.name, RPL_TEXT,
  sptr->name,
  (denytmp->flag.type == DCCDENY_SOFT) ? 's' : 'h',
  a, filemask, reason);
 }
 for (allowtmp = conf_allow_dcc; allowtmp; allowtmp = (ConfigItem_allow_dcc *) allowtmp->next)
 {
  filemask = BadPtr(allowtmp->filename) ? "<NULL>" : allowtmp->filename;
  if (allowtmp->flag.type2 == CONF_BAN_TYPE_CONF)
  a = 'c';
  if (allowtmp->flag.type2 == CONF_BAN_TYPE_AKILL)
  a = 's';
  if (allowtmp->flag.type2 == CONF_BAN_TYPE_TEMPORARY)
  a = 'o';
  /* <a> <s|h> <howadded> <filemask> */
  sendto_one(sptr, ":%s %i %s :a %c %c %s", me.name, RPL_TEXT,
  sptr->name,
  (allowtmp->flag.type == DCCDENY_SOFT) ? 's' : 'h',
  a, filemask);
 }
 return 0;
}
int stats_kline(aClient *sptr, char *para)
{
 ConfigItem_ban *bans;
 ConfigItem_except *excepts;
 char type[2];
  for (bans = conf_ban; bans; bans = (ConfigItem_ban *)bans->next) {
  if (bans->flag.type == CONF_BAN_USER) {
  if (bans->flag.type2 == CONF_BAN_TYPE_CONF)
    type[0] = 'K';
  type[1] = '\0';
  sendto_one(sptr, rpl_str(RPL_STATSKLINE),
    me.name, sptr->name, type, bans->mask, bans->reason
    ? bans->reason : "<no reason>");
  }
  else if (bans->flag.type == CONF_BAN_IP) {
  if (bans->flag.type2 == CONF_BAN_TYPE_CONF)
    type[0] = 'Z';
  else if (bans->flag.type2 == CONF_BAN_TYPE_TEMPORARY)
    type[0] = 'z';
  type[1] = '\0';
  sendto_one(sptr, rpl_str(RPL_STATSKLINE),
    me.name, sptr->name, type, bans->mask, bans->reason
    ? bans->reason : "<no reason>");
  }
 }
 tkl_stats(sptr, TKL_KILL, NULL);
 tkl_stats(sptr, TKL_ZAP, NULL);
 for (excepts = conf_except; excepts; excepts = (ConfigItem_except *)excepts->next)
 {
  if (excepts->flag.type == CONF_EXCEPT_BAN)
  sendto_one(sptr, rpl_str(RPL_STATSKLINE),
    me.name, sptr->name, "E", excepts->mask, "");
 }
 return 0;
}
int stats_banrealname(aClient *sptr, char *para)
{
 ConfigItem_ban *bans;
 for (bans = conf_ban; bans; bans = (ConfigItem_ban *)bans->next)
  if (bans->flag.type == CONF_BAN_REALNAME)
  sendto_one(sptr, rpl_str(RPL_STATSNLINE),
    me.name, sptr->name, bans->mask, bans->reason
    ? bans->reason : "<no reason>");
 return 0;
}
int stats_sqline(aClient *sptr, char *para)
{
 tkl_stats(sptr, TKL_NICK|TKL_GLOBAL, para);
 return 0;
}
int stats_chanrestrict(aClient *sptr, char *para)
{
 ConfigItem_deny_channel *dchans;
 ConfigItem_allow_channel *achans;
 for (dchans = conf_deny_channel; dchans; dchans = (ConfigItem_deny_channel *) dchans->next)
  sendto_one(sptr, ":%s %i %s :deny %s %c %s", me.name, RPL_TEXT, sptr->name,
  dchans->channel, dchans->warn ? 'w' : '-', dchans->reason);
  for (achans = conf_allow_channel; achans; achans = (ConfigItem_allow_channel *) achans->next)
  sendto_one(sptr, ":%s %i %s :allow %s", me.name, RPL_TEXT, sptr->name,
  achans->channel);
 return 0;
}
int stats_shun(aClient *sptr, char *para)
{
 tkl_stats(sptr, TKL_GLOBAL|TKL_SHUN, para);
 return 0;
}
/* should this be moved to a seperate stats flag? */
int stats_officialchannels(aClient *sptr, char *para)
{
ConfigItem_offchans *x;
 for (x = conf_offchans; x; x = (ConfigItem_offchans *)x->next)
  sendto_one(sptr, ":%s %i %s :%s %s",
  me.name, RPL_TEXT, sptr->name, x->chname, x->topic ? x->topic : "");
 return 0;
}
int stats_set(aClient *sptr, char *para)
{
 char *uhallow;
 if (!IsAnOper(sptr))
 {
  sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name);
  return 0;
 }
 sendto_one(sptr, ":%s %i %s :*** Configuration Report ***",
    me.name, RPL_TEXT, sptr->name);
 sendto_one(sptr, ":%s %i %s :network-name: %s", me.name, RPL_TEXT,
    sptr->name, ircnetwork);
 sendto_one(sptr, ":%s %i %s :default-server: %s", me.name, RPL_TEXT,
    sptr->name, defserv);
 sendto_one(sptr, ":%s %i %s :services-server: %s", me.name, RPL_TEXT,
    sptr->name, SERVICES_NAME);
 sendto_one(sptr, ":%s %i %s :stats-server: %s", me.name, RPL_TEXT,
    sptr->name, STATS_SERVER);
 sendto_one(sptr, ":%s %i %s :hiddenhost-prefix: %s", me.name, RPL_TEXT,
    sptr->name, hidden_host);
 sendto_one(sptr, ":%s %i %s :help-channel: %s", me.name, RPL_TEXT,
    sptr->name, helpchan);
 sendto_one(sptr, ":%s %i %s :cloak-keys: %s", me.name, RPL_TEXT, sptr->name,
  CLOAK_KEYCRC);
 sendto_one(sptr, ":%s %i %s :kline-address: %s", me.name, RPL_TEXT,
    sptr->name, KLINE_ADDRESS);
 if (GLINE_ADDRESS)
  sendto_one(sptr, ":%s %i %s :gline-address: %s", me.name, RPL_TEXT,
      sptr->name, GLINE_ADDRESS);
 sendto_one(sptr, ":%s %i %s :modes-on-connect: %s", me.name, RPL_TEXT,
    sptr->name, get_modestr(CONN_MODES));
 sendto_one(sptr, ":%s %i %s :modes-on-oper: %s", me.name, RPL_TEXT,
    sptr->name, get_modestr(OPER_MODES));
 *modebuf = *parabuf = 0;
 chmode_str(iConf.modes_on_join, modebuf, parabuf);
 sendto_one(sptr, ":%s %i %s :modes-on-join: %s %s", me.name, RPL_TEXT,
  sptr->name, modebuf, parabuf);
 sendto_one(sptr, ":%s %i %s :snomask-on-oper: %s", me.name, RPL_TEXT,
    sptr->name, OPER_SNOMASK);
 sendto_one(sptr, ":%s %i %s :snomask-on-connect: %s", me.name, RPL_TEXT,
    sptr->name, CONNECT_SNOMASK ? CONNECT_SNOMASK : "+");
 if (OPER_ONLY_STATS)
 {
  char *longflags = stats_operonly_long_to_short();
  sendto_one(sptr, ":%s %i %s :oper-only-stats: %s%s", me.name, RPL_TEXT,
  sptr->name, OPER_ONLY_STATS, longflags ? longflags : "");
 }
 if (RESTRICT_USERMODES)
  sendto_one(sptr, ":%s %i %s :restrict-usermodes: %s", me.name, RPL_TEXT,
  sptr->name, RESTRICT_USERMODES);
 if (RESTRICT_CHANNELMODES)
  sendto_one(sptr, ":%s %i %s :restrict-channelmodes: %s", me.name, RPL_TEXT,
  sptr->name, RESTRICT_CHANNELMODES);
 if (RESTRICT_EXTENDEDBANS)
  sendto_one(sptr, ":%s %i %s :restrict-extendedbans: %s", me.name, RPL_TEXT,
  sptr->name, RESTRICT_EXTENDEDBANS);
 switch (UHOST_ALLOWED)
 {
  case UHALLOW_ALWAYS:
  uhallow = "always";
  break;
  case UHALLOW_NEVER:
  uhallow = "never";
  break;
  case UHALLOW_NOCHANS:
  uhallow = "not-on-channels";
  break;
  case UHALLOW_REJOIN:
  uhallow = "force-rejoin";
  break;
 }
 sendto_one(sptr, ":%s %i %s :anti-spam-quit-message-time: %s", me.name, RPL_TEXT,
  sptr->name, pretty_time_val(ANTI_SPAM_QUIT_MSG_TIME));
 sendto_one(sptr, ":%s %i %s :channel-command-prefix: %s", me.name, RPL_TEXT, sptr->name, CHANCMDPFX ? CHANCMDPFX : "`");
#ifdef USE_SSL
 sendto_one(sptr, ":%s %i %s :ssl::egd: %s", me.name, RPL_TEXT,
  sptr->name, EGD_PATH ? EGD_PATH : (USE_EGD ? "1" : "0"));
 sendto_one(sptr, ":%s %i %s :ssl::certificate: %s", me.name, RPL_TEXT,
  sptr->name, SSL_SERVER_CERT_PEM);
 sendto_one(sptr, ":%s %i %s :ssl::key: %s", me.name, RPL_TEXT,
  sptr->name, SSL_SERVER_KEY_PEM);
 sendto_one(sptr, ":%s %i %s :ssl::trusted-ca-file: %s", me.name, RPL_TEXT, sptr->name,
  iConf.trusted_ca_file ? iConf.trusted_ca_file : "<none>");
 sendto_one(sptr, ":%s %i %s :ssl::options: %s %s %s", me.name, RPL_TEXT, sptr->name,
  iConf.ssl_options & SSLFLAG_FAILIFNOCERT ? "FAILIFNOCERT" : "",
  iConf.ssl_options & SSLFLAG_VERIFYCERT ? "VERIFYCERT" : "",
  iConf.ssl_options & SSLFLAG_DONOTACCEPTSELFSIGNED ? "DONOTACCEPTSELFSIGNED" : "");
#endif
 sendto_one(sptr, ":%s %i %s :options::show-opermotd: %d", me.name, RPL_TEXT,
    sptr->name, SHOWOPERMOTD);
 sendto_one(sptr, ":%s %i %s :options::hide-ulines: %d", me.name, RPL_TEXT,
    sptr->name, HIDE_ULINES);
 sendto_one(sptr, ":%s %i %s :options::webtv-support: %d", me.name, RPL_TEXT,
    sptr->name, WEBTV_SUPPORT);
 sendto_one(sptr, ":%s %i %s :options::identd-check: %d", me.name, RPL_TEXT,
    sptr->name, IDENT_CHECK);
 sendto_one(sptr, ":%s %i %s :options::fail-oper-warn: %d", me.name, RPL_TEXT,
    sptr->name, FAILOPER_WARN);
 sendto_one(sptr, ":%s %i %s :options::show-connect-info: %d", me.name, RPL_TEXT,
    sptr->name, SHOWCONNECTINFO);
 sendto_one(sptr, ":%s %i %s :options::dont-resolve: %d", me.name, RPL_TEXT,
    sptr->name, DONT_RESOLVE);
 sendto_one(sptr, ":%s %i %s :options::mkpasswd-for-everyone: %d", me.name, RPL_TEXT,
    sptr->name, MKPASSWD_FOR_EVERYONE);
 sendto_one(sptr, ":%s %i %s :options::allow-part-if-shunned: %d", me.name, RPL_TEXT,
    sptr->name, ALLOW_PART_IF_SHUNNED);
 sendto_one(sptr, ":%s %i %s :maxchannelsperuser: %i", me.name, RPL_TEXT,
    sptr->name, MAXCHANNELSPERUSER);
 sendto_one(sptr, ":%s %i %s :auto-join: %s", me.name, RPL_TEXT,
    sptr->name, AUTO_JOIN_CHANS ? AUTO_JOIN_CHANS : "0");
 sendto_one(sptr, ":%s %i %s :oper-auto-join: %s", me.name,
    RPL_TEXT, sptr->name, OPER_AUTO_JOIN_CHANS ? OPER_AUTO_JOIN_CHANS : "0");
 sendto_one(sptr, ":%s %i %s :static-quit: %s", me.name,
  RPL_TEXT, sptr->name, STATIC_QUIT ? STATIC_QUIT : "<none>");
 sendto_one(sptr, ":%s %i %s :static-part: %s", me.name,
  RPL_TEXT, sptr->name, STATIC_PART ? STATIC_PART : "<none>");
 sendto_one(sptr, ":%s %i %s :who-limit: %d", me.name, RPL_TEXT,
  sptr->name, WHOLIMIT);
 sendto_one(sptr, ":%s %i %s :silence-limit: %d", me.name, RPL_TEXT,
  sptr->name, SILENCE_LIMIT);
 sendto_one(sptr, ":%s %i %s :dns::timeout: %s", me.name, RPL_TEXT,
    sptr->name, pretty_time_val(HOST_TIMEOUT));
 sendto_one(sptr, ":%s %i %s :dns::retries: %d", me.name, RPL_TEXT,
    sptr->name, HOST_RETRIES);
 sendto_one(sptr, ":%s %i %s :dns::nameserver: %s", me.name, RPL_TEXT,
    sptr->name, NAME_SERVER);
 if (DNS_BINDIP)
  sendto_one(sptr, ":%s %i %s :dns::bind-ip: %s", me.name, RPL_TEXT,
      sptr->name, DNS_BINDIP);
 sendto_one(sptr, ":%s %i %s :ban-version-tkl-time: %s", me.name, RPL_TEXT,
    sptr->name, pretty_time_val(BAN_VERSION_TKL_TIME));
#ifdef THROTTLING
 sendto_one(sptr, ":%s %i %s :throttle::period: %s", me.name, RPL_TEXT,
  sptr->name, THROTTLING_PERIOD ? pretty_time_val(THROTTLING_PERIOD) : "disabled");
 sendto_one(sptr, ":%s %i %s :throttle::connections: %d", me.name, RPL_TEXT,
  sptr->name, THROTTLING_COUNT ? THROTTLING_COUNT : -1);
#endif
 sendto_one(sptr, ":%s %i %s :anti-flood::unknown-flood-bantime: %s", me.name, RPL_TEXT,
  sptr->name, pretty_time_val(UNKNOWN_FLOOD_BANTIME));
 sendto_one(sptr, ":%s %i %s :anti-flood::unknown-flood-amount: %ldKB", me.name, RPL_TEXT,
  sptr->name, UNKNOWN_FLOOD_AMOUNT);
#ifdef NO_FLOOD_AWAY
 if (AWAY_PERIOD)
 {
  sendto_one(sptr, ":%s %i %s :anti-flood::away-flood: %d per %s", me.name, RPL_TEXT,
  sptr->name, AWAY_COUNT, pretty_time_val(AWAY_PERIOD));
 }
#endif
 sendto_one(sptr, ":%s %i %s :anti-flood::nick-flood: %d per %s", me.name, RPL_TEXT,
  sptr->name, NICK_COUNT, pretty_time_val(NICK_PERIOD));
 sendto_one(sptr, ":%s %i %s :ident::connect-timeout: %s", me.name, RPL_TEXT,
  sptr->name, pretty_time_val(IDENT_CONNECT_TIMEOUT));
 sendto_one(sptr, ":%s %i %s :ident::read-timeout: %s", me.name, RPL_TEXT,
  sptr->name, pretty_time_val(IDENT_READ_TIMEOUT));
#ifdef NEWCHFLOODPROT
 sendto_one(sptr, ":%s %i %s :modef-default-unsettime: %hd", me.name, RPL_TEXT,
  sptr->name, (unsigned short)MODEF_DEFAULT_UNSETTIME);
 sendto_one(sptr, ":%s %i %s :modef-max-unsettime: %hd", me.name, RPL_TEXT,
  sptr->name, (unsigned short)MODEF_MAX_UNSETTIME);
#endif
 sendto_one(sptr, ":%s %i %s :spamfilter::ban-time: %s", me.name, RPL_TEXT,
  sptr->name, pretty_time_val(SPAMFILTER_BAN_TIME));
 sendto_one(sptr, ":%s %i %s :spamfilter::ban-reason: %s", me.name, RPL_TEXT,
  sptr->name, SPAMFILTER_BAN_REASON);
 sendto_one(sptr, ":%s %i %s :spamfilter::virus-help-channel: %s", me.name, RPL_TEXT,
  sptr->name, SPAMFILTER_VIRUSCHAN);
 if (SPAMFILTER_EXCEPT)
  sendto_one(sptr, ":%s %i %s :spamfilter::except: %s", me.name, RPL_TEXT,
  sptr->name, SPAMFILTER_EXCEPT);
 sendto_one(sptr, ":%s %i %s :check-target-nick-bans: %s", me.name, RPL_TEXT,
  sptr->name, CHECK_TARGET_NICK_BANS ? "yes" : "no");
 sendto_one(sptr, ":%s %i %s :hosts::global: %s", me.name, RPL_TEXT,
    sptr->name, oper_host);
 sendto_one(sptr, ":%s %i %s :hosts::admin: %s", me.name, RPL_TEXT,
    sptr->name, admin_host);
 sendto_one(sptr, ":%s %i %s :hosts::local: %s", me.name, RPL_TEXT,
    sptr->name, locop_host);
 sendto_one(sptr, ":%s %i %s :hosts::servicesadmin: %s", me.name, RPL_TEXT,
    sptr->name, sadmin_host);
 sendto_one(sptr, ":%s %i %s :hosts::netadmin: %s", me.name, RPL_TEXT,
    sptr->name, netadmin_host);
 sendto_one(sptr, ":%s %i %s :hosts::coadmin: %s", me.name, RPL_TEXT,
    sptr->name, coadmin_host);
 sendto_one(sptr, ":%s %i %s :hosts::host-on-oper-up: %i", me.name, RPL_TEXT, sptr->name,
    iNAH);
 RunHook2(HOOKTYPE_STATS, sptr, "S");
 return 1;
}
int stats_tld(aClient *sptr, char *para)
{
 ConfigItem_tld *tld;
 for (tld = conf_tld; tld; tld = (ConfigItem_tld *) tld->next)
  sendto_one(sptr, rpl_str(RPL_STATSTLINE), me.name, sptr->name,
  tld->mask, tld->motd_file, tld->rules_file ?
  tld->rules_file : "none");
 return 0;
}
int stats_uptime(aClient *sptr, char *para)
{
 time_t tmpnow;
 tmpnow = TStime() - me.since;
 sendto_one(sptr, rpl_str(RPL_STATSUPTIME), me.name, sptr->name,
    tmpnow / 86400, (tmpnow / 3600) % 24, (tmpnow / 60) % 60,
    tmpnow % 60);
 sendto_one(sptr, rpl_str(RPL_STATSCONN), me.name, sptr->name,
    max_connection_count, IRCstats.me_max);
 return 0;
}
int stats_denyver(aClient *sptr, char *para)
{
 ConfigItem_deny_version *versions;
 for (versions = conf_deny_version; versions; versions = (ConfigItem_deny_version *) versions->next)
  sendto_one(sptr, rpl_str(RPL_STATSVLINE), me.name, sptr->name,
  versions->version, versions->flags, versions->mask);
 return 0;
}
int stats_notlink(aClient *sptr, char *para)
{
 ConfigItem_link *link_p;
 for (link_p = conf_link; link_p; link_p = (ConfigItem_link *) link_p->next)
 {
  if (!find_server_quick(link_p->servername))
  sendto_one(sptr, rpl_str(RPL_STATSXLINE),
    me.name, sptr->name, link_p->servername,
    link_p->port);
 }
 return 0;
}
int stats_class(aClient *sptr, char *para)
{
 ConfigItem_class *classes;
 for (classes = conf_class; classes; classes = (ConfigItem_class *) classes->next)
 {
  sendto_one(sptr, rpl_str(RPL_STATSYLINE),
  me.name, sptr->name, classes->name, classes->pingfreq, classes->connfreq,
  classes->maxclients, classes->sendq, classes->recvq ? classes->recvq : CLIENT_FLOOD);
#ifdef DEBUGMODE
  sendnotice(sptr, "class '%s' has clients=%d, xrefcount=%d",
  classes->name, classes->clients, classes->xrefcount);
#endif
 }
 return 0;
}
int stats_zip(aClient *sptr, char *para)
{
#ifdef ZIP_LINKS
 int i;
 aClient *acptr;
 for (i=0; i <= LastSlot; i++)
 {
  if (!(acptr = local[i]))
  continue;
  if (!IsServer(acptr) || !IsZipped(acptr))
  continue;
  if (acptr->zip->in->total_out && acptr->zip->out->total_in)
  {
  sendto_one(sptr,
    ":%s %i %s :Zipstats for link to %s (compresslevel %d): decompressed (in): %01lu=>%01lu (%3.1f%%), compressed (out): %01lu=>%01lu (%3.1f%%)",
    me.name, RPL_TEXT, sptr->name,
    IsAnOper(sptr) ? get_client_name(acptr, TRUE) : acptr->name,
    acptr->serv->conf->compression_level ?
    acptr->serv->conf->compression_level : ZIP_DEFAULT_LEVEL,
    acptr->zip->in->total_in, acptr->zip->in->total_out,
    (100.0*(float)acptr->zip->in->total_in) /(float)acptr->zip->in->total_out,
    acptr->zip->out->total_in, acptr->zip->out->total_out,
    (100.0*(float)acptr->zip->out->total_out) /(float)acptr->zip->out->total_in);
  }
  else
  sendto_one(sptr, ":%s %i %s :Zipstats for link to %s: unavailable",
    me.name, RPL_TEXT, sptr->name, acptr->name);
 }
#endif
 return 0;
}
int stats_linkinfo(aClient *sptr, char *para)
{
 return stats_linkinfoint(sptr, para, 0);
}
int stats_linkinfoall(aClient *sptr, char *para)
{
 return stats_linkinfoint(sptr, para, 1);
}
int stats_linkinfoint(aClient *sptr, char *para, int all)
{
#ifndef DEBUGMODE
 static char Sformat[] =
    ":%s %d %s SendQ SendM SendBytes RcveM RcveBytes Open_since :Idle";
 static char Lformat[] = ":%s %d %s %s%s %u %u %u %u %u %u :%u";
#else
 static char Sformat[] =
    ":%s %d %s SendQ SendM SendBytes RcveM RcveBytes Open_since CPU :Idle";
 static char Lformat[] = ":%s %d %s %s%s %u %u %u %u %u %u %s";
 char pbuf[96];  /* Should be enough for to ints */
#endif
 int remote = 0;
 int wilds = 0;
 int doall = 0;
 int showports = IsAnOper(sptr);
 int i;
 aClient *acptr;
 /*
  * send info about connections which match, or all if the
  * mask matches me.name.  Only restrictions are on those who
  * are invisible not being visible to 'foreigners' who use
  * a wild card based search to list it.
  */
 if (para)
 {
  if (!mycmp(para, me.name))
  doall = 2;
  else if (match(para, me.name) == 0)
  doall = 1;
  if (index(para, '*') || index(para, '?'))
  wilds = 1;
 }
 else
  para = me.name;
 sendto_one(sptr, Sformat, me.name, RPL_STATSLINKINFO, sptr->name);
 if (!MyClient(sptr))
 {
  remote = 1;
  wilds = 0;
 }
 for (i = 0; i <= LastSlot; i++)
 {
  if (!(acptr = local[i]))
  continue;
  if (IsInvisible(acptr) && (doall || wilds) &&
  !(MyConnect(sptr) && IsOper(sptr)) &&
  !IsAnOper(acptr) && (acptr != sptr))
  continue;
  if (remote && doall && !IsServer(acptr) && !IsMe(acptr))
  continue;
  if (remote && !doall && IsServer(acptr))
  continue;
  if (!doall && wilds && match(para, acptr->name))
  continue;
  if (!(para && (IsServer(acptr)
  || (acptr->flags & FLAGS_LISTEN))) && !(doall
  || wilds) && mycmp(para, acptr->name))
  continue;
#ifdef DEBUGMODE
  ircsprintf(pbuf, "%ld :%ld", (long)acptr->cputime,
        (long)(acptr->user && MyConnect(acptr)) ? TStime() - acptr->last : 0);
#endif
  if (IsOper(sptr))
  {
  sendto_one(sptr, Lformat, me.name,
    RPL_STATSLINKINFO, sptr->name,
    all ?
    (get_client_name2(acptr, showports)) :
    (get_client_name(acptr, FALSE)),
    get_cptr_status(acptr),
    (int)DBufLength(&acptr->sendQ),
    (int)acptr->sendM, (int)acptr->sendK,
    (int)acptr->receiveM,
    (int)acptr->receiveK,
    TStime() - acptr->firsttime,
#ifndef DEBUGMODE
    (acptr->user && MyConnect(acptr)) ?
    TStime() - acptr->last : 0);
#else
    pbuf);
#endif
  if (!IsServer(acptr) && !IsMe(acptr) && IsAnOper(acptr) && sptr != acptr)
    sendto_one(acptr,
    ":%s %s %s :*** %s did a /stats L on you! IP may have been shown",
    me.name, IsWebTV(acptr) ? "PRIVMSG" : "NOTICE",
    acptr->name, sptr->name);
  }
  else if (!strchr(acptr->name, '.'))
  sendto_one(sptr, Lformat, me.name,
    RPL_STATSLINKINFO, sptr->name,
    IsHidden(acptr) ? acptr->name :
    all ? /* Potvin - PreZ */
    get_client_name2(acptr, showports) :
    get_client_name(acptr, FALSE),
    get_cptr_status(acptr),
    (int)DBufLength(&acptr->sendQ),
    (int)acptr->sendM, (int)acptr->sendK,
    (int)acptr->receiveM,
    (int)acptr->receiveK,
    TStime() - acptr->firsttime,
#ifndef DEBUGMODE
    (acptr->user && MyConnect(acptr)) ?
    TStime() - acptr->last : 0);
#else
    pbuf);
#endif
 }
#ifdef DEBUGMODE
 for (acptr = client; acptr; acptr = acptr->next)
 {
  if (IsServer(acptr))
  sendto_one(sptr, ":%s NOTICE %s :Server %s is %s",
    me.name, sptr->name, acptr->name, acptr->serv->flags.synced ? "SYNCED" : "NOT SYNCED!!");
 }
#endif
 return 0;
}

Kod:


make ve ./unreal restart


SiberShell 15 Şubat 2009 02:29

Cevap: /stats bilgilerinin turkcelesmesi
 
güzel kardeşim bu kodu nereye atıcaz paylaşim güzel eyw. da birde devamını getrsen diorum :)

onNes 15 Şubat 2009 03:07

Cevap: /stats bilgilerinin turkcelesmesi
 
Modulu burda alıyorsunuz. Ftp adresinize login oluyorsunuz. Ardından Unreal3.2 klasörüne giriyorsunuz. Unrealin içinden src klasörüne giriyorsunuz. src klasöründen module klasörüne giriyorsunuz. Txt dosyasına yapıştır. İsmide böyle olur m_stats.txt olarak gecer onu sen sonundaki txt yazını silersen normal module dosyasına döner zaten. Bu işlerden sonra ssh veya telnete login olun. cd Unreal3.2 içine bu verdigim komutu uygularsın
Kod:

make custommodule MODULEFILE=m_stats
Uyguladıktan sonra
Kod:

pico unrealircd.conf
içine girersin orda modullerin oldugu bölüm vardır. Oraya şu sekilde eklersin.
Kod:

loadmodule "src/modules/m_stats.so";
kayıt edip cıkarsın. /rehash cekersin ardından /module komutu uygularsın karşına cıkar.

Lord_FSohbet 09 Temmuz 2009 22:08

Cevap: /stats bilgilerinin turkcelesmesi
 
bende yine aynı şeyi çıkardı :)

Kod:

/Stats flags:
B - banversion - Send the ban version list
b - badword - Send the badwords list
C - link - Send the link block list
d - denylinkauto - Send the deny link (auto) block list
D - denylinkall - Send the deny link (all) block list
e - exceptthrottle - Send the except throttle block list
E - exceptban - Send the except ban and except tkl block list
f - spamfilter - Send the spamfilter list
F - denydcc - Send the deny dcc and allow dcc block lists
G - gline - Send the gline and gzline list
  Extended flags: [+/-mrs] [mask] [reason] [setby]
  m Return glines matching/not matching the specified mask
  r Return glines with a reason matching/not matching the specified reason
  s Return glines set by/not set by clients matching the specified name
I - allow - Send the allow block list
j - officialchans - Send the offical channels list
K - kline - Send the ban user/ban ip/except ban block list
l - linkinfo - Send link information
L - linkinfoall - Send all link information
M - command - Send list of how many times each command was used
n - banrealname - Send the ban realname block list
O - oper - Send the oper block list
P - port - Send information about ports
q - bannick - Send the ban nick block list
Q - sqline - Send the global qline list
r - chanrestrict - Send the channel deny/allow block list
S - set - Send the set block list
s - shun - Send the shun list
  Extended flags: [+/-mrs] [mask] [reason] [setby]
  m Return shuns matching/not matching the specified mask
  r Return shuns with a reason matching/not matching the specified reason
  s Return shuns set by/not set by clients matching the specified name
t - tld - Send the tld block list
T - traffic - Send traffic information

Rehashta Çektim ve Dediklerini Teker Teker Doğru Şekilde uyguladım

toXic 09 Temmuz 2009 22:23

Cevap: /stats bilgilerinin turkcelesmesi
 
demekki kuramamıssın bana pm geç değişimi yaşa ;)


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 21:32.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk