]> git.meshlink.io Git - meshlink/commitdiff
Add a function to set the default white/blacklisting behaviour.
authorGuus Sliepen <guus@meshlink.io>
Tue, 16 Dec 2014 13:51:36 +0000 (14:51 +0100)
committerGuus Sliepen <guus@meshlink.io>
Sat, 27 Dec 2014 16:26:23 +0000 (17:26 +0100)
This function should be called right after meshlink_open(), and will
apply the default white/blacklist setting to newly learned nodes.
The status can later be changed using the meshlink_whitelist() and
meshlink_blacklist() functions.

src/meshlink.c
src/meshlink.h
src/meshlink_internal.h
src/protocol_edge.c

index df257bf6e2a81ce535350491a4b5201a3dac11eb..6ebbdcb0aab4481f62d1a368c488f3f7176f823a 100644 (file)
@@ -1825,6 +1825,10 @@ void meshlink_whitelist(meshlink_handle_t *mesh, meshlink_node_t *node) {
        return;
 }
 
+void meshlink_set_default_blacklist(meshlink_handle_t *mesh, bool blacklist) {
+       mesh->default_blacklist = blacklist;
+}
+
 /* Hint that a hostname may be found at an address
  * See header file for detailed comment.
  */
index 5777301aebdf58fe9bb599f43a26727d3fa2dff3..75c4932715b6e23eaed4f373cc0b6e0c6c8dfb86 100644 (file)
@@ -479,9 +479,21 @@ extern void meshlink_blacklist(meshlink_handle_t *mesh, meshlink_node_t *node);
  *  and will send data to it and accept any data received from it.
  *
  *  @param mesh         A handle which represents an instance of MeshLink.
- *  @param node         A pointer to a meshlink_node_t describing the node to be blacklisted.
+ *  @param node         A pointer to a meshlink_node_t describing the node to be whitelisted.
  */
-extern void meshlink_blacklist(meshlink_handle_t *mesh, meshlink_node_t *node);
+extern void meshlink_whitelist(meshlink_handle_t *mesh, meshlink_node_t *node);
+
+/// Set whether new nodes are blacklisted by default.
+/** This function sets the blacklist behaviour for newly discovered nodes.
+ *  If set to true, new nodes will be automatically blacklisted.
+ *  If set to false, which is the default, new nodes are automatically whitelisted.
+ *  The whitelist/blacklist status of a node may be changed afterwards with the
+ *  meshlink_whitelist() and meshlink_blacklist() functions.
+ *
+ *  @param mesh         A handle which represents an instance of MeshLink.
+ *  @param blacklist    True if new nodes are to be blacklisted, false if whitelisted.
+ */
+extern void meshlink_set_default_blacklist(meshlink_handle_t *mesh, bool blacklist);
 
 /// A callback for accepting incoming channels.
 /** This function is called whenever a remote node wants to open a channel to the local node.
index e36fd95f38b0a5f41d67b2444ff739ca55cbe4e7..b3ac72c40a2833f74abd78f68cb292b4a54f2e20 100644 (file)
@@ -112,6 +112,8 @@ struct meshlink_handle {
        bool localdiscovery;
        sockaddr_t localdiscovery_address;
 
+       bool default_blacklist;
+
        hash_t *node_udp_cache;
        struct connection_t *everyone;
        struct ecdsa *invitation_key;
index 89ed901d1979b0e04e5a865dc18deb78a2e2700f..783da775bdec0c40d2b27d198ed841c14dfe3d60 100644 (file)
@@ -102,6 +102,7 @@ bool add_edge_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
 
        if(!from) {
                from = new_node();
+               from->status.blacklisted = mesh->default_blacklist;
                from->name = xstrdup(from_name);
                node_add(mesh, from);
        }
@@ -111,6 +112,7 @@ bool add_edge_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
 
        if(!to) {
                to = new_node();
+               to->status.blacklisted = mesh->default_blacklist;
                to->name = xstrdup(to_name);
                node_add(mesh, to);
        }