Example #1
0
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;
}
Example #2
0
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;
}