diff options
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/ssh/sftpchannel.cpp | 26 | ||||
-rw-r--r-- | src/libs/ssh/sftpchannel.h | 2 | ||||
-rw-r--r-- | src/libs/ssh/sftpchannel_p.h | 2 | ||||
-rw-r--r-- | src/libs/ssh/sftpfilesystemmodel.cpp | 6 | ||||
-rw-r--r-- | src/libs/ssh/sftpfilesystemmodel.h | 2 |
5 files changed, 21 insertions, 17 deletions
diff --git a/src/libs/ssh/sftpchannel.cpp b/src/libs/ssh/sftpchannel.cpp index 39ba41bb668..b5e68b6e329 100644 --- a/src/libs/ssh/sftpchannel.cpp +++ b/src/libs/ssh/sftpchannel.cpp @@ -88,8 +88,8 @@ SftpChannel::SftpChannel(quint32 channelId, { connect(d, SIGNAL(initialized()), this, SIGNAL(initialized()), Qt::QueuedConnection); - connect(d, SIGNAL(initializationFailed(QString)), this, - SIGNAL(initializationFailed(QString)), Qt::QueuedConnection); + connect(d, SIGNAL(channelError(QString)), this, + SIGNAL(channelError(QString)), Qt::QueuedConnection); connect(d, SIGNAL(dataAvailable(QSsh::SftpJobId,QString)), this, SIGNAL(dataAvailable(QSsh::SftpJobId,QString)), Qt::QueuedConnection); connect(d, SIGNAL(fileInfoAvailable(QSsh::SftpJobId,QList<QSsh::SftpFileInfo>)), this, @@ -271,7 +271,7 @@ void SftpChannelPrivate::handleChannelFailure() throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR, "Unexpected SSH_MSG_CHANNEL_FAILURE packet."); } - emit initializationFailed(tr("Server could not start SFTP subsystem.")); + emit channelError(tr("Server could not start SFTP subsystem.")); closeChannel(); } @@ -298,18 +298,22 @@ void SftpChannelPrivate::handleChannelExtendedDataInternal(quint32 type, void SftpChannelPrivate::handleExitStatus(const SshChannelExitStatus &exitStatus) { - const char * const message = "Remote SFTP service exited with exit code %d"; #ifdef CREATOR_SSH_DEBUG - qDebug(message, exitStatus.exitStatus); -#else - if (exitStatus.exitStatus != 0) - qWarning(message, exitStatus.exitStatus); + qDebug("Remote SFTP service exited with exit code %d", exitStatus.exitStatus); #endif + + emit channelError(tr("The SFTP server finished unexpectedly with exit code %1.") + .arg(exitStatus.exitStatus)); + + // Note: According to the specs, the server must close the channel after this happens, + // but OpenSSH doesn't do that, so we need to initiate the closing procedure ourselves. + closeChannel(); } void SftpChannelPrivate::handleExitSignal(const SshChannelExitSignal &signal) { - qWarning("Remote SFTP service killed; signal was %s", signal.signal.data()); + emit channelError(tr("The SFTP server crashed: %1.").arg(signal.error)); + closeChannel(); // See above. } void SftpChannelPrivate::handleCurrentPacket() @@ -356,7 +360,7 @@ void SftpChannelPrivate::handleServerVersion() #endif const quint32 serverVersion = m_incomingPacket.extractServerVersion(); if (serverVersion != ProtocolVersion) { - emit initializationFailed(tr("Protocol version mismatch: Expected %1, got %2") + emit channelError(tr("Protocol version mismatch: Expected %1, got %2") .arg(serverVersion).arg(ProtocolVersion)); closeChannel(); } else { @@ -854,7 +858,7 @@ void SftpChannelPrivate::handleOpenFailureInternal(const QString &reason) throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR, "Unexpected SSH_MSG_CHANNEL_OPEN_FAILURE packet."); } - emit initializationFailed(tr("Server could not start session: %1").arg(reason)); + emit channelError(tr("Server could not start session: %1").arg(reason)); } void SftpChannelPrivate::sendReadRequest(const SftpDownload::Ptr &job, diff --git a/src/libs/ssh/sftpchannel.h b/src/libs/ssh/sftpchannel.h index 5d698427f51..55464fc382c 100644 --- a/src/libs/ssh/sftpchannel.h +++ b/src/libs/ssh/sftpchannel.h @@ -83,7 +83,7 @@ public: signals: void initialized(); - void initializationFailed(const QString &reason); + void channelError(const QString &reason); void closed(); // error.isEmpty <=> finished successfully diff --git a/src/libs/ssh/sftpchannel_p.h b/src/libs/ssh/sftpchannel_p.h index 5422358c0d3..3787d192396 100644 --- a/src/libs/ssh/sftpchannel_p.h +++ b/src/libs/ssh/sftpchannel_p.h @@ -52,7 +52,7 @@ public: signals: void initialized(); - void initializationFailed(const QString &reason); + void channelError(const QString &reason); void closed(); void finished(QSsh::SftpJobId job, const QString &error = QString()); void dataAvailable(QSsh::SftpJobId job, const QString &data); diff --git a/src/libs/ssh/sftpfilesystemmodel.cpp b/src/libs/ssh/sftpfilesystemmodel.cpp index 3452a9186ff..ca5bea30ba6 100644 --- a/src/libs/ssh/sftpfilesystemmodel.cpp +++ b/src/libs/ssh/sftpfilesystemmodel.cpp @@ -296,12 +296,12 @@ void SftpFileSystemModel::handleSshConnectionEstablished() { d->sftpChannel = d->sshConnection->createSftpChannel(); connect(d->sftpChannel.data(), SIGNAL(initialized()), SLOT(handleSftpChannelInitialized())); - connect(d->sftpChannel.data(), SIGNAL(initializationFailed(QString)), - SLOT(handleSftpChannelInitializationFailed(QString))); + connect(d->sftpChannel.data(), SIGNAL(channelError(QString)), + SLOT(handleSftpChannelError(QString))); d->sftpChannel->initialize(); } -void SftpFileSystemModel::handleSftpChannelInitializationFailed(const QString &reason) +void SftpFileSystemModel::handleSftpChannelError(const QString &reason) { emit connectionError(reason); beginResetModel(); diff --git a/src/libs/ssh/sftpfilesystemmodel.h b/src/libs/ssh/sftpfilesystemmodel.h index 0de34b74c81..4c7054c26e2 100644 --- a/src/libs/ssh/sftpfilesystemmodel.h +++ b/src/libs/ssh/sftpfilesystemmodel.h @@ -84,7 +84,7 @@ private slots: void handleSshConnectionEstablished(); void handleSshConnectionFailure(); void handleSftpChannelInitialized(); - void handleSftpChannelInitializationFailed(const QString &reason); + void handleSftpChannelError(const QString &reason); void handleFileInfo(QSsh::SftpJobId jobId, const QList<QSsh::SftpFileInfo> &fileInfoList); void handleSftpJobFinished(QSsh::SftpJobId jobId, const QString &errorMessage); |