diff --git a/assets/webconfig/content/remote.html b/assets/webconfig/content/remote.html
index 6bf020ce..292fdf91 100644
--- a/assets/webconfig/content/remote.html
+++ b/assets/webconfig/content/remote.html
@@ -68,13 +68,6 @@
-
+
diff --git a/libsrc/boblightserver/BoblightClientConnection.cpp b/libsrc/boblightserver/BoblightClientConnection.cpp
index 7099079e..71a1b231 100644
--- a/libsrc/boblightserver/BoblightClientConnection.cpp
+++ b/libsrc/boblightserver/BoblightClientConnection.cpp
@@ -44,8 +44,9 @@ BoblightClientConnection::BoblightClientConnection(Hyperion* hyperion, QTcpSocke
BoblightClientConnection::~BoblightClientConnection()
{
- // clear the current channel
- _hyperion->clear(_priority);
+ // clear the current channel
+ if (_priority != 0 && _priority >= 128 && _priority < 254)
+ _hyperion->clear(_priority);
delete _socket;
}
@@ -79,8 +80,9 @@ void BoblightClientConnection::readData()
void BoblightClientConnection::socketClosed()
{
- // clear the current channel
- _hyperion->clear(_priority);
+ // clear the current channel
+ if (_priority != 0 && _priority >= 128 && _priority < 254)
+ _hyperion->clear(_priority);
emit connectionClosed(this);
}
@@ -155,6 +157,9 @@ void BoblightClientConnection::handleMessage(const QString & message)
rgb.green = green;
rgb.blue = blue;
+ if (_priority == 0 || _priority < 128 || _priority >= 254)
+ return;
+
// send current color values to hyperion if this is the last led assuming leds values are send in order of id
if (ledIndex == _ledColors.size() -1)
{
@@ -180,21 +185,35 @@ void BoblightClientConnection::handleMessage(const QString & message)
int prio = messageParts[2].toInt(&rc);
if (rc && prio != _priority)
{
- // clear the current channel
- _hyperion->clear(_priority);
+ if (_priority != 0 && _hyperion->getPriorityInfo(_priority).componentId == hyperion::COMP_BOBLIGHTSERVER)
+ _hyperion->clear(_priority);
- // register new priority
- _hyperion->registerInput(prio, hyperion::COMP_BOBLIGHTSERVER, QString("Boblight@%1").arg(_socket->peerAddress().toString()));
+ if (prio < 128 || prio >= 254)
+ {
+ _priority = 128;
+ while (_hyperion->getActivePriorities().contains(_priority))
+ {
+ _priority += 1;
+ }
+
+ Warning(_log, "The priority %i is not in the priority range between 128 and 253. Priority %i is used instead.", prio, _priority);
+ }
+ else
+ {
+ // register new priority
+ _hyperion->registerInput(prio, hyperion::COMP_BOBLIGHTSERVER, QString("Boblight@%1").arg(_socket->peerAddress().toString()));
+ _priority = prio;
+ }
- _priority = prio;
return;
}
}
}
else if (messageParts[0] == "sync")
{
- // send current color values to hyperion
- _hyperion->setInput(_priority, _ledColors);
+ if (_priority != 0 && _priority >= 128 && _priority < 254)
+ _hyperion->setInput(_priority, _ledColors); // send current color values to hyperion
+
return;
}
}
diff --git a/libsrc/effectengine/EffectEngine.cpp b/libsrc/effectengine/EffectEngine.cpp
index 8e781663..b64eb62a 100644
--- a/libsrc/effectengine/EffectEngine.cpp
+++ b/libsrc/effectengine/EffectEngine.cpp
@@ -168,10 +168,11 @@ int EffectEngine::runEffectScript(const QString &script, const QString &name, co
channelCleared(priority);
// create the effect
- Effect *effect = new Effect(_hyperion, priority, timeout, script, name, args, imageData);
+ Effect *effect = new Effect(_hyperion, priority, timeout, script, name, args, imageData);
connect(effect, &Effect::setInput, _hyperion, &Hyperion::setInput, Qt::QueuedConnection);
connect(effect, &Effect::setInputImage, _hyperion, &Hyperion::setInputImage, Qt::QueuedConnection);
connect(effect, &QThread::finished, this, &EffectEngine::effectFinished);
+ connect(_hyperion, &Hyperion::finished, effect, &Effect::setInteruptionFlag, Qt::DirectConnection);
_activeEffects.push_back(effect);
// start the effect
diff --git a/libsrc/flatbufserver/FlatBufferClient.cpp b/libsrc/flatbufserver/FlatBufferClient.cpp
index c0fe674b..6ad88217 100644
--- a/libsrc/flatbufserver/FlatBufferClient.cpp
+++ b/libsrc/flatbufserver/FlatBufferClient.cpp
@@ -6,9 +6,6 @@
#include
#include
-#include
-#include
-
FlatBufferClient::FlatBufferClient(QTcpSocket* socket, const int &timeout, QObject *parent)
: QObject(parent)
, _log(Logger::getInstance("FLATBUFSERVER"))
@@ -72,7 +69,9 @@ void FlatBufferClient::disconnected()
{
Debug(_log, "Socket Closed");
_socket->deleteLater();
- emit clearGlobalInput(_priority);
+ if (_priority != 0 && _priority >= 100 && _priority < 200)
+ emit clearGlobalInput(_priority);
+
emit clientDisconnected();
}
@@ -122,6 +121,13 @@ void FlatBufferClient::registationRequired(const int priority)
void FlatBufferClient::handleRegisterCommand(const hyperionnet::Register *regReq)
{
+ if (regReq->priority() < 100 || regReq->priority() >= 200)
+ {
+ // Warning(_log, "Register request from client %s contains invalid priority %d. Valid rage is between 100 and 199.", QSTRING_CSTR(_clientAddress), regReq->priority());
+ sendErrorReply("The priority " + std::to_string(regReq->priority()) + " is not in the priority range between 100 and 199.");
+ return;
+ }
+
_priority = regReq->priority();
emit registerGlobalInput(_priority, hyperion::COMP_FLATBUFSERVER, regReq->origin()->c_str()+_clientAddress);
diff --git a/libsrc/flatbufserver/FlatBufferClient.h b/libsrc/flatbufserver/FlatBufferClient.h
index a9a2515b..7cb678c7 100644
--- a/libsrc/flatbufserver/FlatBufferClient.h
+++ b/libsrc/flatbufserver/FlatBufferClient.h
@@ -12,10 +12,9 @@
class QTcpSocket;
class QTimer;
-class Hyperion;
namespace flatbuf {
-class HyperionRequest;
+ class HyperionRequest;
}
///
diff --git a/libsrc/flatbufserver/FlatBufferConnection.cpp b/libsrc/flatbufserver/FlatBufferConnection.cpp
index c2a590f2..07e8a1b1 100644
--- a/libsrc/flatbufserver/FlatBufferConnection.cpp
+++ b/libsrc/flatbufserver/FlatBufferConnection.cpp
@@ -217,5 +217,8 @@ bool FlatBufferConnection::parseReply(const hyperionnet::Reply *reply)
return true;
}
+ else
+ throw std::runtime_error(reply->error()->str());
+
return false;
}
diff --git a/libsrc/protoserver/ProtoClientConnection.cpp b/libsrc/protoserver/ProtoClientConnection.cpp
index e2ccf52d..d7cd13b9 100644
--- a/libsrc/protoserver/ProtoClientConnection.cpp
+++ b/libsrc/protoserver/ProtoClientConnection.cpp
@@ -7,12 +7,6 @@
#include
#include
-// Hyperion includes
-#include
-
-// Hyperion instance manager includes
-#include
-
// TODO Remove this class if third-party apps have been migrated (eg. Hyperion Android Gabber, Windows Screen grabber etc.)
ProtoClientConnection::ProtoClientConnection(QTcpSocket* socket, const int &timeout, QObject *parent)
@@ -130,6 +124,12 @@ void ProtoClientConnection::handleColorCommand(const proto::ColorRequest &messag
color.green = qGreen(message.rgbcolor());
color.blue = qBlue(message.rgbcolor());
+ if (priority < 100 || priority >= 200)
+ {
+ sendErrorReply("The priority " + std::to_string(priority) + " is not in the priority range between 100 and 199.");
+ return;
+ }
+
// make sure the prio is registered before setColor()
if(priority != _priority)
{
@@ -154,6 +154,12 @@ void ProtoClientConnection::handleImageCommand(const proto::ImageRequest &messag
int height = message.imageheight();
const std::string & imageData = message.imagedata();
+ if (priority < 100 || priority >= 200)
+ {
+ sendErrorReply("The priority " + std::to_string(priority) + " is not in the priority range between 100 and 199.");
+ return;
+ }
+
// make sure the prio is registered before setInput()
if(priority != _priority)
{
diff --git a/libsrc/protoserver/ProtoClientConnection.h b/libsrc/protoserver/ProtoClientConnection.h
index 8b6c285d..ef88314f 100644
--- a/libsrc/protoserver/ProtoClientConnection.h
+++ b/libsrc/protoserver/ProtoClientConnection.h
@@ -11,10 +11,9 @@
class QTcpSocket;
class QTimer;
-class Hyperion;
namespace proto {
-class HyperionRequest;
+ class HyperionRequest;
}
///