]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Check the return value of node_write_config() while handling invitations.
[meshlink] / src / meshlink.c
index 227df29ff3b102f36ce6aef7ec65d48509dde6fe..7a01bd0ffae8f921f7e3b28457e26f6198b7b6b2 100644 (file)
@@ -1718,6 +1718,17 @@ void meshlink_set_log_cb(meshlink_handle_t *mesh, meshlink_log_level_t level, me
        }
 }
 
+void meshlink_set_error_cb(struct meshlink_handle *mesh, meshlink_error_cb_t cb) {
+       if(!mesh) {
+               meshlink_errno = MESHLINK_EINVAL;
+               return;
+       }
+
+       pthread_mutex_lock(&(mesh->mesh_mutex));
+       mesh->error_cb = cb;
+       pthread_mutex_unlock(&(mesh->mesh_mutex));
+}
+
 bool meshlink_send(meshlink_handle_t *mesh, meshlink_node_t *destination, const void *data, size_t len) {
        meshlink_packethdr_t *hdr;
 
@@ -3524,6 +3535,22 @@ void handle_network_change(meshlink_handle_t *mesh, bool online) {
        retry(mesh);
 }
 
+void call_error_cb(meshlink_handle_t *mesh, meshlink_errno_t meshlink_errno) {
+       // We should only call the callback function if we are in the background thread.
+       if(!mesh->error_cb) {
+               return;
+       }
+
+       if(!mesh->threadstarted) {
+               return;
+       }
+
+       if(mesh->thread == pthread_self()) {
+               mesh->error_cb(mesh, meshlink_errno);
+       }
+}
+
+
 static void __attribute__((constructor)) meshlink_init(void) {
        crypto_init();
 }