static gboolean check_autojoin_channels (server * serv) { char *po; session *sess; GSList *list = sess_list; int i = 0; GSList *channels, *keys; /* shouldnt really happen, the io tag is destroyed in server.c */ if (!is_server (serv)) return FALSE; /* send auto join list */ if (serv->autojoin) { joinlist_split (serv->autojoin, &channels, &keys); serv->p_join_list (serv, channels, keys); joinlist_free (channels, keys); free (serv->autojoin); serv->autojoin = NULL; } /* this is really only for re-connects when you * join channels not in the auto-join list. */ while (list) { sess = list->data; if (sess->server == serv) { if (sess->willjoinchannel[0] != 0) { strcpy (sess->waitchannel, sess->willjoinchannel); sess->willjoinchannel[0] = 0; serv->p_join (serv, sess->waitchannel, sess->channelkey); po = strchr (sess->waitchannel, ','); if (po) *po = 0; po = strchr (sess->waitchannel, ' '); if (po) *po = 0; i++; } } list = list->next; } serv->joindelay_tag = 0; fe_server_event (serv, FE_SE_LOGGEDIN, i); return FALSE; }
gboolean joinlist_is_in_list (server *serv, char *channel) { GSList *channels, *keys; GSList *list; if (!serv->network || !((ircnet *)serv->network)->autojoin) return FALSE; joinlist_split (((ircnet *)serv->network)->autojoin, &channels, &keys); for (list = channels; list; list = list->next) { if (serv->p_cmp (list->data, channel) == 0) return TRUE; } joinlist_free (channels, keys); return FALSE; }