Maemo: Use on-demand shared Net7 object.

Task-number: QTCREATORBUG-1073
This commit is contained in:
ck
2010-04-07 17:33:49 +02:00
parent a62e533123
commit 4dda485353
6 changed files with 181 additions and 15 deletions

View File

@@ -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()));
}