diff --git a/dht.c b/dht.c index e733e9d..e656ab3 100644 --- a/dht.c +++ b/dht.c @@ -2358,8 +2358,8 @@ dht_periodic(const void *buf, size_t buflen, } int -dht_get_nodes(struct sockaddr_in *sin, int *num, - struct sockaddr_in6 *sin6, int *num6) +dht_get_nodes(struct sockaddr_in *sin, unsigned char* id, int *num, + struct sockaddr_in6 *sin6, unsigned char* id6, int *num6) { int i, j; struct bucket *b; @@ -2377,6 +2377,7 @@ dht_get_nodes(struct sockaddr_in *sin, int *num, while(n && i < *num) { if(node_good(n)) { sin[i] = *(struct sockaddr_in*)&n->ss; + if(id) memcpy( &id[i * 20], n->id, 20 ); i++; } n = n->next; @@ -2389,6 +2390,7 @@ dht_get_nodes(struct sockaddr_in *sin, int *num, while(n && i < *num) { if(node_good(n)) { sin[i] = *(struct sockaddr_in*)&n->ss; + if(id) memcpy( &id[i * 20], n->id, 20 ); i++; } n = n->next; @@ -2409,6 +2411,7 @@ dht_get_nodes(struct sockaddr_in *sin, int *num, while(n && j < *num6) { if(node_good(n)) { sin6[j] = *(struct sockaddr_in6*)&n->ss; + if(id6) memcpy( &id6[i * 20], n->id, 20 ); j++; } n = n->next; @@ -2421,6 +2424,7 @@ dht_get_nodes(struct sockaddr_in *sin, int *num, while(n && j < *num6) { if(node_good(n)) { sin6[j] = *(struct sockaddr_in6*)&n->ss; + if(id6) memcpy( &id6[i * 20], n->id, 20 ); j++; } n = n->next; diff --git a/dht.h b/dht.h index 31d7c46..8c2683a 100644 --- a/dht.h +++ b/dht.h @@ -49,8 +49,8 @@ int dht_nodes(int af, int *good_return, int *dubious_return, int *cached_return, int *incoming_return); void dht_dump_tables(FILE *f); -int dht_get_nodes(struct sockaddr_in *sin, int *num, - struct sockaddr_in6 *sin6, int *num6); +int dht_get_nodes(struct sockaddr_in *sin, unsigned char* id, int *num, + struct sockaddr_in6 *sin6, unsigned char* id6, int *num6); int dht_uninit(void); /* This must be provided by the user. */