static NETJOIN_REC *netjoin_add(IRC_SERVER_REC *server, const char *nick, GSList *channels) { NETJOIN_REC *rec; NETJOIN_SERVER_REC *srec; g_return_val_if_fail(server != NULL, NULL); g_return_val_if_fail(nick != NULL, NULL); rec = g_new0(NETJOIN_REC, 1); rec->nick = g_strdup(nick); while (channels != NULL) { NETSPLIT_CHAN_REC *channel = channels->data; rec->old_channels = g_slist_append(rec->old_channels, g_strdup(channel->name)); channels = channels->next; } srec = netjoin_find_server(server); if (srec == NULL) { srec = g_new0(NETJOIN_SERVER_REC, 1); srec->server = server; joinservers = g_slist_append(joinservers, srec); } srec->last_netjoin = time(NULL); srec->netjoins = g_slist_append(srec->netjoins, rec); return rec; }
static NETJOIN_REC *netjoin_find(IRC_SERVER_REC *server, const char *nick) { NETJOIN_SERVER_REC *srec; GSList *tmp; g_return_val_if_fail(server != NULL, NULL); g_return_val_if_fail(nick != NULL, NULL); srec = netjoin_find_server(server); if (srec == NULL) return NULL; for (tmp = srec->netjoins; tmp != NULL; tmp = tmp->next) { NETJOIN_REC *rec = tmp->data; if (g_strcasecmp(rec->nick, nick) == 0) return rec; } return NULL; }
/* something is going to be printed to screen, print our current netsplit message before it. */ static void sig_print_starting(TEXT_DEST_REC *dest) { NETJOIN_SERVER_REC *rec; if (printing_joins) return; if (!IS_IRC_SERVER(dest->server)) return; if (!(dest->level & MSGLEVEL_PUBLIC)) return; if (!server_ischannel(dest->server, dest->target)) return; rec = netjoin_find_server(IRC_SERVER(dest->server)); if (rec != NULL && rec->netjoins != NULL) print_netjoins(rec, dest->target); }