X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fprotocol_misc.c;h=7410ad13c8f5316b3d274ede08877e58f2e54050;hb=c31f626c3a252a0d6805a5f3ca9154d934ea41f5;hp=af3caddf8957f38006a540ddc331cfe0823efcdd;hpb=9cde0d32cf209388cc59b06b7dcb0c3432f97da5;p=meshlink diff --git a/src/protocol_misc.c b/src/protocol_misc.c index af3caddf..7410ad13 100644 --- a/src/protocol_misc.c +++ b/src/protocol_misc.c @@ -50,6 +50,12 @@ bool status_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { return true; } +bool send_error(meshlink_handle_t *mesh, connection_t *c, request_error_t err, const char *message) { + send_request(mesh, c, NULL, "%d %d %s", ERROR, err, message); + flush_meta(mesh, c); + return false; +} + bool error_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { assert(request); assert(*request); @@ -64,6 +70,13 @@ bool error_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { logger(mesh, MESHLINK_INFO, "Error message from %s: %d: %s", c->name, err, errorstring); + switch(err) { + case BLACKLISTED: + if(mesh->blacklisted_cb) { + mesh->blacklisted_cb(mesh, (meshlink_node_t *)lookup_node(mesh, c->name)); + } + } + return false; } @@ -109,17 +122,8 @@ bool pong_h(meshlink_handle_t *mesh, connection_t *c, const char *request) { /* Successful connection, reset timeout if this is an outgoing connection. */ - // TODO: completely remove this outgoing, let the autoconnect algorithm handle it if(c->outgoing) { - c->outgoing->timeout = 0; - c->outgoing->state = OUTGOING_START; - - if(c->outgoing->ai) { - freeaddrinfo(c->outgoing->ai); - } - - c->outgoing->ai = NULL; - c->outgoing->aip = NULL; + reset_outgoing(c->outgoing); } return true;