From f93e2d4de6e8140276ce84d173bfb80acaf45830 Mon Sep 17 00:00:00 2001 From: Jesper Jensen Date: Sat, 10 May 2025 11:43:31 +0200 Subject: Rebuild the rounting table on startup --- src/main.c | 1 + src/routing.c | 17 +++++++++++++++++ src/routing.h | 1 + 3 files changed, 19 insertions(+) diff --git a/src/main.c b/src/main.c index 11e39bd..f0be10a 100644 --- a/src/main.c +++ b/src/main.c @@ -158,6 +158,7 @@ int main(int argc, char** argv) { } else { routing_setid(&myID); routing_reset_expire(time(NULL) + PROTO_UNCTM); + routing_rebuild_table(); } dht.self = myID; diff --git a/src/routing.c b/src/routing.c index 02b2f03..3ef418f 100644 --- a/src/routing.c +++ b/src/routing.c @@ -80,6 +80,23 @@ void routing_update_metrics() { } } +void routing_rebuild_table() { + struct entry table_swap[RT_SIZE]; + memcpy(table_swap, pTable->table, sizeof(pTable->table)); + routing_flush(); + + for(size_t i = 0; i < RT_SIZE; i++) { + if(!table_swap[i].set) continue; + + struct entry *entry; + if(routing_offer(&table_swap[i].id, &entry)) { + *entry = table_swap[i]; + } else { + dbg("Dropping a client since we already have enough in that bucket"); + } + } +} + void routing_flush() { memset(pTable->table, 0, sizeof(pTable->table)); } diff --git a/src/routing.h b/src/routing.h index 2d53b80..a6d1e84 100644 --- a/src/routing.h +++ b/src/routing.h @@ -39,6 +39,7 @@ extern int table_size; void routing_init(struct nodeid* myid); void routing_setid(struct nodeid *id); void routing_update_metrics(); +void routing_rebuild_table(); void routing_flush(); bool routing_interested(struct nodeid* id); bool routing_offer(struct nodeid* id, struct entry **dest); -- cgit v1.2.3