Files
pip/libs/main/http_server/microhttpd_server.h
2025-08-14 14:07:52 +03:00

106 lines
4.3 KiB
C++

#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
//! ~runnan Базовый класс HTTP сервера, реализующий основную функциональность
class PIP_HTTP_SERVER_EXPORT MicrohttpdServer: public PIObject {
PIOBJECT(MicrohttpdServer)
friend struct MicrohttpdServerConnection;
public:
MicrohttpdServer();
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