/*
graph.c -- graph algorithms
- Copyright (C) 2001-2011 Guus Sliepen <guus@tinc-vpn.org>,
+ Copyright (C) 2001-2012 Guus Sliepen <guus@tinc-vpn.org>,
2001-2005 Ivo Timmermans
This program is free software; you can redistribute it and/or modify
myself->status.visited = true;
myself->status.indirect = false;
myself->nexthop = myself;
+ myself->prevedge = NULL;
myself->via = myself;
list_insert_head(todo_list, myself);
e->to->status.visited = true;
e->to->status.indirect = indirect;
e->to->nexthop = (n->nexthop == myself) ? e->to : n->nexthop;
+ e->to->prevedge = e;
e->to->via = indirect ? n->via : e->to;
e->to->options = e->options;
subnet_update(n, NULL, n->status.reachable);
- if(!n->status.reachable)
+ if(!n->status.reachable) {
update_node_udp(n, NULL);
- else if(n->connection)
+ memset(&n->status, 0, sizeof n->status);
+ n->options = 0;
+ } else if(n->connection) {
send_ans_key(n);
+ }
}
}
}
node_t *n;
edge_t *e;
char *filename = NULL, *tmpname = NULL;
- FILE *file;
+ FILE *file, *pipe = NULL;
if(!graph_changed || !get_config_string(lookup_config(config_tree, "GraphDumpFile"), &filename))
return;
ifdebug(PROTOCOL) logger(LOG_NOTICE, "Dumping graph");
if(filename[0] == '|') {
- file = popen(filename + 1, "w");
+ file = pipe = popen(filename + 1, "w");
} else {
xasprintf(&tmpname, "%s.new", filename);
file = fopen(tmpname, "w");
fprintf(file, "}\n");
- if(filename[0] == '|') {
- pclose(file);
+ if(pipe) {
+ pclose(pipe);
} else {
fclose(file);
#ifdef HAVE_MINGW