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 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(),
|
||||
if (!ssh.send((command + QLatin1String("\n")).toLatin1().data(),
|
||||
channel())) {
|
||||
throw MaemoSshException(tr("Error running command: %1").arg(lastError()));
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user