#include <XrdSsiRequest.hh>
◆ PRD_Xeq
Handle incoming async stream data or error. This method is called by a stream object after a successful GetResponseData() or an asynchronous stream SetBuff() call.
- Parameters
-
eInfo | Error information. You can check if an error occurred using eInfo.hasError() or eInfo.isOK(). |
buff | Pointer to the buffer given to XrdSsiStream::SetBuff(). |
blen | The number of bytes in buff or an error indication if blen < 0. |
last | true This is the last stream segment, no more data remains. |
false | More data may remain in the stream. |
- Returns
- One of the enum PRD_Xeq: PRD_Normal - Processing completed normally, continue. PRD_Hold - Processing could not be done now, place request in the global FIFO hold queue and resume when RestartDataResponse() is called. PRD_HoldLcl - Processing could not be done now, place request in the request ID FIFO local queue and resume when RestartDataResponse() is called with the ID that was passed to the this request object constructor.
Enumerator |
---|
PRD_Normal | |
PRD_Hold | |
PRD_HoldLcl | |
◆ RDR_How
Restart a ProcessResponseData() call for a request that was previously held (see return enums on ProcessResponseData method). This is a client-side only call and is ignored server-side. When a data response is restarted, ProcessResponseData() is called again when the same parameters as existed when the call resulted in a hold action.
- Parameters
-
rhow | An enum (see below) that specifies the action to be taken. RDR_All - runs all queued responses and then deletes the queue identified by reqid, unless it is nil. RDR_Hold - sets the allowed restart count to zero and does not restart any queued responses. RDR_Immed - restarts one response if it is queued. The allowed count is left unchanged. RDR_Query - returns information about the queue but otherwise does not restart any queued responses. RDR_One - Sets the allowed restart count to one. If a response is queued, it is restarted and the count is set to zero. RDR_Post - Adds one to the allowed restart count. If a response is queued, it is restarted and one is subtracted from the allowed restart count. |
reqid | Points to the requestID associated with a hold queue. When not specified, then the global queue is used to restart responses. Note that the memory associated with the named queue may be lost if the queue is left with an allowed value > 0.To avoid this issue the call with RDR_All to clean it up when it is no longer needed (this will avoid having hung responses). |
- Returns
- Information about the queue (see struct RDR_Info).
Enumerator |
---|
RDR_All | |
RDR_Hold | |
RDR_Immed | |
RDR_Query | |
RDR_One | |
RDR_Post | |
◆ XrdSsiRequest()
XrdSsiRequest::XrdSsiRequest |
( |
const char * |
reqid = 0 , |
|
|
uint16_t |
tmo = 0 |
|
) |
| |
Constructor
- Parameters
-
reqid | Pointer to a request ID that can be used to group requests. See ProcessResponseData() and RestartDataReponse(). If reqid is nil then held responses are placed in the global queue. The pointer must be valid for the life of this object. |
tmo | The request initiation timeout value 0 equals default). |
◆ ~XrdSsiRequest()
virtual XrdSsiRequest::~XrdSsiRequest |
( |
| ) |
|
|
inlineprotectedvirtual |
Destructor. This object can only be deleted by the object creator. Once the object is passed to XrdSsiService::ProcessRequest() it may only be deleted after Finished() is called to allow the service to reclaim any resources allocated for the request object.
◆ Alert()
Send or receive a server generated alert.
The Alert() method is used server-side to send one or more alerts before a response is posted (alerts afterwards are ignored). To avoid race conditions, server-side alerts should be sent via the Responder's Alert() method. Clients must implement this method in order to receive alerts.
- Parameters
-
aMsg | Reference to the message object containing the alert message. Non-positive alert lengths cause the alert call to be ignored. You should call the message RecycleMsg() method once you have consumed the message to release its resources. |
Reimplemented in XrdSsiFileReq.
References XrdSsiRespInfoMsg::RecycleMsg().
Referenced by XrdSsiRRAgent::Alert().
◆ BindDone()
virtual void XrdSsiRequest::BindDone |
( |
| ) |
|
|
inlineprivatevirtual |
◆ CleanUp()
void XrdSsiRequest::CleanUp |
( |
| ) |
|
|
private |
◆ CopyData()
bool XrdSsiRequest::CopyData |
( |
char * |
buff, |
|
|
int |
blen |
|
) |
| |
|
private |
◆ Dispose()
virtual void XrdSsiRequest::Dispose |
( |
| ) |
|
|
inlineprivatevirtual |
◆ Finished()
bool XrdSsiRequest::Finished |
( |
bool |
cancel = false | ) |
|
Indicate that request processing has been finished. This method calls XrdSsiResponder::Finished() on the associated responder object.
Note: This method locks the object's recursive mutex.
- Parameters
-
cancel | False -> the request/response sequence completed normally. True -> the request/response sequence aborted because of an error or the client cancelled the request. |
- Returns
- true Finish accepted. Request object may be reclaimed.
-
false Finish cannot be accepted because this request object is not bound to a responder. This indicates a logic error.
◆ GetDetachTTL()
uint32_t XrdSsiRequest::GetDetachTTL |
( |
| ) |
|
|
inline |
Obtain the detached request time to live value. If the value is non-zero, the request is detached. Otherwise, it is an attached request and requires a live TCP connection during it execution.
- Returns
- The detached time to live value in seconds.
References detTTL.
◆ GetEndPoint()
std::string XrdSsiRequest::GetEndPoint |
( |
| ) |
|
Obtain the endpoint host name.
- Returns
- A string containing the endpoint host name. If a null string is returned, the endpoint has not yet been determined. Generally, the endpoint is available on the first callback to this object.
◆ GetMetadata()
const char* XrdSsiRequest::GetMetadata |
( |
int & |
dlen | ) |
|
Obtain the metadata associated with a response.
Note: This method locks the object's recursive mutex.
- Parameters
-
dlen | holds the length of the metadata after the call. |
- Returns
- =0 No metadata available, dlen has been set to zero.
-
!0 Pointer to the buffer holding the metadata, dlen has the length
◆ GetRequest()
virtual char* XrdSsiRequest::GetRequest |
( |
int & |
dlen | ) |
|
|
pure virtual |
Obtain the request data sent by a client.
This method is duplicated in XrdSsiResponder to allow calling consistency.
- Parameters
-
dlen | holds the length of the request after the call. |
- Returns
- =0 No request data available, dlen has been set to zero.
-
!0 Pointer to the buffer holding the request, dlen has the length
Implemented in XrdSsiFileReq.
◆ GetRequestID()
const char* XrdSsiRequest::GetRequestID |
( |
| ) |
|
|
inline |
Get the request ID established at object creation time.
- Returns
- Pointer to the request ID or nil if there is none.
References reqID.
Referenced by XrdSsiTaskReal::RequestID().
◆ GetResponseData()
void XrdSsiRequest::GetResponseData |
( |
char * |
buff, |
|
|
int |
blen |
|
) |
| |
Asynchronously obtain response data. This is a helper method that allows a client to deal with a passive stream response. This method also handles data response, albeit inefficiently by copying the data response. However, this allows for uniform response processing regardless of response type.
- Parameters
-
buff | pointer to the buffer to receive the data. The buffer must remain valid until ProcessResponseData() is called. |
blen | the length of the buffer (i.e. maximum that can be returned). |
◆ GetTimeOut()
uint16_t XrdSsiRequest::GetTimeOut |
( |
| ) |
|
|
inline |
Get timeout for initiating the request.
- Returns
- The timeout value.
References tOut.
◆ ProcessResponse()
Notify request that a response is ready to be processed. This method must be supplied by the request object's implementation.
- Parameters
-
eInfo | Error information. You can check if an error occurred using eInfo.hasError() or eInfo.isOK(). |
rInfo | Raw response information. |
- Returns
- true Response processed.
-
false Response could not be processed, the request is not active.
Implemented in XrdSsiFileReq.
◆ ProcessResponseData()
virtual PRD_Xeq XrdSsiRequest::ProcessResponseData |
( |
const XrdSsiErrInfo & |
eInfo, |
|
|
char * |
buff, |
|
|
int |
blen, |
|
|
bool |
last |
|
) |
| |
|
inlinevirtual |
◆ ReleaseRequestBuffer()
void XrdSsiRequest::ReleaseRequestBuffer |
( |
| ) |
|
Release the request buffer of the request bound to this object. This method duplicates the protected method RelRequestBuffer() and exists here for calling safety and consistency relative to the responder.
◆ RelRequestBuffer()
virtual void XrdSsiRequest::RelRequestBuffer |
( |
| ) |
|
|
inlineprotectedvirtual |
Release the request buffer. Use this method to optimize storage use; this is especially relevant for long-running requests. If the request buffer has been consumed and is no longer needed, early return of the buffer will minimize memory usage. This method is also invoked via XrdSsiResponder.
Note: This method is called with the object's recursive mutex locked when it is invoked via XrdSsiResponder's ReleaseRequestBuffer().
Reimplemented in XrdSsiFileReq.
◆ RestartDataResponse()
static RDR_Info XrdSsiRequest::RestartDataResponse |
( |
RDR_How |
rhow, |
|
|
const char * |
reqid = 0 |
|
) |
| |
|
static |
◆ SetDetachTTL()
void XrdSsiRequest::SetDetachTTL |
( |
uint32_t |
dttl | ) |
|
|
inlineprotected |
Set the detached request time to live value.
By default, requests are executed in the foreground (i.e. during its execution, if the TCP connection drops, the request is automatically cancelled. When a non-zero time to live is set, the request is executed in the background (i.e. detached) and no persistent TCP connection is required. You must use the XrdSsiService::Attach() method to foreground such a request within the number of seconds specified for dttl or the request is automatically cancelled. The value must be set before passing the request to XrdSsiService::ProcessRequest(). Once the request is started, a request handle is returned which can be passed to XrdSsiService::Attach().
- Parameters
-
detttl | The detach time to live value. |
References detTTL.
◆ SetTimeOut()
void XrdSsiRequest::SetTimeOut |
( |
uint16_t |
tmo | ) |
|
|
inlineprotected |
◆ XrdSsiResponder
◆ XrdSsiRRAgent
◆ detTTL
uint32_t XrdSsiRequest::detTTL |
|
private |
◆ epNode
const char* XrdSsiRequest::epNode |
|
private |
◆ errInfo
◆ onClient
bool XrdSsiRequest::onClient |
|
private |
◆ reqID
const char* XrdSsiRequest::reqID |
|
private |
◆ Resp
◆ rrMutex
◆ rsvd1
long long XrdSsiRequest::rsvd1 |
|
private |
◆ rsvd2
char XrdSsiRequest::rsvd2 |
|
private |
◆ theRespond
◆ tOut
uint16_t XrdSsiRequest::tOut |
|
private |
The documentation for this class was generated from the following file: