Implement WHO for the admin network.
authorJelmer Vernooij <jelmer@samba.org>
Fri, 6 Apr 2007 20:39:36 +0000 (22:39 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Fri, 6 Apr 2007 20:39:36 +0000 (22:39 +0200)
NEWS
src/admin.c

diff --git a/NEWS b/NEWS
index 186960757470c6f4662021938d2bd499b0a938c1..7c93ed731ebfcce55e13f3ac1fab0d55e88f5f59 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -75,7 +75,7 @@ Ctrlproxy 3.0.2 UNRELEASED
     * Remove is_private from line struct (#12).
                (patch by Emanuele Giaquinta <e.giaquinta@glauco.it>)
 
-       * Implement ISON, USERHOST for admin networks. (#99)
+       * Implement ISON, USERHOST, WHO for admin networks. (#99)
 
   PORTABILITY
 
index 7fc32f58bd9016f67c80aaef446b1984313a3655..29831cc74c9b77d79ca9919d305eaf407c95ea01 100644 (file)
@@ -603,6 +603,35 @@ static gboolean admin_to_server (struct network *n, struct client *c, const stru
                return TRUE;
        } else if (!g_strcasecmp(l->args[0], "MODE")) {
                /* FIXME: Do something here ? */
+               return TRUE;
+       } else if (!g_strcasecmp(l->args[0], "WHO")) {
+               if (!strcmp(l->args[1], ADMIN_CHANNEL) || 
+                       !strcmp(l->args[1], "ctrlproxy")) {
+                       virtual_network_recv_response(n, RPL_WHOREPLY, ADMIN_CHANNEL, 
+                                                                         "ctrlproxy",
+                                                                         get_my_hostname(),
+                                                                         get_my_hostname(),
+                                                                         "ctrlproxy",
+                                                                         "H",
+                                                                         "0 CtrlProxy user",
+                                                                         NULL);
+               }
+               if (!strcmp(l->args[1], ADMIN_CHANNEL) ||
+                       !strcmp(l->args[1], n->state->me.nick)) {
+                       char *fullname = g_strdup_printf("0 %s", n->state->me.fullname);
+                       virtual_network_recv_response(n, RPL_WHOREPLY, ADMIN_CHANNEL, 
+                                                                         n->state->me.username,
+                                                                         n->state->me.hostname,
+                                                                         get_my_hostname(),
+                                                                         n->state->me.nick,
+                                                                         "H",
+                                                                         fullname,
+                                                                         NULL);
+                       g_free(fullname);
+               }
+
+               virtual_network_recv_response(n, RPL_ENDOFWHO, l->args[1], "End of /WHO list.", NULL);
+
                return TRUE;
        } else {
                virtual_network_recv_response(n, ERR_UNKNOWNCOMMAND, l->args[0], "Unknown command", NULL);