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)
178 int getData(gdCallBack *gdcbP,
const char *dtype,
179 char *buff,
int blen);
181 int getData(gdCallBack *gdcbP,
const char *dtype,
182 struct iovec *
iov,
int iovn);
184 int getDump(
const char *dtype,
int dlen);
196 void Recycle(
XrdLink *lp,
int consec,
const char *reason)
override;
204 void SetFD(
int fildes)
override;
206 int Stats(
char *buff,
int blen,
int do_sync=0)
override;
241enum RD_func {RD_chmod = 0, RD_chksum, RD_dirlist, RD_locate, RD_mkdir,
242 RD_mv, RD_prepare, RD_prepstg, RD_rm, RD_rmdir,
243 RD_stat, RD_trunc, RD_ovld, RD_client,
244 RD_open1, RD_open2, RD_open3, RD_open4, RD_Num};
251 int do_CKsum(
int canit);
252 int do_CKsum(
char *algT,
const char *
Path,
char *Opaque);
270 bool do_PgWAIO(
int &rc);
272 int do_PgWIO(
bool isFresh);
273 bool do_PgWIORetry(
int &rc);
276 int do_Prepare(
bool isQuery=
false);
281 int do_Qopaque(
short);
288 int do_ReadNone(
int &retc,
int &pathID);
305 int do_WriteNoneMsg();
309 int gdDone()
override {
return do_PgWIO(
false);}
312static int CheckSum(XrdOucStream *,
char **,
int);
314static int Config(
const char *fn);
315static bool ConfigMon(XrdProtocol_Config *pi, XrdOucEnv &xrootdEnv);
316static int ConfigSecurity(XrdOucEnv &xEnv,
const char *cfn);
317 int fsError(
int rc,
char opc, XrdOucErrInfo &myError,
318 const char *
Path,
char *Cgi);
319 int fsOvrld(
char opc,
const char *
Path,
char *Cgi);
320 int fsRedirNoEnt(
const char *
eMsg,
char *Cgi,
int popt);
322 netInfo* fsRedirIP(
const char *trg,
int port);
323 int fsRedirPI(
const char *trg,
int port,
int trglen);
324 int getBuff(
const int isRead,
int Quantum);
325 char *getCksType(
char *opaque,
char *cspec=0,
int cslen=0);
326 int getData(
const char *dtype,
char *buff,
int blen);
328 int getDataIovCont();
330 bool logLogin(
bool xauth=
false);
331static int mapMode(
int mode);
333static int rpCheck(
char *fn,
char **opaque);
334 int rpEmsg(
const char *op,
char *fn);
335 int vpEmsg(
const char *op,
char *fn);
336static int CheckTLS(
const char *tlsProt);
337static bool ConfigFS(XrdOucEnv &xEnv,
const char *cfn);
338static bool ConfigFS(
const char *path, XrdOucEnv &xEnv,
const char *cfn);
339static bool ConfigGStream(XrdOucEnv &myEnv, XrdOucEnv *urEnv);
340static bool ConfigRedirPI(
const char*, XrdOucEnv&,
const char*,
const char*);
341static int Squash(
char *);
342 int StatGen(
struct stat &buf,
char *xxBuff,
int xxLen,
bool xa=
false);
343static int xapath(XrdOucStream &Config);
344static int xasync(XrdOucStream &Config);
345static int xcksum(XrdOucStream &Config);
346static int xbif(XrdOucStream &Config);
347static int xdig(XrdOucStream &Config);
348static int xexp(XrdOucStream &Config);
349static int xexpdo(
char *path,
int popt=0);
350static int xfsl(XrdOucStream &Config);
351static int xfsL(XrdOucStream &Config,
char *val,
int lix);
352static int xfso(XrdOucStream &Config);
353static int xgpf(XrdOucStream &Config);
354static int xprep(XrdOucStream &Config);
355static int xlog(XrdOucStream &Config);
356static int xmon(XrdOucStream &Config);
357static char *xmondest(
const char *what,
char *val);
358static int xmongs(XrdOucStream &Config);
359static bool xmongsend(XrdOucStream &Config,
char *val,
char *&dest,
360 int &opt,
int &fmt,
int &hdr);
361static int xrdl(XrdOucStream &Config);
362static char* xrdlopt(XrdOucStream &Config,
char* val);
363static int xred(XrdOucStream &Config);
364static int xred_clnt(XrdOucStream &Config,
char *hP[2],
int rPort[2]);
365static bool xred_php(
char *val,
char *hP[2],
int rPort[2],
const char *what,
367static void xred_set(RD_func func,
char *rHost[2],
int rPort[2]);
368static bool xred_xok(
int func,
char *rHost[2],
int rPort[2]);
369static int xsecl(XrdOucStream &Config);
370static int xtls(XrdOucStream &Config);
371static int xtlsr(XrdOucStream &Config);
372static int xtrace(XrdOucStream &Config);
373static int xlimit(XrdOucStream &Config);
375 int ProcFAttr(
char *faPath,
char *faCgi,
char *faArgs,
376 int faALen,
int faCode,
bool doAChk);
377 int XeqFADel(XrdSfsFACtl &ctl,
char *faVars,
int faVLen);
378 int XeqFAGet(XrdSfsFACtl &ctl,
char *faVars,
int faVLen);
379 int XeqFALsd(XrdSfsFACtl &ctl);
380 int XeqFALst(XrdSfsFACtl &ctl);
381 int XeqFASet(XrdSfsFACtl &ctl,
char *faVars,
int faVLen);
383static XrdObjectQ<XrdXrootdProtocol> ProtStack;
384XrdObject<XrdXrootdProtocol> ProtLink;
388static 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