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

Public Member Functions

 MetalinkOpenHandler (MetalinkRedirector *mr, ResponseHandler *userHandler)
 
virtual void HandleResponseWithHosts (XRootDStatus *status, AnyObject *response, HostList *hostList)
 
- Public Member Functions inherited from XrdCl::ResponseHandler
virtual ~ResponseHandler ()
 
virtual void HandleResponse (XRootDStatus *status, AnyObject *response)
 

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 156 of file XrdClMetalinkRedirector.cc.

Constructor & Destructor Documentation

◆ MetalinkOpenHandler()

XrdCl::MetalinkOpenHandler::MetalinkOpenHandler ( MetalinkRedirector mr,
ResponseHandler userHandler 
)
inline

Definition at line 162 of file XrdClMetalinkRedirector.cc.

163  :
164  pRedirector( mr ), pUserHandler( userHandler )
165  {
166  }

Member Function Documentation

◆ HandleResponseWithHosts()

virtual void XrdCl::MetalinkOpenHandler::HandleResponseWithHosts ( XRootDStatus status,
AnyObject response,
HostList hostList 
)
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)
hostListlist of hosts the request was redirected to

Reimplemented from XrdCl::ResponseHandler.

Definition at line 171 of file XrdClMetalinkRedirector.cc.

173  {
174  try
175  {
176  if( status->IsOK() )
177  {
178  delete status;
179  // download the content
180  MetalinkReadHandler *mrh = new MetalinkReadHandler( pRedirector,
181  pUserHandler );
182  XRootDStatus st = pRedirector->pFile->Read( 0, DefaultCPChunkSize,
183  mrh->GetBuffer(), mrh );
184  if( !st.IsOK() )
185  {
186  delete mrh;
187  throw new XRootDStatus( stError, errInternal );
188  } else
189  {
190  delete response;
191  delete hostList;
192  }
193  } else
194  throw status;
195  } catch( XRootDStatus *status )
196  {
197  pRedirector->FinalizeInitialization( *status );
198  // if we were not able to schedule a read
199  // pass an error to the user handler
200  if( pUserHandler )
201  pUserHandler->HandleResponseWithHosts( status, response, hostList );
202  else
203  DeallocArgs( status, response, hostList );
204  }
205 
206  delete this;
207  }
XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Definition: XrdClFile.cc:206
virtual void HandleResponseWithHosts(XRootDStatus *status, AnyObject *response, HostList *hostList)
const int DefaultCPChunkSize
const uint16_t stError
An error occurred that could potentially be retried.
Definition: XrdClStatus.hh:32
const uint16_t errInternal
Internal error.
Definition: XrdClStatus.hh:56
void DeallocArgs(XRootDStatus *status, AnyObject *response, HostList *hostList)

References XrdCl::DeallocArgs(), XrdCl::DefaultCPChunkSize, XrdCl::errInternal, XrdCl::MetalinkReadHandler::GetBuffer(), XrdCl::ResponseHandler::HandleResponseWithHosts(), XrdCl::Status::IsOK(), XrdCl::File::Read(), and XrdCl::stError.

+ Here is the call graph for this function:

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