| #pragma once |
| |
| #include "subscription.h" |
| |
| #include "http_response.hpp" |
| #include "logging.hpp" |
| #include "request_stats.hpp" |
| |
| #include <boost/asio/error.hpp> |
| #include <boost/asio/io_context.hpp> |
| |
| #include <functional> |
| #include <memory> |
| #include <optional> |
| |
| 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 |
| }; |
| |
| #ifdef UNIT_TEST_BUILD |
| // Unit tests dont need the strand. |
| AsyncResp() = default; |
| #endif |
| 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 |