X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2FIRCParser.c;h=701ad457b54d592ecae6b15c02d9d110916e2a88;hp=ff244a05043c98384c978b0dca68e8bca1a01be2;hb=HEAD;hpb=7289d420ddc81d9975ed6d55dfdfd70dff2b2d48 diff --git a/src/IRCParser.c b/src/IRCParser.c index ff244a0..701ad45 100644 --- a/src/IRCParser.c +++ b/src/IRCParser.c @@ -30,6 +30,8 @@ #include "bots.h" #include "timeq.h" #include "ConfigParser.h" +#include "statistics.h" +#include "log.h" struct irc_cmd *irc_commands = NULL; //static struct UserNode *registering_users = NULL; @@ -58,9 +60,9 @@ void parse_line(struct ClientSocket *client, char *line) { int argc = 0; char *argv[MAXNUMPARAMS]; #ifdef HAVE_THREADS - putlog(LOGLEVEL_RAW, "[%d recv %lu] %s\n", getCurrentThreadID(), (unsigned long) strlen(line), line); + printf_log("main", LOG_IRCRAW, "[%d recv %lu] %s\n", getCurrentThreadID(), (unsigned long) strlen(line), line); #else - putlog(LOGLEVEL_RAW, "[recv %lu] %s\n", (unsigned long) strlen(line), line); + printf_log("main", LOG_IRCRAW, "[recv %lu] %s\n", (unsigned long) strlen(line), line); #endif if(line[0] == ':') line++; @@ -90,7 +92,7 @@ static void register_irc_function(char *command, irc_cmd_t *func) { struct irc_cmd *irc_cmd = malloc(sizeof(*irc_cmd)); if (!irc_cmd) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } irc_cmd->cmd = command; @@ -111,7 +113,7 @@ static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char * if(!irc_cmd) { event_raw(client, from, cmd, argv, argc); } else if(!ret) { - fprintf(stderr,"PARSE ERROR: %s\n", cmd); + printf_log("main", LOG_WARNING | LOG_IRCRAW, "PARSE ERROR: %s %s %s\n", (from ? from : "*"), cmd, merge_argv(argv, 0, argc)); } } @@ -383,8 +385,8 @@ static IRC_CMD(raw_join) { } if(chanuser->visCount > chan->botcount) { + printf_log("main", LOG_WARNING, "visCount (%d) bigger than botcount (%d) on channel %s (user %s).", chanuser->visCount, chan->botcount, chan->name, user->nick); chanuser->visCount = chan->botcount; - //TODO: Trigger WARNING } //if multiple bots see the user, it can't be invisible @@ -479,7 +481,8 @@ static IRC_CMD(raw_kick) { chanuser->visCount--; if(chanuser->visCount == 0) { delChanUser(chanuser, 0); //not free, yet! - event_kick(user, chanuser, argv[2]); + if(user) + event_kick(user, chanuser, argv[2]); freeChanUser(chanuser); } @@ -554,6 +557,7 @@ static IRC_CMD(raw_quit) { if(user->channel == NULL) { if(isBot(user)) { //ASSERT + DESYNCHRONIZE(cache_sync); return 0; } if((user->flags & USERFLAG_WAS_REGISTERING)) { @@ -638,6 +642,7 @@ static IRC_CMD(raw_privmsg) { if(from == NULL || argc < 2) return 0; struct UserNode *user = getUserByMask(from); if(user == NULL) { + if(stricmplen(from, "***!", 4) == 0) return 1; /* ZNC Playback */ user = createTempUserMask(from); if(!user) return 0; user->flags |= USERFLAG_ISTMPUSER; @@ -645,8 +650,7 @@ static IRC_CMD(raw_privmsg) { if(argv[0][0] == '#') { //Channel message struct ChanNode *chan = getChanByName(argv[0]); if(chan && client == get_first_prefered_bot_in_channel(chan)) { - if(statistics_enabled) - statistics_privmsg++; + statistics_privmsg++; if(argv[1][0] == '\001') { char *cmd = &argv[1][1]; char *text = strstr(cmd, " "); @@ -683,6 +687,7 @@ static IRC_CMD(raw_privmsg) { } static IRC_CMD(raw_notice) { + if(from == NULL && argc && !stricmp(argv[0], "AUTH")) return 1; //NOTICE AUTH is NOT a parse error ;) if(from == NULL || argc < 2) return 0; struct UserNode *user = getUserByMask(from); if(user == NULL) { @@ -897,7 +902,7 @@ static void raw_005_network(struct ClientSocket *client, char *value) { if(bot == client) continue; if(!bot->network_name) continue; if(stricmp(bot->network_name, value)) { - putlog(LOGLEVEL_ERROR, "WARNING: Network name '%s' (%s) differs from '%s' (%s)! Connecting to multiple IRC-Networks with one instance is NOT supported!\n", client->network_name, client->nick, bot->network_name, bot->nick); + printf_log("main", LOG_ERROR, "WARNING: Network name '%s' (%s) differs from '%s' (%s)! Connecting to multiple IRC-Networks with one instance is NOT supported!\n", client->network_name, client->nick, bot->network_name, bot->nick); break; } }