#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 c) { callback = c; } //! ~english Sets basic authentication callback //! ~russian Устанавливает callback для базовой аутентификации void setBasicAuthCallback(std::function c) { callback_auth = c; } private: static void addFixedHeaders(PIHTTP::MessageMutable & msg); PRIVATE_DECLARATION(PIP_HTTP_SERVER_EXPORT) PIByteArray favicon; PIString realm; PIMap opts; std::function callback; std::function callback_auth; std::atomic_bool use_basic_auth = {false}; PIByteArray mem_key, mem_cert, key_pass; }; #endif