/* This callback is called when a search result arrives or a search completes */ void dht_callback_func( void *closure, int event, const UCHAR *info_hash, const void *data, size_t data_len ) { struct results_t *results; IP addr; size_t i; results = results_find( info_hash ); if( results == NULL ) { return; } switch( event ) { case DHT_EVENT_VALUES: if( gconf->af == AF_INET ) { dht_addr4_t *data4 = (dht_addr4_t *) data; for( i = 0; i < (data_len / sizeof(dht_addr4_t)); i++ ) { to_addr( &addr, &data4[i].addr, 4, data4[i].port ); results_add_addr( results, &addr ); } } break; case DHT_EVENT_VALUES6: if( gconf->af == AF_INET6 ) { dht_addr6_t *data6 = (dht_addr6_t *) data; for( i = 0; i < (data_len / sizeof(dht_addr6_t)); i++ ) { to_addr( &addr, &data6[i].addr, 16, data6[i].port ); results_add_addr( results, &addr ); } } break; case DHT_EVENT_SEARCH_DONE: case DHT_EVENT_SEARCH_DONE6: results_done( results, 1 ); break; } }
int results_compare(struct ts_results *tsr1, struct ts_results *tsr2) { int i; struct ts_plugin_results *tspr1, *tspr2; if (!tsr1 || !tsr2) { CRITICAL("Null energy result list\n"); return -1; } if (tsr1->nr_results != tsr2->nr_results) WARNING("There is a different number of results\n"); tspr1 = tsr1->tspr; tspr2 = tsr2->tspr; if (!tspr1 || !tspr2) { CRITICAL("No plugin results !\n"); return -1; } for (i = 0; i < tsr1->nr_results; i++) { struct ts_plugin_results *tspr; char *name = basename(tsr1->tspr[i].path); tspr = results_find(tspr1[i].path, tsr2); if (!tspr) { WARNING("Failed to find plugin '%s' result to compare\n", name); continue; } DEBUG("'%s': %.0lf / %.0lf usecs\n", name, tspr1[i].duration, tspr->duration); DEBUG("'%s': %lf / %lf uJ\n", name, tspr1[i].energy, tspr->energy); NOTICE("'%s': %+.2lf%% usecs / %+.2lf%% uJ\n", name, ratio(tspr1[i].duration, tspr->duration), ratio(tspr1[i].energy, tspr->energy)); } DEBUG("Overall time: %.0lf / %.0lf usecs\n", tsr1->duration, tsr2->duration); DEBUG("Overall energy: %lf / %lf uJ\n", tsr1->energy, tsr2->energy); NOTICE("Overall: %+.2lf%% usecs / %+.2lf%% uJ\n", ratio(tsr1->duration, tsr2->duration), ratio(tsr1->energy, tsr2->energy)); return 0; }