Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 28 additions & 14 deletions dht.c
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ static unsigned short search_id;
/* The maximum number of nodes that we snub. There is probably little
reason to increase this value. */
#ifndef DHT_MAX_BLACKLISTED
#define DHT_MAX_BLACKLISTED 10
#define DHT_MAX_BLACKLISTED 32
#endif
static struct sockaddr_storage blacklist[DHT_MAX_BLACKLISTED];
int next_blacklisted;
Expand Down Expand Up @@ -2151,19 +2151,33 @@ dht_periodic(const void *buf, size_t buflen,
search_send_get_peers(sr, NULL);
}
if(sr) {
insert_search_node(m.id, from, fromlen, sr,
1, m.token, m.token_len);
if(m.values_len > 0 || m.values6_len > 0) {
debugf("Got values (%d+%d)!\n",
m.values_len / 6, m.values6_len / 18);
if(callback) {
if(m.values_len > 0)
(*callback)(closure, DHT_EVENT_VALUES, sr->id,
(void*)m.values, m.values_len);

if(m.values6_len > 0)
(*callback)(closure, DHT_EVENT_VALUES6, sr->id,
(void*)m.values6, m.values6_len);
/* Only accept values from nodes that have not lied about
their id */
int i;
for(i = 0; i < sr->numnodes; i++) {
if (fromlen == sr->nodes[i].sslen &&
!memcmp(from, &sr->nodes[i].ss, fromlen) &&
id_cmp(m.id, sr->nodes[i].id) != 0) {
flush_search_node(&sr->nodes[i], sr);
blacklist_node(NULL, from, fromlen);
break;
}
}
if (i == sr->numnodes) {
insert_search_node(m.id, from, fromlen, sr,
1, m.token, m.token_len);
if(m.values_len > 0 || m.values6_len > 0) {
debugf("Got values (%d+%d)!\n",
m.values_len / 6, m.values6_len / 18);
if(callback) {
if(m.values_len > 0)
(*callback)(closure, DHT_EVENT_VALUES, sr->id,
(void*)m.values, m.values_len);

if(m.values6_len > 0)
(*callback)(closure, DHT_EVENT_VALUES6, sr->id,
(void*)m.values6, m.values6_len);
}
}
}
}
Expand Down