+ to = lookup_node(mesh, to_name);
+
+ if(!to) {
+ logger(mesh, MESHLINK_ERROR, "Got %s from %s destination %s which does not exist in our connection list",
+ "ANS_KEY", c->name, to_name);
+ return true;
+ }
+
+ /* Forward it if necessary */
+
+ if(to != mesh->self) {
+ if(!to->status.reachable) {
+ logger(mesh, MESHLINK_WARNING, "Got %s from %s destination %s which is not reachable",
+ "ANS_KEY", c->name, to_name);
+ return true;
+ }
+
+ if(!*address && from->address.sa.sa_family != AF_UNSPEC) {
+ char *address, *port;
+ logger(mesh, MESHLINK_DEBUG, "Appending reflexive UDP address to ANS_KEY from %s to %s", from->name, to->name);
+ sockaddr2str(&from->address, &address, &port);
+ send_request(mesh, to->nexthop->connection, NULL, "%s %s %s", request, address, port);
+ free(address);
+ free(port);
+ return true;
+ }
+
+ return send_request(mesh, to->nexthop->connection, NULL, "%s", request);
+ }
+
+ /* Don't use key material until every check has passed. */
+ from->status.validkey = false;
+
+ /* Compression is not supported. */
+ if(compression != 0) {
+ logger(mesh, MESHLINK_ERROR, "Node %s uses bogus compression level!", from->name);
+ return true;