Files
pip/libs/main/http_server/microhttpd_server.h

121 lines
5.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//! \addtogroup HTTP
//! \{
//! \file microhttpd_server.h
//! \brief Base HTTP server class
//! \~english Base HTTP server class using libmicrohttpd
//! \~russian Базовый класс HTTP сервера с использованием libmicrohttpd
//! \details
//! \~english Provides core HTTP server functionality with connection handling
//! \~russian Обеспечивает базовую функциональность HTTP сервера с обработкой соединений
//! \}
#ifndef MICROHTTPD_SERVER_P_H
#define MICROHTTPD_SERVER_P_H
#include "pihttptypes.h"
#include "piobject.h"
#include "pip_http_server_export.h"
struct MicrohttpdServerConnection;
//! \~english Base HTTP server class implementing core functionality
//! \~russian Базовый класс HTTP сервера, реализующий основную функциональность
class PIP_HTTP_SERVER_EXPORT MicrohttpdServer: public PIObject {
PIOBJECT(MicrohttpdServer)
friend struct MicrohttpdServerConnection;
public:
//! \~english Constructs a new MicroHTTP server
//! \~russian Создает новый MicroHTTP сервер
MicrohttpdServer();
//! \~english Destroys the MicroHTTP server
//! \~russian Уничтожает MicroHTTP сервер
virtual ~MicrohttpdServer();
//! \~english Server configuration options
//! \~russian Опции конфигурации сервера
enum class Option {
ConnectionLimit, //!< \~english Maximum concurrent connections
//!< \~russian Максимальное количество соединений
ConnectionTimeout, //!< \~english Connection timeout in seconds
//!< \~russian Таймаут соединения в секундах
HTTPSEnabled, //!< \~english Enable HTTPS support
//!< \~russian Включить поддержку HTTPS
HTTPSMemKey, //!< \~english SSL key in memory (PIByteArray)
//!< \~russian SSL ключ в памяти (PIByteArray)
HTTPSMemCert, //!< \~english SSL certificate in memory (PIByteArray)
//!< \~russian SSL сертификат в памяти (PIByteArray)
HTTPSKeyPassword //!< \~english SSL key password (PIByteArray)
//!< \~russian Пароль SSL ключа (PIByteArray)
};
//! \~english Sets server option
//! \~russian Устанавливает опцию сервера
void setOption(Option o, PIVariant v);
//! \~english Sets server favicon
//! \~russian Устанавливает фавикон сервера
void setFavicon(const PIByteArray & im);
//! \~english Starts server on specified address
//! \~russian Запускает сервер на указанном адресе
bool listen(PINetworkAddress addr);
//! \~english Starts server on all interfaces
//! \~russian Запускает сервер на всех интерфейсах
bool listenAll(ushort port) { return listen({0, port}); }
//! \~english Checks if server is running
//! \~russian Проверяет, работает ли сервер
bool isListen() const;
//! \~english Stops the server
//! \~russian Останавливает сервер
void stop();
//! \~english Enables basic authentication
//! \~russian Включает базовую аутентификацию
void enableBasicAuth() { setBasicAuthEnabled(true); }
//! \~english Disables basic authentication
//! \~russian Выключает базовую аутентификацию
void disableBasicAuth() { setBasicAuthEnabled(false); }
//! \~english Set basic authentication enabled to "yes"
//! \~russian Устанавливает базовую аутентификацию в "yes"
void setBasicAuthEnabled(bool yes) { use_basic_auth = yes; }
//! \~english Return if basic authentication enabled
//! \~russian Возвращает включена ли базовая аутентификация
bool isBasicAuthEnabled() const { return use_basic_auth; }
//! \~english Sets basic authentication realm
//! \~russian Устанавливает область аутентификации
void setBasicAuthRealm(const PIString & r) { realm = r; }
//! \~english Sets request processing callback
//! \~russian Устанавливает callback для обработки запросов
void setRequestCallback(std::function<PIHTTP::MessageMutable(const PIHTTP::MessageConst &)> c) { callback = c; }
//! \~english Sets basic authentication callback
//! \~russian Устанавливает callback для базовой аутентификации
void setBasicAuthCallback(std::function<bool(const PIString &, const PIString &)> c) { callback_auth = c; }
private:
static void addFixedHeaders(PIHTTP::MessageMutable & msg);
PRIVATE_DECLARATION(PIP_HTTP_SERVER_EXPORT)
PIByteArray favicon;
PIString realm;
PIMap<Option, PIVariant> opts;
std::function<PIHTTP::MessageMutable(const PIHTTP::MessageConst &)> callback;
std::function<bool(const PIString &, const PIString &)> callback_auth;
std::atomic_bool use_basic_auth = {false};
PIByteArray mem_key, mem_cert, key_pass;
};
#endif