XRootD
Loading...
Searching...
No Matches
XrdSsiTaskReal.hh
Go to the documentation of this file.
1#ifndef __XRDSSITASKREAL_HH__
2#define __XRDSSITASKREAL_HH__
3/******************************************************************************/
4/* */
5/* X r d S s i T a s k R e a l . h h */
6/* */
7/* (c) 2013 by the Board of Trustees of the Leland Stanford, Jr., University */
8/* Produced by Andrew Hanushevsky for Stanford University under contract */
9/* DE-AC02-76-SFO0515 with the Department of Energy */
10/* */
11/* This file is part of the XRootD software suite. */
12/* */
13/* XRootD is free software: you can redistribute it and/or modify it under */
14/* the terms of the GNU Lesser General Public License as published by the */
15/* Free Software Foundation, either version 3 of the License, or (at your */
16/* option) any later version. */
17/* */
18/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21/* License for more details. */
22/* */
23/* You should have received a copy of the GNU Lesser General Public License */
24/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26/* */
27/* The copyright holder's institutional names and contributor's names may not */
28/* be used to endorse or promote products derived from this software without */
29/* specific prior written permission of the institution or contributor. */
30/******************************************************************************/
31
32#include <cstdio>
33
35#include "XrdSsi/XrdSsiEvent.hh"
38
39class XrdSsiRequest;
40class XrdSsiSessReal;
41class XrdSysSemaphore;
42
44 public XrdSsiStream
45{
46public:
47
49
50void Detach(bool force=false);
51
52void Finished( XrdSsiRequest &rqstR,
53 const XrdSsiRespInfo &rInfo,
54 bool cancel=false);
55
56void *Implementation() {return (void *)this;}
57
58bool Kill();
59
60inline
61int ID() {return tskID;}
62
63inline
64void Init(XrdSsiRequest *rP, unsigned short tmo=0)
65 {rqstP = rP, tStat = isPend; tmOut = tmo; wPost = 0;
66 mhPend = false; defer = 0;
67 attList.next = attList.prev = this;
68 if (mdResp) {delete mdResp; mdResp = 0;}
69 }
70
71void PostError();
72
73const
74char *RequestID() {return rqstP->GetRequestID();}
75
76void SchedError(XrdSsiErrInfo *eInfo=0);
77
78void SendError();
79
80bool SendRequest(const char *node);
81
82int SetBuff(XrdSsiErrInfo &eRef, char *buff, int blen, bool &last);
83
84bool SetBuff(XrdSsiErrInfo &eRef, char *buff, int blen);
85
86void SetTaskID(uint32_t tid, uint32_t sid)
87 {tskID = tid;
88 snprintf(tident, sizeof(tident), "T %u#%u", sid, tid);
89 }
90
92
93void XeqEvFin();
94
97 sessP(sP), mdResp(0), wPost(0), tskID(0),
98 defer(0), mhPend(false)
99 {}
100
101 ~XrdSsiTaskReal() {if (mdResp) delete mdResp;}
102
105
107
108private:
109
110bool Ask4Resp();
111respType GetResp(XrdCl::AnyObject **respP, char *&dbuf, int &dlen);
112bool RespErr(XrdCl::XRootDStatus *status);
113
114XrdSsiErrInfo errInfo;
115XrdSsiSessReal *sessP;
116XrdSsiRequest *rqstP;
117XrdCl::AnyObject *mdResp;
118XrdSysSemaphore *wPost;
119char *dataBuff;
120int dataRlen;
121TaskStat tStat;
122uint32_t tskID;
123int defer; // Number of oustanding defer requests
124unsigned short tmOut;
125bool mhPend;
126};
127#endif
char tident[24]
const char * GetRequestID()
XrdSsiTaskReal(XrdSsiSessReal *sP)
XrdSsiTaskReal * prev
void Finished(XrdSsiRequest &rqstR, const XrdSsiRespInfo &rInfo, bool cancel=false)
int SetBuff(XrdSsiErrInfo &eRef, char *buff, int blen, bool &last)
int XeqEvent(XrdCl::XRootDStatus *status, XrdCl::AnyObject **respP)
void Init(XrdSsiRequest *rP, unsigned short tmo=0)
XrdSsiTaskReal * next
void SchedError(XrdSsiErrInfo *eInfo=0)
void * Implementation()
bool SendRequest(const char *node)
void SetTaskID(uint32_t tid, uint32_t sid)
void Detach(bool force=false)
const char * RequestID()