]> git.meshlink.io Git - meshlink/blobdiff - src/protocol_auth.c
Extend the timeout period of the authentication phase on progress.
[meshlink] / src / protocol_auth.c
index 2154faae09cce7cf9a305464561eaf2e9adb507f..7db41d51eb0d54159955fdbf0f74705ac7fe3095 100644 (file)
@@ -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;
 }