XRootD
Loading...
Searching...
No Matches
XrdClHttp::CurlChecksumOp Class Referencefinal

#include <XrdClHttpOps.hh>

Inheritance diagram for XrdClHttp::CurlChecksumOp:
Collaboration diagram for XrdClHttp::CurlChecksumOp:

Public Member Functions

 CurlChecksumOp (XrdCl::ResponseHandler *handler, const std::string &url, XrdClHttp::ChecksumType preferred, struct timespec timeout, XrdCl::Log *logger, bool response_info, CreateConnCalloutType callout, HeaderCallout *header_callout)
virtual ~CurlChecksumOp ()
virtual HttpVerb GetVerb () const override
virtual void OptionsDone () override
RedirectAction Redirect (std::string &target) override
void ReleaseHandle () override
bool Setup (CURL *curl, CurlWorker &) override
void Success () override
Public Member Functions inherited from XrdClHttp::CurlStatOp
 CurlStatOp (XrdCl::ResponseHandler *handler, const std::string &url, struct timespec timeout, XrdCl::Log *log, bool response_info, CreateConnCalloutType callout, HeaderCallout *header_callout)
virtual ~CurlStatOp ()
std::pair< int64_t, bool > GetStatInfo ()
RedirectAction Redirect (std::string &target) override
void ReleaseHandle () override
virtual bool RequiresOptions () const override
bool Setup (CURL *curl, CurlWorker &) override
void Success () override
Public Member Functions inherited from XrdClHttp::CurlOperation
 CurlOperation (const CurlOperation &)=delete
 CurlOperation (XrdCl::ResponseHandler *handler, const std::string &url, std::chrono::steady_clock::time_point expiry, XrdCl::Log *log, CreateConnCalloutType, HeaderCallout *header_callout)
 CurlOperation (XrdCl::ResponseHandler *handler, const std::string &url, struct timespec timeout, XrdCl::Log *log, CreateConnCalloutType, HeaderCallout *header_callout)
virtual ~CurlOperation ()
virtual bool ContinueHandle ()
virtual void Fail (uint16_t errCode, uint32_t errNum, const std::string &)
bool FinishSetup (CURL *curl)
std::pair< XErrorCode, std::string > GetCallbackError () const
CreateConnCalloutType GetConnCalloutFunc () const
std::string GetCurlErrorMessage () const
CURLGetCurlHandle () const
OpError GetError () const
std::chrono::steady_clock::time_point GetHeaderExpiry () const
std::chrono::steady_clock::time_point GetOperationExpiry ()
std::unique_ptr< ResponseInfoGetResponseInfo ()
int GetStatusCode () const
std::string GetStatusMessage () const
bool GetTriedBoker () const
const std::string & GetUrl () const
bool HasFailed () const
bool HeaderTimeoutExpired (const std::chrono::steady_clock::time_point &now)
bool IsDone () const
bool IsPaused () const
bool IsRedirect () const
std::unique_ptr< ResponseInfoMoveResponseInfo ()
bool OperationTimeoutExpired (const std::chrono::steady_clock::time_point &now)
virtual void SetContinueQueue (std::shared_ptr< XrdClHttp::HandlerQueue > queue)
void SetTriedBoker ()
bool StartConnectionCallout (std::string &err)
std::tuple< uint64_t, std::chrono::steady_clock::duration, std::chrono::steady_clock::duration, std::chrono::steady_clock::duration > StatisticsReset ()
bool TransferStalled (uint64_t xfer_bytes, const std::chrono::steady_clock::time_point &now)
bool UseConnectionCallout ()
virtual int WaitSocket ()
virtual int WaitSocketCallback (std::string &err)

Additional Inherited Members

Public Types inherited from XrdClHttp::CurlOperation
using HeaderList = std::vector<std::pair<std::string, std::string>>
enum class  HttpVerb {
  COPY ,
  DELETE ,
  HEAD ,
  GET ,
  MKCOL ,
  OPTIONS ,
  PROPFIND ,
  PUT ,
  Count
}
enum  OpError {
  ErrNone ,
  ErrHeaderTimeout ,
  ErrCallback ,
  ErrOperationTimeout ,
  ErrTransferClientStall ,
  ErrTransferStall ,
  ErrTransferSlow
}
enum class  RedirectAction {
  Fail ,
  Reinvoke ,
  ReinvokeAfterAllow
}
Static Public Member Functions inherited from XrdClHttp::CurlOperation
static void CleanupDnsCache ()
static int GetDefaultSlowRateBytesSec ()
static int GetDefaultStallTimeout ()
static const std::string GetVerbString (HttpVerb)
static void SetSlowRateBytesSec (int rate)
static void SetStallTimeout (const std::chrono::steady_clock::duration &stall_interval)
static void SetStallTimeout (int stall_interval)
Protected Member Functions inherited from XrdClHttp::CurlStatOp
void SuccessImpl (bool returnObj)
Protected Member Functions inherited from XrdClHttp::CurlOperation
int FailCallback (XErrorCode ecode, const std::string &emsg)
void SetDone (bool has_failed)
void SetPaused (bool paused)
void UpdateBytes (uint64_t bytes)
Protected Attributes inherited from XrdClHttp::CurlOperation
std::unique_ptr< CURL, void(*)(CURL *)> m_curl
XrdCl::ResponseHandlerm_handler {nullptr}
HeaderCalloutm_header_callout
std::chrono::steady_clock::time_point m_header_expiry
HeaderParser m_headers
std::vector< std::pair< std::string, std::string > > m_headers_list
XrdCl::Logm_logger
int m_minimum_rate {m_minimum_transfer_rate}
std::chrono::steady_clock::time_point m_operation_expiry
const std::string m_url
Static Protected Attributes inherited from XrdClHttp::CurlOperation
static constexpr int m_default_minimum_rate {1024 * 256}
static int m_minimum_transfer_rate {CurlOperation::m_default_minimum_rate}

Detailed Description

Definition at line 527 of file XrdClHttpOps.hh.

Constructor & Destructor Documentation

◆ CurlChecksumOp()

CurlChecksumOp::CurlChecksumOp ( XrdCl::ResponseHandler * handler,
const std::string & url,
XrdClHttp::ChecksumType preferred,
struct timespec timeout,
XrdCl::Log * logger,
bool response_info,
CreateConnCalloutType callout,
HeaderCallout * header_callout )

Definition at line 33 of file XrdClHttpOpChecksum.cc.

36:
37 CurlStatOp(handler, url, timeout, logger, response_info, callout, header_callout),
38 m_preferred_cksum(preferred)
39{}
CurlStatOp(XrdCl::ResponseHandler *handler, const std::string &url, struct timespec timeout, XrdCl::Log *log, bool response_info, CreateConnCalloutType callout, HeaderCallout *header_callout)

References XrdClHttp::CurlStatOp::CurlStatOp().

Here is the call graph for this function:

◆ ~CurlChecksumOp()

virtual XrdClHttp::CurlChecksumOp::~CurlChecksumOp ( )
inlinevirtual

Definition at line 533 of file XrdClHttpOps.hh.

533{}

Member Function Documentation

◆ GetVerb()

virtual HttpVerb XrdClHttp::CurlChecksumOp::GetVerb ( ) const
inlineoverridevirtual

Reimplemented from XrdClHttp::CurlStatOp.

Definition at line 535 of file XrdClHttpOps.hh.

References XrdClHttp::CurlOperation::HEAD.

◆ OptionsDone()

void CurlChecksumOp::OptionsDone ( )
overridevirtual

Reimplemented from XrdClHttp::CurlStatOp.

Definition at line 43 of file XrdClHttpOpChecksum.cc.

44{}

◆ Redirect()

CurlOperation::RedirectAction CurlChecksumOp::Redirect ( std::string & target)
overridevirtual

Reimplemented from XrdClHttp::CurlOperation.

Definition at line 61 of file XrdClHttpOpChecksum.cc.

62{
63 auto result = CurlOperation::Redirect(target);
64 curl_easy_setopt(m_curl.get(), CURLOPT_NOBODY, 1L);
65 curl_easy_setopt(m_curl.get(), CURLOPT_CUSTOMREQUEST, nullptr);
66 return result;
67}
std::unique_ptr< CURL, void(*)(CURL *)> m_curl
virtual RedirectAction Redirect(std::string &target)

References XrdClHttp::CurlOperation::m_curl, and XrdClHttp::CurlOperation::Redirect().

Here is the call graph for this function:

◆ ReleaseHandle()

void CurlChecksumOp::ReleaseHandle ( )
overridevirtual

Reimplemented from XrdClHttp::CurlOperation.

Definition at line 70 of file XrdClHttpOpChecksum.cc.

71{
72 if (m_curl == nullptr) return;
73 curl_easy_setopt(m_curl.get(), CURLOPT_HTTPHEADER, nullptr);
74
76}
void ReleaseHandle() override

References XrdClHttp::CurlOperation::m_curl, and XrdClHttp::CurlStatOp::ReleaseHandle().

Here is the call graph for this function:

◆ Setup()

bool CurlChecksumOp::Setup ( CURL * curl,
CurlWorker & worker )
overridevirtual

Reimplemented from XrdClHttp::CurlOperation.

Definition at line 47 of file XrdClHttpOpChecksum.cc.

48{
49 auto rv = CurlStatOp::Setup(curl, worker);
50 if (!rv) return false;
51
52 curl_easy_setopt(m_curl.get(), CURLOPT_NOBODY, 1L);
53 curl_easy_setopt(m_curl.get(), CURLOPT_CUSTOMREQUEST, nullptr);
54
55 m_headers_list.emplace_back("Want-Digest", XrdClHttp::HeaderParser::ChecksumTypeToDigestName(m_preferred_cksum));
56
57 return true;
58}
std::vector< std::pair< std::string, std::string > > m_headers_list
bool Setup(CURL *curl, CurlWorker &) override
static std::string ChecksumTypeToDigestName(XrdClHttp::ChecksumType type)

References XrdClHttp::HeaderParser::ChecksumTypeToDigestName(), XrdClHttp::CurlOperation::m_curl, XrdClHttp::CurlOperation::m_headers_list, and XrdClHttp::CurlStatOp::Setup().

Here is the call graph for this function:

◆ Success()

void CurlChecksumOp::Success ( )
overridevirtual

Implements XrdClHttp::CurlOperation.

Definition at line 79 of file XrdClHttpOpChecksum.cc.

80{
81 SetDone(false);
82 auto checksums = m_headers.GetChecksums();
83
84 std::array<unsigned char, XrdClHttp::g_max_checksum_length> value;
86 if (checksums.IsSet(m_preferred_cksum)) {
87 value = checksums.Get(m_preferred_cksum);
88 type = m_preferred_cksum;
89 } else {
90 bool isset;
91 std::tie(type, value, isset) = checksums.GetFirst();
92 if (!isset) {
93 m_logger->Error(kLogXrdClHttp, "Checksums not found in response for %s", m_url.c_str());
94 auto handle = m_handler;
95 m_handler = nullptr;
96 handle->HandleResponse(new XrdCl::XRootDStatus(XrdCl::stError, XrdCl::errCheckSumError), nullptr);
97 return;
98 }
99 }
100 std::stringstream ss;
101 for (size_t idx = 0; idx < XrdClHttp::GetChecksumLength(type); ++idx) {
102 ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(value[idx]);
103 }
104
105 std::string response = XrdClHttp::GetTypeString(type) + " " + ss.str();
106 auto buf = new XrdClHttp::QueryResponse();
107 buf->FromString(response);
108 buf->SetResponseInfo(MoveResponseInfo());
109
110 auto obj = new XrdCl::AnyObject();
111 obj->Set(static_cast<XrdCl::Buffer*>(buf));
112
113 auto handle = m_handler;
114 m_handler = nullptr;
115 handle->HandleResponse(new XrdCl::XRootDStatus(), obj);
116 // Does not call CurlStatOp::Success() as we don't need to invoke a stat info callback
117}
void SetDone(bool has_failed)
std::unique_ptr< ResponseInfo > MoveResponseInfo()
const std::string m_url
XrdCl::ResponseHandler * m_handler
size_t GetChecksumLength(ChecksumType ctype)
const std::string GetTypeString(ChecksumType ctype)
const uint64_t kLogXrdClHttp
const uint16_t stError
An error occurred that could potentially be retried.
const uint16_t errCheckSumError

References XrdCl::errCheckSumError, XrdClHttp::GetChecksumLength(), XrdClHttp::GetTypeString(), XrdClHttp::kLogXrdClHttp, XrdClHttp::kUnknown, XrdClHttp::CurlOperation::m_handler, XrdClHttp::CurlOperation::m_headers, XrdClHttp::CurlOperation::m_logger, XrdClHttp::CurlOperation::m_url, XrdClHttp::CurlOperation::MoveResponseInfo(), XrdClHttp::CurlOperation::SetDone(), and XrdCl::stError.

Here is the call graph for this function:

The documentation for this class was generated from the following files: