aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@nokia.com>2011-09-19 12:29:10 +0200
committerQt by Nokia <qt-info@nokia.com>2011-09-20 08:47:27 +0200
commit940069e463b149cee85a88f33d26ace46d16ec59 (patch)
tree9b052b8aeb80a6d2f30825d61567f14f97b2b9b1 /src
parent4bca5b2ff803f4d09350e2d251c90e3b9d60f350 (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.cpp112
-rw-r--r--src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp3
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);