X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fprotocol_edge.c;h=a4aaa0c918adfbb3c28e5b0c1cac94cb1e353a3b;hb=4d7469e0da6652bddc8acde499068db4b41b646d;hp=c000ec0595ee44e496c1a5bc2cbf1f9b8ad150b5;hpb=3c54765bcdf8bd6114da0cb31f45404950089e3a;p=tinc diff --git a/src/protocol_edge.c b/src/protocol_edge.c index c000ec05..a4aaa0c9 100644 --- a/src/protocol_edge.c +++ b/src/protocol_edge.c @@ -142,8 +142,18 @@ bool add_edge_h(connection_t *c, const char *request) { } else { logger(DEBUG_PROTOCOL, LOG_WARNING, "Got %s from %s (%s) which does not match existing entry", "ADD_EDGE", c->name, c->hostname); - edge_del(e); - graph(); + e->options = options; + if(sockaddrcmp(&e->address, &address)) { + sockaddrfree(&e->address); + e->address = address; + } + if(e->weight != weight) { + avl_node_t *node = avl_unlink(edge_weight_tree, e); + e->weight = weight; + avl_insert_node(edge_weight_tree, node); + } + + goto done; } } else if(sockaddrcmp(&e->local_address, &local_address)) { if(from == myself) { @@ -201,6 +211,7 @@ bool add_edge_h(connection_t *c, const char *request) { e->weight = weight; edge_add(e); +done: /* Tell the rest about the new edge */ if(!tunnelserver)