| #ifndef THIRD_PARTY_GBMCWEB_INCLUDE_ASYNC_RESP_H_ | |
| #define THIRD_PARTY_GBMCWEB_INCLUDE_ASYNC_RESP_H_ | |
| #include <cstdint> | |
| #include <memory> | |
| #include <optional> | |
| #include <utility> | |
| #include <vector> | |
| #include "boost/asio/error.hpp" // NOLINT | |
| #include "boost/asio/io_context.hpp" // NOLINT | |
| #include "subscription.h" | |
| #include "http_response.hpp" | |
| #include "request_stats.hpp" | |
| namespace bmcweb { | |
| constexpr const char* BMCWEB_HINT_MAX_AGE_SEC = "BMCWEB_HINT_MAX_AGE_SEC"; | |
| // TODO: need to find a better spot for these ^ ? | |
| /** | |
| * AsyncResp | |
| * Gathers data needed for response processing after async calls are done | |
| */ | |
| class AsyncResp { | |
| public: | |
| enum class ResponseType : std::uint8_t { | |
| kPolling, | |
| kPollingCustomRefreshInterval, | |
| kSubscription, | |
| kCancelSubscription, | |
| kOriginOfCondition | |
| }; | |
| // For unit tests usage only: don't need the strand. | |
| AsyncResp() = default; | |
| explicit AsyncResp( | |
| const std::shared_ptr<boost::asio::io_context::strand>& strand) | |
| : strand_(strand) {}; | |
| explicit AsyncResp( | |
| crow::Response&& res, | |
| const std::shared_ptr<boost::asio::io_context::strand>& strand) | |
| : res(std::move(res)), strand_(strand) {} | |
| AsyncResp(const AsyncResp&) = delete; | |
| AsyncResp(AsyncResp&&) = delete; | |
| AsyncResp& operator=(const AsyncResp&) = delete; | |
| AsyncResp& operator=(AsyncResp&&) = delete; | |
| ~AsyncResp(); | |
| crow::Response res; | |
| int64_t hintMaxAgeSec = 0; | |
| std::optional<int64_t> hintCacheMaxAgeSec; | |
| uint64_t refresh_interval_ms = 0; | |
| ResponseType response_type = ResponseType::kPolling; | |
| std::shared_ptr<boost::asio::io_context::strand> strand_; | |
| // We need to store delegated expand here so that the delgation is accessible | |
| // via plugins | |
| uint8_t delegatedExpandLevel = 0; | |
| // Collection of EventSourceId objects. | |
| // Optional as eventSourceIds are only used in response to internal | |
| // requests originated by SubscriptionBackend and empty eventSourceIds | |
| // would be a valid response. | |
| std::optional<std::vector<ecclesia::EventSourceId>> eventSourceIds; | |
| // Cancel the managed object subscription. | |
| bool cancel_subscription_ = false; | |
| std::shared_ptr<managedStore::RequestStatsContext> requestStatsContext; | |
| }; | |
| } // namespace bmcweb | |
| #endif // THIRD_PARTY_GBMCWEB_INCLUDE_ASYNC_RESP_H_ |