X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fprotocol_edge.c;h=e048703fdd62baec5687d3b3e1d019ac0b5c243f;hp=5d81462b6c9bb019914860b82885f8ae35bc8286;hb=e4670fc4a0576eb76f1807ce29fa9455dd247632;hpb=ea415ccc1690d6e5864a7500977b181e5c8faafe diff --git a/src/protocol_edge.c b/src/protocol_edge.c index 5d81462b..e048703f 100644 --- a/src/protocol_edge.c +++ b/src/protocol_edge.c @@ -1,7 +1,7 @@ /* protocol_edge.c -- handle the meta-protocol, edges Copyright (C) 1999-2005 Ivo Timmermans, - 2000-2009 Guus Sliepen + 2000-2012 Guus Sliepen 2009 Michael Tokarev This program is free software; you can redistribute it and/or modify @@ -125,8 +125,19 @@ bool add_edge_h(connection_t *c) { } else { ifdebug(PROTOCOL) logger(LOG_WARNING, "Got %s from %s (%s) which does not match existing entry", "ADD_EDGE", c->name, c->hostname); - edge_del(e); + 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); + } + graph(); + return true; } } else return true;