XRootD
XrdCl::PgReadSubstitutionHandler Class Reference
+ Inheritance diagram for XrdCl::PgReadSubstitutionHandler:
+ Collaboration diagram for XrdCl::PgReadSubstitutionHandler:

Public Member Functions

 PgReadSubstitutionHandler (XrdCl::ResponseHandler *a, bool isHttps)
 
void HandleResponse (XrdCl::XRootDStatus *status, XrdCl::AnyObject *rdresp)
 
- Public Member Functions inherited from XrdCl::ResponseHandler
virtual ~ResponseHandler ()
 
virtual void HandleResponseWithHosts (XRootDStatus *status, AnyObject *response, HostList *hostList)
 

Additional Inherited Members

- Static Public Member Functions inherited from XrdCl::ResponseHandler
static ResponseHandlerWrap (std::function< void(XRootDStatus &, AnyObject &)> func)
 
static ResponseHandlerWrap (std::function< void(XRootDStatus *, AnyObject *)> func)
 

Detailed Description

Definition at line 287 of file XrdClHttpFilePlugIn.cc.

Constructor & Destructor Documentation

◆ PgReadSubstitutionHandler()

XrdCl::PgReadSubstitutionHandler::PgReadSubstitutionHandler ( XrdCl::ResponseHandler a,
bool  isHttps 
)
inline

Definition at line 293 of file XrdClHttpFilePlugIn.cc.

294  : realHandler(a), isChannelEncrypted(isHttps) {}

Member Function Documentation

◆ HandleResponse()

void XrdCl::PgReadSubstitutionHandler::HandleResponse ( XrdCl::XRootDStatus status,
XrdCl::AnyObject response 
)
inlinevirtual

Called when a response to associated request arrives or an error occurs

Parameters
statusstatus of the request
responsean object associated with the response (request dependent)

Reimplemented from XrdCl::ResponseHandler.

Definition at line 297 of file XrdClHttpFilePlugIn.cc.

298  {
299 
300  if( !status->IsOK() )
301  {
302  realHandler->HandleResponse( status, rdresp );
303  delete this;
304  return;
305  }
306 
307  //using namespace XrdCl;
308 
309  ChunkInfo *chunk = 0;
310  rdresp->Get(chunk);
311 
312  std::vector<uint32_t> cksums;
313  if( isChannelEncrypted )
314  {
315  size_t nbpages = chunk->length / XrdSys::PageSize;
316  if( chunk->length % XrdSys::PageSize )
317  ++nbpages;
318  cksums.reserve( nbpages );
319 
320  size_t size = chunk->length;
321  char *buffer = reinterpret_cast<char*>( chunk->buffer );
322 
323  for( size_t pg = 0; pg < nbpages; ++pg )
324  {
325  size_t pgsize = XrdSys::PageSize;
326  if( pgsize > size ) pgsize = size;
327  uint32_t crcval = XrdOucCRC::Calc32C( buffer, pgsize );
328  cksums.push_back( crcval );
329  buffer += pgsize;
330  size -= pgsize;
331  }
332  }
333 
334  PageInfo *pages = new PageInfo(chunk->offset, chunk->length, chunk->buffer, std::move(cksums));
335  delete rdresp;
336  AnyObject *response = new AnyObject();
337  response->Set( pages );
338  realHandler->HandleResponse( status, response );
339 
340  delete this;
341  }
virtual void HandleResponse(XRootDStatus *status, AnyObject *response)
static uint32_t Calc32C(const void *data, size_t count, uint32_t prevcs=0)
Definition: XrdOucCRC.cc:190
static const int PageSize
bool IsOK() const
We're fine.
Definition: XrdClStatus.hh:124

References XrdCl::ChunkInfo::buffer, XrdOucCRC::Calc32C(), XrdCl::AnyObject::Get(), XrdCl::ResponseHandler::HandleResponse(), XrdCl::Status::IsOK(), XrdCl::ChunkInfo::length, XrdCl::ChunkInfo::offset, XrdSys::PageSize, and XrdCl::AnyObject::Set().

+ Here is the call graph for this function:

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