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 "maemosettingspage.h"
|
||||||
#include "maemotoolchain.h"
|
#include "maemotoolchain.h"
|
||||||
#include "maemorunconfiguration.h"
|
#include "maemorunconfiguration.h"
|
||||||
|
#include "ne7sshobject.h"
|
||||||
|
|
||||||
#include <coreplugin/actionmanager/actionmanager.h>
|
#include <coreplugin/actionmanager/actionmanager.h>
|
||||||
#include <coreplugin/coreconstants.h>
|
#include <coreplugin/coreconstants.h>
|
||||||
@@ -85,6 +86,8 @@ MaemoManager::MaemoManager()
|
|||||||
pluginManager->addObject(m_packageCreationFactory);
|
pluginManager->addObject(m_packageCreationFactory);
|
||||||
pluginManager->addObject(m_settingsPage);
|
pluginManager->addObject(m_settingsPage);
|
||||||
pluginManager->addObject(m_gdbSettingsPage);
|
pluginManager->addObject(m_gdbSettingsPage);
|
||||||
|
|
||||||
|
Ne7SshObject::instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
MaemoManager::~MaemoManager()
|
MaemoManager::~MaemoManager()
|
||||||
@@ -97,6 +100,7 @@ MaemoManager::~MaemoManager()
|
|||||||
pluginManager->removeObject(m_settingsPage);
|
pluginManager->removeObject(m_settingsPage);
|
||||||
pluginManager->removeObject(m_gdbSettingsPage);
|
pluginManager->removeObject(m_gdbSettingsPage);
|
||||||
|
|
||||||
|
Ne7SshObject::removeInstance();
|
||||||
m_instance = 0;
|
m_instance = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
#include "maemosshconnection.h"
|
#include "maemosshconnection.h"
|
||||||
|
|
||||||
#include "maemodeviceconfigurations.h"
|
#include "maemodeviceconfigurations.h"
|
||||||
|
#include "ne7sshobject.h"
|
||||||
|
|
||||||
#include <ne7ssh.h>
|
#include <ne7ssh.h>
|
||||||
|
|
||||||
@@ -55,8 +56,6 @@
|
|||||||
namespace Qt4ProjectManager {
|
namespace Qt4ProjectManager {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
namespace {
|
namespace {
|
||||||
ne7ssh ssh;
|
|
||||||
|
|
||||||
char *alloc(size_t n)
|
char *alloc(size_t n)
|
||||||
{
|
{
|
||||||
return new char[n];
|
return new char[n];
|
||||||
@@ -67,7 +66,9 @@ namespace {
|
|||||||
|
|
||||||
MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
|
MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
|
||||||
bool shell)
|
bool shell)
|
||||||
: m_channel(-1), m_stopRequested(false)
|
: ssh(Ne7SshObject::instance()->get()),
|
||||||
|
m_channel(-1),
|
||||||
|
m_stopRequested(false)
|
||||||
{
|
{
|
||||||
const QString *authString;
|
const QString *authString;
|
||||||
int (ne7ssh::*connFunc)(const char *, int, const char *, const char *, bool, int);
|
int (ne7ssh::*connFunc)(const char *, int, const char *, const char *, bool, int);
|
||||||
@@ -78,7 +79,7 @@ MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
|
|||||||
authString = &devConf.keyFile;
|
authString = &devConf.keyFile;
|
||||||
connFunc = &ne7ssh::connectWithKey;
|
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);
|
devConf.uname.toAscii(), authString->toLatin1(), shell, devConf.timeout);
|
||||||
if (m_channel == -1)
|
if (m_channel == -1)
|
||||||
throw MaemoSshException(tr("Could not connect to host"));
|
throw MaemoSshException(tr("Could not connect to host"));
|
||||||
@@ -87,12 +88,12 @@ MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
|
|||||||
MaemoSshConnection::~MaemoSshConnection()
|
MaemoSshConnection::~MaemoSshConnection()
|
||||||
{
|
{
|
||||||
qDebug("%s", Q_FUNC_INFO);
|
qDebug("%s", Q_FUNC_INFO);
|
||||||
ssh.close(m_channel);
|
ssh->close(m_channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *MaemoSshConnection::lastError()
|
const char *MaemoSshConnection::lastError()
|
||||||
{
|
{
|
||||||
return ssh.errors()->pop(channel());
|
return ssh->errors()->pop(channel());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaemoSshConnection::stop()
|
void MaemoSshConnection::stop()
|
||||||
@@ -104,7 +105,7 @@ MaemoInteractiveSshConnection::MaemoInteractiveSshConnection(const MaemoDeviceCo
|
|||||||
: MaemoSshConnection(devConf, true), m_prompt(0)
|
: MaemoSshConnection(devConf, true), m_prompt(0)
|
||||||
{
|
{
|
||||||
m_prompt = devConf.uname == QLatin1String("root") ? "# " : "$ ";
|
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
|
const QString error
|
||||||
= tr("Could not start remote shell: %1").arg(lastError());
|
= tr("Could not start remote shell: %1").arg(lastError());
|
||||||
throw MaemoSshException(error);
|
throw MaemoSshException(error);
|
||||||
@@ -113,13 +114,13 @@ MaemoInteractiveSshConnection::MaemoInteractiveSshConnection(const MaemoDeviceCo
|
|||||||
|
|
||||||
MaemoInteractiveSshConnection::~MaemoInteractiveSshConnection()
|
MaemoInteractiveSshConnection::~MaemoInteractiveSshConnection()
|
||||||
{
|
{
|
||||||
ssh.send("exit\n", channel());
|
ssh->send("exit\n", channel());
|
||||||
ssh.waitFor(channel(), m_prompt, 1);
|
ssh->waitFor(channel(), m_prompt, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaemoInteractiveSshConnection::runCommand(const QString &command)
|
void MaemoInteractiveSshConnection::runCommand(const QString &command)
|
||||||
{
|
{
|
||||||
if (!ssh.send((command + QLatin1String("\n")).toLatin1().data(),
|
if (!ssh->send((command + QLatin1String("\n")).toLatin1().data(),
|
||||||
channel())) {
|
channel())) {
|
||||||
throw MaemoSshException(tr("Error running command: %1")
|
throw MaemoSshException(tr("Error running command: %1")
|
||||||
.arg(lastError()));
|
.arg(lastError()));
|
||||||
@@ -127,12 +128,12 @@ void MaemoInteractiveSshConnection::runCommand(const QString &command)
|
|||||||
|
|
||||||
bool done;
|
bool done;
|
||||||
do {
|
do {
|
||||||
done = ssh.waitFor(channel(), m_prompt, 1);
|
done = ssh->waitFor(channel(), m_prompt, 1);
|
||||||
const char * const error = lastError();
|
const char * const error = lastError();
|
||||||
if (error)
|
if (error)
|
||||||
throw MaemoSshException(tr("SSH error: %1").arg(error));
|
throw MaemoSshException(tr("SSH error: %1").arg(error));
|
||||||
QScopedPointer<char, QScopedPointerArrayDeleter<char> >
|
QScopedPointer<char, QScopedPointerArrayDeleter<char> >
|
||||||
output(ssh.readAndReset(channel(), alloc));
|
output(ssh->readAndReset(channel(), alloc));
|
||||||
if (output.data()) {
|
if (output.data()) {
|
||||||
emit remoteOutput(QString::fromUtf8(output.data()));
|
emit remoteOutput(QString::fromUtf8(output.data()));
|
||||||
if (!done)
|
if (!done)
|
||||||
@@ -150,7 +151,7 @@ MaemoSftpConnection::MaemoSftpConnection(const MaemoDeviceConfig &devConf)
|
|||||||
: MaemoSshConnection(devConf, false),
|
: MaemoSshConnection(devConf, false),
|
||||||
sftp(new Ne7SftpSubsystem)
|
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")
|
throw MaemoSshException(tr("Error setting up SFTP subsystem: %1")
|
||||||
.arg(lastError()));
|
.arg(lastError()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
#include <QtCore/QSharedPointer>
|
#include <QtCore/QSharedPointer>
|
||||||
#include <QtCore/QString>
|
#include <QtCore/QString>
|
||||||
|
|
||||||
|
class ne7ssh;
|
||||||
class Ne7SftpSubsystem;
|
class Ne7SftpSubsystem;
|
||||||
|
|
||||||
namespace Qt4ProjectManager {
|
namespace Qt4ProjectManager {
|
||||||
@@ -79,6 +80,7 @@ protected:
|
|||||||
bool stopRequested() const {return m_stopRequested; }
|
bool stopRequested() const {return m_stopRequested; }
|
||||||
const char *lastError();
|
const char *lastError();
|
||||||
|
|
||||||
|
QSharedPointer<ne7ssh> ssh;
|
||||||
private:
|
private:
|
||||||
int m_channel;
|
int m_channel;
|
||||||
volatile bool m_stopRequested;
|
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/maemosshthread.h \
|
||||||
$$PWD/maemotoolchain.h \
|
$$PWD/maemotoolchain.h \
|
||||||
$$PWD/maemopackagecreationstep.h \
|
$$PWD/maemopackagecreationstep.h \
|
||||||
$$PWD/maemopackagecreationfactory.h
|
$$PWD/maemopackagecreationfactory.h \
|
||||||
|
$$PWD/ne7sshobject.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$PWD/maemoconfigtestdialog.cpp \
|
$$PWD/maemoconfigtestdialog.cpp \
|
||||||
@@ -35,7 +36,8 @@ SOURCES += \
|
|||||||
$$PWD/maemosshthread.cpp \
|
$$PWD/maemosshthread.cpp \
|
||||||
$$PWD/maemotoolchain.cpp \
|
$$PWD/maemotoolchain.cpp \
|
||||||
$$PWD/maemopackagecreationstep.cpp \
|
$$PWD/maemopackagecreationstep.cpp \
|
||||||
$$PWD/maemopackagecreationfactory.cpp
|
$$PWD/maemopackagecreationfactory.cpp \
|
||||||
|
$$PWD/ne7sshobject.cpp
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
$$PWD/maemoconfigtestdialog.ui \
|
$$PWD/maemoconfigtestdialog.ui \
|
||||||
|
|||||||
Reference in New Issue
Block a user