From 95e0482b898544c20b57d5c5ce0aee91514664a0 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 15 Sep 2024 12:20:10 +0200 Subject: [PATCH] Fix OSC control unregister Signed-off-by: falkTX --- source/backend/engine/CarlaEngineOsc.hpp | 2 +- .../backend/engine/CarlaEngineOscHandlers.cpp | 25 +++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/source/backend/engine/CarlaEngineOsc.hpp b/source/backend/engine/CarlaEngineOsc.hpp index c6d364b08a..a4a1028777 100644 --- a/source/backend/engine/CarlaEngineOsc.hpp +++ b/source/backend/engine/CarlaEngineOsc.hpp @@ -139,7 +139,7 @@ class CarlaEngineOsc int argc, const lo_arg* const* argv, const char* types, lo_message msg); int handleMsgRegister(bool isTCP, int argc, const lo_arg* const* argv, const char* types, lo_address source); - int handleMsgUnregister(bool isTCP, int argc, const lo_arg* const* argv, const char* types); + int handleMsgUnregister(bool isTCP, int argc, const lo_arg* const* argv, const char* types, lo_address source); int handleMsgControl(const char* method, int argc, const lo_arg* const* argv, const char* types); diff --git a/source/backend/engine/CarlaEngineOscHandlers.cpp b/source/backend/engine/CarlaEngineOscHandlers.cpp index 16a2af7dc1..1258c302ce 100644 --- a/source/backend/engine/CarlaEngineOscHandlers.cpp +++ b/source/backend/engine/CarlaEngineOscHandlers.cpp @@ -61,7 +61,7 @@ int CarlaEngineOsc::handleMessage(const bool isTCP, const char* const path, return handleMsgRegister(isTCP, argc, argv, types, source); if (std::strcmp(path, "/unregister") == 0) - return handleMsgUnregister(isTCP, argc, argv, types); + return handleMsgUnregister(isTCP, argc, argv, types, source); if (std::strncmp(path, "/ctrl/", 6) == 0) { @@ -284,7 +284,8 @@ int CarlaEngineOsc::handleMsgRegister(const bool isTCP, } int CarlaEngineOsc::handleMsgUnregister(const bool isTCP, - const int argc, const lo_arg* const* const argv, const char* const types) + const int argc, const lo_arg* const* const argv, const char* const types, + const lo_address source) { carla_debug("CarlaEngineOsc::handleMsgUnregister()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "s"); @@ -297,16 +298,26 @@ int CarlaEngineOsc::handleMsgUnregister(const bool isTCP, return 0; } - const char* const url = &argv[0]->s; + const char* const url = &argv[0]->s; + const char* const host = lo_address_get_hostname(source); + const char* const path = lo_url_get_path(url); + + if (std::strcmp(oscData.owner, host) != 0) + { + carla_stderr("OSC backend unregister failed, current owner host %s does not match requested %s", + oscData.owner, host); + return 0; + } - if (std::strcmp(oscData.owner, url) == 0) + if (std::strcmp(oscData.path, path) != 0) { - carla_stdout("OSC client %s unregistered", url); - oscData.clear(); + carla_stderr("OSC backend unregister failed, current owner path %s does not match requested %s", + oscData.path, path); return 0; } - carla_stderr("OSC backend unregister failed, current owner %s does not match requested %s", oscData.owner, url); + carla_stdout("OSC client %s unregistered", url); + oscData.clear(); return 0; }