mesh->threadstarted=true;
- discovery_start(mesh);
+ if(mesh->discovery)
+ discovery_start(mesh);
pthread_mutex_unlock(&(mesh->mesh_mutex));
return true;
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);
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;