* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#pragma GCC optimize ("O0")
+/* # pragma GCC optimize ("O0") */
#include "ks_dht.h"
static
ks_dht_node_t *ks_dhtrt_make_node(ks_dhtrt_routetable_t *table);
static
-ks_status_t ks_dhtrt_insert_node(ks_dhtrt_routetable_t *table, ks_dht_node_t *node);
+ks_status_t ks_dhtrt_insert_node(ks_dhtrt_routetable_t *table, ks_dht_node_t *node, enum ks_create_node_flags_t flags);
static
-ks_status_t ks_dhtrt_insert_id(ks_dhtrt_bucket_t *bucket, ks_dht_node_t *node);
+ks_dhtrt_bucket_entry_t* ks_dhtrt_insert_id(ks_dhtrt_bucket_t *bucket, ks_dht_node_t *node);
static
ks_status_t ks_dhtrt_delete_id(ks_dhtrt_bucket_t *bucket, ks_dhtrt_nodeid_t id);
static
enum ks_dht_nodetype_t type,
char *ip,
unsigned short port,
+ enum ks_create_node_flags_t flags,
ks_dht_node_t **node)
{
if (!table || !table->internal) {
ks_dhtrt_bucket_entry_t *bentry = ks_dhtrt_find_bucketentry(header, nodeid.id);
- if (bentry != 0) {
+ if (bentry != 0) {
+
+ ks_rwl_read_lock(header->bucket->lock);
+
bentry->tyme = ks_time_now_sec();
+
+ /* touch */
+ if (flags == KS_DHTRT_CREATE_TOUCH) {
+ bentry->outstanding_pings = 0;
+ bentry->touched = 1;
+ if (bentry->flags == DHTPEER_EXPIRED) {
+ --header->bucket->expired_count;
+ }
+ }
if (bentry->touched) {
bentry->flags = DHTPEER_ACTIVE;
}
+ /* ping */
+ if (!bentry->touched && !bentry->outstanding_pings) {
+ ks_dhtrt_ping(internal, bentry);
+ }
+
tnode = bentry->gptr;
+
+ ks_rwl_read_unlock(header->bucket->lock);
ks_rwl_read_lock( tnode->reflock);
ks_rwl_read_unlock(internal->lock);
+
(*node) = tnode;
return KS_STATUS_SUCCESS;
}
tnode = ks_dhtrt_make_node(table);
tnode->table = table;
- enum ks_afflags_t family;
+ enum ks_afflags_t family = AF_INET;
for (int i = 0; i < 5; ++i) {
if (ip[i] == ':') {
- family = AF_INET6; break;
+ family = AF_INET6;
+ break;
} else if (ip[i] == '.') {
- family = AF_INET; break;
+ family = AF_INET;
+ break;
}
}
return KS_STATUS_FAIL;
}
- ks_status_t s = ks_dhtrt_insert_node(table, tnode);
+ ks_status_t s = ks_dhtrt_insert_node(table, tnode, flags);
if (tnode && s == KS_STATUS_SUCCESS) {
ks_rwl_read_lock( tnode->reflock);
}
static
-ks_status_t ks_dhtrt_insert_node(ks_dhtrt_routetable_t *table, ks_dht_node_t *node)
+ks_status_t ks_dhtrt_insert_node(ks_dhtrt_routetable_t *table, ks_dht_node_t *node, enum ks_create_node_flags_t flags)
{
if (!table || !table->internal) {
return KS_STATUS_FAIL;
/* first - seek a stale entry to eject */
if (bucket->expired_count) {
- ks_status_t s = ks_dhtrt_insert_id(bucket, node);
+ ks_dhtrt_bucket_entry_t* entry = ks_dhtrt_insert_id(bucket, node);
- if (s == KS_STATUS_SUCCESS) {
+ if (entry != NULL) {
#ifdef KS_DHT_DEBUGLOCKPRINTF_
ks_log(KS_LOG_DEBUG, "insert node: UNLOCKING bucket %s\n", ks_dhtrt_printableid(header->mask, buf));
#endif
ks_log(KS_LOG_DEBUG, " ...into bucket %s\n", ks_dhtrt_printableid(header->mask, buffer));
#endif
- ks_status_t s = ks_dhtrt_insert_id(bucket, node);
+ ks_status_t s = KS_STATUS_FAIL;
+
+ ks_dhtrt_bucket_entry_t* entry = ks_dhtrt_insert_id(bucket, node);
+ if (entry != NULL) {
+ s = KS_STATUS_SUCCESS;
+ /* touch */
+ if (flags == KS_DHTRT_CREATE_TOUCH) {
+ entry->flags = DHTPEER_ACTIVE;
+ entry->touched = 1;
+ }
+ else if (flags == KS_DHTRT_CREATE_PING ) {
+ ks_dhtrt_ping(internal, entry);
+ }
+ }
ks_rwl_write_unlock(internal->lock);
#ifdef KS_DHT_DEBUGLOCKPRINTF_
ks_log(KS_LOG_DEBUG, "Insert node: UNLOCKING bucket %s\n",
* so at least the static array does away with the need for locking.
*/
static
-ks_status_t ks_dhtrt_insert_id(ks_dhtrt_bucket_t *bucket, ks_dht_node_t *node)
+ks_dhtrt_bucket_entry_t* ks_dhtrt_insert_id(ks_dhtrt_bucket_t *bucket, ks_dht_node_t *node)
{
/* sanity checks */
if (!bucket || bucket->count > KS_DHT_BUCKETSIZE) {
ks_log(KS_LOG_DEBUG, "duplicate peer %s found at %d\n", ks_dhtrt_printableid(node->nodeid.id, buffer), ix);
#endif
bucket->entries[ix].tyme = ks_time_now_sec();
- return KS_STATUS_SUCCESS; /* already exists : leave flags unchanged */
+ return &bucket->entries[ix]; /* already exists : leave flags unchanged */
}
}
char buffer[100];
ks_log(KS_LOG_DEBUG, "Inserting node %s at %d\n", ks_dhtrt_printableid(node->nodeid.id, buffer), free);
#endif
- return KS_STATUS_SUCCESS;
+ return &bucket->entries[free];
}
- return KS_STATUS_FAIL;
+ return NULL;
}
static
ks_dht_node_t *peer1;
ks_status_t status;
- status = ks_dhtrt_create_node(rt, homeid, KS_DHT_LOCAL, ip, port, &peer);
+ status = ks_dhtrt_create_node(rt, homeid, KS_DHT_LOCAL, ip, port, KS_DHTRT_CREATE_DEFAULT, &peer);
if (status == KS_STATUS_FAIL) {
printf("* **ks_dhtrt_create_node test01 failed\n");
exit(101);
exit(102);
}
- status = ks_dhtrt_create_node(rt, homeid, KS_DHT_LOCAL, ip, port, &peer1);
+ status = ks_dhtrt_create_node(rt, homeid, KS_DHT_LOCAL, ip, port, KS_DHTRT_CREATE_DEFAULT, &peer1);
if (status == KS_STATUS_FAIL) {
- printf("**** ks_dhtrt_create_node test01 did allow duplicate createnodes!!\n");
+ printf("**** ks_dhtrt_create_node test01 did not allow duplicate createnodes!!\n");
exit(103);
}
if (peer != peer1) {
exit(104);
}
+ /* test create_node flags */
+ /* ---------------------- */
+
+ memset(homeid.id, 0xab, KS_DHT_NODEID_SIZE);
+ status = ks_dhtrt_create_node(rt, homeid, KS_DHT_LOCAL, ip, port, KS_DHTRT_CREATE_PING, &peer);
+
+ peer = ks_dhtrt_find_node(rt, homeid);
+ if (peer != 0) {
+ printf("*** ks_dhtrt_find_node test01 failed. find@2 should fail\n"); fflush(stdout);
+ exit(106);
+ }
+
+ status = ks_dhtrt_create_node(rt, homeid, KS_DHT_LOCAL, ip, port, KS_DHTRT_CREATE_TOUCH, &peer);
+ peer1 = ks_dhtrt_find_node(rt, homeid);
+ if (peer1 == 0) {
+ printf("*** ks_dhtrt_find_node test01 failed. find@3 should succeed after create w/touch\n"); fflush(stdout);
+ exit(106);
+ }
+ if (peer1 != peer) {
+ printf("*** peer != peer1 @4 - both creates should return the same node\n"); fflush(stdout);
+ exit(107);
+ }
+
+ /* ok now delete both and see what happens */
+ ks_dhtrt_delete_node(rt, peer);
+ ks_dhtrt_delete_node(rt, peer1);
+
+ memset(nodeid.id, 0xab, KS_DHT_NODEID_SIZE);
+ status = ks_dhtrt_create_node(rt, homeid, KS_DHT_LOCAL, ip, port, KS_DHTRT_CREATE_TOUCH, &peer);
+
+ peer = ks_dhtrt_find_node(rt, nodeid);
+ if (peer == 0) {
+ printf("*** ks_dhtrt_find_node test01 failed. find@5 should succeed after create_node w/touch\n"); fflush(stdout);
+ exit(108);
+ }
+
+ ks_dhtrt_delete_node(rt, peer);
+
printf("**** testbuckets - test01 complete\n\n\n"); fflush(stdout);
}
ks_status_t status;
nodeid.id[0] = 1;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv6, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv6, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
nodeid.id[0] = 2;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
nodeid.id[0] = 3;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
nodeid.id[0] = 4;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv6, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv6, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
nodeid.id[1] = 1;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
nodeid.id[19] = 1;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
nodeid.id[19] = 2;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
nodeid.id[19] = 3;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
nodeid.id[19] = 4;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
nodeid.id[19] = 5;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
nodeid.id[19] = 6;
- status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, &peer);
+ status = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
int qcount = doquery(rt, nodeid.id, KS_DHT_LOCAL, both);
printf("\n* **local query count expected 3, actual %d\n", qcount); fflush(stdout);
for (int i=0; i<200; ++i) {
if (i%10 == 0) {
- ++nodeid.id[0];
- nodeid.id[1] = 0;
+ ++nodeid.id[0];
+ nodeid.id[1] = 0;
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
- ks_status_t s0 = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
- if (s0 == KS_STATUS_SUCCESS) {
- ks_dhtrt_touch_node(rt, nodeid);
- ++ipv4_remote;
+ ks_status_t s0 = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
+ if (s0 == KS_STATUS_SUCCESS) {
+ ks_dhtrt_touch_node(rt, nodeid);
+ ++ipv4_remote;
}
}
for (int i=0; i<2; ++i) {
- if (i%10 == 0) {
- ++nodeid.id[0];
- nodeid.id[1] = 0;
+ if (i%10 == 0) {
+ ++nodeid.id[0];
+ nodeid.id[1] = 0;
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
- ks_status_t s0 = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, &peer);
+ ks_status_t s0 = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
if (s0 == KS_STATUS_SUCCESS) {
- ks_dhtrt_touch_node(rt, nodeid);
- ++ipv4_local;
+ ks_dhtrt_touch_node(rt, nodeid);
+ ++ipv4_local;
}
}
for (int i=0; i<201; ++i) {
if (i%10 == 0) {
- ++nodeid.id[0];
- nodeid.id[1] = 0;
+ ++nodeid.id[0];
+ nodeid.id[1] = 0;
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
- ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, &peer);
+ ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
}
else {
++nodeid.id[1];
}
- ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
}
char ipv4[] = "123.123.123.123";
unsigned short port = 7001;
- ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
peer1 = ks_dhtrt_find_node(rt, nodeid);
char ipv4[] = "123.123.123.123";
unsigned short port = 7000;
- ks_dhtrt_create_node(rt, g_nodeid1, KS_DHT_REMOTE, ipv4, port, &peer); // lock=1
+ ks_dhtrt_create_node(rt, g_nodeid1, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer); // lock=1
ks_dhtrt_touch_node(rt, g_nodeid1);
ks_dht_node_t *peer2 = ks_dhtrt_find_node(rt, g_nodeid1); //lock=2
else {
++ g_nodeid2.id[19];
}
- ks_dhtrt_create_node(rt, g_nodeid2, KS_DHT_REMOTE, ipv4, port, &peer);
+ ks_dhtrt_create_node(rt, g_nodeid2, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, g_nodeid2);
ks_dhtrt_release_node(peer);
}
ks_sleep(10000);
for (int i=0; i<query.count; ++i) {
- ks_dhtrt_release_node(query.nodes[i]);
- ks_sleep(10000);
+ ks_dhtrt_release_node(query.nodes[i]);
+ ks_sleep(10000);
}
ks_sleep(2000000);
for (int loop=0; loop<test60loops; ++loop) {
for (int i=0; i<test60nodes; ++i) {
- ++nodeid.id[19];
- ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, &peer);
- ks_sleep(1000);
- ks_dhtrt_touch_node(rt, nodeid);
+ ++nodeid.id[19];
+ ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
+ ks_sleep(1000);
+ ks_dhtrt_touch_node(rt, nodeid);
}
for (int i=0; i<test60nodes; ++i) {
- peer = ks_dhtrt_find_node(rt, nodeid);
- if (peer) {
- ks_dhtrt_delete_node(rt, peer);
- ks_sleep(400);
- }
- --nodeid.id[19];
+ peer = ks_dhtrt_find_node(rt, nodeid);
+ if (peer) {
+ ks_dhtrt_delete_node(rt, peer);
+ ks_sleep(400);
+ }
+ --nodeid.id[19];
}
}
for (int i=0; i<200; ++i) {
if (i%10 == 0) {
- ++nodeid.id[0];
- nodeid.id[1] = 0;
+ ++nodeid.id[0];
+ nodeid.id[1] = 0;
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
- ks_status_t s0 = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ ks_status_t s0 = ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
if (s0 == KS_STATUS_SUCCESS) {
- ks_dhtrt_touch_node(rt, nodeid);
- ++ipv4_remote;
+ ks_dhtrt_touch_node(rt, nodeid);
+ ++ipv4_remote;
}
}
for (int i=0; i<2; ++i) {
if (i%10 == 0) {
- ++nodeid.id[0];
- nodeid.id[1] = 0;
+ ++nodeid.id[0];
+ nodeid.id[1] = 0;
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
- ks_status_t s0 = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, &peer);
+ ks_status_t s0 = ks_dhtrt_create_node(rt, nodeid, KS_DHT_LOCAL, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
if (s0 == KS_STATUS_SUCCESS) {
- ks_dhtrt_touch_node(rt, nodeid);
- ++ipv4_local;
+ ks_dhtrt_touch_node(rt, nodeid);
+ ++ipv4_local;
}
}
for (int i=0; i<201; ++i) {
if (i%10 == 0) {
- ++nodeid.id[0];
- nodeid.id[1] = 0;
+ ++nodeid.id[0];
+ nodeid.id[1] = 0;
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
- ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, &peer);
+ ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv6, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
}
for (int i=0,i2=0; i<200; ++i, ++i2) {
if (i%20 == 0) {
- nodeid.id[0] = nodeid.id[0] / 2;
- if (i2%20 == 0) {
- i2 = 0;
- nodeid.id[1] = nodeid.id[1] / 2;
- }
- else {
- ++nodeid.id[2];
- }
+ nodeid.id[0] = nodeid.id[0] / 2;
+ if (i2%20 == 0) {
+ i2 = 0;
+ nodeid.id[1] = nodeid.id[1] / 2;
+ }
+ else {
+ ++nodeid.id[2];
+ }
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
- ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
}
memset(nodeid.id, 0xef, KS_DHT_NODEID_SIZE);
for (int i=0,i2=0; i<200; ++i, ++i2) {
- if (i%20 == 0) {
- nodeid.id[0] = nodeid.id[0] / 2;
- if (i2%20 == 0) {
- i2 = 0;
- nodeid.id[1] = nodeid.id[1] / 2;
- }
- else {
- ++nodeid.id[2];
- }
+ if (i%20 == 0) {
+ nodeid.id[0] = nodeid.id[0] / 2;
+ if (i2%20 == 0) {
+ i2 = 0;
+ nodeid.id[1] = nodeid.id[1] / 2;
+ }
+ else {
+ ++nodeid.id[2];
+ }
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
ks_dht_node_t *n = ks_dhtrt_find_node(rt, nodeid);
if (n != NULL) {
- ks_dhtrt_release_node(n);
- ks_dhtrt_delete_node(rt, n);
+ ks_dhtrt_release_node(n);
+ ks_dhtrt_delete_node(rt, n);
}
}
for (int i=0,i2=0; i<200; ++i, ++i2) {
if (i%20 == 0) {
- nodeid.id[0] = nodeid.id[0] / 2;
- if (i2%20 == 0) {
- i2 = 0;
- nodeid.id[1] = nodeid.id[1] / 2;
- }
- else {
- ++nodeid.id[2];
- }
+ nodeid.id[0] = nodeid.id[0] / 2;
+ if (i2%20 == 0) {
+ i2 = 0;
+ nodeid.id[1] = nodeid.id[1] / 2;
+ }
+ else {
+ ++nodeid.id[2];
+ }
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
- ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
}
for (int i=0,i2=0; i<2; ++i, ++i2) {
if (i%20 == 0) {
- nodeid.id[0] = nodeid.id[0] / 2;
- if (i2%20 == 0) {
- i2 = 0;
- nodeid.id[1] = nodeid.id[1] / 2;
- }
- else {
- ++nodeid.id[2];
- }
+ nodeid.id[0] = nodeid.id[0] / 2;
+ if (i2%20 == 0) {
+ i2 = 0;
+ nodeid.id[1] = nodeid.id[1] / 2;
+ }
+ else {
+ ++nodeid.id[2];
+ }
}
else {
- ++nodeid.id[1];
+ ++nodeid.id[1];
}
- ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, &peer);
+ ks_dhtrt_create_node(rt, nodeid, KS_DHT_REMOTE, ipv4, port, KS_DHTRT_CREATE_DEFAULT, &peer);
ks_dhtrt_touch_node(rt, nodeid);
}
for (int tix=0; tix<argc; ++tix) {
if (tests[tix] == 1) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test01();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test01();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
if (tests[tix] == 2) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test02();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test02();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
if (tests[tix] == 3) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test03();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test03();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
if (tests[tix] == 4) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test04();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test04();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
if (tests[tix] == 5) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test05();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test05();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
if (tests[tix] == 6) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test06();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test06();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
}
if (tests[tix] == 30) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test30();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test30();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
if (tests[tix] == 50) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test50();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test50();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
if (tests[tix] == 51) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test51();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test51();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
if (tests[tix] == 60) {
- ks_dhtrt_initroute(&rt, dht, pool);
- test60();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ test60();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}
if (tests[tix] == 99) {
- ks_dhtrt_initroute(&rt, dht, pool);
- //testnodelocking();
- ks_dhtrt_deinitroute(&rt);
- continue;
+ ks_dhtrt_initroute(&rt, dht, pool);
+ //testnodelocking();
+ ks_dhtrt_deinitroute(&rt);
+ continue;
}