XRootD
XrdCl::EcPgReadResponseHandler Class Reference

#include <XrdClEcHandler.hh>

+ Inheritance diagram for XrdCl::EcPgReadResponseHandler:
+ Collaboration diagram for XrdCl::EcPgReadResponseHandler:

Public Member Functions

 EcPgReadResponseHandler (ResponseHandler *a)
 
void HandleResponse (XRootDStatus *status, 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 71 of file XrdClEcHandler.hh.

Constructor & Destructor Documentation

◆ EcPgReadResponseHandler()

XrdCl::EcPgReadResponseHandler::EcPgReadResponseHandler ( ResponseHandler a)
inline

Definition at line 77 of file XrdClEcHandler.hh.

77 : realHandler(a) {}

Member Function Documentation

◆ HandleResponse()

void XrdCl::EcPgReadResponseHandler::HandleResponse ( XRootDStatus status,
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 80 of file XrdClEcHandler.hh.

82  {
83  if( !status->IsOK() )
84  {
85  realHandler->HandleResponse( status, rdresp );
86  delete this;
87  return;
88  }
89 
90  ChunkInfo *chunk = 0;
91  rdresp->Get(chunk);
92 
93  std::vector<uint32_t> cksums;
94  size_t nbpages = chunk->length / XrdSys::PageSize;
95  if( chunk->length % XrdSys::PageSize )
96  ++nbpages;
97  cksums.reserve( nbpages );
98 
99  size_t size = chunk->length;
100  char *buffer = reinterpret_cast<char*>( chunk->buffer );
101 
102  for( size_t pg = 0; pg < nbpages; ++pg )
103  {
104  size_t pgsize = XrdSys::PageSize;
105  if( pgsize > size ) pgsize = size;
106  uint32_t crcval = XrdOucCRC::Calc32C( buffer, pgsize );
107  cksums.push_back( crcval );
108  buffer += pgsize;
109  size -= pgsize;
110  }
111 
112  PageInfo *pages = new PageInfo(chunk->offset, chunk->length, chunk->buffer, std::move(cksums));
113  delete rdresp;
114  AnyObject *response = new AnyObject();
115  response->Set( pages );
116  realHandler->HandleResponse( status, response );
117 
118  delete this;
119  }
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

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: