Example #1
0
struct t_infolist *
relay_info_get_infolist_cb (void *data, const char *infolist_name,
                            void *pointer, const char *arguments)
{
    struct t_infolist *ptr_infolist;
    struct t_relay_client *ptr_client;

    /* make C compiler happy */
    (void) data;
    (void) arguments;

    if (!infolist_name || !infolist_name[0])
        return NULL;

    if (weechat_strcasecmp (infolist_name, "relay") == 0)
    {
        if (pointer && !relay_client_valid (pointer))
            return NULL;

        ptr_infolist = weechat_infolist_new ();
        if (ptr_infolist)
        {
            if (pointer)
            {
                /* build list with only one relay */
                if (!relay_client_add_to_infolist (ptr_infolist, pointer))
                {
                    weechat_infolist_free (ptr_infolist);
                    return NULL;
                }
                return ptr_infolist;
            }
            else
            {
                /* build list with all relays */
                for (ptr_client = relay_clients; ptr_client;
                     ptr_client = ptr_client->next_client)
                {
                    if (!relay_client_add_to_infolist (ptr_infolist, ptr_client))
                    {
                        weechat_infolist_free (ptr_infolist);
                        return NULL;
                    }
                }
                return ptr_infolist;
            }
        }
    }

    return NULL;
}
Example #2
0
int
relay_upgrade_save_all_data (struct t_upgrade_file *upgrade_file)
{
    struct t_infolist *infolist;
    struct t_relay_server *ptr_server;
    struct t_relay_client *ptr_client;
    struct t_relay_raw_message *ptr_raw_message;
    int rc;

    /* save servers */
    for (ptr_server = relay_servers; ptr_server;
         ptr_server = ptr_server->next_server)
    {
        infolist = dogechat_infolist_new ();
        if (!infolist)
            return 0;
        if (!relay_server_add_to_infolist (infolist, ptr_server))
        {
            dogechat_infolist_free (infolist);
            return 0;
        }
        rc = dogechat_upgrade_write_object (upgrade_file,
                                           RELAY_UPGRADE_TYPE_SERVER,
                                           infolist);
        dogechat_infolist_free (infolist);
        if (!rc)
            return 0;
    }

    /* save clients */
    for (ptr_client = last_relay_client; ptr_client;
         ptr_client = ptr_client->prev_client)
    {
        infolist = dogechat_infolist_new ();
        if (!infolist)
            return 0;
        if (!relay_client_add_to_infolist (infolist, ptr_client))
        {
            dogechat_infolist_free (infolist);
            return 0;
        }
        rc = dogechat_upgrade_write_object (upgrade_file,
                                           RELAY_UPGRADE_TYPE_CLIENT,
                                           infolist);
        dogechat_infolist_free (infolist);
        if (!rc)
            return 0;
    }

    /* save raw messages */
    for (ptr_raw_message = relay_raw_messages; ptr_raw_message;
         ptr_raw_message = ptr_raw_message->next_message)
    {
        infolist = dogechat_infolist_new ();
        if (!infolist)
            return 0;
        if (!relay_raw_add_to_infolist (infolist, ptr_raw_message))
        {
            dogechat_infolist_free (infolist);
            return 0;
        }
        rc = dogechat_upgrade_write_object (upgrade_file,
                                           RELAY_UPGRADE_TYPE_RAW_MESSAGE,
                                           infolist);
        dogechat_infolist_free (infolist);
        if (!rc)
            return 0;
    }

    return 1;
}