[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) {
if(n->status.blacklisted) {
logger(mesh, MESHLINK_ERROR, "Node %s blacklisted, dropping packet\n", n->name);
+ meshlink_errno = MESHLINK_EBLACKLISTED;
return false;
}
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;
}
update_node_status(mesh, n);
}
+ logger(mesh, MESHLINK_DEBUG, "Whitelisted %s.\n", node->name);
+
pthread_mutex_unlock(&mesh->mutex);
return;
}
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;
}
/// Code of most recent error encountered.
typedef enum {
- MESHLINK_OK, ///< Everything is fine
- MESHLINK_EINVAL, ///< Invalid parameter(s) to function call
- MESHLINK_ENOMEM, ///< Out of memory
- MESHLINK_ENOENT, ///< Node is not known
- MESHLINK_EEXIST, ///< Node already exists
- MESHLINK_EINTERNAL, ///< MeshLink internal error
- MESHLINK_ERESOLV, ///< MeshLink could not resolve a hostname
- MESHLINK_ESTORAGE, ///< MeshLink could not load or write data from/to disk
- MESHLINK_ENETWORK, ///< MeshLink encountered a network error
- MESHLINK_EPEER, ///< A peer caused an error
- MESHLINK_ENOTSUP, ///< The operation is not supported in the current configuration of MeshLink
- MESHLINK_EBUSY ///< The MeshLink instance is already in use by another process
+ MESHLINK_OK, ///< Everything is fine
+ MESHLINK_EINVAL, ///< Invalid parameter(s) to function call
+ MESHLINK_ENOMEM, ///< Out of memory
+ MESHLINK_ENOENT, ///< Node is not known
+ MESHLINK_EEXIST, ///< Node already exists
+ MESHLINK_EINTERNAL, ///< MeshLink internal error
+ MESHLINK_ERESOLV, ///< MeshLink could not resolve a hostname
+ MESHLINK_ESTORAGE, ///< MeshLink could not load or write data from/to disk
+ MESHLINK_ENETWORK, ///< MeshLink encountered a network error
+ MESHLINK_EPEER, ///< A peer caused an error
+ MESHLINK_ENOTSUP, ///< The operation is not supported in the current configuration of MeshLink
+ MESHLINK_EBUSY, ///< The MeshLink instance is already in use by another process
+ MESHLINK_EBLACKLISTED, ///< The operation is not allowed because the node is blacklisted
} meshlink_errno_t;
/// Device class