34 #include <netinet/in.h>
59 const char *Path,
int rval);
73 :
XrdJob(
"async response"),
74 cbFunc(cbp), eInfo(erp),
Path(path),
127 else {cbj->cbFunc = cbF, cbj->eInfo = erp;
128 cbj->Result = rval;cbj->Path =
Path;
144 static const char *TraceID =
"DoIt";
157 if (*(cbFunc->
Func()) ==
'c') fP = DoClose(eInfo);
158 else if (
SFS_OK == Result)
159 {
if (*(cbFunc->
Func()) ==
'o')
161 else {
if (*(cbFunc->
Func()) ==
'x') DoStatx(eInfo);
166 else cbFunc->
sendError(Result, eInfo, Path);
195 sprintf(buff,
"Invalid close() callback result of %d for", Result);
204 else cbFunc->
sendError(Result, eInfo, Path);
223 while(*tp && *tp ==
' ') tp++;
224 while(*tp && *tp !=
' ') tp++;
225 while(*tp && *tp ==
' ') tp++;
226 while(*tp && *tp !=
' ') tp++;
274 unsigned char sid1[2], sid2[2];
275 unsigned int inst1, inst2;
278 ReqID1.getID(sid1, lid1, inst1);
279 ReqID2.
getID(sid2, lid2, inst2);
291 static const char *TraceID =
"fsError";
322 if (ecode <= 0) ecode = (ecode ? -ecode : Port);
323 TRACE(REDIR, User <<
" async redir to " <<
eMsg <<
':' <<ecode <<
' '
335 TRACE(STALL,
"Stalling " <<User <<
" for " <<rc <<
" sec");
352 ecode = sprintf(buff,
"Unknown sfs response code %d", rc);
369 static const char *TraceID =
"sendResp";
370 struct iovec rspVec[4];
376 {xbuf =
static_cast<kXR_int32>(htonl(*Data));
377 rspVec[n].iov_base = (caddr_t)(&xbuf);
378 dlen = rspVec[n].iov_len =
sizeof(xbuf); n++;
381 { rspVec[n].iov_base = (caddr_t)Msg;
382 dlen += rspVec[n].iov_len = Mlen; n++;
393 "async resp aborted; user gone.");
396 theResp.
Set(ReqID.Stream());
398 <<
' ' <<Opname <<
" status " <<Status);
415 static const char *TraceID =
"sendVesp";
421 for (
int i = 1; i < ioN; i++) dlen += ioV[i].iov_len;
431 "async resp aborted; user gone.");
436 <<
' ' <<Opname <<
" status " <<Status);
static XrdSysError eDest(0,"crypto_")
XrdSysTrace XrdXrootdTrace
static int mapError(int rc)
virtual void Done(int &Result, XrdOucErrInfo *eInfo, const char *Path=0)=0
void setErrArg(unsigned long long cbarg=0)
unsigned long long getErrArg()
const char * getErrText()
int setErrInfo(int code, const char *emsg)
const char * getErrUser()
void Reset()
Reset object to no message state. Call this method to release appendages.
void Schedule(XrdJob *jp)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
XrdXrootdCBJob(XrdXrootdCallBack *cbp, XrdOucErrInfo *erp, const char *path, int rval)
static XrdXrootdCBJob * Alloc(XrdXrootdCallBack *cbF, XrdOucErrInfo *erp, const char *Path, int rval)
void Done(int &Result, XrdOucErrInfo *eInfo, const char *Path=0)
static void setVals(XrdSysError *erp, XrdXrootdStats *SIp, XrdScheduler *schp, int port)
int Same(unsigned long long arg1, unsigned long long arg2)
void sendError(int rc, XrdOucErrInfo *eInfo, const char *Path)
void sendResp(XrdOucErrInfo *eInfo, XResponseType xrt, int *Data=0, const char *Msg=0, int Mlen=0)
void sendVesp(XrdOucErrInfo *eInfo, XResponseType xrt, struct iovec *ioV, int ioN)
void setID(unsigned long long id)
unsigned long long getID()