21#ifndef XRDCLHTTPUTIL_HH
22#define XRDCLHTTPUTIL_HH
29#include <condition_variable>
34#include <unordered_map>
59std::string_view
ltrim_view(
const std::string_view &input_view);
62std::string_view
trim_view(
const std::string_view &input_view);
75 bool Parse(
const std::string &headers);
79 uint64_t
GetOffset()
const {
return m_response_offset;}
106 m_multipart_sep =
"--" + std::string(sep);
107 m_multipart_byteranges =
true;
118 const std::string &
GetETag()
const {
return m_etag;}
128 static bool Base64Decode(std::string_view input, std::array<unsigned char, 32> &output);
135 static bool validHeaderByte(
unsigned char c);
137 int64_t m_content_length{-1};
138 uint64_t m_response_offset{0};
140 XrdClHttp::ChecksumInfo m_checksums;
142 bool m_recv_all_headers{
false};
143 bool m_recv_status_line{
false};
144 bool m_multipart_byteranges{
false};
146 int m_status_code{-1};
147 std::string m_resp_protocol;
148 std::string m_resp_message;
149 std::string m_location;
150 std::string m_multipart_sep;
152 std::string m_cache_control;
171 void Produce(std::shared_ptr<CurlOperation> handler);
173 std::shared_ptr<CurlOperation>
Consume(std::chrono::steady_clock::duration);
200 bool m_shutdown{
false};
201 std::deque<std::shared_ptr<CurlOperation>> m_ops;
202 static std::atomic<uint64_t> m_ops_consumed;
203 static std::atomic<uint64_t> m_ops_produced;
204 static std::atomic<uint64_t> m_ops_rejected;
205 thread_local static std::vector<CURL*> m_handles;
206 std::condition_variable m_consumer_cv;
207 std::condition_variable m_producer_cv;
209 const static unsigned m_default_max_pending_ops{50};
210 const unsigned m_max_pending_ops{50};
std::shared_ptr< CurlOperation > Consume(std::chrono::steady_clock::duration)
HandlerQueue(unsigned max_pending_ops)
void Produce(std::shared_ptr< CurlOperation > handler)
void RecycleHandle(CURL *)
static std::string GetMonitoringJson()
static unsigned GetDefaultMaxPendingOps()
std::shared_ptr< CurlOperation > TryConsume()
std::unordered_map< std::string, HeaderValues > HeaderMap
std::pair< uint16_t, uint32_t > HTTPStatusConvert(unsigned status)
CURL * GetHandle(bool verbose)
bool HTTPStatusIsError(unsigned status)
std::string_view ltrim_view(const std::string_view &input_view)
const uint64_t kLogXrdClHttp
std::string_view trim_view(const std::string_view &input_view)