Enable WHOIS to display information about IRC Services
authorAlexander Barton <alex@barton.de>
Sun, 3 Feb 2013 20:32:53 +0000 (21:32 +0100)
committerAlexander Barton <alex@barton.de>
Sun, 3 Feb 2013 20:32:53 +0000 (21:32 +0100)
This patch introduces the new numeric 310(RPL_WHOISSERVICE) and enables
WHOIS to display information about IRC services. This numeric is used
for this purpose by InspIRCd, for example -- but as usual, other numerics
are in use, too, like 613 in UltimateIRCd ...

Please note that neither the Operator (+o) not the "bot status" (+B)
of an IRC service id displayed in the output.

Change suggested by Federico G. Schwindt <fgsch@lodoss.net>, Thanks.

src/ngircd/irc-info.c
src/ngircd/messages.h

index aaa607ddf32d5248c9b1cdd0c41ea5944da4a796..e9c1ff532ae7a4d4420d9e972f0f8e3904036f33 100644 (file)
@@ -1133,14 +1133,20 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
                        return DISCONNECTED;
        }
 
+       /* Service? */
+       if (Client_Type(c) == CLIENT_SERVICE &&
+           !IRC_WriteStrClient(from, RPL_WHOISSERVICE_MSG,
+                               Client_ID(from), Client_ID(c)))
+               return DISCONNECTED;
+
        /* IRC-Operator? */
-       if (Client_HasMode(c, 'o') &&
+       if (Client_HasMode(c, 'o') && Client_Type(c) != CLIENT_SERVICE &&
            !IRC_WriteStrClient(from, RPL_WHOISOPERATOR_MSG,
                                Client_ID(from), Client_ID(c)))
                return DISCONNECTED;
 
        /* IRC-Bot? */
-       if (Client_HasMode(c, 'B') &&
+       if (Client_HasMode(c, 'B') && Client_Type(c) != CLIENT_SERVICE &&
            !IRC_WriteStrClient(from, RPL_WHOISBOT_MSG,
                                Client_ID(from), Client_ID(c)))
                return DISCONNECTED;
@@ -1262,7 +1268,8 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
                 */
                if (!has_wildcards || is_remote) {
                        c = Client_Search(query);
-                       if (c && Client_Type(c) == CLIENT_USER) {
+                       if (c && (Client_Type(c) == CLIENT_USER
+                                 || Client_Type(c) == CLIENT_SERVICE)) {
                                if (!IRC_WHOIS_SendReply(Client, from, c))
                                        return DISCONNECTED;
                        } else {
index a6a6d8c24559457d70adacc5cffb78dc3152f214..371abc262d7dc6f708a7cee156884d6d2186efa5 100644 (file)
@@ -56,6 +56,7 @@
 #define RPL_UNAWAY_MSG                 "305 %s :You are no longer marked as being away"
 #define RPL_NOWAWAY_MSG                        "306 %s :You have been marked as being away"
 #define RPL_WHOISREGNICK_MSG           "307 %s %s :is a registered nick"
+#define RPL_WHOISSERVICE_MSG           "310 %s %s :is an IRC service"
 #define RPL_WHOISUSER_MSG              "311 %s %s %s %s * :%s"
 #define RPL_WHOISSERVER_MSG            "312 %s %s %s :%s"
 #define RPL_WHOISOPERATOR_MSG          "313 %s %s :is an IRC operator"