From 6f9c5358aaf8e1195f3f9b2781adc8ad8c9c448a Mon Sep 17 00:00:00 2001 From: Gordon Stein <7331488+gsteinLTU@users.noreply.github.com> Date: Mon, 1 Apr 2024 16:23:22 -0500 Subject: [PATCH] HTTP announce endpoint --- src/procedures/iotscape/iotscape-services.js | 5 +++++ src/procedures/iotscape/iotscape.js | 16 ++++++++++------ src/procedures/iotscape/routes.js | 13 +++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/procedures/iotscape/iotscape-services.js b/src/procedures/iotscape/iotscape-services.js index 73f0bc4b..d4b6ca0e 100644 --- a/src/procedures/iotscape/iotscape-services.js +++ b/src/procedures/iotscape/iotscape-services.js @@ -24,6 +24,11 @@ IoTScapeServices.updateOrCreateServiceInfo = function ( let service = IoTScapeDevices._services[name]; IoTScapeServices._serviceDefinitions[name] = definition; + if(!rinfo) { + logger.log("Service " + name + " created without connection info"); + return; + } + logger.log( "Discovering " + name + ":" + id + " at " + rinfo.address + ":" + rinfo.port, diff --git a/src/procedures/iotscape/iotscape.js b/src/procedures/iotscape/iotscape.js index 5960991a..3e8a2771 100644 --- a/src/procedures/iotscape/iotscape.js +++ b/src/procedures/iotscape/iotscape.js @@ -173,14 +173,18 @@ IoTScape._send = function (service, id, command, caller) { * @param {String} definition Service definition * @param {RemoteInfo} remote Remote host information */ -IoTScape._createService = async function (definition, remote) { +IoTScape._createService = async function (definition, remote = null) { let parsed = null; - try { - parsed = JSON.parse(definition); - } catch (err) { - logger.log("Error parsing IoTScape service: " + err); - return; + if (typeof definition === "string") { + try { + parsed = JSON.parse(definition); + } catch (err) { + logger.log("Error parsing IoTScape service: " + err); + return; + } + } else { + parsed = definition; } // Ignore empty and request messages sent to this method diff --git a/src/procedures/iotscape/routes.js b/src/procedures/iotscape/routes.js index d6993dcd..d1bf0291 100644 --- a/src/procedures/iotscape/routes.js +++ b/src/procedures/iotscape/routes.js @@ -1,5 +1,8 @@ const express = require("express"); const router = express(); +const logger = require("../utils/logger")("iotscape-routes"); +const IoTScape = require("./iotscape"); +const bodyParser = require("body-parser"); router.get( "/port", @@ -10,4 +13,14 @@ router.get( }, ); +router.post( + "/announce", + bodyParser.json({ limit: "1mb" }), + async (req, res) => { + logger.info(`HTTP announcement from ${req.ip}`); + IoTScape._createService(req.body); + res.status(200).send("OK"); + }, +) + module.exports = router;