forked from qt-creator/qt-creator
Revert 1eafca2011.
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
This commit is contained in:
@@ -55,6 +55,8 @@
|
|||||||
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];
|
||||||
@@ -65,7 +67,7 @@ namespace {
|
|||||||
|
|
||||||
MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
|
MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf,
|
||||||
bool shell)
|
bool shell)
|
||||||
: ssh(new ne7ssh), m_channel(-1), m_stopRequested(false)
|
: 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);
|
||||||
@@ -76,8 +78,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"));
|
||||||
@@ -86,12 +87,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()
|
||||||
@@ -103,31 +104,35 @@ 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)) {
|
||||||
throw MaemoSshException(tr("Could not start remote shell: %1").arg(lastError()));
|
const QString error
|
||||||
|
= tr("Could not start remote shell: %1").arg(lastError());
|
||||||
|
throw MaemoSshException(error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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").arg(lastError()));
|
throw MaemoSshException(tr("Error running command: %1")
|
||||||
|
.arg(lastError()));
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
@@ -145,10 +150,9 @@ 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()));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MaemoSftpConnection::~MaemoSftpConnection()
|
MaemoSftpConnection::~MaemoSftpConnection()
|
||||||
|
|||||||
@@ -47,7 +47,6 @@
|
|||||||
#include <QtCore/QSharedPointer>
|
#include <QtCore/QSharedPointer>
|
||||||
#include <QtCore/QString>
|
#include <QtCore/QString>
|
||||||
|
|
||||||
class ne7ssh;
|
|
||||||
class Ne7SftpSubsystem;
|
class Ne7SftpSubsystem;
|
||||||
|
|
||||||
namespace Qt4ProjectManager {
|
namespace Qt4ProjectManager {
|
||||||
@@ -80,8 +79,6 @@ protected:
|
|||||||
bool stopRequested() const {return m_stopRequested; }
|
bool stopRequested() const {return m_stopRequested; }
|
||||||
const char *lastError();
|
const char *lastError();
|
||||||
|
|
||||||
QScopedPointer<ne7ssh> ssh;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_channel;
|
int m_channel;
|
||||||
volatile bool m_stopRequested;
|
volatile bool m_stopRequested;
|
||||||
|
|||||||
Reference in New Issue
Block a user