Add helper function for sending responses to clients on virtual networks.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 18 Mar 2007 15:48:42 +0000 (16:48 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sun, 18 Mar 2007 15:48:42 +0000 (16:48 +0100)
src/admin.c
src/network.c
src/network.h

index b72f19b6af6886a7b3f022c9cfe491b02517ba73..867729718e81e5a299c0cf69067544f66a9f1bd2 100644 (file)
@@ -23,6 +23,7 @@
 #include <string.h>
 #include "admin.h"
 #include "help.h"
+#include "irc.h"
 
 help_t *help;
 
@@ -509,14 +510,14 @@ static gboolean admin_net_init(struct network *n)
        hostmask = g_strdup_printf("ctrlproxy!ctrlproxy@%s", n->name);
        
        virtual_network_recv_args(n, n->state->me.hostmask, "JOIN", ADMIN_CHANNEL, NULL);
-       virtual_network_recv_args(n, NULL, "332", n->config->nick, ADMIN_CHANNEL, 
+       virtual_network_recv_response(n, RPL_TOPIC, ADMIN_CHANNEL, 
                "CtrlProxy administration channel | Type `help' for more information",
                                                          NULL);
        nicks = g_strdup_printf("@ctrlproxy %s", n->config->nick);
 
-       virtual_network_recv_args(n, NULL, "353", n->config->nick, "=", ADMIN_CHANNEL, nicks, NULL);
+       virtual_network_recv_response(n, RPL_NAMREPLY, "=", ADMIN_CHANNEL, nicks, NULL);
        g_free(nicks);
-       virtual_network_recv_args(n, NULL, "366", n->config->nick, ADMIN_CHANNEL, "End of /NAMES list.", NULL);
+       virtual_network_recv_response(n, RPL_ENDOFNAMES, ADMIN_CHANNEL, "End of /NAMES list.", NULL);
 
        g_free(hostmask);
 
index c49940e9508e776fec0d3f80f13151599b1e6dcd..17857bd8bc7756f61d47045d3f5fe88fbd444bdf 100644 (file)
@@ -414,6 +414,36 @@ gboolean network_send_line(struct network *s, struct client *c, const struct lin
        return network_send_line_direct(s, c, ol);
 }
 
+gboolean virtual_network_recv_response(struct network *n, int num, ...) 
+{
+       va_list ap;
+       struct line *l;
+       gboolean ret;
+
+       g_assert(n);
+
+       va_start(ap, num);
+       l = virc_parse_line(n->name, ap);
+       va_end(ap);
+
+       l->args = g_realloc(l->args, sizeof(char *) * (l->argc+4));
+       memmove(&l->args[2], &l->args[0], l->argc * sizeof(char *));
+
+       l->args[0] = g_strdup_printf("%03d", num);
+
+       if (n->state && n->state->me.nick) l->args[1] = g_strdup(n->state->me.nick);
+       else l->args[1] = g_strdup("*");
+
+       l->argc+=2;
+       l->args[l->argc] = NULL;
+
+       ret = virtual_network_recv_line(n, l);
+
+       free_line(l);
+
+       return ret;
+}
+
 gboolean virtual_network_recv_line(struct network *s, struct line *l)
 {
        g_assert(s);
index a7489ca8d0b626c7cb9cdfbc9c9805119c16743d..1f82461bb24240156b287bb3a231d2166a7b68a4 100644 (file)
@@ -118,6 +118,7 @@ G_MODULE_EXPORT void register_virtual_network(struct virtual_network_ops *);
 G_MODULE_EXPORT struct network *find_network(struct global *, const char *);
 G_MODULE_EXPORT gboolean virtual_network_recv_line(struct network *l, struct line *);
 G_MODULE_EXPORT gboolean virtual_network_recv_args(struct network *l, const char *origin, ...); 
+G_MODULE_EXPORT gboolean virtual_network_recv_response(struct network *n, int num, ...);
 typedef void (*new_network_notify_fn) (struct network *, void *);
 G_MODULE_EXPORT void register_new_network_notify(struct global *, new_network_notify_fn, void *userdata);
 G_MODULE_EXPORT struct linestack_context *new_linestack(struct network *network);