//SPDX-FileCopyrightText: 2023 Yury Gubich //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include #include #include #include #include "stream/ostream.h" #include "utils/formdecode.h" #include "utils/helpers.h" #include "response/response.h" class Request { friend class Response; public: enum class State { initial, accepted, responding, responded, terminated }; enum class Method { get, post, unknown }; Request(); ~Request(); Request(const Request& other) = delete; Request(Request&& other) = delete; Request& operator = (const Request& other) = delete; Request& operator = (Request&& other) = delete; bool wait(int socketDescriptor); bool active() const; Response& createResponse(); Response& createResponse(Response::Status status); uint16_t responseCode() const; Method method() const; std::string_view methodName() const; State currentState() const; bool isFormUrlEncoded() const; unsigned int contentLength() const; std::map getForm() const; void readPath(const std::string& serverName); std::string getPath() const; std::string getServerName() const; std::string getAuthorizationToken() const; void printEnvironment(std::ostream& out); void printEnvironment(nlohmann::json& out); private: OStream getOutputStream(); OStream getErrorStream(); void responseIsComplete(); void terminate(); private: State state; FCGX_Request raw; std::unique_ptr response; std::string path; };