-int termreq_h(connection_t *c)
-{
-cp
- terminate_connection(c, c->status.active);
-cp
- return 0;
+bool error_h(meshlink_handle_t *mesh, connection_t *c, const char *request) {
+ assert(request);
+ assert(*request);
+
+ int err;
+ char errorstring[MAX_STRING_SIZE];
+
+ if(sscanf(request, "%*d %d " MAX_STRING, &err, errorstring) != 2) {
+ logger(mesh, MESHLINK_ERROR, "Got bad %s from %s", "ERROR", c->name);
+ return false;
+ }
+
+ 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;