remove CORS default header from PIHTTPServer fix several docs fix PIMathVector::dot return type add units directory with PIUnits facility
92 lines
3.9 KiB
C++
92 lines
3.9 KiB
C++
#ifndef pihttpclient_h
|
||
#define pihttpclient_h
|
||
|
||
#include "pihttptypes.h"
|
||
#include "pip_http_client_export.h"
|
||
#include "pistringlist.h"
|
||
|
||
|
||
class PIHTTPClientBase {
|
||
public:
|
||
int __infoFunc(ssize_t dltotal, ssize_t dlnow, ssize_t ultotal, ssize_t ulnow);
|
||
int __debugFunc(int type, char * data, size_t size);
|
||
};
|
||
|
||
|
||
//! \~english Main HTTP client class for performing requests with event callbacks.
|
||
//! \~russian Основной класс HTTP-клиента для выполнения запросов с callback-ми событий.
|
||
class PIP_HTTP_CLIENT_EXPORT PIHTTPClient: private PIHTTPClientBase {
|
||
friend class PIHTTPClientBase;
|
||
friend class CurlThreadPool;
|
||
|
||
public:
|
||
//! \~english Creates a new HTTP request instance with the specified URL, method and message.
|
||
//! \~russian Создает новый экземпляр HTTP-запроса с указанным URL, методом и сообщением.
|
||
static PIHTTPClient * create(const PIString & url, PIHTTP::Method method = PIHTTP::Method::Get, const PIHTTP::MessageConst & req = {});
|
||
|
||
//! \~english Sets a callback for successful request completion (no parameters).
|
||
//! \~russian Устанавливает callback для успешного завершения запроса (без параметров).
|
||
PIHTTPClient * onFinish(std::function<void()> f);
|
||
|
||
//! \~english Sets a callback for successful request completion (with response).
|
||
//! \~russian Устанавливает callback для успешного завершения запроса (с ответом).
|
||
PIHTTPClient * onFinish(std::function<void(const PIHTTP::MessageConst &)> f);
|
||
|
||
//! \~english Sets a callback for request errors (no parameters).
|
||
//! \~russian Устанавливает callback для ошибок запроса (без параметров).
|
||
PIHTTPClient * onError(std::function<void()> f);
|
||
|
||
//! \~english Sets a callback for request errors (with error response).
|
||
//! \~russian Устанавливает callback для ошибок запроса (с ответом об ошибке).
|
||
PIHTTPClient * onError(std::function<void(const PIHTTP::MessageConst &)> f);
|
||
|
||
//! \~english Sets a callback for request abortion (no parameters).
|
||
//! \~russian Устанавливает callback для прерывания запроса (без параметров).
|
||
PIHTTPClient * onAbort(std::function<void()> f);
|
||
|
||
//! \~english Sets a callback for request abortion (with abort response).
|
||
//! \~russian Устанавливает callback для прерывания запроса (с ответом о прерывании).
|
||
PIHTTPClient * onAbort(std::function<void(const PIHTTP::MessageConst &)> f);
|
||
|
||
//! \~english Starts the HTTP request execution.
|
||
//! \~russian Начинает выполнение HTTP-запроса.
|
||
void start();
|
||
|
||
//! \~english Aborts the current HTTP request.
|
||
//! \~russian Прерывает текущий HTTP-запрос.
|
||
void abort();
|
||
|
||
//! \~english Returns the last error message.
|
||
//! \~russian Возвращает последнее сообщение об ошибке.
|
||
PIString lastError() const { return last_error; }
|
||
|
||
private:
|
||
NO_COPY_CLASS(PIHTTPClient)
|
||
PIHTTPClient();
|
||
virtual ~PIHTTPClient();
|
||
|
||
PRIVATE_DECLARATION(PIP_HTTP_CLIENT_EXPORT)
|
||
|
||
bool init();
|
||
void perform();
|
||
void procHeaderLine(PIString & line);
|
||
|
||
static size_t writeMemoryFunc(void * contents, size_t size, size_t nmemb, void * ptr);
|
||
static size_t readMemoryFunc(void * contents, size_t size, size_t nmemb, void * ptr);
|
||
static size_t headerFunc(char * contents, size_t size, size_t nmemb, void * ptr);
|
||
int infoFunc(ssize_t dltotal, ssize_t dlnow, ssize_t ultotal, ssize_t ulnow);
|
||
int debugFunc(int type, char * data, size_t size);
|
||
|
||
PIString url;
|
||
PIString last_error;
|
||
PIStringList headers;
|
||
PIByteArray buffer_out;
|
||
PIHTTP::MessageMutable request, reply;
|
||
std::atomic_bool is_cancel = {false};
|
||
ssize_t read_pos = 0;
|
||
std::function<void(const PIHTTP::MessageConst &)> on_finish, on_error, on_abort;
|
||
};
|
||
|
||
|
||
#endif
|