1#ifndef __XROOTD_PROTOCOL_H__
2#define __XROOTD_PROTOCOL_H__
58#define XRD_NEED_AUTH 2
59#define XRD_BOUNDPATH 8
62#define __attribute__(x)
177 int getData(gdCallBack *gdcbP,
const char *dtype,
178 char *buff,
int blen);
180 int getData(gdCallBack *gdcbP,
const char *dtype,
181 struct iovec *
iov,
int iovn);
183 int getDump(
const char *dtype,
int dlen);
195 void Recycle(
XrdLink *lp,
int consec,
const char *reason)
override;
203 void SetFD(
int fildes)
override;
205 int Stats(
char *buff,
int blen,
int do_sync=0)
override;
240enum RD_func {RD_chmod = 0, RD_chksum, RD_dirlist, RD_locate, RD_mkdir,
241 RD_mv, RD_prepare, RD_prepstg, RD_rm, RD_rmdir,
242 RD_stat, RD_trunc, RD_ovld, RD_client,
243 RD_openw, RD_open1, RD_open2, RD_open3, RD_open4,
251 int do_CKsum(
int canit);
252 int do_CKsum(
char *algT,
const char *
Path,
char *Opaque);
271 bool do_PgWAIO(
int &rc);
273 int do_PgWIO(
bool isFresh);
274 bool do_PgWIORetry(
int &rc);
277 int do_Prepare(
bool isQuery=
false);
282 int do_Qopaque(
short);
289 int do_ReadNone(
int &retc,
int &pathID);
306 int do_WriteNoneMsg();
310 int gdDone()
override {
return do_PgWIO(
false);}
313static int CheckSum(XrdOucStream *,
char **,
int);
315static int Config(
const char *fn);
316static bool ConfigMon(XrdProtocol_Config *pi, XrdOucEnv &xrootdEnv);
317static int ConfigSecurity(XrdOucEnv &xEnv,
const char *cfn);
318 int fsError(
int rc,
char opc, XrdOucErrInfo &myError,
319 const char *
Path,
char *Cgi);
320 int fsOvrld(
char opc,
const char *
Path,
char *Cgi);
321 int fsRedirNoEnt(
const char *
eMsg,
char *Cgi,
int popt);
322 int fsRedirPI(
const char *trg,
int port,
int trglen);
323 int getBuff(
const int isRead,
int Quantum);
324 char *getCksType(
char *opaque,
char *cspec=0,
int cslen=0);
325 int getData(
const char *dtype,
char *buff,
int blen);
327 int getDataIovCont();
329 bool logLogin(
bool xauth=
false);
330static int mapMode(
int mode);
332static int rpCheck(
char *fn,
char **opaque);
333 int rpEmsg(
const char *op,
char *fn);
334 int vpEmsg(
const char *op,
char *fn);
335static int CheckTLS(
const char *tlsProt);
336static bool ConfigFS(XrdOucEnv &xEnv,
const char *cfn);
337static bool ConfigFS(
const char *path, XrdOucEnv &xEnv,
const char *cfn);
338static bool ConfigGStream(XrdOucEnv &myEnv, XrdOucEnv *urEnv);
339static bool ConfigRedirPI(
const char*, XrdOucEnv&,
const char*,
const char*);
340static int Squash(
char *);
341 int StatGen(
struct stat &buf,
char *xxBuff,
int xxLen,
bool xa=
false);
342static int xapath(XrdOucStream &Config);
343static int xasync(XrdOucStream &Config);
344static int xcksum(XrdOucStream &Config);
345static int xbif(XrdOucStream &Config);
346static int xdig(XrdOucStream &Config);
347static int xexp(XrdOucStream &Config);
348static int xexpdo(
char *path,
int popt=0);
349static int xfsl(XrdOucStream &Config);
350static int xfsL(XrdOucStream &Config,
char *val,
int lix);
351static int xfso(XrdOucStream &Config);
352static int xgpf(XrdOucStream &Config);
353static int xprep(XrdOucStream &Config);
354static int xlog(XrdOucStream &Config);
355static int xmon(XrdOucStream &Config);
356static char *xmondest(
const char *what,
char *val);
357static int xmongs(XrdOucStream &Config);
358static bool xmongsend(XrdOucStream &Config,
char *val,
char *&dest,
359 int &opt,
int &fmt,
int &hdr);
360static int xrdl(XrdOucStream &Config);
361static char* xrdlopt(XrdOucStream &Config,
char* val);
362static int xred(XrdOucStream &Config);
363static int xred_clnt(XrdOucStream &Config,
char *hP[2],
int rPort[2]);
364static bool xred_php(
char *val,
char *hP[2],
int rPort[2],
const char *what,
366static void xred_set(RD_func func,
char *rHost[2],
int rPort[2]);
367static bool xred_xok(
int func,
char *rHost[2],
int rPort[2]);
368static int xsecl(XrdOucStream &Config);
369static int xtls(XrdOucStream &Config);
370static int xtlsr(XrdOucStream &Config);
371static int xtrace(XrdOucStream &Config);
372static int xlimit(XrdOucStream &Config);
374 int ProcFAttr(
char *faPath,
char *faCgi,
char *faArgs,
375 int faALen,
int faCode,
bool doAChk);
376 int XeqFADel(XrdSfsFACtl &ctl,
char *faVars,
int faVLen);
377 int XeqFAGet(XrdSfsFACtl &ctl,
char *faVars,
int faVLen);
378 int XeqFALsd(XrdSfsFACtl &ctl);
379 int XeqFALst(XrdSfsFACtl &ctl);
380 int XeqFASet(XrdSfsFACtl &ctl,
char *faVars,
int faVLen);
382static XrdObjectQ<XrdXrootdProtocol> ProtStack;
383XrdObject<XrdXrootdProtocol> ProtLink;
387static unsigned int getSID();
int emsg(int rc, char *msg)
class XrdBuffer * XrdSfsXioHandle
XrdSys::RAtomic< unsigned char > RAtomic_uchar
XrdSys::RAtomic< int > RAtomic_int
friend class XrdScheduler
XrdProtocol(const char *jname)
XrdSfsDio()
Constructor and destructor.
XrdSfsXio(XrdSfsXioImpl &xioimpl)
static XrdXrootdStats * SI
static const char * myInst
int SendFile(int fildes) override
XrdXrootdProtocol * VerifyStream(int &rc, int pID, bool lok=true)
static XrdSfsFileSystem * digFS
int SetSF(kXR_char *fhandle, bool seton=false)
int getData(gdCallBack *gdcbP, const char *dtype, struct iovec *iov, int iovn)
XrdNetPMark::Handle * pmHandle
static XrdNetPMark * PMark
XrdXrootdProtocol * Stream[maxStreams]
static short as_okstutter
static XrdXrootdXPath RPList
static XrdNetSocket * AdminSock
friend class XrdXrootdAdmin
static const char Req_TLSGPFile
XrdProtocol * Match(XrdLink *lp) override
struct XrdXrootdProtocol::GetDataCtl gdCtl
static bool CloseRequestCb(void *cbarg)
void SetFD(int fildes) override
static const char Req_TLSSess
static void Reclaim(XrdSfsXioHandle h)
XrdXrootdFileTable * FTab
static XrdXrootdJob * JobCKS
static XrdSysError & eDest
static unsigned int getSID()
XrdSecProtocol * AuthProt
int getData(gdCallBack *gdcbP, const char *dtype, char *buff, int blen)
XrdSfsXioHandle Claim(const char *buff, int datasz, int minasz=0) override
XrdXrootdMonitor::User Monitor
static XrdXrootdRedirPI * RedirPI
static const char * myCName
static const char Req_TLSData
XrdSfsXioHandle Swap(const char *buff, XrdSfsXioHandle h=0) override
static XrdXrootdFileLock * Locker
int(XrdXrootdProtocol::* Resume)()
static const char Req_TLSTPC
static XrdTlsContext * tlsCtx
static XrdXrootdXPath XPList
static XrdScheduler * Sched
static struct XrdXrootdProtocol::RC_Table RouteClient
int Process(XrdLink *lp) override
void Recycle(XrdLink *lp, int consec, const char *reason) override
static char * Buffer(XrdSfsXioHandle h, int *bsz)
static const char * myUName
static const char Req_TLSLogin
XrdXrootdResponse Response
int(XrdXrootdProtocol::* ResumePio)()
static const char * TraceID
static int Configure(char *parms, XrdProtocol_Config *pi)
int Stats(char *buff, int blen, int do_sync=0) override
static const int maxStreams
int getDump(const char *dtype, int dlen)
static XrdOucTList * JobCKTLST
static XrdXrootdXPath RQList
static struct XrdXrootdProtocol::RD_Table Route[RD_Num]
static XrdSecProtector * DHS
static XrdBuffManager * BPool
XrdSysSemaphore * boundRecycle
static XrdSecService * CIA
static RAtomic_int srvrAioOps
static const char * myGName
static uint64_t fsFeatures
static XrdOucReqID * PrepID
static XrdSfsFileSystem * osFS
XrdXrootdProtocol operator=(const XrdXrootdProtocol &rhs)=delete
XrdXrootd::gdCallBack * CallBack
static const int Terminate
static const int inCallBk
static const int inDataIov
static const int useBasic