Fix connection stall when idle p2p refresh occurs

The edge received packets from the supernode and thought that the other
peer was still active, but the other peer had dropped the p2p connection
due to refresh
This commit is contained in:
emanuele-f 2019-06-08 17:50:48 +02:00
parent f038f22a0b
commit 0e6db6361e
2 changed files with 8 additions and 4 deletions

View File

@ -422,6 +422,9 @@ static void check_peer_registration_needed(n2n_edge_t * eee,
/* Already in known_peers. */
time_t now = time(NULL);
if(!from_supernode)
scan->last_p2p = now;
if((now - scan->last_seen) > 0 /* >= 1 sec */) {
/* Don't register too often */
check_known_peer_sock_change(eee, from_supernode, mac, peer, now);
@ -1095,7 +1098,7 @@ static int find_peer_destination(n2n_edge_t * eee,
if((scan->last_seen > 0) &&
(memcmp(mac_address, scan->mac_addr, N2N_MAC_SIZE) == 0)) {
if((now - scan->last_seen) >= (scan->timeout / 2)) {
if((now - scan->last_p2p) >= (scan->timeout / 2)) {
/* Too much time passed since we saw the peer, need to register again
* since the peer address may have changed. */
traceEvent(TRACE_DEBUG, "Refreshing idle known peer");

1
n2n.h
View File

@ -173,6 +173,7 @@ struct peer_info {
n2n_sock_t sock;
int timeout;
time_t last_seen;
time_t last_p2p;
};
#define N2N_EDGE_SN_HOST_SIZE 48