]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Correctly update our own host config file after meshlink_set_port().
[meshlink] / src / meshlink.c
index e65b7b199c76205d82c9fb76e3ea55ada5c08322..a9e1b551df18362848fc68a7b5e1f7a0f1192850 100644 (file)
@@ -661,6 +661,11 @@ static bool finalize_join(meshlink_handle_t *mesh, const void *buf, uint16_t len
                }
        }
 
+       /* Ensure the configuration directory metadata is on disk */
+       if(!config_sync(mesh, "current")) {
+               return false;
+       }
+
        sptps_send_record(&(mesh->sptps), 1, ecdsa_get_public_key(mesh->private_key), 32);
 
        logger(mesh, MESHLINK_DEBUG, "Configuration stored in: %s\n", mesh->confbase);
@@ -890,6 +895,11 @@ static bool meshlink_setup(meshlink_handle_t *mesh) {
                return false;
        }
 
+       /* Ensure the configuration directory metadata is on disk */
+       if(!config_sync(mesh, "current")) {
+               return false;
+       }
+
        if(!main_config_lock(mesh)) {
                logger(NULL, MESHLINK_ERROR, "Cannot lock main config file\n");
                meshlink_errno = MESHLINK_ESTORAGE;
@@ -1269,6 +1279,8 @@ meshlink_handle_t *meshlink_open_ex(const meshlink_open_params_t *params) {
        mesh->invitation_timeout = 604800; // 1 week
        mesh->netns = params->netns;
        mesh->submeshes = NULL;
+       mesh->log_cb = global_log_cb;
+       mesh->log_level = global_log_level;
 
        memcpy(mesh->dev_class_traits, default_class_traits, sizeof(default_class_traits));
 
@@ -2147,9 +2159,6 @@ bool meshlink_set_port(meshlink_handle_t *mesh, int port) {
        free(mesh->myport);
        xasprintf(&mesh->myport, "%d", port);
 
-       /* Write meshlink.conf with the updated port number */
-       write_main_config_files(mesh);
-
        /* Close down the network. This also deletes mesh->self. */
        close_network_connections(mesh);
 
@@ -2170,6 +2179,17 @@ bool meshlink_set_port(meshlink_handle_t *mesh, int port) {
                rval = true;
        }
 
+       /* Rebuild our own list of recent addresses */
+       memset(mesh->self->recent, 0, sizeof(mesh->self->recent));
+       add_local_addresses(mesh);
+
+       /* Write meshlink.conf with the updated port number */
+       write_main_config_files(mesh);
+
+       if(!config_sync(mesh, "current")) {
+               return false;
+       }
+
 done:
        pthread_mutex_unlock(&(mesh->mesh_mutex));
 
@@ -2709,6 +2729,10 @@ bool meshlink_import(meshlink_handle_t *mesh, const char *data) {
                return false;
        }
 
+       if(!config_sync(mesh, "current")) {
+               return false;
+       }
+
        return true;
 }
 
@@ -2738,6 +2762,8 @@ void meshlink_blacklist(meshlink_handle_t *mesh, meshlink_node_t *node) {
 
        n->status.blacklisted = true;
        node_write_config(mesh, n);
+       config_sync(mesh, "current");
+
        logger(mesh, MESHLINK_DEBUG, "Blacklisted %s.\n", node->name);
 
        //Immediately terminate any connections we have with the blacklisted node
@@ -2781,6 +2807,7 @@ void meshlink_whitelist(meshlink_handle_t *mesh, meshlink_node_t *node) {
 
        n->status.blacklisted = false;
        node_write_config(mesh, n);
+       config_sync(mesh, "current");
 
        pthread_mutex_unlock(&(mesh->mesh_mutex));
        return;