XRootD
XrdClHttp::CurlMkcolOp Class Referencefinal

#include <XrdClHttpOps.hh>

+ Inheritance diagram for XrdClHttp::CurlMkcolOp:
+ Collaboration diagram for XrdClHttp::CurlMkcolOp:

Public Member Functions

 CurlMkcolOp (XrdCl::ResponseHandler *handler, const std::string &url, struct timespec timeout, XrdCl::Log *logger, bool response_info, CreateConnCalloutType callout, HeaderCallout *header_callout)
 
virtual ~CurlMkcolOp ()
 
void Fail (uint16_t errCode, uint32_t errNum, const std::string &msg) override
 
virtual HttpVerb GetVerb () const override
 
void ReleaseHandle () 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 ()
 
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 OptionsDone ()
 
virtual RedirectAction Redirect (std::string &target)
 
virtual bool RequiresOptions () const
 
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::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 572 of file XrdClHttpOps.hh.

Constructor & Destructor Documentation

◆ CurlMkcolOp()

CurlMkcolOp::CurlMkcolOp ( XrdCl::ResponseHandler handler,
const std::string &  url,
struct timespec  timeout,
XrdCl::Log logger,
bool  response_info,
CreateConnCalloutType  callout,
HeaderCallout header_callout 
)

Definition at line 28 of file XrdClHttpOpMkcol.cc.

32  : CurlOperation(handler, url, timeout, logger, callout, header_callout)
33 {}
CurlOperation(XrdCl::ResponseHandler *handler, const std::string &url, struct timespec timeout, XrdCl::Log *log, CreateConnCalloutType, HeaderCallout *header_callout)

◆ ~CurlMkcolOp()

CurlMkcolOp::~CurlMkcolOp ( )
virtual

Definition at line 35 of file XrdClHttpOpMkcol.cc.

35 {}

Member Function Documentation

◆ Fail()

void CurlMkcolOp::Fail ( uint16_t  errCode,
uint32_t  errNum,
const std::string &  msg 
)
overridevirtual

Reimplemented from XrdClHttp::CurlOperation.

Definition at line 38 of file XrdClHttpOpMkcol.cc.

39 {
40  // Note: the generic status code handler maps HTTP status "405 Method Not Allowed"
41  // to kXR_InvalidRequest.
42  //
43  // However, for the MKCOL operation, 405 maps better to kXR_ItExists
44  if (errCode == XrdCl::errErrorResponse && errNum == kXR_InvalidRequest && GetStatusCode() == 405) {
45  m_logger->Debug(kLogXrdClHttp, "MKCOL was performed on a directory that exists");
46  errNum = kXR_ItExists;
47  }
48  CurlOperation::Fail(errCode, errNum, msg);
49 }
@ kXR_InvalidRequest
Definition: XProtocol.hh:1038
@ kXR_ItExists
Definition: XProtocol.hh:1050
virtual void Fail(uint16_t errCode, uint32_t errNum, const std::string &)
void Debug(uint64_t topic, const char *format,...)
Print a debug message.
Definition: XrdClLog.cc:282
const uint16_t errErrorResponse
Definition: XrdClStatus.hh:105
const uint64_t kLogXrdClHttp

References XrdCl::Log::Debug(), XrdCl::errErrorResponse, XrdClHttp::CurlOperation::Fail(), XrdClHttp::CurlOperation::GetStatusCode(), XrdClHttp::kLogXrdClHttp, kXR_InvalidRequest, kXR_ItExists, and XrdClHttp::CurlOperation::m_logger.

+ Here is the call graph for this function:

◆ GetVerb()

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

Implements XrdClHttp::CurlOperation.

Definition at line 586 of file XrdClHttpOps.hh.

586 {return HttpVerb::MKCOL;}

◆ ReleaseHandle()

void CurlMkcolOp::ReleaseHandle ( )
overridevirtual

Reimplemented from XrdClHttp::CurlOperation.

Definition at line 52 of file XrdClHttpOpMkcol.cc.

52  {
53  if (m_curl == nullptr) return;
54  curl_easy_setopt(m_curl.get(), CURLOPT_CUSTOMREQUEST, nullptr);
56 }
std::unique_ptr< CURL, void(*)(CURL *)> m_curl
virtual void ReleaseHandle()

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

+ Here is the call graph for this function:

◆ Setup()

bool CurlMkcolOp::Setup ( CURL curl,
CurlWorker worker 
)
overridevirtual

Reimplemented from XrdClHttp::CurlOperation.

Definition at line 59 of file XrdClHttpOpMkcol.cc.

59  {
60  if (!CurlOperation::Setup(curl, worker)) return false;
61  curl_easy_setopt(m_curl.get(), CURLOPT_CUSTOMREQUEST, "MKCOL");
62 
63  return true;
64 }
virtual bool Setup(CURL *curl, CurlWorker &)

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

+ Here is the call graph for this function:

◆ Success()

void CurlMkcolOp::Success ( )
overridevirtual

Implements XrdClHttp::CurlOperation.

Definition at line 67 of file XrdClHttpOpMkcol.cc.

67  {
68  SetDone(false);
69  m_logger->Debug(kLogXrdClHttp, "CurlMkcolOp::Success");
70  if (m_handler == nullptr) {return;}
71 
72  XrdCl::AnyObject *obj{nullptr};
73  if (m_response_info) {
74  auto info = new XrdClHttp::MkdirResponseInfo();
75  info->SetResponseInfo(MoveResponseInfo());
76  obj = new XrdCl::AnyObject();
77  obj->Set(info);
78  }
79 
80  auto handle = m_handler;
81  m_handler = nullptr;
82  handle->HandleResponse(new XrdCl::XRootDStatus(), obj);
83 }
void SetDone(bool has_failed)
XrdCl::ResponseHandler * m_handler
std::unique_ptr< ResponseInfo > MoveResponseInfo()
virtual void HandleResponse(XRootDStatus *status, AnyObject *response)

References XrdCl::Log::Debug(), XrdCl::ResponseHandler::HandleResponse(), XrdClHttp::kLogXrdClHttp, XrdClHttp::CurlOperation::m_handler, XrdClHttp::CurlOperation::m_logger, XrdClHttp::CurlOperation::MoveResponseInfo(), and XrdClHttp::CurlOperation::SetDone().

+ Here is the call graph for this function:

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