diff options
Diffstat (limited to 'src/libs/ssh')
-rw-r--r-- | src/libs/ssh/CMakeLists.txt | 22 | ||||
-rw-r--r-- | src/libs/ssh/images/dir.png | bin | 862 -> 0 bytes | |||
-rw-r--r-- | src/libs/ssh/images/unknownfile.png | bin | 345 -> 0 bytes | |||
-rw-r--r-- | src/libs/ssh/sftpfilesystemmodel.cpp | 5 | ||||
-rw-r--r-- | src/libs/ssh/sftpsession.cpp | 9 | ||||
-rw-r--r-- | src/libs/ssh/sftptransfer.cpp | 2 | ||||
-rw-r--r-- | src/libs/ssh/ssh.qrc | 2 | ||||
-rw-r--r-- | src/libs/ssh/sshconnection.cpp | 8 | ||||
-rw-r--r-- | src/libs/ssh/sshconnection.h | 2 | ||||
-rw-r--r-- | src/libs/ssh/sshremoteprocess.cpp | 10 | ||||
-rw-r--r-- | src/libs/ssh/sshremoteprocess.h | 6 | ||||
-rw-r--r-- | src/libs/ssh/sshremoteprocessrunner.cpp | 11 | ||||
-rw-r--r-- | src/libs/ssh/sshremoteprocessrunner.h | 8 | ||||
-rw-r--r-- | src/libs/ssh/sshsettings.cpp | 48 | ||||
-rw-r--r-- | src/libs/ssh/sshsettings.h | 18 |
15 files changed, 86 insertions, 65 deletions
diff --git a/src/libs/ssh/CMakeLists.txt b/src/libs/ssh/CMakeLists.txt new file mode 100644 index 00000000000..6f5d1cb7642 --- /dev/null +++ b/src/libs/ssh/CMakeLists.txt @@ -0,0 +1,22 @@ +add_qtc_library(QtcSsh + DEPENDS Qt5::Core Qt5::Network Qt5::Widgets Utils + SOURCES + sftpdefs.cpp sftpdefs.h + sftpfilesystemmodel.cpp sftpfilesystemmodel.h + sftpsession.cpp sftpsession.h + sftptransfer.cpp sftptransfer.h + ssh.qrc + ssh_global.h + sshconnection.cpp sshconnection.h + sshconnectionmanager.cpp sshconnectionmanager.h + sshkeycreationdialog.cpp sshkeycreationdialog.h sshkeycreationdialog.ui + sshlogging.cpp sshlogging_p.h + sshprocess.cpp sshprocess.h + sshconnection.cpp sshconnection.h + sshconnectionmanager.cpp sshconnectionmanager.h + sshkeycreationdialog.cpp sshkeycreationdialog.h sshkeycreationdialog.ui + sshlogging.cpp sshlogging_p.h + sshremoteprocess.cpp sshremoteprocess.h + sshremoteprocessrunner.cpp sshremoteprocessrunner.h + sshsettings.cpp sshsettings.h +) diff --git a/src/libs/ssh/images/dir.png b/src/libs/ssh/images/dir.png Binary files differdeleted file mode 100644 index 57cec6bcd31..00000000000 --- a/src/libs/ssh/images/dir.png +++ /dev/null diff --git a/src/libs/ssh/images/unknownfile.png b/src/libs/ssh/images/unknownfile.png Binary files differdeleted file mode 100644 index 88f77592d1f..00000000000 --- a/src/libs/ssh/images/unknownfile.png +++ /dev/null diff --git a/src/libs/ssh/sftpfilesystemmodel.cpp b/src/libs/ssh/sftpfilesystemmodel.cpp index 555796b812e..0e9eb48e5e4 100644 --- a/src/libs/ssh/sftpfilesystemmodel.cpp +++ b/src/libs/ssh/sftpfilesystemmodel.cpp @@ -30,6 +30,7 @@ #include "sshconnectionmanager.h" #include <utils/qtcassert.h> +#include <utils/utilsicons.h> #include <QFileInfo> #include <QHash> @@ -167,9 +168,9 @@ QVariant SftpFileSystemModel::data(const QModelIndex &index, int role) const switch (node->fileInfo.type) { case FileTypeRegular: case FileTypeOther: - return QIcon(":/ssh/images/unknownfile.png"); + return Utils::Icons::UNKNOWN_FILE.icon(); case FileTypeDirectory: - return QIcon(":/ssh/images/dir.png"); + return Utils::Icons::DIR.icon(); case FileTypeUnknown: return QIcon(":/ssh/images/help.png"); // Shows a question mark. } diff --git a/src/libs/ssh/sftpsession.cpp b/src/libs/ssh/sftpsession.cpp index 0119bea2660..528475ed2b9 100644 --- a/src/libs/ssh/sftpsession.cpp +++ b/src/libs/ssh/sftpsession.cpp @@ -83,6 +83,8 @@ struct SftpSession::SftpSessionPrivate SftpJobId queueCommand(CommandType command, const QStringList &paths) { + qCDebug(sshLog) << "queueing command" << int(command) << paths; + const SftpJobId jobId = nextJobId++; pendingCommands.enqueue(Command(command, paths, jobId)); runNextCommand(); @@ -111,6 +113,7 @@ SftpSession::SftpSession(const QStringList &connectionArgs) : d(new SftpSessionP { d->connectionArgs = connectionArgs; connect(&d->sftpProc, &QProcess::started, [this] { + qCDebug(sshLog) << "sftp process started"; d->sftpProc.write("\n"); // Force initial prompt. }); connect(&d->sftpProc, &QProcess::errorOccurred, [this](QProcess::ProcessError error) { @@ -120,6 +123,8 @@ SftpSession::SftpSession(const QStringList &connectionArgs) : d(new SftpSessionP } }); connect(&d->sftpProc, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), [this] { + qCDebug(sshLog) << "sftp process finished"; + d->state = State::Inactive; if (d->sftpProc.exitStatus() != QProcess::NormalExit) { emit done(tr("sftp crashed.")); @@ -138,7 +143,7 @@ void SftpSession::doStart() { if (d->state != State::Starting) return; - const FileName sftpBinary = SshSettings::sftpFilePath(); + const FilePath sftpBinary = SshSettings::sftpFilePath(); if (!sftpBinary.exists()) { d->state = State::Inactive; emit done(tr("Cannot establish SFTP session: sftp binary \"%1\" does not exist.") @@ -269,6 +274,8 @@ void SftpSession::start() void SftpSession::quit() { + qCDebug(sshLog) << "quitting sftp session, current state is" << int(state()); + switch (state()) { case State::Starting: case State::Closing: diff --git a/src/libs/ssh/sftptransfer.cpp b/src/libs/ssh/sftptransfer.cpp index 887d8f36fa0..52b821bc392 100644 --- a/src/libs/ssh/sftptransfer.cpp +++ b/src/libs/ssh/sftptransfer.cpp @@ -132,7 +132,7 @@ SftpTransfer::SftpTransfer(const FilesToTransfer &files, Internal::FileTransferT void SftpTransfer::doStart() { - const FileName sftpBinary = SshSettings::sftpFilePath(); + const FilePath sftpBinary = SshSettings::sftpFilePath(); if (!sftpBinary.exists()) { emitError(tr("sftp binary \"%1\" does not exist.").arg(sftpBinary.toUserOutput())); return; diff --git a/src/libs/ssh/ssh.qrc b/src/libs/ssh/ssh.qrc index 4b0c6a8c51c..9801217093e 100644 --- a/src/libs/ssh/ssh.qrc +++ b/src/libs/ssh/ssh.qrc @@ -1,7 +1,5 @@ <RCC> <qresource prefix="/ssh"> - <file>images/dir.png</file> <file>images/help.png</file> - <file>images/unknownfile.png</file> </qresource> </RCC> diff --git a/src/libs/ssh/sshconnection.cpp b/src/libs/ssh/sshconnection.cpp index 91d8446db97..b368ccc8efe 100644 --- a/src/libs/ssh/sshconnection.cpp +++ b/src/libs/ssh/sshconnection.cpp @@ -231,7 +231,7 @@ void SshConnection::disconnectFromHost() case Connecting: case Connected: if (!d->sharingEnabled) { - emitDisconnected(); + QTimer::singleShot(0, this, &SshConnection::emitDisconnected); return; } d->state = Disconnecting; @@ -309,7 +309,7 @@ SshConnection::~SshConnection() delete d; } -SshRemoteProcessPtr SshConnection::createRemoteProcess(const QByteArray &command) +SshRemoteProcessPtr SshConnection::createRemoteProcess(const QString &command) { QTC_ASSERT(state() == Connected, return SshRemoteProcessPtr()); return SshRemoteProcessPtr(new SshRemoteProcess(command, d->connectionArgs())); @@ -317,7 +317,7 @@ SshRemoteProcessPtr SshConnection::createRemoteProcess(const QByteArray &command SshRemoteProcessPtr SshConnection::createRemoteShell() { - return createRemoteProcess(QByteArray()); + return createRemoteProcess({}); } SftpTransferPtr SshConnection::createUpload(const FilesToTransfer &files, @@ -342,7 +342,7 @@ void SshConnection::doConnectToHost() { if (d->state != Connecting) return; - const FileName sshBinary = SshSettings::sshFilePath(); + const FilePath sshBinary = SshSettings::sshFilePath(); if (!sshBinary.exists()) { emitError(tr("Cannot establish SSH connection: ssh binary \"%1\" does not exist.") .arg(sshBinary.toUserOutput())); diff --git a/src/libs/ssh/sshconnection.h b/src/libs/ssh/sshconnection.h index 1b5775682e9..89af4d71d9d 100644 --- a/src/libs/ssh/sshconnection.h +++ b/src/libs/ssh/sshconnection.h @@ -111,7 +111,7 @@ public: bool sharingEnabled() const; ~SshConnection(); - SshRemoteProcessPtr createRemoteProcess(const QByteArray &command); + SshRemoteProcessPtr createRemoteProcess(const QString &command); SshRemoteProcessPtr createRemoteShell(); SftpTransferPtr createUpload(const FilesToTransfer &files, FileTransferErrorHandling errorHandlingMode); diff --git a/src/libs/ssh/sshremoteprocess.cpp b/src/libs/ssh/sshremoteprocess.cpp index 4bd09b37e1f..635f23e1503 100644 --- a/src/libs/ssh/sshremoteprocess.cpp +++ b/src/libs/ssh/sshremoteprocess.cpp @@ -54,21 +54,19 @@ using namespace Internal; struct SshRemoteProcess::SshRemoteProcessPrivate { - QByteArray remoteCommand; + QString remoteCommand; QStringList connectionArgs; QString displayName; bool useTerminal = false; }; -SshRemoteProcess::SshRemoteProcess(const QByteArray &command, const QStringList &connectionArgs) +SshRemoteProcess::SshRemoteProcess(const QString &command, const QStringList &connectionArgs) : d(new SshRemoteProcessPrivate) { d->remoteCommand = command; d->connectionArgs = connectionArgs; - connect(this, - static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), - [this] { + connect(this, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, [this] { QString error; if (exitStatus() == QProcess::CrashExit) error = tr("The ssh process crashed: %1").arg(errorString()); @@ -129,7 +127,7 @@ QStringList SshRemoteProcess::fullLocalCommandLine() const if (!d->displayName.isEmpty()) args.prepend("-X"); if (!d->remoteCommand.isEmpty()) - args << QLatin1String(d->remoteCommand); + args << d->remoteCommand; args.prepend(SshSettings::sshFilePath().toString()); return args; } diff --git a/src/libs/ssh/sshremoteprocess.h b/src/libs/ssh/sshremoteprocess.h index 82dd1b9dcbe..02ab3546fdc 100644 --- a/src/libs/ssh/sshremoteprocess.h +++ b/src/libs/ssh/sshremoteprocess.h @@ -30,10 +30,6 @@ #include <QStringList> -QT_BEGIN_NAMESPACE -class QByteArray; -QT_END_NAMESPACE - namespace QSsh { class SshConnection; @@ -56,7 +52,7 @@ signals: void done(const QString &error); private: - SshRemoteProcess(const QByteArray &command, const QStringList &connectionArgs); + SshRemoteProcess(const QString &command, const QStringList &connectionArgs); void doStart(); struct SshRemoteProcessPrivate; diff --git a/src/libs/ssh/sshremoteprocessrunner.cpp b/src/libs/ssh/sshremoteprocessrunner.cpp index 11b75f6a254..7a062e6ab86 100644 --- a/src/libs/ssh/sshremoteprocessrunner.cpp +++ b/src/libs/ssh/sshremoteprocessrunner.cpp @@ -50,7 +50,7 @@ public: SshRemoteProcessPtr m_process; SshConnection *m_connection; bool m_runInTerminal; - QByteArray m_command; + QString m_command; QString m_lastConnectionErrorString; QProcess::ExitStatus m_exitStatus; QByteArray m_stdout; @@ -76,8 +76,7 @@ SshRemoteProcessRunner::~SshRemoteProcessRunner() delete d; } -void SshRemoteProcessRunner::run(const QByteArray &command, - const SshConnectionParameters &sshParams) +void SshRemoteProcessRunner::run(const QString &command, const SshConnectionParameters &sshParams) { QTC_ASSERT(d->m_state == Inactive, return); @@ -85,14 +84,14 @@ void SshRemoteProcessRunner::run(const QByteArray &command, runInternal(command, sshParams); } -void SshRemoteProcessRunner::runInTerminal(const QByteArray &command, +void SshRemoteProcessRunner::runInTerminal(const QString &command, const SshConnectionParameters &sshParams) { d->m_runInTerminal = true; runInternal(command, sshParams); } -void SshRemoteProcessRunner::runInternal(const QByteArray &command, +void SshRemoteProcessRunner::runInternal(const QString &command, const SshConnectionParameters &sshParams) { setState(Connecting); @@ -197,7 +196,7 @@ void SshRemoteProcessRunner::setState(int newState) } } -QByteArray SshRemoteProcessRunner::command() const { return d->m_command; } +QString SshRemoteProcessRunner::command() const { return d->m_command; } QString SshRemoteProcessRunner::lastConnectionErrorString() const { return d->m_lastConnectionErrorString; } diff --git a/src/libs/ssh/sshremoteprocessrunner.h b/src/libs/ssh/sshremoteprocessrunner.h index 029fb6bb3df..082f30ed57f 100644 --- a/src/libs/ssh/sshremoteprocessrunner.h +++ b/src/libs/ssh/sshremoteprocessrunner.h @@ -39,9 +39,9 @@ public: SshRemoteProcessRunner(QObject *parent = 0); ~SshRemoteProcessRunner(); - void run(const QByteArray &command, const SshConnectionParameters &sshParams); - void runInTerminal(const QByteArray &command, const SshConnectionParameters &sshParams); - QByteArray command() const; + void run(const QString &command, const SshConnectionParameters &sshParams); + void runInTerminal(const QString &command, const SshConnectionParameters &sshParams); + QString command() const; QString lastConnectionErrorString() const; @@ -69,7 +69,7 @@ private: void handleProcessFinished(const QString &error); void handleStdout(); void handleStderr(); - void runInternal(const QByteArray &command, const QSsh::SshConnectionParameters &sshParams); + void runInternal(const QString &command, const QSsh::SshConnectionParameters &sshParams); void setState(int newState); Internal::SshRemoteProcessRunnerPrivate * const d; diff --git a/src/libs/ssh/sshsettings.cpp b/src/libs/ssh/sshsettings.cpp index 12f17bbade1..0086d053764 100644 --- a/src/libs/ssh/sshsettings.cpp +++ b/src/libs/ssh/sshsettings.cpp @@ -39,11 +39,11 @@ struct SshSettings { bool useConnectionSharing = !HostOsInfo::isWindowsHost(); int connectionSharingTimeOutInMinutes = 10; - FileName sshFilePath; - FileName sftpFilePath; - FileName askpassFilePath; - FileName keygenFilePath; - QSsh::SshSettings::SearchPathRetriever searchPathRetriever = [] { return FileNameList(); }; + FilePath sshFilePath; + FilePath sftpFilePath; + FilePath askpassFilePath; + FilePath keygenFilePath; + QSsh::SshSettings::SearchPathRetriever searchPathRetriever = [] { return FilePathList(); }; }; } // namespace Internal @@ -79,11 +79,11 @@ void SshSettings::loadSettings(QSettings *settings) value = settings->value(connectionSharingTimeoutKey()); if (value.isValid()) sshSettings->connectionSharingTimeOutInMinutes = value.toInt(); - sshSettings->sshFilePath = FileName::fromString(settings->value(sshFilePathKey()).toString()); - sshSettings->sftpFilePath = FileName::fromString(settings->value(sftpFilePathKey()).toString()); - sshSettings->askpassFilePath = FileName::fromString( + sshSettings->sshFilePath = FilePath::fromString(settings->value(sshFilePathKey()).toString()); + sshSettings->sftpFilePath = FilePath::fromString(settings->value(sftpFilePathKey()).toString()); + sshSettings->askpassFilePath = FilePath::fromString( settings->value(askPassFilePathKey()).toString()); - sshSettings->keygenFilePath = FileName::fromString( + sshSettings->keygenFilePath = FilePath::fromString( settings->value(keygenFilePathKey()).toString()); } @@ -114,51 +114,51 @@ int SshSettings::connectionSharingTimeout() return sshSettings->connectionSharingTimeOutInMinutes; } -static FileName filePathValue(const FileName &value, const QStringList &candidateFileNames) +static FilePath filePathValue(const FilePath &value, const QStringList &candidateFileNames) { if (!value.isEmpty()) return value; - const QList<FileName> additionalSearchPaths = sshSettings->searchPathRetriever(); + const QList<FilePath> additionalSearchPaths = sshSettings->searchPathRetriever(); for (const QString &candidate : candidateFileNames) { - const FileName filePath = Environment::systemEnvironment() + const FilePath filePath = Environment::systemEnvironment() .searchInPath(candidate, additionalSearchPaths); if (!filePath.isEmpty()) return filePath; } - return FileName(); + return FilePath(); } -static FileName filePathValue(const FileName &value, const QString &candidateFileName) +static FilePath filePathValue(const FilePath &value, const QString &candidateFileName) { return filePathValue(value, QStringList(candidateFileName)); } -void SshSettings::setSshFilePath(const FileName &ssh) { sshSettings->sshFilePath = ssh; } -FileName SshSettings::sshFilePath() { return filePathValue(sshSettings->sshFilePath, "ssh"); } +void SshSettings::setSshFilePath(const FilePath &ssh) { sshSettings->sshFilePath = ssh; } +FilePath SshSettings::sshFilePath() { return filePathValue(sshSettings->sshFilePath, "ssh"); } -void SshSettings::setSftpFilePath(const FileName &sftp) { sshSettings->sftpFilePath = sftp; } -FileName SshSettings::sftpFilePath() { return filePathValue(sshSettings->sftpFilePath, "sftp"); } +void SshSettings::setSftpFilePath(const FilePath &sftp) { sshSettings->sftpFilePath = sftp; } +FilePath SshSettings::sftpFilePath() { return filePathValue(sshSettings->sftpFilePath, "sftp"); } -void SshSettings::setAskpassFilePath(const FileName &askPass) +void SshSettings::setAskpassFilePath(const FilePath &askPass) { sshSettings->askpassFilePath = askPass; } -FileName SshSettings::askpassFilePath() +FilePath SshSettings::askpassFilePath() { - FileName candidate; + FilePath candidate; candidate = sshSettings->askpassFilePath; if (candidate.isEmpty()) - candidate = FileName::fromString(Environment::systemEnvironment().value("SSH_ASKPASS")); + candidate = FilePath::fromString(Environment::systemEnvironment().value("SSH_ASKPASS")); return filePathValue(candidate, QStringList{"qtc-askpass", "ssh-askpass"}); } -void SshSettings::setKeygenFilePath(const FileName &keygen) +void SshSettings::setKeygenFilePath(const FilePath &keygen) { sshSettings->keygenFilePath = keygen; } -FileName SshSettings::keygenFilePath() +FilePath SshSettings::keygenFilePath() { return filePathValue(sshSettings->keygenFilePath, "ssh-keygen"); } diff --git a/src/libs/ssh/sshsettings.h b/src/libs/ssh/sshsettings.h index dc29ead6065..08692b6e8c1 100644 --- a/src/libs/ssh/sshsettings.h +++ b/src/libs/ssh/sshsettings.h @@ -49,19 +49,19 @@ public: static void setConnectionSharingTimeout(int timeInMinutes); static int connectionSharingTimeout(); - static void setSshFilePath(const Utils::FileName &ssh); - static Utils::FileName sshFilePath(); + static void setSshFilePath(const Utils::FilePath &ssh); + static Utils::FilePath sshFilePath(); - static void setSftpFilePath(const Utils::FileName &sftp); - static Utils::FileName sftpFilePath(); + static void setSftpFilePath(const Utils::FilePath &sftp); + static Utils::FilePath sftpFilePath(); - static void setAskpassFilePath(const Utils::FileName &askPass); - static Utils::FileName askpassFilePath(); + static void setAskpassFilePath(const Utils::FilePath &askPass); + static Utils::FilePath askpassFilePath(); - static void setKeygenFilePath(const Utils::FileName &keygen); - static Utils::FileName keygenFilePath(); + static void setKeygenFilePath(const Utils::FilePath &keygen); + static Utils::FilePath keygenFilePath(); - using SearchPathRetriever = std::function<Utils::FileNameList()>; + using SearchPathRetriever = std::function<Utils::FilePathList()>; static void setExtraSearchPathRetriever(const SearchPathRetriever &pathRetriever); }; |