Exemplo n.º 1
0
/**
 * Function that gets the data of a specific hash
 * @param server_struct is the main structure for the server.
 * @param hash is the hash (in hex format) of which we want the data.
 * @returns a json formatted string.
 */
static gchar *get_data_from_a_specific_hash(server_struct_t *server_struct, gchar *hash)
{
    gchar *answer = NULL;
    backend_t *backend = NULL;
    hash_data_t *hash_data = NULL;

    if (server_struct != NULL && server_struct->backend != NULL)
        {
            backend = server_struct->backend;

            if (backend->retrieve_data != NULL)
                {
                    hash_data = backend->retrieve_data(server_struct, hash);
                    answer = convert_hash_data_t_to_string(hash_data);
                    free_hash_data_t(hash_data);

                    if (answer == NULL)
                        {
                            answer = g_strdup_printf("Error while trying to get data from hash %s", hash);
                        }
                }
            else
                {
                    answer = g_strdup(_("This backend's missing a retrieve_data function!"));
                }
        }
    else
        {
            answer = g_strdup(_("Something's wrong with server's initialisation!"));
        }

    return answer;
}
Exemplo n.º 2
0
/**
 * Gets all data from a list of hash obtained from X-Get-Hash-Array HTTP
 * header.
 * @param server_struct is the main structure for the server.
 * @param connection is the connection in MHD
 * @returns a newlly allocated gchar * string that contains the anwser to be
 *          sent back to the client (hopefully a json string containing
 *          a hash (that is a fake one here), data and size of the data.
 */
static gchar *get_data_from_a_list_of_hashs(server_struct_t *server_struct, struct MHD_Connection *connection)
{
    const char *header = NULL;
    gchar *answer = NULL;
    gchar *hash = NULL;
    GList *head = NULL;
    GList *header_hdl = NULL;
    GList *hash_data_list = NULL;
    hash_data_t *header_hd = NULL;
    hash_data_t *hash_data = NULL;
    backend_t *backend = server_struct->backend;
    guint size = 0;


    header = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "X-Get-Hash-Array");
    header_hdl = make_hash_data_list_from_string((gchar *)header);

    head = header_hdl;
    while (header_hdl != NULL)
        {
            header_hd = header_hdl->data;
            hash = hash_to_string(header_hd->hash);
            hash_data = backend->retrieve_data(server_struct, hash);
            free_variable(hash);
            size = size + hash_data->read;
            hash_data_list = g_list_prepend(hash_data_list, hash_data);
            header_hdl = g_list_next(header_hdl);
        }

    g_list_free_full(head, free_hdt_struct);
    hash_data_list = g_list_reverse(hash_data_list);

    head = hash_data_list;

    hash_data = create_one_hash_data_t_from_hash_data_list(hash_data_list, size);

    g_list_free_full(head, free_hdt_struct);

    answer = convert_hash_data_t_to_string(hash_data);

    free_hash_data_t(hash_data);

    return answer;
}
Exemplo n.º 3
0
/**
 * handler for g_slist_free_full
 * @param data must be a hash_data_t * structure.
 */
void free_hdt_struct(gpointer data)
{
    free_hash_data_t(data);
}