41 #include <sys/param.h>
44 #include <sys/types.h>
121 bool VerPgw(
const char *buf, ssize_t off,
size_t len,
const uint32_t* csv,
134 n = snprintf(
eMsg,
sizeof(
eMsg),
"Checksum error at offset %lld.", (
long long) badoff);
170 tpcRdrHost{}, tpcRdrPort{}
184 myRole = strdup(
"server");
192 myPort = (bp = getenv(
"XRDPORT")) ? strtol(bp, (
char **)NULL, 10) : 0;
284 else if (!(retc =
dp->
Opendir(dir_path, Open_Env)))
285 {
fname = strdup(dir_path);
288 else {
delete dp;
dp = 0;}
352 return (
const char *)(
dname);
429 if ((retc =
dp->
StatRet(buf)))
return retc;
444 oh(
XrdOfs::dummyHandle), myTPC(0), myCKP(0),
445 dorawio(0), viaDel(0), ckpBad(false) {}
492 int OK() {hP = 0; fP = 0; poscNum = 0;
return SFS_OK;}
494 OpenHelper(
const char *path)
495 :
Path(path), hP(0), fP(0), poscNum(0) {}
507 int retc, isPosc = 0, crOpts = 0, isRW = 0, open_flag = 0;
519 if (
oh != XrdOfs::dummyHandle)
527 if (open_mode & crMask)
534 {open_flag = O_RDWR | O_CREAT | O_EXCL;
538 open_flag |= O_RDWR | O_CREAT | O_TRUNC;
543 switch(open_mode & opMask)
549 Open_Env.
Get(
"ofs.posc"))) oP.poscNum = -1;
554 Open_Env.
Get(
"ofs.posc"))) oP.poscNum = -1;
556 default: open_flag = O_RDONLY; find_flag |=
SFS_O_RDONLY;
568 int k = ((dOn && *dOn ==
'1') || strcmp(tpcKey,
"delegate") ? 1 : 0);
579 find_flag, &Open_Env)))
589 if (open_flag & O_CREAT)
593 bool overwrite_permitted =
true;
594 if (!(open_flag & O_EXCL))
595 {
if (client &&
XrdOfsFS->Authorization &&
600 overwrite_permitted =
false;
602 open_flag &= ~O_TRUNC;
606 else if (client &&
XrdOfsFS->Authorization &&
611 overwrite_permitted =
false;
628 ((open_flag << 8) | crOpts))))
630 if (retc == -EINPROGRESS)
634 if (retc != -ENOTSUP)
637 if ((open_flag & O_EXCL) && retc == -EEXIST && !overwrite_permitted)
644 open_flag = O_RDWR|O_TRUNC;
660 "open", path,
error);
677 {
char pfnbuff[MAXPATHLEN+8];
const char *pfnP;
689 if ((retc = oP.hP->PoscSet(
tident, oP.poscNum, theMode)))
699 if (!(oP.hP->Inactive()))
723 {
if (
myTPC) open_flag |= O_NOFOLLOW;
730 if ((retc = oP.fP->Open(path, open_flag, theMode, Open_Env)))
732 if (retc == -EINPROGRESS)
737 if (retc == -EDESTADDRREQ)
738 {
char *url = Open_Env.
Get(
"FileURL");
741 if (
XrdOfsFS->Balancer && retc == -ENOENT)
749 {
if ((retc = oP.fP->Fchmod(
static_cast<mode_t
>(theMode|
XRDSFS_POSCPEND))))
756 if (oP.fP->isCompressed() > 0)
757 {oP.hP->isCompressed = 1;
760 oP.hP->Activate(oP.fP);
765 #if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__))
768 int theFD = oP.fP->getFD();
769 if (theFD >= 0 && fadFails < 4096)
770 if (posix_fadvise(theFD, 0, 0, POSIX_FADV_SEQUENTIAL) < 0)
771 {
OfsEroute.
Emsg(epname, errno,
"fadsize for sequential I/O.");
820 int poscNum, retc, cRetc = 0;
830 if (
oh == XrdOfs::dummyHandle)
836 hP =
oh;
oh = XrdOfs::dummyHandle;
891 {
long long FSize, *retsz;
892 char pathbuff[MAXPATHLEN+8];
896 if (!(hP->
Retire(cRetc, retsz, pathbuff,
sizeof(pathbuff))))
921 "handle checkpoint", (
const char *)0);
926 "handle disabled checkpoint", (
const char *)0);
932 "(only delete or restore possible) for",
oh->
Name());
938 ckpName =
"create checkpoint for";
939 if ((rc = CreateCKP()))
return rc;
943 ckpName =
"delete checkpoint for";
944 if (!
myCKP) rc = ENOENT;
952 ckpName =
"query checkpoint for";
953 if (!range || n <= 0)
955 "query checkpoint limits for",
oh->
Name());
959 ckpName =
"restore checkpoint for";
960 if (!
myCKP) rc = ENOENT;
973 ckpName =
"checkpoint truncate";
974 if (!range) rc = EINVAL;
975 else if (!
myCKP) rc = ENOENT;
979 ckpName =
"checkpoint write";
980 if (!range || n <= 0) rc = EINVAL;
981 else if (!
myCKP) rc = ENOENT;
986 "decode checkpoint request for",
oh->
Name());
1003 int XrdOfsFile::CreateCKP()
1009 "create checkpoint for",
oh->
Name());
1014 "create checkpoint for R/O",
oh->
Name());
1020 "create checkpoint for POSC file",
oh->
Name());
1028 "create proxy checkpoint");
1054 out_error.
setErrInfo(ENOTSUP,
"fctl operation not supported");
1066 static const char *fctlArg =
"ofs.tpc cancel";
1067 static const int fctlAsz = 15;
1071 if (cmd !=
SFS_FCTL_SPEC1 || !args || alen < fctlAsz || strcmp(fctlArg,args))
1118 #if _FILE_OFFSET_BITS!=64
1119 if (offset > 0x000000007fffffff)
1131 (off_t)offset, (
size_t)rdlen, csvec, pgOpts));
1164 #if _FILE_OFFSET_BITS!=64
1165 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
1212 #if _FILE_OFFSET_BITS!=64
1213 if (offset > 0x000000007fffffff)
1231 (off_t)offset, (
size_t)wrlen, csvec, pgOpts));
1277 #if _FILE_OFFSET_BITS!=64
1278 if (aiop->sfsAio.aio_offset > 0x000000007fffffff)
1323 FTRACE(
read,
"preread " <<blen <<
"@" <<offset);
1327 #if _FILE_OFFSET_BITS!=64
1328 if (offset > 0x000000007fffffff)
1334 if ((retc =
oh->
Select().
Read((off_t)offset, (
size_t)blen)) < 0)
1370 #if _FILE_OFFSET_BITS!=64
1371 if (offset > 0x000000007fffffff)
1379 (off_t)offset, (
size_t)blen))
1381 (off_t)offset, (
size_t)blen)));
1453 #if _FILE_OFFSET_BITS!=64
1499 #if _FILE_OFFSET_BITS!=64
1500 if (offset > 0x000000007fffffff)
1513 (off_t)offset, (
size_t)blen));
1550 #if _FILE_OFFSET_BITS!=64
1709 if (
sizeof(off_t) <
sizeof(flen) && flen > 0x000000007fffffff)
1758 void XrdOfsFile::GenFWEvent()
1808 char buff[MAXPATHLEN+8];
1814 {einfo.
setErrInfo(ENOTSUP,
"Checksums are not supported.");
1821 rc = cksData.
Set(csName);
1823 {
if (rc && (rc = Cks->
Size(csName)))
1825 strcpy(buff, csName); strcat(buff,
" checksum not supported.");
1833 {strcpy(buff, csName);
1834 strcat(buff,
" checksum path not specified.");
1853 return Emsg(epname, einfo, rc,
"checksum",
Path);
1860 {
if (client) cksData.envP = &cksEnv;
1861 else cksData.envP = (einfo.
getEnv() ? einfo.
getEnv() : &cksEnv);
1868 else {einfo.
setErrInfo(EINVAL,
"Invalid checksum function.");
1875 if (rc >= 0 || rc == -
ENOATTR || rc == -ESTALE || rc == -ESRCH)
1877 if (rc >= 0 || rc == -
ENODATA || rc == -ESTALE || rc == -ESRCH)
1879 {
if (rc >= 0) {cksData.
Get(buff, MAXPATHLEN); rc = 0;}
1880 else {*buff = 0; rc = -rc;}
1887 return Emsg(epname, einfo, rc,
"checksum",
Path);
1928 sprintf(buff,
"%o",
static_cast<int>(acc_mode));
1929 if (Forward(retc,einfo,
fwdCHMOD,path,buff,&chmod_Env))
return retc;
1931 else if ((retc =
Finder->
Locate(einfo, path, locFlags, &chmod_Env)))
1938 return XrdOfsFS->
Emsg(epname, einfo, retc,
"change", path);
1939 if (S_ISDIR(
Stat.st_mode)) acc_mode = (acc_mode |
dMask[0]) &
dMask[1];
1940 else acc_mode = (acc_mode |
fMask[0]) &
fMask[1];
1955 return XrdOfsFS->
Emsg(epname, einfo, retc,
"change", path);
2037 if (retc == -ENOENT)
2044 return XrdOfsFS->
Emsg(epname, einfo, retc,
"locate", path);
2062 buff += n; blen -= n;
2110 sprintf(buff,
"%o",
static_cast<int>(acc_mode));
2112 path, buff, &mkdir_Env))
return retc;
2114 else if ((retc =
Finder->
Locate(einfo,path,LocOpts,&mkdir_Env)))
2120 if ((retc =
XrdOfsOss->
Mkdir(path, acc_mode, mkpath, &mkdir_Env)))
2121 return XrdOfsFS->
Emsg(epname, einfo, retc,
"mkdir", path);
2133 {
if (!mkpath) Balancer->
Added(path);
2134 else {
char *slash, *myPath = strdup(path);
2135 do {Balancer->
Added(myPath);
2136 if ((slash = rindex(myPath,
'/'))) *slash = 0;
2137 }
while(slash && slash != myPath);
2171 return prepHandler->
query(pargs, out_error, client);
2173 return prepHandler->
cancel(pargs, out_error, client);
2175 return prepHandler->
begin(pargs, out_error, client);
2183 return fsError(out_error, retc);
2191 int XrdOfs::remove(
const char type,
2213 XTRACE(remove, path, type);
2224 {
if (Forward(retc, einfo, *fSpec, path, 0, &rem_Env))
return retc;}
2225 else if ((retc =
Finder->
Locate(einfo, path, LocOpts, &rem_Env)))
2233 if (evsObject->
Enabled(theEvent))
2235 evsObject->
Notify(theEvent, evInfo);
2247 if (retc)
return XrdOfsFS->
Emsg(epname, einfo, retc,
"remove", path);
2249 if (Balancer) Balancer->
Removed(path);
2258 const char *new_name,
2282 XTRACE(
rename, new_name,
"old fn=" <<old_name <<
" new ");
2294 if (client) client->
eaAPI->
Add(
"request.name",
"",
true);
2298 bool cannot_overwrite =
false;
2299 if (client &&
XrdOfsFS->Authorization &&
2301 {cannot_overwrite =
true;
2309 {
if (Forward(retc,einfo,
fwdMV,old_name,new_name,&old_Env,&new_Env))
2312 else if ((retc =
Finder->
Locate(einfo, old_name, LocOpts, &old_Env)))
2320 new_name, infoN, &new_Env);
2330 if (cannot_overwrite)
2332 if (
SFS_OK !=
exists(new_name, exists_flag, einfo, client, infoN))
2340 einfo.
setErrInfo(EPERM,
"Overwrite of existing data not permitted");
2341 return fsError(einfo, -EPERM);
2347 if ((retc =
XrdOfsOss->
Rename(old_name, new_name, &old_Env, &new_Env)))
2348 {
return XrdOfsFS->
Emsg(epname, einfo, retc,
"rename", old_name);
2351 if (Balancer) {Balancer->
Removed(old_name);
2352 Balancer->
Added(new_name);
2397 return XrdOfsFS->
Emsg(epname, einfo, retc,
"locate", path);
2445 else if ((-ENOMSG) != retc)
2446 return XrdOfsFS->
Emsg(epname, einfo, retc,
"locate", path);
2486 sprintf(xSz,
"%lld",
static_cast<long long>(Size));
2487 if (Forward(retc,einfo,
fwdTRUNC,path,xSz,&trunc_Env))
return retc;
2506 return XrdOfsFS->
Emsg(epname, einfo, retc,
"trunc", path);
2547 char buffer[MAXPATHLEN+80];
2556 if (strcmp(
"read", op) && strcmp(
"readv", op) && strcmp(
"pgRead", op) &&
2557 strcmp(
"write",op) && strcmp(
"pgwrite",op)) {
2558 if (ecode < 0) ecode = -ecode;
2559 if (ecode == EBUSY)
return 5;
2563 if (ecode == ETIMEDOUT)
return OSSDelay;
2590 const char *XrdOfs::Fname(
const char *path)
2592 int i = strlen(path)-1;
2593 while(i)
if (path[i] ==
'/')
return &path[i+1];
2602 int XrdOfs::Forward(
int &Result,
XrdOucErrInfo &Resp,
struct fwdOpt &Fwd,
2603 const char *arg1,
const char *arg2,
2608 if ((retc =
Finder->
Forward(Resp, Fwd.Cmd, arg1, arg2, Env1, Env2)))
2609 {Result =
fsError(Resp, retc);
2615 return (Fwd.Port ? 0 : 1);
2646 static const char *fmt =
"oss.cgroup=all&oss.space=%llu&oss.free=%llu"
2647 "&oss.maxf=%llu&oss.used=%llu&oss.quota=-1";
2649 unsigned long long totSpace, totFree, maxFree;
2658 n = sscanf(bP,
"%c %llu %llu %llu", &qsFmt, &totSpace, &totFree, &maxFree);
2662 if (n != 4 || qsFmt !=
'A')
2663 {myError.
setErrInfo(ENOTSUP,
"space fctl operation not supported by cmsd");
2669 totSpace = totSpace << 20LL;
2670 totFree = totFree << 20LL;
2671 maxFree = maxFree << 20LL;
2675 blen = snprintf(bP,blen,fmt,totSpace,totFree,maxFree,(totSpace-totFree));
2686 char *
Path,
int Plen)
2689 *Opq = index(Args,
'?');
2690 if (!(*Opq))
return Args;
2692 if (xlen >= Plen) xlen = Plen-1;
2693 strncpy(
Path, Args, xlen);
2706 const char *msgfmt =
"File %s is being %s; "
2707 "estimated time to completion %s";
2712 char Mbuff[2048], Tbuff[32];
2713 const char *What =
"staged";
2717 if (stime < 0) {stime = 60; What =
"created";}
2721 snprintf(Mbuff,
sizeof(Mbuff)-1, msgfmt,
2722 Fname(path), What,
WaitTime(stime, Tbuff,
sizeof(Tbuff)));
2723 ZTRACE(delay,
"Stall " <<stime <<
": " <<Mbuff <<
" for " <<path);
2772 if ((poscNum = oh->
PoscGet(theMode))) poscQ->
Del(oh->
Name(), poscNum, 1);
2795 snprintf(buff,blen,
"%d second%s",sec,(sec > 1 ?
"s" :
""));
2797 {
if (sec > 10) min++;
2798 snprintf(buff,blen,
"%d minute%s",min,(min > 1 ?
"s" :
""));
2802 snprintf(buff,blen,
"%d minutes",min+60);
2803 else snprintf(buff,blen,
"%d hour and %d minutes",hr,min);
2804 else {
if (min > 30) hr++;
2805 snprintf(buff,blen,
"%d hours",hr);
2811 buff[blen-1] =
'\0';
@ AOP_Delete
rm() or rmdir()
@ AOP_Update
open() r/w or append
@ AOP_Create
open() with create
@ AOP_Stat
exists(), stat()
@ AOP_Rename
mv() for source
@ AOP_Read
open() r/o, prepare()
@ AOP_Excl_Create
open() with O_EXCL|O_CREAT
@ AOP_Insert
mv() for target
@ AOP_Excl_Insert
mv() where destination doesn't exist.
#define XTRACE(act, target, x)
#define OOIDENTENV(usr, env)
#define AUTHORIZE(usr, env, optype, action, pathp, edata)
XrdSysTrace OfsTrace("ofs")
int stat(const char *path, struct stat *buf)
struct dirent * readdir(DIR *dirp)
int fstat(int fildes, struct stat *buf)
DIR * opendir(const char *path)
XrdOucTList * paths
List of paths.
@ XrdSfsFileExistIsDirectory
long long XrdSfsFileOffset
virtual XrdAccPrivs Access(const XrdSecEntity *Entity, const char *path, const Access_Operation oper, XrdOucEnv *Env=0)=0
int Set(const char *csName)
int Get(char *Buff, int Blen)
virtual int Get(const char *Xfn, XrdCksData &Cks)=0
virtual int Size(const char *Name=0)=0
virtual int Calc(const char *Xfn, XrdCksData &Cks, int doSet=1)=0
virtual void Added(const char *path, int Pend=0)
virtual int Prepare(XrdOucErrInfo &Resp, XrdSfsPrep &pargs, XrdOucEnv *Info=0)
virtual void Removed(const char *path)
virtual int Forward(XrdOucErrInfo &Resp, const char *cmd, const char *arg1=0, const char *arg2=0, XrdOucEnv *Env1=0, XrdOucEnv *Env2=0)
virtual int Locate(XrdOucErrInfo &Resp, const char *path, int flags, XrdOucEnv *Info=0)=0
int autoStat(struct stat *buf)
int open(const char *dirName, const XrdSecEntity *client, const char *opaque=0)
void Wait4Event(const char *path, XrdOucErrInfo *einfo)
void Notify(Event eNum, XrdOfsEvsInfo &Info)
int Enabled(Event theEvents)
XrdOfsFile(XrdOucErrInfo &eInfo, const char *user)
int getCXinfo(char cxtype[4], int &cxrsz)
int checkpoint(XrdSfsFile::cpAct act, struct iov *range=0, int n=0)
XrdSfsXferSize pgWrite(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize wrlen, uint32_t *csvec, uint64_t opts=0)
XrdSfsXferSize write(XrdSfsFileOffset fileOffset, const char *buffer, XrdSfsXferSize buffer_size)
int truncate(XrdSfsFileOffset fileOffset)
int read(XrdSfsFileOffset fileOffset, XrdSfsXferSize amount)
XrdSfsXferSize readv(XrdOucIOVec *readV, int readCount)
int open(const char *fileName, XrdSfsFileOpenMode openMode, mode_t createMode, const XrdSecEntity *client, const char *opaque=0)
XrdSfsXferSize pgRead(XrdSfsFileOffset offset, char *buffer, XrdSfsXferSize rdlen, uint32_t *csvec, uint64_t opts=0)
int getMmap(void **Addr, off_t &Size)
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &eInfo)=0
int stat(struct stat *buf)
int Retire(int &retc, long long *retsz=0, char *buff=0, int blen=0)
static void Hide(const char *thePath)
int PoscGet(short &Mode, int Done=0)
void Suppress(int rrc=-EDOM, int wrc=-EDOM)
static int Alloc(const char *thePath, int Opts, XrdOfsHandle **Handle)
int Del(const char *Lfn, int Offset, int Unlink=0)
int Commit(const char *Lfn, int Offset)
int Add(const char *Tident, const char *Lfn, bool isNew)
virtual int cancel(XrdSfsPrep &pargs, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0)=0
virtual int begin(XrdSfsPrep &pargs, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0)=0
virtual int query(XrdSfsPrep &pargs, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0)=0
struct XrdOfsStats::StatsData Data
int Report(char *Buff, int Blen)
static int Authorize(XrdOfsTPC **theTPC, Facts &Args, int isPLE=0)
virtual int Sync(XrdOucErrInfo *error)
static int Validate(XrdOfsTPC **theTPC, Facts &Args)
void Connect(const XrdSecEntity *client=0)
int chmod(const char *Name, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
int truncate(const char *Name, XrdSfsFileOffset fileOffset, XrdOucErrInfo &out_error, const XrdSecEntity *client=0, const char *opaque=0)
void Disc(const XrdSecEntity *client=0)
int prepare(XrdSfsPrep &pargs, XrdOucErrInfo &out_error, const XrdSecEntity *client=0)
const char * Split(const char *Args, const char **Opq, char *Path, int Plen)
char * WaitTime(int, char *, int)
int mkdir(const char *dirName, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
int chksum(csFunc Func, const char *csName, const char *Path, XrdOucErrInfo &out_error, const XrdSecEntity *client=0, const char *opaque=0)
int rename(const char *oldFileName, const char *newFileName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *infoO=0, const char *infoN=0)
static int Emsg(const char *, XrdOucErrInfo &, int, const char *x, XrdOfsHandle *hP)
static int fsError(XrdOucErrInfo &myError, int rc)
int FSctl(const int cmd, XrdSfsFSctl &args, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0)
int stat(const char *Name, struct stat *buf, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
int getStats(char *buff, int blen)
int Stall(XrdOucErrInfo &, int, const char *)
int exists(const char *fileName, XrdSfsFileExistence &exists_flag, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
void Unpersist(XrdOfsHandle *hP, int xcev=1)
virtual int StatRet(struct stat *buff)
virtual int isCompressed(char *cxidp=0)
virtual int Opendir(const char *path, XrdOucEnv &env)
virtual int Ftruncate(unsigned long long flen)
virtual int Readdir(char *buff, int blen)
virtual int Fstat(struct stat *buf)
static const uint64_t Verify
all: Verify checksums
virtual ssize_t ReadRaw(void *buffer, off_t offset, size_t size)
virtual int Close(long long *retsz=0)=0
virtual ssize_t Read(off_t offset, size_t size)
virtual int Fctl(int cmd, int alen, const char *args, char **resp=0)
virtual int Fchmod(mode_t mode)
static const int Fctl_ckpObj
virtual ssize_t pgWrite(void *buffer, off_t offset, size_t wrlen, uint32_t *csvec, uint64_t opts)
virtual ssize_t pgRead(void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts)
static const uint16_t DF_isProxy
Object is a proxy object.
virtual off_t getMmap(void **addr)
virtual ssize_t ReadV(XrdOucIOVec *readV, int rdvcnt)
virtual ssize_t Write(const void *buffer, off_t offset, size_t size)
virtual int Mkdir(const char *path, mode_t mode, int mkpath=0, XrdOucEnv *envP=0)=0
virtual int Create(const char *tid, const char *path, mode_t mode, XrdOucEnv &env, int opts=0)=0
virtual XrdOssDF * newDir(const char *tident)=0
virtual void Connect(XrdOucEnv &env)
virtual int Chmod(const char *path, mode_t mode, XrdOucEnv *envP=0)=0
virtual void Disc(XrdOucEnv &env)
virtual int Lfn2Pfn(const char *Path, char *buff, int blen)
virtual int Remdir(const char *path, int Opts=0, XrdOucEnv *envP=0)=0
virtual int Rename(const char *oPath, const char *nPath, XrdOucEnv *oEnvP=0, XrdOucEnv *nEnvP=0)=0
virtual XrdOssDF * newFile(const char *tident)=0
virtual int Truncate(const char *path, unsigned long long fsize, XrdOucEnv *envP=0)=0
virtual int Stats(char *buff, int blen)
virtual int Stat(const char *path, struct stat *buff, int opts=0, XrdOucEnv *envP=0)=0
virtual int Unlink(const char *path, int Opts=0, XrdOucEnv *envP=0)=0
virtual void Finished()=0
virtual int Restore(bool *readok=0)=0
virtual int Query(struct iov &range)=0
virtual int Write(struct iov *&range, int rnum)=0
virtual int Truncate(struct iov *&range)=0
static int Format(char *buff, int blen, int ecode, const char *etxt1, const char *etxt2=0)
char * Get(const char *varname)
void clear()
Reset data and error information to null. Any appenadges are released.
int setErrInfo(int code, const char *emsg)
char * getMsgBuff(int &mblen)
const char * getErrUser()
static void csCalc(const char *data, off_t offs, size_t count, uint32_t *csval)
static bool csVer(dataInfo &dInfo, off_t &bado, int &badc)
static const char * tpcDlgOn
static const char * tpcKey
bool Add(XrdSecAttr &attr)
XrdSecEntityAttr * eaAPI
non-const API to attributes
virtual void doneRead()=0
virtual void doneWrite()=0
static const uint64_t Verify
Options for pgRead() and pgWrite() as noted below.
@ cpTrunc
Truncate a file within checkpoint.
@ cpDelete
Delete an existing checkpoint.
@ cpRestore
Restore an active checkpoint and delete it.
@ cpWrite
Add data to an existing checkpoint.
@ cpQuery
Return checkpoint limits.
@ cpCreate
Create a checkpoint, one must not be active.
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
static const int uUrlOK
ucap: Supports async responses
static const int uLclF
ucap: Client is on a private net