XRootD
XrdClHttpUtil.cc File Reference
#include "XrdClHttpFile.hh"
#include "XrdClHttpOps.hh"
#include "XrdClHttpOptionsCache.hh"
#include "XrdClHttpUtil.hh"
#include "XrdClHttpWorker.hh"
#include <XProtocol/XProtocol.hh>
#include <XrdCl/XrdClDefaultEnv.hh>
#include <XrdCl/XrdClLog.hh>
#include <XrdCl/XrdClURL.hh>
#include <XrdCl/XrdClUtils.hh>
#include <XrdCl/XrdClXRootDResponses.hh>
#include <XrdCks/XrdCksData.hh>
#include <XrdOuc/XrdOucCRC.hh>
#include <XrdOuc/XrdOucPrivateUtils.hh>
#include <XrdSys/XrdSysPageSize.hh>
#include <XrdVersion.hh>
#include <curl/curl.h>
#include <openssl/bio.h>
#include <openssl/evp.h>
#include <fcntl.h>
#include <fstream>
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <algorithm>
#include <cerrno>
#include <cctype>
#include <cstdlib>
#include <sstream>
#include <stdexcept>
#include <system_error>
#include <utility>
+ Include dependency graph for XrdClHttpUtil.cc:

Go to the source code of this file.

Classes

struct  WaitingForBroker
 

Functions

std::pair< uint16_t, uint32_t > CurlCodeConvert (CURLcode res)
 

Class Documentation

◆ WaitingForBroker

struct WaitingForBroker

Definition at line 87 of file XrdClHttpUtil.cc.

+ Collaboration diagram for WaitingForBroker:
Class Members
CURL * curl
time_t expiry

Function Documentation

◆ CurlCodeConvert()

std::pair<uint16_t, uint32_t> CurlCodeConvert ( CURLcode  res)

Definition at line 275 of file XrdClHttpUtil.cc.

275  {
276  switch (res) {
277  case CURLE_OK:
278  return std::make_pair(XrdCl::errNone, 0);
279  case CURLE_COULDNT_RESOLVE_PROXY:
280  case CURLE_COULDNT_RESOLVE_HOST:
281  return std::make_pair(XrdCl::errInvalidAddr, 0);
282  case CURLE_LOGIN_DENIED:
283  // Commented-out cases are for platforms (RHEL7) where the error
284  // codes are undefined.
285  //case CURLE_AUTH_ERROR:
286  //case CURLE_SSL_CLIENTCERT:
287  case CURLE_REMOTE_ACCESS_DENIED:
288  return std::make_pair(XrdCl::errLoginFailed, EACCES);
289  case CURLE_SSL_CONNECT_ERROR:
290  case CURLE_SSL_ENGINE_NOTFOUND:
291  case CURLE_SSL_ENGINE_SETFAILED:
292  case CURLE_SSL_CERTPROBLEM:
293  case CURLE_SSL_CIPHER:
294  case 51: // In old curl versions, this is CURLE_PEER_FAILED_VERIFICATION; that constant was changed to be 60 / CURLE_SSL_CACERT
295  case CURLE_SSL_SHUTDOWN_FAILED:
296  case CURLE_SSL_CRL_BADFILE:
297  case CURLE_SSL_ISSUER_ERROR:
298  case CURLE_SSL_CACERT: // value is 60; merged with CURLE_PEER_FAILED_VERIFICATION
299  //case CURLE_SSL_PINNEDPUBKEYNOTMATCH:
300  //case CURLE_SSL_INVALIDCERTSTATUS:
301  return std::make_pair(XrdCl::errTlsError, 0);
302  case CURLE_SEND_ERROR:
303  case CURLE_RECV_ERROR:
304  return std::make_pair(XrdCl::errSocketError, EIO);
305  case CURLE_COULDNT_CONNECT:
306  case CURLE_GOT_NOTHING:
307  return std::make_pair(XrdCl::errConnectionError, ECONNREFUSED);
308  case CURLE_OPERATION_TIMEDOUT:
309 #ifdef HAVE_XPROTOCOL_TIMEREXPIRED
311 #else
312  return std::make_pair(XrdCl::errOperationExpired, ESTALE);
313 #endif
314  case CURLE_UNSUPPORTED_PROTOCOL:
315  case CURLE_NOT_BUILT_IN:
316  return std::make_pair(XrdCl::errNotSupported, ENOSYS);
317  case CURLE_FAILED_INIT:
318  return std::make_pair(XrdCl::errInternal, 0);
319  case CURLE_URL_MALFORMAT:
320  return std::make_pair(XrdCl::errInvalidArgs, res);
321  //case CURLE_WEIRD_SERVER_REPLY:
322  //case CURLE_HTTP2:
323  //case CURLE_HTTP2_STREAM:
324  return std::make_pair(XrdCl::errCorruptedHeader, res);
325  case CURLE_PARTIAL_FILE:
326  return std::make_pair(XrdCl::errDataError, res);
327  // These two errors indicate a failure in the callback. That
328  // should generate their own failures, meaning this should never
329  // get use.
330  case CURLE_READ_ERROR:
331  case CURLE_WRITE_ERROR:
332  return std::make_pair(XrdCl::errInternal, res);
333  case CURLE_RANGE_ERROR:
334  case CURLE_BAD_CONTENT_ENCODING:
335  return std::make_pair(XrdCl::errNotSupported, res);
336  case CURLE_TOO_MANY_REDIRECTS:
337  return std::make_pair(XrdCl::errRedirectLimit, res);
338  default:
339  return std::make_pair(XrdCl::errUnknown, res);
340  }
341 }
@ kXR_TimerExpired
Definition: XProtocol.hh:1067
const uint16_t errUnknown
Unknown error.
Definition: XrdClStatus.hh:50
const uint16_t errInvalidAddr
Definition: XrdClStatus.hh:71
const uint16_t errRedirectLimit
Definition: XrdClStatus.hh:102
const uint16_t errErrorResponse
Definition: XrdClStatus.hh:105
const uint16_t errTlsError
Definition: XrdClStatus.hh:80
const uint16_t errOperationExpired
Definition: XrdClStatus.hh:90
const uint16_t errLoginFailed
Definition: XrdClStatus.hh:87
const uint16_t errDataError
data is corrupted
Definition: XrdClStatus.hh:63
const uint16_t errInternal
Internal error.
Definition: XrdClStatus.hh:56
const uint16_t errInvalidArgs
Definition: XrdClStatus.hh:58
const uint16_t errConnectionError
Definition: XrdClStatus.hh:78
const uint16_t errNotSupported
Definition: XrdClStatus.hh:62
const uint16_t errSocketError
Definition: XrdClStatus.hh:72
const uint16_t errCorruptedHeader
Definition: XrdClStatus.hh:103
const uint16_t errNone
No error.
Definition: XrdClStatus.hh:48

References XrdCl::errConnectionError, XrdCl::errCorruptedHeader, XrdCl::errDataError, XrdCl::errErrorResponse, XrdCl::errInternal, XrdCl::errInvalidAddr, XrdCl::errInvalidArgs, XrdCl::errLoginFailed, XrdCl::errNone, XrdCl::errNotSupported, XrdCl::errOperationExpired, XrdCl::errRedirectLimit, XrdCl::errSocketError, XrdCl::errTlsError, XrdCl::errUnknown, and kXR_TimerExpired.

Referenced by XrdClHttp::CurlWorker::Run().

+ Here is the caller graph for this function: