diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.cpp index e12ad1b6acd0074ec9ea84d66e4c03e7cacb3660..e0013ffe244a3695c603b607de9f6fabc6101a90 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.cpp @@ -55,8 +55,6 @@ namespace Qt4ProjectManager { namespace Internal { namespace { - ne7ssh ssh; - char *alloc(size_t n) { return new char[n]; @@ -67,7 +65,7 @@ namespace { MaemoSshConnection::MaemoSshConnection(const MaemoDeviceConfig &devConf, bool shell) - : m_channel(-1), m_stopRequested(false) + : m_channel(-1), m_stopRequested(false), ssh(new ne7ssh) { const QString *authString; int (ne7ssh::*connFunc)(const char *, int, const char *, const char *, bool, int); @@ -78,7 +76,8 @@ 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 +86,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,35 +103,31 @@ MaemoInteractiveSshConnection::MaemoInteractiveSshConnection(const MaemoDeviceCo : MaemoSshConnection(devConf, true), m_prompt(0) { m_prompt = devConf.uname == QLatin1String("root") ? "# " : "$ "; - if (!ssh.waitFor(channel(), m_prompt, devConf.timeout)) { - const QString error - = tr("Could not start remote shell: %1").arg(lastError()); - throw MaemoSshException(error); - } + if (!ssh->waitFor(channel(), m_prompt, devConf.timeout)) + throw MaemoSshException(tr("Could not start remote shell: %1").arg(lastError())); } 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) @@ -150,14 +145,14 @@ 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())); + .arg(lastError())); + } } MaemoSftpConnection::~MaemoSftpConnection() { - } class FileManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.h b/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.h index ff13095b7bc805b9ea0a0d488b23cd043897a35b..c6119ec0e55c942eb57cd9cd121775c9404b8295 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshconnection.h @@ -47,6 +47,7 @@ #include <QtCore/QSharedPointer> #include <QtCore/QString> +class ne7ssh; class Ne7SftpSubsystem; namespace Qt4ProjectManager { @@ -79,6 +80,8 @@ protected: bool stopRequested() const {return m_stopRequested; } const char *lastError(); + QScopedPointer<ne7ssh> ssh; + private: int m_channel; volatile bool m_stopRequested;