src/irc_net.c
changeset 37 4fe4a3c4496e
parent 28 9c1050bc8709
child 38 0c2e0cb46c3a
--- a/src/irc_net.c	Thu Mar 12 18:08:27 2009 +0200
+++ b/src/irc_net.c	Thu Mar 12 18:11:44 2009 +0200
@@ -27,6 +27,32 @@
     .on_registered  = &irc_net_conn_registered,
 };
 
+/**
+ * :nm JOIN <channel>
+ */ 
+static void irc_net_on_JOIN (const struct irc_line *line, void *arg)
+{
+    struct irc_net *net = arg;
+    struct irc_chan *chan;
+
+    // look up channel
+    if ((chan = irc_net_get_chan(net, line->args[0])) == NULL) {
+        log_warn("unkown channel: %s", line->args[0]);
+        return;
+    }
+
+    // propagate
+    irc_cmd_invoke(&chan->handlers, line);
+}
+
+/**
+ * Our irc_cmd handler list
+ */
+static struct irc_cmd_handler _cmd_handlers[] = {
+    {   "JOIN",     &irc_net_on_JOIN        },
+    {   NULL,       NULL                    }
+};
+
 err_t irc_net_create (struct irc_net **net_ptr, const struct irc_net_info *info, struct error_info *err)
 {
     struct irc_net *net;
@@ -58,6 +84,10 @@
     if (irc_conn_create(&net->conn, sock, &_conn_callbacks, net, err))
         goto error;
 
+    // add our command handlers
+    if ((ERROR_CODE(err) = irc_conn_add_cmd_handlers (net->conn, _cmd_handlers, net)))
+        goto error;
+
     // register
     log_info("connected, registering");