Beispiel #1
0
/*
 * Called once all requests have been completed
 */
static void
process_client_callback(struct resolv_query *query)
{
    struct sockaddr *best_address = NULL;

    if (resolv_mode == MODE_IPV4_FIRST) {
        best_address = choose_ipv4_first(query);
    } else if (resolv_mode == MODE_IPV6_FIRST) {
        best_address = choose_ipv6_first(query);
    } else {
        best_address = choose_any(query);
    }

    query->client_cb(best_address, query->data);

    for (int i = 0; i < query->response_count; i++)
        ss_free(query->responses[i]);

    ss_free(query->responses);

    if (query->free_cb != NULL)
        query->free_cb(query->data);
    else
        ss_free(query->data);

    ss_free(query);
}
Beispiel #2
0
/*
 * Called once all queries have been completed
 */
static void
process_client_callback(struct ResolvQuery *cb_data)
{
    struct sockaddr *best_address = NULL;

    if (resolv_mode == MODE_IPV4_FIRST) {
        best_address = choose_ipv4_first(cb_data);
    } else if (resolv_mode == MODE_IPV6_FIRST) {
        best_address = choose_ipv6_first(cb_data);
    } else {
        best_address = choose_any(cb_data);
    }

    cb_data->client_cb(best_address, cb_data->client_cb_data);

    for (int i = 0; i < cb_data->response_count; i++)
        ss_free(cb_data->responses[i]);

    ss_free(cb_data->responses);
    if (cb_data->client_free_cb != NULL) {
        cb_data->client_free_cb(cb_data->client_cb_data);
    }
    ss_free(cb_data);
}