diff --git a/common/slipdataprocessor.cpp b/common/slipdataprocessor.cpp index 083a386..ca47435 100644 --- a/common/slipdataprocessor.cpp +++ b/common/slipdataprocessor.cpp @@ -97,15 +97,23 @@ QByteArray SlipDataProcessor::serializeData(const QByteArray &data) SlipDataProcessor::Frame SlipDataProcessor::parseFrame(const QByteArray &data) { Frame frame; - frame.socketAddress = static_cast(static_cast(data.at(0)) << 8 | data.at(1)); - frame.data = data.right(data.length() - 2); + QDataStream stream(data); + stream >> frame.socketAddress; + while (!stream.atEnd()) { + quint8 dataByte; + stream >> dataByte; + frame.data.append(dataByte); + } return frame; } QByteArray SlipDataProcessor::buildFrame(const Frame &frame) { - QByteArray addressData; - QDataStream stream(&addressData, QIODevice::WriteOnly); + QByteArray data; + QDataStream stream(&data, QIODevice::WriteOnly); stream << frame.socketAddress; - return addressData + frame.data; + for (int i = 0; i < frame.data.size(); i++) { + stream << static_cast(frame.data.at(i)); + } + return data; } diff --git a/libnymea-remoteproxy/server/tcpsocketserver.cpp b/libnymea-remoteproxy/server/tcpsocketserver.cpp index 558232d..dc152e6 100644 --- a/libnymea-remoteproxy/server/tcpsocketserver.cpp +++ b/libnymea-remoteproxy/server/tcpsocketserver.cpp @@ -52,7 +52,7 @@ void TcpSocketServer::sendData(const QUuid &clientId, const QByteArray &data) return; } - qCDebug(dcTcpSocketServerTraffic()) << "Send data to" << clientId.toString() << data + '\n'; + qCDebug(dcTcpSocketServerTraffic()) << "Send data to" << clientId.toString() << data; if (client->write(data) < 0) { qCWarning(dcTcpSocketServer()) << "Could not write data to client socket" << clientId.toString(); } diff --git a/libnymea-remoteproxy/tunnelproxy/tunnelproxyserver.cpp b/libnymea-remoteproxy/tunnelproxy/tunnelproxyserver.cpp index b33319b..dacb524 100644 --- a/libnymea-remoteproxy/tunnelproxy/tunnelproxyserver.cpp +++ b/libnymea-remoteproxy/tunnelproxy/tunnelproxyserver.cpp @@ -335,7 +335,7 @@ void TunnelProxyServer::onClientDataAvailable(const QUuid &clientId, const QByte SlipDataProcessor::Frame frame; frame.socketAddress = clientConnection->socketAddress(); frame.data = data; - qCDebug(dcTunnelProxyServerTraffic()) << "--> Tunnel data to server socket address" << clientConnection->socketAddress() << "to" << clientConnection->serverConnection() << qUtf8Printable(data); + qCDebug(dcTunnelProxyServerTraffic()) << "--> Tunnel data to server socket address" << clientConnection->socketAddress() << "to" << clientConnection->serverConnection() << "\n" << data; clientConnection->serverConnection()->transportClient()->sendData(SlipDataProcessor::serializeData(SlipDataProcessor::buildFrame(frame))); } else if (tunnelProxyClient->type() == TunnelProxyClient::TypeServer) { @@ -366,7 +366,7 @@ void TunnelProxyServer::onClientDataAvailable(const QUuid &clientId, const QByte return; } - qCDebug(dcTunnelProxyServerTraffic()) << "--> Tunnel data from server socket" << frame.socketAddress << "to" << clientConnection << qUtf8Printable(data); + qCDebug(dcTunnelProxyServerTraffic()) << "--> Tunnel data from server socket" << frame.socketAddress << "to" << clientConnection << "\n" << frame.data; clientConnection->transportClient()->sendData(frame.data); } } diff --git a/libnymea-remoteproxyclient/tunnelproxy/tunnelproxysocketserver.cpp b/libnymea-remoteproxyclient/tunnelproxy/tunnelproxysocketserver.cpp index 8c1e267..f856ce0 100644 --- a/libnymea-remoteproxyclient/tunnelproxy/tunnelproxysocketserver.cpp +++ b/libnymea-remoteproxyclient/tunnelproxy/tunnelproxysocketserver.cpp @@ -159,6 +159,8 @@ void TunnelProxySocketServer::stopServer() m_enabled = false; m_reconnectTimer.stop(); + qCDebug(dcTunnelProxySocketServer()) << "Stopping the server."; + if (m_connection) { qCDebug(dcTunnelProxySocketServer()) << "Disconnecting from" << m_connection->serverUrl().toString(); m_connection->disconnectServer(); @@ -247,6 +249,7 @@ void TunnelProxySocketServer::onConnectionStateChanged(QAbstractSocket::SocketSt break; case QAbstractSocket::ConnectedState: setState(StateConnected); + qCDebug(dcTunnelProxySocketServer()) << "Stopping reconnect timer."; m_reconnectTimer.stop(); break; case QAbstractSocket::ClosingState: @@ -351,9 +354,10 @@ void TunnelProxySocketServer::requestSocketDisconnect(quint16 socketAddress) void TunnelProxySocketServer::setupReconnectTimer() { m_reconnectTimer.setInterval(5000); - m_reconnectTimer.setSingleShot(true); + m_reconnectTimer.setSingleShot(false); connect(&m_reconnectTimer, &QTimer::timeout, this, [this](){ if (!m_enabled) { + qCDebug(dcTunnelProxySocketServer()) << "Stopping reconnect timer. The server has been disabled."; m_reconnectTimer.stop(); return; } @@ -433,8 +437,6 @@ void TunnelProxySocketServer::cleanUp() m_remoteProxyServerVersion.clear(); m_remoteProxyApiVersion.clear(); - m_enabled = false; - setState(StateDisconnected); }