XRootD
Loading...
Searching...
No Matches
TPC::TPCHandler Class Reference

#include <XrdHttpTpcTPC.hh>

Inheritance diagram for TPC::TPCHandler:
Collaboration diagram for TPC::TPCHandler:

Public Member Functions

 TPCHandler (XrdSysError *log, const char *config, XrdOucEnv *myEnv)
virtual ~TPCHandler ()
virtual int Init (const char *cfgfile)
 Initializes the external request handler.
virtual bool MatchesPath (const char *verb, const char *path)
 Tells if the incoming path is recognized as one of the paths that have to be processed.
virtual int ProcessReq (XrdHttpExtReq &req)
Public Member Functions inherited from XrdHttpExtHandler
 XrdHttpExtHandler ()
 Constructor.
virtual ~XrdHttpExtHandler ()
 Destructor.

Static Public Attributes

static constexpr std::string_view OSS_TASK_OPAQUE = "oss.task=httptpc"

Detailed Description

Definition at line 48 of file XrdHttpTpcTPC.hh.

Constructor & Destructor Documentation

◆ TPCHandler()

TPCHandler::TPCHandler ( XrdSysError * log,
const char * config,
XrdOucEnv * myEnv )

Definition at line 348 of file XrdHttpTpcTPC.cc.

348 :
349 m_desthttps(false),
350 m_fixed_route(false),
351 m_timeout(60),
352 m_first_timeout(120),
353 m_log(log->logger(), "TPC_"),
354 m_sfs(NULL)
355{
356 if (!Configure(config, myEnv)) {
357 throw std::runtime_error("Failed to configure the HTTP third-party-copy handler.");
358 }
359
360// Extract out the TPC monitoring object (we share it with xrootd).
361//
362 XrdXrootdGStream *gs = (XrdXrootdGStream*)myEnv->GetPtr("Tpc.gStream*");
363 if (gs)
364 TPCLogRecord::tpcMonitor = new XrdXrootdTpcMon("http",log->logger(),*gs);
365}
void * GetPtr(const char *varname)
Definition XrdOucEnv.cc:263
XrdSysLogger * logger(XrdSysLogger *lp=0)

References XrdOucEnv::GetPtr(), if(), and XrdSysError::logger().

Here is the call graph for this function:

◆ ~TPCHandler()

TPCHandler::~TPCHandler ( )
virtual

Definition at line 340 of file XrdHttpTpcTPC.cc.

340 {
341 m_sfs = NULL;
342}

Member Function Documentation

◆ Init()

virtual int TPC::TPCHandler::Init ( const char * cfgfile)
inlinevirtual

Initializes the external request handler.

Implements XrdHttpExtHandler.

Definition at line 56 of file XrdHttpTpcTPC.hh.

56{return 0;}

◆ MatchesPath()

bool TPCHandler::MatchesPath ( const char * verb,
const char * path )
virtual

Tells if the incoming path is recognized as one of the paths that have to be processed.

Implements XrdHttpExtHandler.

Definition at line 293 of file XrdHttpTpcTPC.cc.

293 {
294 return !strcmp(verb, "COPY") || !strcmp(verb, "OPTIONS");
295}

◆ ProcessReq()

int TPCHandler::ProcessReq ( XrdHttpExtReq & )
virtual

Process an HTTP request and send the response using the calling XrdHttpProtocol instance directly Returns 0 if ok, non0 if errors

Implements XrdHttpExtHandler.

Definition at line 312 of file XrdHttpTpcTPC.cc.

312 {
313 if (req.verb == "OPTIONS") {
314 return ProcessOptionsReq(req);
315 }
316 auto header = XrdOucTUtils::caseInsensitiveFind(req.headers,"credential");
317 if (header != req.headers.end()) {
318 if (header->second != "none") {
319 m_log.Emsg("ProcessReq", "COPY requested an unsupported credential type: ", header->second.c_str());
320 return req.SendSimpleResp(400, NULL, NULL, "COPY requestd an unsupported Credential type", 0);
321 }
322 }
323 header = XrdOucTUtils::caseInsensitiveFind(req.headers,"source");
324 if (header != req.headers.end()) {
325 std::string src = PrepareURL(header->second);
326 return ProcessPullReq(src, req);
327 }
328 header = XrdOucTUtils::caseInsensitiveFind(req.headers,"destination");
329 if (header != req.headers.end()) {
330 return ProcessPushReq(header->second, req);
331 }
332 m_log.Emsg("ProcessReq", "COPY verb requested but no source or destination specified.");
333 return req.SendSimpleResp(400, NULL, NULL, "No Source or Destination specified", 0);
334}
static std::string PrepareURL(const std::string &input)
static std::map< std::string, T >::const_iterator caseInsensitiveFind(const std::map< std::string, T > &m, const std::string &lowerCaseSearchKey)

References XrdOucTUtils::caseInsensitiveFind(), XrdHttpExtReq::headers, PrepareURL(), XrdHttpExtReq::SendSimpleResp(), and XrdHttpExtReq::verb.

Here is the call graph for this function:

Member Data Documentation

◆ OSS_TASK_OPAQUE

std::string_view TPC::TPCHandler::OSS_TASK_OPAQUE = "oss.task=httptpc"
staticconstexpr

Definition at line 57 of file XrdHttpTpcTPC.hh.

Referenced by XrdHttpTpcUtils::prepareOpenURL().


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