SSH: Add ability to create symbolic links on remote host.

Change-Id: I6fda991c342acb2b64fe1e0078e9df43590119c6
Reviewed-on: http://codereview.qt.nokia.com/1531
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com>
This commit is contained in:
Christian Kandeler
2011-07-12 15:23:52 +02:00
parent c986374f32
commit 72e436de44
6 changed files with 40 additions and 1 deletions

View File

@@ -162,6 +162,12 @@ SftpJobId SftpChannel::renameFileOrDirectory(const QString &oldPath,
new Internal::SftpRename(++d->m_nextJobId, oldPath, newPath))); new Internal::SftpRename(++d->m_nextJobId, oldPath, newPath)));
} }
SftpJobId SftpChannel::createLink(const QString &filePath, const QString &target)
{
return d->createJob(Internal::SftpCreateLink::Ptr(
new Internal::SftpCreateLink(++d->m_nextJobId, filePath, target)));
}
SftpJobId SftpChannel::createFile(const QString &path, SftpOverwriteMode mode) SftpJobId SftpChannel::createFile(const QString &path, SftpOverwriteMode mode)
{ {
return d->createJob(Internal::SftpCreateFile::Ptr( return d->createJob(Internal::SftpCreateFile::Ptr(
@@ -451,6 +457,7 @@ void SftpChannelPrivate::handleStatus()
case AbstractSftpOperation::Rm: case AbstractSftpOperation::Rm:
case AbstractSftpOperation::Rename: case AbstractSftpOperation::Rename:
case AbstractSftpOperation::CreateFile: case AbstractSftpOperation::CreateFile:
case AbstractSftpOperation::CreateLink:
handleStatusGeneric(it, response); handleStatusGeneric(it, response);
break; break;
} }

View File

@@ -73,6 +73,7 @@ public:
SftpJobId renameFileOrDirectory(const QString &oldPath, SftpJobId renameFileOrDirectory(const QString &oldPath,
const QString &newPath); const QString &newPath);
SftpJobId createFile(const QString &filePath, SftpOverwriteMode mode); SftpJobId createFile(const QString &filePath, SftpOverwriteMode mode);
SftpJobId createLink(const QString &filePath, const QString &target);
SftpJobId uploadFile(const QString &localFilePath, SftpJobId uploadFile(const QString &localFilePath,
const QString &remoteFilePath, SftpOverwriteMode mode); const QString &remoteFilePath, SftpOverwriteMode mode);
SftpJobId downloadFile(const QString &remoteFilePath, SftpJobId downloadFile(const QString &remoteFilePath,

View File

@@ -90,6 +90,17 @@ SftpOutgoingPacket &SftpRename::initialPacket(SftpOutgoingPacket &packet)
} }
SftpCreateLink::SftpCreateLink(SftpJobId jobId, const QString &filePath, const QString &target)
: AbstractSftpOperation(jobId), filePath(filePath), target(target)
{
}
SftpOutgoingPacket &SftpCreateLink::initialPacket(SftpOutgoingPacket &packet)
{
return packet.generateCreateLink(filePath, target, jobId);
}
AbstractSftpOperationWithHandle::AbstractSftpOperationWithHandle(SftpJobId jobId, AbstractSftpOperationWithHandle::AbstractSftpOperationWithHandle(SftpJobId jobId,
const QString &remotePath) const QString &remotePath)
: AbstractSftpOperation(jobId), : AbstractSftpOperation(jobId),

View File

@@ -53,7 +53,7 @@ struct AbstractSftpOperation
{ {
typedef QSharedPointer<AbstractSftpOperation> Ptr; typedef QSharedPointer<AbstractSftpOperation> Ptr;
enum Type { enum Type {
ListDir, MakeDir, RmDir, Rm, Rename, CreateFile, Download, UploadFile ListDir, MakeDir, RmDir, Rm, Rename, CreateLink, CreateFile, Download, UploadFile
}; };
AbstractSftpOperation(SftpJobId jobId); AbstractSftpOperation(SftpJobId jobId);
@@ -117,6 +117,18 @@ struct SftpRename : public AbstractSftpOperation
const QString newPath; const QString newPath;
}; };
struct SftpCreateLink : public AbstractSftpOperation
{
typedef QSharedPointer<SftpCreateLink> Ptr;
SftpCreateLink(SftpJobId jobId, const QString &filePath, const QString &target);
virtual Type type() const { return CreateLink; }
virtual SftpOutgoingPacket &initialPacket(SftpOutgoingPacket &packet);
const QString filePath;
const QString target;
};
struct AbstractSftpOperationWithHandle : public AbstractSftpOperation struct AbstractSftpOperationWithHandle : public AbstractSftpOperation
{ {

View File

@@ -143,6 +143,12 @@ SftpOutgoingPacket &SftpOutgoingPacket::generateWriteFile(const QByteArray &hand
.appendInt64(offset).appendString(data).finalize(); .appendInt64(offset).appendString(data).finalize();
} }
SftpOutgoingPacket &SftpOutgoingPacket::generateCreateLink(const QString &filePath,
const QString &target, quint32 requestId)
{
return init(SSH_FXP_SYMLINK, requestId).appendString(filePath).appendString(target).finalize();
}
SftpOutgoingPacket &SftpOutgoingPacket::generateOpenFile(const QString &path, SftpOutgoingPacket &SftpOutgoingPacket::generateOpenFile(const QString &path,
OpenType openType, SftpOverwriteMode mode, const QList<quint32> &attributes, quint32 requestId) OpenType openType, SftpOverwriteMode mode, const QList<quint32> &attributes, quint32 requestId)
{ {

View File

@@ -64,6 +64,8 @@ public:
quint32 requestId); quint32 requestId);
SftpOutgoingPacket &generateWriteFile(const QByteArray &handle, SftpOutgoingPacket &generateWriteFile(const QByteArray &handle,
quint64 offset, const QByteArray &data, quint32 requestId); quint64 offset, const QByteArray &data, quint32 requestId);
SftpOutgoingPacket &generateCreateLink(const QString &filePath, const QString &target,
quint32 requestId);
static const quint32 DefaultPermissions; static const quint32 DefaultPermissions;