+ }
+
+ if(!sptps_receive_data(&from->sptps, buf, len)) {
+ logger(mesh, MESHLINK_ERROR, "Could not process SPTPS data from %s: %s", from->name, strerror(errno));
+ return true;
+ }
+
+ return true;
+ }
+
+ case REQ_CANONICAL: {
+ char host[MAX_STRING_SIZE];
+ char port[MAX_STRING_SIZE];
+
+ if(sscanf(request, "%*d %*s %*s %*d " MAX_STRING " " MAX_STRING, host, port) != 2) {
+ logger(mesh, MESHLINK_ERROR, "Got bad %s from %s: %s", "REQ_CANONICAL", from->name, "invalid canonical address");
+ return true;
+ }
+
+ strncat(host, " ", MAX_STRING_SIZE - 1);
+ strncat(host, port, MAX_STRING_SIZE - 1);
+
+ if(from->canonical_address && !strcmp(from->canonical_address, host)) {
+ return true;
+ }
+
+ logger(mesh, MESHLINK_DEBUG, "Updating canonical address of %s to %s", from->name, host);
+ free(from->canonical_address);
+ from->canonical_address = xstrdup(host);
+ return true;
+ }
+
+ default:
+ logger(mesh, MESHLINK_ERROR, "Unknown extended REQ_KEY request from %s: %s", from->name, request);
+ return true;