refactor(ipc): Add newline in utility write function

This commit is contained in:
Nick Bolton 2025-11-20 12:20:56 +00:00
parent cace2892ba
commit b547493bc5
2 changed files with 37 additions and 18 deletions

View file

@ -14,8 +14,8 @@
namespace deskflow::core::ipc { namespace deskflow::core::ipc {
const auto kAckMessage = "ok\n"; const auto kAckMessage = "ok";
const auto kErrorMessage = "error\n"; const auto kErrorMessage = "error";
DaemonIpcServer::DaemonIpcServer(QObject *parent, const QString &logFilename) DaemonIpcServer::DaemonIpcServer(QObject *parent, const QString &logFilename)
: QObject(parent), : QObject(parent),
@ -109,17 +109,17 @@ void DaemonIpcServer::processMessage(QLocalSocket *clientSocket, const QString &
const auto parts = message.split('='); const auto parts = message.split('=');
if (parts.size() < 1) { if (parts.size() < 1) {
LOG_ERR("ipc server got invalid message: %s", message.toUtf8().constData()); LOG_ERR("ipc server got invalid message: %s", message.toUtf8().constData());
clientSocket->write(kErrorMessage); writeToClientSocket(clientSocket, kErrorMessage);
return; return;
} }
const auto &command = parts[0]; const auto &command = parts[0];
if (command == "hello") { // NOSONAR - if-init is confusing here if (command == "hello") { // NOSONAR - if-init is confusing here
LOG_DEBUG("ipc server got hello message, sending hello back"); LOG_DEBUG("ipc server got hello message, sending hello back");
clientSocket->write("hello\n"); writeToClientSocket(clientSocket, "hello");
} else if (command == "noop") { } else if (command == "noop") {
LOG_DEBUG("ipc server got noop message"); LOG_DEBUG("ipc server got noop message");
clientSocket->write(kAckMessage); writeToClientSocket(clientSocket, kAckMessage);
} else if (command == "logLevel") { } else if (command == "logLevel") {
processLogLevel(clientSocket, parts); processLogLevel(clientSocket, parts);
} else if (command == "elevate") { } else if (command == "elevate") {
@ -129,18 +129,18 @@ void DaemonIpcServer::processMessage(QLocalSocket *clientSocket, const QString &
} else if (command == "start") { } else if (command == "start") {
LOG_DEBUG("ipc server got start message"); LOG_DEBUG("ipc server got start message");
Q_EMIT startProcessRequested(); Q_EMIT startProcessRequested();
clientSocket->write(kAckMessage); writeToClientSocket(clientSocket, kAckMessage);
} else if (command == "stop") { } else if (command == "stop") {
LOG_DEBUG("ipc server got stop message"); LOG_DEBUG("ipc server got stop message");
Q_EMIT stopProcessRequested(); Q_EMIT stopProcessRequested();
clientSocket->write(kAckMessage); writeToClientSocket(clientSocket, kAckMessage);
} else if (command == "logPath") { } else if (command == "logPath") {
LOG_DEBUG("ipc server got log path request"); LOG_DEBUG("ipc server got log path request");
clientSocket->write("logPath=" + m_logFilename.toUtf8() + "\n"); writeToClientSocket(clientSocket, "logPath=" + m_logFilename.toUtf8());
} else if (command == "clearSettings") { } else if (command == "clearSettings") {
LOG_DEBUG("ipc server got clear settings message"); LOG_DEBUG("ipc server got clear settings message");
Q_EMIT clearSettingsRequested(); Q_EMIT clearSettingsRequested();
clientSocket->write(kAckMessage); writeToClientSocket(clientSocket, kAckMessage);
} else { } else {
LOG_WARN("ipc server got unknown message: %s", message.toUtf8().constData()); LOG_WARN("ipc server got unknown message: %s", message.toUtf8().constData());
} }
@ -152,60 +152,71 @@ void DaemonIpcServer::processLogLevel(QLocalSocket *&clientSocket, const QString
{ {
if (messageParts.size() < 2) { if (messageParts.size() < 2) {
LOG_ERR("ipc server got invalid log level message"); LOG_ERR("ipc server got invalid log level message");
clientSocket->write(kErrorMessage); writeToClientSocket(clientSocket, kErrorMessage);
return; return;
} }
const auto &logLevel = messageParts[1]; const auto &logLevel = messageParts[1];
if (logLevel.isEmpty()) { if (logLevel.isEmpty()) {
LOG_ERR("ipc server got empty log level"); LOG_ERR("ipc server got empty log level");
clientSocket->write(kErrorMessage); writeToClientSocket(clientSocket, kErrorMessage);
return; return;
} }
LOG_DEBUG("ipc server got new log level: %s", logLevel.toUtf8().constData()); LOG_DEBUG("ipc server got new log level: %s", logLevel.toUtf8().constData());
Q_EMIT logLevelChanged(logLevel); Q_EMIT logLevelChanged(logLevel);
clientSocket->write(kAckMessage); writeToClientSocket(clientSocket, kAckMessage);
} }
void DaemonIpcServer::processElevate(QLocalSocket *&clientSocket, const QStringList &messageParts) void DaemonIpcServer::processElevate(QLocalSocket *&clientSocket, const QStringList &messageParts)
{ {
if (messageParts.size() < 2) { if (messageParts.size() < 2) {
LOG_ERR("ipc server got invalid elevate message"); LOG_ERR("ipc server got invalid elevate message");
clientSocket->write(kErrorMessage); writeToClientSocket(clientSocket, kErrorMessage);
return; return;
} }
const auto &elevate = messageParts[1]; const auto &elevate = messageParts[1];
if (elevate != "yes" && elevate != "no") { if (elevate != "yes" && elevate != "no") {
LOG_ERR("ipc server got invalid elevate value: %s", elevate.toUtf8().constData()); LOG_ERR("ipc server got invalid elevate value: %s", elevate.toUtf8().constData());
clientSocket->write(kErrorMessage); writeToClientSocket(clientSocket, kErrorMessage);
return; return;
} }
LOG_DEBUG("ipc server got new elevate value: %s", elevate.toUtf8().constData()); LOG_DEBUG("ipc server got new elevate value: %s", elevate.toUtf8().constData());
Q_EMIT elevateModeChanged(elevate == "yes"); Q_EMIT elevateModeChanged(elevate == "yes");
clientSocket->write(kAckMessage); writeToClientSocket(clientSocket, kAckMessage);
} }
void DaemonIpcServer::processCommand(QLocalSocket *&clientSocket, const QStringList &messageParts) void DaemonIpcServer::processCommand(QLocalSocket *&clientSocket, const QStringList &messageParts)
{ {
if (messageParts.size() < 2) { if (messageParts.size() < 2) {
LOG_ERR("ipc server got invalid command message"); LOG_ERR("ipc server got invalid command message");
clientSocket->write(kErrorMessage); writeToClientSocket(clientSocket, kErrorMessage);
return; return;
} }
const auto &command = messageParts[1]; const auto &command = messageParts[1];
if (command.isEmpty()) { if (command.isEmpty()) {
LOG_ERR("ipc server got empty command"); LOG_ERR("ipc server got empty command");
clientSocket->write(kErrorMessage); writeToClientSocket(clientSocket, kErrorMessage);
return; return;
} }
LOG_DEBUG("ipc server got new command: %s", command.toUtf8().constData()); LOG_DEBUG("ipc server got new command: %s", command.toUtf8().constData());
Q_EMIT commandChanged(command); Q_EMIT commandChanged(command);
clientSocket->write(kAckMessage); writeToClientSocket(clientSocket, kAckMessage);
}
void DaemonIpcServer::writeToClientSocket(QLocalSocket *&clientSocket, const QString &message)
{
QByteArray messageData = message.toUtf8() + '\n';
qint64 bytesWritten = clientSocket->write(messageData);
if (bytesWritten != messageData.size()) {
LOG_ERR("ipc server failed to write full message to client socket");
} else {
LOG_DEBUG1("ipc server wrote message to client socket: %s", message.toUtf8().constData());
}
} }
} // namespace deskflow::core::ipc } // namespace deskflow::core::ipc

View file

@ -38,6 +38,14 @@ private:
void processElevate(QLocalSocket *&clientSocket, const QStringList &messageParts); void processElevate(QLocalSocket *&clientSocket, const QStringList &messageParts);
void processCommand(QLocalSocket *&clientSocket, const QStringList &messageParts); void processCommand(QLocalSocket *&clientSocket, const QStringList &messageParts);
/**!
* Write a message to the client socket and append a newline character.
*
* \param clientSocket The client socket to write to.
* \param message The message to write (without trailing newline).
*/
void writeToClientSocket(QLocalSocket *&clientSocket, const QString &message);
private Q_SLOTS: private Q_SLOTS:
void handleNewConnection(); void handleNewConnection();
void handleReadyRead(); void handleReadyRead();