2017-01-19 16:23:59 -05:00
|
|
|
/*
|
|
|
|
This project is released under the GPL 2.0 license.
|
|
|
|
Some parts are based on research by Bas Timmer and the OpenSteamworks project.
|
|
|
|
Please do no evil.
|
|
|
|
|
|
|
|
Initial author: (https://github.com/)momo5502
|
|
|
|
Started: 2015-03-01
|
|
|
|
Notes:
|
|
|
|
Small FTP and HTTP utility class using WinAPI
|
|
|
|
*/
|
|
|
|
|
2017-01-20 08:36:52 -05:00
|
|
|
#pragma once
|
|
|
|
|
2017-01-19 16:23:59 -05:00
|
|
|
namespace Utils
|
|
|
|
{
|
|
|
|
class WebIO
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
typedef std::map<std::string, std::string> Params;
|
|
|
|
|
|
|
|
WebIO();
|
|
|
|
WebIO(std::string useragent);
|
|
|
|
WebIO(std::string useragent, std::string url);
|
|
|
|
|
|
|
|
~WebIO();
|
|
|
|
|
|
|
|
void setURL(std::string url);
|
2017-06-04 14:51:05 -04:00
|
|
|
void setCredentials(std::string username, std::string password);
|
2017-01-19 16:23:59 -05:00
|
|
|
|
|
|
|
std::string postFile(std::string url, std::string data, std::string fieldName, std::string fileName);
|
|
|
|
std::string postFile(std::string data, std::string fieldName, std::string fileName);
|
|
|
|
|
2017-05-15 15:57:45 -04:00
|
|
|
std::string post(std::string url, WebIO::Params params, bool* success= nullptr);
|
|
|
|
std::string post(std::string url, std::string body, bool* success = nullptr);
|
|
|
|
std::string post(WebIO::Params params, bool* success = nullptr);
|
|
|
|
std::string post(std::string body, bool* success = nullptr);
|
2017-01-19 16:23:59 -05:00
|
|
|
|
2017-05-15 15:57:45 -04:00
|
|
|
std::string get(std::string url, bool* success = nullptr);
|
|
|
|
std::string get(bool* success = nullptr);
|
2017-01-19 16:23:59 -05:00
|
|
|
|
|
|
|
WebIO* setTimeout(DWORD mseconds);
|
|
|
|
|
|
|
|
// FTP
|
|
|
|
bool connect();
|
|
|
|
void disconnect(); // Not necessary
|
|
|
|
|
|
|
|
bool setDirectory(std::string directory);
|
|
|
|
bool setRelativeDirectory(std::string directory);
|
|
|
|
bool getDirectory(std::string &directory);
|
|
|
|
bool createDirectory(std::string directory);
|
|
|
|
bool deleteDirectory(std::string directory);
|
|
|
|
bool renameDirectory(std::string directory, std::string newDir);
|
|
|
|
|
|
|
|
bool listDirectories(std::string directory, std::vector<std::string> &list);
|
|
|
|
bool listFiles(std::string directory, std::vector<std::string> &list);
|
|
|
|
|
|
|
|
bool deleteFile(std::string file);
|
|
|
|
bool renameFile(std::string file, std::string newFile);
|
|
|
|
bool uploadFile(std::string file, std::string localfile);
|
|
|
|
bool downloadFile(std::string file, std::string localfile);
|
|
|
|
|
|
|
|
bool uploadFileData(std::string file, std::string data);
|
|
|
|
bool downloadFileData(std::string file, std::string &data);
|
|
|
|
|
2017-06-04 14:51:05 -04:00
|
|
|
void setProgressCallback(Utils::Slot<void(size_t, size_t)> callback);
|
2017-05-15 15:57:45 -04:00
|
|
|
void cancelDownload() { this->cancel = true; }
|
|
|
|
|
2017-01-19 16:23:59 -05:00
|
|
|
private:
|
|
|
|
|
|
|
|
enum Command
|
|
|
|
{
|
|
|
|
COMMAND_POST,
|
|
|
|
COMMAND_GET,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct WebURL
|
|
|
|
{
|
|
|
|
std::string protocol;
|
|
|
|
std::string server;
|
|
|
|
std::string document;
|
|
|
|
std::string port;
|
|
|
|
std::string raw;
|
|
|
|
};
|
|
|
|
|
2017-05-15 15:57:45 -04:00
|
|
|
bool cancel;
|
|
|
|
|
2017-01-19 16:23:59 -05:00
|
|
|
bool isFTP;
|
|
|
|
std::string username;
|
|
|
|
std::string password;
|
|
|
|
|
|
|
|
WebURL url;
|
|
|
|
|
|
|
|
HINTERNET hSession;
|
|
|
|
HINTERNET hConnect;
|
|
|
|
HINTERNET hFile;
|
|
|
|
|
|
|
|
DWORD timeout;
|
|
|
|
|
2017-06-04 14:51:05 -04:00
|
|
|
Utils::Slot<void(size_t, size_t)> progressCallback;
|
2017-05-15 15:57:45 -04:00
|
|
|
|
2017-01-19 16:23:59 -05:00
|
|
|
std::string buildPostBody(WebIO::Params params);
|
|
|
|
|
|
|
|
bool isSecuredConnection();
|
|
|
|
|
2017-05-15 15:57:45 -04:00
|
|
|
std::string execute(const char* command, std::string body, WebIO::Params headers = WebIO::Params(), bool* success = nullptr);
|
2017-01-19 16:23:59 -05:00
|
|
|
|
|
|
|
bool listElements(std::string directory, std::vector<std::string> &list, bool files);
|
|
|
|
|
|
|
|
void openSession(std::string useragent);
|
|
|
|
void closeSession();
|
|
|
|
|
|
|
|
bool openConnection();
|
|
|
|
void closeConnection();
|
|
|
|
|
|
|
|
void formatPath(std::string &path, bool win); /* if (win == true): / -> \\ */
|
|
|
|
};
|
|
|
|
}
|