XRootD
XrdHttpTpcTPC.cc File Reference
#include "XrdHttp/XrdHttpExtHandler.hh"
#include "XrdNet/XrdNetAddr.hh"
#include "XrdNet/XrdNetUtils.hh"
#include "XrdOuc/XrdOucEnv.hh"
#include "XrdSec/XrdSecEntity.hh"
#include "XrdSfs/XrdSfsInterface.hh"
#include "XrdSys/XrdSysAtomics.hh"
#include "XrdSys/XrdSysFD.hh"
#include "XrdVersion.hh"
#include "XrdXrootd/XrdXrootdRedirHelper.hh"
#include "XrdXrootd/XrdXrootdTpcMon.hh"
#include "XrdOuc/XrdOucPrivateUtils.hh"
#include "XrdOuc/XrdOucTUtils.hh"
#include "XrdHttpTpc/XrdHttpTpcUtils.hh"
#include "XrdHttp/XrdHttpUtils.hh"
#include <curl/curl.h>
#include <dlfcn.h>
#include <fcntl.h>
#include <algorithm>
#include <memory>
#include <sstream>
#include <stdexcept>
#include <thread>
#include "XrdHttpTpcState.hh"
#include "XrdHttpTpcStream.hh"
#include "XrdHttpTpcTPC.hh"
#include <fstream>
+ Include dependency graph for XrdHttpTpcTPC.cc:

Go to the source code of this file.

Functions

std::string encode_xrootd_opaque_to_uri (CURL *curl, const std::string &opaque)
 
static bool IsAllowedScheme (const std::string &url)
 
static std::string PrepareURL (const std::string &url)
 
XrdHttpExtHandlerXrdHttpGetExtHandler (XrdSysError *log, const char *config, const char *, XrdOucEnv *myEnv)
 
 XrdVERSIONINFO (XrdHttpGetExtHandler, HttpTPC)
 

Function Documentation

◆ encode_xrootd_opaque_to_uri()

std::string encode_xrootd_opaque_to_uri ( CURL curl,
const std::string &  opaque 
)

Definition at line 264 of file XrdHttpTpcTPC.cc.

265 {
266  std::stringstream parser(opaque);
267  std::string sequence;
268  std::stringstream output;
269  bool first = true;
270  while (getline(parser, sequence, '&')) {
271  if (sequence.empty()) {continue;}
272  size_t equal_pos = sequence.find('=');
273  char *val = NULL;
274  if (equal_pos != std::string::npos)
275  val = curl_easy_escape(curl, sequence.c_str() + equal_pos + 1, sequence.size() - equal_pos - 1);
276  // Do not emit parameter if value exists and escaping failed.
277  if (!val && equal_pos != std::string::npos) {continue;}
278 
279  if (!first) output << "&";
280  first = false;
281  output << sequence.substr(0, equal_pos);
282  if (val) {
283  output << "=" << val;
284  curl_free(val);
285  }
286  }
287  return output.str();
288 }
void getline(uchar *buff, int blen)

References getline().

+ Here is the call graph for this function:

◆ IsAllowedScheme()

static bool IsAllowedScheme ( const std::string &  url)
static

Definition at line 383 of file XrdHttpTpcTPC.cc.

384 {
385  const std::string allowed_schemes[] = { "https://", "http://" };
386 
387  for (const auto& s : allowed_schemes)
388  if (url.compare(0, s.size(), s) == 0)
389  return true;
390 
391  return false;
392 }

Referenced by TPC::TPCHandler::ProcessReq().

+ Here is the caller graph for this function:

◆ PrepareURL()

static std::string PrepareURL ( const std::string &  url)
static

Definition at line 372 of file XrdHttpTpcTPC.cc.

373 {
374  const std::string replace_schemes[] = { "davs://", "s3://", "s3s://" };
375 
376  for (const auto& s : replace_schemes)
377  if (url.compare(0, s.size(), s) == 0)
378  return "https://" + url.substr(s.size());
379 
380  return url;
381 }

Referenced by TPC::TPCHandler::ProcessReq().

+ Here is the caller graph for this function:

◆ XrdHttpGetExtHandler()

XrdHttpExtHandler* XrdHttpGetExtHandler ( XrdSysError log,
const char *  config,
const char *  ,
XrdOucEnv myEnv 
)

Definition at line 1348 of file XrdHttpTpcTPC.cc.

1348  {
1349  if (curl_global_init(CURL_GLOBAL_DEFAULT)) {
1350  log->Emsg("TPCInitialize", "libcurl failed to initialize");
1351  return NULL;
1352  }
1353 
1354  TPCHandler *retval{NULL};
1355  if (!config) {
1356  log->Emsg("TPCInitialize", "TPC handler requires a config filename in order to load");
1357  return NULL;
1358  }
1359  try {
1360  log->Emsg("TPCInitialize", "Will load configuration for the TPC handler from", config);
1361  retval = new TPCHandler(log, config, myEnv);
1362  } catch (std::runtime_error &re) {
1363  log->Emsg("TPCInitialize", "Encountered a runtime failure when loading ", re.what());
1364  //printf("Provided env vars: %p, XrdInet*: %p\n", myEnv, myEnv->GetPtr("XrdInet*"));
1365  }
1366  return retval;
1367 }
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
Definition: XrdSysError.cc:116

References XrdSysError::Emsg().

+ Here is the call graph for this function:

◆ XrdVERSIONINFO()

XrdVERSIONINFO ( XrdHttpGetExtHandler  ,
HttpTPC   
)