X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fmeshlink.c;h=98e02f7db623d8c8b4e837eb96e77f23580fddd8;hp=0318a497ba98bc4a30549898c72ccbd19b12ef81;hb=5678b294c5bbb61b983a7a269bc85fd6ea6590ff;hpb=28936fda22cd778c6cdcd85468947bbbe8ed4256 diff --git a/src/meshlink.c b/src/meshlink.c index 0318a497..98e02f7d 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -796,6 +796,7 @@ static const char *errstr[] = { [MESHLINK_EPEER] = "Error communicating with peer", [MESHLINK_ENOTSUP] = "Operation not supported", [MESHLINK_EBUSY] = "MeshLink instance already in use", + [MESHLINK_EBLACKLISTED] = "Node is blacklisted", }; const char *meshlink_strerror(meshlink_errno_t err) { @@ -1757,6 +1758,7 @@ bool meshlink_send(meshlink_handle_t *mesh, meshlink_node_t *destination, const if(n->status.blacklisted) { logger(mesh, MESHLINK_ERROR, "Node %s blacklisted, dropping packet\n", n->name); + meshlink_errno = MESHLINK_EBLACKLISTED; return false; } @@ -2861,9 +2863,15 @@ void meshlink_whitelist(meshlink_handle_t *mesh, meshlink_node_t *node) { node_t *n = (node_t *)node; + if(n == mesh->self) { + logger(mesh, MESHLINK_ERROR, "%s whitelisting itself?\n", node->name); + meshlink_errno = MESHLINK_EINVAL; + pthread_mutex_unlock(&mesh->mutex); + return; + } + if(!n->status.blacklisted) { logger(mesh, MESHLINK_DEBUG, "Node %s was already whitelisted\n", node->name); - meshlink_errno = MESHLINK_EINVAL; pthread_mutex_unlock(&mesh->mutex); return; } @@ -2876,6 +2884,8 @@ void meshlink_whitelist(meshlink_handle_t *mesh, meshlink_node_t *node) { update_node_status(mesh, n); } + logger(mesh, MESHLINK_DEBUG, "Whitelisted %s.\n", node->name); + pthread_mutex_unlock(&mesh->mutex); return; } @@ -3183,6 +3193,7 @@ meshlink_channel_t *meshlink_channel_open_ex(meshlink_handle_t *mesh, meshlink_n if(n->status.blacklisted) { logger(mesh, MESHLINK_ERROR, "Cannot open a channel with blacklisted node\n"); + meshlink_errno = MESHLINK_EBLACKLISTED; pthread_mutex_unlock(&mesh->mutex); return NULL; }