XRootD
Loading...
Searching...
No Matches
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 if (!chunk) {
94 delete this;
95 return;
96 }
97
98 std::vector<uint32_t> cksums;
99 size_t nbpages = chunk->length / XrdSys::PageSize;
100 if( chunk->length % XrdSys::PageSize )
101 ++nbpages;
102 cksums.reserve( nbpages );
103
104 size_t size = chunk->length;
105 char *buffer = reinterpret_cast<char*>( chunk->buffer );
106
107 for( size_t pg = 0; pg < nbpages; ++pg )
108 {
109 size_t pgsize = XrdSys::PageSize;
110 if( pgsize > size ) pgsize = size;
111 uint32_t crcval = XrdOucCRC::Calc32C( buffer, pgsize );
112 cksums.push_back( crcval );
113 buffer += pgsize;
114 size -= pgsize;
115 }
116
117 PageInfo *pages = new PageInfo(chunk->offset, chunk->length, chunk->buffer, std::move(cksums));
118 delete rdresp;
119 AnyObject *response = new AnyObject();
120 response->Set( pages );
121 realHandler->HandleResponse( status, response );
122
123 delete this;
124 }
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::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: