📄 m_stats.c
字号:
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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -