-static void dump_graph(int fd, short events, void *data) {
- avl_node_t *node;
- node_t *n;
- edge_t *e;
- char *filename = NULL, *tmpname = NULL;
- FILE *file;
-
- if(!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");
- } else {
- asprintf(&tmpname, "%s.new", filename);
- file = fopen(tmpname, "w");
- }
-
- if(!file) {
- logger(LOG_ERR, "Unable to open graph dump file %s: %s", filename, strerror(errno));
- free(tmpname);
- return;
- }
-
- fprintf(file, "digraph {\n");
-
- /* dump all nodes first */
- for(node = node_tree->head; node; node = node->next) {
- n = node->data;
- fprintf(file, " %s [label = \"%s\"];\n", n->name, n->name);
- }
+ if(!n->status.reachable) {
+ update_node_udp(n, NULL);
+ memset(&n->status, 0, sizeof n->status);
+ n->options = 0;
+ } else if(n->connection) {
+ if(n->status.sptps) {
+ if(n->connection->outgoing)
+ send_req_key(n);
+ } else {
+ send_ans_key(n);
+ }
+ }
+ }