static void event_whois(const char *data, IRC_SERVER_REC *server) { char *params, *nick, *realname; GSList *nicks, *tmp; NICK_REC *rec; g_return_if_fail(data != NULL); server->whois_coming = TRUE; /* first remove the gone-flag, if user is gone it will be set later.. */ params = event_get_params(data, 6, NULL, &nick, NULL, NULL, NULL, &realname); nicks = nicklist_get_same(SERVER(server), nick); for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) { rec = tmp->next->data; if (rec->realname == NULL) rec->realname = g_strdup(realname); } g_slist_free(nicks); /* reset gone and ircop status, we'll handle them in the following WHOIS replies */ nicklist_update_flags(SERVER(server), nick, FALSE, FALSE); g_free(params); }
static void event_who(const char *data, SERVER_REC *server) { char *params, *nick, *channel, *user, *host, *stat, *realname, *hops; CHANNEL_REC *chanrec; NICK_REC *nickrec; g_return_if_fail(data != NULL); params = event_get_params(data, 8, NULL, &channel, &user, &host, NULL, &nick, &stat, &realname); /* get hop count */ hops = realname; while (*realname != '\0' && *realname != ' ') realname++; *realname++ = '\0'; while (*realname == ' ') realname++; /* update host, realname, hopcount */ chanrec = channel_find(server, channel); nickrec = chanrec == NULL ? NULL : nicklist_find(chanrec, nick); if (nickrec != NULL) { if (nickrec->host == NULL) nickrec->host = g_strdup_printf("%s@%s", user, host); if (nickrec->realname == NULL) nickrec->realname = g_strdup(realname); sscanf(hops, "%d", &nickrec->hops); } nicklist_update_flags(server, nick, strchr(stat, 'G') != NULL, /* gone */ strchr(stat, '*') != NULL); /* ircop */ g_free(params); }
static void event_userhost(SERVER_REC *server, const char *data) { char *params, *hosts, **phosts, **pos, *ptr; int oper; g_return_if_fail(data != NULL); /* set user's gone flag.. */ params = event_get_params(data, 2, NULL, &hosts); phosts = g_strsplit(hosts, " ", -1); for (pos = phosts; *pos != NULL; pos++) { ptr = strchr(*pos, '='); if (ptr == NULL || ptr == *pos) continue; if (ptr[-1] == '*') { ptr[-1] = '\0'; oper = 1; } else oper = 0; *ptr++ = '\0'; nicklist_update_flags(server, *pos, *ptr == '-', oper); } g_strfreev(phosts); g_free(params); }
static void event_whois_ircop(const char *data, SERVER_REC *server) { char *params, *nick, *awaymsg; g_return_if_fail(data != NULL); /* set user's gone flag.. */ params = event_get_params(data, 3, NULL, &nick, &awaymsg); nicklist_update_flags(server, nick, -1, TRUE); g_free(params); }
static void event_own_unaway(SERVER_REC *server, const char *data) { char *params, *nick; g_return_if_fail(data != NULL); /* set user's gone flag.. */ params = event_get_params(data, 2, &nick, NULL); nicklist_update_flags(server, nick, FALSE, -1); g_free(params); }
static void sig_usermode(SERVER_REC *server) { g_return_if_fail(IS_SERVER(server)); nicklist_update_flags(server, server->nick, server->usermode_away, -1); }