diff -r a07d917adec1 -r d3bc82ee76cb src/irc_chan.c --- a/src/irc_chan.c Tue Mar 31 20:33:45 2009 +0300 +++ b/src/irc_chan.c Tue Mar 31 20:57:07 2009 +0300 @@ -161,6 +161,8 @@ { struct irc_chan *chan = arg; + (void) line; + // XXX: update state log_info("channel join sync complete"); } @@ -358,10 +360,13 @@ err_t irc_chan_join (struct irc_chan *chan) { err_t err; + + // correct state + if (chan->joining || chan->joined) + return ERR_IRC_CHAN_STATE; - // XXX: error instead? - assert(!chan->joining && !chan->joined); - assert(chan->net->conn); + if (!chan->net->conn) + return ERR_IRC_NET_STATE; // send JOIN message on the appropriate connection if ((err = irc_conn_JOIN(chan->net->conn, chan->info.channel))) @@ -374,3 +379,16 @@ return SUCCESS; } +err_t irc_chan_PRIVMSG (struct irc_chan *chan, const char *message) +{ + // correct state + if (!chan->joined) + return ERR_IRC_CHAN_STATE; + + if (!chan->net->conn) + return ERR_IRC_NET_STATE; + + // send the PRIVMSG message + return irc_conn_PRIVMSG(chan->net->conn, chan->info.channel, message); +} +