X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fprotocol_auth.c;h=7db41d51eb0d54159955fdbf0f74705ac7fe3095;hb=819884b6a5c5dc5514df2bfed6725e72c4eac840;hp=2154faae09cce7cf9a305464561eaf2e9adb507f;hpb=b2d1ccdaf1554f2f34e8acb86f89190cb93b6634;p=meshlink diff --git a/src/protocol_auth.c b/src/protocol_auth.c index 2154faae..7db41d51 100644 --- a/src/protocol_auth.c +++ b/src/protocol_auth.c @@ -146,6 +146,9 @@ static bool receive_invitation_sptps(void *handle, uint8_t type, const void *dat connection_t *c = handle; meshlink_handle_t *mesh = c->mesh; + // Extend the time for the invitation exchange upon receiving a valid message + c->last_ping_time = mesh->loop.now.tv_sec; + if(type == SPTPS_HANDSHAKE) { // The peer should send its cookie first. return true; @@ -207,6 +210,7 @@ bool id_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { c->protocol_minor = 2; c->allow_request = 1; + c->last_ping_time = mesh->loop.now.tv_sec; return sptps_start(&c->sptps, c, false, false, mesh->invitation_key, c->ecdsa, meshlink_invitation_label, sizeof(meshlink_invitation_label), send_meta_sptps, receive_invitation_sptps); } @@ -275,6 +279,7 @@ bool id_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { } c->allow_request = ACK; + c->last_ping_time = mesh->loop.now.tv_sec; char label[sizeof(meshlink_tcp_label) + strlen(mesh->self->name) + strlen(c->name) + 2]; if(c->outgoing) { @@ -291,6 +296,7 @@ bool id_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { } bool send_ack(meshlink_handle_t *mesh, connection_t *c) { + c->last_ping_time = mesh->loop.now.tv_sec; return send_request(mesh, c, NULL, "%d %s %d %x", ACK, mesh->myport, mesh->devclass, OPTION_PMTU_DISCOVERY | (PROT_MINOR << 24)); } @@ -360,6 +366,7 @@ bool ack_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { n->last_successfull_connection = mesh->loop.now.tv_sec; n->connection = c; + n->nexthop = n; c->node = n; /* Activate this connection */ @@ -389,6 +396,7 @@ bool ack_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { c->edge->weight = mesh->dev_class_traits[devclass].edge_weight; c->edge->connection = c; + node_add_recent_address(mesh, n, &c->address); edge_add(mesh, c->edge); /* Notify everyone of the new edge */ @@ -399,5 +407,11 @@ bool ack_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { graph(mesh); + /* Request a session key to jump start UDP traffic */ + + if(c->status.initiator) { + send_req_key(mesh, n); + } + return true; }