Index: trunk/src_3rd/libuirc/libuirc.c =================================================================== --- trunk/src_3rd/libuirc/libuirc.c (revision 37524) +++ trunk/src_3rd/libuirc/libuirc.c (revision 37525) @@ -330,6 +330,9 @@ if (end != NULL) *end = '\0'; + if ((ctx->on_rawin != NULL) && (ctx->on_rawin(ctx, from, cmd, arg) != 0)) + return res; + if (strcmp(cmd, "001") == 0) return res | uirc_parse_001(ctx, arg); if (irc_strcasecmp(cmd, "join") == 0) return res | uirc_parse_join(ctx, from, arg); if (irc_strcasecmp(cmd, "part") == 0) return res | uirc_parse_part(ctx, from, arg); Index: trunk/src_3rd/libuirc/libuirc.h =================================================================== --- trunk/src_3rd/libuirc/libuirc.h (revision 37524) +++ trunk/src_3rd/libuirc/libuirc.h (revision 37525) @@ -66,7 +66,9 @@ uirc_query_t query[UIRC_MAX_QUERIES]; /* query 0 is special: server "window" */ int curr_query, last_new_query; + /* any of these may be NULL */ void *user_data; + int (*on_rawin)(uirc_t *ctx, char *from, char *cmd, char *arg); /* returns non-zero to omit further/normal processing of the message */ void (*on_connect)(uirc_t *ctx); void (*on_disconnect)(uirc_t *ctx); void (*on_got_misc)(uirc_t *ctx, int query_to, const char *msg);