forked from qt-creator/qt-creator
Maemo: Use on-demand shared Net7 object.
Task-number: QTCREATORBUG-1073
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
#include "maemosettingspage.h"
|
||||
#include "maemotoolchain.h"
|
||||
#include "maemorunconfiguration.h"
|
||||
#include "ne7sshobject.h"
|
||||
|
||||
#include <coreplugin/actionmanager/actionmanager.h>
|
||||
#include <coreplugin/coreconstants.h>
|
||||
@@ -85,6 +86,8 @@ MaemoManager::MaemoManager()
|
||||
pluginManager->addObject(m_packageCreationFactory);
|
||||
pluginManager->addObject(m_settingsPage);
|
||||
pluginManager->addObject(m_gdbSettingsPage);
|
||||
|
||||
Ne7SshObject::instance();
|
||||
}
|
||||
|
||||
MaemoManager::~MaemoManager()
|
||||
@@ -97,6 +100,7 @@ MaemoManager::~MaemoManager()
|
||||
pluginManager->removeObject(m_settingsPage);
|
||||
pluginManager->removeObject(m_gdbSettingsPage);
|
||||
|
||||
Ne7SshObject::removeInstance();
|
||||
m_instance = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include "maemosshconnection.h"
|
||||
|
||||
#include "maemodeviceconfigurations.h"
|
||||
#include "ne7sshobject.h"
|
||||
|
||||
#include <ne7ssh.h>
|
||||
|
||||
@@ -55,8 +56,6 @@
|
||||
namespace Qt4ProjectManager {
|
||||
namespace Internal {
|
||||
namespace {
|
||||
ne7ssh ssh;
|
||||
|
||||
char *alloc(size_t n)
|
||||
{
|
||||
return new char[n];
|
||||
@@ -67,7 +66,9 @@ namespace {
|
||||
|
||||
MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
|
||||
bool shell)
|
||||
: m_channel(-1), m_stopRequested(false)
|
||||
: ssh(Ne7SshObject::instance()->get()),
|
||||
m_channel(-1),
|
||||
m_stopRequested(false)
|
||||
{
|
||||
const QString *authString;
|
||||
int (ne7ssh::*connFunc)(const char *, int, const char *, const char *, bool, int);
|
||||
@@ -78,7 +79,7 @@ MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
|
||||
authString = &devConf.keyFile;
|
||||
connFunc = &ne7ssh::connectWithKey;
|
||||
}
|
||||
m_channel = (ssh.*connFunc)(devConf.host.toLatin1(), devConf.sshPort,
|
||||
m_channel = (ssh.data()->*connFunc)(devConf.host.toLatin1(), devConf.sshPort,
|
||||
devConf.uname.toAscii(), authString->toLatin1(), shell, devConf.timeout);
|
||||
if (m_channel == -1)
|
||||
throw MaemoSshException(tr("Could not connect to host"));
|
||||
@@ -87,12 +88,12 @@ MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
|
||||
MaemoSshConnection::~MaemoSshConnection()
|
||||
{
|
||||
qDebug("%s", Q_FUNC_INFO);
|
||||
ssh.close(m_channel);
|
||||
ssh->close(m_channel);
|
||||
}
|
||||
|
||||
const char *MaemoSshConnection::lastError()
|
||||
{
|
||||
return ssh.errors()->pop(channel());
|
||||
return ssh->errors()->pop(channel());
|
||||
}
|
||||
|
||||
void MaemoSshConnection::stop()
|
||||
@@ -104,7 +105,7 @@ MaemoInteractiveSshConnection::MaemoInteractiveSshConnection(const MaemoDeviceCo
|
||||
: MaemoSshConnection(devConf, true), m_prompt(0)
|
||||
{
|
||||
m_prompt = devConf.uname == QLatin1String("root") ? "# " : "$ ";
|
||||
if (!ssh.waitFor(channel(), m_prompt, devConf.timeout)) {
|
||||
if (!ssh->waitFor(channel(), m_prompt, devConf.timeout)) {
|
||||
const QString error
|
||||
= tr("Could not start remote shell: %1").arg(lastError());
|
||||
throw MaemoSshException(error);
|
||||
@@ -113,13 +114,13 @@ MaemoInteractiveSshConnection::MaemoInteractiveSshConnection(const MaemoDeviceCo
|
||||
|
||||
MaemoInteractiveSshConnection::~MaemoInteractiveSshConnection()
|
||||
{
|
||||
ssh.send("exit\n", channel());
|
||||
ssh.waitFor(channel(), m_prompt, 1);
|
||||
ssh->send("exit\n", channel());
|
||||
ssh->waitFor(channel(), m_prompt, 1);
|
||||
}
|
||||
|
||||
void MaemoInteractiveSshConnection::runCommand(const QString &command)
|
||||
{
|
||||
if (!ssh.send((command + QLatin1String("\n")).toLatin1().data(),
|
||||
if (!ssh->send((command + QLatin1String("\n")).toLatin1().data(),
|
||||
channel())) {
|
||||
throw MaemoSshException(tr("Error running command: %1")
|
||||
.arg(lastError()));
|
||||
@@ -127,12 +128,12 @@ void MaemoInteractiveSshConnection::runCommand(const QString &command)
|
||||
|
||||
bool done;
|
||||
do {
|
||||
done = ssh.waitFor(channel(), m_prompt, 1);
|
||||
done = ssh->waitFor(channel(), m_prompt, 1);
|
||||
const char * const error = lastError();
|
||||
if (error)
|
||||
throw MaemoSshException(tr("SSH error: %1").arg(error));
|
||||
QScopedPointer<char, QScopedPointerArrayDeleter<char> >
|
||||
output(ssh.readAndReset(channel(), alloc));
|
||||
output(ssh->readAndReset(channel(), alloc));
|
||||
if (output.data()) {
|
||||
emit remoteOutput(QString::fromUtf8(output.data()));
|
||||
if (!done)
|
||||
@@ -150,7 +151,7 @@ MaemoSftpConnection::MaemoSftpConnection(const MaemoDeviceConfig &devConf)
|
||||
: MaemoSshConnection(devConf, false),
|
||||
sftp(new Ne7SftpSubsystem)
|
||||
{
|
||||
if (!ssh.initSftp(*sftp, channel()) || !sftp->setTimeout(devConf.timeout))
|
||||
if (!ssh->initSftp(*sftp, channel()) || !sftp->setTimeout(devConf.timeout))
|
||||
throw MaemoSshException(tr("Error setting up SFTP subsystem: %1")
|
||||
.arg(lastError()));
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <QtCore/QSharedPointer>
|
||||
#include <QtCore/QString>
|
||||
|
||||
class ne7ssh;
|
||||
class Ne7SftpSubsystem;
|
||||
|
||||
namespace Qt4ProjectManager {
|
||||
@@ -79,6 +80,7 @@ protected:
|
||||
bool stopRequested() const {return m_stopRequested; }
|
||||
const char *lastError();
|
||||
|
||||
QSharedPointer<ne7ssh> ssh;
|
||||
private:
|
||||
int m_channel;
|
||||
volatile bool m_stopRequested;
|
||||
|
||||
81
src/plugins/qt4projectmanager/qt-maemo/ne7sshobject.cpp
Normal file
81
src/plugins/qt4projectmanager/qt-maemo/ne7sshobject.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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 Qt Creator.
|
||||
**
|
||||
** $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 "ne7sshobject.h"
|
||||
|
||||
#include <QtCore/QMutexLocker>
|
||||
|
||||
#include <ne7ssh.h>
|
||||
|
||||
namespace Qt4ProjectManager {
|
||||
namespace Internal {
|
||||
|
||||
Ne7SshObject *Ne7SshObject::instance()
|
||||
{
|
||||
if (!m_instance)
|
||||
m_instance = new Ne7SshObject;
|
||||
return m_instance;
|
||||
}
|
||||
|
||||
void Ne7SshObject::removeInstance()
|
||||
{
|
||||
delete m_instance;
|
||||
}
|
||||
|
||||
QSharedPointer<ne7ssh> Ne7SshObject::get()
|
||||
{
|
||||
QMutexLocker locker(&m_mutex);
|
||||
QSharedPointer<ne7ssh> shared = m_weakRef.toStrongRef();
|
||||
if (!shared) {
|
||||
shared = QSharedPointer<ne7ssh>(new ne7ssh);
|
||||
m_weakRef = shared;
|
||||
}
|
||||
return shared;
|
||||
}
|
||||
|
||||
Ne7SshObject::Ne7SshObject()
|
||||
{
|
||||
}
|
||||
|
||||
Ne7SshObject *Ne7SshObject::m_instance = 0;
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Qt4ProjectManager
|
||||
76
src/plugins/qt4projectmanager/qt-maemo/ne7sshobject.h
Normal file
76
src/plugins/qt4projectmanager/qt-maemo/ne7sshobject.h
Normal file
@@ -0,0 +1,76 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** 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 Qt Creator.
|
||||
**
|
||||
** $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 NE7SSHOBJECT_H
|
||||
#define NE7SSHOBJECT_H
|
||||
|
||||
#include <QtCore/QMutex>
|
||||
#include <QtCore/QSharedPointer>
|
||||
#include <QtCore/QWeakPointer>
|
||||
|
||||
class ne7ssh;
|
||||
|
||||
namespace Qt4ProjectManager {
|
||||
namespace Internal {
|
||||
|
||||
class Ne7SshObject
|
||||
{
|
||||
public:
|
||||
static Ne7SshObject *instance();
|
||||
static void removeInstance();
|
||||
|
||||
QSharedPointer<ne7ssh> get();
|
||||
|
||||
private:
|
||||
Ne7SshObject();
|
||||
Ne7SshObject(const Ne7SshObject &);
|
||||
Ne7SshObject &operator=(const Ne7SshObject &);
|
||||
|
||||
static Ne7SshObject *m_instance;
|
||||
|
||||
QWeakPointer<ne7ssh> m_weakRef;
|
||||
QMutex m_mutex;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Qt4ProjectManager
|
||||
|
||||
#endif // NE7SSHOBJECT_H
|
||||
@@ -18,7 +18,8 @@ HEADERS += \
|
||||
$$PWD/maemosshthread.h \
|
||||
$$PWD/maemotoolchain.h \
|
||||
$$PWD/maemopackagecreationstep.h \
|
||||
$$PWD/maemopackagecreationfactory.h
|
||||
$$PWD/maemopackagecreationfactory.h \
|
||||
$$PWD/ne7sshobject.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/maemoconfigtestdialog.cpp \
|
||||
@@ -35,7 +36,8 @@ SOURCES += \
|
||||
$$PWD/maemosshthread.cpp \
|
||||
$$PWD/maemotoolchain.cpp \
|
||||
$$PWD/maemopackagecreationstep.cpp \
|
||||
$$PWD/maemopackagecreationfactory.cpp
|
||||
$$PWD/maemopackagecreationfactory.cpp \
|
||||
$$PWD/ne7sshobject.cpp
|
||||
|
||||
FORMS += \
|
||||
$$PWD/maemoconfigtestdialog.ui \
|
||||
|
||||
Reference in New Issue
Block a user