]> git.meshlink.io Git - meshlink-tiny/commitdiff
Remove support for request forwarding.
authorGuus Sliepen <guus@meshlink.io>
Sat, 19 Jun 2021 20:50:13 +0000 (22:50 +0200)
committerGuus Sliepen <guus@meshlink.io>
Sat, 19 Jun 2021 20:50:13 +0000 (22:50 +0200)
src/meshlink_internal.h
src/net_setup.c
src/protocol.c
src/protocol.h
src/protocol_key.c

index fc4683efeaa4ab857a85ce3da6a4147858321026..3113bea286fae7289124ab88924d4c2590b45087 100644 (file)
@@ -97,10 +97,6 @@ struct meshlink_handle {
        struct connection_t *connection;
        struct outgoing_t *outgoing;
 
-       // Meta-connection-related members
-       struct splay_tree_t *past_request_tree;
-       timeout_t past_request_timeout;
-
        int connection_burst;
        int contradicting_add_edge;
        int contradicting_del_edge;
index 96392809323abc57f11c2e78030e16f2be214cc0..8850f2e11133d02170b271c74b12015c8b5bb9a6 100644 (file)
@@ -342,7 +342,6 @@ static bool setup_myself(meshlink_handle_t *mesh) {
 bool setup_network(meshlink_handle_t *mesh) {
        init_connections(mesh);
        init_nodes(mesh);
-       init_requests(mesh);
 
        if(!setup_myself(mesh)) {
                return false;
@@ -360,14 +359,10 @@ void close_network_connections(meshlink_handle_t *mesh) {
                terminate_connection(mesh, mesh->connection, false);
        }
 
-       exit_requests(mesh);
        exit_nodes(mesh);
        exit_connections(mesh);
 
        free(mesh->myport);
        mesh->myport = NULL;
-
        mesh->self = NULL;
-
-       return;
 }
index d95edceda62b99f506ddfe714241d7e63b222adf..c69d7a1726c0454adef4d8f6e2295f8eed76a624 100644 (file)
@@ -116,23 +116,6 @@ bool send_request(meshlink_handle_t *mesh, connection_t *c, const char *format,
        }
 }
 
-void forward_request(meshlink_handle_t *mesh, connection_t *from, const char *request) {
-       assert(from);
-       assert(request);
-       assert(*request);
-
-       logger(mesh, MESHLINK_DEBUG, "Forwarding %s from %s: %s", request_name[atoi(request)], from->name, request);
-
-       // Create a temporary newline-terminated copy of the request
-       int len = strlen(request);
-       char tmp[len + 1];
-
-       memcpy(tmp, request, len);
-       tmp[len] = '\n';
-
-       broadcast_meta(mesh, from, tmp, sizeof(tmp));
-}
-
 bool receive_request(meshlink_handle_t *mesh, connection_t *c, const char *request) {
        assert(request);
 
@@ -164,85 +147,3 @@ bool receive_request(meshlink_handle_t *mesh, connection_t *c, const char *reque
 
        return true;
 }
-
-static int past_request_compare(const past_request_t *a, const past_request_t *b) {
-       return strcmp(a->request, b->request);
-}
-
-static void free_past_request(past_request_t *r) {
-       if(r->request) {
-               free((void *)r->request);
-       }
-
-       free(r);
-}
-
-static const int request_timeout = 60;
-
-static void age_past_requests(event_loop_t *loop, void *data) {
-       (void)data;
-       meshlink_handle_t *mesh = loop->data;
-       int left = 0, deleted = 0;
-
-       for splay_each(past_request_t, p, mesh->past_request_tree) {
-               if(p->firstseen + request_timeout <= mesh->loop.now.tv_sec) {
-                       splay_delete_node(mesh->past_request_tree, splay_node), deleted++;
-               } else {
-                       left++;
-               }
-       }
-
-       if(left || deleted) {
-               logger(mesh, MESHLINK_DEBUG, "Aging past requests: deleted %d, left %d", deleted, left);
-       }
-
-       if(left) {
-               timeout_set(&mesh->loop, &mesh->past_request_timeout, &(struct timespec) {
-                       10, prng(mesh, TIMER_FUDGE)
-               });
-       }
-}
-
-bool seen_request(meshlink_handle_t *mesh, const char *request) {
-       assert(request);
-       assert(*request);
-
-       past_request_t *new, p = {.request = request};
-
-       if(splay_search(mesh->past_request_tree, &p)) {
-               logger(mesh, MESHLINK_DEBUG, "Already seen request");
-               return true;
-       } else {
-               new = xmalloc(sizeof(*new));
-               new->request = xstrdup(request);
-               new->firstseen = mesh->loop.now.tv_sec;
-
-               if(!mesh->past_request_tree->head && mesh->past_request_timeout.cb) {
-                       timeout_set(&mesh->loop, &mesh->past_request_timeout, &(struct timespec) {
-                               10, prng(mesh, TIMER_FUDGE)
-                       });
-               }
-
-               splay_insert(mesh->past_request_tree, new);
-               return false;
-       }
-}
-
-void init_requests(meshlink_handle_t *mesh) {
-       assert(!mesh->past_request_tree);
-
-       mesh->past_request_tree = splay_alloc_tree((splay_compare_t) past_request_compare, (splay_action_t) free_past_request);
-       timeout_add(&mesh->loop, &mesh->past_request_timeout, age_past_requests, NULL, &(struct timespec) {
-               0, 0
-       });
-}
-
-void exit_requests(meshlink_handle_t *mesh) {
-       if(mesh->past_request_tree) {
-               splay_delete_tree(mesh->past_request_tree);
-       }
-
-       mesh->past_request_tree = NULL;
-
-       timeout_del(&mesh->loop, &mesh->past_request_timeout);
-}
index 080eab623c39be2a0d991cbd1ae2b65ee965fc9d..3ac0397a961bc328ceb6d1e8fd7f137b2fa31295 100644 (file)
@@ -57,11 +57,6 @@ typedef enum request_error_t {
        BLACKLISTED = 1,
 } request_error_t;
 
-typedef struct past_request_t {
-       const char *request;
-       time_t firstseen;
-} past_request_t;
-
 /* Maximum size of strings in a request.
  * scanf terminates %2048s with a NUL character,
  * but the NUL character can be written after the 2048th non-NUL character.
@@ -76,14 +71,9 @@ typedef struct past_request_t {
 /* Basic functions */
 
 bool send_request(struct meshlink_handle *mesh, struct connection_t *, const char *, ...) __attribute__((__format__(printf, 3, 4)));
-void forward_request(struct meshlink_handle *mesh, struct connection_t *, const char *);
 bool receive_request(struct meshlink_handle *mesh, struct connection_t *, const char *);
 bool check_id(const char *);
 
-void init_requests(struct meshlink_handle *mesh);
-void exit_requests(struct meshlink_handle *mesh);
-bool seen_request(struct meshlink_handle *mesh, const char *);
-
 /* Requests */
 
 bool send_id(struct meshlink_handle *mesh, struct connection_t *);
index e89f8ecec4eab958c7948c28ce7361987b4395a1..c2d6036b5853da0e978fe0b463626831e26c0cd2 100644 (file)
@@ -45,10 +45,6 @@ bool key_changed_h(meshlink_handle_t *mesh, connection_t *c, const char *request
                return false;
        }
 
-       if(seen_request(mesh, request)) {
-               return true;
-       }
-
        n = lookup_node(mesh, name);
 
        if(!n) {
@@ -56,10 +52,6 @@ bool key_changed_h(meshlink_handle_t *mesh, connection_t *c, const char *request
                return true;
        }
 
-       /* Tell the others */
-
-       forward_request(mesh, c, request);
-
        return true;
 }
 
@@ -394,24 +386,9 @@ bool ans_key_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
        /* Forward it if necessary */
 
        if(to != mesh->self) {
-               if(!to->status.reachable) {
-                       logger(mesh, MESHLINK_WARNING, "Got %s from %s destination %s which is not reachable",
-                              "ANS_KEY", c->name, to_name);
-                       return true;
-               }
-
-               if(from == to) {
-                       logger(mesh, MESHLINK_WARNING, "Got %s from %s from %s to %s",
-                              "ANS_KEY", c->name, from_name, to_name);
-                       return true;
-               }
-
-               if(!to->nexthop || !to->nexthop->connection) {
-                       logger(mesh, MESHLINK_WARNING, "Cannot forward ANS_KEY to %s via %s", to->name, to->nexthop ? to->nexthop->name : to->name);
-                       return false;
-               }
-
-               return send_request(mesh, to->nexthop->connection, "%s", request);
+               logger(mesh, MESHLINK_WARNING, "Got %s from %s destination %s which is not for us",
+                      "ANS_KEY", c->name, to_name);
+               return true;
        }
 
        /* Is this an ANS_KEY informing us of our own reflexive UDP address? */