mirror of
https://github.com/osmarks/ngircd.git
synced 2025-04-08 00:36:39 +00:00
Implement the IRC command "SERVLIST"
The IRC command "SERVLIST" lists all the registered services, see RFC 2811, section 3.5.1. The syntax is "SERVLIST [<mask> [<type>]]". The parameter <type> is not used by ngIRCd at the moment, all registered services are of type 0 (which is the default when omitted).
This commit is contained in:
parent
672b391523
commit
3243d9ee44
@ -270,12 +270,15 @@ IRC_LUSERS( CLIENT *Client, REQUEST *Req )
|
||||
|
||||
|
||||
/**
|
||||
* List registered services.
|
||||
* This function is a dummy that immediately returns RPL_SERVLISTEND.
|
||||
* Handler for the IRC command "SERVLIST".
|
||||
* List registered services, see RFC 2811, section 3.5.1: the syntax is
|
||||
* "SERVLIST [<mask> [<type>]]".
|
||||
*/
|
||||
GLOBAL bool
|
||||
IRC_SERVLIST(CLIENT *Client, REQUEST *Req)
|
||||
{
|
||||
CLIENT *c;
|
||||
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
@ -283,6 +286,21 @@ IRC_SERVLIST(CLIENT *Client, REQUEST *Req)
|
||||
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
|
||||
if (Req->argc < 2 || strcmp(Req->argv[1], "0") == 0) {
|
||||
for (c = Client_First(); c!= NULL; c = Client_Next(c)) {
|
||||
if (Client_Type(c) != CLIENT_SERVICE)
|
||||
continue;
|
||||
if (Req->argc > 0 && !MatchCaseInsensitive(Req->argv[0],
|
||||
Client_ID(c)))
|
||||
continue;
|
||||
if (!IRC_WriteStrClient(Client, RPL_SERVLIST_MSG,
|
||||
Client_ID(Client), Client_Mask(c),
|
||||
Client_Mask(Client_Introducer(c)), "*",
|
||||
0, Client_Hops(c), Client_Info(c)))
|
||||
return DISCONNECTED;
|
||||
}
|
||||
}
|
||||
|
||||
return IRC_WriteStrClient(Client, RPL_SERVLISTEND_MSG, Client_ID(Client),
|
||||
Req->argc > 0 ? Req->argv[0] : "*",
|
||||
Req->argc > 1 ? Req->argv[1] : "0");
|
||||
|
@ -30,6 +30,7 @@
|
||||
#define RPL_STATSCOMMANDS_MSG "212 %s %s %ld %ld %ld"
|
||||
#define RPL_ENDOFSTATS_MSG "219 %s %c :End of STATS report"
|
||||
#define RPL_UMODEIS_MSG "221 %s +%s"
|
||||
#define RPL_SERVLIST_MSG "234 %s %s %s %s %d %d :%s"
|
||||
#define RPL_SERVLISTEND_MSG "235 %s %s %s :End of service listing"
|
||||
|
||||
#define RPL_STATSUPTIME "242 %s :Server Up %u days %u:%02u:%02u"
|
||||
|
Loading…
x
Reference in New Issue
Block a user