aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/ssh
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/ssh')
-rw-r--r--src/libs/ssh/CMakeLists.txt22
-rw-r--r--src/libs/ssh/images/dir.pngbin862 -> 0 bytes
-rw-r--r--src/libs/ssh/images/unknownfile.pngbin345 -> 0 bytes
-rw-r--r--src/libs/ssh/sftpfilesystemmodel.cpp5
-rw-r--r--src/libs/ssh/sftpsession.cpp9
-rw-r--r--src/libs/ssh/sftptransfer.cpp2
-rw-r--r--src/libs/ssh/ssh.qrc2
-rw-r--r--src/libs/ssh/sshconnection.cpp8
-rw-r--r--src/libs/ssh/sshconnection.h2
-rw-r--r--src/libs/ssh/sshremoteprocess.cpp10
-rw-r--r--src/libs/ssh/sshremoteprocess.h6
-rw-r--r--src/libs/ssh/sshremoteprocessrunner.cpp11
-rw-r--r--src/libs/ssh/sshremoteprocessrunner.h8
-rw-r--r--src/libs/ssh/sshsettings.cpp48
-rw-r--r--src/libs/ssh/sshsettings.h18
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
deleted file mode 100644
index 57cec6bcd31..00000000000
--- a/src/libs/ssh/images/dir.png
+++ /dev/null
Binary files differ
diff --git a/src/libs/ssh/images/unknownfile.png b/src/libs/ssh/images/unknownfile.png
deleted file mode 100644
index 88f77592d1f..00000000000
--- a/src/libs/ssh/images/unknownfile.png
+++ /dev/null
Binary files differ
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);
};