From 2b5f614625dfbaa453ad040a31e3f1013e7b5f63 Mon Sep 17 00:00:00 2001 From: Extremesecrecy <10959169+extremesecrecy@users.noreply.github.com> Date: Wed, 23 Jul 2025 22:44:37 -0700 Subject: [PATCH] Update PiPedalSocket.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ntroduced helper functions to verify required fields in configuration structures, ensuring missing property names trigger a descriptive exception Applied these checks when handling the “setJackServerSettings,” “setWifiConfigSettings,” and “setWifiDirectConfigSettings” messages to validate incoming data --- src/PiPedalSocket.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/src/PiPedalSocket.cpp b/src/PiPedalSocket.cpp index 83d1bfe..8e64aa4 100644 --- a/src/PiPedalSocket.cpp +++ b/src/PiPedalSocket.cpp @@ -41,11 +41,73 @@ #include "SysExec.hpp" #include "PiPedalAlsa.hpp" #include +#include #include "FileEntry.hpp" using namespace std; using namespace pipedal; +static std::string JoinStrings(const std::vector &values, const std::string &sep = ", ") +{ + std::stringstream ss; + for (size_t i = 0; i < values.size(); ++i) + { + if (i != 0) + ss << sep; + ss << values[i]; + } + return ss.str(); +} + +static void CheckJackServerSettings(const JackServerSettings &settings) +{ + std::vector missing; + if (settings.GetAlsaInputDevice().empty()) + missing.push_back("alsaInputDevice"); + if (settings.GetAlsaOutputDevice().empty()) + missing.push_back("alsaOutputDevice"); + if (settings.GetSampleRate() == 0) + missing.push_back("sampleRate"); + if (settings.GetBufferSize() == 0) + missing.push_back("bufferSize"); + if (settings.GetNumberOfBuffers() == 0) + missing.push_back("numberOfBuffers"); + if (!missing.empty()) + throw PiPedalArgumentException("Missing properties: " + JoinStrings(missing)); +} + +static void CheckWifiConfigSettings(const WifiConfigSettings &settings) +{ + std::vector missing; + if (settings.countryCode_.empty()) + missing.push_back("countryCode"); + if (settings.hotspotName_.empty()) + missing.push_back("hotspotName"); + if (settings.channel_.empty()) + missing.push_back("channel"); + if (settings.IsEnabled() && !settings.hasSavedPassword_ && settings.password_.empty()) + missing.push_back("password"); + if (!missing.empty()) + throw PiPedalArgumentException("Missing properties: " + JoinStrings(missing)); +} + +static void CheckWifiDirectConfigSettings(const WifiDirectConfigSettings &settings) +{ + std::vector missing; + if (settings.countryCode_.empty()) + missing.push_back("countryCode"); + if (settings.hotspotName_.empty()) + missing.push_back("hotspotName"); + if (settings.pin_.empty()) + missing.push_back("pin"); + if (settings.channel_.empty()) + missing.push_back("channel"); + if (settings.wlan_.empty()) + missing.push_back("wlan"); + if (!missing.empty()) + throw PiPedalArgumentException("Missing properties: " + JoinStrings(missing)); +} + class PathPatchPropertyChangedBody { public: @@ -1222,6 +1284,7 @@ public: { JackServerSettings jackServerSettings; pReader->read(&jackServerSettings); + CheckJackServerSettings(jackServerSettings); this->model.SetJackServerSettings(jackServerSettings); this->Reply(replyTo, "setJackserverSettings"); } @@ -1241,6 +1304,7 @@ public: { WifiConfigSettings wifiConfigSettings; pReader->read(&wifiConfigSettings); + CheckWifiConfigSettings(wifiConfigSettings); if (!GetAdminClient().CanUseAdminClient()) { throw PiPedalException("Can't change server settings when running interactively."); @@ -1262,6 +1326,7 @@ public: { WifiDirectConfigSettings wifiDirectConfigSettings; pReader->read(&wifiDirectConfigSettings); + CheckWifiDirectConfigSettings(wifiDirectConfigSettings); if (!GetAdminClient().CanUseAdminClient()) { throw PiPedalException("Can't change server settings when running interactively.");