From 4d32668b2ba7d36c4f29b4be569d026c79f55c96 Mon Sep 17 00:00:00 2001 From: Cyril Danilevski <cyril.danilevski@xfel.eu> Date: Wed, 26 Feb 2025 11:51:33 +0100 Subject: [PATCH] Handle invalid mpod responses in REST API --- mpod.cpp | 5 +++++ rest.cpp | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/mpod.cpp b/mpod.cpp index 08e79ea..4ceb264 100644 --- a/mpod.cpp +++ b/mpod.cpp @@ -142,6 +142,11 @@ bool MPOD::message(const SNMP::Message *message) { // that far. const char *channel = strrchr(varbind->getName(), '.') + 1; _channel = atoi(channel); + + // MPOD SNMP channel 0 does not exist (starts from 1; U0 is 1). + // Mark the channel as 0 if invalid data was received. + // This can be used later to validate a sent request. + _channel = found ? _channel : 0; } // Return true if nodes found, that means this is a valid response from MPOD return found; diff --git a/rest.cpp b/rest.cpp index 2f1b0ae..e4bbea1 100644 --- a/rest.cpp +++ b/rest.cpp @@ -161,7 +161,7 @@ void sendSNMP() { if (output != NONE && channel != 0) { setChannelStateAndWait(&ipAddr, channel, output); - success = true; // validates input parameters, not MPOD status, reported separately + success = mpod.getChannel() ? true : false; } String http_msg = "{\n"; @@ -285,7 +285,12 @@ void pollMPODChannel() { delay(MPOD_UPDATE_LATENCY); snmp.loop(); // Force loop to update now - ret = mpod.toJSON(); + if (mpod.getChannel()) { + ret = mpod.toJSON(); + } else { + ret = "\"reason\": \"Invalid channel\""; + channel = 0; + } } String http_msg = "{\n"; -- GitLab