Files
pip/libs/main/http_server/microhttpd_server.h
peri4 5db97ca959 version 5.4.0
remove CORS default header from PIHTTPServer
fix several docs
fix PIMathVector::dot return type
add units directory with PIUnits facility
2025-09-26 21:33:45 +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
//! \~russian Базовый класс 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