|  | #ifndef PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_BMC_HTTP_CONNECTION_H_ | 
|  | #define PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_BMC_HTTP_CONNECTION_H_ | 
|  |  | 
|  | #include <cstddef> | 
|  | #include <cstdint> | 
|  | #include <memory> | 
|  | #include <string> | 
|  |  | 
|  | #include "absl/functional/any_invocable.h" | 
|  | #include "absl/status/statusor.h" | 
|  | #include "absl/strings/string_view.h" | 
|  | #include "absl/time/time.h" | 
|  |  | 
|  | // NOLINTBEGIN(readability/boost) | 
|  | #include "boost/asio/ip/tcp.hpp" | 
|  | #include "boost/beast/core.hpp" | 
|  | #include "boost/beast/core/tcp_stream.hpp" | 
|  | #include "boost/beast/http.hpp" | 
|  | #include "boost/beast/http/string_body.hpp" | 
|  | #include "boost/beast/version.hpp" | 
|  | // NOLINTEND(readability/boost) | 
|  |  | 
|  | #include "nlohmann/json_fwd.hpp" | 
|  |  | 
|  | namespace safepower_agent { | 
|  |  | 
|  | namespace beast = boost::beast; | 
|  | namespace http = beast::http; | 
|  |  | 
|  | using boost::beast::tcp_stream; | 
|  |  | 
|  | class HttpConnection : public std::enable_shared_from_this<HttpConnection> { | 
|  | public: | 
|  | explicit HttpConnection(absl::Duration connection_timeout = absl::Seconds(10), | 
|  | absl::Duration write_timeout = absl::Seconds(10)); | 
|  |  | 
|  | void PerformConnection( | 
|  | http::verb verb, absl::string_view target, | 
|  | absl::AnyInvocable<void(absl::StatusOr<nlohmann::json>) &&> callback, | 
|  | const nlohmann::json& body, absl::string_view ip = "127.0.0.1", | 
|  | uint16_t port = 80); | 
|  |  | 
|  | void Write(beast::error_code ec); | 
|  | void Read(beast::error_code ec, size_t bytes_transferred); | 
|  | void Callback(beast::error_code ec, std::size_t bytes_transferred); | 
|  |  | 
|  | private: | 
|  | http::verb verb_; | 
|  | std::string target_; | 
|  | std::string body_; | 
|  | beast::tcp_stream stream_; | 
|  | beast::flat_buffer buffer_; | 
|  | absl::AnyInvocable<void(absl::StatusOr<nlohmann::json>) &&> | 
|  | provided_callback_; | 
|  | http::request<http::string_body> req_; | 
|  | http::response<http::string_body> res_; | 
|  | boost::asio::ip::tcp::endpoint end_point_; | 
|  | absl::Duration connection_timeout_; | 
|  | absl::Duration write_timeout_; | 
|  | }; | 
|  |  | 
|  | }  // namespace safepower_agent | 
|  |  | 
|  | #endif  // PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_BMC_HTTP_CONNECTION_H_ |