]> git.meshlink.io Git - meshlink/commitdiff
Allow Catta to be disabled.
authorGuus Sliepen <guus@meshlink.io>
Sun, 13 Aug 2017 12:53:51 +0000 (14:53 +0200)
committerGuus Sliepen <guus@meshlink.io>
Sun, 13 Aug 2017 12:53:51 +0000 (14:53 +0200)
Normally, we want to enable Catta, however for testing it produces a lot
of unwanted network packets and log messages.

src/meshlink++.h
src/meshlink.c
src/meshlink.h
src/meshlink_internal.h
test/basicpp.cpp
test/channels-fork.c
test/channels.c
test/import-export.c
test/invite-join.c

index f1c415a95c869a21d6767fff25e87ab5e423def0..b012bb4aa07f0835e053c3616378279c61b86f38 100644 (file)
@@ -558,6 +558,16 @@ public:
                return meshlink_channel_send(handle, channel, data, len);
        }
 
+       /// Enable or disable zeroconf discovery of local peers
+       /** This controls whether zeroconf discovery using the Catta library will be
+        *  enabled to search for peers on the local network. By default, it is enabled.
+        *
+        *  @param enable  Set to true to enable discovery, false to disable.
+        */
+       void enable_discovery(bool enable = true) {
+               meshlink_enable_discovery(handle, enable);
+       }
+
 private:
        // non-copyable:
        mesh(const mesh&) /* TODO: C++11: = delete */;
index 4a8cef208e29a1dc27eab4159b4bb6eceeed5a6f..6a2c99da68d8c416f79704a3dd8b615ba8906921 100644 (file)
@@ -1009,7 +1009,8 @@ bool meshlink_start(meshlink_handle_t *mesh) {
 
        mesh->threadstarted=true;
 
-       discovery_start(mesh);
+       if(mesh->discovery)
+               discovery_start(mesh);
 
        pthread_mutex_unlock(&(mesh->mesh_mutex));
        return true;
@@ -1025,7 +1026,8 @@ void meshlink_stop(meshlink_handle_t *mesh) {
        logger(mesh, MESHLINK_DEBUG, "meshlink_stop called\n");
 
        // Stop discovery
-       discovery_stop(mesh);
+       if(mesh->discovery)
+               discovery_stop(mesh);
 
        // Shut down the main thread
        event_loop_stop(&mesh->loop);
@@ -2322,6 +2324,30 @@ void update_node_status(meshlink_handle_t *mesh, node_t *n) {
                mesh->node_status_cb(mesh, (meshlink_node_t *)n, n->status.reachable);
 }
 
+void meshlink_enable_discovery(meshlink_handle_t *mesh, bool enable) {
+       if(!mesh) {
+               meshlink_errno = MESHLINK_EINVAL;
+               return;
+       }
+
+       pthread_mutex_lock(&mesh->mesh_mutex);
+
+       if(mesh->discovery == enable)
+               goto end;
+
+       if(mesh->threadstarted) {
+               if(enable)
+                       discovery_start(mesh);
+               else
+                       discovery_stop(mesh);
+       }
+
+       mesh->discovery = enable;
+
+end:
+       pthread_mutex_unlock(&mesh->mesh_mutex);
+}
+
 static void __attribute__((constructor)) meshlink_init(void) {
        crypto_init();
        unsigned int seed;
index 30491b0016d73dab462e8e0e5bba0e32b8b14344..a768d435a9875da2c917f5095a562585e94dd882 100644 (file)
@@ -832,6 +832,16 @@ extern void meshlink_hint_address(meshlink_handle_t *mesh, meshlink_node_t *node
  */
 extern meshlink_edge_t **meshlink_get_all_edges_state(meshlink_handle_t *mesh, meshlink_edge_t **edges, size_t *nmemb);
 
+/// Enable or disable zeroconf discovery of local peers
+
+/** This controls whether zeroconf discovery using the Catta library will be
+ *  enabled to search for peers on the local network. By default, it is enabled.
+ *
+ *  @param mesh    A handle which represents an instance of MeshLink.
+ *  @param enable  Set to true to enable discovery, false to disable.
+ */
+extern void meshlink_enable_discovery(meshlink_handle_t *mesh, bool enable);
+
 #ifdef __cplusplus
 }
 #endif
index fa5e60ea44fbf099ef77e9dafc0123f1c19735eb..492e2b2bd4d1c617a7fdff51ded5bfe5e6a64532 100644 (file)
@@ -113,6 +113,7 @@ struct meshlink_handle {
        char *proxypass;
        proxytype_t proxytype;
 
+       bool discovery;         // Whether Catta is enabled or not
        bool localdiscovery;
        sockaddr_t localdiscovery_address;
 
index 02d4cb61e4b7d70c286b3a77a085d78a9ffb148e..ed2815a1ce3a4857b79b9d9ffd8c4d2eb5dbb90d 100644 (file)
@@ -25,6 +25,10 @@ int main(int argc, char *argv[]) {
                return 1;
        }
 
+       // Disable local discovery.
+
+       mesh.enable_discovery(false);
+
        // Start and stop the mesh.
 
        if(!mesh.start()) {
@@ -66,6 +70,8 @@ int main(int argc, char *argv[]) {
 
        // Start and stop the mesh.
 
+       mesh.enable_discovery(false);
+
        if(!mesh.start()) {
                cerr << "Foo could not start a third time\n";
                return 1;
index 7fdd5b8e5bca9e9ed3f2a7e7c546e48cc0499961..a95efbe2f98def72ee5d31cba93ef11e1d7cba20 100644 (file)
@@ -58,6 +58,8 @@ int main1(int rfd, int wfd) {
                return 1;
        }
 
+       meshlink_enable_discovery(mesh1, false);
+
        meshlink_add_address(mesh1, "localhost");
 
        char *data = meshlink_export(mesh1);
@@ -142,6 +144,8 @@ int main2(int rfd, int wfd) {
                return 1;
        }
 
+       meshlink_enable_discovery(mesh2, false);
+
        char *data = meshlink_export(mesh2);
        if(!data) {
                fprintf(stderr, "Bar could not export its configuration\n");
index c6d9fa8fd71299eb07d21d7fb263a4979d2ea6d8..99a97a33fd571cda3c6ecf826beecdff6112bc1f 100644 (file)
@@ -87,6 +87,8 @@ int main(int argc, char *argv[]) {
                return 1;
        }
 
+       meshlink_enable_discovery(mesh1, false);
+       meshlink_enable_discovery(mesh2, false);
        meshlink_set_log_cb(mesh1, MESHLINK_DEBUG, log_cb);
        meshlink_set_log_cb(mesh2, MESHLINK_DEBUG, log_cb);
 
index 22cd80bb9c4b808f8f9f55efdc83e1637e01e58a..411a7a21ce0e3b4575dc5521fc8108158a8796d4 100644 (file)
@@ -27,6 +27,11 @@ int main(int argc, char *argv[]) {
                return 1;
        }
 
+       // Disable local discovery
+
+       meshlink_enable_discovery(mesh1, false);
+       meshlink_enable_discovery(mesh2, false);
+
        // Import and export both side's data
 
        meshlink_add_address(mesh1, "localhost");
index 41b62bd4d92cb475ddabc47c2fdb34cfdff53794..d20ad37d49d8dc28d15fe135792c31242896ec7f 100644 (file)
@@ -27,6 +27,11 @@ int main(int argc, char *argv[]) {
                return 1;
        }
 
+       // Disable local discovery.
+
+       meshlink_enable_discovery(mesh1, false);
+       meshlink_enable_discovery(mesh2, false);
+
        // Start the first instance and have it generate an invitation.
 
        meshlink_set_node_status_cb(mesh1, status_cb);