Mercurial > minori
view include/core/http.h @ 397:811697ad826a default tip
http: do proper global init/cleanup of libcurl
this is done automagically using RAII
| author | Paper <paper@tflc.us> |
|---|---|
| date | Fri, 07 Nov 2025 08:39:24 -0500 |
| parents | 963047512d34 |
| children |
line wrap: on
line source
#ifndef MINORI_CORE_HTTP_H_ #define MINORI_CORE_HTTP_H_ #include <QByteArray> #include <QThread> #include <atomic> #include <mutex> #include <string> #include <vector> namespace HTTP { /* Global state init/quit */ void Init(); void Quit(); /* helper class that automatically init/deinit as constructors * and destructors */ struct Initializer { Initializer() { Init(); } ~Initializer() { Quit(); } }; /* calls libcurl to encode/decode */ std::string UrlEncode(const std::string &data); std::string UrlDecode(const std::string &data); std::string EncodeParamsList(std::string base, const std::map<std::string, std::string> ¶ms); enum class Type { Get, Post, Patch }; QByteArray Request(const std::string &url, const std::vector<std::string> &headers = {}, const std::string &data = "", Type type = Type::Get); class RequestThread final : public QThread { Q_OBJECT public: RequestThread(Type type = Type::Get, QObject *parent = nullptr); RequestThread(const std::string &url, const std::vector<std::string> &headers = {}, const std::string &data = "", Type type = Type::Get, QObject *parent = nullptr); ~RequestThread(); void SetUrl(const std::string &url); void SetHeaders(const std::vector<std::string> &headers); void SetData(const std::string &data); void SetType(Type type); void Stop(); signals: void ReceivedData(const QByteArray &ba); protected: void run() override; static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userdata); std::string url_; std::string data_; std::vector<std::string> headers_; Type type_; void *curl_; /* these are passed to the write callback */ QByteArray array_; std::atomic<bool> cancelled_ = false; }; } // namespace HTTP #endif // MINORI_CORE_HTTP_H_
