IRCRehber  


UnrealIRCd Sunucunuzda rastladığınız sorunlar, sorularınız, sorunlarınız, merak ettikleriniz.


Yanıtla
 
LinkBack Seçenekler Stil
Eski 25 Mart 2009, 19:26
185 mesaj yazmış Yaşadığı yer: Los Angeles, ABD. Kayıt tarihi: 28 Temmuz 2008
#1 (Kalıcı Bağlantı)
Vop (+)
 <center>toXic Kullanıcısının Avatarı</center>


Rep Puanı : 21
IR Puanı : 376
toXic 'in ihtişamının farkına varmayan kimse yok!toXic 'in ihtişamının farkına varmayan kimse yok!toXic 'in ihtişamının farkına varmayan kimse yok!toXic 'in ihtişamının farkına varmayan kimse yok!
Standart Turkce /stats

Halen Bircok Oper/Admin, Stats ve parametrelerinden Yararlanamıyor, İnsanların bundan daha fazla yararlanabilmesi, kullanabilmesi için turkce yaptım.

/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 $",
 "/stats ToXiC Tarafından Turkcelestirilmistir", 
 "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_STATSEXCEPTTKL), 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;
}__________________

_______________________________
Düşmanın, dostundan ne kadar coksa, o kadar cok itibar görürsün..
Men Dakka Dukka..
toXic isimli Üye şimdilik offline konumundadır







    Alıntı ile Cevapla
Eski 04 Şubat 2010, 23:21
341 mesaj yazmış Yaşadığı yer: Adana / Seyhan Kayıt tarihi: 03 Şubat 2010
#2 (Kalıcı Bağlantı)
Forumdan Atıldı


Rep Puanı : 0
IR Puanı : 10
Karizma siftahı atmış.
Standart Yanıt: Turkce /stats

Evet artık , her sunucuda , gelişti ..
Karizma isimli Üye şimdilik offline konumundadır







    Alıntı ile Cevapla
Yanıtla

Yer İmleri

Etiketler
or stats, turkce


Şu anda bu başlığı 1 kişi görüntülemekte. (0 kayıtlı kullanıcı, 1 ziyaretçi)
 
Seçenekler
Stil

Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML kodları, Kapalı.
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Hızlı Geç

Benzer Konular
Konu Başlığı açan Forum Yanıtlar Son ileti
Turkce YETKİ Gösterme toXic UnrealIRCd 1 04 Şubat 2010 23:22
Turkce YETKİ Gösterme toXic Çöp Kutusu 1 25 Mart 2009 21:19


Zaman formatı, GMT +2 şeklinde ayarlanmıştır.
Şu anki saat: 08:20.

IRCRehber: IRCRehber.Com - IRC, IRC Forum, IRC Forumları

Site açıklaması: IRC sunucu tanıtabileceğiniz, IRCd ve mIRC Scripting yardımı alabileceğiniz, ayrıca diğer konularda da bilgi paylaşabileceğiniz kaliteli bir forum.

Arama kriterleri: irc, irc forum, irc forumları, mirc scripting, irc daemon, mirc yardım, sohbet siteleri, chat siteleri, google webmaster, wordpress, vbulletin, yardım, bilgi, paylaşım, kadınca, genel, güncel konular, haberler, komik, eğlence, fıkra, geyik, irc, rehber




IRCRehber, vBulletin® yazılımının 3.8.5 sürümünü kullanmaktadır.
Copyright © 2000-2010, Telif hakları bakımından "Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0" şirketine aittir.
Türkçe'ye çevirenler: Regex ve Supervisor.

Dış bağlantılar: sohbet, mirc indir

Site sayacı:


Tema: Lanet - the audiØ injected sØuŁ