diff options
author | Kai Koehne <kai.koehne@nokia.com> | 2011-09-19 12:29:10 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-09-20 08:47:27 +0200 |
commit | 940069e463b149cee85a88f33d26ace46d16ec59 (patch) | |
tree | 9b052b8aeb80a6d2f30825d61567f14f97b2b9b1 /src | |
parent | 4bca5b2ff803f4d09350e2d251c90e3b9d60f350 (diff) |
QDeclarativeDebug: Allow reconnects to QML debugger port
Allow a new client to attach once the old one was disconnected.
Done by Aurindam Jana.
Change-Id: Id85045204cc011ec6e02db2658173e652b75c07e
Reviewed-on: http://codereview.qt-project.org/5132
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Aurindam Jana <aurindam.jana@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/declarative/debugger/qdeclarativedebugserver.cpp | 112 | ||||
-rw-r--r-- | src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp | 3 |
2 files changed, 55 insertions, 60 deletions
diff --git a/src/declarative/debugger/qdeclarativedebugserver.cpp b/src/declarative/debugger/qdeclarativedebugserver.cpp index 883e1a89b0..f815f332c2 100644 --- a/src/declarative/debugger/qdeclarativedebugserver.cpp +++ b/src/declarative/debugger/qdeclarativedebugserver.cpp @@ -243,75 +243,66 @@ void QDeclarativeDebugServer::receiveMessage(const QByteArray &message) Q_D(QDeclarativeDebugServer); QDataStream in(message); - if (!d->gotHello) { - QString name; - int op; - in >> name >> op; - - if (name != QLatin1String("QDeclarativeDebugServer") - || op != 0) { - qWarning("QDeclarativeDebugServer: Invalid hello message"); - d->connection->disconnect(); - return; - } - - int version; - in >> version >> d->clientPlugins; - - // Send the hello answer immediately, since it needs to arrive before - // the plugins below start sending messages. - QByteArray helloAnswer; - { - QDataStream out(&helloAnswer, QIODevice::WriteOnly); - out << QString(QLatin1String("QDeclarativeDebugClient")) << 0 << protocolVersion << d->plugins.keys(); - } - d->connection->send(helloAnswer); - - d->gotHello = true; - - QHash<QString, QDeclarativeDebugService*>::Iterator iter = d->plugins.begin(); - for (; iter != d->plugins.end(); ++iter) { - QDeclarativeDebugService::Status newStatus = QDeclarativeDebugService::Unavailable; - if (d->clientPlugins.contains(iter.key())) - newStatus = QDeclarativeDebugService::Enabled; - iter.value()->d_func()->status = newStatus; - iter.value()->statusChanged(newStatus); - } + QString name; + + in >> name; + if (name == QLatin1String("QDeclarativeDebugServer")) { + int op = -1; + in >> op; + if (op == 0) { + int version; + in >> version >> d->clientPlugins; + + // Send the hello answer immediately, since it needs to arrive before + // the plugins below start sending messages. + QByteArray helloAnswer; + { + QDataStream out(&helloAnswer, QIODevice::WriteOnly); + out << QString(QLatin1String("QDeclarativeDebugClient")) << 0 << protocolVersion << d->plugins.keys(); + } + d->connection->send(helloAnswer); - qWarning("QDeclarativeDebugServer: Connection established"); - } else { + d->gotHello = true; - QString debugServer(QLatin1String("QDeclarativeDebugServer")); + QHash<QString, QDeclarativeDebugService*>::Iterator iter = d->plugins.begin(); + for (; iter != d->plugins.end(); ++iter) { + QDeclarativeDebugService::Status newStatus = QDeclarativeDebugService::Unavailable; + if (d->clientPlugins.contains(iter.key())) + newStatus = QDeclarativeDebugService::Enabled; + iter.value()->d_func()->status = newStatus; + iter.value()->statusChanged(newStatus); + } - QString name; - in >> name; + qWarning("QDeclarativeDebugServer: Connection established"); - if (name == debugServer) { - int op = -1; - in >> op; + } else if (op == 1) { - if (op == 1) { - // Service Discovery - QStringList oldClientPlugins = d->clientPlugins; - in >> d->clientPlugins; + // Service Discovery + QStringList oldClientPlugins = d->clientPlugins; + in >> d->clientPlugins; - QHash<QString, QDeclarativeDebugService*>::Iterator iter = d->plugins.begin(); - for (; iter != d->plugins.end(); ++iter) { - const QString pluginName = iter.key(); - QDeclarativeDebugService::Status newStatus = QDeclarativeDebugService::Unavailable; - if (d->clientPlugins.contains(pluginName)) - newStatus = QDeclarativeDebugService::Enabled; + QHash<QString, QDeclarativeDebugService*>::Iterator iter = d->plugins.begin(); + for (; iter != d->plugins.end(); ++iter) { + const QString pluginName = iter.key(); + QDeclarativeDebugService::Status newStatus = QDeclarativeDebugService::Unavailable; + if (d->clientPlugins.contains(pluginName)) + newStatus = QDeclarativeDebugService::Enabled; - if (oldClientPlugins.contains(pluginName) - != d->clientPlugins.contains(pluginName)) { - iter.value()->d_func()->status = newStatus; - iter.value()->statusChanged(newStatus); - } + if (oldClientPlugins.contains(pluginName) + != d->clientPlugins.contains(pluginName)) { + iter.value()->d_func()->status = newStatus; + iter.value()->statusChanged(newStatus); } - } else { - qWarning("QDeclarativeDebugServer: Invalid control message %d", op); } + } else { + qWarning("QDeclarativeDebugServer: Invalid control message %d", op); + d->connection->disconnect(); + return; + } + + } else { + if (d->gotHello) { QByteArray message; in >> message; @@ -328,7 +319,10 @@ void QDeclarativeDebugServer::receiveMessage(const QByteArray &message) Q_ARG(QString, name), Q_ARG(QByteArray, message)); } + } else { + qWarning("QDeclarativeDebugServer: Invalid hello message"); } + } } diff --git a/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp index abc60e13a7..512ea6571d 100644 --- a/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp +++ b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp @@ -168,13 +168,14 @@ void QTcpServerConnection::newConnection() { Q_D(QTcpServerConnection); - if (d->socket) { + if (d->socket && d->socket->peerPort()) { qWarning("QDeclarativeDebugServer: Another client is already connected"); QTcpSocket *faultyConnection = d->tcpServer->nextPendingConnection(); delete faultyConnection; return; } + delete d->socket; d->socket = d->tcpServer->nextPendingConnection(); d->socket->setParent(this); d->protocol = new QPacketProtocol(d->socket, this); |