Add support to show user links using "STATS L"
Change "stats L" to show servers and user links and restrict it to IRC Operators.
This commit is contained in:
parent
13a5358a3d
commit
ec5ab4fcd1
|
@ -451,17 +451,21 @@ Status and Informational Commands
|
||||||
Show statistics and other information of type <query> of a particular
|
Show statistics and other information of type <query> of a particular
|
||||||
IRC server in the network.
|
IRC server in the network.
|
||||||
.
|
.
|
||||||
The following <query> types are supported (case-insensitive):
|
The following <query> types are supported (case-insensitive where
|
||||||
|
applicable):
|
||||||
.
|
.
|
||||||
- g Network-wide bans ("G-Lines").
|
- g Network-wide bans ("G-Lines").
|
||||||
- k Server-local bans ("K-Lines").
|
- k Server-local bans ("K-Lines").
|
||||||
- l Link status (parent server and own link only).
|
- L Link status (servers and user links).
|
||||||
|
- l Link status (servers and own link).
|
||||||
- m Command usage count.
|
- m Command usage count.
|
||||||
- u Server uptime.
|
- u Server uptime.
|
||||||
.
|
.
|
||||||
<target> can be a server name, the nickname of a client connected to
|
<target> can be a server name, the nickname of a client connected to
|
||||||
a specific server, or a mask matching a server name in the network.
|
a specific server, or a mask matching a server name in the network.
|
||||||
The server of the current connection is used when <target> is omitted.
|
The server of the current connection is used when <target> is omitted.
|
||||||
|
.
|
||||||
|
To use "STATS L" the user must be an IRC Operator.
|
||||||
|
|
||||||
References:
|
References:
|
||||||
- RFC 2812, 3.4.4 "Stats message"
|
- RFC 2812, 3.4.4 "Stats message"
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include "irc-macros.h"
|
#include "irc-macros.h"
|
||||||
#include "irc-write.h"
|
#include "irc-write.h"
|
||||||
#include "client-cap.h"
|
#include "client-cap.h"
|
||||||
|
#include "op.h"
|
||||||
|
|
||||||
#include "exp.h"
|
#include "exp.h"
|
||||||
#include "irc-info.h"
|
#include "irc-info.h"
|
||||||
|
@ -865,6 +866,7 @@ IRC_STATS( CLIENT *Client, REQUEST *Req )
|
||||||
unsigned int days, hrs, mins;
|
unsigned int days, hrs, mins;
|
||||||
struct list_head *list;
|
struct list_head *list;
|
||||||
struct list_elem *list_item;
|
struct list_elem *list_item;
|
||||||
|
bool more_links = false;
|
||||||
|
|
||||||
assert(Client != NULL);
|
assert(Client != NULL);
|
||||||
assert(Req != NULL);
|
assert(Req != NULL);
|
||||||
|
@ -909,16 +911,20 @@ IRC_STATS( CLIENT *Client, REQUEST *Req )
|
||||||
list_item = Lists_GetNext(list_item);
|
list_item = Lists_GetNext(list_item);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'L': /* Link status (servers and user links) */
|
||||||
|
if (!Op_Check(from, Req))
|
||||||
|
return Op_NoPrivileges(from, Req);
|
||||||
|
more_links = true;
|
||||||
|
|
||||||
case 'l': /* Link status (servers and own link) */
|
case 'l': /* Link status (servers and own link) */
|
||||||
case 'L':
|
|
||||||
time_now = time(NULL);
|
time_now = time(NULL);
|
||||||
for (con = Conn_First(); con != NONE; con = Conn_Next(con)) {
|
for (con = Conn_First(); con != NONE; con = Conn_Next(con)) {
|
||||||
cl = Conn_GetClient(con);
|
cl = Conn_GetClient(con);
|
||||||
if (!cl)
|
if (!cl)
|
||||||
continue;
|
continue;
|
||||||
if ((Client_Type(cl) == CLIENT_SERVER)
|
if (Client_Type(cl) == CLIENT_SERVER ||
|
||||||
|| (cl == Client)) {
|
cl == Client ||
|
||||||
/* Server link or our own connection */
|
(more_links && Client_Type(cl) == CLIENT_USER)) {
|
||||||
#ifdef ZLIB
|
#ifdef ZLIB
|
||||||
if (Conn_Options(con) & CONN_ZIP) {
|
if (Conn_Options(con) & CONN_ZIP) {
|
||||||
if (!IRC_WriteStrClient
|
if (!IRC_WriteStrClient
|
||||||
|
|
Loading…
Reference in New Issue