summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@nokia.com>2010-11-26 15:22:47 (GMT)
committerKai Koehne <kai.koehne@nokia.com>2010-12-17 07:06:12 (GMT)
commit21016c3b28674029a2a205da38f54e362e3635b9 (patch)
tree3c2d65e657f8ff9337be338e2866dfb20cc7499d /src/declarative
parent5336e1838a95d97d34863b668ff797582c226e79 (diff)
downloadQt-21016c3b28674029a2a205da38f54e362e3635b9.zip
Qt-21016c3b28674029a2a205da38f54e362e3635b9.tar.gz
Qt-21016c3b28674029a2a205da38f54e362e3635b9.tar.bz2
QDeclarativeDebug: Move Tcp server to separate plugin
Reviewed-by: Christiaan Janssen
Diffstat (limited to 'src/declarative')
-rw-r--r--src/declarative/debugger/debugger.pri4
-rw-r--r--src/declarative/debugger/qdeclarativedebugserver.cpp50
-rw-r--r--src/declarative/debugger/qdeclarativedebugserver_p.h2
-rw-r--r--src/declarative/debugger/qdeclarativedebugserverconnection_p.h9
-rw-r--r--src/declarative/debugger/qdeclarativedebugservertcpconnection.cpp163
-rw-r--r--src/declarative/debugger/qdeclarativedebugservertcpconnection_p.h86
-rw-r--r--src/declarative/debugger/qpacketprotocol_p.h4
7 files changed, 54 insertions, 264 deletions
diff --git a/src/declarative/debugger/debugger.pri b/src/declarative/debugger/debugger.pri
index e7354dc..9152677 100644
--- a/src/declarative/debugger/debugger.pri
+++ b/src/declarative/debugger/debugger.pri
@@ -8,8 +8,7 @@ SOURCES += \
$$PWD/qdeclarativedebug.cpp \
$$PWD/qdeclarativedebugtrace.cpp \
$$PWD/qdeclarativedebughelper.cpp \
- $$PWD/qdeclarativedebugserver.cpp \
- $$PWD/qdeclarativedebugservertcpconnection.cpp
+ $$PWD/qdeclarativedebugserver.cpp
HEADERS += \
$$PWD/qdeclarativedebuggerstatus_p.h \
@@ -22,5 +21,4 @@ HEADERS += \
$$PWD/qdeclarativedebughelper_p.h \
$$PWD/qdeclarativedebugserverplugin_p.h \
$$PWD/qdeclarativedebugserver_p.h \
- $$PWD/qdeclarativedebugservertcpconnection_p.h \
debugger/qdeclarativedebugserverconnection_p.h
diff --git a/src/declarative/debugger/qdeclarativedebugserver.cpp b/src/declarative/debugger/qdeclarativedebugserver.cpp
index 6085e3e..a269984 100644
--- a/src/declarative/debugger/qdeclarativedebugserver.cpp
+++ b/src/declarative/debugger/qdeclarativedebugserver.cpp
@@ -42,9 +42,10 @@
#include "private/qdeclarativedebugserver_p.h"
#include "private/qdeclarativedebugservice_p.h"
#include "private/qdeclarativedebugservice_p_p.h"
-#include "private/qdeclarativedebugservertcpconnection_p.h"
#include "private/qdeclarativeengine_p.h"
+#include <QtCore/QDir>
+#include <QtCore/QPluginLoader>
#include <QtCore/QStringList>
#include <private/qobject_p.h>
@@ -89,6 +90,8 @@ public:
QHash<QString, QDeclarativeDebugService *> plugins;
QStringList clientPlugins;
bool gotHello;
+
+ static QDeclarativeDebugServerConnection *loadConnectionPlugin();
};
QDeclarativeDebugServerPrivate::QDeclarativeDebugServerPrivate() :
@@ -110,6 +113,36 @@ void QDeclarativeDebugServerPrivate::advertisePlugins()
connection->send(message);
}
+QDeclarativeDebugServerConnection *QDeclarativeDebugServerPrivate::loadConnectionPlugin()
+{
+ QStringList pluginCandidates;
+ const QStringList paths = QCoreApplication::libraryPaths();
+ foreach (const QString &libPath, paths) {
+ const QDir dir(libPath + QLatin1String("/qmldebugging"));
+ if (dir.exists()) {
+ QStringList plugins(dir.entryList(QDir::Files));
+ foreach (const QString &pluginPath, plugins) {
+ pluginCandidates << dir.absoluteFilePath(pluginPath);
+ }
+ }
+ }
+
+ foreach (const QString &pluginPath, pluginCandidates) {
+ QPluginLoader loader(pluginPath);
+ if (!loader.load()) {
+ continue;
+ }
+ QDeclarativeDebugServerConnection *connection = 0;
+ if (QObject *instance = loader.instance())
+ connection = qobject_cast<QDeclarativeDebugServerConnection*>(instance);
+
+ if (connection)
+ return connection;
+ loader.unload();
+ }
+ return 0;
+}
+
bool QDeclarativeDebugServer::hasDebuggingClient() const
{
Q_D(const QDeclarativeDebugServer);
@@ -153,15 +186,18 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
if (ok) {
server = new QDeclarativeDebugServer();
- QDeclarativeDebugServerTcpConnection *tcpConnection
- = new QDeclarativeDebugServerTcpConnection(port, server);
+ QDeclarativeDebugServerConnection *connection
+ = QDeclarativeDebugServerPrivate::loadConnectionPlugin();
+ if (connection) {
+ server->d_func()->connection = connection;
- tcpConnection->listen();
- if (block) {
- tcpConnection->waitForConnection();
+ connection->setServer(server);
+ connection->setPort(port, block);
+ } else {
+ qWarning() << QString::fromAscii("QDeclarativeDebugServer: Ignoring\"-qmljsdebugger=%1\". "
+ "Remote debugger plugin has not been found.").arg(appD->qmljsDebugArgumentsString());
}
- server->d_func()->connection = tcpConnection;
} else {
qWarning(QString::fromAscii("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". "
"Format is -qmljsdebugger=port:<port>[,block]").arg(
diff --git a/src/declarative/debugger/qdeclarativedebugserver_p.h b/src/declarative/debugger/qdeclarativedebugserver_p.h
index 93ab10b..ec3e60f 100644
--- a/src/declarative/debugger/qdeclarativedebugserver_p.h
+++ b/src/declarative/debugger/qdeclarativedebugserver_p.h
@@ -54,7 +54,7 @@ QT_MODULE(Declarative)
class QDeclarativeDebugService;
class QDeclarativeDebugServerPrivate;
-class QDeclarativeDebugServer : public QObject
+class Q_DECLARATIVE_EXPORT QDeclarativeDebugServer : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeDebugServer)
diff --git a/src/declarative/debugger/qdeclarativedebugserverconnection_p.h b/src/declarative/debugger/qdeclarativedebugserverconnection_p.h
index 4175126..631da74 100644
--- a/src/declarative/debugger/qdeclarativedebugserverconnection_p.h
+++ b/src/declarative/debugger/qdeclarativedebugserverconnection_p.h
@@ -42,7 +42,7 @@
#ifndef QDECLARATIVEDEBUGSERVERCONNECTION_H
#define QDECLARATIVEDEBUGSERVERCONNECTION_H
-#include <private/qdeclarativeglobal_p.h>
+#include <QtDeclarative/private/qdeclarativeglobal_p.h>
QT_BEGIN_HEADER
@@ -50,17 +50,22 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
-class QDeclarativeDebugServerConnection
+class QDeclarativeDebugServer;
+class Q_DECLARATIVE_EXPORT QDeclarativeDebugServerConnection
{
public:
QDeclarativeDebugServerConnection() {}
virtual ~QDeclarativeDebugServerConnection() {}
+ virtual void setServer(QDeclarativeDebugServer *server) = 0;
+ virtual void setPort(int port, bool bock) = 0;
virtual bool isConnected() const = 0;
virtual void send(const QByteArray &message) = 0;
virtual void disconnect() = 0;
};
+Q_DECLARE_INTERFACE(QDeclarativeDebugServerConnection, "com.trolltech.Qt.QDeclarativeDebugServerConnection/1.0")
+
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/declarative/debugger/qdeclarativedebugservertcpconnection.cpp b/src/declarative/debugger/qdeclarativedebugservertcpconnection.cpp
deleted file mode 100644
index 223c875..0000000
--- a/src/declarative/debugger/qdeclarativedebugservertcpconnection.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativedebugservertcpconnection_p.h"
-
-#include "qdeclarativedebugserver_p.h"
-#include "private/qpacketprotocol_p.h"
-
-#include <QtNetwork/qtcpserver.h>
-#include <QtNetwork/qtcpsocket.h>
-
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeDebugServerTcpConnectionPrivate {
-public:
- QDeclarativeDebugServerTcpConnectionPrivate();
-
- int port;
- QTcpSocket *socket;
- QPacketProtocol *protocol;
- QTcpServer *tcpServer;
-
- QDeclarativeDebugServer *debugServer;
-};
-
-QDeclarativeDebugServerTcpConnectionPrivate::QDeclarativeDebugServerTcpConnectionPrivate() :
- port(0),
- socket(0),
- protocol(0),
- tcpServer(0),
- debugServer(0)
-{
-}
-
-QDeclarativeDebugServerTcpConnection::QDeclarativeDebugServerTcpConnection(int port, QDeclarativeDebugServer *server) :
- QObject(server),
- d_ptr(new QDeclarativeDebugServerTcpConnectionPrivate)
-{
- Q_D(QDeclarativeDebugServerTcpConnection);
- d->port = port;
- d->debugServer = server;
-}
-
-QDeclarativeDebugServerTcpConnection::~QDeclarativeDebugServerTcpConnection()
-{
- delete d_ptr;
-}
-
-bool QDeclarativeDebugServerTcpConnection::isConnected() const
-{
- Q_D(const QDeclarativeDebugServerTcpConnection);
- return d->socket && d->socket->state() == QTcpSocket::ConnectedState;
-}
-
-void QDeclarativeDebugServerTcpConnection::send(const QByteArray &message)
-{
- Q_D(QDeclarativeDebugServerTcpConnection);
-
- if (!isConnected())
- return;
-
- QPacket pack;
- pack.writeRawData(message.data(), message.length());
-
- d->protocol->send(pack);
- d->socket->flush();
-}
-
-void QDeclarativeDebugServerTcpConnection::disconnect()
-{
- Q_D(QDeclarativeDebugServerTcpConnection);
-
- delete d->protocol;
- d->protocol = 0;
- delete d->socket;
- d->socket = 0;
-}
-
-void QDeclarativeDebugServerTcpConnection::listen()
-{
- Q_D(QDeclarativeDebugServerTcpConnection);
-
- d->tcpServer = new QTcpServer(this);
- QObject::connect(d->tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection()));
- if (d->tcpServer->listen(QHostAddress::Any, d->port))
- qWarning("QDeclarativeDebugServer: Waiting for connection on port %d...", d->port);
- else
- qWarning("QDeclarativeDebugServer: Unable to listen on port %d", d->port);
-}
-
-void QDeclarativeDebugServerTcpConnection::waitForConnection()
-{
- Q_D(QDeclarativeDebugServerTcpConnection);
- d->tcpServer->waitForNewConnection(-1);
-}
-
-void QDeclarativeDebugServerTcpConnection::readyRead()
-{
- Q_D(QDeclarativeDebugServerTcpConnection);
- QPacket packet = d->protocol->read();
-
- QByteArray content = packet.data();
- d->debugServer->receiveMessage(content);
-}
-
-void QDeclarativeDebugServerTcpConnection::newConnection()
-{
- Q_D(QDeclarativeDebugServerTcpConnection);
-
- if (d->socket) {
- qWarning("QDeclarativeDebugServer error: another client is already connected");
- QTcpSocket *faultyConnection = d->tcpServer->nextPendingConnection();
- delete faultyConnection;
- return;
- }
-
- d->socket = d->tcpServer->nextPendingConnection();
- d->socket->setParent(this);
- d->protocol = new QPacketProtocol(d->socket, this);
- QObject::connect(d->protocol, SIGNAL(readyRead()), this, SLOT(readyRead()));
-}
-
-
-QT_END_NAMESPACE
diff --git a/src/declarative/debugger/qdeclarativedebugservertcpconnection_p.h b/src/declarative/debugger/qdeclarativedebugservertcpconnection_p.h
deleted file mode 100644
index f1c749ef..0000000
--- a/src/declarative/debugger/qdeclarativedebugservertcpconnection_p.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEDEBUGSERVERTCPCONNECTION_H
-#define QDECLARATIVEDEBUGSERVERTCPCONNECTION_H
-
-#include <private/qdeclarativeglobal_p.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Declarative)
-
-#include <qdeclarativedebugserverconnection_p.h>
-
-class QDeclarativeDebugServer;
-class QDeclarativeDebugServerTcpConnectionPrivate;
-class QDeclarativeDebugServerTcpConnection : public QObject, public QDeclarativeDebugServerConnection
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(QDeclarativeDebugServerTcpConnection)
- Q_DISABLE_COPY(QDeclarativeDebugServerTcpConnection)
-
-public:
- QDeclarativeDebugServerTcpConnection(int port, QDeclarativeDebugServer *server);
- ~QDeclarativeDebugServerTcpConnection();
-
- bool isConnected() const;
- void send(const QByteArray &message);
- void disconnect();
-
- void listen();
- void waitForConnection();
-
-private Q_SLOTS:
- void readyRead();
- void newConnection();
-
-private:
- QDeclarativeDebugServerTcpConnectionPrivate *d_ptr;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEDEBUGSERVERTCPCONNECTION_H
diff --git a/src/declarative/debugger/qpacketprotocol_p.h b/src/declarative/debugger/qpacketprotocol_p.h
index 99fded5..1c69cdd 100644
--- a/src/declarative/debugger/qpacketprotocol_p.h
+++ b/src/declarative/debugger/qpacketprotocol_p.h
@@ -59,7 +59,7 @@ class QPacket;
class QPacketAutoSend;
class QPacketProtocolPrivate;
-class Q_DECLARATIVE_PRIVATE_EXPORT QPacketProtocol : public QObject
+class Q_DECLARATIVE_EXPORT QPacketProtocol : public QObject
{
Q_OBJECT
public:
@@ -89,7 +89,7 @@ private:
};
-class Q_DECLARATIVE_PRIVATE_EXPORT QPacket : public QDataStream
+class Q_DECLARATIVE_EXPORT QPacket : public QDataStream
{
public:
QPacket();