Rabbit Remote Control 0.1.0-de
Loading...
Searching...
No Matches
ChannelSFTP.h
1// Copyright Copyright (c) Kang Lin studio, All Rights Reserved
2// Author Kang Lin <kl222@126.com>
3
4#pragma once
5#include "ChannelSSH.h"
6#include "libssh/sftp.h"
7#include <QDateTime>
8
9#define BUF_SIZE 4096
10
12class CFileTransfer;
14{
15 Q_OBJECT
16
17public:
18 explicit CChannelSFTP(CBackend* pBackend, CParameterSSH* pPara,
19 bool bWakeUp = true, QObject *parent = nullptr);
20
27 int MakeDir(const QString& dir);
28 int RemoveDir(const QString& dir);
29 int RemoveFile(const QString& file);
30 int Rename(const QString& oldPath, const QString& newPath);
31
32 int Process();
33
34public Q_SLOTS:
39Q_SIGNALS:
40 void sigGetDir(CRemoteFileSystem* p, QVector<QSharedPointer<CRemoteFileSystem> > contents, bool bEnd);
41
42public Q_SLOTS:
43 void slotStartFileTransfer(QSharedPointer<CFileTransfer> f);
44 void slotStopFileTransfer(QSharedPointer<CFileTransfer> f);
45Q_SIGNALS:
46 void sigFileTransferUpdate(QSharedPointer<CFileTransfer> f);
47
48protected:
49 virtual qint64 readData(char *data, qint64 maxlen) override;
50 virtual qint64 writeData(const char *data, qint64 len) override;
51
52private:
53 enum class STATE {
54 OPEN,
55 READ,
56 CLOSE,
57 FINISH,
58 ERR
59 };
60 struct DIR_READER {
61 sftp_dir sftp;
62 QString szPath;
63 STATE state;
64 CRemoteFileSystem* remoteFileSystem;
65 QVector<QSharedPointer<CRemoteFileSystem> > vFileNode;
66 int Error;
67 };
68
69 struct _AIO {
70 sftp_aio aio;
71 quint64 nStart;
72 quint64 nRequests;
73 quint64 nTransfers;
74 char* buffer;
75 };
76
77 struct _AFILE {
78 sftp_file remote;
79 int local;
80 STATE state;
81 QSharedPointer<CFileTransfer> fileTransfer;
82
83#if LIBSSH_VERSION_INT >= SSH_VERSION_INT(0, 11, 0)
84 QVector<sftp_aio> aio;
85 // The chunk size to use for the transfer
86 quint64 nChunkSize;
87 quint64 nRequests;
88 quint64 nTransfers;
89 int nConcurrentCount;
90 char *buffer;
91#else
92 int asyncReadId;
93#endif
94
95 };
96
97 virtual int OnOpen(ssh_session session) override;
98 virtual void OnClose() override;
99 QSharedPointer<CRemoteFileSystem> GetFileNode(const QString &szPath, sftp_attributes attributes);
100 int AsyncReadDir();
101 int AsyncFile();
102 int CleanFileAIO(QSharedPointer<_AFILE> aio);
103
104private:
105 sftp_session m_SessionSftp;
106 QVector<QSharedPointer<DIR_READER> > m_vDirs;
107 QVector<QSharedPointer<_AFILE> > m_vFiles;
108};
Backend interface.
Definition Backend.h:42
int GetDir(CRemoteFileSystem *p)
Synchronize to get the directory.
void slotGetDir(CRemoteFileSystem *p)
Get the directory asynchronously.