Ensure peers with a meta connection always have our key.

This keeps UDP probes going, which in turn keeps NAT mappings alive.
This commit is contained in:
Guus Sliepen 2010-02-03 11:18:46 +01:00
parent 40d91ff619
commit cd0c2e86a4
2 changed files with 12 additions and 8 deletions

View file

@ -95,7 +95,7 @@ extern bool send_add_subnet(struct connection_t *, const struct subnet_t *);
extern bool send_del_subnet(struct connection_t *, const struct subnet_t *); extern bool send_del_subnet(struct connection_t *, const struct subnet_t *);
extern bool send_add_edge(struct connection_t *, const struct edge_t *); extern bool send_add_edge(struct connection_t *, const struct edge_t *);
extern bool send_del_edge(struct connection_t *, const struct edge_t *); extern bool send_del_edge(struct connection_t *, const struct edge_t *);
extern bool send_key_changed(); extern void send_key_changed();
extern bool send_req_key(struct node_t *); extern bool send_req_key(struct node_t *);
extern bool send_ans_key(struct node_t *); extern bool send_ans_key(struct node_t *);
extern bool send_tcppacket(struct connection_t *, struct vpn_packet_t *); extern bool send_tcppacket(struct connection_t *, struct vpn_packet_t *);

View file

@ -36,15 +36,19 @@
bool mykeyused = false; bool mykeyused = false;
bool send_key_changed() { void send_key_changed() {
/* Only send this message if some other daemon requested our key previously. avl_node_t *node;
This reduces unnecessary key_changed broadcasts. connection_t *c;
*/
if(!mykeyused) send_request(broadcast, "%d %x %s", KEY_CHANGED, rand(), myself->name);
return true;
return send_request(broadcast, "%d %x %s", KEY_CHANGED, rand(), myself->name); /* Immediately send new keys to directly connected nodes to keep UDP mappings alive */
for(node = connection_tree->head; node; node = node->next) {
c = node->data;
if(c->status.active && c->node && c->node->status.reachable)
send_ans_key(c->node);
}
} }
bool key_changed_h(connection_t *c) { bool key_changed_h(connection_t *c) {