Files
digFTP/src/filer.h

68 lines
1.7 KiB
C++

#ifndef FILER_H
#define FILER_H
#include <filesystem>
#include "logger.h"
#define FILER_PLUGIN_API_VERSION 1
struct file_error {
uint8_t code = 0;
std::string msg;
};
struct file_data {
~file_data() {
delete[] bin;
}
std::shared_ptr<std::ifstream> stream = nullptr;
const char* path = nullptr;
const char* relpath = nullptr;
char* bin = nullptr;
size_t size = 0;
file_error error = {};
};
enum FilerStatusCodes : uint8_t {
Success = 0,
IsDirectory = 248,
AccessDenied = 249,
FileExists = 250,
DirectoryNotEmpty = 251,
InvalidTransferMode = 252,
NotFound = 253,
NoPermission = 254,
Exception = 255
};
class Filer {
public:
virtual ~Filer() {};
virtual bool initialize(const std::map<std::string, std::string>& config) { return true; }
virtual file_data setRoot(std::string _root) = 0;
virtual file_data setCWD(std::string _cwd) = 0;
virtual std::filesystem::path getRoot() = 0;
virtual std::filesystem::path getCWD() = 0;
virtual bool resolvePath(const std::string& path, std::filesystem::path* target) = 0;
virtual void setTransferMode(char type) {
this->transfer_mode = type;
}
virtual char getTransferMode() {
return this->transfer_mode;
}
virtual file_data traverse(std::string dir) = 0;
virtual file_data createDirectory(std::string dir) = 0;
virtual file_data fileSize(std::string name) = 0;
virtual file_data deleteFile(std::string name) = 0;
virtual file_data readFile(std::string name) = 0;
virtual file_data writeFile(std::string name, unsigned char* data, int size, bool append = false) = 0;
virtual file_data renameFile(const std::string& from, const std::string& to) = 0;
virtual file_data list(std::string path = ".") = 0;
private:
char transfer_mode = 'I';
};
#endif