#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 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