Commit 31ed0248 authored by kh1's avatar kh1
Browse files

Revert 1eafca20.

Fixes a crash introduced with the mentioned revision, since one can only
have a single instance of the ne7ssh object. Poroper fix follows next.

Reviewed-by: ck
parent 88a1db17
......@@ -55,6 +55,8 @@
namespace Qt4ProjectManager {
namespace Internal {
namespace {
ne7ssh ssh;
char *alloc(size_t n)
{
return new char[n];
......@@ -65,7 +67,7 @@ namespace {
MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
bool shell)
: ssh(new ne7ssh), m_channel(-1), m_stopRequested(false)
: m_channel(-1), m_stopRequested(false)
{
const QString *authString;
int (ne7ssh::*connFunc)(const char *, int, const char *, const char *, bool, int);
......@@ -76,8 +78,7 @@ MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
authString = &devConf.keyFile;
connFunc = &ne7ssh::connectWithKey;
}
m_channel = (ssh.data()->*connFunc)(devConf.host.toLatin1(), devConf.sshPort,
m_channel = (ssh.*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"));
......@@ -86,12 +87,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()
......@@ -103,31 +104,35 @@ MaemoInteractiveSshConnection::MaemoInteractiveSshConnection(const MaemoDeviceCo
: MaemoSshConnection(devConf, true), m_prompt(0)
{
m_prompt = devConf.uname == QLatin1String("root") ? "# " : "$ ";
if (!ssh->waitFor(channel(), m_prompt, devConf.timeout))
throw MaemoSshException(tr("Could not start remote shell: %1").arg(lastError()));
if (!ssh.waitFor(channel(), m_prompt, devConf.timeout)) {
const QString error
= tr("Could not start remote shell: %1").arg(lastError());
throw MaemoSshException(error);
}
}
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(),
channel())) {
throw MaemoSshException(tr("Error running command: %1").arg(lastError()));
if (!ssh.send((command + QLatin1String("\n")).toLatin1().data(),
channel())) {
throw MaemoSshException(tr("Error running command: %1")
.arg(lastError()));
}
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)
......@@ -145,10 +150,9 @@ 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()));
}
}
MaemoSftpConnection::~MaemoSftpConnection()
......
......@@ -47,7 +47,6 @@
#include <QtCore/QSharedPointer>
#include <QtCore/QString>
class ne7ssh;
class Ne7SftpSubsystem;
namespace Qt4ProjectManager {
......@@ -80,8 +79,6 @@ protected:
bool stopRequested() const {return m_stopRequested; }
const char *lastError();
QScopedPointer<ne7ssh> ssh;
private:
int m_channel;
volatile bool m_stopRequested;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment