terom@23: #include "irc_log.h" terom@23: #include "log.h" terom@23: terom@23: // XXX: fix this err_t crap terom@23: #define LIB_ERR_H terom@23: #include terom@23: terom@23: /** terom@23: * The core irc_log state terom@23: */ terom@23: static struct irc_log_ctx { terom@23: /** The database connection */ terom@23: struct evsql *db; terom@23: terom@23: } _ctx; terom@23: terom@23: static void on_PRIVMSG (struct irc_conn *conn, const struct irc_line *line, void *arg) terom@23: { terom@23: struct irc_log_ctx *ctx = arg; terom@23: terom@26: (void) conn; terom@26: (void) ctx; terom@26: terom@23: // log it! :P terom@23: log_debug("%s: %s: %s", line->prefix, line->args[0], line->args[1]); terom@23: } terom@23: terom@23: static struct irc_cmd_handler _cmd_handlers[] = { terom@23: { "PRIVMSG", &on_PRIVMSG }, terom@23: { NULL, NULL } terom@23: }; terom@23: terom@26: err_t irc_log_init (struct event_base *ev_base, const struct irc_log_info *info) terom@23: { terom@23: struct irc_log_ctx *ctx = &_ctx; terom@23: err_t err; terom@23: terom@23: // open the database connection terom@26: if (info->db_info) { terom@26: log_info("connect to database: %s", info->db_info); terom@23: terom@26: if ((ctx->db = evsql_new_pq(ev_base, info->db_info, NULL, NULL)) == NULL) terom@23: return ERR_EVSQL_NEW_PQ; terom@23: } terom@23: terom@26: if (info->channel) { terom@26: log_info("log channel: %s", irc_chan_name(info->channel)); terom@23: } terom@23: terom@23: // register for events terom@29: // XXX: need irc_chan API for this terom@26: if ((err = irc_conn_register_handler_chain(info->channel->net->conn, _cmd_handlers, ctx))) terom@23: return err; terom@23: terom@23: // ok terom@23: return SUCCESS; terom@23: } terom@23: