23 using AuthVar = std::variant<PasswdAuth, PubkeyAuth>;
27 struct FileAttribute {
37 uint32_t permissions = 0;
40 uint32_t atime_nseconds = 0;
41 uint64_t createtime = 0;
42 uint32_t createtime_nseconds = 0;
45 uint32_t mtime_nseconds = 0;
47 uint32_t extended_count = 0;
48 std::string extended_type;
49 std::string extended_data;
66 typedef std::variant<UNLINK, MKDIR, RMDIR> SftpCmd;
67 struct SftpSimpleCommand;
74 Quissh(Quissh
const &) =
delete;
75 Quissh &operator=(Quissh
const &) =
delete;
76 Quissh(Quissh &&) =
delete;
77 Quissh &operator=(Quissh &&) =
delete;
79 bool open(
const char *host,
int port, AuthVar authdata);
82 bool is_connected()
const;
83 bool is_sftp_connected()
const;
85 void add_allowed_command(
const std::string &command);
87 bool exec(
char const *cmd, std::function<
bool (
const char *,
int)> writer);
103 return ssh_.channel_open();
107 ssh_.channel_close();
109 bool exec(
char const *command, std::function<
bool(
char const *,
int)> writer);
112 bool sftp_unlink(
const char *name);
113 bool sftp_mkdir(
const char *name);
114 bool sftp_rmdir(
const char *name);
116 bool scp_push_file(
char const *path, std::function<
int (
char *ptr,
int len)> reader,
size_t size);
117 bool scp_pull_file(std::function<
bool (
char const *ptr,
int len)> writer);
122 bool sftp_push_file(
char const *path, std::function<
int (
char *ptr,
int len)> reader);
123 bool sftp_pull_file(
char const *remote_path, std::function<
int (
char *ptr,
int len)> writer);
125 std::optional<std::vector<FileAttribute>> sftp_ls(
char const *path);
126 FileAttribute sftp_stat(
const std::string &path);
129 void channel_close();
131 bool push_file(
char const *path, std::function<
int (
char *ptr,
int len)> reader);
132 bool pull_file(
char const *remote_path, std::function<
int (
char const *ptr,
int len)> writer);
133 std::optional<struct stat> stat(std::string
const &path);
149 return ssh_.sftp_open();
155 bool is_connected()
const;
156 bool unlink(
char const *name)
158 return ssh_.sftp_unlink(name);
160 bool mkdir(
char const *name)
162 return ssh_.sftp_mkdir(name);
164 bool rmdir(
char const *name)
166 return ssh_.sftp_rmdir(name);
168 std::optional<std::vector<FileAttribute>> ls(
char const *path)
170 return ssh_.sftp_ls(path);
172 bool push(
char const *path, std::function<
int (
char *,
int)> reader)
174 return ssh_.sftp_push_file(path, reader);
176 FileAttribute stat(
char const *path)
178 return ssh_.sftp_stat(path);
180 bool push(
char const *local_path,
char const *remote_path);
181 bool pull(
char const *remote_path, std::function<
int (
char const *ptr,
int len)> writer)
183 return ssh_.sftp_pull_file(remote_path, writer);
185 bool pull(
char const *remote_path,
char const *local_path);
193 DIR(DIR
const &) =
delete;
194 DIR &operator=(DIR
const &) =
delete;
195 DIR(DIR &&) =
delete;
196 DIR &operator=(DIR &&) =
delete;
200 bool opendir(
char const *path);
202 std::optional<FileAttribute> readdir();