XRootD
Loading...
Searching...
No Matches
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.

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: