]> git.meshlink.io Git - meshlink-tiny/commitdiff
Ensure we exchange a session key for application data exchange.
authorGuus Sliepen <guus@meshlink.io>
Sat, 19 Jun 2021 21:38:49 +0000 (23:38 +0200)
committerGuus Sliepen <guus@meshlink.io>
Sat, 19 Jun 2021 21:39:16 +0000 (23:39 +0200)
We need to create an edge and send it to the peer, so it will be able to
run its graph algorithms and consider us reachable, otherwise it will not
respond to REQ_KEY requests.

src/net.c
src/protocol.h
src/protocol_auth.c
src/protocol_edge.c

index c05baf77be7d78ff6f80a9d3cd136276c0850264..101c95792dc3eb76476205a85dd3f68bd0b149b7 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -62,6 +62,8 @@ void terminate_connection(meshlink_handle_t *mesh, connection_t *c, bool report)
                }
 
                c->node->connection = NULL;
+               c->node->status.reachable = false;
+               update_node_status(mesh, c->node);
        }
 
        c->status.active = false;
index 3ac0397a961bc328ceb6d1e8fd7f137b2fa31295..215840da38b345b388519a9062b1e2895b1a95b0 100644 (file)
@@ -81,6 +81,7 @@ bool send_ack(struct meshlink_handle *mesh, struct connection_t *);
 bool send_error(struct meshlink_handle *mesh, struct connection_t *, request_error_t, const char *);
 bool send_ping(struct meshlink_handle *mesh, struct connection_t *);
 bool send_pong(struct meshlink_handle *mesh, struct connection_t *);
+bool send_add_edge(struct meshlink_handle *mesh, struct connection_t *, int);
 bool send_req_key(struct meshlink_handle *mesh, struct node_t *);
 bool send_canonical_address(struct meshlink_handle *mesh, struct node_t *);
 
index 5ee7a5f5e98e5b10495938e86d0d966e8a4bf5fa..573da14817126e6876bed2d15397f747adc2d815 100644 (file)
@@ -196,7 +196,9 @@ bool ack_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
                mesh->meta_status_cb(mesh, (meshlink_node_t *)n, true);
        }
 
-       /* TODO: Create an edge_t for this connection, send it */
+       send_add_edge(mesh, c, 0);
+       n->status.reachable = true;
+       update_node_status(mesh, c->node);
 
        /* Request a session key to jump start UDP traffic */
 
index 28e2e7b44ffb44b98c01ce79d83bc50cf3c9e625..18615ce049d67ae7b4d2c95a22e4fbf7a40d1963 100644 (file)
 #include "utils.h"
 #include "xalloc.h"
 
-#if 0
-bool send_add_edge(meshlink_handle_t *mesh, connection_t *c, const edge_t *e, int contradictions) {
-       bool x;
+bool send_add_edge(meshlink_handle_t *mesh, connection_t *c, int contradictions) {
        char *address, *port;
-       const char *from_submesh, *to_submesh;
-       const submesh_t *s = NULL;
-
-       if(c->node && c->node->submesh) {
-               if(!submesh_allows_node(e->from->submesh, c->node)) {
-                       return true;
-               }
-
-               if(!submesh_allows_node(e->to->submesh, c->node)) {
-                       return true;
-               }
-       }
-
-       if(e->from->submesh && e->to->submesh && (e->from->submesh != e->to->submesh)) {
-               return true;
-       }
+       sockaddr2str(&c->address, &address, &port);
 
-       sockaddr2str(&e->address, &address, &port);
+       bool result = send_request(mesh, c, "%d %x %s %d %s %s %s %s %d %s %x %d %d %x", ADD_EDGE, prng(mesh, UINT_MAX),
+                                  mesh->self->name, mesh->self->devclass, CORE_MESH,
+                                  mesh->peer->name, address, port,
+                                  mesh->peer->devclass, CORE_MESH, 0, 1000, contradictions, mesh->peer->session_id);
 
-       if(e->from->submesh) {
-               from_submesh = e->from->submesh->name;
-       } else {
-               from_submesh = CORE_MESH;
-       }
-
-       if(e->to->submesh) {
-               to_submesh = e->to->submesh->name;
-       } else {
-               to_submesh = CORE_MESH;
-       }
-
-       if(e->from->submesh) {
-               s = e->from->submesh;
-       } else {
-               s = e->to->submesh;
-       }
-
-       x = send_request(mesh, c, s, "%d %x %s %d %s %s %s %s %d %s %x %d %d %x", ADD_EDGE, prng(mesh, UINT_MAX),
-                        e->from->name, e->from->devclass, from_submesh, e->to->name, address, port,
-                        e->to->devclass, to_submesh, OPTION_PMTU_DISCOVERY, e->weight, contradictions, e->from->session_id);
        free(address);
        free(port);
 
-       return x;
+       return result;
 }
-#endif
 
 bool add_edge_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
        assert(request);