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 285 of file XrdClHttpFilePlugIn.cc.

Constructor & Destructor Documentation

◆ PgReadSubstitutionHandler()

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

Definition at line 291 of file XrdClHttpFilePlugIn.cc.

292 : 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 295 of file XrdClHttpFilePlugIn.cc.

296 {
297
298 if( !status->IsOK() )
299 {
300 realHandler->HandleResponse( status, rdresp );
301 delete this;
302 return;
303 }
304
305 //using namespace XrdCl;
306
307 ChunkInfo *chunk = 0;
308 rdresp->Get(chunk);
309
310 std::vector<uint32_t> cksums;
311 if( isChannelEncrypted )
312 {
313 size_t nbpages = chunk->length / XrdSys::PageSize;
314 if( chunk->length % XrdSys::PageSize )
315 ++nbpages;
316 cksums.reserve( nbpages );
317
318 size_t size = chunk->length;
319 char *buffer = reinterpret_cast<char*>( chunk->buffer );
320
321 for( size_t pg = 0; pg < nbpages; ++pg )
322 {
323 size_t pgsize = XrdSys::PageSize;
324 if( pgsize > size ) pgsize = size;
325 uint32_t crcval = XrdOucCRC::Calc32C( buffer, pgsize );
326 cksums.push_back( crcval );
327 buffer += pgsize;
328 size -= pgsize;
329 }
330 }
331
332 PageInfo *pages = new PageInfo(chunk->offset, chunk->length, chunk->buffer, std::move(cksums));
333 delete rdresp;
334 AnyObject *response = new AnyObject();
335 response->Set( pages );
336 realHandler->HandleResponse( status, response );
337
338 delete this;
339 }
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: