Skip to content
Snippets Groups Projects
Commit 4dda4853 authored by ck's avatar ck
Browse files

Maemo: Use on-demand shared Net7 object.

Task-number: QTCREATORBUG-1073
parent a62e5331
No related branches found
No related tags found
No related merge requests found
...@@ -37,6 +37,7 @@ ...@@ -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() ...@@ -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() ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 { ...@@ -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, ...@@ -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, ...@@ -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 ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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: ...@@ -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;
......
/****************************************************************************
**
** 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
/****************************************************************************
**
** 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 += \ ...@@ -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 += \ ...@@ -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 \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment