--- a/src/irc_chan.c Thu Mar 12 22:06:01 2009 +0200
+++ b/src/irc_chan.c Thu Mar 12 22:50:08 2009 +0200
@@ -20,13 +20,17 @@
// us?
if (irc_prefix_cmp_nick(line->prefix, chan->net->conn->nickname) == 0) {
// twiddle state
- chan->state.joining = false;
- chan->state.joined = true;
+ chan->joining = false;
+ chan->joined = true;
log_info("joined channel: %s", chan->info.channel);
// invoke callback
IRC_CHAN_INVOKE_CALLBACK(chan, on_self_join);
+
+ } else {
+ // XXX: who cares
+
}
}
@@ -36,9 +40,23 @@
static void irc_chan_on_PRIVMSG (const struct irc_line *line, void *arg)
{
struct irc_chan *chan = arg;
+ char prefix_buf[IRC_PREFIX_MAX];
+ struct irc_nm *nm;
+ err_t err;
- // invoke callback (prefix, message)
- IRC_CHAN_INVOKE_CALLBACK(chan, on_msg, line->prefix, line->args[1]);
+ const char *msg = line->args[1];
+
+ // parse nickmask
+ if ((err = irc_nm_parse(nm, prefix_buf, line->prefix))) {
+ log_warn("invalid prefix: %s", line->prefix);
+
+ // invoke callback with NULL prefix
+ IRC_CHAN_INVOKE_CALLBACK(chan, on_msg, NULL, msg);
+
+ } else {
+ // invoke callback (prefix, message)
+ IRC_CHAN_INVOKE_CALLBACK(chan, on_msg, nm, msg);
+ }
}
/**
@@ -104,7 +122,8 @@
err_t err;
// XXX: error instead?
- assert(!chan->state.joining && !chan->state.joined);
+ assert(!chan->joining && !chan->joined);
+ assert(chan->net->conn);
// send JOIN message on the appropriate connection
if ((err = irc_conn_JOIN(chan->net->conn, chan->info.channel)))
@@ -112,7 +131,7 @@
return err;
// ok
- chan->state.joining = true;
+ chan->joining = true;
return SUCCESS;
}