mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 05:52:59 +00:00 
			
		
		
		
	Implement IRC "STATS g" and "STATS k" command
This commit is contained in:
		| @@ -28,8 +28,10 @@ | |||||||
| #include "conn-func.h" | #include "conn-func.h" | ||||||
| #include "conn-zip.h" | #include "conn-zip.h" | ||||||
| #include "channel.h" | #include "channel.h" | ||||||
|  | #include "class.h" | ||||||
| #include "conf.h" | #include "conf.h" | ||||||
| #include "defines.h" | #include "defines.h" | ||||||
|  | #include "lists.h" | ||||||
| #include "log.h" | #include "log.h" | ||||||
| #include "messages.h" | #include "messages.h" | ||||||
| #include "match.h" | #include "match.h" | ||||||
| @@ -478,6 +480,8 @@ IRC_STATS( CLIENT *Client, REQUEST *Req ) | |||||||
| 	COMMAND *cmd; | 	COMMAND *cmd; | ||||||
| 	time_t time_now; | 	time_t time_now; | ||||||
| 	unsigned int days, hrs, mins; | 	unsigned int days, hrs, mins; | ||||||
|  | 	struct list_head list; | ||||||
|  | 	struct list_elem *list_item; | ||||||
|  |  | ||||||
| 	assert(Client != NULL); | 	assert(Client != NULL); | ||||||
| 	assert(Req != NULL); | 	assert(Req != NULL); | ||||||
| @@ -516,6 +520,28 @@ IRC_STATS( CLIENT *Client, REQUEST *Req ) | |||||||
| 		query = '*'; | 		query = '*'; | ||||||
|  |  | ||||||
| 	switch (query) { | 	switch (query) { | ||||||
|  | 	case 'g':	/* Network-wide bans ("G-Lines") */ | ||||||
|  | 	case 'G': | ||||||
|  | 	case 'k':	/* Server-local bans ("K-Lines") */ | ||||||
|  | 	case 'K': | ||||||
|  | 		if (!Client_HasMode(from, 'o')) | ||||||
|  | 		    return IRC_WriteStrClient(from, ERR_NOPRIVILEGES_MSG, | ||||||
|  | 					      Client_ID(from)); | ||||||
|  | 		if (query == 'g' || query == 'G') | ||||||
|  | 			list = Class_GetList(CLASS_GLINE); | ||||||
|  | 		else | ||||||
|  | 			list = Class_GetList(CLASS_KLINE); | ||||||
|  | 			list_item = Lists_GetFirst(&list); | ||||||
|  | 			while (list_item) { | ||||||
|  | 				if (!IRC_WriteStrClient(from, RPL_STATSXLINE_MSG, | ||||||
|  | 						Client_ID(from), query, | ||||||
|  | 						Lists_GetMask(list_item), | ||||||
|  | 						Lists_GetValidity(list_item), | ||||||
|  | 						Lists_GetReason(list_item))) | ||||||
|  | 					return DISCONNECTED; | ||||||
|  | 				list_item = Lists_GetNext(list_item); | ||||||
|  | 			} | ||||||
|  | 		break; | ||||||
| 	case 'l':	/* Link status (servers and own link) */ | 	case 'l':	/* Link status (servers and own link) */ | ||||||
| 	case 'L': | 	case 'L': | ||||||
| 		time_now = time(NULL); | 		time_now = time(NULL); | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ | |||||||
| #define RPL_TRACESERVER_MSG		"206 %s Serv 1 0S 0C %s[%s@%s] *!*@%s :V%s" | #define RPL_TRACESERVER_MSG		"206 %s Serv 1 0S 0C %s[%s@%s] *!*@%s :V%s" | ||||||
| #define RPL_STATSLINKINFO_MSG		"211 %s %s %d %ld %ld %ld %ld :%ld" | #define RPL_STATSLINKINFO_MSG		"211 %s %s %d %ld %ld %ld %ld :%ld" | ||||||
| #define RPL_STATSCOMMANDS_MSG		"212 %s %s %ld %ld %ld" | #define RPL_STATSCOMMANDS_MSG		"212 %s %s %ld %ld %ld" | ||||||
|  | #define RPL_STATSXLINE_MSG		"216 %s %c %s %ld :%s" | ||||||
| #define RPL_ENDOFSTATS_MSG		"219 %s %c :End of STATS report" | #define RPL_ENDOFSTATS_MSG		"219 %s %c :End of STATS report" | ||||||
| #define RPL_UMODEIS_MSG			"221 %s +%s" | #define RPL_UMODEIS_MSG			"221 %s +%s" | ||||||
| #define RPL_SERVLIST_MSG		"234 %s %s %s %s %d %d :%s" | #define RPL_SERVLIST_MSG		"234 %s %s %s %s %d %d :%s" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton